[
  {
    "path": ".gitattributes",
    "content": "###############################################################################\n# Set default behavior to automatically normalize line endings.\n###############################################################################\n* text=auto\n\n###############################################################################\n# Set default behavior for command prompt diff.\n#\n# This is need for earlier builds of msysgit that does not have it on by\n# default for csharp files.\n# Note: This is only used by command line\n###############################################################################\n#*.cs     diff=csharp\n\n###############################################################################\n# Set the merge driver for project and solution files\n#\n# Merging from the command prompt will add diff markers to the files if there\n# are conflicts (Merging from VS is not affected by the settings below, in VS\n# the diff markers are never inserted). Diff markers may cause the following \n# file extensions to fail to load in VS. An alternative would be to treat\n# these files as binary and thus will always conflict and require user\n# intervention with every merge. To do so, just uncomment the entries below\n###############################################################################\n#*.sln       merge=binary\n#*.csproj    merge=binary\n#*.vbproj    merge=binary\n#*.vcxproj   merge=binary\n#*.vcproj    merge=binary\n#*.dbproj    merge=binary\n#*.fsproj    merge=binary\n#*.lsproj    merge=binary\n#*.wixproj   merge=binary\n#*.modelproj merge=binary\n#*.sqlproj   merge=binary\n#*.wwaproj   merge=binary\n\n###############################################################################\n# behavior for image files\n#\n# image files are treated as binary by default.\n###############################################################################\n#*.jpg   binary\n#*.png   binary\n#*.gif   binary\n\n###############################################################################\n# diff behavior for common document formats\n# \n# Convert binary document formats to text before diffing them. This feature\n# is only available from the command line. Turn it on by uncommenting the \n# entries below.\n###############################################################################\n#*.doc   diff=astextplain\n#*.DOC   diff=astextplain\n#*.docx  diff=astextplain\n#*.DOCX  diff=astextplain\n#*.dot   diff=astextplain\n#*.DOT   diff=astextplain\n#*.pdf   diff=astextplain\n#*.PDF   diff=astextplain\n#*.rtf   diff=astextplain\n#*.RTF   diff=astextplain\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore\n\n# User-specific files\n*.rsuser\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Mono auto generated files\nmono_crash.*\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\n[Ww][Ii][Nn]32/\n[Aa][Rr][Mm]/\n[Aa][Rr][Mm]64/\nbld/\n[Bb]in/\n[Oo]bj/\n[Oo]ut/\n[Ll]og/\n[Ll]ogs/\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# Visual Studio 2017 auto generated files\nGenerated\\ Files/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUnit\n*.VisualState.xml\nTestResult.xml\nnunit-*.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# Benchmark Results\nBenchmarkDotNet.Artifacts/\n\n# .NET Core\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n\n# ASP.NET Scaffolding\nScaffoldingReadMe.txt\n\n# StyleCop\nStyleCopReport.xml\n\n# Files built by Visual Studio\n*_i.c\n*_p.c\n*_h.h\n*.ilk\n*.meta\n*.obj\n*.iobj\n*.pch\n*.pdb\n*.ipdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*_wpftmp.csproj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# Visual Studio Trace Files\n*.e2e\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# AxoCover is a Code Coverage Tool\n.axoCover/*\n!.axoCover/settings.json\n\n# Coverlet is a free, cross platform Code Coverage Tool\ncoverage*.json\ncoverage*.xml\ncoverage*.info\n\n# Visual Studio code coverage results\n*.coverage\n*.coveragexml\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# Note: Comment the next line if you want to checkin your web deploy settings,\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# NuGet Symbol Packages\n*.snupkg\n# The packages folder can be ignored because of Package Restore\n**/[Pp]ackages/*\n# except build/, which is used as an MSBuild target.\n!**/[Pp]ackages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/[Pp]ackages/repositories.config\n# NuGet v3's project.json files produces more ignorable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n*.appx\n*.appxbundle\n*.appxupload\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!?*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\norleans.codegen.cs\n\n# Including strong name files can present a security risk\n# (https://github.com/github/gitignore/pull/2483#issue-259490424)\n#*.snk\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\nServiceFabricBackup/\n*.rptproj.bak\n\n# SQL Server files\n*.mdf\n*.ldf\n*.ndf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n*.rptproj.rsuser\n*- [Bb]ackup.rdl\n*- [Bb]ackup ([0-9]).rdl\n*- [Bb]ackup ([0-9][0-9]).rdl\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\nnode_modules/\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)\n*.vbw\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# CodeRush personal settings\n.cr/personal\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n\n# Cake - Uncomment if you are using it\n# tools/**\n# !tools/packages.config\n\n# Tabs Studio\n*.tss\n\n# Telerik's JustMock configuration file\n*.jmconfig\n\n# BizTalk build output\n*.btp.cs\n*.btm.cs\n*.odx.cs\n*.xsd.cs\n\n# OpenCover UI analysis results\nOpenCover/\n\n# Azure Stream Analytics local run output\nASALocalRun/\n\n# MSBuild Binary and Structured Log\n*.binlog\n\n# NVidia Nsight GPU debugger configuration file\n*.nvuser\n\n# MFractors (Xamarin productivity tool) working folder\n.mfractor/\n\n# Local History for Visual Studio\n.localhistory/\n\n# BeatPulse healthcheck temp database\nhealthchecksdb\n\n# Backup folder for Package Reference Convert tool in Visual Studio 2017\nMigrationBackup/\n\n# Ionide (cross platform F# VS Code tools) working folder\n.ionide/\n\n# Fody - auto-generated XML schema\nFodyWeavers.xsd\n/MoeVoiceStudioSvc - Core - Cmd/Modules/README.md\n/Lib\n/MoeVoiceStudioSvc - Core - Cmd/output.wav\n/MoeVoiceStudioSvc - Core - Cmd/input.wav\n/fish-speech.cpp/ggml\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"libsvc-tensorlib\"]\n    path = libsvc-tensorlib\n\turl = https://github.com/NaruseMioShirakana/libsvc\n"
  },
  {
    "path": "BasicDict.json",
    "content": "{\n\"_\" : [\"_\"],\n\",\" : [\",\"],\n\".\" : [\".\"],\n\"!\" : [\"!\"],\n\"?\" : [\"?\"],\n\"-\" : [\"-\"],\n\"~\" : [\"~\"],\n\"…\" : [\"…\"],\n\"A\" : [\"A\"],\n\"E\" : [\"E\"],\n\"I\" : [\"I\"],\n\"N\" : [\"N\"],\n\"O\" : [\"O\"],\n\"Q\" : [\"Q\"],\n\"U\" : [\"U\"],\n\"a\" : [\"a\"],\n\"b\" : [\"b\"],\n\"d\" : [\"d\"],\n\"e\" : [\"e\"],\n\"f\" : [\"f\"],\n\"g\" : [\"g\"],\n\"h\" : [\"h\"],\n\"i\" : [\"i\"],\n\"j\" : [\"j\"],\n\"k\" : [\"k\"],\n\"m\" : [\"m\"],\n\"n\" : [\"n\"],\n\"o\" : [\"o\"],\n\"p\" : [\"p\"],\n\"r\" : [\"r\"],\n\"s\" : [\"s\"],\n\"t\" : [\"t\"],\n\"u\" : [\"u\"],\n\"v\" : [\"v\"],\n\"w\" : [\"w\"],\n\"y\" : [\"y\"],\n\"z\" : [\"z\"],\n\"ʃ\" : [\"ʃ\"],\n\"ʧ\" : [\"ʧ\"],\n\"ʦ\" : [\"ʦ\"],\n\"↓\" : [\"↓\"],\n\"↑\" : [\"↑\"],\n\" \" : [\" \"]\n}"
  },
  {
    "path": "Bert/bert-base-japanese-v3/Tokenizer.json",
    "content": "{\n    \"Type\": \"WordPiece\",\n    \"ContinuingSubwordPrefix\": \"##\",\n    \"UseSplit\" : true,\n    \"Vocab\": [\"[PAD]\",\n        \"[UNK]\",\n        \"[CLS]\",\n        \"[SEP]\",\n        \"[MASK]\",\n        \"[unused0]\",\n        \"[unused1]\",\n        \"[unused2]\",\n        \"[unused3]\",\n        \"[unused4]\",\n        \"[unused5]\",\n        \"[unused6]\",\n        \"[unused7]\",\n        \"[unused8]\",\n        \"[unused9]\",\n        \" \",\n        \"!\",\n        \"\\\"\",\n        \"#\",\n        \"$\",\n        \"%\",\n        \"&\",\n        \"'\",\n        \"(\",\n        \")\",\n        \"*\",\n        \"+\",\n        \",\",\n        \"-\",\n        \".\",\n        \"/\",\n        \"0\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\",\n        \"6\",\n        \"7\",\n        \"8\",\n        \"9\",\n        \":\",\n        \";\",\n        \"<\",\n        \"=\",\n        \">\",\n        \"?\",\n        \"@\",\n        \"A\",\n        \"B\",\n        \"C\",\n        \"D\",\n        \"E\",\n        \"F\",\n        \"G\",\n        \"H\",\n        \"I\",\n        \"J\",\n        \"K\",\n        \"L\",\n        \"M\",\n        \"N\",\n        \"O\",\n        \"P\",\n        \"Q\",\n        \"R\",\n        \"S\",\n        \"T\",\n        \"U\",\n        \"V\",\n        \"W\",\n        \"X\",\n        \"Y\",\n        \"Z\",\n        \"[\",\n        \"\\\\\",\n        \"]\",\n        \"^\",\n        \"_\",\n        \"`\",\n        \"a\",\n        \"b\",\n        \"c\",\n        \"d\",\n        \"e\",\n        \"f\",\n        \"g\",\n        \"h\",\n        \"i\",\n        \"j\",\n        \"k\",\n        \"l\",\n        \"m\",\n        \"n\",\n        \"o\",\n        \"p\",\n        \"q\",\n        \"r\",\n        \"s\",\n        \"t\",\n        \"u\",\n        \"v\",\n        \"w\",\n        \"x\",\n        \"y\",\n        \"z\",\n        \"{\",\n        \"|\",\n        \"}\",\n        \"~\",\n        \"¡\",\n        \"¢\",\n        \"£\",\n        \"¤\",\n        \"¥\",\n        \"¦\",\n        \"§\",\n        \"©\",\n        \"«\",\n        \"¬\",\n        \"®\",\n        \"°\",\n        \"±\",\n        \"¶\",\n        \"·\",\n        \"»\",\n        \"¿\",\n        \"Å\",\n        \"×\",\n        \"÷\",\n        \"ÿ\",\n        \"ħ\",\n        \"Γ\",\n        \"Δ\",\n        \"Θ\",\n        \"Λ\",\n        \"Ξ\",\n        \"Ο\",\n        \"Π\",\n        \"Σ\",\n        \"Φ\",\n        \"Ψ\",\n        \"Ω\",\n        \"α\",\n        \"β\",\n        \"γ\",\n        \"δ\",\n        \"ε\",\n        \"ζ\",\n        \"η\",\n        \"θ\",\n        \"ι\",\n        \"κ\",\n        \"λ\",\n        \"μ\",\n        \"ν\",\n        \"ξ\",\n        \"π\",\n        \"ρ\",\n        \"σ\",\n        \"τ\",\n        \"υ\",\n        \"φ\",\n        \"χ\",\n        \"ψ\",\n        \"ω\",\n        \"Д\",\n        \"Щ\",\n        \"д\",\n        \"з\",\n        \"щ\",\n        \"ъ\",\n        \"ё\",\n        \"א\",\n        \"ิ\",\n        \"ლ\",\n        \"‐\",\n        \"–\",\n        \"—\",\n        \"―\",\n        \"‖\",\n        \"‘\",\n        \"’\",\n        \"“\",\n        \"”\",\n        \"†\",\n        \"‡\",\n        \"•\",\n        \"‰\",\n        \"′\",\n        \"※\",\n        \"‿\",\n        \"⁂\",\n        \"⁑\",\n        \"€\",\n        \"℧\",\n        \"←\",\n        \"↑\",\n        \"→\",\n        \"↓\",\n        \"↔\",\n        \"↖\",\n        \"↗\",\n        \"↘\",\n        \"↙\",\n        \"⇄\",\n        \"⇒\",\n        \"⇔\",\n        \"⇦\",\n        \"⇧\",\n        \"⇨\",\n        \"⇩\",\n        \"∀\",\n        \"∂\",\n        \"∃\",\n        \"∅\",\n        \"∇\",\n        \"∈\",\n        \"∉\",\n        \"∋\",\n        \"−\",\n        \"∓\",\n        \"√\",\n        \"∝\",\n        \"∞\",\n        \"∟\",\n        \"∠\",\n        \"∥\",\n        \"∦\",\n        \"∧\",\n        \"∨\",\n        \"∩\",\n        \"∪\",\n        \"∫\",\n        \"∮\",\n        \"∴\",\n        \"∵\",\n        \"∽\",\n        \"≃\",\n        \"≅\",\n        \"≈\",\n        \"≒\",\n        \"≠\",\n        \"≡\",\n        \"≢\",\n        \"≦\",\n        \"≧\",\n        \"≪\",\n        \"≫\",\n        \"≶\",\n        \"≷\",\n        \"⊂\",\n        \"⊃\",\n        \"⊄\",\n        \"⊅\",\n        \"⊆\",\n        \"⊇\",\n        \"⊊\",\n        \"⊋\",\n        \"⊕\",\n        \"⊖\",\n        \"⊗\",\n        \"⊥\",\n        \"⊿\",\n        \"⋚\",\n        \"⋛\",\n        \"⌅\",\n        \"⌆\",\n        \"⌒\",\n        \"⌘\",\n        \"⎾\",\n        \"⎿\",\n        \"⏀\",\n        \"⏁\",\n        \"⏂\",\n        \"⏃\",\n        \"⏄\",\n        \"⏅\",\n        \"⏆\",\n        \"⏇\",\n        \"⏈\",\n        \"⏉\",\n        \"⏊\",\n        \"⏋\",\n        \"⏌\",\n        \"⏎\",\n        \"⓫\",\n        \"⓬\",\n        \"⓭\",\n        \"⓮\",\n        \"⓯\",\n        \"⓰\",\n        \"⓱\",\n        \"⓲\",\n        \"⓳\",\n        \"⓴\",\n        \"⓵\",\n        \"⓶\",\n        \"⓷\",\n        \"⓸\",\n        \"⓹\",\n        \"⓺\",\n        \"⓻\",\n        \"⓼\",\n        \"⓽\",\n        \"⓾\",\n        \"─\",\n        \"━\",\n        \"┌\",\n        \"┐\",\n        \"┘\",\n        \"├\",\n        \"╹\",\n        \"■\",\n        \"□\",\n        \"▱\",\n        \"▲\",\n        \"△\",\n        \"▶\",\n        \"▷\",\n        \"▼\",\n        \"▽\",\n        \"◀\",\n        \"◁\",\n        \"◆\",\n        \"◇\",\n        \"◉\",\n        \"○\",\n        \"◎\",\n        \"●\",\n        \"◐\",\n        \"◑\",\n        \"◒\",\n        \"◓\",\n        \"◡\",\n        \"◦\",\n        \"◯\",\n        \"☀\",\n        \"☁\",\n        \"☂\",\n        \"☃\",\n        \"★\",\n        \"☆\",\n        \"☎\",\n        \"☖\",\n        \"☗\",\n        \"☞\",\n        \"♀\",\n        \"♂\",\n        \"♠\",\n        \"♡\",\n        \"♢\",\n        \"♣\",\n        \"♤\",\n        \"♥\",\n        \"♦\",\n        \"♧\",\n        \"♨\",\n        \"♩\",\n        \"♪\",\n        \"♫\",\n        \"♬\",\n        \"♭\",\n        \"♮\",\n        \"♯\",\n        \"✓\",\n        \"❖\",\n        \"❶\",\n        \"❷\",\n        \"❸\",\n        \"❹\",\n        \"❺\",\n        \"❻\",\n        \"❼\",\n        \"❽\",\n        \"❾\",\n        \"❿\",\n        \"⤴\",\n        \"⤵\",\n        \"⦅\",\n        \"⦆\",\n        \"⦿\",\n        \"⧺\",\n        \"⧻\",\n        \"、\",\n        \"。\",\n        \"〃\",\n        \"〄\",\n        \"々\",\n        \"〆\",\n        \"〇\",\n        \"〈\",\n        \"〉\",\n        \"《\",\n        \"》\",\n        \"「\",\n        \"」\",\n        \"『\",\n        \"』\",\n        \"【\",\n        \"】\",\n        \"〒\",\n        \"〓\",\n        \"〔\",\n        \"〕\",\n        \"〖\",\n        \"〗\",\n        \"〘\",\n        \"〙\",\n        \"〜\",\n        \"〝\",\n        \"〟\",\n        \"〠\",\n        \"〳\",\n        \"〴\",\n        \"〵\",\n        \"〻\",\n        \"〼\",\n        \"〽\",\n        \"ぁ\",\n        \"あ\",\n        \"ぃ\",\n        \"い\",\n        \"ぅ\",\n        \"う\",\n        \"ぇ\",\n        \"え\",\n        \"ぉ\",\n        \"お\",\n        \"か\",\n        \"が\",\n        \"き\",\n        \"ぎ\",\n        \"く\",\n        \"ぐ\",\n        \"け\",\n        \"げ\",\n        \"こ\",\n        \"ご\",\n        \"さ\",\n        \"ざ\",\n        \"し\",\n        \"じ\",\n        \"す\",\n        \"ず\",\n        \"せ\",\n        \"ぜ\",\n        \"そ\",\n        \"ぞ\",\n        \"た\",\n        \"だ\",\n        \"ち\",\n        \"ぢ\",\n        \"っ\",\n        \"つ\",\n        \"づ\",\n        \"て\",\n        \"で\",\n        \"と\",\n        \"ど\",\n        \"な\",\n        \"に\",\n        \"ぬ\",\n        \"ね\",\n        \"の\",\n        \"は\",\n        \"ば\",\n        \"ぱ\",\n        \"ひ\",\n        \"び\",\n        \"ぴ\",\n        \"ふ\",\n        \"ぶ\",\n        \"ぷ\",\n        \"へ\",\n        \"べ\",\n        \"ぺ\",\n        \"ほ\",\n        \"ぼ\",\n        \"ぽ\",\n        \"ま\",\n        \"み\",\n        \"む\",\n        \"め\",\n        \"も\",\n        \"ゃ\",\n        \"や\",\n        \"ゅ\",\n        \"ゆ\",\n        \"ょ\",\n        \"よ\",\n        \"ら\",\n        \"り\",\n        \"る\",\n        \"れ\",\n        \"ろ\",\n        \"ゎ\",\n        \"わ\",\n        \"ゐ\",\n        \"ゑ\",\n        \"を\",\n        \"ん\",\n        \"ゝ\",\n        \"ゞ\",\n        \"゠\",\n        \"ァ\",\n        \"ア\",\n        \"ィ\",\n        \"イ\",\n        \"ゥ\",\n        \"ウ\",\n        \"ェ\",\n        \"エ\",\n        \"ォ\",\n        \"オ\",\n        \"カ\",\n        \"ガ\",\n        \"キ\",\n        \"ギ\",\n        \"ク\",\n        \"グ\",\n        \"ケ\",\n        \"ゲ\",\n        \"コ\",\n        \"ゴ\",\n        \"サ\",\n        \"ザ\",\n        \"シ\",\n        \"ジ\",\n        \"ス\",\n        \"ズ\",\n        \"セ\",\n        \"ゼ\",\n        \"ソ\",\n        \"ゾ\",\n        \"タ\",\n        \"ダ\",\n        \"チ\",\n        \"ヂ\",\n        \"ッ\",\n        \"ツ\",\n        \"ヅ\",\n        \"テ\",\n        \"デ\",\n        \"ト\",\n        \"ド\",\n        \"ナ\",\n        \"ニ\",\n        \"ヌ\",\n        \"ネ\",\n        \"ノ\",\n        \"ハ\",\n        \"バ\",\n        \"パ\",\n        \"ヒ\",\n        \"ビ\",\n        \"ピ\",\n        \"フ\",\n        \"ブ\",\n        \"プ\",\n        \"ヘ\",\n        \"ベ\",\n        \"ペ\",\n        \"ホ\",\n        \"ボ\",\n        \"ポ\",\n        \"マ\",\n        \"ミ\",\n        \"ム\",\n        \"メ\",\n        \"モ\",\n        \"ャ\",\n        \"ヤ\",\n        \"ュ\",\n        \"ユ\",\n        \"ョ\",\n        \"ヨ\",\n        \"ラ\",\n        \"リ\",\n        \"ル\",\n        \"レ\",\n        \"ロ\",\n        \"ヮ\",\n        \"ワ\",\n        \"ヰ\",\n        \"ヱ\",\n        \"ヲ\",\n        \"ン\",\n        \"ヴ\",\n        \"ヵ\",\n        \"ヶ\",\n        \"ヷ\",\n        \"ヸ\",\n        \"・\",\n        \"ー\",\n        \"ヽ\",\n        \"ヾ\",\n        \"ㇲ\",\n        \"ㇻ\",\n        \"㓛\",\n        \"㮶\",\n        \"一\",\n        \"丁\",\n        \"丂\",\n        \"七\",\n        \"万\",\n        \"丈\",\n        \"三\",\n        \"上\",\n        \"下\",\n        \"不\",\n        \"与\",\n        \"丐\",\n        \"丑\",\n        \"且\",\n        \"丕\",\n        \"世\",\n        \"丘\",\n        \"丙\",\n        \"丞\",\n        \"両\",\n        \"並\",\n        \"个\",\n        \"中\",\n        \"丰\",\n        \"串\",\n        \"丸\",\n        \"丹\",\n        \"主\",\n        \"丼\",\n        \"丿\",\n        \"乂\",\n        \"乃\",\n        \"久\",\n        \"之\",\n        \"乍\",\n        \"乎\",\n        \"乏\",\n        \"乕\",\n        \"乖\",\n        \"乗\",\n        \"乘\",\n        \"乙\",\n        \"九\",\n        \"乞\",\n        \"也\",\n        \"乢\",\n        \"乱\",\n        \"乳\",\n        \"乾\",\n        \"亀\",\n        \"亂\",\n        \"了\",\n        \"予\",\n        \"争\",\n        \"事\",\n        \"二\",\n        \"于\",\n        \"云\",\n        \"互\",\n        \"五\",\n        \"井\",\n        \"亘\",\n        \"亙\",\n        \"些\",\n        \"亜\",\n        \"亞\",\n        \"亟\",\n        \"亡\",\n        \"亢\",\n        \"交\",\n        \"亥\",\n        \"亦\",\n        \"亨\",\n        \"享\",\n        \"京\",\n        \"亭\",\n        \"亮\",\n        \"亳\",\n        \"亶\",\n        \"人\",\n        \"亻\",\n        \"什\",\n        \"仁\",\n        \"仄\",\n        \"仆\",\n        \"仇\",\n        \"今\",\n        \"介\",\n        \"仍\",\n        \"从\",\n        \"仏\",\n        \"仔\",\n        \"仕\",\n        \"他\",\n        \"仗\",\n        \"付\",\n        \"仙\",\n        \"仝\",\n        \"仞\",\n        \"代\",\n        \"令\",\n        \"以\",\n        \"仭\",\n        \"仮\",\n        \"仰\",\n        \"仲\",\n        \"仵\",\n        \"件\",\n        \"价\",\n        \"任\",\n        \"份\",\n        \"仿\",\n        \"企\",\n        \"伉\",\n        \"伊\",\n        \"伋\",\n        \"伍\",\n        \"伎\",\n        \"伏\",\n        \"伐\",\n        \"休\",\n        \"会\",\n        \"伜\",\n        \"伝\",\n        \"伯\",\n        \"估\",\n        \"伴\",\n        \"伶\",\n        \"伸\",\n        \"伺\",\n        \"似\",\n        \"伽\",\n        \"佃\",\n        \"但\",\n        \"佇\",\n        \"位\",\n        \"低\",\n        \"住\",\n        \"佐\",\n        \"佑\",\n        \"体\",\n        \"何\",\n        \"佗\",\n        \"余\",\n        \"佚\",\n        \"佛\",\n        \"作\",\n        \"佝\",\n        \"佞\",\n        \"佟\",\n        \"佤\",\n        \"佩\",\n        \"佯\",\n        \"佳\",\n        \"併\",\n        \"佶\",\n        \"佻\",\n        \"佼\",\n        \"使\",\n        \"侃\",\n        \"來\",\n        \"侈\",\n        \"例\",\n        \"侍\",\n        \"侏\",\n        \"侑\",\n        \"侖\",\n        \"侗\",\n        \"侘\",\n        \"供\",\n        \"依\",\n        \"侠\",\n        \"価\",\n        \"侫\",\n        \"侭\",\n        \"侮\",\n        \"侯\",\n        \"侵\",\n        \"侶\",\n        \"便\",\n        \"係\",\n        \"促\",\n        \"俄\",\n        \"俅\",\n        \"俊\",\n        \"俎\",\n        \"俐\",\n        \"俑\",\n        \"俔\",\n        \"俗\",\n        \"俘\",\n        \"俚\",\n        \"俛\",\n        \"保\",\n        \"俟\",\n        \"俠\",\n        \"信\",\n        \"俣\",\n        \"俤\",\n        \"俥\",\n        \"修\",\n        \"俯\",\n        \"俱\",\n        \"俳\",\n        \"俵\",\n        \"俶\",\n        \"俸\",\n        \"俺\",\n        \"俾\",\n        \"倂\",\n        \"倅\",\n        \"倆\",\n        \"倉\",\n        \"個\",\n        \"倍\",\n        \"倏\",\n        \"們\",\n        \"倒\",\n        \"倔\",\n        \"倖\",\n        \"候\",\n        \"倚\",\n        \"借\",\n        \"倣\",\n        \"値\",\n        \"倥\",\n        \"倦\",\n        \"倨\",\n        \"倩\",\n        \"倪\",\n        \"倫\",\n        \"倭\",\n        \"倶\",\n        \"倹\",\n        \"倻\",\n        \"偃\",\n        \"假\",\n        \"偈\",\n        \"偉\",\n        \"偏\",\n        \"偐\",\n        \"偕\",\n        \"偖\",\n        \"做\",\n        \"停\",\n        \"健\",\n        \"偬\",\n        \"偲\",\n        \"側\",\n        \"偵\",\n        \"偶\",\n        \"偸\",\n        \"偽\",\n        \"傀\",\n        \"傅\",\n        \"傍\",\n        \"傑\",\n        \"傕\",\n        \"傘\",\n        \"備\",\n        \"傚\",\n        \"傪\",\n        \"催\",\n        \"傭\",\n        \"傲\",\n        \"傳\",\n        \"傴\",\n        \"債\",\n        \"傷\",\n        \"傾\",\n        \"僂\",\n        \"僅\",\n        \"僉\",\n        \"僊\",\n        \"働\",\n        \"像\",\n        \"僑\",\n        \"僔\",\n        \"僕\",\n        \"僖\",\n        \"僚\",\n        \"僞\",\n        \"僣\",\n        \"僥\",\n        \"僧\",\n        \"僭\",\n        \"僮\",\n        \"價\",\n        \"僻\",\n        \"儀\",\n        \"儁\",\n        \"儂\",\n        \"億\",\n        \"儉\",\n        \"儋\",\n        \"儒\",\n        \"儔\",\n        \"儕\",\n        \"儘\",\n        \"儚\",\n        \"儛\",\n        \"儞\",\n        \"償\",\n        \"儡\",\n        \"優\",\n        \"儲\",\n        \"儷\",\n        \"儺\",\n        \"儻\",\n        \"儼\",\n        \"兀\",\n        \"允\",\n        \"元\",\n        \"兄\",\n        \"充\",\n        \"兆\",\n        \"兇\",\n        \"先\",\n        \"光\",\n        \"兊\",\n        \"克\",\n        \"兌\",\n        \"免\",\n        \"兎\",\n        \"児\",\n        \"兒\",\n        \"兔\",\n        \"兕\",\n        \"兗\",\n        \"党\",\n        \"兜\",\n        \"兢\",\n        \"入\",\n        \"內\",\n        \"全\",\n        \"兩\",\n        \"兪\",\n        \"八\",\n        \"公\",\n        \"六\",\n        \"兮\",\n        \"共\",\n        \"兵\",\n        \"其\",\n        \"具\",\n        \"典\",\n        \"兼\",\n        \"冀\",\n        \"内\",\n        \"円\",\n        \"冉\",\n        \"冊\",\n        \"册\",\n        \"再\",\n        \"冐\",\n        \"冑\",\n        \"冒\",\n        \"冕\",\n        \"冗\",\n        \"写\",\n        \"冠\",\n        \"冢\",\n        \"冤\",\n        \"冥\",\n        \"冦\",\n        \"冨\",\n        \"冩\",\n        \"冪\",\n        \"冬\",\n        \"冰\",\n        \"冱\",\n        \"冲\",\n        \"决\",\n        \"冴\",\n        \"况\",\n        \"冶\",\n        \"冷\",\n        \"冼\",\n        \"冽\",\n        \"凄\",\n        \"准\",\n        \"凉\",\n        \"凋\",\n        \"凌\",\n        \"凍\",\n        \"凖\",\n        \"凛\",\n        \"凜\",\n        \"凝\",\n        \"凞\",\n        \"几\",\n        \"凡\",\n        \"処\",\n        \"凧\",\n        \"凩\",\n        \"凪\",\n        \"凭\",\n        \"凮\",\n        \"凰\",\n        \"凱\",\n        \"凶\",\n        \"凸\",\n        \"凹\",\n        \"出\",\n        \"函\",\n        \"凾\",\n        \"刀\",\n        \"刃\",\n        \"刄\",\n        \"分\",\n        \"切\",\n        \"刈\",\n        \"刊\",\n        \"刋\",\n        \"刎\",\n        \"刑\",\n        \"刕\",\n        \"列\",\n        \"初\",\n        \"判\",\n        \"別\",\n        \"利\",\n        \"刪\",\n        \"刮\",\n        \"到\",\n        \"刳\",\n        \"制\",\n        \"刷\",\n        \"券\",\n        \"刹\",\n        \"刺\",\n        \"刻\",\n        \"剃\",\n        \"剄\",\n        \"則\",\n        \"削\",\n        \"剋\",\n        \"剌\",\n        \"前\",\n        \"剔\",\n        \"剖\",\n        \"剛\",\n        \"剝\",\n        \"剣\",\n        \"剤\",\n        \"剥\",\n        \"剪\",\n        \"副\",\n        \"剰\",\n        \"剱\",\n        \"割\",\n        \"剴\",\n        \"創\",\n        \"剽\",\n        \"剿\",\n        \"劃\",\n        \"劇\",\n        \"劈\",\n        \"劉\",\n        \"劍\",\n        \"劒\",\n        \"劔\",\n        \"力\",\n        \"功\",\n        \"加\",\n        \"劣\",\n        \"助\",\n        \"努\",\n        \"劫\",\n        \"劬\",\n        \"劭\",\n        \"励\",\n        \"労\",\n        \"効\",\n        \"劻\",\n        \"劾\",\n        \"勁\",\n        \"勃\",\n        \"勅\",\n        \"勇\",\n        \"勉\",\n        \"勒\",\n        \"動\",\n        \"勘\",\n        \"務\",\n        \"勛\",\n        \"勝\",\n        \"勞\",\n        \"募\",\n        \"勢\",\n        \"勣\",\n        \"勤\",\n        \"勧\",\n        \"勰\",\n        \"勲\",\n        \"勳\",\n        \"勵\",\n        \"勸\",\n        \"勺\",\n        \"勾\",\n        \"勿\",\n        \"匀\",\n        \"匁\",\n        \"匂\",\n        \"包\",\n        \"匆\",\n        \"匈\",\n        \"匍\",\n        \"匏\",\n        \"匐\",\n        \"匕\",\n        \"化\",\n        \"北\",\n        \"匙\",\n        \"匝\",\n        \"匠\",\n        \"匡\",\n        \"匣\",\n        \"匪\",\n        \"匯\",\n        \"匱\",\n        \"匹\",\n        \"区\",\n        \"医\",\n        \"匾\",\n        \"匿\",\n        \"區\",\n        \"十\",\n        \"千\",\n        \"卅\",\n        \"卆\",\n        \"升\",\n        \"午\",\n        \"卉\",\n        \"半\",\n        \"卍\",\n        \"卑\",\n        \"卒\",\n        \"卓\",\n        \"協\",\n        \"南\",\n        \"単\",\n        \"博\",\n        \"卜\",\n        \"卞\",\n        \"占\",\n        \"卣\",\n        \"卦\",\n        \"卩\",\n        \"卮\",\n        \"卯\",\n        \"印\",\n        \"危\",\n        \"即\",\n        \"却\",\n        \"卵\",\n        \"卷\",\n        \"卸\",\n        \"卻\",\n        \"卽\",\n        \"卿\",\n        \"厄\",\n        \"厓\",\n        \"厖\",\n        \"厘\",\n        \"厚\",\n        \"原\",\n        \"厠\",\n        \"厥\",\n        \"厦\",\n        \"厨\",\n        \"厩\",\n        \"厭\",\n        \"厰\",\n        \"厲\",\n        \"厳\",\n        \"厷\",\n        \"去\",\n        \"参\",\n        \"參\",\n        \"又\",\n        \"叉\",\n        \"及\",\n        \"友\",\n        \"双\",\n        \"反\",\n        \"収\",\n        \"叔\",\n        \"取\",\n        \"受\",\n        \"叙\",\n        \"叛\",\n        \"叟\",\n        \"叡\",\n        \"叢\",\n        \"口\",\n        \"古\",\n        \"句\",\n        \"叩\",\n        \"只\",\n        \"叫\",\n        \"召\",\n        \"叭\",\n        \"叮\",\n        \"可\",\n        \"台\",\n        \"叱\",\n        \"史\",\n        \"右\",\n        \"叶\",\n        \"号\",\n        \"司\",\n        \"叺\",\n        \"吁\",\n        \"吃\",\n        \"各\",\n        \"合\",\n        \"吉\",\n        \"吊\",\n        \"同\",\n        \"名\",\n        \"后\",\n        \"吏\",\n        \"吐\",\n        \"向\",\n        \"君\",\n        \"吝\",\n        \"吞\",\n        \"吟\",\n        \"吠\",\n        \"否\",\n        \"吩\",\n        \"含\",\n        \"听\",\n        \"吶\",\n        \"吸\",\n        \"吹\",\n        \"吻\",\n        \"吼\",\n        \"吽\",\n        \"吾\",\n        \"呀\",\n        \"呂\",\n        \"呆\",\n        \"呈\",\n        \"呉\",\n        \"告\",\n        \"呍\",\n        \"呑\",\n        \"呕\",\n        \"呟\",\n        \"周\",\n        \"呪\",\n        \"呰\",\n        \"呱\",\n        \"味\",\n        \"呵\",\n        \"呶\",\n        \"呷\",\n        \"呻\",\n        \"呼\",\n        \"命\",\n        \"咀\",\n        \"咄\",\n        \"咆\",\n        \"咈\",\n        \"咋\",\n        \"和\",\n        \"咎\",\n        \"咏\",\n        \"咐\",\n        \"咒\",\n        \"咜\",\n        \"咤\",\n        \"咥\",\n        \"咨\",\n        \"咩\",\n        \"咫\",\n        \"咬\",\n        \"咯\",\n        \"咲\",\n        \"咳\",\n        \"咸\",\n        \"咽\",\n        \"哀\",\n        \"品\",\n        \"哄\",\n        \"哆\",\n        \"哇\",\n        \"哈\",\n        \"哉\",\n        \"員\",\n        \"哥\",\n        \"哨\",\n        \"哭\",\n        \"哮\",\n        \"哲\",\n        \"哺\",\n        \"哿\",\n        \"唄\",\n        \"唆\",\n        \"唇\",\n        \"唎\",\n        \"唐\",\n        \"唔\",\n        \"唖\",\n        \"售\",\n        \"唯\",\n        \"唱\",\n        \"唳\",\n        \"唸\",\n        \"唹\",\n        \"唼\",\n        \"唾\",\n        \"啀\",\n        \"啄\",\n        \"商\",\n        \"問\",\n        \"啐\",\n        \"啓\",\n        \"啖\",\n        \"啜\",\n        \"啞\",\n        \"啣\",\n        \"啻\",\n        \"啼\",\n        \"啾\",\n        \"喀\",\n        \"喃\",\n        \"善\",\n        \"喆\",\n        \"喇\",\n        \"喉\",\n        \"喊\",\n        \"喋\",\n        \"喎\",\n        \"喘\",\n        \"喙\",\n        \"喚\",\n        \"喜\",\n        \"喝\",\n        \"喟\",\n        \"喧\",\n        \"喨\",\n        \"喩\",\n        \"喪\",\n        \"喫\",\n        \"喬\",\n        \"單\",\n        \"喰\",\n        \"営\",\n        \"嗄\",\n        \"嗅\",\n        \"嗇\",\n        \"嗔\",\n        \"嗚\",\n        \"嗜\",\n        \"嗟\",\n        \"嗣\",\n        \"嗤\",\n        \"嗷\",\n        \"嗽\",\n        \"嗾\",\n        \"嘆\",\n        \"嘉\",\n        \"嘎\",\n        \"嘔\",\n        \"嘖\",\n        \"嘗\",\n        \"嘘\",\n        \"嘩\",\n        \"嘯\",\n        \"嘱\",\n        \"嘲\",\n        \"嘴\",\n        \"嘶\",\n        \"嘸\",\n        \"噂\",\n        \"噉\",\n        \"噌\",\n        \"噎\",\n        \"噓\",\n        \"噛\",\n        \"噤\",\n        \"噦\",\n        \"器\",\n        \"噪\",\n        \"噫\",\n        \"噬\",\n        \"噯\",\n        \"噲\",\n        \"噴\",\n        \"噶\",\n        \"噸\",\n        \"噺\",\n        \"嚀\",\n        \"嚆\",\n        \"嚇\",\n        \"嚊\",\n        \"嚏\",\n        \"嚔\",\n        \"嚙\",\n        \"嚠\",\n        \"嚢\",\n        \"嚥\",\n        \"嚭\",\n        \"嚮\",\n        \"嚴\",\n        \"嚶\",\n        \"嚼\",\n        \"囀\",\n        \"囁\",\n        \"囂\",\n        \"囃\",\n        \"囈\",\n        \"囊\",\n        \"囎\",\n        \"囓\",\n        \"囗\",\n        \"囘\",\n        \"囚\",\n        \"四\",\n        \"回\",\n        \"因\",\n        \"団\",\n        \"囮\",\n        \"困\",\n        \"囲\",\n        \"図\",\n        \"囹\",\n        \"固\",\n        \"国\",\n        \"囿\",\n        \"圀\",\n        \"圃\",\n        \"圄\",\n        \"國\",\n        \"圍\",\n        \"圏\",\n        \"園\",\n        \"圓\",\n        \"圖\",\n        \"團\",\n        \"圜\",\n        \"土\",\n        \"圦\",\n        \"圧\",\n        \"在\",\n        \"圭\",\n        \"地\",\n        \"圳\",\n        \"圷\",\n        \"圻\",\n        \"址\",\n        \"坂\",\n        \"均\",\n        \"坊\",\n        \"坍\",\n        \"坎\",\n        \"坏\",\n        \"坐\",\n        \"坑\",\n        \"坡\",\n        \"坤\",\n        \"坦\",\n        \"坨\",\n        \"坩\",\n        \"坪\",\n        \"垂\",\n        \"垈\",\n        \"型\",\n        \"垓\",\n        \"垜\",\n        \"垠\",\n        \"垢\",\n        \"垣\",\n        \"垰\",\n        \"垸\",\n        \"埃\",\n        \"埋\",\n        \"城\",\n        \"埒\",\n        \"埓\",\n        \"埔\",\n        \"埜\",\n        \"域\",\n        \"埠\",\n        \"埣\",\n        \"埤\",\n        \"埴\",\n        \"埵\",\n        \"執\",\n        \"培\",\n        \"基\",\n        \"埼\",\n        \"堀\",\n        \"堂\",\n        \"堅\",\n        \"堆\",\n        \"堊\",\n        \"堕\",\n        \"堙\",\n        \"堝\",\n        \"堡\",\n        \"堤\",\n        \"堪\",\n        \"堯\",\n        \"堰\",\n        \"報\",\n        \"場\",\n        \"堵\",\n        \"堺\",\n        \"塀\",\n        \"塁\",\n        \"塊\",\n        \"塋\",\n        \"塌\",\n        \"塑\",\n        \"塒\",\n        \"塔\",\n        \"塗\",\n        \"塘\",\n        \"塙\",\n        \"塚\",\n        \"塞\",\n        \"塡\",\n        \"塢\",\n        \"塩\",\n        \"填\",\n        \"塰\",\n        \"塲\",\n        \"塵\",\n        \"塹\",\n        \"塼\",\n        \"塾\",\n        \"境\",\n        \"墅\",\n        \"墉\",\n        \"墓\",\n        \"増\",\n        \"墜\",\n        \"增\",\n        \"墟\",\n        \"墨\",\n        \"墳\",\n        \"墺\",\n        \"墻\",\n        \"墾\",\n        \"壁\",\n        \"壅\",\n        \"壇\",\n        \"壊\",\n        \"壌\",\n        \"壑\",\n        \"壒\",\n        \"壓\",\n        \"壕\",\n        \"壘\",\n        \"壙\",\n        \"壜\",\n        \"壟\",\n        \"壤\",\n        \"士\",\n        \"壬\",\n        \"壮\",\n        \"壯\",\n        \"声\",\n        \"壱\",\n        \"売\",\n        \"壷\",\n        \"壹\",\n        \"壺\",\n        \"壻\",\n        \"壼\",\n        \"壽\",\n        \"変\",\n        \"夋\",\n        \"夏\",\n        \"夔\",\n        \"夕\",\n        \"外\",\n        \"夙\",\n        \"多\",\n        \"夛\",\n        \"夜\",\n        \"夢\",\n        \"夥\",\n        \"大\",\n        \"天\",\n        \"太\",\n        \"夫\",\n        \"夬\",\n        \"夭\",\n        \"央\",\n        \"失\",\n        \"夷\",\n        \"夾\",\n        \"奄\",\n        \"奇\",\n        \"奈\",\n        \"奉\",\n        \"奎\",\n        \"奏\",\n        \"契\",\n        \"奔\",\n        \"奕\",\n        \"套\",\n        \"奘\",\n        \"奚\",\n        \"奝\",\n        \"奠\",\n        \"奢\",\n        \"奥\",\n        \"奧\",\n        \"奨\",\n        \"奪\",\n        \"奬\",\n        \"奭\",\n        \"奮\",\n        \"女\",\n        \"奴\",\n        \"奶\",\n        \"奸\",\n        \"好\",\n        \"妁\",\n        \"如\",\n        \"妃\",\n        \"妄\",\n        \"妊\",\n        \"妍\",\n        \"妓\",\n        \"妖\",\n        \"妙\",\n        \"妣\",\n        \"妥\",\n        \"妨\",\n        \"妬\",\n        \"妲\",\n        \"妹\",\n        \"妺\",\n        \"妻\",\n        \"妾\",\n        \"姆\",\n        \"姉\",\n        \"始\",\n        \"姐\",\n        \"姑\",\n        \"姒\",\n        \"姓\",\n        \"委\",\n        \"姙\",\n        \"姚\",\n        \"姜\",\n        \"姣\",\n        \"姥\",\n        \"姦\",\n        \"姧\",\n        \"姨\",\n        \"姪\",\n        \"姫\",\n        \"姶\",\n        \"姸\",\n        \"姻\",\n        \"姿\",\n        \"威\",\n        \"娃\",\n        \"娍\",\n        \"娑\",\n        \"娘\",\n        \"娜\",\n        \"娟\",\n        \"娠\",\n        \"娥\",\n        \"娩\",\n        \"娯\",\n        \"娵\",\n        \"娶\",\n        \"娼\",\n        \"婀\",\n        \"婁\",\n        \"婆\",\n        \"婉\",\n        \"婚\",\n        \"婢\",\n        \"婣\",\n        \"婦\",\n        \"婪\",\n        \"婬\",\n        \"婿\",\n        \"媄\",\n        \"媒\",\n        \"媚\",\n        \"媛\",\n        \"媧\",\n        \"媳\",\n        \"媼\",\n        \"媽\",\n        \"媾\",\n        \"嫁\",\n        \"嫂\",\n        \"嫄\",\n        \"嫉\",\n        \"嫋\",\n        \"嫌\",\n        \"嫐\",\n        \"嫖\",\n        \"嫗\",\n        \"嫡\",\n        \"嫣\",\n        \"嫦\",\n        \"嫩\",\n        \"嫵\",\n        \"嫺\",\n        \"嬉\",\n        \"嬋\",\n        \"嬌\",\n        \"嬖\",\n        \"嬢\",\n        \"嬥\",\n        \"嬪\",\n        \"嬬\",\n        \"嬰\",\n        \"嬲\",\n        \"嬴\",\n        \"嬶\",\n        \"孀\",\n        \"孁\",\n        \"孃\",\n        \"孅\",\n        \"孌\",\n        \"子\",\n        \"孑\",\n        \"孔\",\n        \"孕\",\n        \"字\",\n        \"存\",\n        \"孚\",\n        \"孛\",\n        \"孜\",\n        \"孝\",\n        \"孟\",\n        \"季\",\n        \"孤\",\n        \"学\",\n        \"孩\",\n        \"孫\",\n        \"孰\",\n        \"孵\",\n        \"學\",\n        \"孺\",\n        \"孽\",\n        \"宀\",\n        \"宅\",\n        \"宇\",\n        \"守\",\n        \"安\",\n        \"宋\",\n        \"完\",\n        \"宍\",\n        \"宏\",\n        \"宓\",\n        \"宕\",\n        \"宗\",\n        \"官\",\n        \"宙\",\n        \"定\",\n        \"宛\",\n        \"宜\",\n        \"宝\",\n        \"実\",\n        \"客\",\n        \"宣\",\n        \"室\",\n        \"宥\",\n        \"宦\",\n        \"宮\",\n        \"宰\",\n        \"害\",\n        \"宴\",\n        \"宵\",\n        \"家\",\n        \"宸\",\n        \"容\",\n        \"宿\",\n        \"寂\",\n        \"寃\",\n        \"寄\",\n        \"寅\",\n        \"密\",\n        \"寇\",\n        \"富\",\n        \"寐\",\n        \"寒\",\n        \"寓\",\n        \"寔\",\n        \"寛\",\n        \"寝\",\n        \"寞\",\n        \"察\",\n        \"寡\",\n        \"寢\",\n        \"寤\",\n        \"寥\",\n        \"實\",\n        \"寧\",\n        \"寨\",\n        \"審\",\n        \"寫\",\n        \"寮\",\n        \"寰\",\n        \"寳\",\n        \"寵\",\n        \"寶\",\n        \"寸\",\n        \"寺\",\n        \"対\",\n        \"寿\",\n        \"封\",\n        \"専\",\n        \"射\",\n        \"将\",\n        \"將\",\n        \"專\",\n        \"尉\",\n        \"尊\",\n        \"尋\",\n        \"對\",\n        \"導\",\n        \"小\",\n        \"少\",\n        \"尓\",\n        \"尖\",\n        \"尚\",\n        \"尠\",\n        \"尤\",\n        \"尨\",\n        \"尩\",\n        \"尫\",\n        \"尭\",\n        \"就\",\n        \"尸\",\n        \"尹\",\n        \"尺\",\n        \"尻\",\n        \"尼\",\n        \"尽\",\n        \"尾\",\n        \"尿\",\n        \"局\",\n        \"屁\",\n        \"居\",\n        \"屈\",\n        \"届\",\n        \"屋\",\n        \"屍\",\n        \"屎\",\n        \"屏\",\n        \"屐\",\n        \"屑\",\n        \"屓\",\n        \"展\",\n        \"屛\",\n        \"属\",\n        \"屠\",\n        \"屡\",\n        \"屢\",\n        \"層\",\n        \"履\",\n        \"屬\",\n        \"屮\",\n        \"屯\",\n        \"山\",\n        \"屹\",\n        \"岌\",\n        \"岐\",\n        \"岑\",\n        \"岡\",\n        \"岨\",\n        \"岩\",\n        \"岫\",\n        \"岬\",\n        \"岱\",\n        \"岳\",\n        \"岷\",\n        \"岸\",\n        \"岺\",\n        \"岻\",\n        \"峅\",\n        \"峙\",\n        \"峠\",\n        \"峡\",\n        \"峨\",\n        \"峩\",\n        \"峪\",\n        \"峭\",\n        \"峯\",\n        \"峰\",\n        \"峴\",\n        \"島\",\n        \"峻\",\n        \"峽\",\n        \"崇\",\n        \"崋\",\n        \"崎\",\n        \"崑\",\n        \"崔\",\n        \"崕\",\n        \"崖\",\n        \"崗\",\n        \"崘\",\n        \"崙\",\n        \"崛\",\n        \"崟\",\n        \"崧\",\n        \"崩\",\n        \"嵆\",\n        \"嵋\",\n        \"嵌\",\n        \"嵎\",\n        \"嵐\",\n        \"嵜\",\n        \"嵩\",\n        \"嵬\",\n        \"嵯\",\n        \"嶂\",\n        \"嶄\",\n        \"嶇\",\n        \"嶋\",\n        \"嶌\",\n        \"嶠\",\n        \"嶮\",\n        \"嶲\",\n        \"嶺\",\n        \"嶼\",\n        \"嶽\",\n        \"巉\",\n        \"巌\",\n        \"巍\",\n        \"巎\",\n        \"巒\",\n        \"巓\",\n        \"巖\",\n        \"川\",\n        \"州\",\n        \"巡\",\n        \"巢\",\n        \"巣\",\n        \"工\",\n        \"左\",\n        \"巧\",\n        \"巨\",\n        \"巫\",\n        \"差\",\n        \"己\",\n        \"已\",\n        \"巳\",\n        \"巴\",\n        \"巷\",\n        \"巻\",\n        \"巽\",\n        \"巾\",\n        \"市\",\n        \"布\",\n        \"帆\",\n        \"希\",\n        \"帑\",\n        \"帕\",\n        \"帖\",\n        \"帙\",\n        \"帚\",\n        \"帛\",\n        \"帝\",\n        \"帥\",\n        \"師\",\n        \"席\",\n        \"帮\",\n        \"帯\",\n        \"帰\",\n        \"帳\",\n        \"帶\",\n        \"帷\",\n        \"常\",\n        \"帽\",\n        \"幀\",\n        \"幄\",\n        \"幅\",\n        \"幇\",\n        \"幌\",\n        \"幎\",\n        \"幔\",\n        \"幕\",\n        \"幖\",\n        \"幗\",\n        \"幘\",\n        \"幟\",\n        \"幡\",\n        \"幢\",\n        \"幣\",\n        \"幫\",\n        \"干\",\n        \"平\",\n        \"年\",\n        \"并\",\n        \"幷\",\n        \"幸\",\n        \"幹\",\n        \"幻\",\n        \"幼\",\n        \"幽\",\n        \"幾\",\n        \"庁\",\n        \"広\",\n        \"庄\",\n        \"庇\",\n        \"床\",\n        \"序\",\n        \"底\",\n        \"庖\",\n        \"店\",\n        \"庚\",\n        \"府\",\n        \"庠\",\n        \"度\",\n        \"座\",\n        \"庫\",\n        \"庭\",\n        \"庵\",\n        \"庶\",\n        \"康\",\n        \"庸\",\n        \"庾\",\n        \"廁\",\n        \"廂\",\n        \"廃\",\n        \"廈\",\n        \"廉\",\n        \"廊\",\n        \"廋\",\n        \"廏\",\n        \"廐\",\n        \"廓\",\n        \"廖\",\n        \"廚\",\n        \"廛\",\n        \"廟\",\n        \"廠\",\n        \"廡\",\n        \"廢\",\n        \"廣\",\n        \"廩\",\n        \"廬\",\n        \"廰\",\n        \"廳\",\n        \"廴\",\n        \"延\",\n        \"廷\",\n        \"廸\",\n        \"建\",\n        \"廻\",\n        \"廼\",\n        \"廿\",\n        \"弁\",\n        \"弄\",\n        \"弉\",\n        \"弊\",\n        \"弋\",\n        \"弌\",\n        \"式\",\n        \"弐\",\n        \"弑\",\n        \"弓\",\n        \"弔\",\n        \"引\",\n        \"弖\",\n        \"弗\",\n        \"弘\",\n        \"弛\",\n        \"弟\",\n        \"弥\",\n        \"弦\",\n        \"弧\",\n        \"弩\",\n        \"弭\",\n        \"弯\",\n        \"弱\",\n        \"弴\",\n        \"張\",\n        \"強\",\n        \"弼\",\n        \"弾\",\n        \"彅\",\n        \"彈\",\n        \"彊\",\n        \"彌\",\n        \"彎\",\n        \"当\",\n        \"彗\",\n        \"彙\",\n        \"彝\",\n        \"彡\",\n        \"形\",\n        \"彣\",\n        \"彤\",\n        \"彦\",\n        \"彧\",\n        \"彩\",\n        \"彪\",\n        \"彫\",\n        \"彬\",\n        \"彭\",\n        \"彰\",\n        \"影\",\n        \"彳\",\n        \"彷\",\n        \"役\",\n        \"彼\",\n        \"彿\",\n        \"往\",\n        \"征\",\n        \"徂\",\n        \"徃\",\n        \"径\",\n        \"待\",\n        \"徇\",\n        \"徊\",\n        \"律\",\n        \"後\",\n        \"徐\",\n        \"徒\",\n        \"従\",\n        \"得\",\n        \"徘\",\n        \"徙\",\n        \"從\",\n        \"徠\",\n        \"御\",\n        \"徧\",\n        \"徨\",\n        \"復\",\n        \"循\",\n        \"徭\",\n        \"微\",\n        \"徳\",\n        \"徴\",\n        \"徵\",\n        \"德\",\n        \"徹\",\n        \"徽\",\n        \"心\",\n        \"必\",\n        \"忉\",\n        \"忌\",\n        \"忍\",\n        \"忖\",\n        \"志\",\n        \"忘\",\n        \"忙\",\n        \"応\",\n        \"忝\",\n        \"忠\",\n        \"忤\",\n        \"忩\",\n        \"快\",\n        \"忯\",\n        \"忰\",\n        \"忱\",\n        \"念\",\n        \"忸\",\n        \"忽\",\n        \"忿\",\n        \"怏\",\n        \"怐\",\n        \"怒\",\n        \"怕\",\n        \"怖\",\n        \"怙\",\n        \"怛\",\n        \"怜\",\n        \"思\",\n        \"怠\",\n        \"怡\",\n        \"急\",\n        \"性\",\n        \"怨\",\n        \"怩\",\n        \"怪\",\n        \"怫\",\n        \"怯\",\n        \"怱\",\n        \"怺\",\n        \"恁\",\n        \"恂\",\n        \"恃\",\n        \"恆\",\n        \"恊\",\n        \"恋\",\n        \"恍\",\n        \"恐\",\n        \"恒\",\n        \"恕\",\n        \"恙\",\n        \"恚\",\n        \"恟\",\n        \"恠\",\n        \"恢\",\n        \"恣\",\n        \"恤\",\n        \"恥\",\n        \"恨\",\n        \"恩\",\n        \"恪\",\n        \"恫\",\n        \"恬\",\n        \"恭\",\n        \"息\",\n        \"恰\",\n        \"恵\",\n        \"悃\",\n        \"悄\",\n        \"悅\",\n        \"悉\",\n        \"悋\",\n        \"悌\",\n        \"悍\",\n        \"悔\",\n        \"悖\",\n        \"悚\",\n        \"悛\",\n        \"悝\",\n        \"悟\",\n        \"悠\",\n        \"患\",\n        \"悦\",\n        \"悧\",\n        \"悩\",\n        \"悪\",\n        \"悰\",\n        \"悲\",\n        \"悳\",\n        \"悴\",\n        \"悵\",\n        \"悶\",\n        \"悸\",\n        \"悼\",\n        \"悽\",\n        \"情\",\n        \"惇\",\n        \"惑\",\n        \"惓\",\n        \"惔\",\n        \"惕\",\n        \"惘\",\n        \"惚\",\n        \"惜\",\n        \"惟\",\n        \"惠\",\n        \"惡\",\n        \"惣\",\n        \"惧\",\n        \"惨\",\n        \"惰\",\n        \"惱\",\n        \"想\",\n        \"惴\",\n        \"惶\",\n        \"惹\",\n        \"惺\",\n        \"惻\",\n        \"愁\",\n        \"愆\",\n        \"愈\",\n        \"愉\",\n        \"愍\",\n        \"愎\",\n        \"意\",\n        \"愕\",\n        \"愚\",\n        \"愛\",\n        \"感\",\n        \"愡\",\n        \"愧\",\n        \"愨\",\n        \"愬\",\n        \"愴\",\n        \"愷\",\n        \"愼\",\n        \"愾\",\n        \"愿\",\n        \"慂\",\n        \"慄\",\n        \"慇\",\n        \"慈\",\n        \"慊\",\n        \"態\",\n        \"慌\",\n        \"慍\",\n        \"慎\",\n        \"慓\",\n        \"慕\",\n        \"慘\",\n        \"慙\",\n        \"慚\",\n        \"慟\",\n        \"慢\",\n        \"慣\",\n        \"慥\",\n        \"慧\",\n        \"慨\",\n        \"慫\",\n        \"慮\",\n        \"慰\",\n        \"慳\",\n        \"慴\",\n        \"慶\",\n        \"慷\",\n        \"慾\",\n        \"憂\",\n        \"憊\",\n        \"憍\",\n        \"憎\",\n        \"憐\",\n        \"憑\",\n        \"憔\",\n        \"憖\",\n        \"憙\",\n        \"憚\",\n        \"憤\",\n        \"憧\",\n        \"憩\",\n        \"憫\",\n        \"憬\",\n        \"憮\",\n        \"憲\",\n        \"憶\",\n        \"憺\",\n        \"憾\",\n        \"懃\",\n        \"懆\",\n        \"懇\",\n        \"懈\",\n        \"應\",\n        \"懊\",\n        \"懋\",\n        \"懌\",\n        \"懐\",\n        \"懣\",\n        \"懦\",\n        \"懲\",\n        \"懴\",\n        \"懶\",\n        \"懷\",\n        \"懸\",\n        \"懺\",\n        \"懼\",\n        \"懽\",\n        \"懾\",\n        \"懿\",\n        \"戀\",\n        \"戈\",\n        \"戉\",\n        \"戊\",\n        \"戌\",\n        \"戍\",\n        \"戎\",\n        \"成\",\n        \"我\",\n        \"戒\",\n        \"戔\",\n        \"或\",\n        \"戚\",\n        \"戛\",\n        \"戞\",\n        \"戟\",\n        \"戡\",\n        \"戦\",\n        \"戩\",\n        \"截\",\n        \"戮\",\n        \"戯\",\n        \"戰\",\n        \"戲\",\n        \"戴\",\n        \"戸\",\n        \"戻\",\n        \"房\",\n        \"所\",\n        \"扁\",\n        \"扇\",\n        \"扈\",\n        \"扉\",\n        \"手\",\n        \"才\",\n        \"扎\",\n        \"打\",\n        \"払\",\n        \"托\",\n        \"扛\",\n        \"扞\",\n        \"扠\",\n        \"扣\",\n        \"扨\",\n        \"扮\",\n        \"扱\",\n        \"扶\",\n        \"批\",\n        \"扼\",\n        \"承\",\n        \"技\",\n        \"抂\",\n        \"抃\",\n        \"抄\",\n        \"抉\",\n        \"把\",\n        \"抑\",\n        \"抒\",\n        \"抓\",\n        \"抔\",\n        \"投\",\n        \"抖\",\n        \"抗\",\n        \"折\",\n        \"抛\",\n        \"抜\",\n        \"択\",\n        \"披\",\n        \"抬\",\n        \"抱\",\n        \"抵\",\n        \"抹\",\n        \"押\",\n        \"抽\",\n        \"拂\",\n        \"担\",\n        \"拆\",\n        \"拇\",\n        \"拈\",\n        \"拉\",\n        \"拌\",\n        \"拍\",\n        \"拏\",\n        \"拐\",\n        \"拒\",\n        \"拓\",\n        \"拔\",\n        \"拕\",\n        \"拗\",\n        \"拘\",\n        \"拙\",\n        \"招\",\n        \"拜\",\n        \"拝\",\n        \"拠\",\n        \"拡\",\n        \"括\",\n        \"拭\",\n        \"拮\",\n        \"拯\",\n        \"拱\",\n        \"拳\",\n        \"拵\",\n        \"拶\",\n        \"拷\",\n        \"拼\",\n        \"拾\",\n        \"拿\",\n        \"持\",\n        \"挂\",\n        \"指\",\n        \"挈\",\n        \"按\",\n        \"挊\",\n        \"挌\",\n        \"挍\",\n        \"挐\",\n        \"挑\",\n        \"挘\",\n        \"挙\",\n        \"挟\",\n        \"挨\",\n        \"挫\",\n        \"振\",\n        \"挵\",\n        \"挹\",\n        \"挺\",\n        \"挽\",\n        \"挾\",\n        \"挿\",\n        \"捉\",\n        \"捌\",\n        \"捍\",\n        \"捏\",\n        \"捐\",\n        \"捕\",\n        \"捗\",\n        \"捜\",\n        \"捥\",\n        \"捧\",\n        \"捨\",\n        \"捩\",\n        \"据\",\n        \"捲\",\n        \"捶\",\n        \"捷\",\n        \"捺\",\n        \"捻\",\n        \"掃\",\n        \"授\",\n        \"掉\",\n        \"掌\",\n        \"掏\",\n        \"排\",\n        \"掖\",\n        \"掘\",\n        \"掛\",\n        \"掟\",\n        \"掠\",\n        \"採\",\n        \"探\",\n        \"掣\",\n        \"接\",\n        \"控\",\n        \"推\",\n        \"掩\",\n        \"措\",\n        \"掬\",\n        \"掲\",\n        \"掴\",\n        \"掻\",\n        \"掾\",\n        \"揃\",\n        \"揄\",\n        \"揆\",\n        \"揉\",\n        \"描\",\n        \"提\",\n        \"插\",\n        \"揖\",\n        \"揚\",\n        \"換\",\n        \"握\",\n        \"揣\",\n        \"揭\",\n        \"揮\",\n        \"援\",\n        \"揶\",\n        \"揷\",\n        \"揺\",\n        \"搆\",\n        \"損\",\n        \"搏\",\n        \"搔\",\n        \"搖\",\n        \"搗\",\n        \"搜\",\n        \"搦\",\n        \"搨\",\n        \"搩\",\n        \"搬\",\n        \"搭\",\n        \"携\",\n        \"搾\",\n        \"摂\",\n        \"摑\",\n        \"摘\",\n        \"摠\",\n        \"摧\",\n        \"摩\",\n        \"摭\",\n        \"摯\",\n        \"摶\",\n        \"摸\",\n        \"摹\",\n        \"摺\",\n        \"撃\",\n        \"撈\",\n        \"撒\",\n        \"撓\",\n        \"撕\",\n        \"撚\",\n        \"撝\",\n        \"撞\",\n        \"撤\",\n        \"撥\",\n        \"撩\",\n        \"撫\",\n        \"播\",\n        \"撮\",\n        \"撰\",\n        \"撲\",\n        \"撹\",\n        \"撻\",\n        \"撼\",\n        \"撾\",\n        \"撿\",\n        \"擁\",\n        \"擂\",\n        \"擅\",\n        \"擇\",\n        \"操\",\n        \"擒\",\n        \"擔\",\n        \"擘\",\n        \"據\",\n        \"擠\",\n        \"擡\",\n        \"擢\",\n        \"擣\",\n        \"擤\",\n        \"擦\",\n        \"擧\",\n        \"擬\",\n        \"擯\",\n        \"擱\",\n        \"擲\",\n        \"擴\",\n        \"擺\",\n        \"擻\",\n        \"擽\",\n        \"擾\",\n        \"攀\",\n        \"攅\",\n        \"攘\",\n        \"攝\",\n        \"攣\",\n        \"攪\",\n        \"攫\",\n        \"攬\",\n        \"支\",\n        \"攴\",\n        \"攵\",\n        \"收\",\n        \"攷\",\n        \"攸\",\n        \"改\",\n        \"攻\",\n        \"放\",\n        \"政\",\n        \"故\",\n        \"效\",\n        \"敍\",\n        \"敎\",\n        \"敏\",\n        \"救\",\n        \"敕\",\n        \"敖\",\n        \"敗\",\n        \"教\",\n        \"敝\",\n        \"敢\",\n        \"散\",\n        \"敦\",\n        \"敧\",\n        \"敬\",\n        \"数\",\n        \"敲\",\n        \"整\",\n        \"敵\",\n        \"敷\",\n        \"數\",\n        \"斂\",\n        \"斃\",\n        \"文\",\n        \"斉\",\n        \"斌\",\n        \"斎\",\n        \"斐\",\n        \"斑\",\n        \"斗\",\n        \"料\",\n        \"斛\",\n        \"斜\",\n        \"斟\",\n        \"斡\",\n        \"斤\",\n        \"斥\",\n        \"斧\",\n        \"斫\",\n        \"斬\",\n        \"断\",\n        \"斯\",\n        \"新\",\n        \"斷\",\n        \"方\",\n        \"於\",\n        \"施\",\n        \"旁\",\n        \"旄\",\n        \"旅\",\n        \"旆\",\n        \"旋\",\n        \"旌\",\n        \"族\",\n        \"旒\",\n        \"旗\",\n        \"旛\",\n        \"无\",\n        \"既\",\n        \"日\",\n        \"旦\",\n        \"旧\",\n        \"旨\",\n        \"早\",\n        \"旬\",\n        \"旭\",\n        \"旱\",\n        \"旺\",\n        \"旻\",\n        \"旼\",\n        \"昂\",\n        \"昆\",\n        \"昇\",\n        \"昉\",\n        \"昊\",\n        \"昌\",\n        \"明\",\n        \"昏\",\n        \"易\",\n        \"昔\",\n        \"昕\",\n        \"星\",\n        \"映\",\n        \"春\",\n        \"昧\",\n        \"昨\",\n        \"昭\",\n        \"是\",\n        \"昱\",\n        \"昴\",\n        \"昵\",\n        \"昶\",\n        \"昺\",\n        \"昼\",\n        \"晁\",\n        \"時\",\n        \"晃\",\n        \"晄\",\n        \"晉\",\n        \"晋\",\n        \"晏\",\n        \"晒\",\n        \"晝\",\n        \"晟\",\n        \"晢\",\n        \"晤\",\n        \"晦\",\n        \"晧\",\n        \"晨\",\n        \"晩\",\n        \"普\",\n        \"景\",\n        \"晰\",\n        \"晴\",\n        \"晶\",\n        \"晷\",\n        \"智\",\n        \"暁\",\n        \"暇\",\n        \"暈\",\n        \"暉\",\n        \"暎\",\n        \"暑\",\n        \"暖\",\n        \"暗\",\n        \"暘\",\n        \"暝\",\n        \"暠\",\n        \"暢\",\n        \"暦\",\n        \"暫\",\n        \"暮\",\n        \"暴\",\n        \"暸\",\n        \"暹\",\n        \"暻\",\n        \"暼\",\n        \"暾\",\n        \"曁\",\n        \"曄\",\n        \"曇\",\n        \"曈\",\n        \"曉\",\n        \"曖\",\n        \"曙\",\n        \"曜\",\n        \"曝\",\n        \"曠\",\n        \"曦\",\n        \"曩\",\n        \"曰\",\n        \"曲\",\n        \"曳\",\n        \"更\",\n        \"曵\",\n        \"曷\",\n        \"書\",\n        \"曹\",\n        \"曺\",\n        \"曻\",\n        \"曼\",\n        \"曽\",\n        \"曾\",\n        \"替\",\n        \"最\",\n        \"會\",\n        \"朅\",\n        \"月\",\n        \"有\",\n        \"朋\",\n        \"服\",\n        \"朔\",\n        \"朕\",\n        \"朖\",\n        \"朗\",\n        \"望\",\n        \"朝\",\n        \"期\",\n        \"朦\",\n        \"朧\",\n        \"木\",\n        \"未\",\n        \"末\",\n        \"本\",\n        \"札\",\n        \"朮\",\n        \"朱\",\n        \"朴\",\n        \"朶\",\n        \"朸\",\n        \"机\",\n        \"朽\",\n        \"杆\",\n        \"杈\",\n        \"杉\",\n        \"李\",\n        \"杏\",\n        \"材\",\n        \"村\",\n        \"杓\",\n        \"杖\",\n        \"杙\",\n        \"杜\",\n        \"杞\",\n        \"束\",\n        \"杠\",\n        \"条\",\n        \"杢\",\n        \"杣\",\n        \"杤\",\n        \"来\",\n        \"杭\",\n        \"杮\",\n        \"杯\",\n        \"杰\",\n        \"東\",\n        \"杲\",\n        \"杳\",\n        \"杵\",\n        \"杷\",\n        \"杼\",\n        \"松\",\n        \"板\",\n        \"枇\",\n        \"枉\",\n        \"枋\",\n        \"枌\",\n        \"析\",\n        \"枕\",\n        \"林\",\n        \"枘\",\n        \"枚\",\n        \"果\",\n        \"枝\",\n        \"枠\",\n        \"枡\",\n        \"枢\",\n        \"枯\",\n        \"枲\",\n        \"枳\",\n        \"枴\",\n        \"架\",\n        \"枷\",\n        \"枸\",\n        \"枹\",\n        \"枻\",\n        \"柁\",\n        \"柄\",\n        \"柊\",\n        \"柏\",\n        \"某\",\n        \"柑\",\n        \"染\",\n        \"柔\",\n        \"柘\",\n        \"柚\",\n        \"柝\",\n        \"柞\",\n        \"柢\",\n        \"柩\",\n        \"柬\",\n        \"柯\",\n        \"柱\",\n        \"柳\",\n        \"柴\",\n        \"柵\",\n        \"査\",\n        \"柾\",\n        \"柿\",\n        \"栂\",\n        \"栃\",\n        \"栄\",\n        \"栓\",\n        \"栖\",\n        \"栗\",\n        \"栞\",\n        \"校\",\n        \"栢\",\n        \"栩\",\n        \"株\",\n        \"栫\",\n        \"栱\",\n        \"栲\",\n        \"栴\",\n        \"核\",\n        \"根\",\n        \"格\",\n        \"栽\",\n        \"栾\",\n        \"桀\",\n        \"桁\",\n        \"桂\",\n        \"桃\",\n        \"桅\",\n        \"框\",\n        \"案\",\n        \"桎\",\n        \"桐\",\n        \"桑\",\n        \"桒\",\n        \"桓\",\n        \"桔\",\n        \"桛\",\n        \"桜\",\n        \"桝\",\n        \"桟\",\n        \"档\",\n        \"桧\",\n        \"桴\",\n        \"桶\",\n        \"桿\",\n        \"梁\",\n        \"梃\",\n        \"梅\",\n        \"梏\",\n        \"梓\",\n        \"梔\",\n        \"梗\",\n        \"梛\",\n        \"條\",\n        \"梟\",\n        \"梠\",\n        \"梢\",\n        \"梦\",\n        \"梧\",\n        \"梨\",\n        \"梭\",\n        \"梯\",\n        \"械\",\n        \"梱\",\n        \"梲\",\n        \"梳\",\n        \"梵\",\n        \"梶\",\n        \"梼\",\n        \"棃\",\n        \"棄\",\n        \"棉\",\n        \"棊\",\n        \"棋\",\n        \"棍\",\n        \"棐\",\n        \"棒\",\n        \"棕\",\n        \"棖\",\n        \"棗\",\n        \"棘\",\n        \"棚\",\n        \"棟\",\n        \"棠\",\n        \"棡\",\n        \"棣\",\n        \"棧\",\n        \"棭\",\n        \"森\",\n        \"棰\",\n        \"棱\",\n        \"棲\",\n        \"棹\",\n        \"棺\",\n        \"椀\",\n        \"椅\",\n        \"椋\",\n        \"植\",\n        \"椎\",\n        \"椏\",\n        \"椒\",\n        \"椙\",\n        \"椚\",\n        \"椛\",\n        \"検\",\n        \"椥\",\n        \"椨\",\n        \"椰\",\n        \"椴\",\n        \"椵\",\n        \"椹\",\n        \"椽\",\n        \"椿\",\n        \"楂\",\n        \"楊\",\n        \"楓\",\n        \"楔\",\n        \"楕\",\n        \"楚\",\n        \"楝\",\n        \"楞\",\n        \"楠\",\n        \"楡\",\n        \"楢\",\n        \"楣\",\n        \"楨\",\n        \"楪\",\n        \"楫\",\n        \"業\",\n        \"楮\",\n        \"楯\",\n        \"楳\",\n        \"極\",\n        \"楷\",\n        \"楸\",\n        \"楹\",\n        \"楼\",\n        \"楽\",\n        \"榀\",\n        \"概\",\n        \"榊\",\n        \"榎\",\n        \"榑\",\n        \"榔\",\n        \"榕\",\n        \"榛\",\n        \"榜\",\n        \"榧\",\n        \"榮\",\n        \"榲\",\n        \"榴\",\n        \"榻\",\n        \"榾\",\n        \"槁\",\n        \"槃\",\n        \"槇\",\n        \"槊\",\n        \"構\",\n        \"槌\",\n        \"槍\",\n        \"槎\",\n        \"槐\",\n        \"槓\",\n        \"様\",\n        \"槙\",\n        \"槧\",\n        \"槨\",\n        \"槫\",\n        \"槲\",\n        \"槵\",\n        \"槹\",\n        \"槻\",\n        \"槽\",\n        \"槿\",\n        \"樂\",\n        \"樅\",\n        \"樊\",\n        \"樋\",\n        \"樒\",\n        \"樓\",\n        \"樗\",\n        \"標\",\n        \"樞\",\n        \"樟\",\n        \"模\",\n        \"樣\",\n        \"権\",\n        \"横\",\n        \"樫\",\n        \"樵\",\n        \"樸\",\n        \"樹\",\n        \"樺\",\n        \"樽\",\n        \"橄\",\n        \"橅\",\n        \"橇\",\n        \"橈\",\n        \"橋\",\n        \"橘\",\n        \"橙\",\n        \"橛\",\n        \"機\",\n        \"橡\",\n        \"橢\",\n        \"橫\",\n        \"橳\",\n        \"橿\",\n        \"檀\",\n        \"檄\",\n        \"檍\",\n        \"檎\",\n        \"檐\",\n        \"檔\",\n        \"檗\",\n        \"檜\",\n        \"檞\",\n        \"檠\",\n        \"檢\",\n        \"檣\",\n        \"檪\",\n        \"檫\",\n        \"檬\",\n        \"檮\",\n        \"檳\",\n        \"檸\",\n        \"檻\",\n        \"櫂\",\n        \"櫃\",\n        \"櫑\",\n        \"櫓\",\n        \"櫚\",\n        \"櫛\",\n        \"櫞\",\n        \"櫟\",\n        \"櫨\",\n        \"櫪\",\n        \"櫬\",\n        \"櫺\",\n        \"櫻\",\n        \"欄\",\n        \"欅\",\n        \"權\",\n        \"欒\",\n        \"欖\",\n        \"欝\",\n        \"欠\",\n        \"次\",\n        \"欣\",\n        \"欧\",\n        \"欲\",\n        \"欵\",\n        \"欷\",\n        \"欹\",\n        \"欺\",\n        \"欽\",\n        \"款\",\n        \"歃\",\n        \"歇\",\n        \"歌\",\n        \"歎\",\n        \"歐\",\n        \"歓\",\n        \"歔\",\n        \"歙\",\n        \"歛\",\n        \"歟\",\n        \"歡\",\n        \"止\",\n        \"正\",\n        \"此\",\n        \"步\",\n        \"武\",\n        \"歩\",\n        \"歪\",\n        \"歯\",\n        \"歳\",\n        \"歴\",\n        \"歷\",\n        \"歸\",\n        \"死\",\n        \"歿\",\n        \"殃\",\n        \"殄\",\n        \"殆\",\n        \"殉\",\n        \"殊\",\n        \"残\",\n        \"殖\",\n        \"殘\",\n        \"殞\",\n        \"殤\",\n        \"殪\",\n        \"殯\",\n        \"殱\",\n        \"殲\",\n        \"殳\",\n        \"殴\",\n        \"段\",\n        \"殷\",\n        \"殺\",\n        \"殻\",\n        \"殼\",\n        \"殿\",\n        \"毀\",\n        \"毅\",\n        \"毉\",\n        \"毋\",\n        \"母\",\n        \"毎\",\n        \"每\",\n        \"毒\",\n        \"毓\",\n        \"比\",\n        \"毖\",\n        \"毗\",\n        \"毘\",\n        \"毛\",\n        \"毟\",\n        \"毫\",\n        \"毬\",\n        \"毮\",\n        \"毯\",\n        \"毳\",\n        \"氈\",\n        \"氏\",\n        \"氐\",\n        \"民\",\n        \"氓\",\n        \"气\",\n        \"気\",\n        \"氣\",\n        \"水\",\n        \"氵\",\n        \"氷\",\n        \"永\",\n        \"氾\",\n        \"汀\",\n        \"汁\",\n        \"求\",\n        \"汎\",\n        \"汐\",\n        \"汕\",\n        \"汗\",\n        \"汙\",\n        \"汚\",\n        \"汜\",\n        \"汝\",\n        \"汞\",\n        \"江\",\n        \"池\",\n        \"汪\",\n        \"汰\",\n        \"汲\",\n        \"汳\",\n        \"汴\",\n        \"汶\",\n        \"決\",\n        \"汽\",\n        \"汾\",\n        \"沁\",\n        \"沂\",\n        \"沃\",\n        \"沅\",\n        \"沈\",\n        \"沌\",\n        \"沍\",\n        \"沐\",\n        \"沒\",\n        \"沓\",\n        \"沖\",\n        \"沙\",\n        \"沚\",\n        \"沛\",\n        \"没\",\n        \"沢\",\n        \"沪\",\n        \"沫\",\n        \"沮\",\n        \"沱\",\n        \"河\",\n        \"沸\",\n        \"油\",\n        \"治\",\n        \"沼\",\n        \"沽\",\n        \"沾\",\n        \"沿\",\n        \"況\",\n        \"泄\",\n        \"泉\",\n        \"泊\",\n        \"泌\",\n        \"泓\",\n        \"泔\",\n        \"法\",\n        \"泗\",\n        \"泛\",\n        \"泝\",\n        \"泡\",\n        \"波\",\n        \"泣\",\n        \"泥\",\n        \"注\",\n        \"泪\",\n        \"泰\",\n        \"泳\",\n        \"洋\",\n        \"洌\",\n        \"洎\",\n        \"洒\",\n        \"洗\",\n        \"洙\",\n        \"洛\",\n        \"洞\",\n        \"洟\",\n        \"津\",\n        \"洩\",\n        \"洪\",\n        \"洫\",\n        \"洮\",\n        \"洱\",\n        \"洲\",\n        \"洵\",\n        \"洶\",\n        \"洸\",\n        \"洹\",\n        \"活\",\n        \"洽\",\n        \"派\",\n        \"流\",\n        \"浄\",\n        \"浅\",\n        \"浙\",\n        \"浚\",\n        \"浜\",\n        \"浣\",\n        \"浦\",\n        \"浩\",\n        \"浪\",\n        \"浬\",\n        \"浮\",\n        \"浴\",\n        \"海\",\n        \"浸\",\n        \"涂\",\n        \"涅\",\n        \"涇\",\n        \"消\",\n        \"涌\",\n        \"涎\",\n        \"涓\",\n        \"涕\",\n        \"涙\",\n        \"涛\",\n        \"涜\",\n        \"涪\",\n        \"涯\",\n        \"液\",\n        \"涵\",\n        \"涸\",\n        \"涼\",\n        \"涿\",\n        \"淀\",\n        \"淄\",\n        \"淅\",\n        \"淆\",\n        \"淇\",\n        \"淋\",\n        \"淑\",\n        \"淘\",\n        \"淙\",\n        \"淚\",\n        \"淛\",\n        \"淝\",\n        \"淞\",\n        \"淡\",\n        \"淤\",\n        \"淦\",\n        \"淨\",\n        \"淪\",\n        \"淫\",\n        \"淮\",\n        \"深\",\n        \"淳\",\n        \"淵\",\n        \"混\",\n        \"淹\",\n        \"淺\",\n        \"添\",\n        \"淼\",\n        \"清\",\n        \"渇\",\n        \"済\",\n        \"渉\",\n        \"渋\",\n        \"渓\",\n        \"渕\",\n        \"渙\",\n        \"渚\",\n        \"減\",\n        \"渝\",\n        \"渟\",\n        \"渠\",\n        \"渡\",\n        \"渣\",\n        \"渤\",\n        \"渥\",\n        \"渦\",\n        \"渧\",\n        \"温\",\n        \"渫\",\n        \"測\",\n        \"渭\",\n        \"港\",\n        \"游\",\n        \"渺\",\n        \"渾\",\n        \"湃\",\n        \"湄\",\n        \"湊\",\n        \"湍\",\n        \"湎\",\n        \"湑\",\n        \"湖\",\n        \"湘\",\n        \"湛\",\n        \"湣\",\n        \"湧\",\n        \"湫\",\n        \"湮\",\n        \"湯\",\n        \"湲\",\n        \"湾\",\n        \"湿\",\n        \"満\",\n        \"溂\",\n        \"溌\",\n        \"源\",\n        \"準\",\n        \"溘\",\n        \"溜\",\n        \"溝\",\n        \"溟\",\n        \"溢\",\n        \"溥\",\n        \"溪\",\n        \"溫\",\n        \"溯\",\n        \"溲\",\n        \"溶\",\n        \"溷\",\n        \"溺\",\n        \"滂\",\n        \"滄\",\n        \"滅\",\n        \"滇\",\n        \"滉\",\n        \"滋\",\n        \"滌\",\n        \"滎\",\n        \"滑\",\n        \"滓\",\n        \"滔\",\n        \"滕\",\n        \"滙\",\n        \"滝\",\n        \"滞\",\n        \"滬\",\n        \"滲\",\n        \"滴\",\n        \"滸\",\n        \"滾\",\n        \"滿\",\n        \"漁\",\n        \"漂\",\n        \"漆\",\n        \"漉\",\n        \"漏\",\n        \"漑\",\n        \"漓\",\n        \"演\",\n        \"漕\",\n        \"漠\",\n        \"漢\",\n        \"漣\",\n        \"漪\",\n        \"漫\",\n        \"漬\",\n        \"漱\",\n        \"漲\",\n        \"漳\",\n        \"漸\",\n        \"漾\",\n        \"漿\",\n        \"潁\",\n        \"潅\",\n        \"潑\",\n        \"潔\",\n        \"潘\",\n        \"潙\",\n        \"潜\",\n        \"潞\",\n        \"潟\",\n        \"潤\",\n        \"潦\",\n        \"潭\",\n        \"潮\",\n        \"潯\",\n        \"潰\",\n        \"潴\",\n        \"潸\",\n        \"潺\",\n        \"潼\",\n        \"潾\",\n        \"澀\",\n        \"澁\",\n        \"澂\",\n        \"澄\",\n        \"澆\",\n        \"澈\",\n        \"澎\",\n        \"澗\",\n        \"澠\",\n        \"澡\",\n        \"澣\",\n        \"澤\",\n        \"澪\",\n        \"澱\",\n        \"澳\",\n        \"澶\",\n        \"澹\",\n        \"激\",\n        \"濁\",\n        \"濂\",\n        \"濃\",\n        \"濊\",\n        \"濕\",\n        \"濘\",\n        \"濛\",\n        \"濟\",\n        \"濠\",\n        \"濡\",\n        \"濤\",\n        \"濫\",\n        \"濮\",\n        \"濯\",\n        \"濱\",\n        \"濳\",\n        \"濵\",\n        \"濶\",\n        \"濹\",\n        \"濾\",\n        \"瀆\",\n        \"瀉\",\n        \"瀋\",\n        \"瀏\",\n        \"瀑\",\n        \"瀕\",\n        \"瀚\",\n        \"瀛\",\n        \"瀝\",\n        \"瀞\",\n        \"瀟\",\n        \"瀦\",\n        \"瀧\",\n        \"瀨\",\n        \"瀬\",\n        \"瀰\",\n        \"瀾\",\n        \"灌\",\n        \"灑\",\n        \"灘\",\n        \"灝\",\n        \"灣\",\n        \"灤\",\n        \"火\",\n        \"灯\",\n        \"灰\",\n        \"灸\",\n        \"灼\",\n        \"災\",\n        \"炉\",\n        \"炊\",\n        \"炎\",\n        \"炒\",\n        \"炕\",\n        \"炙\",\n        \"炫\",\n        \"炬\",\n        \"炭\",\n        \"炮\",\n        \"炯\",\n        \"炳\",\n        \"炷\",\n        \"炸\",\n        \"点\",\n        \"為\",\n        \"炻\",\n        \"烈\",\n        \"烏\",\n        \"烔\",\n        \"烙\",\n        \"烝\",\n        \"烟\",\n        \"烬\",\n        \"烱\",\n        \"烹\",\n        \"烽\",\n        \"焉\",\n        \"焔\",\n        \"焙\",\n        \"焚\",\n        \"焜\",\n        \"無\",\n        \"焦\",\n        \"焰\",\n        \"然\",\n        \"焼\",\n        \"煆\",\n        \"煇\",\n        \"煉\",\n        \"煊\",\n        \"煌\",\n        \"煎\",\n        \"煕\",\n        \"煖\",\n        \"煙\",\n        \"煜\",\n        \"煞\",\n        \"煠\",\n        \"煤\",\n        \"煥\",\n        \"煦\",\n        \"照\",\n        \"煩\",\n        \"煬\",\n        \"煮\",\n        \"煽\",\n        \"熄\",\n        \"熇\",\n        \"熈\",\n        \"熊\",\n        \"熏\",\n        \"熒\",\n        \"熔\",\n        \"熕\",\n        \"熙\",\n        \"熟\",\n        \"熨\",\n        \"熬\",\n        \"熱\",\n        \"熹\",\n        \"熾\",\n        \"燁\",\n        \"燃\",\n        \"燈\",\n        \"燎\",\n        \"燐\",\n        \"燒\",\n        \"燔\",\n        \"燕\",\n        \"燗\",\n        \"營\",\n        \"燠\",\n        \"燥\",\n        \"燦\",\n        \"燧\",\n        \"燬\",\n        \"燭\",\n        \"燮\",\n        \"燵\",\n        \"燹\",\n        \"燻\",\n        \"燼\",\n        \"燾\",\n        \"燿\",\n        \"爆\",\n        \"爐\",\n        \"爛\",\n        \"爨\",\n        \"爪\",\n        \"爬\",\n        \"爭\",\n        \"爰\",\n        \"爲\",\n        \"爵\",\n        \"父\",\n        \"爸\",\n        \"爹\",\n        \"爺\",\n        \"爻\",\n        \"爼\",\n        \"爽\",\n        \"爾\",\n        \"牀\",\n        \"牆\",\n        \"片\",\n        \"版\",\n        \"牋\",\n        \"牌\",\n        \"牒\",\n        \"牓\",\n        \"牘\",\n        \"牙\",\n        \"牛\",\n        \"牝\",\n        \"牟\",\n        \"牡\",\n        \"牢\",\n        \"牧\",\n        \"物\",\n        \"牯\",\n        \"牲\",\n        \"牴\",\n        \"特\",\n        \"牽\",\n        \"牾\",\n        \"犀\",\n        \"犁\",\n        \"犂\",\n        \"犇\",\n        \"犍\",\n        \"犒\",\n        \"犠\",\n        \"犢\",\n        \"犧\",\n        \"犬\",\n        \"犯\",\n        \"状\",\n        \"狀\",\n        \"狂\",\n        \"狃\",\n        \"狄\",\n        \"狆\",\n        \"狎\",\n        \"狐\",\n        \"狒\",\n        \"狗\",\n        \"狙\",\n        \"狛\",\n        \"狡\",\n        \"狢\",\n        \"狩\",\n        \"独\",\n        \"狭\",\n        \"狷\",\n        \"狸\",\n        \"狹\",\n        \"狼\",\n        \"狽\",\n        \"猊\",\n        \"猖\",\n        \"猙\",\n        \"猛\",\n        \"猜\",\n        \"猝\",\n        \"猟\",\n        \"猥\",\n        \"猨\",\n        \"猩\",\n        \"猪\",\n        \"猫\",\n        \"献\",\n        \"猯\",\n        \"猴\",\n        \"猶\",\n        \"猷\",\n        \"猹\",\n        \"猾\",\n        \"猿\",\n        \"獄\",\n        \"獅\",\n        \"獏\",\n        \"獒\",\n        \"獗\",\n        \"獣\",\n        \"獦\",\n        \"獨\",\n        \"獪\",\n        \"獰\",\n        \"獲\",\n        \"獵\",\n        \"獸\",\n        \"獺\",\n        \"玄\",\n        \"玅\",\n        \"率\",\n        \"玉\",\n        \"王\",\n        \"玕\",\n        \"玖\",\n        \"玘\",\n        \"玟\",\n        \"玩\",\n        \"玫\",\n        \"玲\",\n        \"玳\",\n        \"玷\",\n        \"玻\",\n        \"珀\",\n        \"珂\",\n        \"珈\",\n        \"珉\",\n        \"珊\",\n        \"珍\",\n        \"珎\",\n        \"珞\",\n        \"珠\",\n        \"珥\",\n        \"珩\",\n        \"珪\",\n        \"班\",\n        \"珮\",\n        \"現\",\n        \"球\",\n        \"琅\",\n        \"理\",\n        \"琉\",\n        \"琊\",\n        \"琛\",\n        \"琢\",\n        \"琥\",\n        \"琦\",\n        \"琨\",\n        \"琪\",\n        \"琫\",\n        \"琬\",\n        \"琮\",\n        \"琰\",\n        \"琲\",\n        \"琳\",\n        \"琴\",\n        \"琵\",\n        \"琶\",\n        \"琺\",\n        \"瑀\",\n        \"瑁\",\n        \"瑇\",\n        \"瑕\",\n        \"瑗\",\n        \"瑙\",\n        \"瑚\",\n        \"瑛\",\n        \"瑜\",\n        \"瑞\",\n        \"瑟\",\n        \"瑠\",\n        \"瑣\",\n        \"瑤\",\n        \"瑩\",\n        \"瑪\",\n        \"瑫\",\n        \"瑯\",\n        \"瑰\",\n        \"瑳\",\n        \"瑶\",\n        \"瑾\",\n        \"璃\",\n        \"璇\",\n        \"璈\",\n        \"璉\",\n        \"璋\",\n        \"璐\",\n        \"璘\",\n        \"璜\",\n        \"璞\",\n        \"璟\",\n        \"璣\",\n        \"璧\",\n        \"璫\",\n        \"環\",\n        \"璽\",\n        \"璿\",\n        \"瓊\",\n        \"瓏\",\n        \"瓔\",\n        \"瓚\",\n        \"瓜\",\n        \"瓠\",\n        \"瓢\",\n        \"瓣\",\n        \"瓦\",\n        \"瓩\",\n        \"瓮\",\n        \"瓲\",\n        \"瓶\",\n        \"瓷\",\n        \"甃\",\n        \"甄\",\n        \"甌\",\n        \"甍\",\n        \"甎\",\n        \"甑\",\n        \"甕\",\n        \"甗\",\n        \"甘\",\n        \"甚\",\n        \"甜\",\n        \"生\",\n        \"産\",\n        \"甥\",\n        \"甦\",\n        \"用\",\n        \"甪\",\n        \"甫\",\n        \"甬\",\n        \"田\",\n        \"由\",\n        \"甲\",\n        \"申\",\n        \"男\",\n        \"甸\",\n        \"町\",\n        \"画\",\n        \"畊\",\n        \"界\",\n        \"畏\",\n        \"畑\",\n        \"畔\",\n        \"留\",\n        \"畚\",\n        \"畜\",\n        \"畝\",\n        \"畠\",\n        \"畢\",\n        \"畤\",\n        \"略\",\n        \"畦\",\n        \"畧\",\n        \"番\",\n        \"畫\",\n        \"畭\",\n        \"畯\",\n        \"異\",\n        \"畳\",\n        \"畴\",\n        \"當\",\n        \"畷\",\n        \"畸\",\n        \"畿\",\n        \"疆\",\n        \"疇\",\n        \"疊\",\n        \"疋\",\n        \"疎\",\n        \"疏\",\n        \"疑\",\n        \"疔\",\n        \"疚\",\n        \"疝\",\n        \"疣\",\n        \"疥\",\n        \"疫\",\n        \"疱\",\n        \"疲\",\n        \"疳\",\n        \"疵\",\n        \"疸\",\n        \"疹\",\n        \"疼\",\n        \"疽\",\n        \"疾\",\n        \"痂\",\n        \"痃\",\n        \"病\",\n        \"症\",\n        \"痍\",\n        \"痎\",\n        \"痒\",\n        \"痔\",\n        \"痕\",\n        \"痘\",\n        \"痙\",\n        \"痛\",\n        \"痞\",\n        \"痢\",\n        \"痣\",\n        \"痤\",\n        \"痩\",\n        \"痰\",\n        \"痲\",\n        \"痳\",\n        \"痴\",\n        \"痺\",\n        \"痼\",\n        \"痾\",\n        \"痿\",\n        \"瘀\",\n        \"瘁\",\n        \"瘋\",\n        \"瘍\",\n        \"瘖\",\n        \"瘙\",\n        \"瘞\",\n        \"瘠\",\n        \"瘡\",\n        \"瘢\",\n        \"瘤\",\n        \"瘦\",\n        \"瘧\",\n        \"瘭\",\n        \"瘰\",\n        \"瘳\",\n        \"瘴\",\n        \"瘻\",\n        \"療\",\n        \"癆\",\n        \"癇\",\n        \"癈\",\n        \"癋\",\n        \"癌\",\n        \"癒\",\n        \"癖\",\n        \"癘\",\n        \"癜\",\n        \"癡\",\n        \"癢\",\n        \"癧\",\n        \"癩\",\n        \"癪\",\n        \"癬\",\n        \"癭\",\n        \"癰\",\n        \"癲\",\n        \"癸\",\n        \"発\",\n        \"登\",\n        \"發\",\n        \"白\",\n        \"百\",\n        \"皃\",\n        \"的\",\n        \"皆\",\n        \"皇\",\n        \"皈\",\n        \"皋\",\n        \"皎\",\n        \"皐\",\n        \"皓\",\n        \"皕\",\n        \"皖\",\n        \"皙\",\n        \"皚\",\n        \"皮\",\n        \"皰\",\n        \"皴\",\n        \"皷\",\n        \"皸\",\n        \"皹\",\n        \"皺\",\n        \"皿\",\n        \"盂\",\n        \"盃\",\n        \"盆\",\n        \"盈\",\n        \"盉\",\n        \"益\",\n        \"盒\",\n        \"盔\",\n        \"盖\",\n        \"盗\",\n        \"盛\",\n        \"盜\",\n        \"盞\",\n        \"盟\",\n        \"盡\",\n        \"監\",\n        \"盤\",\n        \"盥\",\n        \"盦\",\n        \"盧\",\n        \"盪\",\n        \"目\",\n        \"盱\",\n        \"盲\",\n        \"直\",\n        \"相\",\n        \"盻\",\n        \"盼\",\n        \"盾\",\n        \"省\",\n        \"眄\",\n        \"眇\",\n        \"眈\",\n        \"眉\",\n        \"看\",\n        \"県\",\n        \"眙\",\n        \"眛\",\n        \"眞\",\n        \"真\",\n        \"眠\",\n        \"眥\",\n        \"眦\",\n        \"眩\",\n        \"眶\",\n        \"眷\",\n        \"眸\",\n        \"眺\",\n        \"眼\",\n        \"着\",\n        \"睛\",\n        \"睜\",\n        \"睡\",\n        \"睢\",\n        \"督\",\n        \"睥\",\n        \"睦\",\n        \"睨\",\n        \"睫\",\n        \"睹\",\n        \"睺\",\n        \"睾\",\n        \"睿\",\n        \"瞀\",\n        \"瞋\",\n        \"瞑\",\n        \"瞞\",\n        \"瞠\",\n        \"瞥\",\n        \"瞬\",\n        \"瞭\",\n        \"瞰\",\n        \"瞳\",\n        \"瞶\",\n        \"瞻\",\n        \"瞼\",\n        \"瞽\",\n        \"瞿\",\n        \"矍\",\n        \"矗\",\n        \"矛\",\n        \"矜\",\n        \"矢\",\n        \"矣\",\n        \"知\",\n        \"矧\",\n        \"矩\",\n        \"短\",\n        \"矮\",\n        \"矯\",\n        \"石\",\n        \"砂\",\n        \"砌\",\n        \"砒\",\n        \"研\",\n        \"砕\",\n        \"砖\",\n        \"砥\",\n        \"砦\",\n        \"砧\",\n        \"砭\",\n        \"砲\",\n        \"破\",\n        \"砺\",\n        \"硅\",\n        \"硏\",\n        \"硝\",\n        \"硨\",\n        \"硫\",\n        \"硬\",\n        \"确\",\n        \"硯\",\n        \"硴\",\n        \"硼\",\n        \"碁\",\n        \"碆\",\n        \"碇\",\n        \"碌\",\n        \"碍\",\n        \"碎\",\n        \"碑\",\n        \"碓\",\n        \"碕\",\n        \"碗\",\n        \"碣\",\n        \"碧\",\n        \"碩\",\n        \"碪\",\n        \"確\",\n        \"碾\",\n        \"磁\",\n        \"磊\",\n        \"磋\",\n        \"磌\",\n        \"磐\",\n        \"磔\",\n        \"磚\",\n        \"磧\",\n        \"磨\",\n        \"磬\",\n        \"磯\",\n        \"磲\",\n        \"磴\",\n        \"磽\",\n        \"礁\",\n        \"礎\",\n        \"礑\",\n        \"礒\",\n        \"礙\",\n        \"礦\",\n        \"礪\",\n        \"礫\",\n        \"礬\",\n        \"礮\",\n        \"示\",\n        \"礼\",\n        \"社\",\n        \"祀\",\n        \"祁\",\n        \"祅\",\n        \"祆\",\n        \"祇\",\n        \"祈\",\n        \"祉\",\n        \"祐\",\n        \"祓\",\n        \"祕\",\n        \"祖\",\n        \"祗\",\n        \"祚\",\n        \"祛\",\n        \"祝\",\n        \"神\",\n        \"祟\",\n        \"祠\",\n        \"祢\",\n        \"祥\",\n        \"票\",\n        \"祭\",\n        \"祷\",\n        \"祺\",\n        \"祿\",\n        \"禀\",\n        \"禁\",\n        \"禄\",\n        \"禅\",\n        \"禊\",\n        \"禍\",\n        \"禎\",\n        \"福\",\n        \"禛\",\n        \"禝\",\n        \"禦\",\n        \"禧\",\n        \"禪\",\n        \"禮\",\n        \"禰\",\n        \"禱\",\n        \"禴\",\n        \"禹\",\n        \"禺\",\n        \"禽\",\n        \"禾\",\n        \"禿\",\n        \"秀\",\n        \"私\",\n        \"秉\",\n        \"秋\",\n        \"种\",\n        \"科\",\n        \"秒\",\n        \"秕\",\n        \"秘\",\n        \"秞\",\n        \"租\",\n        \"秡\",\n        \"秣\",\n        \"秤\",\n        \"秦\",\n        \"秧\",\n        \"秩\",\n        \"称\",\n        \"移\",\n        \"稀\",\n        \"稈\",\n        \"程\",\n        \"稍\",\n        \"税\",\n        \"稔\",\n        \"稗\",\n        \"稙\",\n        \"稚\",\n        \"稜\",\n        \"稟\",\n        \"稠\",\n        \"種\",\n        \"稱\",\n        \"稲\",\n        \"稷\",\n        \"稹\",\n        \"稻\",\n        \"稼\",\n        \"稽\",\n        \"稿\",\n        \"穀\",\n        \"穂\",\n        \"穆\",\n        \"穉\",\n        \"積\",\n        \"穎\",\n        \"穏\",\n        \"穐\",\n        \"穗\",\n        \"穡\",\n        \"穢\",\n        \"穣\",\n        \"穫\",\n        \"穰\",\n        \"穴\",\n        \"穵\",\n        \"究\",\n        \"穹\",\n        \"空\",\n        \"穽\",\n        \"穿\",\n        \"突\",\n        \"窃\",\n        \"窄\",\n        \"窈\",\n        \"窒\",\n        \"窓\",\n        \"窕\",\n        \"窖\",\n        \"窗\",\n        \"窘\",\n        \"窟\",\n        \"窠\",\n        \"窩\",\n        \"窪\",\n        \"窬\",\n        \"窮\",\n        \"窯\",\n        \"窰\",\n        \"窶\",\n        \"窺\",\n        \"窿\",\n        \"竃\",\n        \"竄\",\n        \"竅\",\n        \"竇\",\n        \"竈\",\n        \"竊\",\n        \"立\",\n        \"竎\",\n        \"站\",\n        \"竜\",\n        \"竝\",\n        \"竟\",\n        \"章\",\n        \"竢\",\n        \"竣\",\n        \"童\",\n        \"竦\",\n        \"竪\",\n        \"竫\",\n        \"竭\",\n        \"端\",\n        \"競\",\n        \"竸\",\n        \"竹\",\n        \"竺\",\n        \"竿\",\n        \"笄\",\n        \"笈\",\n        \"笊\",\n        \"笋\",\n        \"笏\",\n        \"笑\",\n        \"笘\",\n        \"笙\",\n        \"笛\",\n        \"笞\",\n        \"笠\",\n        \"笥\",\n        \"符\",\n        \"笨\",\n        \"第\",\n        \"笮\",\n        \"笵\",\n        \"笹\",\n        \"筅\",\n        \"筆\",\n        \"筈\",\n        \"等\",\n        \"筋\",\n        \"筌\",\n        \"筍\",\n        \"筏\",\n        \"筐\",\n        \"筑\",\n        \"筒\",\n        \"答\",\n        \"策\",\n        \"筝\",\n        \"筠\",\n        \"筥\",\n        \"筧\",\n        \"筬\",\n        \"筭\",\n        \"筮\",\n        \"筰\",\n        \"筱\",\n        \"筵\",\n        \"筺\",\n        \"筿\",\n        \"箆\",\n        \"箇\",\n        \"箋\",\n        \"箍\",\n        \"箏\",\n        \"箒\",\n        \"箔\",\n        \"箕\",\n        \"算\",\n        \"箙\",\n        \"箚\",\n        \"箜\",\n        \"箝\",\n        \"箞\",\n        \"管\",\n        \"箪\",\n        \"箭\",\n        \"箱\",\n        \"箴\",\n        \"箸\",\n        \"節\",\n        \"篁\",\n        \"範\",\n        \"篆\",\n        \"篇\",\n        \"築\",\n        \"篋\",\n        \"篌\",\n        \"篏\",\n        \"篙\",\n        \"篝\",\n        \"篠\",\n        \"篤\",\n        \"篥\",\n        \"篦\",\n        \"篩\",\n        \"篭\",\n        \"篳\",\n        \"篶\",\n        \"篷\",\n        \"簀\",\n        \"簁\",\n        \"簃\",\n        \"簇\",\n        \"簋\",\n        \"簍\",\n        \"簑\",\n        \"簒\",\n        \"簓\",\n        \"簔\",\n        \"簗\",\n        \"簞\",\n        \"簟\",\n        \"簠\",\n        \"簡\",\n        \"簣\",\n        \"簧\",\n        \"簪\",\n        \"簫\",\n        \"簳\",\n        \"簶\",\n        \"簷\",\n        \"簸\",\n        \"簽\",\n        \"簾\",\n        \"簿\",\n        \"籀\",\n        \"籃\",\n        \"籌\",\n        \"籍\",\n        \"籏\",\n        \"籐\",\n        \"籔\",\n        \"籖\",\n        \"籙\",\n        \"籟\",\n        \"籠\",\n        \"籤\",\n        \"籬\",\n        \"米\",\n        \"籾\",\n        \"粂\",\n        \"粃\",\n        \"粉\",\n        \"粋\",\n        \"粍\",\n        \"粏\",\n        \"粒\",\n        \"粕\",\n        \"粗\",\n        \"粘\",\n        \"粛\",\n        \"粟\",\n        \"粡\",\n        \"粢\",\n        \"粤\",\n        \"粥\",\n        \"粦\",\n        \"粧\",\n        \"粮\",\n        \"粱\",\n        \"粲\",\n        \"粳\",\n        \"粹\",\n        \"粼\",\n        \"粽\",\n        \"精\",\n        \"糀\",\n        \"糂\",\n        \"糅\",\n        \"糊\",\n        \"糒\",\n        \"糕\",\n        \"糖\",\n        \"糜\",\n        \"糝\",\n        \"糞\",\n        \"糟\",\n        \"糠\",\n        \"糢\",\n        \"糧\",\n        \"糯\",\n        \"糲\",\n        \"糴\",\n        \"糶\",\n        \"糸\",\n        \"糺\",\n        \"系\",\n        \"糾\",\n        \"紀\",\n        \"紂\",\n        \"約\",\n        \"紅\",\n        \"紆\",\n        \"紇\",\n        \"紈\",\n        \"紊\",\n        \"紋\",\n        \"納\",\n        \"紐\",\n        \"紒\",\n        \"純\",\n        \"紗\",\n        \"紘\",\n        \"紙\",\n        \"級\",\n        \"紛\",\n        \"紜\",\n        \"素\",\n        \"紡\",\n        \"索\",\n        \"紫\",\n        \"紬\",\n        \"紮\",\n        \"累\",\n        \"細\",\n        \"紲\",\n        \"紳\",\n        \"紹\",\n        \"紺\",\n        \"絁\",\n        \"終\",\n        \"絃\",\n        \"組\",\n        \"絅\",\n        \"絆\",\n        \"経\",\n        \"絎\",\n        \"絏\",\n        \"結\",\n        \"絓\",\n        \"絖\",\n        \"絛\",\n        \"絜\",\n        \"絞\",\n        \"絡\",\n        \"絢\",\n        \"絣\",\n        \"給\",\n        \"絨\",\n        \"絮\",\n        \"統\",\n        \"絲\",\n        \"絳\",\n        \"絵\",\n        \"絶\",\n        \"絹\",\n        \"絽\",\n        \"綉\",\n        \"綏\",\n        \"經\",\n        \"継\",\n        \"続\",\n        \"綛\",\n        \"綜\",\n        \"綟\",\n        \"綠\",\n        \"綢\",\n        \"綦\",\n        \"綫\",\n        \"綬\",\n        \"維\",\n        \"綮\",\n        \"綯\",\n        \"綰\",\n        \"綱\",\n        \"網\",\n        \"綴\",\n        \"綵\",\n        \"綸\",\n        \"綺\",\n        \"綻\",\n        \"綽\",\n        \"綾\",\n        \"綿\",\n        \"緂\",\n        \"緇\",\n        \"緊\",\n        \"緋\",\n        \"総\",\n        \"緑\",\n        \"緒\",\n        \"緖\",\n        \"緘\",\n        \"線\",\n        \"緜\",\n        \"緝\",\n        \"緞\",\n        \"締\",\n        \"緡\",\n        \"緣\",\n        \"編\",\n        \"緩\",\n        \"緬\",\n        \"緯\",\n        \"緲\",\n        \"練\",\n        \"緻\",\n        \"縁\",\n        \"縄\",\n        \"縅\",\n        \"縉\",\n        \"縊\",\n        \"縋\",\n        \"縑\",\n        \"縒\",\n        \"縕\",\n        \"縛\",\n        \"縞\",\n        \"縟\",\n        \"縢\",\n        \"縣\",\n        \"縦\",\n        \"縫\",\n        \"縬\",\n        \"縮\",\n        \"縱\",\n        \"縲\",\n        \"縵\",\n        \"縷\",\n        \"縹\",\n        \"縺\",\n        \"縻\",\n        \"總\",\n        \"績\",\n        \"繁\",\n        \"繃\",\n        \"繅\",\n        \"繆\",\n        \"繇\",\n        \"繊\",\n        \"繋\",\n        \"繍\",\n        \"織\",\n        \"繕\",\n        \"繙\",\n        \"繚\",\n        \"繝\",\n        \"繞\",\n        \"繡\",\n        \"繧\",\n        \"繩\",\n        \"繪\",\n        \"繫\",\n        \"繭\",\n        \"繰\",\n        \"繹\",\n        \"繻\",\n        \"繼\",\n        \"繽\",\n        \"纂\",\n        \"纈\",\n        \"纉\",\n        \"續\",\n        \"纍\",\n        \"纏\",\n        \"纐\",\n        \"纒\",\n        \"纓\",\n        \"纔\",\n        \"纛\",\n        \"纜\",\n        \"缶\",\n        \"缺\",\n        \"罄\",\n        \"罅\",\n        \"罌\",\n        \"罎\",\n        \"罐\",\n        \"罔\",\n        \"罕\",\n        \"罘\",\n        \"罠\",\n        \"罡\",\n        \"罣\",\n        \"罨\",\n        \"罩\",\n        \"罪\",\n        \"罫\",\n        \"置\",\n        \"罰\",\n        \"署\",\n        \"罵\",\n        \"罷\",\n        \"罸\",\n        \"罹\",\n        \"羂\",\n        \"羅\",\n        \"羆\",\n        \"羇\",\n        \"羈\",\n        \"羊\",\n        \"羌\",\n        \"美\",\n        \"羚\",\n        \"羞\",\n        \"羣\",\n        \"群\",\n        \"羨\",\n        \"義\",\n        \"羮\",\n        \"羯\",\n        \"羲\",\n        \"羸\",\n        \"羹\",\n        \"羽\",\n        \"羿\",\n        \"翁\",\n        \"翅\",\n        \"翆\",\n        \"翊\",\n        \"翌\",\n        \"翎\",\n        \"習\",\n        \"翔\",\n        \"翕\",\n        \"翛\",\n        \"翟\",\n        \"翠\",\n        \"翡\",\n        \"翦\",\n        \"翩\",\n        \"翫\",\n        \"翰\",\n        \"翳\",\n        \"翹\",\n        \"翻\",\n        \"翼\",\n        \"耀\",\n        \"老\",\n        \"考\",\n        \"耄\",\n        \"者\",\n        \"耆\",\n        \"耋\",\n        \"而\",\n        \"耐\",\n        \"耒\",\n        \"耕\",\n        \"耗\",\n        \"耘\",\n        \"耙\",\n        \"耡\",\n        \"耤\",\n        \"耨\",\n        \"耳\",\n        \"耶\",\n        \"耻\",\n        \"耽\",\n        \"耿\",\n        \"聃\",\n        \"聆\",\n        \"聊\",\n        \"聖\",\n        \"聘\",\n        \"聚\",\n        \"聞\",\n        \"聟\",\n        \"聡\",\n        \"聢\",\n        \"聨\",\n        \"聯\",\n        \"聰\",\n        \"聱\",\n        \"聲\",\n        \"聳\",\n        \"聴\",\n        \"聶\",\n        \"職\",\n        \"聽\",\n        \"聾\",\n        \"聿\",\n        \"肄\",\n        \"肅\",\n        \"肆\",\n        \"肇\",\n        \"肉\",\n        \"肋\",\n        \"肌\",\n        \"肓\",\n        \"肖\",\n        \"肘\",\n        \"肚\",\n        \"肛\",\n        \"肝\",\n        \"股\",\n        \"肢\",\n        \"肥\",\n        \"肩\",\n        \"肪\",\n        \"肭\",\n        \"肯\",\n        \"肱\",\n        \"育\",\n        \"肴\",\n        \"肺\",\n        \"胃\",\n        \"胄\",\n        \"胆\",\n        \"背\",\n        \"胎\",\n        \"胖\",\n        \"胚\",\n        \"胛\",\n        \"胝\",\n        \"胞\",\n        \"胡\",\n        \"胤\",\n        \"胥\",\n        \"胯\",\n        \"胱\",\n        \"胴\",\n        \"胸\",\n        \"胼\",\n        \"能\",\n        \"脂\",\n        \"脅\",\n        \"脆\",\n        \"脇\",\n        \"脈\",\n        \"脉\",\n        \"脊\",\n        \"脘\",\n        \"脚\",\n        \"脛\",\n        \"脞\",\n        \"脣\",\n        \"脩\",\n        \"脯\",\n        \"脱\",\n        \"脳\",\n        \"脹\",\n        \"脾\",\n        \"腆\",\n        \"腊\",\n        \"腋\",\n        \"腎\",\n        \"腐\",\n        \"腑\",\n        \"腓\",\n        \"腔\",\n        \"腕\",\n        \"腟\",\n        \"腥\",\n        \"腦\",\n        \"腫\",\n        \"腮\",\n        \"腰\",\n        \"腱\",\n        \"腴\",\n        \"腸\",\n        \"腹\",\n        \"腺\",\n        \"腿\",\n        \"膀\",\n        \"膂\",\n        \"膃\",\n        \"膅\",\n        \"膈\",\n        \"膊\",\n        \"膏\",\n        \"膓\",\n        \"膕\",\n        \"膚\",\n        \"膜\",\n        \"膝\",\n        \"膠\",\n        \"膣\",\n        \"膨\",\n        \"膩\",\n        \"膰\",\n        \"膳\",\n        \"膵\",\n        \"膸\",\n        \"膺\",\n        \"膻\",\n        \"膽\",\n        \"膾\",\n        \"膿\",\n        \"臀\",\n        \"臂\",\n        \"臆\",\n        \"臈\",\n        \"臉\",\n        \"臍\",\n        \"臏\",\n        \"臑\",\n        \"臓\",\n        \"臘\",\n        \"臙\",\n        \"臚\",\n        \"臟\",\n        \"臠\",\n        \"臣\",\n        \"臥\",\n        \"臧\",\n        \"臨\",\n        \"自\",\n        \"臬\",\n        \"臭\",\n        \"至\",\n        \"致\",\n        \"臺\",\n        \"臼\",\n        \"臾\",\n        \"舁\",\n        \"舂\",\n        \"舅\",\n        \"與\",\n        \"興\",\n        \"舉\",\n        \"舊\",\n        \"舌\",\n        \"舍\",\n        \"舎\",\n        \"舐\",\n        \"舒\",\n        \"舗\",\n        \"舘\",\n        \"舛\",\n        \"舜\",\n        \"舞\",\n        \"舟\",\n        \"舩\",\n        \"航\",\n        \"舫\",\n        \"般\",\n        \"舲\",\n        \"舳\",\n        \"舵\",\n        \"舶\",\n        \"舷\",\n        \"舸\",\n        \"船\",\n        \"艀\",\n        \"艇\",\n        \"艘\",\n        \"艙\",\n        \"艚\",\n        \"艜\",\n        \"艟\",\n        \"艣\",\n        \"艤\",\n        \"艦\",\n        \"艨\",\n        \"艪\",\n        \"艫\",\n        \"艮\",\n        \"良\",\n        \"艱\",\n        \"色\",\n        \"艶\",\n        \"艷\",\n        \"艸\",\n        \"艾\",\n        \"芋\",\n        \"芍\",\n        \"芎\",\n        \"芒\",\n        \"芙\",\n        \"芝\",\n        \"芟\",\n        \"芥\",\n        \"芦\",\n        \"芨\",\n        \"芩\",\n        \"芬\",\n        \"芭\",\n        \"芯\",\n        \"花\",\n        \"芳\",\n        \"芷\",\n        \"芸\",\n        \"芹\",\n        \"芻\",\n        \"芽\",\n        \"芾\",\n        \"芿\",\n        \"苅\",\n        \"苑\",\n        \"苒\",\n        \"苓\",\n        \"苔\",\n        \"苕\",\n        \"苗\",\n        \"苛\",\n        \"苜\",\n        \"苞\",\n        \"苟\",\n        \"苡\",\n        \"苣\",\n        \"若\",\n        \"苦\",\n        \"苧\",\n        \"苫\",\n        \"英\",\n        \"苳\",\n        \"苴\",\n        \"苹\",\n        \"苺\",\n        \"苻\",\n        \"茂\",\n        \"范\",\n        \"茄\",\n        \"茅\",\n        \"茆\",\n        \"茉\",\n        \"茎\",\n        \"茗\",\n        \"茘\",\n        \"茜\",\n        \"茣\",\n        \"茨\",\n        \"茫\",\n        \"茯\",\n        \"茱\",\n        \"茲\",\n        \"茴\",\n        \"茵\",\n        \"茶\",\n        \"茸\",\n        \"茹\",\n        \"荀\",\n        \"荃\",\n        \"草\",\n        \"荊\",\n        \"荏\",\n        \"荒\",\n        \"荔\",\n        \"荘\",\n        \"荳\",\n        \"荵\",\n        \"荷\",\n        \"荻\",\n        \"荼\",\n        \"莅\",\n        \"莆\",\n        \"莉\",\n        \"莊\",\n        \"莎\",\n        \"莒\",\n        \"莓\",\n        \"莕\",\n        \"莖\",\n        \"莘\",\n        \"莚\",\n        \"莞\",\n        \"莟\",\n        \"莠\",\n        \"莢\",\n        \"莧\",\n        \"莨\",\n        \"莩\",\n        \"莪\",\n        \"莫\",\n        \"莱\",\n        \"莵\",\n        \"莽\",\n        \"菀\",\n        \"菁\",\n        \"菅\",\n        \"菇\",\n        \"菊\",\n        \"菌\",\n        \"菎\",\n        \"菓\",\n        \"菖\",\n        \"菘\",\n        \"菜\",\n        \"菟\",\n        \"菠\",\n        \"菩\",\n        \"菫\",\n        \"華\",\n        \"菰\",\n        \"菱\",\n        \"菲\",\n        \"菴\",\n        \"萃\",\n        \"萄\",\n        \"萇\",\n        \"萊\",\n        \"萌\",\n        \"萍\",\n        \"萎\",\n        \"萓\",\n        \"萠\",\n        \"萢\",\n        \"萩\",\n        \"萪\",\n        \"萬\",\n        \"萱\",\n        \"萵\",\n        \"萸\",\n        \"萼\",\n        \"落\",\n        \"葆\",\n        \"葈\",\n        \"葉\",\n        \"葎\",\n        \"著\",\n        \"葛\",\n        \"葡\",\n        \"葢\",\n        \"董\",\n        \"葦\",\n        \"葩\",\n        \"葫\",\n        \"葬\",\n        \"葭\",\n        \"葯\",\n        \"葱\",\n        \"葵\",\n        \"葷\",\n        \"葺\",\n        \"蒂\",\n        \"蒋\",\n        \"蒐\",\n        \"蒔\",\n        \"蒙\",\n        \"蒜\",\n        \"蒟\",\n        \"蒡\",\n        \"蒯\",\n        \"蒲\",\n        \"蒸\",\n        \"蒻\",\n        \"蒼\",\n        \"蒾\",\n        \"蒿\",\n        \"蓀\",\n        \"蓁\",\n        \"蓂\",\n        \"蓄\",\n        \"蓆\",\n        \"蓉\",\n        \"蓊\",\n        \"蓋\",\n        \"蓍\",\n        \"蓐\",\n        \"蓑\",\n        \"蓖\",\n        \"蓙\",\n        \"蓚\",\n        \"蓬\",\n        \"蓮\",\n        \"蓯\",\n        \"蓴\",\n        \"蓼\",\n        \"蓿\",\n        \"蔀\",\n        \"蔑\",\n        \"蔓\",\n        \"蔔\",\n        \"蔕\",\n        \"蔗\",\n        \"蔘\",\n        \"蔚\",\n        \"蔟\",\n        \"蔡\",\n        \"蔣\",\n        \"蔦\",\n        \"蔬\",\n        \"蔭\",\n        \"蔲\",\n        \"蔵\",\n        \"蔽\",\n        \"蕁\",\n        \"蕃\",\n        \"蕈\",\n        \"蕉\",\n        \"蕊\",\n        \"蕋\",\n        \"蕎\",\n        \"蕗\",\n        \"蕙\",\n        \"蕚\",\n        \"蕣\",\n        \"蕨\",\n        \"蕩\",\n        \"蕪\",\n        \"蕭\",\n        \"蕷\",\n        \"蕾\",\n        \"薀\",\n        \"薄\",\n        \"薇\",\n        \"薈\",\n        \"薊\",\n        \"薏\",\n        \"薐\",\n        \"薑\",\n        \"薔\",\n        \"薗\",\n        \"薙\",\n        \"薛\",\n        \"薜\",\n        \"薟\",\n        \"薤\",\n        \"薦\",\n        \"薨\",\n        \"薩\",\n        \"薪\",\n        \"薫\",\n        \"薬\",\n        \"薭\",\n        \"薮\",\n        \"薯\",\n        \"薹\",\n        \"薺\",\n        \"藁\",\n        \"藉\",\n        \"藍\",\n        \"藏\",\n        \"藐\",\n        \"藕\",\n        \"藜\",\n        \"藝\",\n        \"藤\",\n        \"藥\",\n        \"藦\",\n        \"藩\",\n        \"藪\",\n        \"藷\",\n        \"藹\",\n        \"藺\",\n        \"藻\",\n        \"藿\",\n        \"蘂\",\n        \"蘄\",\n        \"蘆\",\n        \"蘇\",\n        \"蘊\",\n        \"蘋\",\n        \"蘐\",\n        \"蘑\",\n        \"蘖\",\n        \"蘗\",\n        \"蘚\",\n        \"蘞\",\n        \"蘭\",\n        \"蘯\",\n        \"蘿\",\n        \"虎\",\n        \"虐\",\n        \"虔\",\n        \"處\",\n        \"虗\",\n        \"虚\",\n        \"虜\",\n        \"虞\",\n        \"號\",\n        \"虢\",\n        \"虧\",\n        \"虫\",\n        \"虬\",\n        \"虱\",\n        \"虹\",\n        \"虻\",\n        \"蚊\",\n        \"蚋\",\n        \"蚓\",\n        \"蚕\",\n        \"蚣\",\n        \"蚤\",\n        \"蚩\",\n        \"蚪\",\n        \"蚫\",\n        \"蚯\",\n        \"蚰\",\n        \"蛄\",\n        \"蛆\",\n        \"蛇\",\n        \"蛉\",\n        \"蛋\",\n        \"蛍\",\n        \"蛎\",\n        \"蛔\",\n        \"蛙\",\n        \"蛛\",\n        \"蛞\",\n        \"蛟\",\n        \"蛤\",\n        \"蛩\",\n        \"蛭\",\n        \"蛮\",\n        \"蛯\",\n        \"蛸\",\n        \"蛹\",\n        \"蛻\",\n        \"蛾\",\n        \"蜀\",\n        \"蜂\",\n        \"蜃\",\n        \"蜆\",\n        \"蜈\",\n        \"蜉\",\n        \"蜊\",\n        \"蜍\",\n        \"蜑\",\n        \"蜒\",\n        \"蜓\",\n        \"蜘\",\n        \"蜚\",\n        \"蜜\",\n        \"蜥\",\n        \"蜩\",\n        \"蜱\",\n        \"蜴\",\n        \"蜷\",\n        \"蜺\",\n        \"蜻\",\n        \"蜾\",\n        \"蜿\",\n        \"蝀\",\n        \"蝃\",\n        \"蝉\",\n        \"蝋\",\n        \"蝌\",\n        \"蝎\",\n        \"蝓\",\n        \"蝕\",\n        \"蝗\",\n        \"蝙\",\n        \"蝟\",\n        \"蝠\",\n        \"蝣\",\n        \"蝦\",\n        \"蝨\",\n        \"蝪\",\n        \"蝮\",\n        \"蝯\",\n        \"蝴\",\n        \"蝶\",\n        \"蝸\",\n        \"蝿\",\n        \"螂\",\n        \"融\",\n        \"螟\",\n        \"螢\",\n        \"螫\",\n        \"螭\",\n        \"螳\",\n        \"螺\",\n        \"螻\",\n        \"螽\",\n        \"蟀\",\n        \"蟄\",\n        \"蟇\",\n        \"蟋\",\n        \"蟎\",\n        \"蟐\",\n        \"蟒\",\n        \"蟠\",\n        \"蟥\",\n        \"蟬\",\n        \"蟯\",\n        \"蟲\",\n        \"蟷\",\n        \"蟹\",\n        \"蟻\",\n        \"蟾\",\n        \"蠃\",\n        \"蠅\",\n        \"蠍\",\n        \"蠕\",\n        \"蠖\",\n        \"蠟\",\n        \"蠡\",\n        \"蠢\",\n        \"蠣\",\n        \"蠧\",\n        \"蠱\",\n        \"蠶\",\n        \"蠻\",\n        \"血\",\n        \"衄\",\n        \"衆\",\n        \"行\",\n        \"衍\",\n        \"衒\",\n        \"術\",\n        \"街\",\n        \"衙\",\n        \"衛\",\n        \"衝\",\n        \"衞\",\n        \"衡\",\n        \"衢\",\n        \"衣\",\n        \"衤\",\n        \"表\",\n        \"衫\",\n        \"衰\",\n        \"衲\",\n        \"衵\",\n        \"衷\",\n        \"衽\",\n        \"衾\",\n        \"衿\",\n        \"袁\",\n        \"袂\",\n        \"袈\",\n        \"袋\",\n        \"袍\",\n        \"袒\",\n        \"袖\",\n        \"袗\",\n        \"袘\",\n        \"袙\",\n        \"袞\",\n        \"袢\",\n        \"袤\",\n        \"袪\",\n        \"被\",\n        \"袮\",\n        \"袰\",\n        \"袱\",\n        \"袴\",\n        \"袵\",\n        \"袷\",\n        \"袿\",\n        \"裁\",\n        \"裂\",\n        \"裃\",\n        \"裄\",\n        \"装\",\n        \"裏\",\n        \"裒\",\n        \"裔\",\n        \"裕\",\n        \"裘\",\n        \"裙\",\n        \"裛\",\n        \"補\",\n        \"裝\",\n        \"裟\",\n        \"裡\",\n        \"裨\",\n        \"裰\",\n        \"裱\",\n        \"裲\",\n        \"裳\",\n        \"裴\",\n        \"裵\",\n        \"裸\",\n        \"裼\",\n        \"製\",\n        \"裾\",\n        \"褂\",\n        \"褄\",\n        \"複\",\n        \"褊\",\n        \"褌\",\n        \"褐\",\n        \"褒\",\n        \"褓\",\n        \"褘\",\n        \"褙\",\n        \"褚\",\n        \"褥\",\n        \"褪\",\n        \"褫\",\n        \"褲\",\n        \"褶\",\n        \"褸\",\n        \"褻\",\n        \"襁\",\n        \"襄\",\n        \"襖\",\n        \"襞\",\n        \"襟\",\n        \"襠\",\n        \"襤\",\n        \"襦\",\n        \"襲\",\n        \"襴\",\n        \"襷\",\n        \"襾\",\n        \"西\",\n        \"要\",\n        \"覃\",\n        \"覆\",\n        \"覇\",\n        \"覈\",\n        \"覊\",\n        \"見\",\n        \"規\",\n        \"覓\",\n        \"視\",\n        \"覗\",\n        \"覘\",\n        \"覚\",\n        \"覡\",\n        \"覦\",\n        \"覧\",\n        \"覩\",\n        \"親\",\n        \"覬\",\n        \"覯\",\n        \"覲\",\n        \"観\",\n        \"覺\",\n        \"覽\",\n        \"覿\",\n        \"觀\",\n        \"角\",\n        \"觔\",\n        \"觚\",\n        \"觜\",\n        \"觝\",\n        \"解\",\n        \"触\",\n        \"觴\",\n        \"觸\",\n        \"觿\",\n        \"言\",\n        \"訂\",\n        \"訃\",\n        \"計\",\n        \"訊\",\n        \"訌\",\n        \"討\",\n        \"訓\",\n        \"託\",\n        \"記\",\n        \"訛\",\n        \"訝\",\n        \"訟\",\n        \"訢\",\n        \"訣\",\n        \"訥\",\n        \"訪\",\n        \"設\",\n        \"許\",\n        \"訳\",\n        \"訴\",\n        \"訶\",\n        \"診\",\n        \"註\",\n        \"証\",\n        \"詁\",\n        \"詆\",\n        \"詈\",\n        \"詐\",\n        \"詒\",\n        \"詔\",\n        \"評\",\n        \"詛\",\n        \"詞\",\n        \"詠\",\n        \"詡\",\n        \"詢\",\n        \"詣\",\n        \"試\",\n        \"詩\",\n        \"詫\",\n        \"詬\",\n        \"詭\",\n        \"詮\",\n        \"詰\",\n        \"話\",\n        \"該\",\n        \"詳\",\n        \"詵\",\n        \"詹\",\n        \"詼\",\n        \"誂\",\n        \"誄\",\n        \"誅\",\n        \"誇\",\n        \"誉\",\n        \"誌\",\n        \"認\",\n        \"誑\",\n        \"誓\",\n        \"誕\",\n        \"誘\",\n        \"語\",\n        \"誠\",\n        \"誡\",\n        \"誣\",\n        \"誤\",\n        \"誥\",\n        \"誦\",\n        \"誨\",\n        \"説\",\n        \"読\",\n        \"誰\",\n        \"課\",\n        \"誹\",\n        \"誼\",\n        \"誾\",\n        \"調\",\n        \"諂\",\n        \"諄\",\n        \"談\",\n        \"請\",\n        \"諌\",\n        \"諍\",\n        \"諏\",\n        \"諒\",\n        \"論\",\n        \"諗\",\n        \"諚\",\n        \"諛\",\n        \"諜\",\n        \"諡\",\n        \"諢\",\n        \"諤\",\n        \"諦\",\n        \"諧\",\n        \"諫\",\n        \"諭\",\n        \"諮\",\n        \"諱\",\n        \"諳\",\n        \"諶\",\n        \"諷\",\n        \"諸\",\n        \"諺\",\n        \"諾\",\n        \"謀\",\n        \"謁\",\n        \"謂\",\n        \"謄\",\n        \"謌\",\n        \"謎\",\n        \"謐\",\n        \"謔\",\n        \"謖\",\n        \"謗\",\n        \"謙\",\n        \"謚\",\n        \"講\",\n        \"謝\",\n        \"謟\",\n        \"謠\",\n        \"謡\",\n        \"謦\",\n        \"謨\",\n        \"謫\",\n        \"謬\",\n        \"謳\",\n        \"謹\",\n        \"謾\",\n        \"譃\",\n        \"證\",\n        \"譌\",\n        \"譎\",\n        \"譏\",\n        \"譔\",\n        \"識\",\n        \"譙\",\n        \"譚\",\n        \"譜\",\n        \"警\",\n        \"譫\",\n        \"譬\",\n        \"譯\",\n        \"議\",\n        \"譲\",\n        \"譴\",\n        \"護\",\n        \"譽\",\n        \"讀\",\n        \"讃\",\n        \"變\",\n        \"讌\",\n        \"讎\",\n        \"讐\",\n        \"讒\",\n        \"讓\",\n        \"讖\",\n        \"讙\",\n        \"讚\",\n        \"讜\",\n        \"谷\",\n        \"谺\",\n        \"谿\",\n        \"豁\",\n        \"豆\",\n        \"豈\",\n        \"豉\",\n        \"豊\",\n        \"豌\",\n        \"豎\",\n        \"豐\",\n        \"豕\",\n        \"豚\",\n        \"象\",\n        \"豨\",\n        \"豪\",\n        \"豫\",\n        \"豬\",\n        \"豳\",\n        \"豸\",\n        \"豹\",\n        \"豺\",\n        \"豼\",\n        \"貂\",\n        \"貅\",\n        \"貉\",\n        \"貌\",\n        \"貎\",\n        \"貔\",\n        \"貘\",\n        \"貝\",\n        \"貞\",\n        \"負\",\n        \"財\",\n        \"貢\",\n        \"貧\",\n        \"貨\",\n        \"販\",\n        \"貪\",\n        \"貫\",\n        \"責\",\n        \"貮\",\n        \"貯\",\n        \"貰\",\n        \"貴\",\n        \"貶\",\n        \"買\",\n        \"貸\",\n        \"費\",\n        \"貼\",\n        \"貽\",\n        \"貿\",\n        \"賀\",\n        \"賁\",\n        \"賂\",\n        \"賃\",\n        \"賄\",\n        \"資\",\n        \"賈\",\n        \"賊\",\n        \"賍\",\n        \"賎\",\n        \"賑\",\n        \"賓\",\n        \"賚\",\n        \"賛\",\n        \"賜\",\n        \"賞\",\n        \"賠\",\n        \"賡\",\n        \"賢\",\n        \"賣\",\n        \"賤\",\n        \"賦\",\n        \"質\",\n        \"賭\",\n        \"賺\",\n        \"購\",\n        \"賽\",\n        \"贄\",\n        \"贅\",\n        \"贇\",\n        \"贈\",\n        \"贊\",\n        \"贋\",\n        \"贍\",\n        \"贏\",\n        \"贐\",\n        \"贓\",\n        \"贔\",\n        \"贖\",\n        \"贛\",\n        \"赤\",\n        \"赦\",\n        \"赧\",\n        \"赫\",\n        \"赭\",\n        \"走\",\n        \"赳\",\n        \"赴\",\n        \"起\",\n        \"趁\",\n        \"超\",\n        \"越\",\n        \"趙\",\n        \"趣\",\n        \"趨\",\n        \"足\",\n        \"趺\",\n        \"趾\",\n        \"跋\",\n        \"跌\",\n        \"跎\",\n        \"跏\",\n        \"跑\",\n        \"跖\",\n        \"跚\",\n        \"跛\",\n        \"距\",\n        \"跟\",\n        \"跡\",\n        \"跣\",\n        \"跨\",\n        \"跪\",\n        \"跫\",\n        \"路\",\n        \"跳\",\n        \"践\",\n        \"跼\",\n        \"踈\",\n        \"踉\",\n        \"踊\",\n        \"踏\",\n        \"踐\",\n        \"踝\",\n        \"踞\",\n        \"踠\",\n        \"踪\",\n        \"踰\",\n        \"踵\",\n        \"蹂\",\n        \"蹄\",\n        \"蹇\",\n        \"蹈\",\n        \"蹉\",\n        \"蹊\",\n        \"蹌\",\n        \"蹐\",\n        \"蹕\",\n        \"蹙\",\n        \"蹟\",\n        \"蹠\",\n        \"蹣\",\n        \"蹤\",\n        \"蹬\",\n        \"蹲\",\n        \"蹴\",\n        \"蹶\",\n        \"蹼\",\n        \"躁\",\n        \"躄\",\n        \"躅\",\n        \"躇\",\n        \"躊\",\n        \"躋\",\n        \"躍\",\n        \"躑\",\n        \"躓\",\n        \"躔\",\n        \"躙\",\n        \"躡\",\n        \"躪\",\n        \"身\",\n        \"躬\",\n        \"躯\",\n        \"躰\",\n        \"躱\",\n        \"躶\",\n        \"躾\",\n        \"軀\",\n        \"軈\",\n        \"車\",\n        \"軋\",\n        \"軌\",\n        \"軍\",\n        \"軒\",\n        \"軛\",\n        \"軟\",\n        \"転\",\n        \"軫\",\n        \"軸\",\n        \"軺\",\n        \"軻\",\n        \"軼\",\n        \"軽\",\n        \"軾\",\n        \"較\",\n        \"載\",\n        \"輊\",\n        \"輌\",\n        \"輒\",\n        \"輓\",\n        \"輔\",\n        \"輕\",\n        \"輗\",\n        \"輛\",\n        \"輜\",\n        \"輝\",\n        \"輞\",\n        \"輦\",\n        \"輩\",\n        \"輪\",\n        \"輯\",\n        \"輳\",\n        \"輸\",\n        \"輻\",\n        \"輾\",\n        \"輿\",\n        \"轂\",\n        \"轄\",\n        \"轅\",\n        \"轆\",\n        \"轉\",\n        \"轍\",\n        \"轎\",\n        \"轔\",\n        \"轗\",\n        \"轜\",\n        \"轟\",\n        \"轡\",\n        \"轢\",\n        \"轤\",\n        \"辛\",\n        \"辜\",\n        \"辞\",\n        \"辟\",\n        \"辣\",\n        \"辦\",\n        \"辧\",\n        \"辨\",\n        \"辭\",\n        \"辮\",\n        \"辯\",\n        \"辰\",\n        \"辱\",\n        \"農\",\n        \"辶\",\n        \"辷\",\n        \"辺\",\n        \"辻\",\n        \"込\",\n        \"辿\",\n        \"迂\",\n        \"迄\",\n        \"迅\",\n        \"迎\",\n        \"近\",\n        \"返\",\n        \"迚\",\n        \"迢\",\n        \"迦\",\n        \"迩\",\n        \"迪\",\n        \"迫\",\n        \"迭\",\n        \"迯\",\n        \"述\",\n        \"迴\",\n        \"迷\",\n        \"迸\",\n        \"迹\",\n        \"迺\",\n        \"追\",\n        \"退\",\n        \"送\",\n        \"适\",\n        \"逃\",\n        \"逅\",\n        \"逆\",\n        \"逈\",\n        \"逋\",\n        \"逍\",\n        \"透\",\n        \"逐\",\n        \"逑\",\n        \"逓\",\n        \"途\",\n        \"逕\",\n        \"逗\",\n        \"這\",\n        \"通\",\n        \"逝\",\n        \"逞\",\n        \"速\",\n        \"造\",\n        \"逡\",\n        \"逢\",\n        \"連\",\n        \"逮\",\n        \"週\",\n        \"進\",\n        \"逵\",\n        \"逸\",\n        \"逹\",\n        \"逼\",\n        \"遁\",\n        \"遂\",\n        \"遅\",\n        \"遇\",\n        \"遉\",\n        \"遊\",\n        \"運\",\n        \"遍\",\n        \"過\",\n        \"遏\",\n        \"遐\",\n        \"遑\",\n        \"道\",\n        \"達\",\n        \"違\",\n        \"遖\",\n        \"遙\",\n        \"遜\",\n        \"遞\",\n        \"遠\",\n        \"遡\",\n        \"遣\",\n        \"遥\",\n        \"適\",\n        \"遭\",\n        \"遮\",\n        \"遯\",\n        \"遲\",\n        \"遵\",\n        \"遶\",\n        \"遷\",\n        \"選\",\n        \"遺\",\n        \"遼\",\n        \"遽\",\n        \"避\",\n        \"邀\",\n        \"邁\",\n        \"邂\",\n        \"邃\",\n        \"還\",\n        \"邇\",\n        \"邈\",\n        \"邉\",\n        \"邊\",\n        \"邏\",\n        \"邑\",\n        \"邕\",\n        \"邙\",\n        \"邢\",\n        \"那\",\n        \"邦\",\n        \"邨\",\n        \"邪\",\n        \"邯\",\n        \"邱\",\n        \"邳\",\n        \"邵\",\n        \"邶\",\n        \"邸\",\n        \"邾\",\n        \"郁\",\n        \"郈\",\n        \"郊\",\n        \"郎\",\n        \"郗\",\n        \"郝\",\n        \"郞\",\n        \"郡\",\n        \"郢\",\n        \"部\",\n        \"郭\",\n        \"郯\",\n        \"郵\",\n        \"郷\",\n        \"都\",\n        \"郿\",\n        \"鄂\",\n        \"鄒\",\n        \"鄕\",\n        \"鄘\",\n        \"鄙\",\n        \"鄧\",\n        \"鄭\",\n        \"鄯\",\n        \"鄰\",\n        \"鄲\",\n        \"鄴\",\n        \"酈\",\n        \"酉\",\n        \"酊\",\n        \"酋\",\n        \"酌\",\n        \"配\",\n        \"酎\",\n        \"酒\",\n        \"酔\",\n        \"酖\",\n        \"酘\",\n        \"酛\",\n        \"酡\",\n        \"酢\",\n        \"酣\",\n        \"酤\",\n        \"酥\",\n        \"酩\",\n        \"酪\",\n        \"酬\",\n        \"酲\",\n        \"酵\",\n        \"酷\",\n        \"酸\",\n        \"醂\",\n        \"醇\",\n        \"醉\",\n        \"醋\",\n        \"醍\",\n        \"醐\",\n        \"醒\",\n        \"醗\",\n        \"醜\",\n        \"醢\",\n        \"醤\",\n        \"醪\",\n        \"醫\",\n        \"醬\",\n        \"醱\",\n        \"醴\",\n        \"醵\",\n        \"醸\",\n        \"醺\",\n        \"釀\",\n        \"釁\",\n        \"釆\",\n        \"采\",\n        \"釈\",\n        \"釉\",\n        \"釋\",\n        \"里\",\n        \"重\",\n        \"野\",\n        \"量\",\n        \"釐\",\n        \"金\",\n        \"釗\",\n        \"釘\",\n        \"釜\",\n        \"針\",\n        \"釟\",\n        \"釡\",\n        \"釣\",\n        \"釦\",\n        \"釧\",\n        \"釭\",\n        \"釵\",\n        \"釼\",\n        \"鈍\",\n        \"鈎\",\n        \"鈑\",\n        \"鈔\",\n        \"鈕\",\n        \"鈞\",\n        \"鈴\",\n        \"鈷\",\n        \"鈸\",\n        \"鈺\",\n        \"鈿\",\n        \"鉄\",\n        \"鉅\",\n        \"鉇\",\n        \"鉈\",\n        \"鉉\",\n        \"鉋\",\n        \"鉏\",\n        \"鉗\",\n        \"鉛\",\n        \"鉞\",\n        \"鉢\",\n        \"鉤\",\n        \"鉦\",\n        \"鉧\",\n        \"鉱\",\n        \"鉾\",\n        \"銀\",\n        \"銃\",\n        \"銅\",\n        \"銈\",\n        \"銍\",\n        \"銑\",\n        \"銓\",\n        \"銕\",\n        \"銖\",\n        \"銘\",\n        \"銙\",\n        \"銚\",\n        \"銛\",\n        \"銜\",\n        \"銭\",\n        \"銷\",\n        \"銹\",\n        \"鋏\",\n        \"鋒\",\n        \"鋤\",\n        \"鋧\",\n        \"鋩\",\n        \"鋪\",\n        \"鋭\",\n        \"鋲\",\n        \"鋳\",\n        \"鋸\",\n        \"鋹\",\n        \"鋺\",\n        \"鋼\",\n        \"錄\",\n        \"錆\",\n        \"錐\",\n        \"錕\",\n        \"錘\",\n        \"錙\",\n        \"錚\",\n        \"錠\",\n        \"錡\",\n        \"錢\",\n        \"錣\",\n        \"錦\",\n        \"錨\",\n        \"錫\",\n        \"錬\",\n        \"錮\",\n        \"錯\",\n        \"録\",\n        \"錵\",\n        \"錺\",\n        \"錻\",\n        \"鍈\",\n        \"鍋\",\n        \"鍍\",\n        \"鍑\",\n        \"鍔\",\n        \"鍛\",\n        \"鍜\",\n        \"鍬\",\n        \"鍮\",\n        \"鍵\",\n        \"鍼\",\n        \"鍾\",\n        \"鎌\",\n        \"鎔\",\n        \"鎖\",\n        \"鎗\",\n        \"鎚\",\n        \"鎛\",\n        \"鎧\",\n        \"鎬\",\n        \"鎭\",\n        \"鎮\",\n        \"鎰\",\n        \"鎹\",\n        \"鏃\",\n        \"鏈\",\n        \"鏑\",\n        \"鏖\",\n        \"鏗\",\n        \"鏘\",\n        \"鏝\",\n        \"鏞\",\n        \"鏟\",\n        \"鏡\",\n        \"鏢\",\n        \"鏤\",\n        \"鏧\",\n        \"鏨\",\n        \"鏱\",\n        \"鏻\",\n        \"鏽\",\n        \"鐃\",\n        \"鐐\",\n        \"鐓\",\n        \"鐔\",\n        \"鐗\",\n        \"鐘\",\n        \"鐙\",\n        \"鐚\",\n        \"鐡\",\n        \"鐫\",\n        \"鐵\",\n        \"鐶\",\n        \"鐸\",\n        \"鐺\",\n        \"鑁\",\n        \"鑄\",\n        \"鑑\",\n        \"鑒\",\n        \"鑓\",\n        \"鑚\",\n        \"鑛\",\n        \"鑞\",\n        \"鑠\",\n        \"鑢\",\n        \"鑫\",\n        \"鑰\",\n        \"鑵\",\n        \"鑷\",\n        \"鑼\",\n        \"鑽\",\n        \"鑾\",\n        \"鑿\",\n        \"長\",\n        \"镹\",\n        \"門\",\n        \"閂\",\n        \"閃\",\n        \"閇\",\n        \"閉\",\n        \"閊\",\n        \"開\",\n        \"閎\",\n        \"閏\",\n        \"閑\",\n        \"閒\",\n        \"間\",\n        \"閔\",\n        \"閖\",\n        \"閘\",\n        \"閙\",\n        \"関\",\n        \"閣\",\n        \"閤\",\n        \"閥\",\n        \"閦\",\n        \"閧\",\n        \"閨\",\n        \"閩\",\n        \"閭\",\n        \"閲\",\n        \"閹\",\n        \"閻\",\n        \"閼\",\n        \"閽\",\n        \"閾\",\n        \"闇\",\n        \"闊\",\n        \"闌\",\n        \"闍\",\n        \"闐\",\n        \"闔\",\n        \"闕\",\n        \"闖\",\n        \"闘\",\n        \"關\",\n        \"闡\",\n        \"闢\",\n        \"闥\",\n        \"阜\",\n        \"阡\",\n        \"阨\",\n        \"阪\",\n        \"阮\",\n        \"阯\",\n        \"防\",\n        \"阳\",\n        \"阻\",\n        \"阿\",\n        \"陀\",\n        \"附\",\n        \"陋\",\n        \"陌\",\n        \"降\",\n        \"限\",\n        \"陖\",\n        \"陘\",\n        \"陛\",\n        \"陜\",\n        \"陝\",\n        \"陞\",\n        \"陟\",\n        \"院\",\n        \"陣\",\n        \"除\",\n        \"陥\",\n        \"陪\",\n        \"陬\",\n        \"陰\",\n        \"陲\",\n        \"陳\",\n        \"陵\",\n        \"陶\",\n        \"陷\",\n        \"陸\",\n        \"険\",\n        \"陽\",\n        \"隂\",\n        \"隄\",\n        \"隅\",\n        \"隆\",\n        \"隈\",\n        \"隊\",\n        \"隋\",\n        \"隍\",\n        \"階\",\n        \"随\",\n        \"隔\",\n        \"隕\",\n        \"隗\",\n        \"隘\",\n        \"隙\",\n        \"際\",\n        \"障\",\n        \"隠\",\n        \"隣\",\n        \"隧\",\n        \"隨\",\n        \"險\",\n        \"隱\",\n        \"隲\",\n        \"隴\",\n        \"隷\",\n        \"隸\",\n        \"隹\",\n        \"隺\",\n        \"隻\",\n        \"隼\",\n        \"雀\",\n        \"雁\",\n        \"雄\",\n        \"雅\",\n        \"集\",\n        \"雇\",\n        \"雉\",\n        \"雋\",\n        \"雌\",\n        \"雍\",\n        \"雎\",\n        \"雑\",\n        \"雒\",\n        \"雖\",\n        \"雙\",\n        \"雛\",\n        \"雜\",\n        \"雝\",\n        \"雞\",\n        \"離\",\n        \"難\",\n        \"雨\",\n        \"雩\",\n        \"雪\",\n        \"雫\",\n        \"雯\",\n        \"雰\",\n        \"雲\",\n        \"零\",\n        \"雷\",\n        \"雹\",\n        \"電\",\n        \"需\",\n        \"霄\",\n        \"霆\",\n        \"震\",\n        \"霊\",\n        \"霍\",\n        \"霏\",\n        \"霑\",\n        \"霓\",\n        \"霖\",\n        \"霙\",\n        \"霜\",\n        \"霞\",\n        \"霧\",\n        \"霰\",\n        \"露\",\n        \"霹\",\n        \"霽\",\n        \"靁\",\n        \"靂\",\n        \"靄\",\n        \"靆\",\n        \"靈\",\n        \"靉\",\n        \"靑\",\n        \"青\",\n        \"靖\",\n        \"静\",\n        \"靚\",\n        \"靛\",\n        \"靜\",\n        \"非\",\n        \"靠\",\n        \"靡\",\n        \"面\",\n        \"靤\",\n        \"靨\",\n        \"革\",\n        \"靫\",\n        \"靭\",\n        \"靱\",\n        \"靳\",\n        \"靴\",\n        \"靹\",\n        \"靺\",\n        \"靼\",\n        \"鞁\",\n        \"鞄\",\n        \"鞅\",\n        \"鞆\",\n        \"鞋\",\n        \"鞍\",\n        \"鞏\",\n        \"鞘\",\n        \"鞜\",\n        \"鞠\",\n        \"鞢\",\n        \"鞣\",\n        \"鞦\",\n        \"鞨\",\n        \"鞭\",\n        \"鞮\",\n        \"鞳\",\n        \"鞴\",\n        \"鞺\",\n        \"韃\",\n        \"韆\",\n        \"韋\",\n        \"韓\",\n        \"韜\",\n        \"韞\",\n        \"韮\",\n        \"音\",\n        \"韴\",\n        \"韵\",\n        \"韶\",\n        \"韻\",\n        \"響\",\n        \"頁\",\n        \"頂\",\n        \"頃\",\n        \"項\",\n        \"順\",\n        \"須\",\n        \"頊\",\n        \"頌\",\n        \"頎\",\n        \"頏\",\n        \"預\",\n        \"頑\",\n        \"頒\",\n        \"頓\",\n        \"頗\",\n        \"領\",\n        \"頚\",\n        \"頞\",\n        \"頡\",\n        \"頣\",\n        \"頤\",\n        \"頫\",\n        \"頬\",\n        \"頭\",\n        \"頰\",\n        \"頴\",\n        \"頷\",\n        \"頸\",\n        \"頻\",\n        \"頼\",\n        \"頽\",\n        \"顆\",\n        \"顋\",\n        \"題\",\n        \"額\",\n        \"顎\",\n        \"顏\",\n        \"顓\",\n        \"顔\",\n        \"顕\",\n        \"顗\",\n        \"願\",\n        \"顚\",\n        \"顛\",\n        \"類\",\n        \"顥\",\n        \"顧\",\n        \"顫\",\n        \"顬\",\n        \"顯\",\n        \"顰\",\n        \"顱\",\n        \"顳\",\n        \"顴\",\n        \"風\",\n        \"颪\",\n        \"颯\",\n        \"颱\",\n        \"颶\",\n        \"颷\",\n        \"颼\",\n        \"飄\",\n        \"飆\",\n        \"飛\",\n        \"飜\",\n        \"食\",\n        \"飡\",\n        \"飢\",\n        \"飩\",\n        \"飫\",\n        \"飭\",\n        \"飮\",\n        \"飯\",\n        \"飰\",\n        \"飲\",\n        \"飴\",\n        \"飼\",\n        \"飽\",\n        \"飾\",\n        \"餃\",\n        \"餅\",\n        \"餉\",\n        \"養\",\n        \"餌\",\n        \"餐\",\n        \"餒\",\n        \"餓\",\n        \"餘\",\n        \"餝\",\n        \"餞\",\n        \"餠\",\n        \"餡\",\n        \"餤\",\n        \"館\",\n        \"餬\",\n        \"餮\",\n        \"饂\",\n        \"饅\",\n        \"饉\",\n        \"饋\",\n        \"饌\",\n        \"饐\",\n        \"饑\",\n        \"饒\",\n        \"饕\",\n        \"饗\",\n        \"首\",\n        \"馗\",\n        \"馘\",\n        \"香\",\n        \"馞\",\n        \"馥\",\n        \"馨\",\n        \"馬\",\n        \"馭\",\n        \"馮\",\n        \"馳\",\n        \"馴\",\n        \"駁\",\n        \"駄\",\n        \"駅\",\n        \"駆\",\n        \"駈\",\n        \"駐\",\n        \"駑\",\n        \"駒\",\n        \"駕\",\n        \"駘\",\n        \"駛\",\n        \"駝\",\n        \"駟\",\n        \"駢\",\n        \"駭\",\n        \"駮\",\n        \"駱\",\n        \"駸\",\n        \"駻\",\n        \"駿\",\n        \"騁\",\n        \"騅\",\n        \"騎\",\n        \"騏\",\n        \"騒\",\n        \"験\",\n        \"騙\",\n        \"騨\",\n        \"騫\",\n        \"騰\",\n        \"騷\",\n        \"騾\",\n        \"驀\",\n        \"驃\",\n        \"驍\",\n        \"驒\",\n        \"驕\",\n        \"驗\",\n        \"驚\",\n        \"驛\",\n        \"驟\",\n        \"驢\",\n        \"驤\",\n        \"驥\",\n        \"驩\",\n        \"驪\",\n        \"骨\",\n        \"骰\",\n        \"骶\",\n        \"骸\",\n        \"骼\",\n        \"髀\",\n        \"髄\",\n        \"髏\",\n        \"髑\",\n        \"髓\",\n        \"體\",\n        \"高\",\n        \"髙\",\n        \"髞\",\n        \"髠\",\n        \"髢\",\n        \"髣\",\n        \"髦\",\n        \"髪\",\n        \"髫\",\n        \"髭\",\n        \"髯\",\n        \"髱\",\n        \"髴\",\n        \"髷\",\n        \"髻\",\n        \"鬆\",\n        \"鬐\",\n        \"鬘\",\n        \"鬚\",\n        \"鬟\",\n        \"鬢\",\n        \"鬣\",\n        \"鬧\",\n        \"鬨\",\n        \"鬩\",\n        \"鬪\",\n        \"鬮\",\n        \"鬱\",\n        \"鬲\",\n        \"鬻\",\n        \"鬼\",\n        \"魁\",\n        \"魂\",\n        \"魃\",\n        \"魄\",\n        \"魅\",\n        \"魋\",\n        \"魍\",\n        \"魎\",\n        \"魏\",\n        \"魑\",\n        \"魔\",\n        \"魘\",\n        \"魚\",\n        \"魯\",\n        \"魳\",\n        \"魴\",\n        \"魹\",\n        \"鮃\",\n        \"鮄\",\n        \"鮎\",\n        \"鮑\",\n        \"鮒\",\n        \"鮓\",\n        \"鮟\",\n        \"鮠\",\n        \"鮧\",\n        \"鮨\",\n        \"鮪\",\n        \"鮫\",\n        \"鮭\",\n        \"鮮\",\n        \"鮴\",\n        \"鮹\",\n        \"鯆\",\n        \"鯉\",\n        \"鯊\",\n        \"鯎\",\n        \"鯒\",\n        \"鯔\",\n        \"鯖\",\n        \"鯛\",\n        \"鯡\",\n        \"鯢\",\n        \"鯣\",\n        \"鯥\",\n        \"鯨\",\n        \"鯯\",\n        \"鯰\",\n        \"鯱\",\n        \"鯵\",\n        \"鰆\",\n        \"鰈\",\n        \"鰉\",\n        \"鰊\",\n        \"鰌\",\n        \"鰍\",\n        \"鰐\",\n        \"鰒\",\n        \"鰓\",\n        \"鰕\",\n        \"鰣\",\n        \"鰤\",\n        \"鰥\",\n        \"鰭\",\n        \"鰮\",\n        \"鰯\",\n        \"鰰\",\n        \"鰱\",\n        \"鰲\",\n        \"鰹\",\n        \"鰺\",\n        \"鰻\",\n        \"鱁\",\n        \"鱇\",\n        \"鱈\",\n        \"鱉\",\n        \"鱏\",\n        \"鱒\",\n        \"鱗\",\n        \"鱚\",\n        \"鱠\",\n        \"鱧\",\n        \"鱮\",\n        \"鱲\",\n        \"鱶\",\n        \"鱷\",\n        \"鱸\",\n        \"鳥\",\n        \"鳧\",\n        \"鳩\",\n        \"鳰\",\n        \"鳳\",\n        \"鳴\",\n        \"鳶\",\n        \"鴃\",\n        \"鴇\",\n        \"鴈\",\n        \"鴉\",\n        \"鴎\",\n        \"鴒\",\n        \"鴗\",\n        \"鴛\",\n        \"鴟\",\n        \"鴣\",\n        \"鴦\",\n        \"鴨\",\n        \"鴫\",\n        \"鴬\",\n        \"鴻\",\n        \"鴾\",\n        \"鴿\",\n        \"鵄\",\n        \"鵐\",\n        \"鵑\",\n        \"鵙\",\n        \"鵜\",\n        \"鵝\",\n        \"鵞\",\n        \"鵠\",\n        \"鵡\",\n        \"鵤\",\n        \"鵬\",\n        \"鵯\",\n        \"鵲\",\n        \"鵺\",\n        \"鵼\",\n        \"鵾\",\n        \"鶉\",\n        \"鶏\",\n        \"鶚\",\n        \"鶩\",\n        \"鶫\",\n        \"鶯\",\n        \"鶲\",\n        \"鶴\",\n        \"鶸\",\n        \"鶺\",\n        \"鶿\",\n        \"鷀\",\n        \"鷁\",\n        \"鷄\",\n        \"鷓\",\n        \"鷗\",\n        \"鷙\",\n        \"鷦\",\n        \"鷧\",\n        \"鷭\",\n        \"鷯\",\n        \"鷲\",\n        \"鷸\",\n        \"鷹\",\n        \"鷺\",\n        \"鷽\",\n        \"鸕\",\n        \"鸚\",\n        \"鸛\",\n        \"鸞\",\n        \"鹵\",\n        \"鹸\",\n        \"鹹\",\n        \"鹼\",\n        \"鹽\",\n        \"鹿\",\n        \"麁\",\n        \"麈\",\n        \"麋\",\n        \"麒\",\n        \"麓\",\n        \"麕\",\n        \"麗\",\n        \"麝\",\n        \"麟\",\n        \"麤\",\n        \"麥\",\n        \"麦\",\n        \"麩\",\n        \"麪\",\n        \"麭\",\n        \"麴\",\n        \"麵\",\n        \"麸\",\n        \"麹\",\n        \"麺\",\n        \"麻\",\n        \"麼\",\n        \"麽\",\n        \"麾\",\n        \"麿\",\n        \"黄\",\n        \"黌\",\n        \"黍\",\n        \"黎\",\n        \"黐\",\n        \"黑\",\n        \"黒\",\n        \"黔\",\n        \"默\",\n        \"黙\",\n        \"黛\",\n        \"黜\",\n        \"黝\",\n        \"點\",\n        \"黠\",\n        \"黥\",\n        \"黨\",\n        \"黯\",\n        \"黴\",\n        \"黷\",\n        \"黻\",\n        \"黽\",\n        \"鼇\",\n        \"鼈\",\n        \"鼎\",\n        \"鼓\",\n        \"鼕\",\n        \"鼙\",\n        \"鼠\",\n        \"鼬\",\n        \"鼯\",\n        \"鼹\",\n        \"鼻\",\n        \"鼽\",\n        \"鼾\",\n        \"齊\",\n        \"齋\",\n        \"齎\",\n        \"齒\",\n        \"齕\",\n        \"齟\",\n        \"齡\",\n        \"齢\",\n        \"齣\",\n        \"齦\",\n        \"齧\",\n        \"齪\",\n        \"齬\",\n        \"齲\",\n        \"齶\",\n        \"齷\",\n        \"龍\",\n        \"龐\",\n        \"龔\",\n        \"龕\",\n        \"龗\",\n        \"龜\",\n        \"龝\",\n        \"龠\",\n        \"龢\",\n        \"﨑\",\n        \"﨟\",\n        \"﹅\",\n        \"﹆\",\n        \"𢌞\",\n        \"𣗄\",\n        \"𥝱\",\n        \"##レ\",\n        \"##ッ\",\n        \"##タ\",\n        \"##・\",\n        \"##セ\",\n        \"##ラ\",\n        \"##シ\",\n        \"##エ\",\n        \"##N\",\n        \"##V\",\n        \"##I\",\n        \"##T\",\n        \"##O\",\n        \"##ル\",\n        \"##ズ\",\n        \"##バ\",\n        \"##a\",\n        \"##n\",\n        \"##s\",\n        \"##t\",\n        \"##i\",\n        \"##r\",\n        \"##ス\",\n        \"##ジ\",\n        \"##話\",\n        \"##デ\",\n        \"##ー\",\n        \"##ヌ\",\n        \"##え\",\n        \"##る\",\n        \"##ン\",\n        \"##サ\",\n        \"##プ\",\n        \"##ポ\",\n        \"##ギ\",\n        \"##ハ\",\n        \"##メ\",\n        \"##モ\",\n        \"##リ\",\n        \"##ア\",\n        \"##ュ\",\n        \"##ミ\",\n        \"##u\",\n        \"##w\",\n        \"##l\",\n        \"##瀬\",\n        \"##m\",\n        \"##b\",\n        \"##o\",\n        \"##フ\",\n        \"##S\",\n        \"##X\",\n        \"##9\",\n        \"##6\",\n        \"##5\",\n        \"##0\",\n        \"##3\",\n        \"##e\",\n        \"##p\",\n        \"##勝\",\n        \"##マ\",\n        \"##ド\",\n        \"##ャ\",\n        \"##ァ\",\n        \"##M\",\n        \"##E\",\n        \"##y\",\n        \"##d\",\n        \"##h\",\n        \"##ク\",\n        \"##R\",\n        \"##K\",\n        \"##k\",\n        \"##U\",\n        \"##A\",\n        \"##虫\",\n        \"##ム\",\n        \"##況\",\n        \"##c\",\n        \"##イ\",\n        \"##ビ\",\n        \"##ソ\",\n        \"##ヴ\",\n        \"##ォ\",\n        \"##ろ\",\n        \"##う\",\n        \"##g\",\n        \"##ピ\",\n        \"##ザ\",\n        \"##玖\",\n        \"##ヤ\",\n        \"##コ\",\n        \"##ェ\",\n        \"##ト\",\n        \"##ィ\",\n        \"##ナ\",\n        \"##ニ\",\n        \"##拡\",\n        \"##が\",\n        \"##っ\",\n        \"##1\",\n        \"##介\",\n        \"##兎\",\n        \"##喜\",\n        \"##ユ\",\n        \"##弐\",\n        \"##ウ\",\n        \"##カ\",\n        \"##P\",\n        \"##テ\",\n        \"##き\",\n        \"##ぬ\",\n        \"##け\",\n        \"##ブ\",\n        \"##ワ\",\n        \"##ペ\",\n        \"##キ\",\n        \"##ツ\",\n        \"##ケ\",\n        \"##ヒ\",\n        \"##v\",\n        \"##ふ\",\n        \"##く\",\n        \"##張\",\n        \"##z\",\n        \"##j\",\n        \"##ヂ\",\n        \"##ベ\",\n        \"##ち\",\n        \"##消\",\n        \"##せ\",\n        \"##ボ\",\n        \"##L\",\n        \"##G\",\n        \"##ダ\",\n        \"##ゥ\",\n        \"##C\",\n        \"##行\",\n        \"##耳\",\n        \"##古\",\n        \"##ガ\",\n        \"##ョ\",\n        \"##ロ\",\n        \"##2\",\n        \"##で\",\n        \"##か\",\n        \"##し\",\n        \"##チ\",\n        \"##わ\",\n        \"##言\",\n        \"##ヨ\",\n        \"##ネ\",\n        \"##Y\",\n        \"##F\",\n        \"##H\",\n        \"##グ\",\n        \"##永\",\n        \"##パ\",\n        \"##B\",\n        \"##Z\",\n        \"##8\",\n        \"##7\",\n        \"##山\",\n        \"##段\",\n        \"##オ\",\n        \"##ノ\",\n        \"##ゴ\",\n        \"##ゲ\",\n        \"##D\",\n        \"##立\",\n        \"##4\",\n        \"##尾\",\n        \"##当\",\n        \"##て\",\n        \"##兄\",\n        \"##ゾ\",\n        \"##れ\",\n        \"##論\",\n        \"##傷\",\n        \"##ヘ\",\n        \"##希\",\n        \"##目\",\n        \"##q\",\n        \"##簡\",\n        \"##Q\",\n        \"##島\",\n        \"##み\",\n        \"##ら\",\n        \"##仲\",\n        \"##宗\",\n        \"##根\",\n        \"##歌\",\n        \"##吾\",\n        \"##ぎ\",\n        \"##取\",\n        \"##f\",\n        \"##ど\",\n        \"##ま\",\n        \"##友\",\n        \"##×\",\n        \"##合\",\n        \"##い\",\n        \"##格\",\n        \"##ゼ\",\n        \"##域\",\n        \"##め\",\n        \"##禁\",\n        \"##り\",\n        \"##д\",\n        \"##豆\",\n        \"##色\",\n        \"##鹽\",\n        \"##吉\",\n        \"##げ\",\n        \"##止\",\n        \"##挟\",\n        \"##す\",\n        \"##送\",\n        \"##釈\",\n        \"##つ\",\n        \"##氏\",\n        \"##柄\",\n        \"##緑\",\n        \"##口\",\n        \"##飛\",\n        \"##ば\",\n        \"##九\",\n        \"##上\",\n        \"##じ\",\n        \"##ホ\",\n        \"##房\",\n        \"##技\",\n        \"##x\",\n        \"##土\",\n        \"##θ\",\n        \"##作\",\n        \"##さ\",\n        \"##ご\",\n        \"##こ\",\n        \"##流\",\n        \"##淆\",\n        \"##里\",\n        \"##子\",\n        \"##断\",\n        \"##光\",\n        \"##芳\",\n        \"##腕\",\n        \"##び\",\n        \"##と\",\n        \"##大\",\n        \"##仕\",\n        \"##駝\",\n        \"##麿\",\n        \"##辰\",\n        \"##や\",\n        \"##留\",\n        \"##身\",\n        \"##声\",\n        \"##指\",\n        \"##庵\",\n        \"##会\",\n        \"##印\",\n        \"##文\",\n        \"##羊\",\n        \"##深\",\n        \"##彦\",\n        \"##座\",\n        \"##鑫\",\n        \"##明\",\n        \"##鶴\",\n        \"##蛤\",\n        \"##出\",\n        \"##頭\",\n        \"##/\",\n        \"##'\",\n        \"##朗\",\n        \"##王\",\n        \"##之\",\n        \"##助\",\n        \"##秀\",\n        \"##ず\",\n        \"##軸\",\n        \"##長\",\n        \"##щ\",\n        \"##序\",\n        \"##λ\",\n        \"##δ\",\n        \"##α\",\n        \"##込\",\n        \"##軽\",\n        \"##酒\",\n        \"##臘\",\n        \"##朝\",\n        \"##越\",\n        \"##そ\",\n        \"##笑\",\n        \"##返\",\n        \"##風\",\n        \"##お\",\n        \"##絹\",\n        \"##遇\",\n        \"##集\",\n        \"##\\\"\",\n        \"##ひ\",\n        \"##仁\",\n        \"##造\",\n        \"##川\",\n        \"##抜\",\n        \"##卸\",\n        \"##野\",\n        \"##達\",\n        \"##.\",\n        \"##)\",\n        \"##}\",\n        \"##袖\",\n        \"##も\",\n        \"##新\",\n        \"##宅\",\n        \"##巻\",\n        \"##丞\",\n        \"##晒\",\n        \"##臣\",\n        \"##む\",\n        \"##ヅ\",\n        \"##召\",\n        \"##梁\",\n        \"##ъ\",\n        \"##з\",\n        \"##引\",\n        \"##袋\",\n        \"##清\",\n        \"##郎\",\n        \"##兵\",\n        \"##衛\",\n        \"##谷\",\n        \"##は\",\n        \"##航\",\n        \"##あ\",\n        \"##州\",\n        \"##(\",\n        \"##だ\",\n        \"##太\",\n        \"##能\",\n        \"##外\",\n        \"##面\",\n        \"##甚\",\n        \"##〜\",\n        \"##ん\",\n        \"##ν\",\n        \"##μ\",\n        \"##η\",\n        \"##年\",\n        \"##実\",\n        \"##岡\",\n        \"##装\",\n        \"##歩\",\n        \"##ぶ\",\n        \"##旦\",\n        \"##空\",\n        \"##生\",\n        \"##木\",\n        \"##鋼\",\n        \"##記\",\n        \"##広\",\n        \"##団\",\n        \"##治\",\n        \"##直\",\n        \"##よ\",\n        \"##汁\",\n        \"##廻\",\n        \"##物\",\n        \"##;\",\n        \"##に\",\n        \"##修\",\n        \"##河\",\n        \"##射\",\n        \"##林\",\n        \"##節\",\n        \"##田\",\n        \"##W\",\n        \"##塚\",\n        \"##町\",\n        \"##鳥\",\n        \"##帰\",\n        \"##粮\",\n        \"##西\",\n        \"##重\",\n        \"##精\",\n        \"##一\",\n        \"##柳\",\n        \"##雨\",\n        \"##堤\",\n        \"##掛\",\n        \"##車\",\n        \"##曲\",\n        \"##京\",\n        \"##陽\",\n        \"##廠\",\n        \"##報\",\n        \"##髭\",\n        \"##憑\",\n        \"##平\",\n        \"##台\",\n        \"##奸\",\n        \"##鑵\",\n        \"##ヲ\",\n        \"##た\",\n        \"##切\",\n        \"##脇\",\n        \"##な\",\n        \"##爆\",\n        \"##爪\",\n        \"##回\",\n        \"##以\",\n        \"##都\",\n        \"##美\",\n        \"##笛\",\n        \"##誨\",\n        \"##和\",\n        \"##ほ\",\n        \"##類\",\n        \"##考\",\n        \"##官\",\n        \"##κ\",\n        \"##υ\",\n        \"##所\",\n        \"##江\",\n        \"##ぐ\",\n        \"##ρ\",\n        \"##σ\",\n        \"##看\",\n        \"##睨\",\n        \"##定\",\n        \"##番\",\n        \"##難\",\n        \"##の\",\n        \"##用\",\n        \"##六\",\n        \"##体\",\n        \"##世\",\n        \"##ヶ\",\n        \"##崎\",\n        \"##湊\",\n        \"##ι\",\n        \"##入\",\n        \"##的\",\n        \"##潤\",\n        \"##門\",\n        \"##三\",\n        \"##線\",\n        \"##音\",\n        \"##蹴\",\n        \"##注\",\n        \"##退\",\n        \"##着\",\n        \"##峠\",\n        \"##蕎\",\n        \"##麦\",\n        \"##点\",\n        \"##反\",\n        \"##茗\",\n        \"##ё\",\n        \"##昭\",\n        \"##草\",\n        \"##白\",\n        \"##球\",\n        \"##箱\",\n        \"##次\",\n        \"##利\",\n        \"##逃\",\n        \"##館\",\n        \"##原\",\n        \"##敷\",\n        \"##乱\",\n        \"##沈\",\n        \"##程\",\n        \"##斎\",\n        \"##書\",\n        \"##忠\",\n        \"##依\",\n        \"##乳\",\n        \"##!\",\n        \"##-\",\n        \"##」\",\n        \"##寄\",\n        \"##殺\",\n        \"##胤\",\n        \"##代\",\n        \"##筋\",\n        \"##落\",\n        \"##東\",\n        \"##路\",\n        \"##店\",\n        \"##邦\",\n        \"##仄\",\n        \"##心\",\n        \"##昌\",\n        \"##許\",\n        \"##福\",\n        \"##打\",\n        \"##ゅ\",\n        \"##液\",\n        \"##娯\",\n        \"##憲\",\n        \"##針\",\n        \"##刑\",\n        \"##ぼ\",\n        \"##天\",\n        \"##来\",\n        \"##堂\",\n        \"##寇\",\n        \"##鴨\",\n        \"##費\",\n        \"##地\",\n        \"##机\",\n        \"##ω\",\n        \"##法\",\n        \"##付\",\n        \"##肉\",\n        \"##本\",\n        \"##ヮ\",\n        \"##々\",\n        \"##皮\",\n        \"##葺\",\n        \"##茶\",\n        \"##春\",\n        \"##圧\",\n        \"##撃\",\n        \"##設\",\n        \"##J\",\n        \"##磴\",\n        \"##、\",\n        \"##彤\",\n        \"##是\",\n        \"##万\",\n        \"##尹\",\n        \"##務\",\n        \"##説\",\n        \"##備\",\n        \"##分\",\n        \"##鳴\",\n        \"##計\",\n        \"##高\",\n        \"##織\",\n        \"##間\",\n        \"##莪\",\n        \"##彌\",\n        \"##那\",\n        \"##ิ\",\n        \"##信\",\n        \"##観\",\n        \"##票\",\n        \"##蛎\",\n        \"##市\",\n        \"##減\",\n        \"##使\",\n        \"##鏡\",\n        \"##亥\",\n        \"##駅\",\n        \"##哭\",\n        \"##除\",\n        \"##雲\",\n        \"##ぃ\",\n        \"##教\",\n        \"##寺\",\n        \"##轍\",\n        \"##毛\",\n        \"##肘\",\n        \"##南\",\n        \"##雄\",\n        \"##閣\",\n        \"##示\",\n        \"##種\",\n        \"##寔\",\n        \"##蜘\",\n        \"##蛛\",\n        \"##咽\",\n        \"##橋\",\n        \"##神\",\n        \"##噺\",\n        \"##科\",\n        \"##鳳\",\n        \"##湿\",\n        \"##嶺\",\n        \"##豪\",\n        \"##英\",\n        \"##焼\",\n        \"##死\",\n        \"##鈴\",\n        \"##村\",\n        \"##幸\",\n        \"##街\",\n        \"##版\",\n        \"##弁\",\n        \"##員\",\n        \"##獣\",\n        \"##韓\",\n        \"##将\",\n        \"##酸\",\n        \"##捨\",\n        \"##瞰\",\n        \"##枝\",\n        \"##倉\",\n        \"##語\",\n        \"##名\",\n        \"##内\",\n        \"##晶\",\n        \"##岳\",\n        \"##腐\",\n        \"##加\",\n        \"##孝\",\n        \"##童\",\n        \"##小\",\n        \"##金\",\n        \"##井\",\n        \"##人\",\n        \"##郷\",\n        \"##賛\",\n        \"##鰐\",\n        \"##払\",\n        \"##φ\",\n        \"##』\",\n        \"##『\",\n        \"##詰\",\n        \"##烟\",\n        \"##悪\",\n        \"##章\",\n        \"##諭\",\n        \"##芸\",\n        \"##膳\",\n        \"##戻\",\n        \"##緒\",\n        \"##紙\",\n        \"##旭\",\n        \"##弾\",\n        \"##開\",\n        \"##津\",\n        \"##淑\",\n        \"##尊\",\n        \"##手\",\n        \"##四\",\n        \"##杯\",\n        \"##比\",\n        \"##邇\",\n        \"##輯\",\n        \"##狸\",\n        \"##殻\",\n        \"##貨\",\n        \"##願\",\n        \"##中\",\n        \"##礼\",\n        \"##油\",\n        \"##刻\",\n        \"##支\",\n        \"##訓\",\n        \"##ゃ\",\n        \"##梅\",\n        \"##●\",\n        \"##洗\",\n        \"##客\",\n        \"##談\",\n        \"##包\",\n        \"##令\",\n        \"##茸\",\n        \"##札\",\n        \"##奴\",\n        \"##替\",\n        \"##鸞\",\n        \"##氷\",\n        \"##扉\",\n        \"##魔\",\n        \"##民\",\n        \"##脂\",\n        \"##与\",\n        \"##経\",\n        \"##督\",\n        \"##禎\",\n        \"##仙\",\n        \"##者\",\n        \"##ぜ\",\n        \"##壺\",\n        \"##諸\",\n        \"##米\",\n        \"##伊\",\n        \"##國\",\n        \"##意\",\n        \"##知\",\n        \"##商\",\n        \"##家\",\n        \"##貝\",\n        \"##灯\",\n        \"##岩\",\n        \"##τ\",\n        \"##膜\",\n        \"##海\",\n        \"##久\",\n        \"##憐\",\n        \"##阿\",\n        \"##弥\",\n        \"##牧\",\n        \"##国\",\n        \"##摩\",\n        \"##半\",\n        \"##保\",\n        \"##術\",\n        \"##例\",\n        \"##毒\",\n        \"##栄\",\n        \"##池\",\n        \"##嘗\",\n        \"##食\",\n        \"##絵\",\n        \"##ね\",\n        \"##べ\",\n        \"##場\",\n        \"##財\",\n        \"##薬\",\n        \"##成\",\n        \"##鍾\",\n        \"##羽\",\n        \"##続\",\n        \"##存\",\n        \"##水\",\n        \"##星\",\n        \"##前\",\n        \"##勤\",\n        \"##見\",\n        \"##我\",\n        \"##鱗\",\n        \"##籠\",\n        \"##澤\",\n        \"##命\",\n        \"##療\",\n        \"##菜\",\n        \"##布\",\n        \"##旗\",\n        \"##ざ\",\n        \"##餅\",\n        \"##力\",\n        \"##+\",\n        \"##影\",\n        \"##琬\",\n        \"##邊\",\n        \"##居\",\n        \"##骨\",\n        \"##脳\",\n        \"##気\",\n        \"##鷹\",\n        \"##別\",\n        \"##欠\",\n        \"##栗\",\n        \"##羅\",\n        \"##,\",\n        \"##→\",\n        \"##[\",\n        \"##律\",\n        \"##玄\",\n        \"##母\",\n        \"##ぞ\",\n        \"##二\",\n        \"##裂\",\n        \"##歪\",\n        \"##糸\",\n        \"##弦\",\n        \"##ぽ\",\n        \"##床\",\n        \"##扇\",\n        \"##渋\",\n        \"##嬢\",\n        \"##俊\",\n        \"##辺\",\n        \"##壁\",\n        \"##沓\",\n        \"##史\",\n        \"##釧\",\n        \"##植\",\n        \"##賜\",\n        \"##堀\",\n        \"##祚\",\n        \"##元\",\n        \"##━\",\n        \"##襟\",\n        \"##筒\",\n        \"##烏\",\n        \"##弧\",\n        \"##浦\",\n        \"##粟\",\n        \"##司\",\n        \"##洲\",\n        \"##滑\",\n        \"##義\",\n        \"##丈\",\n        \"##夫\",\n        \"##塾\",\n        \"##汗\",\n        \"##ε\",\n        \"##好\",\n        \"##媧\",\n        \"##残\",\n        \"##狭\",\n        \"##康\",\n        \"##丸\",\n        \"##躾\",\n        \"##船\",\n        \"##ぁ\",\n        \"##結\",\n        \"##冀\",\n        \"##埔\",\n        \"##時\",\n        \"##隆\",\n        \"##下\",\n        \"##Д\",\n        \"##焦\",\n        \"##麻\",\n        \"##折\",\n        \"##Σ\",\n        \"##Λ\",\n        \"##Ω\",\n        \"##証\",\n        \"##乃\",\n        \"##糖\",\n        \"##役\",\n        \"##起\",\n        \"##答\",\n        \"##葉\",\n        \"##局\",\n        \"##ヽ\",\n        \"##]\",\n        \"##β\",\n        \"##肥\",\n        \"##并\",\n        \"##夏\",\n        \"##茂\",\n        \"##鎬\",\n        \"##控\",\n        \"##沢\",\n        \"##沙\",\n        \"##溟\",\n        \"##選\",\n        \"##遊\",\n        \"##淵\",\n        \"##連\",\n        \"##述\",\n        \"##違\",\n        \"##鎮\",\n        \"##月\",\n        \"##殴\",\n        \"##肝\",\n        \"##校\",\n        \"##龍\",\n        \"##饅\",\n        \"##純\",\n        \"##敏\",\n        \"##虐\",\n        \"##彬\",\n        \"##露\",\n        \"##拳\",\n        \"##左\",\n        \"##桃\",\n        \"##学\",\n        \"##陰\",\n        \"##拓\",\n        \"##懇\",\n        \"##屋\",\n        \"##沌\",\n        \"##頒\",\n        \"##髪\",\n        \"##良\",\n        \"##則\",\n        \"##責\",\n        \"##飼\",\n        \"##致\",\n        \"##※\",\n        \"##樹\",\n        \"##耶\",\n        \"##判\",\n        \"##也\",\n        \"##縁\",\n        \"##更\",\n        \"##儀\",\n        \"##火\",\n        \"##窓\",\n        \"##工\",\n        \"##甲\",\n        \"##増\",\n        \"##】\",\n        \"##。\",\n        \"##帆\",\n        \"##稿\",\n        \"##π\",\n        \"##γ\",\n        \"##角\",\n        \"##院\",\n        \"##公\",\n        \"##男\",\n        \"##認\",\n        \"##炎\",\n        \"##浜\",\n        \"##求\",\n        \"##禍\",\n        \"##傅\",\n        \"##換\",\n        \"##陸\",\n        \"##遣\",\n        \"##占\",\n        \"##売\",\n        \"##伸\",\n        \"##寵\",\n        \"##郡\",\n        \"##ぺ\",\n        \"##果\",\n        \"##析\",\n        \"##汶\",\n        \"##熙\",\n        \"##詳\",\n        \"##苑\",\n        \"##積\",\n        \"##侠\",\n        \"##蔵\",\n        \"##条\",\n        \"##城\",\n        \"##按\",\n        \"##妨\",\n        \"##承\",\n        \"##道\",\n        \"##府\",\n        \"##県\",\n        \"##営\",\n        \"##孜\",\n        \"##泊\",\n        \"##藏\",\n        \"##鷲\",\n        \"##ょ\",\n        \"##釜\",\n        \"##裏\",\n        \"##劇\",\n        \"##渓\",\n        \"##鼓\",\n        \"##熊\",\n        \"##竹\",\n        \"##芥\",\n        \"##式\",\n        \"##歳\",\n        \"##{\",\n        \"##接\",\n        \"##麼\",\n        \"##第\",\n        \"##彊\",\n        \"##笠\",\n        \"##片\",\n        \"##敗\",\n        \"##聞\",\n        \"##産\",\n        \"##隋\",\n        \"##華\",\n        \"##ゆ\",\n        \"##づ\",\n        \"##松\",\n        \"##器\",\n        \"##字\",\n        \"##差\",\n        \"##厚\",\n        \"##穂\",\n        \"##部\",\n        \"##糧\",\n        \"##掲\",\n        \"##χ\",\n        \"##禄\",\n        \"##季\",\n        \"##図\",\n        \"##鎖\",\n        \"##日\",\n        \"##給\",\n        \"##宮\",\n        \"##剤\",\n        \"##賢\",\n        \"##帝\",\n        \"##桶\",\n        \"##疹\",\n        \"##向\",\n        \"##佳\",\n        \"##持\",\n        \"##靡\",\n        \"##無\",\n        \"##浩\",\n        \"##剣\",\n        \"##繁\",\n        \"##竜\",\n        \"##損\",\n        \"##快\",\n        \"##覚\",\n        \"##添\",\n        \"##正\",\n        \"##石\",\n        \"##厳\",\n        \"##塁\",\n        \"##患\",\n        \"##掻\",\n        \"##鶏\",\n        \"##酷\",\n        \"##熱\",\n        \"##昱\",\n        \"##洋\",\n        \"##茎\",\n        \"##苞\",\n        \"##継\",\n        \"##議\",\n        \"##斉\",\n        \"##臭\",\n        \"##矢\",\n        \"##ξ\",\n        \"##暦\",\n        \"##性\",\n        \"##追\",\n        \"##首\",\n        \"##桜\",\n        \"##運\",\n        \"##謎\",\n        \"##闘\",\n        \"##裾\",\n        \"##安\",\n        \"##政\",\n        \"##攻\",\n        \"##拉\",\n        \"##競\",\n        \"##底\",\n        \"##斌\",\n        \"##鐘\",\n        \"###\",\n        \"##沖\",\n        \"##繭\",\n        \"##緲\",\n        \"##制\",\n        \"##案\",\n        \"##亀\",\n        \"##碁\",\n        \"##藻\",\n        \"##貪\",\n        \"##業\",\n        \"##呂\",\n        \"##蛆\",\n        \"##姦\",\n        \"##幅\",\n        \"##環\",\n        \"##型\",\n        \"##品\",\n        \"##蝉\",\n        \"##揚\",\n        \"##杓\",\n        \"##想\",\n        \"##纛\",\n        \"##約\",\n        \"##霊\",\n        \"##慄\",\n        \"##尽\",\n        \"##苗\",\n        \"##:\",\n        \"##主\",\n        \"##奈\",\n        \"##勢\",\n        \"##漉\",\n        \"##扱\",\n        \"##紀\",\n        \"##脱\",\n        \"##篭\",\n        \"##銃\",\n        \"##杉\",\n        \"##量\",\n        \"##相\",\n        \"##岱\",\n        \"##灘\",\n        \"##姫\",\n        \"##模\",\n        \"##網\",\n        \"##錬\",\n        \"##派\",\n        \"##七\",\n        \"##庶\",\n        \"##女\",\n        \"##姿\",\n        \"##*\",\n        \"##称\",\n        \"##味\",\n        \"##往\",\n        \"##基\",\n        \"##破\",\n        \"##随\",\n        \"##賊\",\n        \"##琴\",\n        \"##絶\",\n        \"##動\",\n        \"##席\",\n        \"##凪\",\n        \"##貞\",\n        \"##椅\",\n        \"##甘\",\n        \"##卵\",\n        \"##寿\",\n        \"##施\",\n        \"##協\",\n        \"##_\",\n        \"##|\",\n        \"##紫\",\n        \"##害\",\n        \"##騎\",\n        \"##花\",\n        \"##去\",\n        \"##?\",\n        \"##幇\",\n        \"##機\",\n        \"##状\",\n        \"##垂\",\n        \"##孫\",\n        \"##参\",\n        \"##譜\",\n        \"##獲\",\n        \"##帳\",\n        \"##砥\",\n        \"##鋒\",\n        \"##染\",\n        \"##抑\",\n        \"##枚\",\n        \"##泉\",\n        \"##肌\",\n        \"##眼\",\n        \"##若\",\n        \"##翻\",\n        \"##叉\",\n        \"##溝\",\n        \"##舎\",\n        \"##垣\",\n        \"##坂\",\n        \"##渡\",\n        \"##多\",\n        \"##±\",\n        \"##潺\",\n        \"##価\",\n        \"##漬\",\n        \"##偏\",\n        \"##五\",\n        \"##א\",\n        \"##郊\",\n        \"##件\",\n        \"##桑\",\n        \"##恥\",\n        \"##勳\",\n        \"##錦\",\n        \"##疏\",\n        \"##†\",\n        \"##蘂\",\n        \"##任\",\n        \"##弟\",\n        \"##免\",\n        \"##崙\",\n        \"##放\",\n        \"##孩\",\n        \"##響\",\n        \"##階\",\n        \"##滝\",\n        \"##恩\",\n        \"##刊\",\n        \"##区\",\n        \"##質\",\n        \"##右\",\n        \"##竿\",\n        \"##寧\",\n        \"##へ\",\n        \"##転\",\n        \"##防\",\n        \"##核\",\n        \"##善\",\n        \"##飯\",\n        \"##牛\",\n        \"##湖\",\n        \"##十\",\n        \"##−\",\n        \"##硫\",\n        \"##為\",\n        \"##煮\",\n        \"##麗\",\n        \"##鍋\",\n        \"##納\",\n        \"##争\",\n        \"##極\",\n        \"##揮\",\n        \"##園\",\n        \"##盛\",\n        \"##壊\",\n        \"##伐\",\n        \"##詩\",\n        \"##只\",\n        \"##潮\",\n        \"##細\",\n        \"##帖\",\n        \"##粉\",\n        \"##勲\",\n        \"##繋\",\n        \"##銀\",\n        \"##攫\",\n        \"##愚\",\n        \"##束\",\n        \"##訴\",\n        \"##弱\",\n        \"##哲\",\n        \"##丘\",\n        \"##來\",\n        \"##詞\",\n        \"##皇\",\n        \"##途\",\n        \"##復\",\n        \"##甕\",\n        \"##@\",\n        \"##武\",\n        \"##避\",\n        \"##寛\",\n        \"##板\",\n        \"##湘\",\n        \"##須\",\n        \"##形\",\n        \"##端\",\n        \"##亭\",\n        \"##徳\",\n        \"##等\",\n        \"##祖\",\n        \"##楓\",\n        \"##散\",\n        \"##算\",\n        \"##材\",\n        \"##智\",\n        \"##至\",\n        \"##室\",\n        \"##搗\",\n        \"##変\",\n        \"##祝\",\n        \"##危\",\n        \"##哉\",\n        \"##志\",\n        \"##磨\",\n        \"##舟\",\n        \"##顛\",\n        \"##未\",\n        \"##叩\",\n        \"##息\",\n        \"##解\",\n        \"##構\",\n        \"##圭\",\n        \"##帶\",\n        \"##惜\",\n        \"##誉\",\n        \"##横\",\n        \"##\\\\\",\n        \"##由\",\n        \"##貴\",\n        \"##茅\",\n        \"##祷\",\n        \"##養\",\n        \"##共\",\n        \"##〆\",\n        \"##菊\",\n        \"##甫\",\n        \"##煥\",\n        \"##琳\",\n        \"##提\",\n        \"##筆\",\n        \"##欷\",\n        \"##畑\",\n        \"##寥\",\n        \"##暮\",\n        \"##函\",\n        \"##燥\",\n        \"##「\",\n        \"##壇\",\n        \"##鍵\",\n        \"##綬\",\n        \"##要\",\n        \"##八\",\n        \"##戸\",\n        \"##僧\",\n        \"##改\",\n        \"##管\",\n        \"##雛\",\n        \"##巡\",\n        \"##録\",\n        \"##ゑ\",\n        \"##餘\",\n        \"##望\",\n        \"##交\",\n        \"##先\",\n        \"##締\",\n        \"##臥\",\n        \"##葡\",\n        \"##伝\",\n        \"##超\",\n        \"##欧\",\n        \"##豊\",\n        \"##郭\",\n        \"##溜\",\n        \"##受\",\n        \"##睡\",\n        \"##伯\",\n        \"##補\",\n        \"##通\",\n        \"##働\",\n        \"##廣\",\n        \"##表\",\n        \"##組\",\n        \"##暁\",\n        \"##児\",\n        \"##姆\",\n        \"##籍\",\n        \"##短\",\n        \"##両\",\n        \"##労\",\n        \"##溪\",\n        \"##強\",\n        \"##縞\",\n        \"##匠\",\n        \"##幡\",\n        \"##淳\",\n        \"##冷\",\n        \"##港\",\n        \"##恵\",\n        \"##蹟\",\n        \"##犯\",\n        \"##輝\",\n        \"##欲\",\n        \"##満\",\n        \"##秋\",\n        \"##威\",\n        \"##邪\",\n        \"##蒲\",\n        \"##方\",\n        \"##罵\",\n        \"##疆\",\n        \"##吶\",\n        \"##宿\",\n        \"##演\",\n        \"##被\",\n        \"##塀\",\n        \"##咩\",\n        \"##坐\",\n        \"##恕\",\n        \"##辣\",\n        \"##拂\",\n        \"##護\",\n        \"##吽\",\n        \"##譲\",\n        \"##瑠\",\n        \"##蝕\",\n        \"##融\",\n        \"##站\",\n        \"##槍\",\n        \"##茹\",\n        \"##数\",\n        \"##皋\",\n        \"##群\",\n        \"##権\",\n        \"##愛\",\n        \"##速\",\n        \"##藩\",\n        \"##毅\",\n        \"##諏\",\n        \"##訪\",\n        \"##盧\",\n        \"##親\",\n        \"##拝\",\n        \"##聴\",\n        \"##事\",\n        \"##興\",\n        \"##隊\",\n        \"##徹\",\n        \"##‘\",\n        \"##詣\",\n        \"##荷\",\n        \"##梨\",\n        \"##雉\",\n        \"##戌\",\n        \"##側\",\n        \"##圏\",\n        \"##博\",\n        \"##巴\",\n        \"##蟠\",\n        \"##ゝ\",\n        \"##洪\",\n        \"##艦\",\n        \"##憶\",\n        \"##椎\",\n        \"##様\",\n        \"##齢\",\n        \"##嶋\",\n        \"##桂\",\n        \"##櫃\",\n        \"##<\",\n        \"##憎\",\n        \"##度\",\n        \"##^\",\n        \"##變\",\n        \"##兒\",\n        \"##守\",\n        \"##央\",\n        \"##廟\",\n        \"##然\",\n        \"##肚\",\n        \"##頼\",\n        \"##克\",\n        \"##■\",\n        \"##雪\",\n        \"##鰭\",\n        \"##雅\",\n        \"##履\",\n        \"##云\",\n        \"##割\",\n        \"##資\",\n        \"##囚\",\n        \"##催\",\n        \"##軍\",\n        \"##封\",\n        \"##玉\",\n        \"##崩\",\n        \"##誌\",\n        \"##削\",\n        \"##豚\",\n        \"##塩\",\n        \"##殿\",\n        \"##討\",\n        \"##専\",\n        \"##挙\",\n        \"##及\",\n        \"##告\",\n        \"##佐\",\n        \"##仮\",\n        \"##父\",\n        \"##摂\",\n        \"##震\",\n        \"##筏\",\n        \"##胆\",\n        \"##降\",\n        \"##拠\",\n        \"##闊\",\n        \"##近\",\n        \"##陀\",\n        \"##獄\",\n        \"##埠\",\n        \"##丹\",\n        \"##買\",\n        \"##亮\",\n        \"##製\",\n        \"##老\",\n        \"##領\",\n        \"##烙\",\n        \"##ヱ\",\n        \"##枉\",\n        \"##鰹\",\n        \"##真\",\n        \"##刀\",\n        \"##巣\",\n        \"##鞋\",\n        \"##刷\",\n        \"##洛\",\n        \"##伍\",\n        \"##綾\",\n        \"##淋\",\n        \"##跡\",\n        \"##呵\",\n        \"##俣\",\n        \"##翼\",\n        \"##医\",\n        \"##ぱ\",\n        \"##周\",\n        \"##循\",\n        \"##躬\",\n        \"##没\",\n        \"##失\",\n        \"##発\",\n        \"##盤\",\n        \"##固\",\n        \"##銭\",\n        \"##蛙\",\n        \"##澄\",\n        \"##忍\",\n        \"##飴\",\n        \"##ლ\",\n        \"##鱈\",\n        \"##嘆\",\n        \"##径\",\n        \"##軟\",\n        \"##絞\",\n        \"##璃\",\n        \"##服\",\n        \"##崇\",\n        \"##禅\",\n        \"##香\",\n        \"##滓\",\n        \"##顔\",\n        \"##隣\",\n        \"##森\",\n        \"##徒\",\n        \"##読\",\n        \"##庭\",\n        \"##躓\",\n        \"##宣\",\n        \"##荒\",\n        \"##侯\",\n        \"##鉄\",\n        \"##陵\",\n        \"##汀\",\n        \"##鴎\",\n        \"##輪\",\n        \"##済\",\n        \"##尺\",\n        \"##襲\",\n        \"##講\",\n        \"##兼\",\n        \"##踏\",\n        \"##浄\",\n        \"##馬\",\n        \"##登\",\n        \"##陣\",\n        \"##後\",\n        \"##皐\",\n        \"##足\",\n        \"##砲\",\n        \"##鹿\",\n        \"##灸\",\n        \"##脈\",\n        \"##跳\",\n        \"##魚\",\n        \"##虎\",\n        \"##便\",\n        \"##建\",\n        \"##唇\",\n        \"##魂\",\n        \"##君\",\n        \"##腰\",\n        \"##戒\",\n        \"##胎\",\n        \"##醒\",\n        \"##夷\",\n        \"##蘇\",\n        \"##映\",\n        \"##顕\",\n        \"##恋\",\n        \"##唆\",\n        \"##却\",\n        \"##覧\",\n        \"##叡\",\n        \"##濠\",\n        \"##誤\",\n        \"##可\",\n        \"##化\",\n        \"##題\",\n        \"##燕\",\n        \"##嗚\",\n        \"##巳\",\n        \"##有\",\n        \"##ヰ\",\n        \"##祭\",\n        \"##慧\",\n        \"##辱\",\n        \"##弘\",\n        \"##癌\",\n        \"##活\",\n        \"##仏\",\n        \"##編\",\n        \"##視\",\n        \"##鑑\",\n        \"##爛\",\n        \"##薪\",\n        \"##請\",\n        \"##象\",\n        \"##含\",\n        \"##德\",\n        \"##千\",\n        \"##漢\",\n        \"##列\",\n        \"##莱\",\n        \"##典\",\n        \"##敦\",\n        \"##附\",\n        \"##疑\",\n        \"##ㇲ\",\n        \"##系\",\n        \"##遺\",\n        \"##丁\",\n        \"##拭\",\n        \"##棚\",\n        \"##押\",\n        \"##候\",\n        \"##踊\",\n        \"##負\",\n        \"##將\",\n        \"##歯\",\n        \"##感\",\n        \"##痒\",\n        \"##彝\",\n        \"##舌\",\n        \"##宏\",\n        \"##寸\",\n        \"##蛇\",\n        \"##慢\",\n        \"##繕\",\n        \"##戍\",\n        \"##烈\",\n        \"##莉\",\n        \"##箋\",\n        \"##ぇ\",\n        \"##撤\",\n        \"##萬\",\n        \"##孔\",\n        \"##碕\",\n        \"##汐\",\n        \"##磁\",\n        \"##浅\",\n        \"##漁\",\n        \"##楽\",\n        \"##離\",\n        \"##蔭\",\n        \"##累\",\n        \"##士\",\n        \"##ぷ\",\n        \"##騒\",\n        \"##曇\",\n        \"##繰\",\n        \"##售\",\n        \"##摺\",\n        \"##洙\",\n        \"##岬\",\n        \"##慶\",\n        \"##僂\",\n        \"##帽\",\n        \"##粘\",\n        \"##惚\",\n        \"##霆\",\n        \"##維\",\n        \"##埃\",\n        \"##突\",\n        \"##芽\",\n        \"##彫\",\n        \"##碑\",\n        \"##衣\",\n        \"##還\",\n        \"##鵞\",\n        \"##`\",\n        \"##狀\",\n        \"##瓜\",\n        \"##悟\",\n        \"##脚\",\n        \"##調\",\n        \"##誼\",\n        \"##故\",\n        \"##愁\",\n        \"##宜\",\n        \"##層\",\n        \"##戦\",\n        \"##輔\",\n        \"##閩\",\n        \"##瓦\",\n        \"##態\",\n        \"##斡\",\n        \"##縫\",\n        \"##奔\",\n        \"##熬\",\n        \"##蝗\",\n        \"##姓\",\n        \"##讃\",\n        \"##惣\",\n        \"##妄\",\n        \"##窯\",\n        \"##柴\",\n        \"##駒\",\n        \"##項\",\n        \"##帯\",\n        \"##○\",\n        \"##温\",\n        \"##股\",\n        \"##延\",\n        \"##譚\",\n        \"##當\",\n        \"##蒼\",\n        \"##源\",\n        \"##埒\",\n        \"##曽\",\n        \"##侑\",\n        \"##如\",\n        \"##柱\",\n        \"##税\",\n        \"##料\",\n        \"##像\",\n        \"##綴\",\n        \"##裡\",\n        \"##冲\",\n        \"##慨\",\n        \"##百\",\n        \"##展\",\n        \"##囲\",\n        \"##喝\",\n        \"##懋\",\n        \"##顧\",\n        \"##丰\",\n        \"##幌\",\n        \"##賃\",\n        \"##吐\",\n        \"##画\",\n        \"##仇\",\n        \"##狂\",\n        \"##巌\",\n        \"##紗\",\n        \"##投\",\n        \"##哈\",\n        \"##婆\",\n        \"##岐\",\n        \"##理\",\n        \"##境\",\n        \"##額\",\n        \"##=\",\n        \"##ぴ\",\n        \"##覆\",\n        \"##詠\",\n        \"##珞\",\n        \"##病\",\n        \"##位\",\n        \"##念\",\n        \"##呼\",\n        \"##待\",\n        \"##婚\",\n        \"##妻\",\n        \"##ぢ\",\n        \"##菓\",\n        \"##涙\",\n        \"##頂\",\n        \"##宝\",\n        \"##萃\",\n        \"##貸\",\n        \"##標\",\n        \"##溥\",\n        \"##黒\",\n        \"##賀\",\n        \"##倒\",\n        \"##慈\",\n        \"##轄\",\n        \"##情\",\n        \"##粤\",\n        \"##沿\",\n        \"##岸\",\n        \"##嚢\",\n        \"##矩\",\n        \"##処\",\n        \"##恒\",\n        \"##箕\",\n        \"##犬\",\n        \"##借\",\n        \"##奏\",\n        \"##濃\",\n        \"##珠\",\n        \"##戎\",\n        \"##臺\",\n        \"##坤\",\n        \"##収\",\n        \"##誣\",\n        \"##珍\",\n        \"##隠\",\n        \"##災\",\n        \"##築\",\n        \"##炉\",\n        \"##溺\",\n        \"##髷\",\n        \"##進\",\n        \"##鈸\",\n        \"##艶\",\n        \"##陶\",\n        \"##剥\",\n        \"##賞\",\n        \"##紐\",\n        \"##排\",\n        \"##住\",\n        \"##轉\",\n        \"##号\",\n        \"##署\",\n        \"##夕\",\n        \"##坊\",\n        \"##翅\",\n        \"##柯\",\n        \"##富\",\n        \"##絨\",\n        \"##崗\",\n        \"##祐\",\n        \"##栩\",\n        \"##塞\",\n        \"##窺\",\n        \"##“\",\n        \"##”\",\n        \"##曾\",\n        \"##血\",\n        \"##潰\",\n        \"##社\",\n        \"##寶\",\n        \"##喰\",\n        \"##蘭\",\n        \"##蝶\",\n        \"##株\",\n        \"##毘\",\n        \"##賣\",\n        \"##浸\",\n        \"##描\",\n        \"##灰\",\n        \"##壮\",\n        \"##匿\",\n        \"##予\",\n        \"##電\",\n        \"##俗\",\n        \"##抗\",\n        \"##自\",\n        \"##郵\",\n        \"##欽\",\n        \"##円\",\n        \"##尚\",\n        \"##烱\",\n        \"##婦\",\n        \"##究\",\n        \"##対\",\n        \"##籟\",\n        \"##妃\",\n        \"##眉\",\n        \"##波\",\n        \"##鉦\",\n        \"##鼠\",\n        \"##配\",\n        \"##塡\",\n        \"##萊\",\n        \"##概\",\n        \"##優\",\n        \"##鬘\",\n        \"##婢\",\n        \"##鶯\",\n        \"##棹\",\n        \"##楼\",\n        \"##率\",\n        \"##涌\",\n        \"##遷\",\n        \"##最\",\n        \"##頸\",\n        \"##戯\",\n        \"##撫\",\n        \"##妹\",\n        \"##鉢\",\n        \"##遭\",\n        \"##棒\",\n        \"##价\",\n        \"##撥\",\n        \"##》\",\n        \"##審\",\n        \"##煙\",\n        \"##逐\",\n        \"##農\",\n        \"##晴\",\n        \"##篇\",\n        \"##輩\",\n        \"##唄\",\n        \"##槽\",\n        \"##忌\",\n        \"##槻\",\n        \"##又\",\n        \"##舞\",\n        \"##伎\",\n        \"##歴\",\n        \"##峯\",\n        \"##同\",\n        \"##貢\",\n        \"##鰍\",\n        \"##撒\",\n        \"##迫\",\n        \"##玩\",\n        \"##藤\",\n        \"##粒\",\n        \"##聊\",\n        \"##璋\",\n        \"##冠\",\n        \"##卿\",\n        \"##斐\",\n        \"##宴\",\n        \"##己\",\n        \"##際\",\n        \"##党\",\n        \"##而\",\n        \"##鼻\",\n        \"##週\",\n        \"##鬼\",\n        \"##熟\",\n        \"##乾\",\n        \"##墨\",\n        \"##鬱\",\n        \"##終\",\n        \"##疔\",\n        \"##團\",\n        \"##邑\",\n        \"##識\",\n        \"##燭\",\n        \"##裕\",\n        \"##洞\",\n        \"##穴\",\n        \"##鮫\",\n        \"##屈\",\n        \"##捻\",\n        \"##Δ\",\n        \"##塵\",\n        \"##聖\",\n        \"##筵\",\n        \"##駆\",\n        \"##牟\",\n        \"##遅\",\n        \"##伽\",\n        \"##堅\",\n        \"##規\",\n        \"##庁\",\n        \"##豸\",\n        \"##>\",\n        \"##景\",\n        \"##蓋\",\n        \"##衫\",\n        \"##問\",\n        \"##得\",\n        \"##隅\",\n        \"##痢\",\n        \"##宋\",\n        \"##罪\",\n        \"##鐸\",\n        \"##鍮\",\n        \"##軌\",\n        \"##體\",\n        \"##幀\",\n        \"##悲\",\n        \"##絲\",\n        \"##鵲\",\n        \"##琉\",\n        \"##壑\",\n        \"##申\",\n        \"##稜\",\n        \"##沼\",\n        \"##挫\",\n        \"##祀\",\n        \"##躍\",\n        \"##筑\",\n        \"##充\",\n        \"##縄\",\n        \"##饌\",\n        \"##屏\",\n        \"##惶\",\n        \"##耀\",\n        \"##鞘\",\n        \"##魯\",\n        \"##駕\",\n        \"##菌\",\n        \"##杜\",\n        \"##鍍\",\n        \"##酢\",\n        \"##匙\",\n        \"##過\",\n        \"##蛟\",\n        \"##阪\",\n        \"##劣\",\n        \"##杭\",\n        \"##瘤\",\n        \"##栓\",\n        \"##刈\",\n        \"##溢\",\n        \"##串\",\n        \"##思\",\n        \"##艮\",\n        \"##才\",\n        \"##稔\",\n        \"##浚\",\n        \"##瑣\",\n        \"##翔\",\n        \"##軒\",\n        \"##彩\",\n        \"##貂\",\n        \"##乎\",\n        \"##埜\",\n        \"##椿\",\n        \"##夜\",\n        \"##現\",\n        \"##學\",\n        \"##北\",\n        \"##潭\",\n        \"##董\",\n        \"##礙\",\n        \"##霜\",\n        \"##咋\",\n        \"##娘\",\n        \"##棲\",\n        \"##棣\",\n        \"##嵐\",\n        \"##閉\",\n        \"##畫\",\n        \"##矛\",\n        \"##阳\",\n        \"##膝\",\n        \"##亦\",\n        \"##旨\",\n        \"##狩\",\n        \"##託\",\n        \"##鑒\",\n        \"##界\",\n        \"##濡\",\n        \"##紅\",\n        \"##Ο\",\n        \"##順\",\n        \"##謙\",\n        \"##廬\",\n        \"##綱\",\n        \"##炭\",\n        \"##瑩\",\n        \"##彧\",\n        \"##紋\",\n        \"##擬\",\n        \"##琰\",\n        \"##叙\",\n        \"##腹\",\n        \"##鐙\",\n        \"##賦\",\n        \"##應\",\n        \"##瑀\",\n        \"##硯\",\n        \"##燃\",\n        \"##彪\",\n        \"##族\",\n        \"##句\",\n        \"##灼\",\n        \"##迪\",\n        \"##唱\",\n        \"##瑞\",\n        \"##沸\",\n        \"##革\",\n        \"##賓\",\n        \"##芝\",\n        \"##因\",\n        \"##置\",\n        \"##卒\",\n        \"##初\",\n        \"##趣\",\n        \"##僔\",\n        \"##荘\",\n        \"##芋\",\n        \"##肺\",\n        \"##榻\",\n        \"##効\",\n        \"##无\",\n        \"##褒\",\n        \"##銅\",\n        \"##〉\",\n        \"##÷\",\n        \"##銘\",\n        \"##吻\",\n        \"##冊\",\n        \"##振\",\n        \"##$\",\n        \"##啼\",\n        \"##鋸\",\n        \"##辭\",\n        \"##倪\",\n        \"##碧\",\n        \"##並\",\n        \"##輸\",\n        \"##牌\",\n        \"##斤\",\n        \"##蝋\",\n        \"##煤\",\n        \"##早\",\n        \"##容\",\n        \"##娥\",\n        \"##襷\",\n        \"##租\",\n        \"##峰\",\n        \"##障\",\n        \"##爵\",\n        \"##揃\",\n        \"##枕\",\n        \"##徙\",\n        \"##献\",\n        \"##易\",\n        \"##症\",\n        \"##濱\",\n        \"##伏\",\n        \"##涼\",\n        \"##·\",\n        \"##∇\",\n        \"##龜\",\n        \"##梓\",\n        \"##坪\",\n        \"##祺\",\n        \"##毀\",\n        \"##斑\",\n        \"##瓶\",\n        \"##該\",\n        \"##糠\",\n        \"##韻\",\n        \"##括\",\n        \"##常\",\n        \"##勇\",\n        \"##簫\",\n        \"##訳\",\n        \"##堰\",\n        \"##寮\",\n        \"##吸\",\n        \"##験\",\n        \"##練\",\n        \"##泰\",\n        \"##燾\",\n        \"##胡\",\n        \"##櫓\",\n        \"##塗\",\n        \"##透\",\n        \"##薫\",\n        \"##勒\",\n        \"##干\",\n        \"##鯛\",\n        \"##載\",\n        \"##煎\",\n        \"##佛\",\n        \"##弓\",\n        \"##衆\",\n        \"##姉\",\n        \"##尖\",\n        \"##掘\",\n        \"##崖\",\n        \"##浪\",\n        \"##綰\",\n        \"##楨\",\n        \"##苦\",\n        \"##貌\",\n        \"##條\",\n        \"##砕\",\n        \"##朱\",\n        \"##萍\",\n        \"##暴\",\n        \"##亡\",\n        \"##届\",\n        \"##粋\",\n        \"##喙\",\n        \"##関\",\n        \"##籤\",\n        \"##泛\",\n        \"##熈\",\n        \"##腥\",\n        \"##慕\",\n        \"##杖\",\n        \"##腑\",\n        \"##蒂\",\n        \"##猨\",\n        \"##椥\",\n        \"##祥\",\n        \"##丑\",\n        \"##縮\",\n        \"##貫\",\n        \"##蜜\",\n        \"##羌\",\n        \"##昴\",\n        \"##≧\",\n        \"##≦\",\n        \"##躙\",\n        \"##恢\",\n        \"##姜\",\n        \"##冑\",\n        \"##奎\",\n        \"##謡\",\n        \"##拾\",\n        \"##移\",\n        \"##畝\",\n        \"##泥\",\n        \"##走\",\n        \"##猫\",\n        \"##腸\",\n        \"##芯\",\n        \"##遠\",\n        \"##悩\",\n        \"##尻\",\n        \"##隔\",\n        \"##謬\",\n        \"##独\",\n        \"##暑\",\n        \"##策\",\n        \"##柿\",\n        \"##撮\",\n        \"##釘\",\n        \"##急\",\n        \"##簞\",\n        \"##御\",\n        \"##雷\",\n        \"##具\",\n        \"##範\",\n        \"##鬟\",\n        \"##羮\",\n        \"##兜\",\n        \"##捕\",\n        \"##猿\",\n        \"##腎\",\n        \"##懷\",\n        \"##莫\",\n        \"##祟\",\n        \"##睦\",\n        \"##敬\",\n        \"##粛\",\n        \"##蟋\",\n        \"##完\",\n        \"##暈\",\n        \"##〇\",\n        \"##孤\",\n        \"##宇\",\n        \"##芬\",\n        \"##弊\",\n        \"##衷\",\n        \"##舜\",\n        \"##覲\",\n        \"##販\",\n        \"##嫁\",\n        \"##亜\",\n        \"##稱\",\n        \"##撰\",\n        \"##堕\",\n        \"##著\",\n        \"##従\",\n        \"##紳\",\n        \"##吏\",\n        \"##否\",\n        \"##侵\",\n        \"##剌\",\n        \"##誓\",\n        \"##健\",\n        \"##逸\",\n        \"##爾\",\n        \"##臂\",\n        \"##痘\",\n        \"##滴\",\n        \"##決\",\n        \"##璽\",\n        \"##夢\",\n        \"##青\",\n        \"##癖\",\n        \"##朶\",\n        \"##娜\",\n        \"##圃\",\n        \"##紇\",\n        \"##粕\",\n        \"##異\",\n        \"##赤\",\n        \"##僑\",\n        \"##懐\",\n        \"##庸\",\n        \"##頃\",\n        \"##値\",\n        \"##♪\",\n        \"##涇\",\n        \"##胃\",\n        \"##纂\",\n        \"##□\",\n        \"##竄\",\n        \"##賚\",\n        \"##尼\",\n        \"##鉞\",\n        \"##桁\",\n        \"##‖\",\n        \"##腺\",\n        \"##榮\",\n        \"##∞\",\n        \"##妓\",\n        \"##昼\",\n        \"##釣\",\n        \"##秘\",\n        \"##喬\",\n        \"##什\",\n        \"##巖\",\n        \"##私\",\n        \"##°\",\n        \"##簀\",\n        \"##儲\",\n        \"##衞\",\n        \"##密\",\n        \"##垢\",\n        \"##豹\",\n        \"##焙\",\n        \"##盟\",\n        \"##据\",\n        \"##迎\",\n        \"##仔\",\n        \"##牘\",\n        \"##益\",\n        \"##滅\",\n        \"##拒\",\n        \"##冨\",\n        \"##旬\",\n        \"##姑\",\n        \"##胞\",\n        \"##彰\",\n        \"##鏝\",\n        \"##擁\",\n        \"##淛\",\n        \"##距\",\n        \"##涯\",\n        \"##憂\",\n        \"##湯\",\n        \"##統\",\n        \"##余\",\n        \"##葛\",\n        \"##幕\",\n        \"##黄\",\n        \"##怖\",\n        \"##盗\",\n        \"##坡\",\n        \"##嘉\",\n        \"##慮\",\n        \"##苛\",\n        \"##允\",\n        \"##珈\",\n        \"##爬\",\n        \"##陥\",\n        \"##壱\",\n        \"##寒\",\n        \"##掠\",\n        \"##屑\",\n        \"##剃\",\n        \"##筠\",\n        \"##盃\",\n        \"##期\",\n        \"##證\",\n        \"##濁\",\n        \"##葵\",\n        \"##墓\",\n        \"##導\",\n        \"##其\",\n        \"##趙\",\n        \"##尉\",\n        \"##鵡\",\n        \"##秤\",\n        \"##據\",\n        \"##綏\",\n        \"##滔\",\n        \"##倍\",\n        \"##訛\",\n        \"##了\",\n        \"##吹\",\n        \"##于\",\n        \"##総\",\n        \"##奇\",\n        \"##驗\",\n        \"##賈\",\n        \"##泣\",\n        \"##鯨\",\n        \"##抄\",\n        \"##隙\",\n        \"##唯\",\n        \"##ゞ\",\n        \"##鉾\",\n        \"##糞\",\n        \"##纏\",\n        \"##低\",\n        \"##聯\",\n        \"##各\",\n        \"##汰\",\n        \"##嵜\",\n        \"##痛\",\n        \"##貿\",\n        \"##庫\",\n        \"##在\",\n        \"##蒙\",\n        \"##寨\",\n        \"##朋\",\n        \"##潜\",\n        \"##肆\",\n        \"##棋\",\n        \"##賽\",\n        \"##乗\",\n        \"##診\",\n        \"##蕉\",\n        \"##探\",\n        \"##邸\",\n        \"##泡\",\n        \"##閑\",\n        \"##躰\",\n        \"##廷\",\n        \"##蕃\",\n        \"##蔑\",\n        \"##琛\",\n        \"##践\",\n        \"##師\",\n        \"##哥\",\n        \"##毬\",\n        \"##遍\",\n        \"##檬\",\n        \"##凡\",\n        \"##抵\",\n        \"##ÿ\",\n        \"##胝\",\n        \"##鰻\",\n        \"##默\",\n        \"##漠\",\n        \"##廊\",\n        \"##照\",\n        \"##且\",\n        \"##挽\",\n        \"##誕\",\n        \"##虬\",\n        \"##璟\",\n        \"##渦\",\n        \"##圍\",\n        \"##綿\",\n        \"##級\",\n        \"##楚\",\n        \"##汲\",\n        \"##卉\",\n        \"##漆\",\n        \"##牙\",\n        \"##奪\",\n        \"##特\",\n        \"##祓\",\n        \"##摘\",\n        \"##枠\",\n        \"##挑\",\n        \"##咲\",\n        \"##卯\",\n        \"##侍\",\n        \"##胱\",\n        \"##鮴\",\n        \"##阻\",\n        \"##肴\",\n        \"##寂\",\n        \"##庚\",\n        \"##舉\",\n        \"##盈\",\n        \"##瑟\",\n        \"##旺\",\n        \"##畳\",\n        \"##不\",\n        \"##亞\",\n        \"##胥\",\n        \"##静\",\n        \"##胴\",\n        \"##試\",\n        \"##濫\",\n        \"##⌒\",\n        \"##魅\",\n        \"##券\",\n        \"##篠\",\n        \"##瑚\",\n        \"##倫\",\n        \"##薯\",\n        \"##祠\",\n        \"##斗\",\n        \"##崑\",\n        \"##飾\",\n        \"##誅\",\n        \"##末\",\n        \"##辞\",\n        \"##触\",\n        \"##仰\",\n        \"##巽\",\n        \"##嗣\",\n        \"##埋\",\n        \"##頓\",\n        \"##鶉\",\n        \"##偵\",\n        \"##蹙\",\n        \"##準\",\n        \"##少\",\n        \"##蟹\",\n        \"##塔\",\n        \"##舩\",\n        \"##叢\",\n        \"##猛\",\n        \"##鮭\",\n        \"##濟\",\n        \"##狄\",\n        \"##察\",\n        \"##羯\",\n        \"##孚\",\n        \"##蝨\",\n        \"##蕾\",\n        \"##藍\",\n        \"##叫\",\n        \"##唾\",\n        \"##適\",\n        \"##択\",\n        \"##鳩\",\n        \"##肩\",\n        \"##猜\",\n        \"##脩\",\n        \"##輓\",\n        \"##坑\",\n        \"##飲\",\n        \"##妬\",\n        \"##般\",\n        \"##褻\",\n        \"##晦\",\n        \"##淫\",\n        \"##礬\",\n        \"##觀\",\n        \"##諦\",\n        \"##壌\",\n        \"##捏\",\n        \"##醴\",\n        \"##讐\",\n        \"##於\",\n        \"##企\",\n        \"##怨\",\n        \"##准\",\n        \"##鍛\",\n        \"##冶\",\n        \"##孽\",\n        \"##顎\",\n        \"##翰\",\n        \"##惰\",\n        \"##潔\",\n        \"##頬\",\n        \"##橇\",\n        \"##職\",\n        \"##需\",\n        \"##傳\",\n        \"##珂\",\n        \"##惑\",\n        \"##搦\",\n        \"##黍\",\n        \"##餐\",\n        \"##揄\",\n        \"##幽\",\n        \"##歎\",\n        \"##痕\",\n        \"##盲\",\n        \"##價\",\n        \"##逢\",\n        \"##渺\",\n        \"##賎\",\n        \"##午\",\n        \"##蘚\",\n        \"##休\",\n        \"##旅\",\n        \"##揖\",\n        \"##迅\",\n        \"##廼\",\n        \"##漏\",\n        \"##趾\",\n        \"##升\",\n        \"##応\",\n        \"##蜂\",\n        \"##慣\",\n        \"##敵\",\n        \"##省\",\n        \"##艇\",\n        \"##蜉\",\n        \"##葬\",\n        \"##梗\",\n        \"##箇\",\n        \"##矣\",\n        \"##腿\",\n        \"##磐\",\n        \"##黛\",\n        \"##熔\",\n        \"##双\",\n        \"##蓉\",\n        \"##磊\",\n        \"##樋\",\n        \"##焰\",\n        \"##萱\",\n        \"##似\",\n        \"##惨\",\n        \"##彗\",\n        \"##庇\",\n        \"##凌\",\n        \"##背\",\n        \"##悴\",\n        \"##徽\",\n        \"##飽\",\n        \"##庄\",\n        \"##蹠\",\n        \"##貯\",\n        \"##酪\",\n        \"##箸\",\n        \"##鋤\",\n        \"##秣\",\n        \"##採\",\n        \"##蟲\",\n        \"##〔\",\n        \"##┐\",\n        \"##訊\",\n        \"##匡\",\n        \"##麺\",\n        \"##穏\",\n        \"##踪\",\n        \"##捌\",\n        \"##邃\",\n        \"##慰\",\n        \"##韆\",\n        \"##袒\",\n        \"##△\",\n        \"##嚴\",\n        \"##讀\",\n        \"##鹹\",\n        \"##禹\",\n        \"##錠\",\n        \"##【\",\n        \"##育\",\n        \"##%\",\n        \"##を\",\n        \"##素\",\n        \"##蒸\",\n        \"##播\",\n        \"##搖\",\n        \"##躯\",\n        \"##諫\",\n        \"##袴\",\n        \"##穎\",\n        \"##諤\",\n        \"##衰\",\n        \"##捺\",\n        \"##鮑\",\n        \"##畜\",\n        \"##衡\",\n        \"##腫\",\n        \"##欄\",\n        \"##宰\",\n        \"##緩\",\n        \"##吞\",\n        \"##兩\",\n        \"##礪\",\n        \"##馴\",\n        \"##帛\",\n        \"##吟\",\n        \"##幣\",\n        \"##喫\",\n        \"##聲\",\n        \"##兪\",\n        \"##穆\",\n        \"##葆\",\n        \"##舵\",\n        \"##黙\",\n        \"##橘\",\n        \"##暢\",\n        \"##塑\",\n        \"##椰\",\n        \"##鍬\",\n        \"##略\",\n        \"##梶\",\n        \"##銛\",\n        \"##昇\",\n        \"##弯\",\n        \"##錫\",\n        \"##媛\",\n        \"##檣\",\n        \"##呑\",\n        \"##呀\",\n        \"##駄\",\n        \"##監\",\n        \"##穀\",\n        \"##琅\",\n        \"##韋\",\n        \"##叱\",\n        \"##虚\",\n        \"##醬\",\n        \"##窪\",\n        \"##隧\",\n        \"##箪\",\n        \"##渠\",\n        \"##鄂\",\n        \"##玻\",\n        \"##柔\",\n        \"##囃\",\n        \"##攬\",\n        \"##隨\",\n        \"##佩\",\n        \"##涸\",\n        \"##虱\",\n        \"##砂\",\n        \"##斯\",\n        \"##諌\",\n        \"##褐\",\n        \"##測\",\n        \"##璿\",\n        \"##全\",\n        \"##斬\",\n        \"##栖\",\n        \"##虔\",\n        \"##曳\",\n        \"##辛\",\n        \"##枯\",\n        \"##卓\",\n        \"##Π\",\n        \"##櫛\",\n        \"##炙\",\n        \"##傑\",\n        \"##蓮\",\n        \"##鴉\",\n        \"##棍\",\n        \"##躇\",\n        \"##册\",\n        \"##篌\",\n        \"##凜\",\n        \"##勅\",\n        \"##棘\",\n        \"##謀\",\n        \"##債\",\n        \"##蚕\",\n        \"##槌\",\n        \"##熏\",\n        \"##ぅ\",\n        \"##評\",\n        \"##汜\",\n        \"##蕨\",\n        \"##瑪\",\n        \"##霞\",\n        \"##筮\",\n        \"##裘\",\n        \"##塘\",\n        \"##弼\",\n        \"##權\",\n        \"##習\",\n        \"##桓\",\n        \"##澠\",\n        \"##茄\",\n        \"##蕩\",\n        \"##彎\",\n        \"##辻\",\n        \"##冕\",\n        \"##狛\",\n        \"##眠\",\n        \"##縦\",\n        \"##匱\",\n        \"##鱒\",\n        \"##燵\",\n        \"##顫\",\n        \"##箔\",\n        \"##爲\",\n        \"##蓼\",\n        \"##励\",\n        \"##薨\",\n        \"##椒\",\n        \"##砧\",\n        \"##渕\",\n        \"##遂\",\n        \"##藪\",\n        \"##粧\",\n        \"##研\",\n        \"##蛄\",\n        \"##浮\",\n        \"##奮\",\n        \"##翁\",\n        \"##就\",\n        \"##桟\",\n        \"##酉\",\n        \"##餌\",\n        \"##蹇\",\n        \"##縛\",\n        \"##限\",\n        \"##實\",\n        \"##闍\",\n        \"##騙\",\n        \"##凶\",\n        \"##謨\",\n        \"##觚\",\n        \"##俵\",\n        \"##戚\",\n        \"##捜\",\n        \"##秒\",\n        \"##睫\",\n        \"##尿\",\n        \"##牢\",\n        \"##臓\",\n        \"##〵\",\n        \"##ゐ\",\n        \"##酌\",\n        \"##鋏\",\n        \"##既\",\n        \"##刺\",\n        \"##檜\",\n        \"##哆\",\n        \"##唎\",\n        \"##篤\",\n        \"##簾\",\n        \"##惠\",\n        \"##募\",\n        \"##狗\",\n        \"##祢\",\n        \"##始\",\n        \"##曹\",\n        \"##癪\",\n        \"##罰\",\n        \"##殖\",\n        \"##佑\",\n        \"##李\",\n        \"##唐\",\n        \"##丕\",\n        \"##雀\",\n        \"##峪\",\n        \"##娠\",\n        \"##嫌\",\n        \"##懸\",\n        \"##雞\",\n        \"##琪\",\n        \"##瀾\",\n        \"##尋\",\n        \"##詁\",\n        \"##緻\",\n        \"##廈\",\n        \"##牲\",\n        \"##岑\",\n        \"##~\",\n        \"##猶\",\n        \"##膏\",\n        \"##翠\",\n        \"##焜\",\n        \"##糊\",\n        \"##恨\",\n        \"##朔\",\n        \"##閔\",\n        \"##寞\",\n        \"##悍\",\n        \"##峡\",\n        \"##斃\",\n        \"##菅\",\n        \"##﨟\",\n        \"##屎\",\n        \"##凄\",\n        \"##鄰\",\n        \"##鮎\",\n        \"##秩\",\n        \"##非\",\n        \"##厭\",\n        \"##遵\",\n        \"##妙\",\n        \"##靖\",\n        \"##鮮\",\n        \"##樂\",\n        \"##醸\",\n        \"##皿\",\n        \"##會\",\n        \"##聚\",\n        \"##舶\",\n        \"##此\",\n        \"##箒\",\n        \"##梛\",\n        \"##冥\",\n        \"##沱\",\n        \"##謝\",\n        \"##★\",\n        \"##▼\",\n        \"##〓\",\n        \"##裁\",\n        \"##砦\",\n        \"##湛\",\n        \"##燮\",\n        \"##瀆\",\n        \"##蒜\",\n        \"##∠\",\n        \"##聳\",\n        \"##埼\",\n        \"##洟\",\n        \"##經\",\n        \"##弗\",\n        \"##他\",\n        \"##写\",\n        \"##擦\",\n        \"##旻\",\n        \"##猟\",\n        \"##泳\",\n        \"##颪\",\n        \"##凍\",\n        \"##稼\",\n        \"##紹\",\n        \"##堯\",\n        \"##笏\",\n        \"##架\",\n        \"##薄\",\n        \"##毎\",\n        \"##嗜\",\n        \"##掌\",\n        \"##竈\",\n        \"##甜\",\n        \"##愴\",\n        \"##赫\",\n        \"##薹\",\n        \"##汪\",\n        \"##覇\",\n        \"##喪\",\n        \"##塙\",\n        \"##絣\",\n        \"##倶\",\n        \"##紛\",\n        \"##伴\",\n        \"##刃\",\n        \"##桧\",\n        \"##痰\",\n        \"##竦\",\n        \"##啓\",\n        \"##喩\",\n        \"##芦\",\n        \"##豬\",\n        \"##杏\",\n        \"##拇\",\n        \"##俘\",\n        \"##后\",\n        \"##豫\",\n        \"##怠\",\n        \"##坎\",\n        \"##征\",\n        \"##誾\",\n        \"##混\",\n        \"##劉\",\n        \"##疾\",\n        \"##輦\",\n        \"##涂\",\n        \"##鐵\",\n        \"##鼬\",\n        \"##昔\",\n        \"##凝\",\n        \"##紡\",\n        \"##措\",\n        \"##鰌\",\n        \"##籏\",\n        \"##到\",\n        \"##墾\",\n        \"##听\",\n        \"##裳\",\n        \"##濯\",\n        \"##髄\",\n        \"##酔\",\n        \"##忘\",\n        \"##漫\",\n        \"##浴\",\n        \"##攣\",\n        \"##鴻\",\n        \"##罫\",\n        \"##諾\",\n        \"##宕\",\n        \"##邨\",\n        \"##潟\",\n        \"##痣\",\n        \"##喉\",\n        \"##淄\",\n        \"##俐\",\n        \"##贅\",\n        \"##籌\",\n        \"##媼\",\n        \"##寝\",\n        \"##鑿\",\n        \"##游\",\n        \"##–\",\n        \"##杵\",\n        \"##戴\",\n        \"##雜\",\n        \"##淡\",\n        \"##裸\",\n        \"##對\",\n        \"##凋\",\n        \"##柏\",\n        \"##擇\",\n        \"##雑\",\n        \"##膠\",\n        \"##衝\",\n        \"##整\",\n        \"##誇\",\n        \"##騰\",\n        \"##絖\",\n        \"##涎\",\n        \"##痤\",\n        \"##縷\",\n        \"##叔\",\n        \"##撓\",\n        \"##彼\",\n        \"##鄙\",\n        \"##磯\",\n        \"##婁\",\n        \"##鉱\",\n        \"##恭\",\n        \"##噛\",\n        \"##Щ\",\n        \"##嬰\",\n        \"##晩\",\n        \"##課\",\n        \"##ζ\",\n        \"##礫\",\n        \"##圳\",\n        \"##蝣\",\n        \"##簋\",\n        \"##挺\",\n        \"##弩\",\n        \"##雍\",\n        \"##苔\",\n        \"##坦\",\n        \"##鯰\",\n        \"##☆\",\n        \"##逆\",\n        \"##薦\",\n        \"##窃\",\n        \"##啞\",\n        \"##晃\",\n        \"##蒡\",\n        \"##淙\",\n        \"##醍\",\n        \"##醐\",\n        \"##嘎\",\n        \"##駁\",\n        \"##勿\",\n        \"##阡\",\n        \"##焚\",\n        \"##撲\",\n        \"##靳\",\n        \"##披\",\n        \"##埓\",\n        \"##顯\",\n        \"##乙\",\n        \"##吊\",\n        \"##剛\",\n        \"##盆\",\n        \"##朽\",\n        \"##杰\",\n        \"##蛉\",\n        \"##単\",\n        \"##嘴\",\n        \"##鎧\",\n        \"##諱\",\n        \"##葦\",\n        \"##嬪\",\n        \"##峻\",\n        \"##秦\",\n        \"##碩\",\n        \"##賤\",\n        \"##培\",\n        \"##刕\",\n        \"##汚\",\n        \"##停\",\n        \"##綢\",\n        \"##宸\",\n        \"##峨\",\n        \"##謂\",\n        \"##托\",\n        \"##緋\",\n        \"##属\",\n        \"##戩\",\n        \"##▲\",\n        \"##麵\",\n        \"##籃\",\n        \"##隈\",\n        \"##皓\",\n        \"##稲\",\n        \"##斜\",\n        \"##羲\",\n        \"##幹\",\n        \"##墳\",\n        \"##鞍\",\n        \"##厩\",\n        \"##葱\",\n        \"##遥\",\n        \"##帙\",\n        \"##蓄\",\n        \"##瑤\",\n        \"##鷺\",\n        \"##猊\",\n        \"##繪\",\n        \"##祇\",\n        \"##綺\",\n        \"##廓\",\n        \"##框\",\n        \"##奨\",\n        \"##畯\",\n        \"##拙\",\n        \"##膨\",\n        \"##咄\",\n        \"##怡\",\n        \"##燈\",\n        \"##劫\",\n        \"##操\",\n        \"##糲\",\n        \"##迷\",\n        \"##玲\",\n        \"##霧\",\n        \"##靈\",\n        \"##狼\",\n        \"##鍼\",\n        \"##肪\",\n        \"##朴\",\n        \"##紮\",\n        \"##蕙\",\n        \"##皖\",\n        \"##咳\",\n        \"##焔\",\n        \"##圓\",\n        \"##怒\",\n        \"##頌\",\n        \"##訶\",\n        \"##缺\",\n        \"##佞\",\n        \"##箏\",\n        \"##謁\",\n        \"##嫡\",\n        \"##鵬\",\n        \"##韜\",\n        \"##功\",\n        \"##傘\",\n        \"##奥\",\n        \"##併\",\n        \"##贛\",\n        \"##艾\",\n        \"##檗\",\n        \"##畤\",\n        \"##這\",\n        \"##奚\",\n        \"##滞\",\n        \"##必\",\n        \"##駐\",\n        \"##個\",\n        \"##蹄\",\n        \"##檀\",\n        \"##揺\",\n        \"##恐\",\n        \"##蓬\",\n        \"##廉\",\n        \"##薔\",\n        \"##薇\",\n        \"##ヵ\",\n        \"##醤\",\n        \"##頽\",\n        \"##迦\",\n        \"##﨑\",\n        \"##旋\",\n        \"##笵\",\n        \"##碓\",\n        \"##緣\",\n        \"##炒\",\n        \"##勘\",\n        \"##艫\",\n        \"##廃\",\n        \"##徴\",\n        \"##痺\",\n        \"##疫\",\n        \"##拗\",\n        \"##棉\",\n        \"##刹\",\n        \"##供\",\n        \"##欣\",\n        \"##襄\",\n        \"##宍\",\n        \"##鮨\",\n        \"##樵\",\n        \"##奉\",\n        \"##倩\",\n        \"##撼\",\n        \"##酛\",\n        \"##墟\",\n        \"##縣\",\n        \"##褪\",\n        \"##釉\",\n        \"##瀉\",\n        \"##蕊\",\n        \"##僊\",\n        \"##幾\",\n        \"##瀛\",\n        \"##卑\",\n        \"##⤴\",\n        \"##碎\",\n        \"##堪\",\n        \"##笙\",\n        \"##瞳\",\n        \"##亂\",\n        \"##槎\",\n        \"##湾\",\n        \"##曜\",\n        \"##渤\",\n        \"##槨\",\n        \"##褄\",\n        \"##抱\",\n        \"##俳\",\n        \"##丼\",\n        \"##壷\",\n        \"##∅\",\n        \"##狙\",\n        \"##脾\",\n        \"##厄\",\n        \"##套\",\n        \"##嶠\",\n        \"##梦\",\n        \"##儒\",\n        \"##誦\",\n        \"##傭\",\n        \"##蜓\",\n        \"##◇\",\n        \"##壽\",\n        \"##罷\",\n        \"##陌\",\n        \"##汝\",\n        \"##援\",\n        \"##冬\",\n        \"##硝\",\n        \"##迹\",\n        \"##萎\",\n        \"##鯖\",\n        \"##襖\",\n        \"##紘\",\n        \"##袞\",\n        \"##瀧\",\n        \"##伶\",\n        \"##廳\",\n        \"##屯\",\n        \"##蛾\",\n        \"##邕\",\n        \"##抹\",\n        \"##咎\",\n        \"##憤\",\n        \"##綽\",\n        \"##亟\",\n        \"##鵠\",\n        \"##梟\",\n        \"##鎔\",\n        \"##蝦\",\n        \"##弔\",\n        \"##靜\",\n        \"##娩\",\n        \"##険\",\n        \"##匪\",\n        \"##享\",\n        \"##拌\",\n        \"##茫\",\n        \"##奭\",\n        \"##步\",\n        \"##澳\",\n        \"##麹\",\n        \"##凛\",\n        \"##吼\",\n        \"##炮\",\n        \"##礒\",\n        \"##杼\",\n        \"##湍\",\n        \"##菫\",\n        \"##楊\",\n        \"##墅\",\n        \"##柵\",\n        \"##嗇\",\n        \"##榜\",\n        \"##藥\",\n        \"##犠\",\n        \"##垠\",\n        \"##瑜\",\n        \"##琢\",\n        \"##符\",\n        \"##確\",\n        \"##紊\",\n        \"##創\",\n        \"##傾\",\n        \"##絡\",\n        \"##嶽\",\n        \"##斥\",\n        \"##脆\",\n        \"##與\",\n        \"##傍\",\n        \"##⇒\",\n        \"##厓\",\n        \"##倹\",\n        \"##冰\",\n        \"##蛮\",\n        \"##桐\",\n        \"##萌\",\n        \"##錯\",\n        \"##碗\",\n        \"##疱\",\n        \"##恃\",\n        \"##麒\",\n        \"##禰\",\n        \"##仞\",\n        \"##谿\",\n        \"##噲\",\n        \"##薗\",\n        \"##副\",\n        \"##萩\",\n        \"##輿\",\n        \"##繹\",\n        \"##齊\",\n        \"##忽\",\n        \"##椀\",\n        \"##瀝\",\n        \"##鏈\",\n        \"##舘\",\n        \"##妣\",\n        \"##噴\",\n        \"##⤵\",\n        \"##検\",\n        \"##績\",\n        \"##釵\",\n        \"##蔬\",\n        \"##畔\",\n        \"##謹\",\n        \"##袍\",\n        \"##吠\",\n        \"##嵌\",\n        \"##戮\",\n        \"##贏\",\n        \"##做\",\n        \"##戰\",\n        \"##歓\",\n        \"##誠\",\n        \"##驒\",\n        \"##焉\",\n        \"##懿\",\n        \"##宵\",\n        \"##賑\",\n        \"##棄\",\n        \"##袱\",\n        \"##蟻\",\n        \"##ヷ\",\n        \"##戟\",\n        \"##礁\",\n        \"##餓\",\n        \"##晋\",\n        \"##棺\",\n        \"##簶\",\n        \"##鈔\",\n        \"##窟\",\n        \"##臼\",\n        \"##瘡\",\n        \"##麟\",\n        \"##譙\",\n        \"##漱\",\n        \"##煩\",\n        \"##訣\",\n        \"##摯\",\n        \"##瘍\",\n        \"##紬\",\n        \"##慎\",\n        \"##煊\",\n        \"##翎\",\n        \"##辦\",\n        \"##歸\",\n        \"##莒\",\n        \"##呆\",\n        \"##黎\",\n        \"##躑\",\n        \"##躅\",\n        \"##零\",\n        \"##瞼\",\n        \"##棟\",\n        \"##舷\",\n        \"##曰\",\n        \"##禀\",\n        \"##′\",\n        \"##薙\",\n        \"##塰\",\n        \"##楯\",\n        \"##狐\",\n        \"##鰲\",\n        \"##薩\",\n        \"##臨\",\n        \"##幄\",\n        \"##纓\",\n        \"##邵\",\n        \"##鬢\",\n        \"##毯\",\n        \"##貧\",\n        \"##紺\",\n        \"##苓\",\n        \"##辨\",\n        \"##鈍\",\n        \"##堆\",\n        \"##↓\",\n        \"##諛\",\n        \"##慾\",\n        \"##尭\",\n        \"##萢\",\n        \"##螺\",\n        \"##’\",\n        \"##驚\",\n        \"##鏃\",\n        \"##陳\",\n        \"##餡\",\n        \"##鵜\",\n        \"##怪\",\n        \"##雁\",\n        \"##〈\",\n        \"##麝\",\n        \"##緬\",\n        \"##訟\",\n        \"##蠟\",\n        \"##眞\",\n        \"##鉤\",\n        \"##悶\",\n        \"##楢\",\n        \"##輛\",\n        \"##妖\",\n        \"##悌\",\n        \"##偃\",\n        \"##缶\",\n        \"##剖\",\n        \"##劒\",\n        \"##憚\",\n        \"##鞭\",\n        \"##杞\",\n        \"##再\",\n        \"##菲\",\n        \"##杢\",\n        \"##〳\",\n        \"##暉\",\n        \"##彡\",\n        \"##轅\",\n        \"##燻\",\n        \"##犀\",\n        \"##芹\",\n        \"##欅\",\n        \"##炳\",\n        \"##腔\",\n        \"##隹\",\n        \"##魋\",\n        \"##畷\",\n        \"##預\",\n        \"##蛋\",\n        \"##聡\",\n        \"##倭\",\n        \"##鈞\",\n        \"##瑳\",\n        \"##梳\",\n        \"##罕\",\n        \"##├\",\n        \"##霑\",\n        \"##蝙\",\n        \"##款\",\n        \"##葭\",\n        \"##鞆\",\n        \"##委\",\n        \"##雙\",\n        \"##鼎\",\n        \"##澗\",\n        \"##屠\",\n        \"##註\",\n        \"##啄\",\n        \"##鉈\",\n        \"##脞\",\n        \"##脹\",\n        \"##脛\",\n        \"##癒\",\n        \"##禿\",\n        \"##査\",\n        \"##耕\",\n        \"##逝\",\n        \"##巍\",\n        \"##愕\",\n        \"##勉\",\n        \"##蔓\",\n        \"##肖\",\n        \"##均\",\n        \"##幢\",\n        \"##胸\",\n        \"##謌\",\n        \"##窖\",\n        \"##魃\",\n        \"##巧\",\n        \"##薐\",\n        \"##莞\",\n        \"##萄\",\n        \"##匯\",\n        \"##愈\",\n        \"##乞\",\n        \"##頡\",\n        \"##陲\",\n        \"##齡\",\n        \"##畠\",\n        \"##悦\",\n        \"##昧\",\n        \"##暗\",\n        \"##蟇\",\n        \"##翩\",\n        \"##貽\",\n        \"##疎\",\n        \"##梏\",\n        \"##痔\",\n        \"##宛\",\n        \"##巾\",\n        \"##瞑\",\n        \"##遁\",\n        \"##寅\",\n        \"##挿\",\n        \"##髏\",\n        \"##索\",\n        \"##懲\",\n        \"##鴿\",\n        \"##幗\",\n        \"##¥\",\n        \"##睛\",\n        \"##旧\",\n        \"##熕\",\n        \"##恚\",\n        \"##疽\",\n        \"##皴\",\n        \"##劭\",\n        \"##薮\",\n        \"##漕\",\n        \"##凉\",\n        \"##幼\",\n        \"##豉\",\n        \"##哀\",\n        \"##今\",\n        \"##癸\",\n        \"##錐\",\n        \"##髻\",\n        \"##弖\",\n        \"##警\",\n        \"##晁\",\n        \"##蝮\",\n        \"##媒\",\n        \"##燗\",\n        \"##蝠\",\n        \"##卅\",\n        \"##痴\",\n        \"##即\",\n        \"##甑\",\n        \"##苺\",\n        \"##鞴\",\n        \"##渾\",\n        \"##斷\",\n        \"##誡\",\n        \"##蚊\",\n        \"##怯\",\n        \"##宥\",\n        \"##凱\",\n        \"##獅\",\n        \"##綸\",\n        \"##瀨\",\n        \"##稚\",\n        \"##鷦\",\n        \"##鷯\",\n        \"##微\",\n        \"##倣\",\n        \"##詢\",\n        \"##寡\",\n        \"##謖\",\n        \"##朮\",\n        \"##兮\",\n        \"##凧\",\n        \"##稈\",\n        \"##疇\",\n        \"##契\",\n        \"##»\",\n        \"##樽\",\n        \"##芎\",\n        \"##剝\",\n        \"##槫\",\n        \"##滉\",\n        \"##疳\",\n        \"##虞\",\n        \"##巫\",\n        \"##燐\",\n        \"##曼\",\n        \"##苫\",\n        \"##戛\",\n        \"##喇\",\n        \"##痙\",\n        \"##踞\",\n        \"##¤\",\n        \"##&\",\n        \"##瓏\",\n        \"##捐\",\n        \"##墻\",\n        \"##暇\",\n        \"##猷\",\n        \"##―\",\n        \"##墜\",\n        \"##數\",\n        \"##頊\",\n        \"##塊\",\n        \"##昶\",\n        \"##鞮\",\n        \"##芩\",\n        \"##貼\",\n        \"##轡\",\n        \"##鞏\",\n        \"##懌\",\n        \"##叭\",\n        \"##⏌\",\n        \"##救\",\n        \"##竝\",\n        \"##伺\",\n        \"##粥\",\n        \"##鬚\",\n        \"##哇\",\n        \"##埴\",\n        \"##♀\",\n        \"##♂\",\n        \"##鋪\",\n        \"##奢\",\n        \"##霏\",\n        \"##爐\",\n        \"##Γ\",\n        \"##Ξ\",\n        \"##羹\",\n        \"##鑞\",\n        \"##舁\",\n        \"##籐\",\n        \"##覺\",\n        \"##昏\",\n        \"##猴\",\n        \"##推\",\n        \"##關\",\n        \"##沃\",\n        \"##穢\",\n        \"##遼\",\n        \"##柬\",\n        \"##翳\",\n        \"##悔\",\n        \"##瑶\",\n        \"##揉\",\n        \"##洩\",\n        \"##蹲\",\n        \"##圀\",\n        \"##荼\",\n        \"##彭\",\n        \"##棱\",\n        \"##係\",\n        \"##幟\",\n        \"##笘\",\n        \"##燼\",\n        \"##楡\",\n        \"##茨\",\n        \"##籬\",\n        \"##扶\",\n        \"##媚\",\n        \"##螂\",\n        \"##彈\",\n        \"##諧\",\n        \"##峅\",\n        \"##玕\",\n        \"##巨\",\n        \"##僚\",\n        \"##靴\",\n        \"##菱\",\n        \"##陷\",\n        \"##呈\",\n        \"##闕\",\n        \"##癩\",\n        \"##硬\",\n        \"##侗\",\n        \"##幻\",\n        \"##珊\",\n        \"##艸\",\n        \"##担\",\n        \"##殘\",\n        \"##闇\",\n        \"##牝\",\n        \"##鹼\",\n        \"##杲\",\n        \"##慌\",\n        \"##蟬\",\n        \"##卦\",\n        \"##娼\",\n        \"##藁\",\n        \"##廡\",\n        \"##舒\",\n        \"##毫\",\n        \"##虜\",\n        \"##—\",\n        \"##囊\",\n        \"##握\",\n        \"##蔽\",\n        \"##尤\",\n        \"##巓\",\n        \"##躁\",\n        \"##炊\",\n        \"##咐\",\n        \"##鬆\",\n        \"##堵\",\n        \"##叟\",\n        \"##隻\",\n        \"##錮\",\n        \"##壹\",\n        \"##梯\",\n        \"##汽\",\n        \"##龕\",\n        \"##璇\",\n        \"##閃\",\n        \"##蛸\",\n        \"##←\",\n        \"##↑\",\n        \"##妾\",\n        \"##罠\",\n        \"##螳\",\n        \"##鶚\",\n        \"##昂\",\n        \"##朦\",\n        \"##餮\",\n        \"##椽\",\n        \"##麩\",\n        \"##詔\",\n        \"##膚\",\n        \"##ㇻ\",\n        \"##穡\",\n        \"##簿\",\n        \"##樣\",\n        \"##澹\",\n        \"##衾\",\n        \"##藺\",\n        \"##旛\",\n        \"##跚\",\n        \"##糟\",\n        \"##窮\",\n        \"##緜\",\n        \"##瓊\",\n        \"##窩\",\n        \"##縋\",\n        \"##緞\",\n        \"##剋\",\n        \"##阯\",\n        \"##汞\",\n        \"##肭\",\n        \"##¿\",\n        \"##鉛\",\n        \"##灌\",\n        \"##帥\",\n        \"##£\",\n        \"##槓\",\n        \"##禾\",\n        \"##鴣\",\n        \"##恤\",\n        \"##拐\",\n        \"##涅\",\n        \"##曄\",\n        \"##▽\",\n        \"##訂\",\n        \"##擲\",\n        \"##罸\",\n        \"##舊\",\n        \"##捉\",\n        \"##馳\",\n        \"##辟\",\n        \"##鈎\",\n        \"##壙\",\n        \"##婉\",\n        \"##號\",\n        \"##蛍\",\n        \"##捶\",\n        \"##饉\",\n        \"##澈\",\n        \"##蒻\",\n        \"##邉\",\n        \"##厲\",\n        \"##溶\",\n        \"##韶\",\n        \"##聾\",\n        \"##獺\",\n        \"##鈑\",\n        \"##敖\",\n        \"##哨\",\n        \"##驛\",\n        \"##脊\",\n        \"##敢\",\n        \"##瞭\",\n        \"##已\",\n        \"##儘\",\n        \"##畿\",\n        \"##贈\",\n        \"##徨\",\n        \"##雇\",\n        \"##瓢\",\n        \"##兆\",\n        \"##喊\",\n        \"##諶\",\n        \"##箚\",\n        \"##倆\",\n        \"##喆\",\n        \"##侶\",\n        \"##陝\",\n        \"##鉉\",\n        \"##璘\",\n        \"##愧\",\n        \"##鴒\",\n        \"##址\",\n        \"##濂\",\n        \"##瞬\",\n        \"##眷\",\n        \"##銓\",\n        \"##塲\",\n        \"##《\",\n        \"##蘊\",\n        \"##汎\",\n        \"##∀\",\n        \"##骸\",\n        \"##誂\",\n        \"##酵\",\n        \"##壻\",\n        \"##跨\",\n        \"##諄\",\n        \"##錨\",\n        \"##熹\",\n        \"##迭\",\n        \"##盔\",\n        \"##嵩\",\n        \"##犧\",\n        \"##楠\",\n        \"##髴\",\n        \"##釋\",\n        \"##執\",\n        \"##爺\",\n        \"##滸\",\n        \"##漸\",\n        \"##繼\",\n        \"##徐\",\n        \"##祉\",\n        \"##牽\",\n        \"##舅\",\n        \"##籀\",\n        \"##撻\",\n        \"##絃\",\n        \"##驩\",\n        \"##卜\",\n        \"##禦\",\n        \"##滾\",\n        \"##拼\",\n        \"##疋\",\n        \"##蓑\",\n        \"##莢\",\n        \"##跋\",\n        \"##悠\",\n        \"##饒\",\n        \"##茉\",\n        \"##瑾\",\n        \"##區\",\n        \"##覡\",\n        \"##芭\",\n        \"##枷\",\n        \"##劍\",\n        \"##舗\",\n        \"##屍\",\n        \"##咤\",\n        \"##琦\",\n        \"##馗\",\n        \"##贊\",\n        \"##鹸\",\n        \"##截\",\n        \"##嵎\",\n        \"##厥\",\n        \"##廿\",\n        \"##瑗\",\n        \"##欒\",\n        \"##嘘\",\n        \"##聟\",\n        \"##裔\",\n        \"##篋\",\n        \"##糶\",\n        \"##∓\",\n        \"##遮\",\n        \"##菁\",\n        \"##粢\",\n        \"##樫\",\n        \"##錚\",\n        \"##矧\",\n        \"##鏞\",\n        \"##鎭\",\n        \"##暎\",\n        \"##閘\",\n        \"##偽\",\n        \"##廁\",\n        \"##鷗\",\n        \"##奠\",\n        \"##亨\",\n        \"##把\",\n        \"##鰈\",\n        \"##頤\",\n        \"##眩\",\n        \"##漂\",\n        \"##肛\",\n        \"##蔡\",\n        \"##咫\",\n        \"##何\",\n        \"##騨\",\n        \"##巷\",\n        \"##阜\",\n        \"##猾\",\n        \"##撞\",\n        \"##蔀\",\n        \"##戈\",\n        \"##怙\",\n        \"##樟\",\n        \"##餉\",\n        \"##禽\",\n        \"##☁\",\n        \"##☂\",\n        \"##蘗\",\n        \"##蝿\",\n        \"##狽\",\n        \"##ψ\",\n        \"##瀑\",\n        \"##刎\",\n        \"##爽\",\n        \"##陬\",\n        \"##粱\",\n        \"##蕷\",\n        \"##激\",\n        \"##呍\",\n        \"##煕\",\n        \"##顆\",\n        \"##隴\",\n        \"##褥\",\n        \"##朕\",\n        \"##摧\",\n        \"##鎚\",\n        \"##斧\",\n        \"##逓\",\n        \"##釗\",\n        \"##嘯\",\n        \"##渇\",\n        \"##繇\",\n        \"##飩\",\n        \"##授\",\n        \"##悸\",\n        \"##牀\",\n        \"##鬪\",\n        \"##喘\",\n        \"##樊\",\n        \"##嘩\",\n        \"##鞜\",\n        \"##悛\",\n        \"##嬋\",\n        \"##雯\",\n        \"##蝓\",\n        \"##宙\",\n        \"##倻\",\n        \"##榴\",\n        \"##蛹\",\n        \"##蜀\",\n        \"##梱\",\n        \"##氐\",\n        \"##菴\",\n        \"##處\",\n        \"##堡\",\n        \"##靭\",\n        \"##彙\",\n        \"##醢\",\n        \"##俄\",\n        \"##漿\",\n        \"##穿\",\n        \"##徠\",\n        \"##縅\",\n        \"##喚\",\n        \"##邈\",\n        \"##帑\",\n        \"##芻\",\n        \"##邏\",\n        \"##磔\",\n        \"##謗\",\n        \"##笹\",\n        \"##决\",\n        \"##擾\",\n        \"##寫\",\n        \"##闡\",\n        \"##√\",\n        \"##•\",\n        \"##弄\",\n        \"##盾\",\n        \"##獨\",\n        \"##頚\",\n        \"##醉\",\n        \"##ħ\",\n        \"##峙\",\n        \"##某\",\n        \"##普\",\n        \"##苅\",\n        \"##恂\",\n        \"##鋭\",\n        \"##靄\",\n        \"##複\",\n        \"##睿\",\n        \"##圖\",\n        \"##夭\",\n        \"##隸\",\n        \"##呉\",\n        \"##蔟\",\n        \"##賄\",\n        \"##掃\",\n        \"##雋\",\n        \"##俸\",\n        \"##馭\",\n        \"##淇\",\n        \"##撕\",\n        \"##賠\",\n        \"##浙\",\n        \"##恣\",\n        \"##裒\",\n        \"##膿\",\n        \"##僖\",\n        \"##贄\",\n        \"##芾\",\n        \"##藝\",\n        \"##些\",\n        \"##嶌\",\n        \"##岨\",\n        \"##肢\",\n        \"##棊\",\n        \"##毟\",\n        \"##掬\",\n        \"##緯\",\n        \"##湮\",\n        \"##蠅\",\n        \"##瑰\",\n        \"##疲\",\n        \"##梧\",\n        \"##鵑\",\n        \"##廂\",\n        \"##潸\",\n        \"##篩\",\n        \"##貔\",\n        \"##柑\",\n        \"##飡\",\n        \"##啾\",\n        \"##鑰\",\n        \"##淮\",\n        \"##卷\",\n        \"##槐\",\n        \"##樓\",\n        \"##晏\",\n        \"##甸\",\n        \"##酥\",\n        \"##諜\",\n        \"##歡\",\n        \"##鄕\",\n        \"##蘋\",\n        \"##酬\",\n        \"##瑛\",\n        \"##耗\",\n        \"##癇\",\n        \"##迄\",\n        \"##扁\",\n        \"##嗟\",\n        \"##攸\",\n        \"##瞥\",\n        \"##抽\",\n        \"##衍\",\n        \"##洒\",\n        \"##鎌\",\n        \"##垜\",\n        \"##黑\",\n        \"##羞\",\n        \"##嘲\",\n        \"##瞋\",\n        \"##儡\",\n        \"##祁\",\n        \"##澂\",\n        \"##盡\",\n        \"##竃\",\n        \"##淹\",\n        \"##琶\",\n        \"##渫\",\n        \"##聰\",\n        \"##嘔\",\n        \"##佯\",\n        \"##惧\",\n        \"##禺\",\n        \"##襞\",\n        \"##蓿\",\n        \"##杙\",\n        \"##霓\",\n        \"##鄭\",\n        \"##臾\",\n        \"##ゎ\",\n        \"##陟\",\n        \"##佗\",\n        \"##溌\",\n        \"##ぉ\",\n        \"##嬬\",\n        \"##壬\",\n        \"##骰\",\n        \"##霄\",\n        \"##褌\",\n        \"##穗\",\n        \"##頑\",\n        \"##險\",\n        \"##潼\",\n        \"##煌\",\n        \"##臧\",\n        \"##忙\",\n        \"##杷\",\n        \"##憾\",\n        \"##掾\",\n        \"##鰯\",\n        \"##彅\",\n        \"##掴\",\n        \"##灝\",\n        \"##叛\",\n        \"##跌\",\n        \"##從\",\n        \"##俎\",\n        \"##梵\",\n        \"##崛\",\n        \"##¡\",\n        \"##鬨\",\n        \"##槙\",\n        \"##擔\",\n        \"##纈\",\n        \"##怕\",\n        \"##睺\",\n        \"##諚\",\n        \"##╹\",\n        \"##撈\",\n        \"##«\",\n        \"##耨\",\n        \"##班\",\n        \"##捷\",\n        \"##紂\",\n        \"##豁\",\n        \"##惇\",\n        \"##魎\",\n        \"##疵\",\n        \"##鯒\",\n        \"##廩\",\n        \"##赦\",\n        \"##瓠\",\n        \"##劾\",\n        \"##稹\",\n        \"##堺\",\n        \"##逍\",\n        \"##鴈\",\n        \"##洽\",\n        \"##姒\",\n        \"##鏘\",\n        \"##Θ\",\n        \"##臈\",\n        \"##搔\",\n        \"##甥\",\n        \"##喧\",\n        \"##粗\",\n        \"##嘱\",\n        \"##儉\",\n        \"##靱\",\n        \"##晷\",\n        \"##羚\",\n        \"##爻\",\n        \"##詹\",\n        \"##呰\",\n        \"##孟\",\n        \"##閲\",\n        \"##劃\",\n        \"##肋\",\n        \"##裝\",\n        \"##隷\",\n        \"##渣\",\n        \"##礦\",\n        \"##猪\",\n        \"##邱\",\n        \"##魁\",\n        \"##恬\",\n        \"##篦\",\n        \"##〕\",\n        \"##盒\",\n        \"##隲\",\n        \"##茱\",\n        \"##萸\",\n        \"##囂\",\n        \"##蜒\",\n        \"##采\",\n        \"##琵\",\n        \"##兗\",\n        \"##櫞\",\n        \"##濤\",\n        \"##沫\",\n        \"##璐\",\n        \"##奕\",\n        \"##覩\",\n        \"##澣\",\n        \"##簪\",\n        \"##脘\",\n        \"##馨\",\n        \"##儺\",\n        \"##暖\",\n        \"##兀\",\n        \"##顚\",\n        \"##凭\",\n        \"##眈\",\n        \"##揆\",\n        \"##縵\",\n        \"##錄\",\n        \"##♠\",\n        \"##瞞\",\n        \"##淞\",\n        \"##嶂\",\n        \"##夾\",\n        \"##筝\",\n        \"##晨\",\n        \"##Å\",\n        \"##儞\",\n        \"##銷\",\n        \"##勧\",\n        \"##俅\",\n        \"##勃\",\n        \"##渉\",\n        \"##杈\",\n        \"##閭\",\n        \"##齋\",\n        \"##鞁\",\n        \"##靼\",\n        \"##痩\",\n        \"##舫\",\n        \"##©\",\n        \"##尸\",\n        \"##籾\",\n        \"##栽\",\n        \"##丙\",\n        \"##蕪\",\n        \"##蜷\",\n        \"##慟\",\n        \"##婿\",\n        \"##氣\",\n        \"##曁\",\n        \"##鉋\",\n        \"##踝\",\n        \"##歟\",\n        \"##偶\",\n        \"##箭\",\n        \"##狡\",\n        \"##娃\",\n        \"##俠\",\n        \"##潑\",\n        \"##霖\",\n        \"##籙\",\n        \"##昉\",\n        \"##氈\",\n        \"##拵\",\n        \"##龢\",\n        \"##况\",\n        \"##們\",\n        \"##蜍\",\n        \"##熨\",\n        \"##厦\",\n        \"##兇\",\n        \"##軛\",\n        \"##颯\",\n        \"##溯\",\n        \"##佃\",\n        \"##歷\",\n        \"##璞\",\n        \"##枢\",\n        \"##頻\",\n        \"##搬\",\n        \"##牒\",\n        \"##滿\",\n        \"##♥\",\n        \"##錢\",\n        \"##鼈\",\n        \"##麋\",\n        \"##櫚\",\n        \"##崋\",\n        \"##翊\",\n        \"##泗\",\n        \"##臚\",\n        \"##莎\",\n        \"##兌\",\n        \"##禮\",\n        \"##發\",\n        \"##聽\",\n        \"##詮\",\n        \"##嶇\",\n        \"##♦\",\n        \"##♣\",\n        \"##駱\",\n        \"##腮\",\n        \"##斂\",\n        \"##勞\",\n        \"##旁\",\n        \"##榑\",\n        \"##紆\",\n        \"##飄\",\n        \"##烹\",\n        \"##琮\",\n        \"##徃\",\n        \"##碍\",\n        \"##昊\",\n        \"##篁\",\n        \"##擧\",\n        \"##‡\",\n        \"##繞\",\n        \"##‐\",\n        \"##蹤\",\n        \"##濛\",\n        \"##莧\",\n        \"##禧\",\n        \"##墉\",\n        \"##褸\",\n        \"##閥\",\n        \"##◆\",\n        \"##遏\",\n        \"##韮\",\n        \"##鈷\",\n        \"##葩\",\n        \"##悼\",\n        \"##侮\",\n        \"##窒\",\n        \"##頰\",\n        \"##葎\",\n        \"##砌\",\n        \"##闔\",\n        \"##槿\",\n        \"##憊\",\n        \"##蟎\",\n        \"##侃\",\n        \"##錘\",\n        \"##煽\",\n        \"##莊\",\n        \"##偉\",\n        \"##殊\",\n        \"##桿\",\n        \"##巒\",\n        \"##儁\",\n        \"##圻\",\n        \"##峴\",\n        \"##崧\",\n        \"##剰\",\n        \"##滋\",\n        \"##肯\",\n        \"##諺\",\n        \"##晝\",\n        \"##闥\",\n        \"##鳶\",\n        \"##隱\",\n        \"##痞\",\n        \"##恪\",\n        \"##慙\",\n        \"##浣\",\n        \"##蜻\",\n        \"##顰\",\n        \"##稷\",\n        \"##倚\",\n        \"##蔘\",\n        \"##虹\",\n        \"##懦\",\n        \"##翦\",\n        \"##砺\",\n        \"##歿\",\n        \"##欝\",\n        \"##⓷\",\n        \"##❹\",\n        \"##❺\",\n        \"##几\",\n        \"##燁\",\n        \"##縱\",\n        \"##湫\",\n        \"##艚\",\n        \"##仗\",\n        \"##麓\",\n        \"##或\",\n        \"##騏\",\n        \"##泌\",\n        \"##冽\",\n        \"##巎\",\n        \"##袁\",\n        \"##沁\",\n        \"##礎\",\n        \"##冢\",\n        \"##億\",\n        \"##竟\",\n        \"##鰓\",\n        \"##芿\",\n        \"##渟\",\n        \"##悳\",\n        \"##菟\",\n        \"##擅\",\n        \"##漪\",\n        \"##癬\",\n        \"##簣\",\n        \"##凹\",\n        \"##泄\",\n        \"##錕\",\n        \"##§\",\n        \"##蠻\",\n        \"##褓\",\n        \"##簽\",\n        \"##努\",\n        \"##慳\",\n        \"##鰆\",\n        \"##跑\",\n        \"##祿\",\n        \"##粹\",\n        \"##閾\",\n        \"##衙\",\n        \"##孛\",\n        \"##匝\",\n        \"##个\",\n        \"##椋\",\n        \"##搭\",\n        \"##菰\",\n        \"##壕\",\n        \"##妁\",\n        \"##鈿\",\n        \"##蜥\",\n        \"##蜴\",\n        \"##滬\",\n        \"##◯\",\n        \"##嗽\",\n        \"##憺\",\n        \"##楮\",\n        \"##淚\",\n        \"##韞\",\n        \"##姚\",\n        \"##覯\",\n        \"##閇\",\n        \"##閨\",\n        \"##禱\",\n        \"##楷\",\n        \"##珪\",\n        \"##隼\",\n        \"##≪\",\n        \"##招\",\n        \"##凰\",\n        \"##涛\",\n        \"##薊\",\n        \"##跪\",\n        \"##詐\",\n        \"##樺\",\n        \"##妊\",\n        \"##稀\",\n        \"##惟\",\n        \"##諡\",\n        \"##穽\",\n        \"##倅\",\n        \"##骼\",\n        \"##爰\",\n        \"##嵬\",\n        \"##嶼\",\n        \"##苣\",\n        \"##酎\",\n        \"##拍\",\n        \"##篆\",\n        \"##婪\",\n        \"##藹\",\n        \"##繊\",\n        \"##陋\",\n        \"##蒔\",\n        \"##閤\",\n        \"##笥\",\n        \"##唔\",\n        \"##冒\",\n        \"##齧\",\n        \"##旱\",\n        \"##楂\",\n        \"##曝\",\n        \"##Φ\",\n        \"##償\",\n        \"##煉\",\n        \"##靂\",\n        \"##傪\",\n        \"##咨\",\n        \"##穫\",\n        \"##徊\",\n        \"##雫\",\n        \"##腓\",\n        \"##槃\",\n        \"##侈\",\n        \"##攘\",\n        \"##囘\",\n        \"##潦\",\n        \"##璉\",\n        \"##肄\",\n        \"##螟\",\n        \"##畴\",\n        \"##穣\",\n        \"##驤\",\n        \"##鯉\",\n        \"##哺\",\n        \"##扎\",\n        \"##剄\",\n        \"##笈\",\n        \"##裙\",\n        \"##漑\",\n        \"##纜\",\n        \"##蹊\",\n        \"##駿\",\n        \"##蘿\",\n        \"##姥\",\n        \"##輕\",\n        \"##梭\",\n        \"##抓\",\n        \"##筅\",\n        \"##薺\",\n        \"##愍\",\n        \"##份\",\n        \"##祗\",\n        \"##狃\",\n        \"##洮\",\n        \"##駟\",\n        \"##耆\",\n        \"##∽\",\n        \"##⊿\",\n        \"##逵\",\n        \"##壤\",\n        \"##但\",\n        \"##皆\",\n        \"##駑\",\n        \"##棗\",\n        \"##蠱\",\n        \"##隗\",\n        \"##杣\",\n        \"##沚\",\n        \"##暠\",\n        \"##衢\",\n        \"##疼\",\n        \"##筌\",\n        \"##凸\",\n        \"##冪\",\n        \"##坏\",\n        \"##癭\",\n        \"##姐\",\n        \"##紈\",\n        \"##睹\",\n        \"##傲\",\n        \"##胛\",\n        \"##襴\",\n        \"##剪\",\n        \"##厨\",\n        \"##沂\",\n        \"##殃\",\n        \"##嵋\",\n        \"##捗\",\n        \"##蠃\",\n        \"##錆\",\n        \"##痾\",\n        \"##櫻\",\n        \"##瓷\",\n        \"##壓\",\n        \"##弉\",\n        \"##玅\",\n        \"##嚮\",\n        \"##踵\",\n        \"##詛\",\n        \"##拜\",\n        \"##竺\",\n        \"##冤\",\n        \"##肇\",\n        \"##誰\",\n        \"##毓\",\n        \"##魄\",\n        \"##總\",\n        \"##惔\",\n        \"##馥\",\n        \"##茜\",\n        \"##茘\",\n        \"##騫\",\n        \"##飭\",\n        \"##兔\",\n        \"##彳\",\n        \"##匈\",\n        \"##渙\",\n        \"##堊\",\n        \"##匣\",\n        \"##詡\",\n        \"##郁\",\n        \"##僕\",\n        \"##嚼\",\n        \"##懣\",\n        \"##祈\",\n        \"##袤\",\n        \"##卍\",\n        \"##忱\",\n        \"##毳\",\n        \"##罩\",\n        \"##鋲\",\n        \"##媽\",\n        \"##♭\",\n        \"##瞻\",\n        \"##怩\",\n        \"##秉\",\n        \"##楝\",\n        \"##矯\",\n        \"##涜\",\n        \"##乏\",\n        \"##促\",\n        \"##銜\",\n        \"##竊\",\n        \"##禝\",\n        \"##蔗\",\n        \"##俚\",\n        \"##皺\",\n        \"##窬\",\n        \"##∩\",\n        \"##〃\",\n        \"##殼\",\n        \"##辯\",\n        \"##扼\",\n        \"##罐\",\n        \"##皙\",\n        \"##劻\",\n        \"##鯱\",\n        \"##郢\",\n        \"##汴\",\n        \"##鞨\",\n        \"##姻\",\n        \"##鄲\",\n        \"##舐\",\n        \"##曙\",\n        \"##孺\",\n        \"##珉\",\n        \"##筐\",\n        \"##徭\",\n        \"##軀\",\n        \"##璧\",\n        \"##櫨\",\n        \"##稙\",\n        \"##栂\",\n        \"##翹\",\n        \"##爼\",\n        \"##茲\",\n        \"##珀\",\n        \"##柘\",\n        \"##犢\",\n        \"##諍\",\n        \"##亙\",\n        \"##鎗\",\n        \"##梃\",\n        \"##塢\",\n        \"##娑\",\n        \"##鑽\",\n        \"##磧\",\n        \"##獗\",\n        \"##摸\",\n        \"##蘆\",\n        \"##孕\",\n        \"##俱\",\n        \"##遐\",\n        \"##癧\",\n        \"##⎿\",\n        \"##奘\",\n        \"##贋\",\n        \"##龗\",\n        \"##昺\",\n        \"##榊\",\n        \"##填\",\n        \"##駈\",\n        \"##憩\",\n        \"##翌\",\n        \"##甦\",\n        \"##黜\",\n        \"##詵\",\n        \"##殷\",\n        \"##俑\",\n        \"##氓\",\n        \"##峭\",\n        \"##隘\",\n        \"##赭\",\n        \"##昆\",\n        \"##逞\",\n        \"##辜\",\n        \"##癲\",\n        \"##〝\",\n        \"##榕\",\n        \"##箍\",\n        \"##耐\",\n        \"##壜\",\n        \"##欖\",\n        \"##遜\",\n        \"##蠡\",\n        \"##稽\",\n        \"##孑\",\n        \"##乘\",\n        \"##枡\",\n        \"##灣\",\n        \"##懼\",\n        \"##誘\",\n        \"##虻\",\n        \"##欺\",\n        \"##▷\",\n        \"##◁\",\n        \"##洱\",\n        \"##滄\",\n        \"##抬\",\n        \"##酊\",\n        \"##〘\",\n        \"##〖\",\n        \"##侭\",\n        \"##咬\",\n        \"##撚\",\n        \"##鞠\",\n        \"##癘\",\n        \"##尓\",\n        \"##醇\",\n        \"##沐\",\n        \"##覓\",\n        \"##爭\",\n        \"##嶮\",\n        \"##懃\",\n        \"##≡\",\n        \"##廸\",\n        \"##膣\",\n        \"##駭\",\n        \"##胖\",\n        \"##娶\",\n        \"##儂\",\n        \"##續\",\n        \"##奶\",\n        \"##瓮\",\n        \"##炫\",\n        \"##∥\",\n        \"##牡\",\n        \"##蠣\",\n        \"##拱\",\n        \"##蹕\",\n        \"##絮\",\n        \"##檮\",\n        \"##愷\",\n        \"##倖\",\n        \"##气\",\n        \"##諂\",\n        \"##蓴\",\n        \"##獦\",\n        \"##枇\",\n        \"##痍\",\n        \"##濶\",\n        \"##蹼\",\n        \"##罔\",\n        \"##壯\",\n        \"##仆\",\n        \"##泓\",\n        \"##鸚\",\n        \"##猥\",\n        \"##頴\",\n        \"##遙\",\n        \"##惡\",\n        \"##擺\",\n        \"##濘\",\n        \"##¬\",\n        \"##奧\",\n        \"##洹\",\n        \"##嗾\",\n        \"##裴\",\n        \"##棠\",\n        \"##誄\",\n        \"##耽\",\n        \"##嫉\",\n        \"##愾\",\n        \"##槹\",\n        \"##堝\",\n        \"##嚇\",\n        \"##稻\",\n        \"##鏑\",\n        \"##轢\",\n        \"##轎\",\n        \"##檸\",\n        \"##嚥\",\n        \"##鶫\",\n        \"##擻\",\n        \"##蓂\",\n        \"##盞\",\n        \"##鍑\",\n        \"##勁\",\n        \"##槁\",\n        \"##甌\",\n        \"##邀\",\n        \"##購\",\n        \"##帷\",\n        \"##鑾\",\n        \"##鮪\",\n        \"##冉\",\n        \"##譯\",\n        \"##臍\",\n        \"##檻\",\n        \"##劔\",\n        \"##痲\",\n        \"##瀏\",\n        \"##縹\",\n        \"##仭\",\n        \"##懈\",\n        \"##豈\",\n        \"##茯\",\n        \"##檎\",\n        \"##咯\",\n        \"##互\",\n        \"##琨\",\n        \"##詫\",\n        \"##譽\",\n        \"##蹌\",\n        \"##范\",\n        \"##穵\",\n        \"##芒\",\n        \"##諮\",\n        \"##繍\",\n        \"##駸\",\n        \"##瓚\",\n        \"##罡\",\n        \"##飜\",\n        \"##瑙\",\n        \"##髯\",\n        \"##絆\",\n        \"##諒\",\n        \"##覽\",\n        \"##訥\",\n        \"##贖\",\n        \"##匂\",\n        \"##姪\",\n        \"##梢\",\n        \"##鶿\",\n        \"##兢\",\n        \"##拯\",\n        \"##踠\",\n        \"##柚\",\n        \"##蔔\",\n        \"##讖\",\n        \"##拏\",\n        \"##傕\",\n        \"##荻\",\n        \"##蔦\",\n        \"##坨\",\n        \"##瑁\",\n        \"##淀\",\n        \"##暹\",\n        \"##竇\",\n        \"##趺\",\n        \"##翫\",\n        \"##鞄\",\n        \"##稟\",\n        \"##詈\",\n        \"##鱚\",\n        \"##衿\",\n        \"##鐐\",\n        \"##蠍\",\n        \"##皰\",\n        \"##掉\",\n        \"##毖\",\n        \"##謐\",\n        \"##淨\",\n        \"##雹\",\n        \"##赴\",\n        \"##湃\",\n        \"##鹵\",\n        \"##涓\",\n        \"##蓙\",\n        \"##孁\",\n        \"##埤\",\n        \"##珥\",\n        \"##蠢\",\n        \"##敲\",\n        \"##蘖\",\n        \"##齕\",\n        \"##嬖\",\n        \"##閦\",\n        \"##雌\",\n        \"##塹\",\n        \"##枳\",\n        \"##畢\",\n        \"##誥\",\n        \"##佚\",\n        \"##縻\",\n        \"##拔\",\n        \"##醜\",\n        \"##刄\",\n        \"##呪\",\n        \"##齦\",\n        \"##簃\",\n        \"##攀\",\n        \"##啖\",\n        \"##♡\",\n        \"##械\",\n        \"##蔣\",\n        \"##屢\",\n        \"##黐\",\n        \"##逑\",\n        \"##畏\",\n        \"##渚\",\n        \"##郞\",\n        \"##燦\",\n        \"##效\",\n        \"##拆\",\n        \"##犁\",\n        \"##牋\",\n        \"##枲\",\n        \"##屬\",\n        \"##跎\",\n        \"##騷\",\n        \"##竭\",\n        \"##蔚\",\n        \"##彿\",\n        \"##聃\",\n        \"##淺\",\n        \"##梠\",\n        \"##繩\",\n        \"##捲\",\n        \"##邳\",\n        \"##淼\",\n        \"##嶲\",\n        \"##敎\",\n        \"##匆\",\n        \"##∫\",\n        \"##⊥\",\n        \"##∵\",\n        \"##∪\",\n        \"##荃\",\n        \"##糜\",\n        \"##緊\",\n        \"##篥\",\n        \"##賁\",\n        \"##莚\",\n        \"##擴\",\n        \"##卻\",\n        \"##擂\",\n        \"##蝎\",\n        \"##臏\",\n        \"##芨\",\n        \"##漣\",\n        \"##綜\",\n        \"##盂\",\n        \"##皎\",\n        \"##艟\",\n        \"##荳\",\n        \"##譴\",\n        \"##暻\",\n        \"##猩\",\n        \"##牆\",\n        \"##縟\",\n        \"##淅\",\n        \"##唳\",\n        \"##醺\",\n        \"##鉇\",\n        \"##炸\",\n        \"##搏\",\n        \"##縒\",\n        \"##鏖\",\n        \"##閏\",\n        \"##璜\",\n        \"##逅\",\n        \"##咀\",\n        \"##Ψ\",\n        \"##携\",\n        \"##銑\",\n        \"##藜\",\n        \"##袷\",\n        \"##營\",\n        \"##栱\",\n        \"##貅\",\n        \"##藷\",\n        \"##嚶\",\n        \"##雖\",\n        \"##舍\",\n        \"##灤\",\n        \"##瀞\",\n        \"##鈺\",\n        \"##膊\",\n        \"##暘\",\n        \"##蒾\",\n        \"##批\",\n        \"##戊\",\n        \"##轟\",\n        \"##鋳\",\n        \"##袂\",\n        \"##沮\",\n        \"##憫\",\n        \"##嫋\",\n        \"##歇\",\n        \"##軋\",\n        \"##每\",\n        \"##忩\",\n        \"##泪\",\n        \"##掖\",\n        \"##弭\",\n        \"##鞅\",\n        \"##腴\",\n        \"##斛\",\n        \"##亘\",\n        \"##轆\",\n        \"##齬\",\n        \"##罘\",\n        \"##綻\",\n        \"##魏\",\n        \"##乖\",\n        \"##塒\",\n        \"##穹\",\n        \"##胚\",\n        \"##椏\",\n        \"##踐\",\n        \"##剱\",\n        \"##煦\",\n        \"##嚭\",\n        \"##糾\",\n        \"##儻\",\n        \"##甄\",\n        \"##顏\",\n        \"##訌\",\n        \"##档\",\n        \"##簸\",\n        \"##顗\",\n        \"##雎\",\n        \"##芷\",\n        \"##膺\",\n        \"##攷\",\n        \"##縊\",\n        \"##寐\",\n        \"##咸\",\n        \"##毗\",\n        \"##匹\",\n        \"##燧\",\n        \"##嫂\",\n        \"##嬌\",\n        \"##綵\",\n        \"##唖\",\n        \"##冴\",\n        \"##櫂\",\n        \"##軾\",\n        \"##邁\",\n        \"##滌\",\n        \"##點\",\n        \"##掟\",\n        \"##繃\",\n        \"##瀚\",\n        \"##麴\",\n        \"##腦\",\n        \"##羨\",\n        \"##穰\",\n        \"##驟\",\n        \"##寓\",\n        \"##闢\",\n        \"##飫\",\n        \"##嘖\",\n        \"##桔\",\n        \"##娟\",\n        \"##繆\",\n        \"##鑼\",\n        \"##臑\",\n        \"##瘻\",\n        \"##佻\",\n        \"##抉\",\n        \"##衲\",\n        \"##莽\",\n        \"##鮒\",\n        \"##駮\",\n        \"##窠\",\n        \"##訝\",\n        \"##邙\",\n        \"##蚯\",\n        \"##蚓\",\n        \"##湲\",\n        \"##鋺\",\n        \"##柁\",\n        \"##嵯\",\n        \"##橙\",\n        \"##戔\",\n        \"##豳\",\n        \"##檄\",\n        \"##諗\",\n        \"##盥\",\n        \"##淘\",\n        \"##肱\",\n        \"##歐\",\n        \"##譔\",\n        \"##沛\",\n        \"##榎\",\n        \"##柝\",\n        \"##鰤\",\n        \"##倦\",\n        \"##琊\",\n        \"##筈\",\n        \"##瑕\",\n        \"##妍\",\n        \"##岻\",\n        \"##藉\",\n        \"##綫\",\n        \"##餞\",\n        \"##頗\",\n        \"##駘\",\n        \"##恰\",\n        \"##嬉\",\n        \"##擘\",\n        \"##〒\",\n        \"##搾\",\n        \"##粲\",\n        \"##濕\",\n        \"##豨\",\n        \"##咆\",\n        \"##沒\",\n        \"##鑢\",\n        \"##遽\",\n        \"##縺\",\n        \"##磋\",\n        \"##僉\",\n        \"##腋\",\n        \"##樸\",\n        \"##獵\",\n        \"##弑\",\n        \"##鑚\",\n        \"##珮\",\n        \"##褘\",\n        \"##痂\",\n        \"##鑁\",\n        \"##耄\",\n        \"##丿\",\n        \"##顥\",\n        \"##噌\",\n        \"##萇\",\n        \"##鷀\",\n        \"##黻\",\n        \"##驍\",\n        \"##瑯\",\n        \"##薑\",\n        \"##擢\",\n        \"##羿\",\n        \"##碾\",\n        \"##沽\",\n        \"##鰕\",\n        \"##噶\",\n        \"##遞\",\n        \"##踉\",\n        \"##勣\",\n        \"##廛\",\n        \"##捥\",\n        \"##逮\",\n        \"##錡\",\n        \"##贇\",\n        \"##銹\",\n        \"##掩\",\n        \"##釐\",\n        \"##巢\",\n        \"##捍\",\n        \"##疸\",\n        \"##跛\",\n        \"##盪\",\n        \"##銖\",\n        \"##戲\",\n        \"##軻\",\n        \"##苧\",\n        \"##蹐\",\n        \"##窄\",\n        \"##棕\",\n        \"##墺\",\n        \"##璣\",\n        \"##緘\",\n        \"##蜊\",\n        \"##瑫\",\n        \"##惕\",\n        \"##翡\",\n        \"##靆\",\n        \"##蒿\",\n        \"##腟\",\n        \"##昕\",\n        \"##琲\",\n        \"##喋\",\n        \"##晟\",\n        \"##厘\",\n        \"##昨\",\n        \"##汾\",\n        \"##屁\",\n        \"##眙\",\n        \"##夛\",\n        \"##窕\",\n        \"##趨\",\n        \"##僞\",\n        \"##霰\",\n        \"##參\",\n        \"##莘\",\n        \"##糕\",\n        \"##幫\",\n        \"##烽\",\n        \"##湧\",\n        \"##佶\",\n        \"##皷\",\n        \"##糒\",\n        \"##咒\",\n        \"##邯\",\n        \"##緝\",\n        \"##郝\",\n        \"##畦\",\n        \"##鏢\",\n        \"##噪\",\n        \"##炯\",\n        \"##刳\",\n        \"##狹\",\n        \"##襠\",\n        \"##閒\",\n        \"##驥\",\n        \"##橡\",\n        \"##箆\",\n        \"##儔\",\n        \"##臆\",\n        \"##≒\",\n        \"##柢\",\n        \"##蔲\",\n        \"##訢\",\n        \"##膽\",\n        \"##鎰\",\n        \"##貰\",\n        \"##榔\",\n        \"##紜\",\n        \"##懶\",\n        \"##跏\",\n        \"##桝\",\n        \"##假\",\n        \"##羣\",\n        \"##樞\",\n        \"##蒋\",\n        \"##茵\",\n        \"##柩\",\n        \"##齪\",\n        \"##煜\",\n        \"##雒\",\n        \"##朧\",\n        \"##燹\",\n        \"##姨\",\n        \"##怛\",\n        \"##⇧\",\n        \"##蟄\",\n        \"##蚰\",\n        \"##勰\",\n        \"##謾\",\n        \"##寤\",\n        \"##憬\",\n        \"##蟾\",\n        \"##輊\",\n        \"##辿\",\n        \"##圄\",\n        \"##窗\",\n        \"##悝\",\n        \"##宓\",\n        \"##鮄\",\n        \"##哿\",\n        \"##醫\",\n        \"##种\",\n        \"##澱\",\n        \"##蠖\",\n        \"##禛\",\n        \"##絏\",\n        \"##罅\",\n        \"##騁\",\n        \"##僥\",\n        \"##貶\",\n        \"##菖\",\n        \"##滇\",\n        \"##悉\",\n        \"##蠕\",\n        \"##酘\",\n        \"##鵄\",\n        \"##鳧\",\n        \"##苴\",\n        \"##衽\",\n        \"##梔\",\n        \"##飢\",\n        \"##棰\",\n        \"##狒\",\n        \"##亢\",\n        \"##謫\",\n        \"##陞\",\n        \"##殆\",\n        \"##橿\",\n        \"##輌\",\n        \"##蜩\",\n        \"##濮\",\n        \"##湎\",\n        \"##醋\",\n        \"##鄧\",\n        \"##徧\",\n        \"##輳\",\n        \"##蛭\",\n        \"##菇\",\n        \"##閼\",\n        \"##璫\",\n        \"##隍\",\n        \"##燎\",\n        \"##觴\",\n        \"##扈\",\n        \"##歙\",\n        \"##忸\",\n        \"##蝌\",\n        \"##檢\",\n        \"##喃\",\n        \"##笄\",\n        \"##碌\",\n        \"##拶\",\n        \"##侘\",\n        \"##髀\",\n        \"##黴\",\n        \"##幷\",\n        \"##縢\",\n        \"##祕\",\n        \"##襦\",\n        \"##袢\",\n        \"##黔\",\n        \"##裟\",\n        \"##蚪\",\n        \"##煬\",\n        \"##啜\",\n        \"##洸\",\n        \"##筰\",\n        \"##荊\",\n        \"##淪\",\n        \"##困\",\n        \"##鱇\",\n        \"##蕭\",\n        \"##仿\",\n        \"##∈\",\n        \"##殉\",\n        \"##繡\",\n        \"##埵\",\n        \"##悅\",\n        \"##耘\",\n        \"##鮃\",\n        \"##鑠\",\n        \"##荀\",\n        \"##窿\",\n        \"##厠\",\n        \"##骶\",\n        \"##叮\",\n        \"##貮\",\n        \"##陘\",\n        \"##怜\",\n        \"##鈕\",\n        \"##迩\",\n        \"##鍔\",\n        \"##∂\",\n        \"##晰\",\n        \"##袈\",\n        \"##闖\",\n        \"##灑\",\n        \"##旆\",\n        \"##◎\",\n        \"##〻\",\n        \"##衒\",\n        \"##玘\",\n        \"##鑓\",\n        \"##潯\",\n        \"##跖\",\n        \"##檐\",\n        \"##耿\",\n        \"##獏\",\n        \"##兊\",\n        \"##愿\",\n        \"##¢\",\n        \"##毋\",\n        \"##癈\",\n        \"##沅\",\n        \"##敕\",\n        \"##嫣\",\n        \"##觸\",\n        \"##潴\",\n        \"##旄\",\n        \"##菩\",\n        \"##蟀\",\n        \"##筍\",\n        \"##謔\",\n        \"##鱮\",\n        \"##瘁\",\n        \"##褚\",\n        \"##‰\",\n        \"##稠\",\n        \"##眸\",\n        \"##腱\",\n        \"##聘\",\n        \"##燠\",\n        \"##鸕\",\n        \"##挂\",\n        \"##唹\",\n        \"##沪\",\n        \"##鳰\",\n        \"##鴦\",\n        \"##渭\",\n        \"##爨\",\n        \"##嚀\",\n        \"##豐\",\n        \"##摶\",\n        \"##熄\",\n        \"##阮\",\n        \"##勵\",\n        \"##岌\",\n        \"##眄\",\n        \"##叺\",\n        \"##弋\",\n        \"##賂\",\n        \"##黽\",\n        \"##瘠\",\n        \"##驢\",\n        \"##誑\",\n        \"##寳\",\n        \"##芙\",\n        \"##繝\",\n        \"##緖\",\n        \"##悰\",\n        \"##漳\",\n        \"##屓\",\n        \"##慂\",\n        \"##艘\",\n        \"##逼\",\n        \"##廋\",\n        \"##麭\",\n        \"##栢\",\n        \"##蕗\",\n        \"##儚\",\n        \"##蕈\",\n        \"##鐡\",\n        \"##跟\",\n        \"##喨\",\n        \"##羈\",\n        \"##耋\",\n        \"##醂\",\n        \"##潘\",\n        \"##艙\",\n        \"##刮\",\n        \"##擒\",\n        \"##嫗\",\n        \"##簇\",\n        \"##岷\",\n        \"##憖\",\n        \"##鋩\",\n        \"##貉\",\n        \"##廢\",\n        \"##豕\",\n        \"##瀟\",\n        \"##溂\",\n        \"##瘦\",\n        \"##蚣\",\n        \"##涕\",\n        \"##睢\",\n        \"##适\",\n        \"##◦\",\n        \"##轂\",\n        \"##頎\",\n        \"##珎\",\n        \"##匐\",\n        \"##艷\",\n        \"##偸\",\n        \"##饗\",\n        \"##觜\",\n        \"##頫\",\n        \"##玳\",\n        \"##哮\",\n        \"##爸\",\n        \"##鯥\",\n        \"##蜿\",\n        \"##叶\",\n        \"##鴫\",\n        \"##頁\",\n        \"##儷\",\n        \"##儼\",\n        \"##笋\",\n        \"##覈\",\n        \"##闐\",\n        \"##弌\",\n        \"##婬\",\n        \"##丐\",\n        \"##廚\",\n        \"##鷄\",\n        \"##碇\",\n        \"##孃\",\n        \"##悧\",\n        \"##仝\",\n        \"##黨\",\n        \"##嫩\",\n        \"##褙\",\n        \"##慚\",\n        \"##磚\",\n        \"##繚\",\n        \"##麈\",\n        \"##璈\",\n        \"##渥\",\n        \"##鴬\",\n        \"##囀\",\n        \"##碣\",\n        \"##瀦\",\n        \"##藐\",\n        \"##轤\",\n        \"##闌\",\n        \"##苡\",\n        \"##枋\",\n        \"##較\",\n        \"##垈\",\n        \"##獪\",\n        \"##偈\",\n        \"##洌\",\n        \"いる\",\n        \"する\",\n        \"ある\",\n        \"20\",\n        \"19\",\n        \"から\",\n        \"こと\",\n        \"201\",\n        \"その\",\n        \"れる\",\n        \"なっ\",\n        \"ない\",\n        \"ため\",\n        \"など\",\n        \"200\",\n        \"##ール\",\n        \"この\",\n        \"日本\",\n        \"##ック\",\n        \"##ター\",\n        \"##リー\",\n        \"られ\",\n        \"より\",\n        \"10\",\n        \"##ット\",\n        \"##ング\",\n        \"いう\",\n        \"なる\",\n        \"##ラン\",\n        \"##スト\",\n        \"##ート\",\n        \"あっ\",\n        \"よう\",\n        \"また\",\n        \"あり\",\n        \"もの\",\n        \"まで\",\n        \"##ュー\",\n        \"##ーム\",\n        \"##ード\",\n        \"##ント\",\n        \"18\",\n        \"12\",\n        \"##ティ\",\n        \"##ージ\",\n        \"##ョン\",\n        \"11\",\n        \"199\",\n        \"学校\",\n        \"##ンド\",\n        \"大学\",\n        \"##00\",\n        \"でき\",\n        \"おり\",\n        \"##かっ\",\n        \"これ\",\n        \"##イン\",\n        \"##ース\",\n        \"##ディ\",\n        \"よる\",\n        \"##リア\",\n        \"##er\",\n        \"放送\",\n        \"それ\",\n        \"198\",\n        \"昭和\",\n        \"よっ\",\n        \"##ップ\",\n        \"##ション\",\n        \"##ーク\",\n        \"プロ\",\n        \"##リカ\",\n        \"##ーズ\",\n        \"##する\",\n        \"##ーン\",\n        \"15\",\n        \"アル\",\n        \"受け\",\n        \"##イト\",\n        \"197\",\n        \"だっ\",\n        \"なく\",\n        \"現在\",\n        \"英語\",\n        \"なり\",\n        \"##on\",\n        \"東京\",\n        \"しか\",\n        \"202\",\n        \"##バー\",\n        \"アメ\",\n        \"キャ\",\n        \"世界\",\n        \"17\",\n        \"##in\",\n        \"アメリカ\",\n        \"場合\",\n        \"##える\",\n        \"なかっ\",\n        \"時代\",\n        \"16\",\n        \"つい\",\n        \"##an\",\n        \"使用\",\n        \"会社\",\n        \"ファ\",\n        \"196\",\n        \"テレ\",\n        \"できる\",\n        \"平成\",\n        \"登場\",\n        \"おい\",\n        \"##レー\",\n        \"##ープ\",\n        \"られる\",\n        \"行わ\",\n        \"イン\",\n        \"コン\",\n        \"選手\",\n        \"##ライ\",\n        \"テレビ\",\n        \"##ラー\",\n        \"研究\",\n        \"ジャ\",\n        \"13\",\n        \"##ar\",\n        \"しかし\",\n        \"##める\",\n        \"作品\",\n        \"##しい\",\n        \"##ンス\",\n        \"14\",\n        \"ライ\",\n        \"30\",\n        \"##リス\",\n        \"194\",\n        \"195\",\n        \"##en\",\n        \"##ッド\",\n        \"番組\",\n        \"##リン\",\n        \"##or\",\n        \"可能\",\n        \"たち\",\n        \"発売\",\n        \"##ンジ\",\n        \"存在\",\n        \"##イル\",\n        \"多く\",\n        \"映画\",\n        \"とも\",\n        \"開始\",\n        \"##ランド\",\n        \"活動\",\n        \"##カー\",\n        \"##ルト\",\n        \"リー\",\n        \"クラ\",\n        \"##ナー\",\n        \"およ\",\n        \"##ーマ\",\n        \"同じ\",\n        \"##ンク\",\n        \"のみ\",\n        \"当時\",\n        \"##at\",\n        \"フラン\",\n        \"ページ\",\n        \"チャ\",\n        \"##al\",\n        \"##れる\",\n        \"25\",\n        \"フィ\",\n        \"および\",\n        \"バス\",\n        \"しま\",\n        \"対し\",\n        \"呼ば\",\n        \"明治\",\n        \"発表\",\n        \"にて\",\n        \"##シュ\",\n        \"鉄道\",\n        \"一部\",\n        \"チーム\",\n        \"21\",\n        \"##es\",\n        \"スタ\",\n        \"時間\",\n        \"##ダー\",\n        \"##ックス\",\n        \"タイ\",\n        \"行っ\",\n        \"代表\",\n        \"大き\",\n        \"##ニア\",\n        \"ディ\",\n        \"開発\",\n        \"ゲーム\",\n        \"22\",\n        \"取り\",\n        \"開催\",\n        \"##ける\",\n        \"出演\",\n        \"##シア\",\n        \"同年\",\n        \"なお\",\n        \"##リーズ\",\n        \"##ic\",\n        \"アルバ\",\n        \"ドラ\",\n        \"##イツ\",\n        \"オー\",\n        \"以降\",\n        \"大会\",\n        \"地域\",\n        \"193\",\n        \"スト\",\n        \"変更\",\n        \"ニュー\",\n        \"24\",\n        \"参加\",\n        \"関係\",\n        \"フォ\",\n        \"持つ\",\n        \"##シャ\",\n        \"##ステ\",\n        \"だけ\",\n        \"アイ\",\n        \"##がら\",\n        \"さら\",\n        \"23\",\n        \"##ナル\",\n        \"出場\",\n        \"##it\",\n        \"##レイ\",\n        \"シリーズ\",\n        \"試合\",\n        \"おけ\",\n        \"以下\",\n        \"所属\",\n        \"用い\",\n        \"担当\",\n        \"##ンター\",\n        \"たり\",\n        \"##オン\",\n        \"せる\",\n        \"アルバム\",\n        \"自分\",\n        \"##ロー\",\n        \"記録\",\n        \"ドイツ\",\n        \"ながら\",\n        \"##クター\",\n        \"いっ\",\n        \"##ッチ\",\n        \"以上\",\n        \"設置\",\n        \"##is\",\n        \"##サー\",\n        \"利用\",\n        \"中国\",\n        \"コー\",\n        \"さらに\",\n        \"音楽\",\n        \"中心\",\n        \"##ーズン\",\n        \"192\",\n        \"フランス\",\n        \"##ニー\",\n        \"自身\",\n        \"株式\",\n        \"シーズン\",\n        \"事業\",\n        \"国際\",\n        \"出身\",\n        \"大阪\",\n        \"リーグ\",\n        \"##ャー\",\n        \"##ウン\",\n        \"かつ\",\n        \"##クト\",\n        \"なら\",\n        \"26\",\n        \"引き\",\n        \"一般\",\n        \"28\",\n        \"##ンバー\",\n        \"考え\",\n        \"監督\",\n        \"2010\",\n        \"多い\",\n        \"ステ\",\n        \"##しく\",\n        \"##ょう\",\n        \"生ま\",\n        \"##ブル\",\n        \"攻撃\",\n        \"異な\",\n        \"アン\",\n        \"27\",\n        \"人物\",\n        \"行う\",\n        \"##フィ\",\n        \"ウィ\",\n        \"##ビュー\",\n        \"優勝\",\n        \"かけ\",\n        \"女性\",\n        \"委員\",\n        \"グル\",\n        \"収録\",\n        \"##ングル\",\n        \"アニ\",\n        \"##el\",\n        \"サン\",\n        \"高等\",\n        \"31\",\n        \"卒業\",\n        \"##ーツ\",\n        \"務め\",\n        \"必要\",\n        \"##ソン\",\n        \"フェ\",\n        \"中央\",\n        \"29\",\n        \"2011\",\n        \"文化\",\n        \"知ら\",\n        \"##デル\",\n        \"##ジオ\",\n        \"教育\",\n        \"2009\",\n        \"2012\",\n        \"マン\",\n        \"社会\",\n        \"##ベル\",\n        \"##パー\",\n        \"ジェ\",\n        \"設立\",\n        \"情報\",\n        \"スペ\",\n        \"2008\",\n        \"##スタ\",\n        \"##まり\",\n        \"##ウス\",\n        \"問題\",\n        \"2007\",\n        \"意味\",\n        \"##he\",\n        \"事件\",\n        \"##レス\",\n        \"##le\",\n        \"ジョ\",\n        \"地方\",\n        \"##ファ\",\n        \"2014\",\n        \"サー\",\n        \"通り\",\n        \"2015\",\n        \"##めて\",\n        \"位置\",\n        \"うち\",\n        \"イギ\",\n        \"##フト\",\n        \"##フォ\",\n        \"ほか\",\n        \"2013\",\n        \"シングル\",\n        \"2016\",\n        \"イギリス\",\n        \"##ou\",\n        \"いく\",\n        \"都市\",\n        \"##ion\",\n        \"##ネル\",\n        \"##マン\",\n        \"ブラ\",\n        \"2019\",\n        \"自動\",\n        \"アニメ\",\n        \"2017\",\n        \"キャラ\",\n        \"##ールド\",\n        \"##上げ\",\n        \"##ーション\",\n        \"##さい\",\n        \"2018\",\n        \"##して\",\n        \"影響\",\n        \"結果\",\n        \"計画\",\n        \"ただ\",\n        \"##as\",\n        \"ほど\",\n        \"2006\",\n        \"同様\",\n        \"2020\",\n        \"高校\",\n        \"最終\",\n        \"191\",\n        \"終了\",\n        \"世紀\",\n        \"とき\",\n        \"##ol\",\n        \"##わっ\",\n        \"##ラス\",\n        \"ウェ\",\n        \"##わり\",\n        \"サイ\",\n        \"戦争\",\n        \"##ータ\",\n        \"ショ\",\n        \"最初\",\n        \"販売\",\n        \"当初\",\n        \"シャ\",\n        \"##ヴァ\",\n        \"##ッカー\",\n        \"場所\",\n        \"##ヴィ\",\n        \"##ウェ\",\n        \"ラン\",\n        \"グループ\",\n        \"##ころ\",\n        \"獲得\",\n        \"選挙\",\n        \"一方\",\n        \"##ロン\",\n        \"作曲\",\n        \"メンバー\",\n        \"生まれ\",\n        \"100\",\n        \"及び\",\n        \"##よう\",\n        \"建設\",\n        \"センター\",\n        \"2021\",\n        \"##om\",\n        \"##キー\",\n        \"一覧\",\n        \"km\",\n        \"制作\",\n        \"##ーター\",\n        \"部分\",\n        \"アー\",\n        \"そして\",\n        \"##ンタ\",\n        \"##ジア\",\n        \"人間\",\n        \"政府\",\n        \"スター\",\n        \"地区\",\n        \"##わせ\",\n        \"2005\",\n        \"##まっ\",\n        \"かつて\",\n        \"##re\",\n        \"最後\",\n        \"発生\",\n        \"以外\",\n        \"機関\",\n        \"リンク\",\n        \"状態\",\n        \"特に\",\n        \"2000\",\n        \"彼女\",\n        \"関する\",\n        \"##ステム\",\n        \"技術\",\n        \"調査\",\n        \"##リング\",\n        \"年間\",\n        \"##am\",\n        \"経済\",\n        \"就任\",\n        \"スポ\",\n        \"まま\",\n        \"全国\",\n        \"システム\",\n        \"廃止\",\n        \"##カル\",\n        \"##ぞれ\",\n        \"##スター\",\n        \"##メント\",\n        \"持ち\",\n        \"それぞれ\",\n        \"施設\",\n        \"デビュー\",\n        \"50\",\n        \"政治\",\n        \"ところ\",\n        \"決定\",\n        \"契約\",\n        \"野球\",\n        \"公開\",\n        \"##il\",\n        \"##et\",\n        \"マイ\",\n        \"モデル\",\n        \"教授\",\n        \"ブル\",\n        \"年度\",\n        \"異なる\",\n        \"記念\",\n        \"航空\",\n        \"しまう\",\n        \"##レン\",\n        \"##イス\",\n        \"##ッシュ\",\n        \"キャラクター\",\n        \"向け\",\n        \"ます\",\n        \"##ac\",\n        \"ロシア\",\n        \"主義\",\n        \"女子\",\n        \"歴史\",\n        \"40\",\n        \"##アン\",\n        \"構成\",\n        \"##us\",\n        \"オリ\",\n        \"##ro\",\n        \"##ラム\",\n        \"持っ\",\n        \"名前\",\n        \"実施\",\n        \"合衆\",\n        \"戦闘\",\n        \"##ケット\",\n        \"ヴァ\",\n        \"##ビー\",\n        \"複数\",\n        \"京都\",\n        \"チェ\",\n        \"路線\",\n        \"2004\",\n        \"##ザー\",\n        \"##ジェ\",\n        \"議員\",\n        \"ただし\",\n        \"管理\",\n        \"##イド\",\n        \"同時\",\n        \"##デン\",\n        \"デザ\",\n        \"たい\",\n        \"製造\",\n        \"全て\",\n        \"能力\",\n        \"高い\",\n        \"相手\",\n        \"入り\",\n        \"です\",\n        \"さん\",\n        \"設定\",\n        \"##シー\",\n        \"こう\",\n        \"##テン\",\n        \"##フェ\",\n        \"カー\",\n        \"190\",\n        \"ドラマ\",\n        \"初めて\",\n        \"2022\",\n        \"スー\",\n        \"記事\",\n        \"##ルス\",\n        \"本作\",\n        \"生活\",\n        \"採用\",\n        \"果た\",\n        \"組織\",\n        \"対する\",\n        \"機能\",\n        \"ホーム\",\n        \"車両\",\n        \"##つけ\",\n        \"指定\",\n        \"最も\",\n        \"ダイ\",\n        \"特別\",\n        \"運行\",\n        \"起こ\",\n        \"##替え\",\n        \"リリー\",\n        \"帝国\",\n        \"##エル\",\n        \"##ing\",\n        \"列車\",\n        \"戦い\",\n        \"公式\",\n        \"目的\",\n        \"あた\",\n        \"合併\",\n        \"##リスト\",\n        \"##出し\",\n        \"ロー\",\n        \"エンジ\",\n        \"受賞\",\n        \"丁目\",\n        \"##ートル\",\n        \"ヴィ\",\n        \"##海道\",\n        \"シュ\",\n        \"ベル\",\n        \"通常\",\n        \"##ーロ\",\n        \"名称\",\n        \"##ビス\",\n        \"ライブ\",\n        \"##んど\",\n        \"##ろう\",\n        \"イタ\",\n        \"出版\",\n        \"出来\",\n        \"勝利\",\n        \"クロ\",\n        \"始め\",\n        \"IS\",\n        \"サッカー\",\n        \"道路\",\n        \"協会\",\n        \"##ンプ\",\n        \"##スク\",\n        \"企業\",\n        \"最大\",\n        \"トラ\",\n        \"##かり\",\n        \"生産\",\n        \"##ンチ\",\n        \"与え\",\n        \"科学\",\n        \"リリース\",\n        \"共和\",\n        \"2003\",\n        \"##ンダ\",\n        \"##リオ\",\n        \"対応\",\n        \"たら\",\n        \"##ッツ\",\n        \"結婚\",\n        \"##クション\",\n        \"クラブ\",\n        \"交通\",\n        \"ラジオ\",\n        \"部隊\",\n        \"そこ\",\n        \"コミ\",\n        \"続け\",\n        \"事務\",\n        \"最高\",\n        \"漫画\",\n        \"使わ\",\n        \"##ーナ\",\n        \"00\",\n        \"含む\",\n        \"イタリア\",\n        \"##タル\",\n        \"少な\",\n        \"##ER\",\n        \"##ンガ\",\n        \"189\",\n        \"188\",\n        \"##ニング\",\n        \"パー\",\n        \"警察\",\n        \"伴い\",\n        \"##わる\",\n        \"自由\",\n        \"ハイ\",\n        \"##ch\",\n        \"公園\",\n        \"運動\",\n        \"海軍\",\n        \"##ディング\",\n        \"##コン\",\n        \"営業\",\n        \"大きな\",\n        \"製作\",\n        \"アナ\",\n        \"マル\",\n        \"もっ\",\n        \"カード\",\n        \"総合\",\n        \"独立\",\n        \"完成\",\n        \"搭載\",\n        \"一人\",\n        \"デザイン\",\n        \"予定\",\n        \"##アー\",\n        \"近い\",\n        \"時期\",\n        \"主人\",\n        \"運転\",\n        \"2002\",\n        \"時点\",\n        \"主に\",\n        \"基本\",\n        \"バイ\",\n        \"##イトル\",\n        \"##アル\",\n        \"バンド\",\n        \"提供\",\n        \"プレイ\",\n        \"##ter\",\n        \"移籍\",\n        \"ほと\",\n        \"ユニ\",\n        \"2001\",\n        \"##テル\",\n        \"発見\",\n        \"##モン\",\n        \"大正\",\n        \"北海道\",\n        \"江戸\",\n        \"##ッパ\",\n        \"サービス\",\n        \"ティ\",\n        \"以前\",\n        \"成功\",\n        \"内容\",\n        \"##かけ\",\n        \"飛行\",\n        \"人口\",\n        \"マー\",\n        \"新聞\",\n        \"実際\",\n        \"##AN\",\n        \"##チャ\",\n        \"経営\",\n        \"宇宙\",\n        \"##ルフ\",\n        \"加え\",\n        \"ほとんど\",\n        \"完全\",\n        \"チャン\",\n        \"JR\",\n        \"特徴\",\n        \"ミュー\",\n        \"ジュ\",\n        \"期間\",\n        \"専門\",\n        \"カップ\",\n        \"重要\",\n        \"活躍\",\n        \"理由\",\n        \"評価\",\n        \"タイトル\",\n        \"##ッグ\",\n        \"ウォ\",\n        \"小説\",\n        \"##がっ\",\n        \"##ヤー\",\n        \"神社\",\n        \"バー\",\n        \"運営\",\n        \"レー\",\n        \"##ay\",\n        \"自ら\",\n        \"ソフト\",\n        \"プレ\",\n        \"##ed\",\n        \"述べ\",\n        \"##ビア\",\n        \"連続\",\n        \"000\",\n        \"挙げ\",\n        \"編成\",\n        \"企画\",\n        \"##ディア\",\n        \"決勝\",\n        \"エンジン\",\n        \"35\",\n        \"インター\",\n        \"入っ\",\n        \"ビル\",\n        \"イベ\",\n        \"作詞\",\n        \"いわ\",\n        \"撮影\",\n        \"オープ\",\n        \"187\",\n        \"様々\",\n        \"##リック\",\n        \"対象\",\n        \"再び\",\n        \"構造\",\n        \"導入\",\n        \"##ad\",\n        \"子供\",\n        \"##付け\",\n        \"スポーツ\",\n        \"新た\",\n        \"##ギー\",\n        \"ネット\",\n        \"##ティー\",\n        \"1990\",\n        \"行動\",\n        \"##nd\",\n        \"初期\",\n        \"支援\",\n        \"すべ\",\n        \"連合\",\n        \"性格\",\n        \"of\",\n        \"参照\",\n        \"##ワー\",\n        \"指導\",\n        \"病院\",\n        \"##ig\",\n        \"スーパー\",\n        \"イベント\",\n        \"設計\",\n        \"##id\",\n        \"しまっ\",\n        \"すべて\",\n        \"認め\",\n        \"ファン\",\n        \"よく\",\n        \"開業\",\n        \"ライン\",\n        \"##古屋\",\n        \"##IN\",\n        \"スク\",\n        \"もと\",\n        \"楽曲\",\n        \"付け\",\n        \"人気\",\n        \"データ\",\n        \"文字\",\n        \"名古屋\",\n        \"言わ\",\n        \"改称\",\n        \"ちゃ\",\n        \"##まる\",\n        \"規模\",\n        \"とっ\",\n        \"##クス\",\n        \"レース\",\n        \"そう\",\n        \"##ピック\",\n        \"表記\",\n        \"45\",\n        \"##タン\",\n        \"不明\",\n        \"移動\",\n        \"法人\",\n        \"##000\",\n        \"以来\",\n        \"紹介\",\n        \"##ーカー\",\n        \"指揮\",\n        \"案内\",\n        \"1999\",\n        \"非常\",\n        \"男性\",\n        \"##バル\",\n        \"配信\",\n        \"##ミー\",\n        \"大きく\",\n        \"展開\",\n        \"ブロ\",\n        \"環境\",\n        \"工業\",\n        \"国家\",\n        \"ひと\",\n        \"##ur\",\n        \"追加\",\n        \"関連\",\n        \"下さい\",\n        \"ボー\",\n        \"共同\",\n        \"団体\",\n        \"ミュージ\",\n        \"物語\",\n        \"##プリ\",\n        \"##ot\",\n        \"##os\",\n        \"労働\",\n        \"##ation\",\n        \"教会\",\n        \"##ent\",\n        \"##入れ\",\n        \"レコ\",\n        \"##リンピック\",\n        \"##トル\",\n        \"国民\",\n        \"結成\",\n        \"ここ\",\n        \"議会\",\n        \"フリー\",\n        \"プラ\",\n        \"舞台\",\n        \"番号\",\n        \"程度\",\n        \"##BN\",\n        \"グラ\",\n        \"テーマ\",\n        \"ジョン\",\n        \"##ッジ\",\n        \"のち\",\n        \"項目\",\n        \"クラス\",\n        \"##ON\",\n        \"##わら\",\n        \"回避\",\n        \"cm\",\n        \"競技\",\n        \"限定\",\n        \"##ゅう\",\n        \"工場\",\n        \"レイ\",\n        \"変化\",\n        \"果たし\",\n        \"由来\",\n        \"CD\",\n        \"##ストラ\",\n        \"文学\",\n        \"広島\",\n        \"ISBN\",\n        \"会議\",\n        \"死去\",\n        \"銀行\",\n        \"写真\",\n        \"32\",\n        \"##AR\",\n        \"電気\",\n        \"##ンパ\",\n        \"表示\",\n        \"カル\",\n        \"候補\",\n        \"mm\",\n        \"距離\",\n        \"装備\",\n        \"美術\",\n        \"St\",\n        \"##らか\",\n        \"全体\",\n        \"会長\",\n        \"60\",\n        \"多数\",\n        \"##込ん\",\n        \"##ボール\",\n        \"インド\",\n        \"ドル\",\n        \"探し\",\n        \"方法\",\n        \"##um\",\n        \"過去\",\n        \"##じめ\",\n        \"サイト\",\n        \"##キング\",\n        \"1998\",\n        \"アレ\",\n        \"コーナー\",\n        \"国道\",\n        \"1980\",\n        \"息子\",\n        \"天皇\",\n        \"一番\",\n        \"いず\",\n        \"##じる\",\n        \"##シャル\",\n        \"言葉\",\n        \"The\",\n        \"NH\",\n        \"思い\",\n        \"学園\",\n        \"演奏\",\n        \"大統\",\n        \"大統領\",\n        \"ヨーロ\",\n        \"##マー\",\n        \"試験\",\n        \"アク\",\n        \"社長\",\n        \"##ウンド\",\n        \"##らし\",\n        \"連邦\",\n        \"乗り\",\n        \"ローマ\",\n        \"建築\",\n        \"裁判\",\n        \"福岡\",\n        \"ヨーロッパ\",\n        \"韓国\",\n        \"登録\",\n        \"県道\",\n        \"ぶり\",\n        \"##込み\",\n        \"オリジ\",\n        \"選ん\",\n        \"地下\",\n        \"##ウム\",\n        \"##iv\",\n        \"少年\",\n        \"##ッセ\",\n        \"引退\",\n        \"強い\",\n        \"打ち\",\n        \"空港\",\n        \"地球\",\n        \"入れ\",\n        \"横浜\",\n        \"##ルド\",\n        \"事故\",\n        \"##ir\",\n        \"スペイン\",\n        \"協力\",\n        \"支配\",\n        \"適切\",\n        \"見せ\",\n        \"国内\",\n        \"作戦\",\n        \"どう\",\n        \"##ag\",\n        \"ユー\",\n        \"周辺\",\n        \"##けれ\",\n        \"統合\",\n        \"1997\",\n        \"有する\",\n        \"ワールド\",\n        \"くる\",\n        \"自治\",\n        \"オリジナル\",\n        \"仕事\",\n        \"立ち\",\n        \"発行\",\n        \"ほぼ\",\n        \"48\",\n        \"区間\",\n        \"見つけ\",\n        \"自然\",\n        \"オリンピック\",\n        \"##ドル\",\n        \"##り替え\",\n        \"行い\",\n        \"陸軍\",\n        \"##チェ\",\n        \"NHK\",\n        \"基づ\",\n        \"高速\",\n        \"整備\",\n        \"##BS\",\n        \"##ギュ\",\n        \"民主\",\n        \"##込ま\",\n        \"対戦\",\n        \"##いは\",\n        \"経験\",\n        \"##リエ\",\n        \"1996\",\n        \"工事\",\n        \"初代\",\n        \"形式\",\n        \"アジア\",\n        \"通信\",\n        \"##ow\",\n        \"映像\",\n        \"アップ\",\n        \"ロック\",\n        \"いずれ\",\n        \"##ショ\",\n        \"##イズ\",\n        \"##ジー\",\n        \"主張\",\n        \"べき\",\n        \"##ヴェ\",\n        \"##メージ\",\n        \"エン\",\n        \"##太郎\",\n        \"状況\",\n        \"ホール\",\n        \"しよう\",\n        \"##んな\",\n        \"大戦\",\n        \"1995\",\n        \"誕生\",\n        \"朝鮮\",\n        \"大臣\",\n        \"掲載\",\n        \"##げる\",\n        \"組み\",\n        \"含ま\",\n        \"ター\",\n        \"劇場\",\n        \"36\",\n        \"##ec\",\n        \"トン\",\n        \"確認\",\n        \"移転\",\n        \"学生\",\n        \"ちゃん\",\n        \"使っ\",\n        \"効果\",\n        \"少女\",\n        \"##シン\",\n        \"##78\",\n        \"##なり\",\n        \"同じく\",\n        \"装置\",\n        \"好き\",\n        \"わた\",\n        \"33\",\n        \"1970\",\n        \"報告\",\n        \"動物\",\n        \"曖昧\",\n        \"表現\",\n        \"ベース\",\n        \"##なっ\",\n        \"II\",\n        \"産業\",\n        \"あるいは\",\n        \"発足\",\n        \"タイム\",\n        \"原作\",\n        \"##デュー\",\n        \"専用\",\n        \"##ネス\",\n        \"部門\",\n        \"普通\",\n        \"元年\",\n        \"ハー\",\n        \"運用\",\n        \"##ガー\",\n        \"1994\",\n        \"エル\",\n        \"取得\",\n        \"シェ\",\n        \"##im\",\n        \"種類\",\n        \"生徒\",\n        \"破壊\",\n        \"本部\",\n        \"方面\",\n        \"ニュース\",\n        \"出し\",\n        \"形成\",\n        \"人々\",\n        \"##かる\",\n        \"千葉\",\n        \"なけれ\",\n        \"生き\",\n        \"##ゴン\",\n        \"唯一\",\n        \"トップ\",\n        \"##ia\",\n        \"新しい\",\n        \"繰り\",\n        \"死亡\",\n        \"メートル\",\n        \"1993\",\n        \"##em\",\n        \"受ける\",\n        \"制度\",\n        \"家族\",\n        \"##レーション\",\n        \"186\",\n        \"ニューヨ\",\n        \"##un\",\n        \"個人\",\n        \"成立\",\n        \"モン\",\n        \"ステージ\",\n        \"輸送\",\n        \"ヴェ\",\n        \"##ジャー\",\n        \"比較\",\n        \"ニューヨーク\",\n        \"編集\",\n        \"プロデュー\",\n        \"##st\",\n        \"行政\",\n        \"タイプ\",\n        \"合わせ\",\n        \"やす\",\n        \"付近\",\n        \"##イント\",\n        \"ファイ\",\n        \"##AS\",\n        \"1992\",\n        \"FC\",\n        \"地名\",\n        \"途中\",\n        \"##ウト\",\n        \"##ジャ\",\n        \"スピ\",\n        \"郵便\",\n        \"保護\",\n        \"ごと\",\n        \"反対\",\n        \"勝ち\",\n        \"選出\",\n        \"業務\",\n        \"王国\",\n        \"県立\",\n        \"現代\",\n        \"アフ\",\n        \"条件\",\n        \"##ネット\",\n        \"正式\",\n        \"##えば\",\n        \"朝日\",\n        \"フレ\",\n        \"##AT\",\n        \"系統\",\n        \"入る\",\n        \"##od\",\n        \"##スコ\",\n        \"34\",\n        \"IC\",\n        \"近く\",\n        \"いい\",\n        \"##ティング\",\n        \"##パン\",\n        \"図書\",\n        \"拡大\",\n        \"用語\",\n        \"プレー\",\n        \"付き\",\n        \"博士\",\n        \"オープン\",\n        \"復帰\",\n        \"##ルム\",\n        \"1991\",\n        \"発展\",\n        \"##OR\",\n        \"##ばし\",\n        \"成績\",\n        \"続い\",\n        \"競馬\",\n        \"スカ\",\n        \"主要\",\n        \"ゴール\",\n        \"##ッション\",\n        \"##ap\",\n        \"編曲\",\n        \"##ut\",\n        \"クレ\",\n        \"公演\",\n        \"##サン\",\n        \"開設\",\n        \"##ちら\",\n        \"##クロ\",\n        \"以後\",\n        \"バージ\",\n        \"呼び\",\n        \"追い\",\n        \"中継\",\n        \"1989\",\n        \"##ダル\",\n        \"55\",\n        \"店舗\",\n        \"フル\",\n        \"求め\",\n        \"周年\",\n        \"38\",\n        \"##ラル\",\n        \"##ーリー\",\n        \"描か\",\n        \"料理\",\n        \"ベスト\",\n        \"直接\",\n        \"本人\",\n        \"コース\",\n        \"##リティ\",\n        \"観光\",\n        \"500\",\n        \"方向\",\n        \"##ントン\",\n        \"分類\",\n        \"父親\",\n        \"芸術\",\n        \"1987\",\n        \"フロ\",\n        \"##ポート\",\n        \"オン\",\n        \"方式\",\n        \"取締\",\n        \"国立\",\n        \"きっ\",\n        \"はじめ\",\n        \"目指\",\n        \"##デオ\",\n        \"##セン\",\n        \"後半\",\n        \"In\",\n        \"##がる\",\n        \"##ジェクト\",\n        \"本社\",\n        \"連載\",\n        \"愛知\",\n        \"務める\",\n        \"食べ\",\n        \"もう\",\n        \"スタジオ\",\n        \"言う\",\n        \"アド\",\n        \"##プト\",\n        \"水先\",\n        \"1988\",\n        \"張り替え\",\n        \"##ズム\",\n        \"男子\",\n        \"生物\",\n        \"##ul\",\n        \"Ch\",\n        \"迎え\",\n        \"含め\",\n        \"##リーン\",\n        \"魔法\",\n        \"九州\",\n        \"武器\",\n        \"カナ\",\n        \"細胞\",\n        \"電話\",\n        \"スコ\",\n        \"つけ\",\n        \"##かし\",\n        \"##キシ\",\n        \"メイン\",\n        \"所在\",\n        \"当た\",\n        \"オブ\",\n        \"俳優\",\n        \"80\",\n        \"施行\",\n        \"有名\",\n        \"選ば\",\n        \"シン\",\n        \"##合わせ\",\n        \"つつ\",\n        \"パイ\",\n        \"言語\",\n        \"使い\",\n        \"選択\",\n        \"よれ\",\n        \"地元\",\n        \"デジ\",\n        \"##oc\",\n        \"批判\",\n        \"平均\",\n        \"精神\",\n        \"雑誌\",\n        \"##ub\",\n        \"大型\",\n        \"カリ\",\n        \"作ら\",\n        \"41\",\n        \"##こう\",\n        \"ガン\",\n        \"流れ\",\n        \"率い\",\n        \"##and\",\n        \"コロ\",\n        \"特定\",\n        \"市民\",\n        \"示す\",\n        \"##ールズ\",\n        \"進出\",\n        \"事実\",\n        \"ジャン\",\n        \"支持\",\n        \"ツアー\",\n        \"被害\",\n        \"行き\",\n        \"南部\",\n        \"42\",\n        \"バル\",\n        \"新潟\",\n        \"##チュ\",\n        \"##キュ\",\n        \"37\",\n        \"関し\",\n        \"ギャ\",\n        \"編入\",\n        \"##がり\",\n        \"地上\",\n        \"アカ\",\n        \"人民\",\n        \"組合\",\n        \"司令\",\n        \"##ンドン\",\n        \"ピア\",\n        \"作家\",\n        \"ワン\",\n        \"##ES\",\n        \"安全\",\n        \"プログ\",\n        \"##BC\",\n        \"加入\",\n        \"イス\",\n        \"すぐ\",\n        \"翌年\",\n        \"神戸\",\n        \"##らい\",\n        \"やっ\",\n        \"所有\",\n        \"##ジュ\",\n        \"復活\",\n        \"1960\",\n        \"得点\",\n        \"向か\",\n        \"the\",\n        \"説明\",\n        \"##セス\",\n        \"本線\",\n        \"カン\",\n        \"女優\",\n        \"増加\",\n        \"クリス\",\n        \"アラ\",\n        \"原因\",\n        \"##ゆる\",\n        \"小さ\",\n        \"あまり\",\n        \"決め\",\n        \"コンピ\",\n        \"外国\",\n        \"1986\",\n        \"ドライ\",\n        \"アンド\",\n        \"##ークス\",\n        \"ポイント\",\n        \"43\",\n        \"政策\",\n        \"市場\",\n        \"直後\",\n        \"1985\",\n        \"建物\",\n        \"##リート\",\n        \"配置\",\n        \"将軍\",\n        \"離れ\",\n        \"##レット\",\n        \"##せる\",\n        \"植物\",\n        \"王座\",\n        \"あたる\",\n        \"設け\",\n        \"入学\",\n        \"購入\",\n        \"防衛\",\n        \"台湾\",\n        \"ビデオ\",\n        \"改正\",\n        \"39\",\n        \"医療\",\n        \"ルー\",\n        \"明らか\",\n        \"70\",\n        \"パリ\",\n        \"ホテル\",\n        \"思わ\",\n        \"敗れ\",\n        \"##らく\",\n        \"グラン\",\n        \"バック\",\n        \"44\",\n        \"##ースト\",\n        \"##メン\",\n        \"神奈\",\n        \"シーン\",\n        \"##ak\",\n        \"##IC\",\n        \"障害\",\n        \"語っ\",\n        \"通じ\",\n        \"ゲスト\",\n        \"フラ\",\n        \"仲間\",\n        \"##合い\",\n        \"商品\",\n        \"1984\",\n        \"化学\",\n        \"##EN\",\n        \"電子\",\n        \"関東\",\n        \"ハン\",\n        \"##50\",\n        \"東北\",\n        \"理事\",\n        \"キー\",\n        \"静岡\",\n        \"パン\",\n        \"ロンドン\",\n        \"DV\",\n        \"##AL\",\n        \"惑星\",\n        \"達成\",\n        \"リン\",\n        \"行為\",\n        \"トレ\",\n        \"##イア\",\n        \"中学\",\n        \"特殊\",\n        \"バラ\",\n        \"メディア\",\n        \"##ウェー\",\n        \"メーカー\",\n        \"土地\",\n        \"成長\",\n        \"なか\",\n        \"神奈川\",\n        \"内閣\",\n        \"実験\",\n        \"艦隊\",\n        \"沖縄\",\n        \"住民\",\n        \"プロジェクト\",\n        \"##なる\",\n        \"温泉\",\n        \"エネル\",\n        \"レベル\",\n        \"46\",\n        \"レコード\",\n        \"レギュ\",\n        \"派遣\",\n        \"代わり\",\n        \"##トロ\",\n        \"従来\",\n        \"##ers\",\n        \"失敗\",\n        \"記述\",\n        \"関西\",\n        \"トリ\",\n        \"系列\",\n        \"スケ\",\n        \"##なわ\",\n        \"978\",\n        \"##イク\",\n        \"##AM\",\n        \"カメ\",\n        \"##ピー\",\n        \"kg\",\n        \"in\",\n        \"指摘\",\n        \"拠点\",\n        \"基地\",\n        \"##ガン\",\n        \"##ウル\",\n        \"年代\",\n        \"各地\",\n        \"高く\",\n        \"標準\",\n        \"富士\",\n        \"ブランド\",\n        \"出会\",\n        \"##シング\",\n        \"フジ\",\n        \"プリ\",\n        \"エネルギー\",\n        \"仕様\",\n        \"形態\",\n        \"DVD\",\n        \"強化\",\n        \"残し\",\n        \"軍事\",\n        \"イメージ\",\n        \"##出す\",\n        \"太平\",\n        \"建て\",\n        \"1983\",\n        \"グレ\",\n        \"投票\",\n        \"ダム\",\n        \"製品\",\n        \"CM\",\n        \"作り\",\n        \"作業\",\n        \"記載\",\n        \"コンピュー\",\n        \"電車\",\n        \"ユニット\",\n        \"福島\",\n        \"##IS\",\n        \"政権\",\n        \"示し\",\n        \"##av\",\n        \"##op\",\n        \"90\",\n        \"トラン\",\n        \"オフ\",\n        \"切り\",\n        \"作成\",\n        \"きっかけ\",\n        \"イラ\",\n        \"延長\",\n        \"発電\",\n        \"同社\",\n        \"##ルク\",\n        \"兄弟\",\n        \"規定\",\n        \"一時\",\n        \"ソング\",\n        \"長野\",\n        \"ミュージック\",\n        \"山口\",\n        \"1982\",\n        \"海外\",\n        \"##ri\",\n        \"北部\",\n        \"モード\",\n        \"巨大\",\n        \"使う\",\n        \"レギュラー\",\n        \"##ュニ\",\n        \"バージョン\",\n        \"##スタン\",\n        \"報道\",\n        \"くだ\",\n        \"停止\",\n        \"無い\",\n        \"##ゲン\",\n        \"改造\",\n        \"##ッケ\",\n        \"呼ぶ\",\n        \"シー\",\n        \"##ov\",\n        \"機械\",\n        \"経由\",\n        \"ガス\",\n        \"米国\",\n        \"資料\",\n        \"処理\",\n        \"47\",\n        \"300\",\n        \"速度\",\n        \"トラック\",\n        \"商業\",\n        \"セル\",\n        \"例えば\",\n        \"言っ\",\n        \"披露\",\n        \"制御\",\n        \"オール\",\n        \"伝え\",\n        \"連盟\",\n        \"残っ\",\n        \"統一\",\n        \"埼玉\",\n        \"主演\",\n        \"##og\",\n        \"競走\",\n        \"パラ\",\n        \"法律\",\n        \"創設\",\n        \"##スティ\",\n        \"アイドル\",\n        \"分離\",\n        \"##ウンサー\",\n        \"歌手\",\n        \"##ストン\",\n        \"1972\",\n        \"上記\",\n        \"独自\",\n        \"##ロス\",\n        \"TO\",\n        \"言い\",\n        \"ギリ\",\n        \"描い\",\n        \"太陽\",\n        \"アナウンサー\",\n        \"ポー\",\n        \"th\",\n        \"##込む\",\n        \"少ない\",\n        \"博物\",\n        \"住宅\",\n        \"スパ\",\n        \"実現\",\n        \"##VE\",\n        \"脚本\",\n        \"プレイヤー\",\n        \"1981\",\n        \"ロボ\",\n        \"長崎\",\n        \"少なく\",\n        \"1979\",\n        \"落ち\",\n        \"デジタル\",\n        \"違い\",\n        \"集団\",\n        \"戦後\",\n        \"母親\",\n        \"昇格\",\n        \"継承\",\n        \"軌道\",\n        \"なし\",\n        \"新設\",\n        \"51\",\n        \"空間\",\n        \"ミニ\",\n        \"定期\",\n        \"解散\",\n        \"中華\",\n        \"おら\",\n        \"クリ\",\n        \"旅客\",\n        \"##AC\",\n        \"強く\",\n        \"接続\",\n        \"マーク\",\n        \"部屋\",\n        \"比べ\",\n        \"優秀\",\n        \"##ard\",\n        \"トゥ\",\n        \"現れ\",\n        \"革命\",\n        \"制限\",\n        \"置か\",\n        \"感じ\",\n        \"##ab\",\n        \"殺害\",\n        \"集め\",\n        \"##ルー\",\n        \"##ランダ\",\n        \"分野\",\n        \"安定\",\n        \"スタート\",\n        \"作っ\",\n        \"スキ\",\n        \"カナダ\",\n        \"周囲\",\n        \"貢献\",\n        \"名誉\",\n        \"展示\",\n        \"##ニュー\",\n        \"責任\",\n        \"伝統\",\n        \"条約\",\n        \"書か\",\n        \"参戦\",\n        \"##ミア\",\n        \"##ッフ\",\n        \"ブリ\",\n        \"面積\",\n        \"##ピオン\",\n        \"機構\",\n        \"ヒット\",\n        \"令和\",\n        \"##ブルク\",\n        \"パート\",\n        \"至る\",\n        \"##ce\",\n        \"まと\",\n        \"友人\",\n        \"いつ\",\n        \"1978\",\n        \"##ロット\",\n        \"感染\",\n        \"維持\",\n        \"1975\",\n        \"##ウィ\",\n        \"かなり\",\n        \"工学\",\n        \"意識\",\n        \"農業\",\n        \"交流\",\n        \"ジョージ\",\n        \"##ーフ\",\n        \"交換\",\n        \"停車\",\n        \"相当\",\n        \"要素\",\n        \"医学\",\n        \"続く\",\n        \"##ダム\",\n        \"52\",\n        \"書き\",\n        \"カラー\",\n        \"##ID\",\n        \"49\",\n        \"ライト\",\n        \"##ニック\",\n        \"##返し\",\n        \"##リアム\",\n        \"詳細\",\n        \"##HE\",\n        \"1973\",\n        \"二人\",\n        \"1950\",\n        \"シティ\",\n        \"54\",\n        \"エレ\",\n        \"基準\",\n        \"限り\",\n        \"役割\",\n        \"操作\",\n        \"反応\",\n        \"勢力\",\n        \"見る\",\n        \"ください\",\n        \"予選\",\n        \"共通\",\n        \"学院\",\n        \"紀元\",\n        \"##ファー\",\n        \"民族\",\n        \"機体\",\n        \"##FA\",\n        \"刊行\",\n        \"古代\",\n        \"現役\",\n        \"##OM\",\n        \"振り\",\n        \"取引\",\n        \"##掛け\",\n        \"##ie\",\n        \"地震\",\n        \"本来\",\n        \"段階\",\n        \"ランド\",\n        \"主催\",\n        \"##ンズ\",\n        \"TV\",\n        \"理論\",\n        \"コミュニ\",\n        \"進め\",\n        \"岡山\",\n        \"用法\",\n        \"範囲\",\n        \"1974\",\n        \"思っ\",\n        \"岐阜\",\n        \"1976\",\n        \"##th\",\n        \"ブルー\",\n        \"##バイ\",\n        \"ダン\",\n        \"禁止\",\n        \"校舎\",\n        \"レス\",\n        \"兵庫\",\n        \"長い\",\n        \"##くり\",\n        \"1971\",\n        \"##ブリ\",\n        \"コード\",\n        \"##ウェア\",\n        \"ボール\",\n        \"ポジ\",\n        \"ST\",\n        \"##シェ\",\n        \"自体\",\n        \"全員\",\n        \"オーストラ\",\n        \"治療\",\n        \"貨物\",\n        \"鹿児\",\n        \"##OS\",\n        \"鹿児島\",\n        \"命令\",\n        \"体制\",\n        \"イング\",\n        \"1969\",\n        \"継続\",\n        \"1945\",\n        \"まし\",\n        \"体育\",\n        \"大陸\",\n        \"キング\",\n        \"通称\",\n        \"メダル\",\n        \"交差\",\n        \"もら\",\n        \"同盟\",\n        \"エア\",\n        \"##ill\",\n        \"毎年\",\n        \"皇帝\",\n        \"オーストラリア\",\n        \"貴族\",\n        \"行く\",\n        \"熊本\",\n        \"観測\",\n        \"さま\",\n        \"扱い\",\n        \"##ワード\",\n        \"読み\",\n        \"##ッキ\",\n        \"##ガル\",\n        \"訓練\",\n        \"内部\",\n        \"陸上\",\n        \"コーチ\",\n        \"チャンピオン\",\n        \"提案\",\n        \"訪れ\",\n        \"主な\",\n        \"減少\",\n        \"向上\",\n        \"##EC\",\n        \"みな\",\n        \"認定\",\n        \"逮捕\",\n        \"判断\",\n        \"1977\",\n        \"アト\",\n        \"ダイヤ\",\n        \"1968\",\n        \"起き\",\n        \"ストーリー\",\n        \"ルート\",\n        \"宗教\",\n        \"家庭\",\n        \"あれ\",\n        \"##eb\",\n        \"##ミング\",\n        \"コンサ\",\n        \"演出\",\n        \"ちな\",\n        \"挑戦\",\n        \"宣言\",\n        \"動き\",\n        \"せい\",\n        \"キリスト\",\n        \"田中\",\n        \"対策\",\n        \"性能\",\n        \"課程\",\n        \"首相\",\n        \"##ディー\",\n        \"##ライナ\",\n        \"フォー\",\n        \"週間\",\n        \"再開\",\n        \"プロデューサー\",\n        \"鈴木\",\n        \"語句\",\n        \"近年\",\n        \"オランダ\",\n        \"##ell\",\n        \"TBS\",\n        \"改革\",\n        \"仙台\",\n        \"解説\",\n        \"前作\",\n        \"エリア\",\n        \"札幌\",\n        \"53\",\n        \"モー\",\n        \"文庫\",\n        \"ブラック\",\n        \"セット\",\n        \"de\",\n        \"##igh\",\n        \"一緒\",\n        \"得る\",\n        \"##ジョン\",\n        \"##しくは\",\n        \")-\",\n        \"##イルス\",\n        \"ギター\",\n        \"連絡\",\n        \"##ワーク\",\n        \"要求\",\n        \"##AP\",\n        \"通過\",\n        \"職能\",\n        \"始める\",\n        \"つな\",\n        \"小学\",\n        \"生まれる\",\n        \"スペシャル\",\n        \"フィリ\",\n        \"回転\",\n        \"首都\",\n        \"インタ\",\n        \"##ッサ\",\n        \"良い\",\n        \"##切り\",\n        \"##マス\",\n        \"ウィリアム\",\n        \"しまい\",\n        \"まだ\",\n        \"##ッカ\",\n        \"起こし\",\n        \"##エン\",\n        \"アフリカ\",\n        \"##ra\",\n        \"移行\",\n        \"依頼\",\n        \"##立て\",\n        \"制定\",\n        \"原子\",\n        \"ヶ月\",\n        \"進学\",\n        \"広く\",\n        \"62\",\n        \"スタッフ\",\n        \"定め\",\n        \"プログラム\",\n        \"185\",\n        \"当選\",\n        \"発言\",\n        \"中村\",\n        \"ショー\",\n        \"終わっ\",\n        \"スタイル\",\n        \"開通\",\n        \"カメラ\",\n        \"58\",\n        \"##チン\",\n        \"ノー\",\n        \"衆議\",\n        \"単位\",\n        \"You\",\n        \"セント\",\n        \"知っ\",\n        \"奈良\",\n        \"声優\",\n        \"出来る\",\n        \"マネ\",\n        \"1000\",\n        \"1964\",\n        \"キロ\",\n        \"コンピュータ\",\n        \"全く\",\n        \"しばし\",\n        \"ポジション\",\n        \"##ッキー\",\n        \"##ずか\",\n        \"結ぶ\",\n        \"世代\",\n        \"防御\",\n        \"大字\",\n        \"ソ連\",\n        \"56\",\n        \"##ショナル\",\n        \"伝説\",\n        \"ソロ\",\n        \"前後\",\n        \"st\",\n        \"投手\",\n        \"戻っ\",\n        \"向かっ\",\n        \"自己\",\n        \"##ボン\",\n        \"書い\",\n        \"##ist\",\n        \"ミサ\",\n        \"##ok\",\n        \"メジャー\",\n        \"##ine\",\n        \"やま\",\n        \"レッド\",\n        \"勤務\",\n        \"危険\",\n        \"得意\",\n        \"チャンネル\",\n        \"本名\",\n        \"かか\",\n        \"秋田\",\n        \"ダウン\",\n        \"分か\",\n        \"備え\",\n        \"1967\",\n        \"ランキング\",\n        \"毎日\",\n        \"亡く\",\n        \"立て\",\n        \"定義\",\n        \"欧州\",\n        \"しばしば\",\n        \"除く\",\n        \"児童\",\n        \"グリ\",\n        \"ロード\",\n        \"会員\",\n        \"中止\",\n        \"##やか\",\n        \"異なり\",\n        \"推進\",\n        \"帰国\",\n        \"更に\",\n        \"負け\",\n        \"区域\",\n        \"身長\",\n        \"指す\",\n        \"##est\",\n        \"資格\",\n        \"##クラ\",\n        \"キャン\",\n        \"指名\",\n        \"押し\",\n        \"用いる\",\n        \"しょう\",\n        \"電力\",\n        \"隣接\",\n        \"知り\",\n        \"あら\",\n        \"更新\",\n        \"Al\",\n        \"佐藤\",\n        \"コンビ\",\n        \"##続き\",\n        \"学会\",\n        \"保存\",\n        \"作用\",\n        \"長男\",\n        \"飛び\",\n        \"THE\",\n        \"既に\",\n        \"##ーネ\",\n        \"同一\",\n        \"パワー\",\n        \"小型\",\n        \"主題\",\n        \"##ン・\",\n        \"##そう\",\n        \"カバー\",\n        \"改良\",\n        \"##ニス\",\n        \"ヴォ\",\n        \"始まっ\",\n        \"Re\",\n        \"SP\",\n        \"もしくは\",\n        \"後述\",\n        \"エピ\",\n        \"1965\",\n        \"ペン\",\n        \"分割\",\n        \"到着\",\n        \"戦車\",\n        \"視聴\",\n        \"建造\",\n        \"##ナム\",\n        \"トル\",\n        \"##ジン\",\n        \"消滅\",\n        \"1966\",\n        \"様子\",\n        \"理解\",\n        \"名乗\",\n        \"基礎\",\n        \"デイ\",\n        \"オス\",\n        \"回復\",\n        \"兵器\",\n        \"単独\",\n        \"けん\",\n        \"共産\",\n        \"つく\",\n        \"連れ\",\n        \"エイ\",\n        \"知事\",\n        \"リア\",\n        \"東海\",\n        \"小さな\",\n        \"ブレ\",\n        \"本塁\",\n        \"起用\",\n        \"チョ\",\n        \"サイズ\",\n        \"ピアノ\",\n        \"か月\",\n        \"##バート\",\n        \"置く\",\n        \"##出さ\",\n        \"ヘル\",\n        \"すれ\",\n        \"##ミン\",\n        \"184\",\n        \"巻き\",\n        \"ずつ\",\n        \"始まる\",\n        \"演じ\",\n        \"後継\",\n        \"創立\",\n        \"収め\",\n        \"400\",\n        \"消費\",\n        \"会場\",\n        \"ラー\",\n        \"任務\",\n        \"練習\",\n        \"ハウス\",\n        \"旅行\",\n        \"##ビン\",\n        \"##レンジ\",\n        \"##ess\",\n        \"57\",\n        \"デュ\",\n        \"##トゥ\",\n        \"文書\",\n        \"ダンス\",\n        \"西部\",\n        \"##all\",\n        \"対立\",\n        \"応じ\",\n        \"平和\",\n        \"後期\",\n        \"長官\",\n        \"発射\",\n        \"##ティスト\",\n        \"開幕\",\n        \"一定\",\n        \"海岸\",\n        \"ウイルス\",\n        \"エド\",\n        \"騎士\",\n        \"土曜\",\n        \"近代\",\n        \"##とう\",\n        \"目標\",\n        \"アマ\",\n        \"年齢\",\n        \"##ip\",\n        \"諸島\",\n        \"##おり\",\n        \"記憶\",\n        \"機器\",\n        \"消防\",\n        \"イングランド\",\n        \"オル\",\n        \"ユダ\",\n        \"バン\",\n        \"##IT\",\n        \"コント\",\n        \"ニコ\",\n        \"任命\",\n        \"半島\",\n        \"1955\",\n        \"大量\",\n        \"あたり\",\n        \"意見\",\n        \"前述\",\n        \"サポート\",\n        \"助け\",\n        \"##ダン\",\n        \"ドラゴン\",\n        \"1947\",\n        \"フォン\",\n        \"##AD\",\n        \"乗車\",\n        \"管轄\",\n        \"ポーランド\",\n        \"吉田\",\n        \"捜査\",\n        \"供給\",\n        \"実行\",\n        \"カラ\",\n        \"命名\",\n        \"##らす\",\n        \"180\",\n        \"困難\",\n        \"国鉄\",\n        \"幕府\",\n        \"en\",\n        \"出る\",\n        \"教師\",\n        \"オペ\",\n        \"ナイト\",\n        \"アス\",\n        \"芸能\",\n        \"通算\",\n        \"FI\",\n        \"##NA\",\n        \"##ーニ\",\n        \"車体\",\n        \"##ind\",\n        \"##ーチ\",\n        \"パーク\",\n        \"##トン\",\n        \"がっ\",\n        \"富山\",\n        \"資金\",\n        \"##かい\",\n        \"向かう\",\n        \"##フォル\",\n        \"##ストリア\",\n        \"与える\",\n        \"身体\",\n        \"立場\",\n        \"59\",\n        \"作る\",\n        \"##30\",\n        \"出現\",\n        \"やすい\",\n        \"なさ\",\n        \"確保\",\n        \"話し\",\n        \"らしい\",\n        \"1963\",\n        \"PC\",\n        \"趣味\",\n        \"##・ア\",\n        \"75\",\n        \"山田\",\n        \"著作\",\n        \"##ンスター\",\n        \"判定\",\n        \"##ッコ\",\n        \"マク\",\n        \"解放\",\n        \"##取り\",\n        \"在籍\",\n        \"リーダー\",\n        \"憲法\",\n        \"青年\",\n        \"##ジル\",\n        \"##ーラ\",\n        \"石川\",\n        \"マシン\",\n        \"アカデ\",\n        \"すぎ\",\n        \"64\",\n        \"投げ\",\n        \"師団\",\n        \"An\",\n        \"##ッター\",\n        \"スマ\",\n        \"ラグ\",\n        \"保険\",\n        \"ボス\",\n        \"階級\",\n        \"物質\",\n        \"##ct\",\n        \"低い\",\n        \"##レント\",\n        \"##ob\",\n        \"##OL\",\n        \"教え\",\n        \"画面\",\n        \"同日\",\n        \"徒歩\",\n        \"##テナ\",\n        \"ジャパン\",\n        \"##テム\",\n        \"吸収\",\n        \"ユダヤ\",\n        \"わけ\",\n        \"##10\",\n        \"##ゼル\",\n        \"注目\",\n        \"1962\",\n        \"進行\",\n        \"金曜\",\n        \"##ケーション\",\n        \"##ノン\",\n        \"阪神\",\n        \"傾向\",\n        \"弁護\",\n        \"コレ\",\n        \"目指し\",\n        \"設備\",\n        \"##ブン\",\n        \"球団\",\n        \"ほう\",\n        \"無く\",\n        \"インターネット\",\n        \"元々\",\n        \"##ヴォ\",\n        \"##ルン\",\n        \"物理\",\n        \"ブロック\",\n        \"刑事\",\n        \"##art\",\n        \"リス\",\n        \"わずか\",\n        \"領域\",\n        \"##UR\",\n        \"分け\",\n        \"いわゆる\",\n        \"1944\",\n        \"直前\",\n        \"戦士\",\n        \"ルール\",\n        \"撤退\",\n        \"##リーム\",\n        \"ネットワーク\",\n        \"売り\",\n        \"ゆう\",\n        \"前年\",\n        \"準備\",\n        \"計算\",\n        \"執筆\",\n        \"通し\",\n        \"東部\",\n        \"合計\",\n        \"未来\",\n        \"河川\",\n        \"1948\",\n        \"天文\",\n        \"##ツィ\",\n        \"##BA\",\n        \"検査\",\n        \"タウン\",\n        \"初回\",\n        \"交渉\",\n        \"上位\",\n        \"日曜\",\n        \"ミサイル\",\n        \"両親\",\n        \"トロ\",\n        \"処分\",\n        \"##換え\",\n        \"##ッピ\",\n        \"##ET\",\n        \"記者\",\n        \"動画\",\n        \"アリ\",\n        \"対抗\",\n        \"属する\",\n        \"グリーン\",\n        \"##ざま\",\n        \"解決\",\n        \"民国\",\n        \"判明\",\n        \"健康\",\n        \"連隊\",\n        \"エンディング\",\n        \"##ジアム\",\n        \"伴う\",\n        \"##ik\",\n        \"ウク\",\n        \"ロボット\",\n        \"価格\",\n        \"金属\",\n        \"##カン\",\n        \"許可\",\n        \"ルイ\",\n        \"アーティスト\",\n        \"民間\",\n        \"思想\",\n        \"##ーブ\",\n        \"残り\",\n        \"1954\",\n        \"置き\",\n        \"1961\",\n        \"入団\",\n        \"遺跡\",\n        \"登板\",\n        \"もっと\",\n        \"寺院\",\n        \"もた\",\n        \"入社\",\n        \"アシ\",\n        \"Ar\",\n        \"イラスト\",\n        \"歌詞\",\n        \"いち\",\n        \"日間\",\n        \"サラ\",\n        \"##ザン\",\n        \"##ソード\",\n        \"医師\",\n        \"なん\",\n        \"##ケル\",\n        \"伊勢\",\n        \"1949\",\n        \"松本\",\n        \"変え\",\n        \"##ンサー\",\n        \"休止\",\n        \"地位\",\n        \"新宿\",\n        \"模様\",\n        \"どの\",\n        \"引き継\",\n        \"##if\",\n        \"##80\",\n        \"##ーブル\",\n        \"取っ\",\n        \"ナイ\",\n        \"出す\",\n        \"生命\",\n        \"和歌\",\n        \"形状\",\n        \"ばかり\",\n        \"ファミ\",\n        \"大使\",\n        \"表明\",\n        \"検討\",\n        \"アイテム\",\n        \"##バン\",\n        \"持た\",\n        \"再生\",\n        \"学科\",\n        \"##US\",\n        \"1958\",\n        \"街道\",\n        \"##ども\",\n        \"##ポン\",\n        \"出力\",\n        \"##セル\",\n        \"1941\",\n        \"1956\",\n        \"普及\",\n        \"エリ\",\n        \"一種\",\n        \"くれ\",\n        \"##リアン\",\n        \"呼ん\",\n        \"テスト\",\n        \"##イオ\",\n        \"過ぎ\",\n        \"インタビュー\",\n        \"##たり\",\n        \"##ンマ\",\n        \"自衛\",\n        \"ヘン\",\n        \"徳島\",\n        \"急行\",\n        \"61\",\n        \"##ーンズ\",\n        \"南北\",\n        \"駆逐\",\n        \"認識\",\n        \"機動\",\n        \"1959\",\n        \"期待\",\n        \"創業\",\n        \"Bl\",\n        \"バトル\",\n        \"信号\",\n        \"犯罪\",\n        \"占領\",\n        \"どちら\",\n        \"ブラジル\",\n        \"愛称\",\n        \"##ant\",\n        \"方針\",\n        \"US\",\n        \"##トリック\",\n        \"ビジ\",\n        \"名義\",\n        \"ウクライナ\",\n        \"新人\",\n        \"##ルツ\",\n        \"固定\",\n        \"アカデミー\",\n        \"襲撃\",\n        \"ヒロ\",\n        \"率いる\",\n        \"##もと\",\n        \"結ん\",\n        \"今日\",\n        \"審査\",\n        \"1940\",\n        \"ブレー\",\n        \"##ルトラ\",\n        \"幹線\",\n        \"特急\",\n        \"##ノー\",\n        \"ポール\",\n        \"高橋\",\n        \"講師\",\n        \"and\",\n        \"べく\",\n        \"アプリ\",\n        \"分析\",\n        \"ベイ\",\n        \"開校\",\n        \"トンネル\",\n        \"##キシコ\",\n        \"背景\",\n        \"##シャン\",\n        \"ガー\",\n        \"爆発\",\n        \"とり\",\n        \"##20\",\n        \"63\",\n        \"機会\",\n        \"##フォルニア\",\n        \"##ティブ\",\n        \"AT\",\n        \"新型\",\n        \"見える\",\n        \"65\",\n        \"公共\",\n        \"Sh\",\n        \"だろう\",\n        \"サブ\",\n        \"市長\",\n        \"少し\",\n        \"ライダー\",\n        \"##グラ\",\n        \"エピソード\",\n        \"大きい\",\n        \"クロス\",\n        \"本格\",\n        \"##OW\",\n        \"権利\",\n        \"香港\",\n        \"山本\",\n        \"パス\",\n        \"川崎\",\n        \"エス\",\n        \"##ンタル\",\n        \"##持ち\",\n        \"崩壊\",\n        \"続ける\",\n        \"FM\",\n        \"適用\",\n        \"前半\",\n        \"シナ\",\n        \"マスター\",\n        \"オーストリア\",\n        \"停留\",\n        \"徳川\",\n        \"現場\",\n        \"提出\",\n        \"遺伝\",\n        \"コンサート\",\n        \"##シス\",\n        \"コマ\",\n        \"宮城\",\n        \"買収\",\n        \"シル\",\n        \"知識\",\n        \"イオン\",\n        \"分布\",\n        \"仮面\",\n        \"加盟\",\n        \"患者\",\n        \"互い\",\n        \"体重\",\n        \"##ud\",\n        \"1943\",\n        \"ライフ\",\n        \"##メートル\",\n        \"リング\",\n        \"食品\",\n        \"##ive\",\n        \"先発\",\n        \"失っ\",\n        \"組み合わせ\",\n        \"カリフォルニア\",\n        \"調整\",\n        \"Pl\",\n        \"十分\",\n        \"否定\",\n        \"果たす\",\n        \"哲学\",\n        \"負傷\",\n        \"チャート\",\n        \"アイル\",\n        \"神経\",\n        \"パーソ\",\n        \"ヤマ\",\n        \"##一郎\",\n        \"Sp\",\n        \"伊藤\",\n        \"青森\",\n        \"大幅\",\n        \"合格\",\n        \"送り\",\n        \"##ight\",\n        \"合流\",\n        \"サイド\",\n        \"推定\",\n        \"##衛門\",\n        \"##ミュ\",\n        \"小林\",\n        \"市街\",\n        \"同士\",\n        \"藤原\",\n        \"宮崎\",\n        \"収容\",\n        \"トレー\",\n        \"必ず\",\n        \"##ウント\",\n        \"大和\",\n        \"潜水\",\n        \"##ne\",\n        \"危機\",\n        \"無料\",\n        \"##かさ\",\n        \"##ort\",\n        \"アウト\",\n        \"敗北\",\n        \"逃げ\",\n        \"##ッテ\",\n        \"ジュニア\",\n        \"1952\",\n        \"せん\",\n        \"グランプリ\",\n        \"##サス\",\n        \"やや\",\n        \"結局\",\n        \"録音\",\n        \"執行\",\n        \"始まり\",\n        \"臨時\",\n        \"空軍\",\n        \"改善\",\n        \"古墳\",\n        \"殺人\",\n        \"メイ\",\n        \"スウェー\",\n        \"ウルトラ\",\n        \"画家\",\n        \"希望\",\n        \"乗っ\",\n        \"スイ\",\n        \"書店\",\n        \"150\",\n        \"十字\",\n        \"##チャー\",\n        \"##io\",\n        \"姉妹\",\n        \"##UN\",\n        \"つき\",\n        \"免許\",\n        \"上昇\",\n        \"財団\",\n        \"オーディ\",\n        \"落と\",\n        \"武装\",\n        \"合成\",\n        \"##ろし\",\n        \"インディ\",\n        \"スウェーデン\",\n        \"進ん\",\n        \"まず\",\n        \"イスラ\",\n        \"##サル\",\n        \"鎌倉\",\n        \"不足\",\n        \"##ue\",\n        \"用意\",\n        \"公立\",\n        \"概念\",\n        \"##エスト\",\n        \"スコット\",\n        \"命じ\",\n        \"拒否\",\n        \"基づく\",\n        \"大分\",\n        \"カール\",\n        \"バンク\",\n        \"注意\",\n        \"多かっ\",\n        \"シンガ\",\n        \"プライ\",\n        \"1957\",\n        \"おお\",\n        \"だい\",\n        \"侵攻\",\n        \"前身\",\n        \"優れ\",\n        \"統治\",\n        \"##ビエ\",\n        \"まつ\",\n        \"深夜\",\n        \"じゃ\",\n        \"##ルタ\",\n        \"自宅\",\n        \"戦う\",\n        \"##リュー\",\n        \"183\",\n        \"やり\",\n        \"ボク\",\n        \"ヘッド\",\n        \"##ーグ\",\n        \"弟子\",\n        \"楽し\",\n        \"オート\",\n        \"さまざま\",\n        \"一族\",\n        \"論文\",\n        \"竣工\",\n        \"試み\",\n        \"##ティック\",\n        \"##イヤ\",\n        \"北緯\",\n        \"##イム\",\n        \"あい\",\n        \"清水\",\n        \"閉鎖\",\n        \"スクール\",\n        \"結合\",\n        \"##レート\",\n        \"承認\",\n        \"呼称\",\n        \"拡張\",\n        \"専攻\",\n        \"##っと\",\n        \"1953\",\n        \"衛星\",\n        \"地点\",\n        \"1942\",\n        \"金融\",\n        \"オープニング\",\n        \"ハード\",\n        \"マリ\",\n        \"支店\",\n        \"1951\",\n        \"次第\",\n        \"ころ\",\n        \"##ブラ\",\n        \"1930\",\n        \"ちょう\",\n        \"##起こ\",\n        \"##でに\",\n        \"マイル\",\n        \"##FC\",\n        \"場面\",\n        \"##トリ\",\n        \"1946\",\n        \"Ne\",\n        \"さい\",\n        \"祖父\",\n        \"ホワ\",\n        \"学習\",\n        \"##11\",\n        \"しん\",\n        \"共演\",\n        \"サウンド\",\n        \"スペース\",\n        \"##ッタ\",\n        \"ノル\",\n        \"すでに\",\n        \"コンク\",\n        \"モンスター\",\n        \"やが\",\n        \"BS\",\n        \"兵士\",\n        \"同名\",\n        \"ジャンプ\",\n        \"次い\",\n        \"描写\",\n        \"たく\",\n        \"##ッハ\",\n        \"強制\",\n        \"##シック\",\n        \"指示\",\n        \"##ドリ\",\n        \"置い\",\n        \"##パス\",\n        \"過ご\",\n        \"秘密\",\n        \"De\",\n        \"##ge\",\n        \"##ロール\",\n        \"クー\",\n        \"かかわら\",\n        \"表す\",\n        \"現象\",\n        \"藩主\",\n        \"改名\",\n        \"アイルランド\",\n        \"ミス\",\n        \"区別\",\n        \"ダブル\",\n        \"実業\",\n        \"増え\",\n        \"左右\",\n        \"広告\",\n        \"メキシコ\",\n        \"通っ\",\n        \"ポルト\",\n        \"ビジネス\",\n        \"フィールド\",\n        \"有効\",\n        \"こそ\",\n        \"##ピン\",\n        \"略称\",\n        \"##レーター\",\n        \"毎週\",\n        \"古い\",\n        \"燃料\",\n        \"##ティア\",\n        \"判決\",\n        \"三菱\",\n        \"変身\",\n        \"プロレス\",\n        \"スキー\",\n        \"アレク\",\n        \"国会\",\n        \"##ran\",\n        \"各種\",\n        \"三重\",\n        \"現地\",\n        \"守る\",\n        \"軍人\",\n        \"人類\",\n        \"メモ\",\n        \"積極\",\n        \"歴任\",\n        \"作中\",\n        \"生じ\",\n        \"コラ\",\n        \"携帯\",\n        \"流れる\",\n        \"##てる\",\n        \"やがて\",\n        \"リスト\",\n        \"価値\",\n        \"見つ\",\n        \"相互\",\n        \"支払\",\n        \"低下\",\n        \"興味\",\n        \"##リーナ\",\n        \"よし\",\n        \"メル\",\n        \"移管\",\n        \"ケース\",\n        \"武蔵\",\n        \"原則\",\n        \"短期\",\n        \"山形\",\n        \"##ity\",\n        \"司会\",\n        \"規制\",\n        \"事態\",\n        \"加藤\",\n        \"改修\",\n        \"PS\",\n        \"差し\",\n        \"信頼\",\n        \"テロ\",\n        \"ボーカル\",\n        \"付属\",\n        \"ウェブ\",\n        \"法学\",\n        \"いき\",\n        \"南西\",\n        \"住む\",\n        \"##ターン\",\n        \"往復\",\n        \"##ian\",\n        \"##OC\",\n        \"Mar\",\n        \"戦略\",\n        \"##クル\",\n        \"小田\",\n        \"モノ\",\n        \"完了\",\n        \"自転\",\n        \"手段\",\n        \"バレー\",\n        \"称し\",\n        \"##ペン\",\n        \"翻訳\",\n        \"カット\",\n        \"福祉\",\n        \"ラテン\",\n        \"ヒト\",\n        \"あと\",\n        \"##ナイ\",\n        \"マッチ\",\n        \"死後\",\n        \"タレント\",\n        \"##デス\",\n        \"GP\",\n        \"かん\",\n        \"現実\",\n        \"駅前\",\n        \"わたっ\",\n        \"ターミ\",\n        \"中部\",\n        \"##ベルク\",\n        \"数多\",\n        \"歩兵\",\n        \"シア\",\n        \"テキ\",\n        \"職員\",\n        \"すなわ\",\n        \"すなわち\",\n        \"ディー\",\n        \"イエ\",\n        \"ダー\",\n        \"育成\",\n        \"テク\",\n        \"##次郎\",\n        \"##スタント\",\n        \"遺産\",\n        \"ホワイト\",\n        \"結び\",\n        \"フランク\",\n        \"うえ\",\n        \"植民\",\n        \"海上\",\n        \"投資\",\n        \"76\",\n        \"協議\",\n        \"マラ\",\n        \"福井\",\n        \"求める\",\n        \"SH\",\n        \"ベト\",\n        \"走行\",\n        \"属し\",\n        \"貿易\",\n        \"送っ\",\n        \"証明\",\n        \"外交\",\n        \"抵抗\",\n        \"##our\",\n        \"長く\",\n        \"クリア\",\n        \"コム\",\n        \"##組み\",\n        \"##ッズ\",\n        \"##クシー\",\n        \"Pro\",\n        \"留学\",\n        \"##ティン\",\n        \"考える\",\n        \"数学\",\n        \"Com\",\n        \"集落\",\n        \"若い\",\n        \"プレミア\",\n        \"ドア\",\n        \"ワシ\",\n        \"大半\",\n        \"LI\",\n        \"修道\",\n        \"ソフトウェア\",\n        \"アクション\",\n        \"超え\",\n        \"こちら\",\n        \"##チュア\",\n        \"有し\",\n        \"コミック\",\n        \"募集\",\n        \"申し\",\n        \"##デー\",\n        \"##ry\",\n        \"##ゼン\",\n        \"北西\",\n        \"移住\",\n        \"高度\",\n        \"フライ\",\n        \"英国\",\n        \"ヒュー\",\n        \"渋谷\",\n        \"##シャー\",\n        \"空気\",\n        \"見え\",\n        \"広場\",\n        \"マス\",\n        \"反乱\",\n        \"トーク\",\n        \"大賞\",\n        \"ヒル\",\n        \"遅れ\",\n        \"##ントリー\",\n        \"Th\",\n        \"##キン\",\n        \"知る\",\n        \"##ate\",\n        \"めぐ\",\n        \"まさ\",\n        \"クル\",\n        \"もつ\",\n        \"人名\",\n        \"クライ\",\n        \"超える\",\n        \"##リコ\",\n        \"パイロット\",\n        \"住ん\",\n        \"##AG\",\n        \"生息\",\n        \"話題\",\n        \"表面\",\n        \"開か\",\n        \"資本\",\n        \"至っ\",\n        \"感情\",\n        \"集中\",\n        \"Le\",\n        \"メッセ\",\n        \"装甲\",\n        \"レコー\",\n        \"まとめ\",\n        \"マグ\",\n        \"予備\",\n        \"東洋\",\n        \"120\",\n        \"##ib\",\n        \"数多く\",\n        \"ファイル\",\n        \"プラン\",\n        \"掛け\",\n        \"月曜\",\n        \"ジャック\",\n        \"基づい\",\n        \"本拠\",\n        \"##ED\",\n        \"将来\",\n        \"護衛\",\n        \"179\",\n        \"Un\",\n        \"アクセス\",\n        \"1889\",\n        \"突き\",\n        \"1920\",\n        \"フィン\",\n        \"取材\",\n        \"役所\",\n        \"楽器\",\n        \"はず\",\n        \"##ich\",\n        \"再建\",\n        \"エジ\",\n        \"ボタン\",\n        \"平日\",\n        \"暮らし\",\n        \"マリア\",\n        \"震災\",\n        \"代理\",\n        \"どこ\",\n        \"戦隊\",\n        \"笑い\",\n        \"スタジアム\",\n        \"スプ\",\n        \"国王\",\n        \"残る\",\n        \"##モンド\",\n        \"99\",\n        \"東経\",\n        \"ターミナル\",\n        \"##ーマン\",\n        \"バレ\",\n        \"満た\",\n        \"王者\",\n        \"格闘\",\n        \"チュー\",\n        \"規格\",\n        \"がっこう\",\n        \"ムー\",\n        \"##から\",\n        \"八幡\",\n        \"体験\",\n        \"相撲\",\n        \"聞い\",\n        \"衝突\",\n        \"相談\",\n        \"事情\",\n        \"学者\",\n        \"##ゼルス\",\n        \"テン\",\n        \"いか\",\n        \"コス\",\n        \"正体\",\n        \"終わり\",\n        \"東西\",\n        \"パーソナ\",\n        \"放射\",\n        \"茨城\",\n        \"議長\",\n        \"先生\",\n        \"##フレ\",\n        \"コロナ\",\n        \"電鉄\",\n        \"中間\",\n        \"72\",\n        \"##ジット\",\n        \"引き続き\",\n        \"ベトナム\",\n        \"キャリア\",\n        \"議論\",\n        \"ハリ\",\n        \"きょう\",\n        \"吹き\",\n        \"北東\",\n        \"強力\",\n        \"訪問\",\n        \"終え\",\n        \"フット\",\n        \"手法\",\n        \"##やし\",\n        \"教室\",\n        \"名付け\",\n        \"##ログ\",\n        \"##フォード\",\n        \"##ect\",\n        \"締結\",\n        \"##取っ\",\n        \"井上\",\n        \"分子\",\n        \"渡辺\",\n        \"本編\",\n        \"ロケット\",\n        \"ケン\",\n        \"ドン\",\n        \"過程\",\n        \"##IR\",\n        \"##ーマー\",\n        \"保有\",\n        \"##ニュ\",\n        \"01\",\n        \"協定\",\n        \"##トラ\",\n        \"##LE\",\n        \"諸国\",\n        \"##ゴル\",\n        \"カタ\",\n        \"##ord\",\n        \"##ランス\",\n        \"##ph\",\n        \"個体\",\n        \"集合\",\n        \"居住\",\n        \"記さ\",\n        \"北京\",\n        \"提携\",\n        \"##ビル\",\n        \"ネーム\",\n        \"エク\",\n        \"オーバー\",\n        \"1939\",\n        \"##II\",\n        \"シート\",\n        \"当たる\",\n        \"##ワイ\",\n        \"##40\",\n        \"ウェイ\",\n        \"目指す\",\n        \"重量\",\n        \"しゃ\",\n        \"##タイ\",\n        \"応援\",\n        \"次元\",\n        \"##ack\",\n        \"##ねる\",\n        \"群馬\",\n        \"600\",\n        \"達し\",\n        \"週刊\",\n        \"残さ\",\n        \"##合っ\",\n        \"受け入れ\",\n        \"##ンダム\",\n        \"暗殺\",\n        \"レーベル\",\n        \"##レッジ\",\n        \"音声\",\n        \"人形\",\n        \"182\",\n        \"カイ\",\n        \"翌日\",\n        \"800\",\n        \"深い\",\n        \"要請\",\n        \"##OT\",\n        \"警備\",\n        \"##ームズ\",\n        \"発達\",\n        \"譲渡\",\n        \"学ん\",\n        \"実力\",\n        \"流行\",\n        \"プロデュース\",\n        \"着用\",\n        \"ハンガ\",\n        \"つまり\",\n        \"従っ\",\n        \"ポルトガル\",\n        \"オフィ\",\n        \"77\",\n        \"ソビエ\",\n        \"##なた\",\n        \"地帯\",\n        \"人生\",\n        \"##ION\",\n        \"証券\",\n        \"出さ\",\n        \"##リウス\",\n        \"箇所\",\n        \"部下\",\n        \"ワシントン\",\n        \"シャー\",\n        \"殺し\",\n        \"進化\",\n        \"##AK\",\n        \"##ナン\",\n        \"動作\",\n        \"早く\",\n        \"##カイ\",\n        \"各国\",\n        \"ソビエト\",\n        \"際し\",\n        \"軍団\",\n        \"取り上げ\",\n        \"生み\",\n        \"養子\",\n        \"カトリック\",\n        \"歴代\",\n        \"バスケット\",\n        \"さく\",\n        \"85\",\n        \"戻る\",\n        \"クイズ\",\n        \"ごろ\",\n        \"天然\",\n        \"ラグビー\",\n        \"##ff\",\n        \"181\",\n        \"コミュニティ\",\n        \"守備\",\n        \"入手\",\n        \"男女\",\n        \"##60\",\n        \"ビッグ\",\n        \"ブラン\",\n        \"統計\",\n        \"昇進\",\n        \"世帯\",\n        \"午後\",\n        \"信仰\",\n        \"悪魔\",\n        \"傘下\",\n        \"1937\",\n        \"脱出\",\n        \"##ass\",\n        \"公表\",\n        \"和歌山\",\n        \"幹部\",\n        \"そんな\",\n        \"観客\",\n        \"転換\",\n        \"##違い\",\n        \"変わっ\",\n        \"従事\",\n        \"確立\",\n        \"##IM\",\n        \"ハル\",\n        \"ゴルフ\",\n        \"駅舎\",\n        \"渡り\",\n        \"##ハー\",\n        \"アメリカン\",\n        \"限ら\",\n        \"グロー\",\n        \"ベルリン\",\n        \"##カス\",\n        \"##ヌス\",\n        \"初頭\",\n        \"##ain\",\n        \"ペル\",\n        \"じょう\",\n        \"コメント\",\n        \"プロダ\",\n        \"おか\",\n        \"##ows\",\n        \"西側\",\n        \"とう\",\n        \"売却\",\n        \"離脱\",\n        \"投入\",\n        \"PR\",\n        \"買い\",\n        \"ドー\",\n        \"繰り返し\",\n        \"タン\",\n        \"ベン\",\n        \"幼少\",\n        \"伸び\",\n        \"##AY\",\n        \"NE\",\n        \"発着\",\n        \"手が\",\n        \"心理\",\n        \"緊急\",\n        \"両方\",\n        \"平方\",\n        \"多様\",\n        \"手紙\",\n        \"四国\",\n        \"生成\",\n        \"ソー\",\n        \"操縦\",\n        \"ボーイ\",\n        \"沿い\",\n        \"##キャ\",\n        \"ユーザー\",\n        \"進む\",\n        \"終盤\",\n        \"##per\",\n        \"普段\",\n        \"中世\",\n        \"池田\",\n        \"活用\",\n        \"モチ\",\n        \"描く\",\n        \"無線\",\n        \"演劇\",\n        \"史上\",\n        \"良く\",\n        \"##チュー\",\n        \"長期\",\n        \"##プス\",\n        \"王子\",\n        \"義務\",\n        \"##ドゥ\",\n        \"ソウル\",\n        \"##end\",\n        \"連携\",\n        \"くん\",\n        \"規則\",\n        \"収入\",\n        \"境界\",\n        \"初め\",\n        \"エジプト\",\n        \"##ast\",\n        \"全米\",\n        \"Cl\",\n        \"側面\",\n        \"敷地\",\n        \"コラボ\",\n        \"取る\",\n        \"セレ\",\n        \"岩手\",\n        \"解体\",\n        \"スイス\",\n        \"セイ\",\n        \"末期\",\n        \"ドゥ\",\n        \"ロバート\",\n        \"南東\",\n        \"##ハン\",\n        \"サム\",\n        \"No\",\n        \"上映\",\n        \"アイス\",\n        \"##Tub\",\n        \"ロサン\",\n        \"書籍\",\n        \"##EL\",\n        \"ドライバー\",\n        \"投稿\",\n        \"##ING\",\n        \"あげ\",\n        \"戦艦\",\n        \"1936\",\n        \"##プロ\",\n        \"選抜\",\n        \"打率\",\n        \"ギリシャ\",\n        \"たま\",\n        \"メガ\",\n        \"一切\",\n        \"ロサンゼルス\",\n        \"参議\",\n        \"ヒー\",\n        \"上げ\",\n        \"徐々\",\n        \"興行\",\n        \"商店\",\n        \"##兵衛\",\n        \"輸入\",\n        \"先行\",\n        \"Wind\",\n        \"コピー\",\n        \"女王\",\n        \"##ーナメント\",\n        \"たと\",\n        \"正確\",\n        \"政党\",\n        \"上野\",\n        \"社員\",\n        \"ロス\",\n        \"88\",\n        \"##ボード\",\n        \"人工\",\n        \"発揮\",\n        \"画像\",\n        \"補助\",\n        \"##ッピング\",\n        \"##フィア\",\n        \"ハンド\",\n        \"起こっ\",\n        \"全長\",\n        \"接触\",\n        \"リニュー\",\n        \"争い\",\n        \"手術\",\n        \"##ーリ\",\n        \"##テイン\",\n        \"グランド\",\n        \"AC\",\n        \"ガンダム\",\n        \"現存\",\n        \"ボディ\",\n        \"新田\",\n        \"##IG\",\n        \"マジ\",\n        \"##ッス\",\n        \"アント\",\n        \"午前\",\n        \"リニューアル\",\n        \"スティー\",\n        \"合意\",\n        \"古く\",\n        \"キュー\",\n        \"爆弾\",\n        \"大人\",\n        \"ロング\",\n        \"態度\",\n        \"栃木\",\n        \"栽培\",\n        \"パートナー\",\n        \"ウル\",\n        \"プラス\",\n        \"恐れ\",\n        \"1938\",\n        \"##ボー\",\n        \"スピード\",\n        \"巨人\",\n        \"リュ\",\n        \"暴力\",\n        \"モスク\",\n        \"附属\",\n        \"顧問\",\n        \"##ベルト\",\n        \"国勢\",\n        \"##pp\",\n        \"##立つ\",\n        \"レオ\",\n        \"実質\",\n        \"ディレ\",\n        \"最多\",\n        \"##マル\",\n        \"半分\",\n        \"86\",\n        \"機種\",\n        \"伯爵\",\n        \"はる\",\n        \"人員\",\n        \"答え\",\n        \"ハンガリー\",\n        \"##分け\",\n        \"トーナメント\",\n        \"ネタ\",\n        \"働き\",\n        \"約束\",\n        \"酸化\",\n        \"構想\",\n        \"アウ\",\n        \"解釈\",\n        \"下記\",\n        \"95\",\n        \"コロン\",\n        \"社名\",\n        \"##バス\",\n        \"##ヴァー\",\n        \"仏教\",\n        \"職業\",\n        \"73\",\n        \"##70\",\n        \"西武\",\n        \"##コール\",\n        \"メール\",\n        \"働い\",\n        \"太郎\",\n        \"金沢\",\n        \"モーター\",\n        \"子ども\",\n        \"高知\",\n        \"YouTub\",\n        \"戦死\",\n        \"66\",\n        \"終点\",\n        \"授業\",\n        \"自殺\",\n        \"178\",\n        \"ミュ\",\n        \"国境\",\n        \"同期\",\n        \"Am\",\n        \"BO\",\n        \"エース\",\n        \"##レル\",\n        \"##ver\",\n        \"##te\",\n        \"中山\",\n        \"ランク\",\n        \"財政\",\n        \"具体\",\n        \"死ん\",\n        \"ヤン\",\n        \"シュー\",\n        \"予想\",\n        \"殺さ\",\n        \"ブレイ\",\n        \"ブレーキ\",\n        \"コル\",\n        \"ジョー\",\n        \"しば\",\n        \"悪い\",\n        \"##の子\",\n        \"複雑\",\n        \"よい\",\n        \"現れる\",\n        \"防止\",\n        \"連結\",\n        \"赤い\",\n        \"##セント\",\n        \"頭部\",\n        \"明る\",\n        \"クイ\",\n        \"渡っ\",\n        \"##シップ\",\n        \"アム\",\n        \"トルコ\",\n        \"パル\",\n        \"大手\",\n        \"##ブレ\",\n        \"##ah\",\n        \"夫人\",\n        \"評論\",\n        \"78\",\n        \"交代\",\n        \"##ピア\",\n        \"##ey\",\n        \"隠し\",\n        \"ちなみ\",\n        \"SS\",\n        \"ファッション\",\n        \"##wit\",\n        \"付い\",\n        \"##たい\",\n        \"順位\",\n        \"com\",\n        \"創刊\",\n        \"##セプト\",\n        \"フィルム\",\n        \"北朝\",\n        \"尋常\",\n        \"構築\",\n        \"##合う\",\n        \"##RE\",\n        \"下り\",\n        \"材料\",\n        \"分かれ\",\n        \"160\",\n        \"合同\",\n        \"絶対\",\n        \"授与\",\n        \"活性\",\n        \"守護\",\n        \"恋人\",\n        \"冒険\",\n        \"##ロード\",\n        \"ドーム\",\n        \"キャッチ\",\n        \"バスケットボール\",\n        \"レコーディング\",\n        \"出走\",\n        \"続き\",\n        \"割り\",\n        \"料金\",\n        \"かわ\",\n        \"##立っ\",\n        \"修正\",\n        \"神話\",\n        \"災害\",\n        \"ダメージ\",\n        \"寄せ\",\n        \"ロゴ\",\n        \"来る\",\n        \"アニメーション\",\n        \"駐車\",\n        \"必殺\",\n        \"決意\",\n        \"性質\",\n        \"ロン\",\n        \"##ミス\",\n        \"モチーフ\",\n        \"##ライト\",\n        \"##ly\",\n        \"ポリ\",\n        \"武田\",\n        \"サル\",\n        \"会話\",\n        \"MS\",\n        \"コメ\",\n        \"沿岸\",\n        \"アタ\",\n        \"ハート\",\n        \"悪化\",\n        \"類似\",\n        \"##ens\",\n        \"扱う\",\n        \"##プレ\",\n        \"##稲田\",\n        \"脱退\",\n        \"##ルトン\",\n        \"たる\",\n        \"トヨ\",\n        \"保持\",\n        \"##az\",\n        \"明確\",\n        \"本当\",\n        \"68\",\n        \"##キア\",\n        \"修了\",\n        \"##ルター\",\n        \"ドラム\",\n        \"整理\",\n        \"ホイ\",\n        \"聞き\",\n        \"パーソナリティ\",\n        \"一致\",\n        \"##ミニ\",\n        \"##入り\",\n        \"アート\",\n        \"バラエ\",\n        \"MC\",\n        \"AS\",\n        \"タンパ\",\n        \"在学\",\n        \"##もり\",\n        \"両者\",\n        \"キン\",\n        \"曰く\",\n        \"1935\",\n        \"標高\",\n        \"コア\",\n        \"措置\",\n        \"ドラフト\",\n        \"81\",\n        \"早稲田\",\n        \"ステーション\",\n        \"シカ\",\n        \"単行\",\n        \"オペラ\",\n        \"佐賀\",\n        \"##ベット\",\n        \"##オス\",\n        \"##パート\",\n        \"02\",\n        \"銀河\",\n        \"##ない\",\n        \"1933\",\n        \"Go\",\n        \"芸人\",\n        \"様式\",\n        \"辞典\",\n        \"ヘンリー\",\n        \"違反\",\n        \"血液\",\n        \"##コー\",\n        \"止め\",\n        \"プロダクション\",\n        \"極めて\",\n        \"決まっ\",\n        \"起点\",\n        \"関与\",\n        \"##チス\",\n        \"小さい\",\n        \"メッセージ\",\n        \"公認\",\n        \"##ウェイ\",\n        \"大将\",\n        \"戦国\",\n        \"退職\",\n        \"勝負\",\n        \"1934\",\n        \"確定\",\n        \"講談\",\n        \"病気\",\n        \"跡地\",\n        \"エンター\",\n        \"圧倒\",\n        \"監視\",\n        \"上海\",\n        \"経緯\",\n        \"あらゆる\",\n        \"混乱\",\n        \"出会い\",\n        \"Su\",\n        \"振興\",\n        \"##つき\",\n        \"瀬戸\",\n        \"優先\",\n        \"74\",\n        \"数字\",\n        \"たび\",\n        \"回数\",\n        \"上陸\",\n        \"71\",\n        \"コレクション\",\n        \"テニス\",\n        \"パフォ\",\n        \"レスト\",\n        \"称さ\",\n        \"ギリシア\",\n        \"再度\",\n        \"会館\",\n        \"次男\",\n        \"対決\",\n        \"トライ\",\n        \"マイケル\",\n        \"当日\",\n        \"##越し\",\n        \"##シュタ\",\n        \"姿勢\",\n        \"とど\",\n        \"改め\",\n        \"予算\",\n        \"装着\",\n        \"1932\",\n        \"新規\",\n        \"Con\",\n        \"いえ\",\n        \"絵画\",\n        \"SC\",\n        \"放映\",\n        \"Windows\",\n        \"看護\",\n        \"リード\",\n        \"##レンス\",\n        \"モンゴル\",\n        \"82\",\n        \"古典\",\n        \"##ix\",\n        \"1928\",\n        \"づけ\",\n        \"異常\",\n        \"##ーナス\",\n        \"##テインメント\",\n        \"ラブ\",\n        \"大隊\",\n        \"加工\",\n        \"亡くなっ\",\n        \"利益\",\n        \"##フィック\",\n        \"##オー\",\n        \"たか\",\n        \"アレンジ\",\n        \"センチ\",\n        \"時計\",\n        \"発動\",\n        \"引き起こ\",\n        \"見せる\",\n        \"##ニャ\",\n        \"ライバル\",\n        \"まっ\",\n        \"以内\",\n        \"作者\",\n        \"てる\",\n        \"EX\",\n        \"遠征\",\n        \"印刷\",\n        \"激しい\",\n        \"##サイ\",\n        \"著書\",\n        \"差別\",\n        \"主力\",\n        \"木曜\",\n        \"組ん\",\n        \"輸出\",\n        \"支部\",\n        \"ナンバー\",\n        \"後方\",\n        \"フェル\",\n        \"##ld\",\n        \"##々木\",\n        \"ゼロ\",\n        \"容易\",\n        \"##どり\",\n        \"山梨\",\n        \"申請\",\n        \"通う\",\n        \"重視\",\n        \"あなた\",\n        \"##なし\",\n        \"98\",\n        \"鳥取\",\n        \"帰還\",\n        \"短い\",\n        \"生涯\",\n        \"デス\",\n        \"##直し\",\n        \"ジャケット\",\n        \"収集\",\n        \"書房\",\n        \"本体\",\n        \"##ージュ\",\n        \"団地\",\n        \"即位\",\n        \"しばらく\",\n        \"##上げる\",\n        \"開い\",\n        \"ガラス\",\n        \"ヴァン\",\n        \"##ore\",\n        \"石油\",\n        \"##シル\",\n        \"1929\",\n        \"戦線\",\n        \"ウィル\",\n        \"柔道\",\n        \"フィリピン\",\n        \"##ンバ\",\n        \"メロ\",\n        \"先輩\",\n        \"劇団\",\n        \"およそ\",\n        \"言及\",\n        \"外部\",\n        \"権力\",\n        \"誘導\",\n        \"関心\",\n        \"推薦\",\n        \"もっとも\",\n        \"上下\",\n        \"ストリート\",\n        \"##90\",\n        \"##プラ\",\n        \"違う\",\n        \"あき\",\n        \"滞在\",\n        \"小野\",\n        \"解除\",\n        \"北朝鮮\",\n        \"##ang\",\n        \"ボル\",\n        \"有力\",\n        \"##セット\",\n        \"##三郎\",\n        \"称号\",\n        \"##ッパー\",\n        \"木村\",\n        \"一員\",\n        \"1923\",\n        \"改札\",\n        \"不詳\",\n        \"測定\",\n        \"下部\",\n        \"ポート\",\n        \"先端\",\n        \"SU\",\n        \"##ial\",\n        \"##クソン\",\n        \"##らえ\",\n        \"トランス\",\n        \"ワイド\",\n        \"深く\",\n        \"保守\",\n        \"変換\",\n        \"Gr\",\n        \"##フィー\",\n        \"恋愛\",\n        \"##TR\",\n        \"FIFA\",\n        \"一家\",\n        \"04\",\n        \"北側\",\n        \"復興\",\n        \"05\",\n        \"コート\",\n        \"象徴\",\n        \"フリ\",\n        \"奴隷\",\n        \"問わ\",\n        \"イー\",\n        \"イスラエル\",\n        \"印象\",\n        \"とおり\",\n        \"##・デ\",\n        \"トヨタ\",\n        \"再現\",\n        \"私立\",\n        \"けい\",\n        \"##ツェ\",\n        \"Pr\",\n        \"1931\",\n        \"##チョ\",\n        \"東側\",\n        \"ディスク\",\n        \"##フォーム\",\n        \"スケート\",\n        \"子孫\",\n        \"リチャ\",\n        \"参謀\",\n        \"ジム\",\n        \"ブログ\",\n        \"信じ\",\n        \"依存\",\n        \"半ば\",\n        \"すら\",\n        \"さえ\",\n        \"球場\",\n        \"##回り\",\n        \"トム\",\n        \"学び\",\n        \"該当\",\n        \"1927\",\n        \"一体\",\n        \"過ごし\",\n        \"著名\",\n        \"##サイト\",\n        \"スカイ\",\n        \"させ\",\n        \"##たま\",\n        \"スラ\",\n        \"搭乗\",\n        \"1924\",\n        \"駆け\",\n        \"ニッ\",\n        \"アミ\",\n        \"スポンサー\",\n        \"振る\",\n        \"おこ\",\n        \"##oh\",\n        \"区分\",\n        \"デモ\",\n        \"ジェームズ\",\n        \"出発\",\n        \"千代\",\n        \"06\",\n        \"マガ\",\n        \"爆撃\",\n        \"ミラ\",\n        \"併設\",\n        \"インチ\",\n        \"楽団\",\n        \"証拠\",\n        \"##フス\",\n        \"空中\",\n        \"##ケン\",\n        \"除い\",\n        \"ショップ\",\n        \"蒸気\",\n        \"触れ\",\n        \"重ね\",\n        \"追放\",\n        \"##之助\",\n        \"白い\",\n        \"ひろ\",\n        \"出馬\",\n        \"ゴールデン\",\n        \"ローカル\",\n        \"かかる\",\n        \"費用\",\n        \"考慮\",\n        \"有限\",\n        \"ジャンル\",\n        \"火災\",\n        \"劇中\",\n        \"コンセプト\",\n        \"意思\",\n        \"III\",\n        \"プリン\",\n        \"オーディション\",\n        \"中野\",\n        \"黄色\",\n        \"##メイト\",\n        \"上部\",\n        \"ヒーロー\",\n        \"学ぶ\",\n        \"Be\",\n        \"敗退\",\n        \"道具\",\n        \"##ber\",\n        \"##んじ\",\n        \"##uc\",\n        \"気象\",\n        \"電動\",\n        \"##クタ\",\n        \"盛り\",\n        \"##GM\",\n        \"##ice\",\n        \"平安\",\n        \"メカ\",\n        \"交響\",\n        \"意図\",\n        \"##age\",\n        \"ジャズ\",\n        \"for\",\n        \"高松\",\n        \"##テッド\",\n        \"ミュージシャン\",\n        \"いけ\",\n        \"抱い\",\n        \"##ide\",\n        \"タッグ\",\n        \"出来事\",\n        \"侵入\",\n        \"黒い\",\n        \"下車\",\n        \"くれる\",\n        \"ハム\",\n        \"同月\",\n        \"太田\",\n        \"03\",\n        \"離婚\",\n        \"外見\",\n        \"打撃\",\n        \"フロント\",\n        \"戻り\",\n        \"##センス\",\n        \"##ss\",\n        \"##ボル\",\n        \"##べる\",\n        \"願い\",\n        \"ソン\",\n        \"170\",\n        \"国土\",\n        \"キック\",\n        \"ヒロイン\",\n        \"##EST\",\n        \"83\",\n        \"当該\",\n        \"メン\",\n        \"辞任\",\n        \"短編\",\n        \"##AA\",\n        \"##しみ\",\n        \"ゴールド\",\n        \"##ッシ\",\n        \"##ノス\",\n        \"##ナルド\",\n        \"プール\",\n        \"幼い\",\n        \"##たく\",\n        \"流通\",\n        \"ディズ\",\n        \"08\",\n        \"単純\",\n        \"もともと\",\n        \"不可\",\n        \"引っ\",\n        \"再会\",\n        \"複合\",\n        \"長年\",\n        \"直通\",\n        \"当主\",\n        \"リスナー\",\n        \"バイパス\",\n        \"GT\",\n        \"ファミリー\",\n        \"屋敷\",\n        \"##ラント\",\n        \"異なっ\",\n        \"最近\",\n        \"歌っ\",\n        \"ゴー\",\n        \"まち\",\n        \"ピン\",\n        \"ワイン\",\n        \"戦っ\",\n        \"##IL\",\n        \"学術\",\n        \"委託\",\n        \"入れる\",\n        \"##ST\",\n        \"ごう\",\n        \"##ンパス\",\n        \"修理\",\n        \"抑え\",\n        \"故障\",\n        \"コール\",\n        \"屋根\",\n        \"上り\",\n        \"En\",\n        \"最低\",\n        \"##ーマンス\",\n        \"##ライズ\",\n        \"クレジット\",\n        \"愛媛\",\n        \"東映\",\n        \"ノース\",\n        \"##ストロ\",\n        \"スコットランド\",\n        \"資源\",\n        \"マネージ\",\n        \"87\",\n        \"スパイ\",\n        \"許さ\",\n        \"探偵\",\n        \"直線\",\n        \"主体\",\n        \"タンパク\",\n        \"部品\",\n        \"にく\",\n        \"負担\",\n        \"トイ\",\n        \"##リット\",\n        \"思う\",\n        \"示さ\",\n        \"エディ\",\n        \"台風\",\n        \"1926\",\n        \"TR\",\n        \"チャールズ\",\n        \"盛ん\",\n        \"96\",\n        \"##向き\",\n        \"キャンプ\",\n        \"ドロ\",\n        \"保障\",\n        \"##ルズ\",\n        \"移り\",\n        \"250\",\n        \"通行\",\n        \"YouTube\",\n        \"代替\",\n        \"月刊\",\n        \"音源\",\n        \"シナリオ\",\n        \"##・マ\",\n        \"前期\",\n        \"##ドン\",\n        \"##立ち\",\n        \"犠牲\",\n        \"市内\",\n        \"##リル\",\n        \"文献\",\n        \"パフォーマンス\",\n        \"夫婦\",\n        \"AV\",\n        \"一環\",\n        \"抜け\",\n        \"##アイ\",\n        \"##one\",\n        \"92\",\n        \"起源\",\n        \"ませ\",\n        \"ユース\",\n        \"取り扱\",\n        \"モスクワ\",\n        \"効率\",\n        \"幼稚\",\n        \"自民\",\n        \"ディス\",\n        \"分岐\",\n        \"気持ち\",\n        \"##ブス\",\n        \"同級\",\n        \"ドライブ\",\n        \"突然\",\n        \"記し\",\n        \"食べる\",\n        \"##OK\",\n        \"攻略\",\n        \"nd\",\n        \"##ナス\",\n        \"ディレクター\",\n        \"84\",\n        \"##iz\",\n        \"天正\",\n        \"##ステル\",\n        \"怒り\",\n        \"ラウンド\",\n        \"当て\",\n        \"区画\",\n        \"到達\",\n        \"1925\",\n        \"SF\",\n        \"快速\",\n        \"入口\",\n        \"キャンパス\",\n        \"批評\",\n        \"突破\",\n        \"伝える\",\n        \"大橋\",\n        \"クラシック\",\n        \"##ヴァン\",\n        \"バラエティ\",\n        \"親友\",\n        \"発掘\",\n        \"##ジョ\",\n        \"##ネシア\",\n        \"ジェット\",\n        \"滋賀\",\n        \"漢字\",\n        \"700\",\n        \"自社\",\n        \"終わる\",\n        \"ポル\",\n        \"特性\",\n        \"関数\",\n        \"##ートン\",\n        \"##ザベ\",\n        \"中期\",\n        \"地理\",\n        \"##プター\",\n        \"##チェンジ\",\n        \"失わ\",\n        \"あろう\",\n        \"語り\",\n        \"言え\",\n        \"##ティス\",\n        \"報じ\",\n        \"スーツ\",\n        \"##サンド\",\n        \"信用\",\n        \"って\",\n        \"菓子\",\n        \"衣装\",\n        \"とる\",\n        \"もし\",\n        \"コスト\",\n        \"分解\",\n        \"育て\",\n        \"沿っ\",\n        \"##ft\",\n        \"Br\",\n        \"幅広\",\n        \"##NS\",\n        \"住居\",\n        \"ステークス\",\n        \"ウイ\",\n        \"パターン\",\n        \"ダーク\",\n        \"110\",\n        \"67\",\n        \"次々\",\n        \"##EM\",\n        \"援助\",\n        \"症状\",\n        \"入力\",\n        \"##ure\",\n        \"##ッケージ\",\n        \"ビー\",\n        \"マスコ\",\n        \"経路\",\n        \"レストラン\",\n        \"リチャード\",\n        \"温度\",\n        \"ポスト\",\n        \"今後\",\n        \"全域\",\n        \"南側\",\n        \"##ong\",\n        \"起こる\",\n        \"射撃\",\n        \"演技\",\n        \"聖書\",\n        \"ヴィル\",\n        \"訴訟\",\n        \"配備\",\n        \"ブラウン\",\n        \"合戦\",\n        \"基づき\",\n        \"##ッティ\",\n        \"ケーブル\",\n        \"##かす\",\n        \"前方\",\n        \"親王\",\n        \"##ージェ\",\n        \"伴っ\",\n        \"タンク\",\n        \"##ポール\",\n        \"##ith\",\n        \"学年\",\n        \"循環\",\n        \"マイクロ\",\n        \"山脈\",\n        \"発音\",\n        \"単に\",\n        \"おそ\",\n        \"##ンチン\",\n        \"CO\",\n        \"91\",\n        \"まる\",\n        \"研修\",\n        \"近鉄\",\n        \"春日\",\n        \"ディズニー\",\n        \"175\",\n        \"取り戻\",\n        \"当たり\",\n        \"パッケージ\",\n        \"ケイ\",\n        \"ホル\",\n        \"##ンマーク\",\n        \"期限\",\n        \"##KY\",\n        \"コンテ\",\n        \"デンマーク\",\n        \"解消\",\n        \"ビーム\",\n        \"観察\",\n        \"教員\",\n        \"処刑\",\n        \"ニッポン\",\n        \"並び\",\n        \"生じる\",\n        \"分裂\",\n        \"##ンジャ\",\n        \"無人\",\n        \"資産\",\n        \"ピエ\",\n        \"故郷\",\n        \"続編\",\n        \"線路\",\n        \"食事\",\n        \"取り入れ\",\n        \"包囲\",\n        \"日常\",\n        \"国防\",\n        \"なぜ\",\n        \"OS\",\n        \"会見\",\n        \"あたっ\",\n        \"出席\",\n        \"促進\",\n        \"ファンタ\",\n        \"##qu\",\n        \"事前\",\n        \"アブ\",\n        \"##PG\",\n        \"ジェイ\",\n        \"校長\",\n        \"天使\",\n        \"次ぐ\",\n        \"ライオン\",\n        \"スマート\",\n        \"1922\",\n        \"オプ\",\n        \"全面\",\n        \"たけ\",\n        \"行方\",\n        \"既存\",\n        \"ブック\",\n        \"閉店\",\n        \"##ミネ\",\n        \"ナポ\",\n        \"落とし\",\n        \"シカゴ\",\n        \"エンド\",\n        \"総督\",\n        \"松山\",\n        \"##フル\",\n        \"動産\",\n        \"##bo\",\n        \"借り\",\n        \"兼ね\",\n        \"##くま\",\n        \"抗議\",\n        \"メタル\",\n        \"犯人\",\n        \"建立\",\n        \"平野\",\n        \"英雄\",\n        \"議席\",\n        \"##下げ\",\n        \"89\",\n        \"接近\",\n        \"##UT\",\n        \"##ies\",\n        \"来日\",\n        \"##ニン\",\n        \"回収\",\n        \"##イナー\",\n        \"共有\",\n        \"気候\",\n        \"香川\",\n        \"##・カ\",\n        \"神宮\",\n        \"変形\",\n        \"推測\",\n        \"キャスト\",\n        \"領土\",\n        \"Co\",\n        \"下位\",\n        \"後ろ\",\n        \"進み\",\n        \"ピーター\",\n        \"みんな\",\n        \"文部\",\n        \"家臣\",\n        \"撤去\",\n        \"受験\",\n        \"折り\",\n        \"庁舎\",\n        \"177\",\n        \"診断\",\n        \"塗装\",\n        \"NT\",\n        \"##リズム\",\n        \"織田\",\n        \"訴え\",\n        \"退団\",\n        \"##受け\",\n        \"CH\",\n        \"司法\",\n        \"タワー\",\n        \"デー\",\n        \"代わっ\",\n        \"NP\",\n        \"さくら\",\n        \"つか\",\n        \"マルチ\",\n        \"クリー\",\n        \"101\",\n        \"角川\",\n        \"ファースト\",\n        \"ベルギー\",\n        \"もち\",\n        \"##クトル\",\n        \"ミッション\",\n        \"Se\",\n        \"##ペーン\",\n        \"任意\",\n        \"再編\",\n        \"読売\",\n        \"##っき\",\n        \"送ら\",\n        \"文明\",\n        \"マイナー\",\n        \"5000\",\n        \"##aw\",\n        \"1918\",\n        \"ゆえ\",\n        \"立っ\",\n        \"日記\",\n        \"水曜\",\n        \"上演\",\n        \"1919\",\n        \"定着\",\n        \"伝承\",\n        \"79\",\n        \"パソ\",\n        \"保安\",\n        \"肉体\",\n        \"##ちゃ\",\n        \"うる\",\n        \"ソニー\",\n        \"学区\",\n        \"避難\",\n        \"チェコ\",\n        \"決戦\",\n        \"マガジン\",\n        \"##須賀\",\n        \"##ite\",\n        \"総務\",\n        \"タクシー\",\n        \"ラム\",\n        \"##モア\",\n        \"閲覧\",\n        \"69\",\n        \"エクス\",\n        \"中島\",\n        \"93\",\n        \"周り\",\n        \"##ウルス\",\n        \"とて\",\n        \"観音\",\n        \"##man\",\n        \"所持\",\n        \"##ire\",\n        \"継い\",\n        \"トレード\",\n        \"働く\",\n        \"スキル\",\n        \"発明\",\n        \"##ポーター\",\n        \"ライセンス\",\n        \"インターチェンジ\",\n        \"地図\",\n        \"DJ\",\n        \"走る\",\n        \"##止め\",\n        \"スリー\",\n        \"簡単\",\n        \"在住\",\n        \"##ウッド\",\n        \"中隊\",\n        \"連覇\",\n        \"ナショナル\",\n        \"##回る\",\n        \"バレーボール\",\n        \"ノン\",\n        \"国有\",\n        \"##フェン\",\n        \"妖怪\",\n        \"送信\",\n        \"09\",\n        \"キュ\",\n        \"気づ\",\n        \"らしく\",\n        \"忘れ\",\n        \"##ary\",\n        \"##ust\",\n        \"出資\",\n        \"アマチュア\",\n        \"一連\",\n        \"最新\",\n        \"CP\",\n        \"前田\",\n        \"3000\",\n        \"後任\",\n        \"1921\",\n        \"功績\",\n        \"##66\",\n        \"フットボール\",\n        \"##アス\",\n        \"冒頭\",\n        \"でし\",\n        \"抱え\",\n        \"開店\",\n        \"##おう\",\n        \"怪我\",\n        \"ドキュ\",\n        \"ミリ\",\n        \"疑問\",\n        \"##ock\",\n        \"加わっ\",\n        \"双方\",\n        \"宝塚\",\n        \"##IP\",\n        \"特典\",\n        \"ML\",\n        \"LO\",\n        \"##ネマ\",\n        \"岡田\",\n        \"シリア\",\n        \"養成\",\n        \"占め\",\n        \"取扱\",\n        \"ファイナル\",\n        \"審議\",\n        \"造船\",\n        \"ショート\",\n        \"今回\",\n        \"スタン\",\n        \"火山\",\n        \"焼き\",\n        \"##OP\",\n        \"##なか\",\n        \"##つい\",\n        \"書記\",\n        \"##47\",\n        \"##しろ\",\n        \"不良\",\n        \"挿入\",\n        \"DS\",\n        \"ヤング\",\n        \"##シスコ\",\n        \"デル\",\n        \"SM\",\n        \"証言\",\n        \"した\",\n        \"LIVE\",\n        \"記号\",\n        \"出会っ\",\n        \"か所\",\n        \"##ヘン\",\n        \"130\",\n        \"ギャラ\",\n        \"いた\",\n        \"説得\",\n        \"##当たり\",\n        \"ビット\",\n        \"安打\",\n        \"FA\",\n        \"奪わ\",\n        \"かた\",\n        \"教皇\",\n        \"AK\",\n        \"修行\",\n        \"開館\",\n        \"財産\",\n        \"はじ\",\n        \"トー\",\n        \"攻め\",\n        \"##witter\",\n        \"独特\",\n        \"ボックス\",\n        \"イスラム\",\n        \"試作\",\n        \"Play\",\n        \"コンテン\",\n        \"AR\",\n        \"##アリー\",\n        \"##ジラ\",\n        \"##22\",\n        \"ON\",\n        \"助手\",\n        \"##まら\",\n        \"才能\",\n        \"ラスト\",\n        \"最強\",\n        \"バイオ\",\n        \"##oy\",\n        \"課題\",\n        \"示唆\",\n        \"##ug\",\n        \"宣伝\",\n        \"想定\",\n        \"演じる\",\n        \"海洋\",\n        \"##チア\",\n        \"原題\",\n        \"##ディングス\",\n        \"甲子\",\n        \"##プル\",\n        \"##ンジャー\",\n        \"怪獣\",\n        \"解析\",\n        \"シャル\",\n        \"変わら\",\n        \"フォード\",\n        \"ツー\",\n        \"天王\",\n        \"詩人\",\n        \"##ond\",\n        \"近畿\",\n        \"マレー\",\n        \"##ウォ\",\n        \"キャンペーン\",\n        \"用途\",\n        \"仕え\",\n        \"スロ\",\n        \"架空\",\n        \"Tr\",\n        \"##ニスト\",\n        \"ホー\",\n        \"ポップ\",\n        \"高級\",\n        \"降伏\",\n        \"ヤク\",\n        \"ガル\",\n        \"全線\",\n        \"移民\",\n        \"参考\",\n        \"マリオ\",\n        \"##33\",\n        \"##NN\",\n        \"フレーム\",\n        \"ざる\",\n        \"##ドロ\",\n        \"プロモ\",\n        \"実家\",\n        \"捨て\",\n        \"キャスター\",\n        \"越え\",\n        \"三角\",\n        \"##OD\",\n        \"ガイド\",\n        \"信長\",\n        \"##ゾン\",\n        \"ch\",\n        \"経過\",\n        \"素材\",\n        \"カテ\",\n        \"工作\",\n        \"ボーナス\",\n        \"##IA\",\n        \"チャレンジ\",\n        \"フィリップ\",\n        \"ラス\",\n        \"##WA\",\n        \"駆動\",\n        \"成分\",\n        \"認可\",\n        \"##ish\",\n        \"##ach\",\n        \"表彰\",\n        \"むら\",\n        \"厳しい\",\n        \"死者\",\n        \"除き\",\n        \"死刑\",\n        \"ポケ\",\n        \"フィンランド\",\n        \"北条\",\n        \"しょ\",\n        \"リスク\",\n        \"パソコン\",\n        \"属性\",\n        \"to\",\n        \"佐々木\",\n        \"広い\",\n        \"打点\",\n        \"##ル・\",\n        \"##ica\",\n        \"ブライ\",\n        \"評し\",\n        \"実装\",\n        \"大佐\",\n        \"たとえば\",\n        \"テキサス\",\n        \"将棋\",\n        \"He\",\n        \"選定\",\n        \"##ミック\",\n        \"大名\",\n        \"先頭\",\n        \"短縮\",\n        \"##ソー\",\n        \"のり\",\n        \"##tt\",\n        \"火曜\",\n        \"実績\",\n        \"あの\",\n        \"話す\",\n        \"士官\",\n        \"リアル\",\n        \"正面\",\n        \"退任\",\n        \"##ase\",\n        \"ひとり\",\n        \"New\",\n        \"ガイ\",\n        \"言える\",\n        \"後者\",\n        \"番地\",\n        \"別名\",\n        \"##se\",\n        \"ゲート\",\n        \"埋め\",\n        \"座席\",\n        \"##ライン\",\n        \"自主\",\n        \"ロイヤ\",\n        \"大野\",\n        \"宇都\",\n        \"男爵\",\n        \"キャプ\",\n        \"田村\",\n        \"カレッジ\",\n        \"固有\",\n        \"1914\",\n        \"味方\",\n        \"プレゼ\",\n        \"要塞\",\n        \"黄金\",\n        \"えき\",\n        \"ニー\",\n        \"扱わ\",\n        \"ユーロ\",\n        \"手掛け\",\n        \"融合\",\n        \"しも\",\n        \"チェンジ\",\n        \"AM\",\n        \"森林\",\n        \"カウ\",\n        \"##バラ\",\n        \"決める\",\n        \"##チル\",\n        \"題材\",\n        \"落語\",\n        \"衛生\",\n        \"セミ\",\n        \"ミッド\",\n        \"賞金\",\n        \"Ex\",\n        \"ハワイ\",\n        \"派生\",\n        \"並行\",\n        \"戦時\",\n        \"イラン\",\n        \"コミュニケーション\",\n        \"応用\",\n        \"掲げ\",\n        \"質問\",\n        \"無かっ\",\n        \"見解\",\n        \"防ぐ\",\n        \"プラット\",\n        \"相続\",\n        \"相模\",\n        \"入院\",\n        \"ウィーン\",\n        \"モル\",\n        \"歌唱\",\n        \"起こす\",\n        \"パーツ\",\n        \"創造\",\n        \"少将\",\n        \"大西\",\n        \"##バイス\",\n        \"北陸\",\n        \"図る\",\n        \"コンパ\",\n        \"台車\",\n        \"総理\",\n        \"メトロ\",\n        \"通る\",\n        \"保健\",\n        \"アシスタント\",\n        \"転じ\",\n        \"トレーニング\",\n        \"リオ\",\n        \"##当て\",\n        \"宇都宮\",\n        \"##・ス\",\n        \"158\",\n        \"勉強\",\n        \"Wor\",\n        \"##ational\",\n        \"近郊\",\n        \"粒子\",\n        \"##取る\",\n        \"マスク\",\n        \"倒し\",\n        \"SE\",\n        \"取り付け\",\n        \"##っくり\",\n        \"アルゼ\",\n        \"##ャン\",\n        \"人数\",\n        \"方言\",\n        \"トラブル\",\n        \"##・エ\",\n        \"##ace\",\n        \"やすく\",\n        \"恐怖\",\n        \"電波\",\n        \"師範\",\n        \"ウィン\",\n        \"スリ\",\n        \"歌う\",\n        \"上田\",\n        \"##レオ\",\n        \"エー\",\n        \"運航\",\n        \"厚生\",\n        \"浴び\",\n        \"運輸\",\n        \"##しま\",\n        \"出張\",\n        \"難しい\",\n        \"外務\",\n        \"近隣\",\n        \"巻き込ま\",\n        \"警視\",\n        \"キロメートル\",\n        \"回答\",\n        \"需要\",\n        \"ワイ\",\n        \"移植\",\n        \"ジャイ\",\n        \"UE\",\n        \"1912\",\n        \"ちゅう\",\n        \"端末\",\n        \"遺体\",\n        \"司教\",\n        \"一帯\",\n        \"140\",\n        \"ロケ\",\n        \"##カラ\",\n        \"レジ\",\n        \"少数\",\n        \"損傷\",\n        \"提示\",\n        \"Mus\",\n        \"駐屯\",\n        \"スライ\",\n        \"疾患\",\n        \"破り\",\n        \"地形\",\n        \"受け継\",\n        \"Twitter\",\n        \"いえる\",\n        \"郊外\",\n        \"開拓\",\n        \"ボン\",\n        \"封印\",\n        \"想い\",\n        \"##sh\",\n        \"176\",\n        \"AL\",\n        \"1900\",\n        \"しれ\",\n        \"ガード\",\n        \"取り組\",\n        \"ピンク\",\n        \"マリー\",\n        \"乗客\",\n        \"非難\",\n        \"例外\",\n        \"従業\",\n        \"##ヒー\",\n        \"アダ\",\n        \"若手\",\n        \"送る\",\n        \"広域\",\n        \"不満\",\n        \"##上がっ\",\n        \"##つける\",\n        \"降格\",\n        \"衝撃\",\n        \"捕虜\",\n        \"秀吉\",\n        \"事例\",\n        \"##イラー\",\n        \"##好き\",\n        \"主導\",\n        \"多摩\",\n        \"損害\",\n        \"持ち主\",\n        \"接し\",\n        \"売上\",\n        \"特集\",\n        \"関わっ\",\n        \"支え\",\n        \"戦力\",\n        \"低く\",\n        \"##わし\",\n        \"##ジュール\",\n        \"別れ\",\n        \"提唱\",\n        \"##らさ\",\n        \"救出\",\n        \"併せ\",\n        \"努力\",\n        \"1910\",\n        \"KO\",\n        \"当局\",\n        \"武将\",\n        \"祭り\",\n        \"勃発\",\n        \"正義\",\n        \"カフェ\",\n        \"終戦\",\n        \"とても\",\n        \"##ロジー\",\n        \"ノルウェー\",\n        \"国外\",\n        \"合唱\",\n        \"特技\",\n        \"##しん\",\n        \"##やく\",\n        \"暫定\",\n        \"##書き\",\n        \"最中\",\n        \"秘書\",\n        \"市川\",\n        \"##ェル\",\n        \"体系\",\n        \"##ory\",\n        \"1917\",\n        \"雇用\",\n        \"##tern\",\n        \"聖堂\",\n        \"アルゼンチン\",\n        \"夜間\",\n        \"MV\",\n        \"急速\",\n        \"足利\",\n        \"##KO\",\n        \"ローズ\",\n        \"行なっ\",\n        \"うま\",\n        \"連勝\",\n        \"エンタ\",\n        \"グロ\",\n        \"放つ\",\n        \"数々\",\n        \"反発\",\n        \"##48\",\n        \"つける\",\n        \"存続\",\n        \"民営\",\n        \"##ギュア\",\n        \"上級\",\n        \"未満\",\n        \"総称\",\n        \"##ook\",\n        \"役員\",\n        \"就職\",\n        \"青山\",\n        \"くらい\",\n        \"生存\",\n        \"##フラン\",\n        \"おも\",\n        \"しゅ\",\n        \"IN\",\n        \"マイク\",\n        \"慶長\",\n        \"若干\",\n        \"Ph\",\n        \"##ージー\",\n        \"コンテンツ\",\n        \"成田\",\n        \"要因\",\n        \"##ラ・\",\n        \"##UM\",\n        \"日々\",\n        \"栄養\",\n        \"わたり\",\n        \"合体\",\n        \"苦手\",\n        \"かける\",\n        \"ロール\",\n        \"##ove\",\n        \"ルイス\",\n        \"暴走\",\n        \"分校\",\n        \"町名\",\n        \"Vol\",\n        \"ポンド\",\n        \"ごく\",\n        \"北米\",\n        \"阻止\",\n        \"改編\",\n        \"##しゃ\",\n        \"空襲\",\n        \"パック\",\n        \"ファイター\",\n        \"現行\",\n        \"競争\",\n        \"西洋\",\n        \"友達\",\n        \"アレクサンド\",\n        \"商人\",\n        \"もらっ\",\n        \"ポン\",\n        \"Te\",\n        \"ヴェル\",\n        \"##ッキング\",\n        \"松平\",\n        \"クリスマス\",\n        \"周波\",\n        \"Dr\",\n        \"モール\",\n        \"海賊\",\n        \"##われ\",\n        \"描き\",\n        \"レーザー\",\n        \"他人\",\n        \"彫刻\",\n        \"成果\",\n        \"村上\",\n        \"小倉\",\n        \"サウス\",\n        \"CS\",\n        \"偶然\",\n        \"エレクト\",\n        \"##ナショナル\",\n        \"ゆき\",\n        \"##21\",\n        \"UEFA\",\n        \"山崎\",\n        \"##ークル\",\n        \"南海\",\n        \"二十\",\n        \"紛争\",\n        \"帰っ\",\n        \"中日\",\n        \"大宮\",\n        \"水素\",\n        \"##エー\",\n        \"07\",\n        \"軍隊\",\n        \"向かい\",\n        \"ベー\",\n        \"迎える\",\n        \"一貫\",\n        \"##ment\",\n        \"コムーネ\",\n        \"手がけ\",\n        \"97\",\n        \"関わる\",\n        \"中川\",\n        \"デザイナー\",\n        \"高田\",\n        \"会計\",\n        \"容疑\",\n        \"##入れる\",\n        \"トーマ\",\n        \"阪急\",\n        \"ウォー\",\n        \"三井\",\n        \"##St\",\n        \"フィギュア\",\n        \"及ぶ\",\n        \"かかっ\",\n        \"特許\",\n        \"がん\",\n        \"圧力\",\n        \"簡易\",\n        \"ゲル\",\n        \"バリ\",\n        \"日中\",\n        \"若者\",\n        \"ゾーン\",\n        \"##ワン\",\n        \"##int\",\n        \"ちなん\",\n        \"ガール\",\n        \"感謝\",\n        \"##ッセル\",\n        \"ウェスト\",\n        \"長女\",\n        \"##ai\",\n        \"女の子\",\n        \"BL\",\n        \"1913\",\n        \"ストライ\",\n        \"##ゲル\",\n        \"ヨー\",\n        \"上流\",\n        \"検出\",\n        \"##寄り\",\n        \"橋本\",\n        \"ウェブサイト\",\n        \"同僚\",\n        \"語る\",\n        \"ボクシング\",\n        \"切れ\",\n        \"Web\",\n        \"占める\",\n        \"##返す\",\n        \"表し\",\n        \"長谷\",\n        \"168\",\n        \"琉球\",\n        \"近づ\",\n        \"1911\",\n        \"サス\",\n        \"登山\",\n        \"騎兵\",\n        \"テープ\",\n        \"勲章\",\n        \"レスラー\",\n        \"師事\",\n        \"運賃\",\n        \"取ら\",\n        \"##ヨン\",\n        \"ビール\",\n        \"美しい\",\n        \"車線\",\n        \"##トー\",\n        \"並ん\",\n        \"立ち上げ\",\n        \"コントロール\",\n        \"アキ\",\n        \"##エフ\",\n        \"##VA\",\n        \"水戸\",\n        \"##ert\",\n        \"カム\",\n        \"雰囲\",\n        \"雰囲気\",\n        \"##44\",\n        \"オプション\",\n        \"したがっ\",\n        \"小川\",\n        \"##ick\",\n        \"倒す\",\n        \"騒動\",\n        \"てん\",\n        \"パネル\",\n        \"ポケモン\",\n        \"戦前\",\n        \"評議\",\n        \"Sc\",\n        \"マサ\",\n        \"##pe\",\n        \"##FL\",\n        \"Sch\",\n        \"読者\",\n        \"##イルド\",\n        \"市営\",\n        \"テル\",\n        \"レンズ\",\n        \"グレイ\",\n        \"開局\",\n        \"和田\",\n        \"レーダー\",\n        \"競輪\",\n        \"##・ド\",\n        \"ヘビー\",\n        \"レン\",\n        \"威力\",\n        \"五十\",\n        \"インドネシア\",\n        \"オフィス\",\n        \"高齢\",\n        \"And\",\n        \"家督\",\n        \"逃亡\",\n        \"CR\",\n        \"シンガポール\",\n        \"航海\",\n        \"ふく\",\n        \"任じ\",\n        \"一旦\",\n        \"##iss\",\n        \"サンタ\",\n        \"オリコン\",\n        \"上京\",\n        \"ショッピング\",\n        \"インディアン\",\n        \"学位\",\n        \"家康\",\n        \"打ち上げ\",\n        \"カロ\",\n        \"決議\",\n        \"構内\",\n        \"憧れ\",\n        \"Me\",\n        \"風景\",\n        \"##レード\",\n        \"権限\",\n        \"高山\",\n        \"延期\",\n        \"じゅ\",\n        \"ついに\",\n        \"##ツァ\",\n        \"この頃\",\n        \"救助\",\n        \"北方\",\n        \"コメディ\",\n        \"実用\",\n        \"修復\",\n        \"ベルト\",\n        \"改めて\",\n        \"うた\",\n        \"頻繁\",\n        \"コンクリート\",\n        \"ソース\",\n        \"招待\",\n        \"逆転\",\n        \"かい\",\n        \"まん\",\n        \"王朝\",\n        \"社団\",\n        \"##タウン\",\n        \"スミス\",\n        \"召喚\",\n        \"根拠\",\n        \"反映\",\n        \"打者\",\n        \"JAP\",\n        \"アサ\",\n        \"立つ\",\n        \"財務\",\n        \"HD\",\n        \"ホールディングス\",\n        \"出典\",\n        \"間違\",\n        \"保育\",\n        \"高原\",\n        \"官僚\",\n        \"署名\",\n        \"正月\",\n        \"##リフ\",\n        \"ジャーナ\",\n        \"Ad\",\n        \"165\",\n        \"坂本\",\n        \"引用\",\n        \"##ath\",\n        \"協同\",\n        \"マックス\",\n        \"やる\",\n        \"タイヤ\",\n        \"降り\",\n        \"全身\",\n        \"本店\",\n        \"##まえ\",\n        \"豊か\",\n        \"仕掛け\",\n        \"オーク\",\n        \"ベンチ\",\n        \"出産\",\n        \"##ッシャー\",\n        \"認める\",\n        \"相対\",\n        \"小山\",\n        \"応募\",\n        \"指し\",\n        \"ショット\",\n        \"気付\",\n        \"倒れ\",\n        \"削減\",\n        \"請求\",\n        \"ミュージカル\",\n        \"三振\",\n        \"接する\",\n        \"マラソン\",\n        \"あくま\",\n        \"告げ\",\n        \"1908\",\n        \"カンパ\",\n        \"船団\",\n        \"##エット\",\n        \"修士\",\n        \"海峡\",\n        \"アンダー\",\n        \"もらう\",\n        \"小さく\",\n        \"終結\",\n        \"トーマス\",\n        \"マニ\",\n        \"移っ\",\n        \"スカウト\",\n        \"医薬\",\n        \"勧め\",\n        \"質量\",\n        \"オーケ\",\n        \"ミル\",\n        \"##41\",\n        \"空母\",\n        \"排除\",\n        \"##スラ\",\n        \"トイレ\",\n        \"コミックス\",\n        \"豊富\",\n        \"放出\",\n        \"Ed\",\n        \"補給\",\n        \"函館\",\n        \"大島\",\n        \"当地\",\n        \"宮殿\",\n        \"供用\",\n        \"Sy\",\n        \"豊田\",\n        \"とら\",\n        \"目撃\",\n        \"東海道\",\n        \"##ジーランド\",\n        \"タッチ\",\n        \"療法\",\n        \"##ドウ\",\n        \"ジャー\",\n        \"大韓\",\n        \"繁殖\",\n        \"創作\",\n        \"老人\",\n        \"ニュ\",\n        \"ペア\",\n        \"航路\",\n        \"施さ\",\n        \"サイン\",\n        \"山陽\",\n        \"エドワード\",\n        \"al\",\n        \"中断\",\n        \"ニュージーランド\",\n        \"入門\",\n        \"コマンド\",\n        \"繰り広\",\n        \"旅団\",\n        \"横須賀\",\n        \"開放\",\n        \"パンチ\",\n        \"走り\",\n        \"動員\",\n        \"山下\",\n        \"中将\",\n        \"##イセン\",\n        \"マネージャー\",\n        \"オレンジ\",\n        \"喫し\",\n        \"ちょ\",\n        \"ボート\",\n        \"一郎\",\n        \"行事\",\n        \"ステップ\",\n        \"マップ\",\n        \"##レム\",\n        \"悪く\",\n        \"IT\",\n        \"国連\",\n        \"小松\",\n        \"##プレイ\",\n        \"##かける\",\n        \"ウッド\",\n        \"史料\",\n        \"行なわ\",\n        \"BGM\",\n        \"訪れる\",\n        \"おく\",\n        \"##pt\",\n        \"関わら\",\n        \"野村\",\n        \"##uk\",\n        \"##チック\",\n        \"カス\",\n        \"フー\",\n        \"プレゼント\",\n        \"メタ\",\n        \"岡崎\",\n        \"魚雷\",\n        \"本土\",\n        \"編纂\",\n        \"##フラ\",\n        \"イラク\",\n        \"いま\",\n        \"##九州\",\n        \"コロンビア\",\n        \"北九州\",\n        \"実況\",\n        \"撃破\",\n        \"挙げる\",\n        \"国籍\",\n        \"装飾\",\n        \"スタンド\",\n        \"ディーゼル\",\n        \"受信\",\n        \"##メンタ\",\n        \"IB\",\n        \"##久保\",\n        \"待ち\",\n        \"認知\",\n        \"出土\",\n        \"##ケード\",\n        \"##かく\",\n        \"##イラ\",\n        \"夫妻\",\n        \"制覇\",\n        \"半年\",\n        \"有料\",\n        \"閉じ\",\n        \"ネイ\",\n        \"##リダ\",\n        \"##・オ\",\n        \"ショック\",\n        \"JAPAN\",\n        \"あくまで\",\n        \"クリエ\",\n        \"##たび\",\n        \"東方\",\n        \"##oun\",\n        \"##99\",\n        \"##45\",\n        \"度々\",\n        \"浜松\",\n        \"変わる\",\n        \"意向\",\n        \"酵素\",\n        \"プロセス\",\n        \"覚え\",\n        \"三十\",\n        \"##ベン\",\n        \"一面\",\n        \"1915\",\n        \"わたる\",\n        \"ペット\",\n        \"地獄\",\n        \"##ーノ\",\n        \"セルビア\",\n        \"名乗っ\",\n        \"縮小\",\n        \"##切っ\",\n        \"Car\",\n        \"前日\",\n        \"Col\",\n        \"ツール\",\n        \"保管\",\n        \"##っかり\",\n        \"コンテスト\",\n        \"NC\",\n        \"義塾\",\n        \"エリザベ\",\n        \"基盤\",\n        \"語ら\",\n        \"補佐\",\n        \"ドリーム\",\n        \"嫌い\",\n        \"同行\",\n        \"心臓\",\n        \"主流\",\n        \"##ii\",\n        \"1907\",\n        \"チェーン\",\n        \"##テーション\",\n        \"シンガー\",\n        \"感覚\",\n        \"アルファ\",\n        \"魔女\",\n        \"炭素\",\n        \"##ヴィッド\",\n        \"インターナショナル\",\n        \"番線\",\n        \"量産\",\n        \"ねん\",\n        \"セー\",\n        \"##カリ\",\n        \"奉行\",\n        \"強調\",\n        \"踏み\",\n        \"大気\",\n        \"告白\",\n        \"瞬間\",\n        \"飼育\",\n        \"##スティバル\",\n        \"乗降\",\n        \"高野\",\n        \"落選\",\n        \"ふる\",\n        \"HP\",\n        \"放棄\",\n        \"125\",\n        \"##apan\",\n        \"ギア\",\n        \"クロー\",\n        \"ウラ\",\n        \"レンタル\",\n        \"遭遇\",\n        \"騎手\",\n        \"キャプテン\",\n        \"女神\",\n        \"三郎\",\n        \"無視\",\n        \"延伸\",\n        \"マド\",\n        \"避け\",\n        \"上場\",\n        \"式典\",\n        \"徹底\",\n        \"メモリ\",\n        \"積み\",\n        \"皇后\",\n        \"妨害\",\n        \"庭園\",\n        \"##レオン\",\n        \"171\",\n        \"ニック\",\n        \"配属\",\n        \"##ースター\",\n        \"配布\",\n        \"番台\",\n        \"破っ\",\n        \"鉱山\",\n        \"アリス\",\n        \"吉野\",\n        \"君主\",\n        \"##なう\",\n        \"MLB\",\n        \"名乗る\",\n        \"エキ\",\n        \"慶應\",\n        \"アナログ\",\n        \"バイク\",\n        \"##ivers\",\n        \"好意\",\n        \"OF\",\n        \"都合\",\n        \"##ガス\",\n        \"品種\",\n        \"##ネイ\",\n        \"##ence\",\n        \"-)\",\n        \"##ile\",\n        \"プロモーション\",\n        \"寄り\",\n        \"オスマン\",\n        \"ネオ\",\n        \"バレエ\",\n        \"渡る\",\n        \"正規\",\n        \"クール\",\n        \"ビュー\",\n        \"不安\",\n        \"伊達\",\n        \"加速\",\n        \"薩摩\",\n        \"##ロウ\",\n        \"控え\",\n        \"移し\",\n        \"偵察\",\n        \"フォーク\",\n        \"ヴァイオ\",\n        \"##むら\",\n        \"総会\",\n        \"切っ\",\n        \"艦長\",\n        \"飲み\",\n        \"魔術\",\n        \"人種\",\n        \"埋葬\",\n        \"ワー\",\n        \"講演\",\n        \"レディ\",\n        \"山地\",\n        \"##まれ\",\n        \"亡命\",\n        \"##61\",\n        \"倒さ\",\n        \"##ps\",\n        \"ブーム\",\n        \"戦術\",\n        \"削除\",\n        \"変動\",\n        \"突入\",\n        \"##ae\",\n        \"ヴァル\",\n        \"##っきり\",\n        \"あさ\",\n        \"リク\",\n        \"制し\",\n        \"検索\",\n        \"米軍\",\n        \"限界\",\n        \"フェア\",\n        \"不能\",\n        \"My\",\n        \"船舶\",\n        \"155\",\n        \"寄付\",\n        \"兼任\",\n        \"161\",\n        \"時刻\",\n        \"乗せ\",\n        \"守り\",\n        \"魔王\",\n        \"##わさ\",\n        \"##TC\",\n        \"休日\",\n        \"容姿\",\n        \"アトラン\",\n        \"ダニ\",\n        \"つれ\",\n        \"敗戦\",\n        \"日産\",\n        \"石井\",\n        \"山岳\",\n        \"ルーム\",\n        \"1906\",\n        \"AP\",\n        \"容量\",\n        \"UN\",\n        \"木造\",\n        \"DC\",\n        \"通貨\",\n        \"##EE\",\n        \"##ier\",\n        \"境内\",\n        \"予約\",\n        \"密度\",\n        \"王位\",\n        \"島根\",\n        \"ロイヤル\",\n        \"発覚\",\n        \"##28\",\n        \"弱い\",\n        \"諏訪\",\n        \"##上がり\",\n        \"墓地\",\n        \"前提\",\n        \"なくなっ\",\n        \"予測\",\n        \"考案\",\n        \"なれ\",\n        \"ないし\",\n        \"廃車\",\n        \"張り\",\n        \"ダウンロード\",\n        \"##ee\",\n        \"##DS\",\n        \"アラビア\",\n        \"ランプ\",\n        \"日立\",\n        \"1916\",\n        \"先駆\",\n        \"割合\",\n        \"三浦\",\n        \"担っ\",\n        \"##ラク\",\n        \"アラブ\",\n        \"評さ\",\n        \"##右衛門\",\n        \"900\",\n        \"オーナー\",\n        \"転向\",\n        \"##取ら\",\n        \"実践\",\n        \"後藤\",\n        \"不正\",\n        \"##クセン\",\n        \"回路\",\n        \"プレス\",\n        \"アプリケーション\",\n        \"水産\",\n        \"プロイセン\",\n        \"DNA\",\n        \"流域\",\n        \"遊び\",\n        \"天体\",\n        \"かね\",\n        \"激しく\",\n        \"フィル\",\n        \"##31\",\n        \"確率\",\n        \"##サウルス\",\n        \"入場\",\n        \"集まっ\",\n        \"##ime\",\n        \"オーケストラ\",\n        \"戦場\",\n        \"近藤\",\n        \"成り\",\n        \"カテゴ\",\n        \"リバ\",\n        \"奏者\",\n        \"直径\",\n        \"カップリング\",\n        \"毎回\",\n        \"壊滅\",\n        \"マツ\",\n        \"広がっ\",\n        \"バランス\",\n        \"魅力\",\n        \"種族\",\n        \"##35\",\n        \"改装\",\n        \"1909\",\n        \"東急\",\n        \"外観\",\n        \"##エラ\",\n        \"刑務\",\n        \"レール\",\n        \"総裁\",\n        \"157\",\n        \"スロー\",\n        \"陥っ\",\n        \"ボード\",\n        \"変える\",\n        \"審判\",\n        \"生き残\",\n        \"ヤード\",\n        \"公社\",\n        \"歌劇\",\n        \"動力\",\n        \"美濃\",\n        \"シド\",\n        \"維新\",\n        \"農民\",\n        \"講座\",\n        \"失い\",\n        \"イル\",\n        \"世話\",\n        \"所蔵\",\n        \"落下\",\n        \"消え\",\n        \"ほしい\",\n        \"##エム\",\n        \"##マイ\",\n        \"##AX\",\n        \"##キスタン\",\n        \"ユニバー\",\n        \"下し\",\n        \"地中\",\n        \"##アフ\",\n        \"外科\",\n        \"混合\",\n        \"おそらく\",\n        \"賛成\",\n        \"入賞\",\n        \"出店\",\n        \"臨床\",\n        \"cc\",\n        \"後輩\",\n        \"アポ\",\n        \"河内\",\n        \"##ont\",\n        \"##メンタリー\",\n        \"結ば\",\n        \"余儀\",\n        \"##グル\",\n        \"ハンター\",\n        \"会津\",\n        \"Ver\",\n        \"理想\",\n        \"テクノ\",\n        \"斎藤\",\n        \"フェスティバル\",\n        \"日野\",\n        \"室町\",\n        \"##KYO\",\n        \"##渡し\",\n        \"最小\",\n        \"流し\",\n        \"スイッチ\",\n        \"ブルース\",\n        \"三島\",\n        \"晩年\",\n        \"マンション\",\n        \"着手\",\n        \"博多\",\n        \"スコア\",\n        \"ニン\",\n        \"横断\",\n        \"領主\",\n        \"##ブロ\",\n        \"征服\",\n        \"##バーグ\",\n        \"当たっ\",\n        \"コンクール\",\n        \"##シオ\",\n        \"##IV\",\n        \"##とめ\",\n        \"La\",\n        \"成人\",\n        \"黒人\",\n        \"##ミル\",\n        \"ディア\",\n        \"ギル\",\n        \"謝罪\",\n        \"りゅう\",\n        \"##思議\",\n        \"宿泊\",\n        \"##メル\",\n        \"ストーン\",\n        \"福山\",\n        \"階段\",\n        \"##テス\",\n        \"数値\",\n        \"絶滅\",\n        \"##ペル\",\n        \"大谷\",\n        \"##付ける\",\n        \"フリードリ\",\n        \"りん\",\n        \"手伝\",\n        \"パーティー\",\n        \"復讐\",\n        \"独占\",\n        \"車内\",\n        \"隠れ\",\n        \"-』\",\n        \"初演\",\n        \"ガリ\",\n        \"もたらし\",\n        \"ラーメン\",\n        \"オレ\",\n        \"放っ\",\n        \"東宝\",\n        \"背中\",\n        \"売り上げ\",\n        \"叩き\",\n        \"環状\",\n        \"Par\",\n        \"選ぶ\",\n        \"リミ\",\n        \"大切\",\n        \"セブン\",\n        \"前線\",\n        \"小屋\",\n        \"妊娠\",\n        \"自称\",\n        \"配給\",\n        \"コーヒー\",\n        \"レビュー\",\n        \"##ハラ\",\n        \"フェリー\",\n        \"視点\",\n        \"主任\",\n        \"Man\",\n        \"通学\",\n        \"ドクター\",\n        \"墜落\",\n        \"抑制\",\n        \"##ニコ\",\n        \"誇る\",\n        \"ダービー\",\n        \"あわせ\",\n        \"図っ\",\n        \"着陸\",\n        \"##ッソ\",\n        \"##ケート\",\n        \"婦人\",\n        \"支流\",\n        \"重賞\",\n        \"##リヒ\",\n        \"on\",\n        \"逃れ\",\n        \"Joh\",\n        \"原理\",\n        \"百貨\",\n        \"陥落\",\n        \"内蔵\",\n        \"にくい\",\n        \"正解\",\n        \"武士\",\n        \"吹替\",\n        \"ボストン\",\n        \"##25\",\n        \"天才\",\n        \"ベネ\",\n        \"プレミアム\",\n        \"みや\",\n        \"天保\",\n        \"電源\",\n        \"ようやく\",\n        \"サークル\",\n        \"尽力\",\n        \"ドキュメンタリー\",\n        \"ゲイ\",\n        \"AN\",\n        \"##ium\",\n        \"159\",\n        \"##チャン\",\n        \"久保\",\n        \"文芸\",\n        \"警戒\",\n        \"公爵\",\n        \"交点\",\n        \"どんな\",\n        \"数え\",\n        \"ID\",\n        \"ハーフ\",\n        \"エンジニア\",\n        \"師匠\",\n        \"拘束\",\n        \"クラウ\",\n        \"TOKYO\",\n        \"置き換え\",\n        \"交際\",\n        \"旧制\",\n        \"観点\",\n        \"##ニオ\",\n        \"比例\",\n        \"Or\",\n        \"学名\",\n        \"真実\",\n        \"ルーマ\",\n        \"##エンス\",\n        \"SD\",\n        \"イリ\",\n        \"表題\",\n        \"##ドラ\",\n        \"##モス\",\n        \"##もん\",\n        \"##バード\",\n        \"##ノール\",\n        \"ノート\",\n        \"##TA\",\n        \"イェ\",\n        \"並ぶ\",\n        \"運命\",\n        \"##IX\",\n        \"IP\",\n        \"エージェ\",\n        \"教科\",\n        \"カプ\",\n        \"##フィール\",\n        \"ルーマニア\",\n        \"ジャーナリスト\",\n        \"World\",\n        \"##Station\",\n        \"##ハウ\",\n        \"Japan\",\n        \"アーム\",\n        \"ファー\",\n        \"気温\",\n        \"チップ\",\n        \"性的\",\n        \"推移\",\n        \"文章\",\n        \"##アップ\",\n        \"メス\",\n        \"乾燥\",\n        \"さいたま\",\n        \"CL\",\n        \"##がい\",\n        \"負っ\",\n        \"1905\",\n        \"ヘリコ\",\n        \"向き\",\n        \"##rom\",\n        \"じゅう\",\n        \"##ニックス\",\n        \"94\",\n        \"内務\",\n        \"失点\",\n        \"開き\",\n        \"座標\",\n        \"水系\",\n        \"青い\",\n        \"##TV\",\n        \"##・ク\",\n        \"##アニア\",\n        \"##美子\",\n        \"スティ\",\n        \"いろ\",\n        \"変わり\",\n        \"山頂\",\n        \"甲斐\",\n        \"任期\",\n        \"##はり\",\n        \"ナビ\",\n        \"リゾ\",\n        \"##掛ける\",\n        \"1897\",\n        \"野田\",\n        \"##テイ\",\n        \"ファンタジー\",\n        \"去っ\",\n        \"##ベニア\",\n        \"使える\",\n        \"体力\",\n        \"役場\",\n        \"間隔\",\n        \"アプ\",\n        \"浦和\",\n        \"武道\",\n        \"釣り\",\n        \"##ost\",\n        \"##フォン\",\n        \"とく\",\n        \"上杉\",\n        \"両国\",\n        \"避ける\",\n        \"スピン\",\n        \"ワーク\",\n        \"##ニカ\",\n        \"ラップ\",\n        \"荷物\",\n        \"パナ\",\n        \"不思議\",\n        \"種目\",\n        \"書く\",\n        \"引き継い\",\n        \"調理\",\n        \"ナチス\",\n        \"ラウ\",\n        \"牽引\",\n        \"##ネー\",\n        \"焼失\",\n        \"踊り\",\n        \"プロテ\",\n        \"和解\",\n        \"##リード\",\n        \"つもり\",\n        \"リト\",\n        \"##ound\",\n        \"酸素\",\n        \"水上\",\n        \"飾っ\",\n        \"内側\",\n        \"グラス\",\n        \"##ail\",\n        \"App\",\n        \"##ナイテッド\",\n        \"大津\",\n        \"調達\",\n        \"##BO\",\n        \"馬場\",\n        \"伊豆\",\n        \"藤田\",\n        \"死ぬ\",\n        \"囲ま\",\n        \"PlayStation\",\n        \"Fl\",\n        \"##IO\",\n        \"##ビリ\",\n        \"上手\",\n        \"力士\",\n        \"築い\",\n        \"ゴル\",\n        \"前回\",\n        \"フリードリヒ\",\n        \"上院\",\n        \"典型\",\n        \"捜索\",\n        \"同人\",\n        \"定員\",\n        \"物資\",\n        \"##ライター\",\n        \"襲わ\",\n        \"JC\",\n        \"リベ\",\n        \"1903\",\n        \"フロリダ\",\n        \"太字\",\n        \"熱帯\",\n        \"むしろ\",\n        \"安倍\",\n        \"##ical\",\n        \"濃度\",\n        \"珍しい\",\n        \"IM\",\n        \"##ux\",\n        \"双子\",\n        \"ターン\",\n        \"1896\",\n        \"##シュタイン\",\n        \"道場\",\n        \"実在\",\n        \"含ん\",\n        \"消し\",\n        \"紋章\",\n        \"調教\",\n        \"##ッスル\",\n        \"バカ\",\n        \"儀式\",\n        \"伝わる\",\n        \"刺激\",\n        \"歌舞\",\n        \"源氏\",\n        \"我々\",\n        \"やはり\",\n        \"バット\",\n        \"加賀\",\n        \"選考\",\n        \"せよう\",\n        \"ミシ\",\n        \"アラン\",\n        \"##38\",\n        \"##バイル\",\n        \"化合\",\n        \"確実\",\n        \"##oo\",\n        \"ツイン\",\n        \"保証\",\n        \"##日市\",\n        \"液体\",\n        \"##詰め\",\n        \"##ann\",\n        \"化石\",\n        \"無理\",\n        \"キル\",\n        \"プル\",\n        \"在位\",\n        \"##ビング\",\n        \"##TS\",\n        \"##チナ\",\n        \"プロト\",\n        \"##ウロ\",\n        \"前面\",\n        \"夕方\",\n        \"総長\",\n        \"ヘリコプター\",\n        \"##デア\",\n        \"ゲージ\",\n        \"叔父\",\n        \"表紙\",\n        \"鹿島\",\n        \"##セロ\",\n        \"近江\",\n        \"レーシング\",\n        \"対照\",\n        \"105\",\n        \"スポット\",\n        \"リズム\",\n        \"介し\",\n        \"重力\",\n        \"Ser\",\n        \"愛し\",\n        \"シルバー\",\n        \"喧嘩\",\n        \"##かん\",\n        \"出入\",\n        \"##UE\",\n        \"プラザ\",\n        \"予告\",\n        \"神田\",\n        \"五輪\",\n        \"人格\",\n        \"下院\",\n        \"狙っ\",\n        \"##ロフ\",\n        \"##isc\",\n        \"##ベース\",\n        \"##さん\",\n        \"##テク\",\n        \"##ern\",\n        \"フィート\",\n        \"尽く\",\n        \"部族\",\n        \"検察\",\n        \"無効\",\n        \"軽量\",\n        \"##カンド\",\n        \"チュ\",\n        \"はら\",\n        \"エリザベス\",\n        \"捕らえ\",\n        \"キム\",\n        \"活発\",\n        \"天神\",\n        \"皮膚\",\n        \"青春\",\n        \"##リアル\",\n        \"##ウィン\",\n        \"パロ\",\n        \"南方\",\n        \"コウ\",\n        \"ナン\",\n        \"同等\",\n        \"##ax\",\n        \"プログラ\",\n        \"チェック\",\n        \"有機\",\n        \"Wh\",\n        \"明日\",\n        \"空手\",\n        \"出撃\",\n        \"コーラス\",\n        \"ダイヤモンド\",\n        \"クルー\",\n        \"海戦\",\n        \"1890\",\n        \"下旬\",\n        \"読む\",\n        \"##・コ\",\n        \"欧米\",\n        \"バイエル\",\n        \"調べ\",\n        \"山中\",\n        \"看板\",\n        \"信濃\",\n        \"宮廷\",\n        \"職人\",\n        \"楽章\",\n        \"ゆく\",\n        \"元気\",\n        \"町内\",\n        \"すぎる\",\n        \"同意\",\n        \"まったく\",\n        \"牧場\",\n        \"##いち\",\n        \"室内\",\n        \"電化\",\n        \"人事\",\n        \"##ットー\",\n        \"主役\",\n        \"1500\",\n        \"1901\",\n        \"制服\",\n        \"品質\",\n        \"交戦\",\n        \"懸念\",\n        \"演説\",\n        \"論理\",\n        \"##ミネート\",\n        \"面白\",\n        \"白人\",\n        \"169\",\n        \"校名\",\n        \"考古\",\n        \"業績\",\n        \"乗り入れ\",\n        \"ユナイテッド\",\n        \"##ビュ\",\n        \"ラリー\",\n        \"正しい\",\n        \"##ザーズ\",\n        \"##楽部\",\n        \"甲板\",\n        \"##ぐる\",\n        \"ビーチ\",\n        \"オオ\",\n        \"グレート\",\n        \"アベ\",\n        \"達する\",\n        \"長編\",\n        \"敵対\",\n        \"構え\",\n        \"ライター\",\n        \"ABC\",\n        \"天気\",\n        \"##orm\",\n        \"三木\",\n        \"公国\",\n        \"福田\",\n        \"電機\",\n        \"ミラー\",\n        \"ターボ\",\n        \"##落と\",\n        \"外れ\",\n        \"なき\",\n        \"内戦\",\n        \"立地\",\n        \"車庫\",\n        \"167\",\n        \"アーケード\",\n        \"##なく\",\n        \"シアター\",\n        \"ハイン\",\n        \"大坂\",\n        \"心配\",\n        \"##回っ\",\n        \"周期\",\n        \"115\",\n        \"倶楽部\",\n        \"重複\",\n        \"NBA\",\n        \"##フランシスコ\",\n        \"##アフリカ\",\n        \"シネマ\",\n        \"高め\",\n        \"配下\",\n        \"気筒\",\n        \"阿部\",\n        \"首位\",\n        \"キス\",\n        \"要望\",\n        \"##ash\",\n        \"教団\",\n        \"ティー\",\n        \"##オル\",\n        \"DD\",\n        \"##ドイツ\",\n        \"ダイナ\",\n        \"人権\",\n        \"ジョーンズ\",\n        \"スル\",\n        \"セン\",\n        \"付与\",\n        \"##ンガー\",\n        \"WW\",\n        \"GO\",\n        \"アリーナ\",\n        \"アダム\",\n        \"ムーン\",\n        \"会談\",\n        \"高架\",\n        \"##ナント\",\n        \"サンフランシスコ\",\n        \"レイン\",\n        \"吉川\",\n        \"プレート\",\n        \"勝手\",\n        \"フォース\",\n        \"RE\",\n        \"しり\",\n        \"担う\",\n        \"シャン\",\n        \"あん\",\n        \"ゴム\",\n        \"##39\",\n        \"季節\",\n        \"ピク\",\n        \"見な\",\n        \"アルコール\",\n        \"ストア\",\n        \"土佐\",\n        \"結論\",\n        \"##ズル\",\n        \"学長\",\n        \"インスト\",\n        \"出会う\",\n        \"NTT\",\n        \"贈ら\",\n        \"アルバイト\",\n        \"クイーン\",\n        \"侵略\",\n        \"本項\",\n        \"1904\",\n        \"バーン\",\n        \"解雇\",\n        \"身分\",\n        \"##ョウ\",\n        \"サウ\",\n        \"稼働\",\n        \"被災\",\n        \"##32\",\n        \"砲撃\",\n        \"純粋\",\n        \"勤め\",\n        \"ヘイ\",\n        \"進める\",\n        \"##67\",\n        \"コラボレーション\",\n        \"体操\",\n        \"南アフリカ\",\n        \"全般\",\n        \"学問\",\n        \"山城\",\n        \"昆虫\",\n        \"ロッテ\",\n        \"三河\",\n        \"135\",\n        \"買っ\",\n        \"みる\",\n        \"参入\",\n        \"条例\",\n        \"筆頭\",\n        \"##oft\",\n        \"後年\",\n        \"飯田\",\n        \"##ーバー\",\n        \"##ニオン\",\n        \"ロウ\",\n        \"##セイ\",\n        \"退社\",\n        \"アグ\",\n        \"京阪\",\n        \"広報\",\n        \"起こり\",\n        \"回想\",\n        \"水中\",\n        \"けど\",\n        \"抱き\",\n        \"カンパニー\",\n        \"アーカイ\",\n        \"##ool\",\n        \"祖母\",\n        \"近衛\",\n        \"ナレーション\",\n        \"付ける\",\n        \"エフ\",\n        \"渡し\",\n        \"ノミネート\",\n        \"込め\",\n        \"圧縮\",\n        \"水道\",\n        \"創建\",\n        \"監修\",\n        \"満州\",\n        \"称する\",\n        \"読ん\",\n        \"集会\",\n        \"青木\",\n        \"ブルガ\",\n        \"無事\",\n        \"##ram\",\n        \"かみ\",\n        \"きれ\",\n        \"闘争\",\n        \"司馬\",\n        \"著者\",\n        \"大山\",\n        \"最古\",\n        \"##son\",\n        \"褐色\",\n        \"センチメートル\",\n        \"ロマン\",\n        \"りょう\",\n        \"レスリング\",\n        \"役者\",\n        \"ナポレオン\",\n        \"事典\",\n        \"ふじ\",\n        \"事項\",\n        \"歌舞伎\",\n        \"行使\",\n        \"野菜\",\n        \"飲食\",\n        \"##エア\",\n        \"##ロイド\",\n        \"後部\",\n        \"##・パ\",\n        \"代行\",\n        \"初戦\",\n        \"数十\",\n        \"今作\",\n        \"就い\",\n        \"スーパ\",\n        \"電池\",\n        \"##バーン\",\n        \"史跡\",\n        \"デッキ\",\n        \"大塚\",\n        \"毛利\",\n        \"##ガース\",\n        \"作画\",\n        \"##ina\",\n        \"建国\",\n        \"配慮\",\n        \"将校\",\n        \"顧客\",\n        \"ガールズ\",\n        \"食料\",\n        \"姫路\",\n        \"巡洋\",\n        \"大衆\",\n        \"##太子\",\n        \"##ずる\",\n        \"ヘリ\",\n        \"喪失\",\n        \"診療\",\n        \"緑色\",\n        \"婚約\",\n        \"シグ\",\n        \"EP\",\n        \"隊長\",\n        \"ED\",\n        \"通勤\",\n        \"ジョンソン\",\n        \"コネ\",\n        \"降板\",\n        \"カスタ\",\n        \"辞職\",\n        \"中盤\",\n        \"模型\",\n        \"ペース\",\n        \"##しかっ\",\n        \"AD\",\n        \"下流\",\n        \"追っ\",\n        \"述べる\",\n        \"乗員\",\n        \"ヒトラー\",\n        \"バッ\",\n        \"##やす\",\n        \"恒星\",\n        \"##ローズ\",\n        \"コンテナ\",\n        \"単語\",\n        \"定める\",\n        \"##コース\",\n        \"長岡\",\n        \"整数\",\n        \"Love\",\n        \"はっきり\",\n        \"モバイル\",\n        \"##づけ\",\n        \"いれ\",\n        \"1902\",\n        \"椅子\",\n        \"車種\",\n        \"##五郎\",\n        \"ジャクソン\",\n        \"##amp\",\n        \"##ツィア\",\n        \"疑い\",\n        \"##プレス\",\n        \"客車\",\n        \"ずっと\",\n        \"ガソ\",\n        \"しゅう\",\n        \"但し\",\n        \"施し\",\n        \"眼鏡\",\n        \"##ガニ\",\n        \"川口\",\n        \"##ズミ\",\n        \"大公\",\n        \"ロマ\",\n        \"人材\",\n        \"決して\",\n        \"言動\",\n        \"日光\",\n        \"薬物\",\n        \"ケー\",\n        \"OP\",\n        \"松竹\",\n        \"##デター\",\n        \"EC\",\n        \"台詞\",\n        \"外側\",\n        \"前者\",\n        \"操る\",\n        \"発し\",\n        \"高木\",\n        \"プラットフォーム\",\n        \"倉庫\",\n        \"ファル\",\n        \"地面\",\n        \"認証\",\n        \"次郎\",\n        \"分間\",\n        \"グラフィック\",\n        \"MP\",\n        \"グレード\",\n        \"##ハイム\",\n        \"ブー\",\n        \"講義\",\n        \"名鉄\",\n        \"##ーニャ\",\n        \"法的\",\n        \"ジャイアン\",\n        \"エミ\",\n        \"救急\",\n        \"##ッピー\",\n        \"おき\",\n        \"抜き\",\n        \"断念\",\n        \"漁業\",\n        \"肖像\",\n        \"結晶\",\n        \"##mp\",\n        \"広がる\",\n        \"予防\",\n        \"透明\",\n        \"##ear\",\n        \"##着い\",\n        \"きり\",\n        \"走っ\",\n        \"##ペラ\",\n        \"学級\",\n        \"##37\",\n        \"運河\",\n        \"Comp\",\n        \"介入\",\n        \"ガソリン\",\n        \"ジョージア\",\n        \"もり\",\n        \"##打ち\",\n        \"土木\",\n        \"##がし\",\n        \"福音\",\n        \"こく\",\n        \"##まし\",\n        \"はるか\",\n        \"IV\",\n        \"住み\",\n        \"##RC\",\n        \"##ばさ\",\n        \"ミドル\",\n        \"出生\",\n        \"高崎\",\n        \"僅か\",\n        \"神殿\",\n        \"ならび\",\n        \"##ダイ\",\n        \"ヤマト\",\n        \"歯科\",\n        \"分かっ\",\n        \"官房\",\n        \"スズ\",\n        \"探検\",\n        \"受章\",\n        \"ジェネ\",\n        \"リゾート\",\n        \"チョコ\",\n        \"従軍\",\n        \"年次\",\n        \"挟ん\",\n        \"ミュン\",\n        \"確か\",\n        \"大蔵\",\n        \"盛岡\",\n        \"生きる\",\n        \"東武\",\n        \"長らく\",\n        \"外野\",\n        \"挙行\",\n        \"##捨て\",\n        \"天井\",\n        \"支社\",\n        \"マルクス\",\n        \"松田\",\n        \"##シエ\",\n        \"##ネン\",\n        \"きょ\",\n        \"カントリー\",\n        \"商号\",\n        \"管弦\",\n        \"フィラ\",\n        \"在任\",\n        \"個別\",\n        \"滅亡\",\n        \"##INE\",\n        \"貸し\",\n        \"##オケ\",\n        \"違っ\",\n        \"ウェル\",\n        \"島津\",\n        \"##しき\",\n        \"##ウェル\",\n        \"歩行\",\n        \"##・ハ\",\n        \"##Hz\",\n        \"無限\",\n        \"##are\",\n        \"1898\",\n        \"真っ\",\n        \"スターズ\",\n        \"みず\",\n        \"ゾン\",\n        \"ミステ\",\n        \"死体\",\n        \"統括\",\n        \"フロー\",\n        \"##ve\",\n        \"NEW\",\n        \"vs\",\n        \"##36\",\n        \"SO\",\n        \"大変\",\n        \"通路\",\n        \"##ぼし\",\n        \"チベット\",\n        \"復元\",\n        \"LOVE\",\n        \"検証\",\n        \"NA\",\n        \"ジー\",\n        \"救援\",\n        \"シンボル\",\n        \"照明\",\n        \"##ージャ\",\n        \"騎乗\",\n        \"##らしい\",\n        \"COM\",\n        \"ポケット\",\n        \"細川\",\n        \"覚醒\",\n        \"序盤\",\n        \"##ナップ\",\n        \"救う\",\n        \"王立\",\n        \"##ton\",\n        \"千代田\",\n        \"Blu\",\n        \"シェア\",\n        \"公務\",\n        \"増大\",\n        \"冬季\",\n        \"専属\",\n        \"チャンス\",\n        \"重傷\",\n        \"理学\",\n        \"開く\",\n        \"名詞\",\n        \"UFC\",\n        \"そば\",\n        \"バイエルン\",\n        \"農林\",\n        \"Lin\",\n        \"大尉\",\n        \"##ビジョン\",\n        \"コイン\",\n        \"半数\",\n        \"クレイ\",\n        \"藤井\",\n        \"バージニア\",\n        \"エンタテインメント\",\n        \"がち\",\n        \"優しい\",\n        \"長谷川\",\n        \"##馴染\",\n        \"イースト\",\n        \"主宰\",\n        \"##old\",\n        \"受容\",\n        \"対処\",\n        \"目覚\",\n        \"##リム\",\n        \"##ドー\",\n        \"PV\",\n        \"寛永\",\n        \"降下\",\n        \"新築\",\n        \"併用\",\n        \"全部\",\n        \"立体\",\n        \"##27\",\n        \"暗号\",\n        \"みどり\",\n        \"セーブ\",\n        \"民俗\",\n        \"返還\",\n        \"起動\",\n        \"##hy\",\n        \"カート\",\n        \"繊維\",\n        \"##24\",\n        \"キーボード\",\n        \"海水\",\n        \"路面\",\n        \"討ち\",\n        \"同国\",\n        \"##ばす\",\n        \"牡馬\",\n        \"金額\",\n        \"命中\",\n        \"##ズマ\",\n        \"GI\",\n        \"敷設\",\n        \"マジック\",\n        \"衰退\",\n        \"1899\",\n        \"砂漠\",\n        \"Mac\",\n        \"教養\",\n        \"耐え\",\n        \"黒田\",\n        \"東南\",\n        \"現状\",\n        \"ダル\",\n        \"早い\",\n        \"Inst\",\n        \"論争\",\n        \"##ス・\",\n        \"ドメ\",\n        \"元禄\",\n        \"東大\",\n        \"スクリーン\",\n        \"##ction\",\n        \"トウ\",\n        \"改組\",\n        \"##HI\",\n        \"上がっ\",\n        \"出雲\",\n        \"海兵\",\n        \"ブルガリア\",\n        \"AAA\",\n        \"##テネ\",\n        \"##引き\",\n        \"Rec\",\n        \"大好き\",\n        \"ライナー\",\n        \"同作\",\n        \"回り\",\n        \"みち\",\n        \"歌謡\",\n        \"アタック\",\n        \"扱っ\",\n        \"rd\",\n        \"本種\",\n        \"Music\",\n        \"##ワール\",\n        \"集める\",\n        \"##ヴェル\",\n        \"##モリ\",\n        \"どれ\",\n        \"反射\",\n        \"細菌\",\n        \"改築\",\n        \"大い\",\n        \"撃墜\",\n        \"洪水\",\n        \"たびたび\",\n        \"##揚げ\",\n        \"##ox\",\n        \"##act\",\n        \"##ノイ\",\n        \"ゴジラ\",\n        \"上回る\",\n        \"抗争\",\n        \"松井\",\n        \"沈没\",\n        \"##左衛門\",\n        \"無し\",\n        \"##iel\",\n        \"##ニョ\",\n        \"ウォーター\",\n        \"汚染\",\n        \"発症\",\n        \"データベース\",\n        \"荒川\",\n        \"##シュー\",\n        \"住人\",\n        \"併合\",\n        \"EM\",\n        \"明石\",\n        \"短く\",\n        \"呼吸\",\n        \"John\",\n        \"こだ\",\n        \"グア\",\n        \"しかも\",\n        \"インテ\",\n        \"ライヴ\",\n        \"##ics\",\n        \"カラオケ\",\n        \"流用\",\n        \"滑走\",\n        \"特化\",\n        \"評判\",\n        \"##クトリア\",\n        \"施工\",\n        \"##ノフ\",\n        \"##リエーション\",\n        \"特異\",\n        \"親子\",\n        \"石田\",\n        \"シュート\",\n        \"マンガ\",\n        \"ヴェネ\",\n        \"ラッシュ\",\n        \"尾張\",\n        \"統制\",\n        \"##ank\",\n        \"##ron\",\n        \"みなさ\",\n        \"余り\",\n        \"ブリッジ\",\n        \"クリエイ\",\n        \"投与\",\n        \"もん\",\n        \"##PER\",\n        \"##au\",\n        \"パーティ\",\n        \"##stem\",\n        \"BM\",\n        \"##リティー\",\n        \"おう\",\n        \"精霊\",\n        \"ホイール\",\n        \"着工\",\n        \"##込め\",\n        \"1873\",\n        \"ボラン\",\n        \"1871\",\n        \"奨励\",\n        \"監査\",\n        \"切り替え\",\n        \"歌い\",\n        \"浅草\",\n        \"DE\",\n        \"##コモ\",\n        \"##ニズム\",\n        \"##ヘルム\",\n        \"GR\",\n        \"or\",\n        \"##land\",\n        \"筑波\",\n        \"##ろん\",\n        \"可愛\",\n        \"##・ディ\",\n        \"##ッポ\",\n        \"##リンズ\",\n        \"ハロ\",\n        \"モニ\",\n        \"従い\",\n        \"東芝\",\n        \"模し\",\n        \"標的\",\n        \"かず\",\n        \"カレー\",\n        \"VS\",\n        \"##ラト\",\n        \"シミュ\",\n        \"覆わ\",\n        \"公益\",\n        \"恐竜\",\n        \"##王子\",\n        \"118\",\n        \"生かし\",\n        \"芸名\",\n        \"サンド\",\n        \"盗塁\",\n        \"りつ\",\n        \"拳銃\",\n        \"幅広い\",\n        \"バード\",\n        \"##リラ\",\n        \"幼馴染\",\n        \"原料\",\n        \"見舞\",\n        \"欲しい\",\n        \"フォル\",\n        \"大地\",\n        \"治安\",\n        \"行列\",\n        \"株主\",\n        \"セントラル\",\n        \"中等\",\n        \"##49\",\n        \"水泳\",\n        \"奪い\",\n        \"深刻\",\n        \"MO\",\n        \"年末\",\n        \"クエスト\",\n        \"インディア\",\n        \"住友\",\n        \"有利\",\n        \"##69\",\n        \"##att\",\n        \"中核\",\n        \"面し\",\n        \"##シェル\",\n        \"河口\",\n        \"討伐\",\n        \"大田\",\n        \"ヨハン\",\n        \"配列\",\n        \"省略\",\n        \"伸ばし\",\n        \"##メラ\",\n        \"Live\",\n        \"##キュー\",\n        \"350\",\n        \"銀座\",\n        \"同市\",\n        \"本町\",\n        \"##どう\",\n        \"SA\",\n        \"楽天\",\n        \"##EO\",\n        \"##ンジェ\",\n        \"##せん\",\n        \"殆ど\",\n        \"ストロ\",\n        \"##張り\",\n        \"ママ\",\n        \"正教\",\n        \"##ジュアル\",\n        \"サンデー\",\n        \"尊敬\",\n        \"##コロ\",\n        \"口径\",\n        \"携わっ\",\n        \"させる\",\n        \"水平\",\n        \"##フスキー\",\n        \"クラン\",\n        \"振動\",\n        \"支払い\",\n        \"緩和\",\n        \"こな\",\n        \"グッズ\",\n        \"##ムス\",\n        \"熊野\",\n        \"##ジメント\",\n        \"リトル\",\n        \"幕末\",\n        \"早期\",\n        \"エレベ\",\n        \"小田原\",\n        \"タイガース\",\n        \"ジン\",\n        \"本物\",\n        \"傍ら\",\n        \"八王子\",\n        \"商工\",\n        \"報酬\",\n        \"就航\",\n        \"新作\",\n        \"グローバル\",\n        \"あや\",\n        \"ほん\",\n        \"佐世\",\n        \"残留\",\n        \"港湾\",\n        \"至ら\",\n        \"ドレス\",\n        \"ミズ\",\n        \"わかる\",\n        \"分散\",\n        \"専念\",\n        \"うまく\",\n        \"捕手\",\n        \"佐世保\",\n        \"誘拐\",\n        \"クロア\",\n        \"メアリー\",\n        \"##AND\",\n        \"国務\",\n        \"残す\",\n        \"##グロ\",\n        \"ガーデン\",\n        \"順次\",\n        \"忍者\",\n        \"##ゆき\",\n        \"イチ\",\n        \"関節\",\n        \"メニュー\",\n        \"退役\",\n        \"ミネ\",\n        \"##29\",\n        \"RPG\",\n        \"ボウ\",\n        \"聞く\",\n        \"しろ\",\n        \"小島\",\n        \"##ヴィス\",\n        \"クリーム\",\n        \"バンダ\",\n        \"大輔\",\n        \"##コス\",\n        \"だん\",\n        \"豊臣\",\n        \"##ンプル\",\n        \"ヴァイオリン\",\n        \"化粧\",\n        \"ピー\",\n        \"樹立\",\n        \"ギタ\",\n        \"ラジ\",\n        \"##ゼフ\",\n        \"朝廷\",\n        \"##・バ\",\n        \"獅子\",\n        \"Intern\",\n        \"固め\",\n        \"変異\",\n        \"##モニー\",\n        \"問い\",\n        \"検定\",\n        \"##TER\",\n        \"##AZ\",\n        \"イヤー\",\n        \"管区\",\n        \"つながっ\",\n        \"ソル\",\n        \"フード\",\n        \"牝馬\",\n        \"##ッヒ\",\n        \"セカンド\",\n        \"交易\",\n        \"封じ\",\n        \"常務\",\n        \"ビン\",\n        \"進歩\",\n        \"左翼\",\n        \"丘陵\",\n        \"当然\",\n        \"友好\",\n        \"大久保\",\n        \"中退\",\n        \"人称\",\n        \"BOX\",\n        \"満たす\",\n        \"厳しく\",\n        \"手続き\",\n        \"##les\",\n        \"果実\",\n        \"後日\",\n        \"El\",\n        \"解任\",\n        \"窓口\",\n        \"鑑賞\",\n        \"定年\",\n        \"異名\",\n        \"失う\",\n        \"題し\",\n        \"ストック\",\n        \"シャルル\",\n        \"ユニバーサル\",\n        \"住所\",\n        \"ダニエル\",\n        \"招い\",\n        \"体内\",\n        \"##ッセン\",\n        \"済み\",\n        \"もたらす\",\n        \"上げる\",\n        \"推理\",\n        \"##アウト\",\n        \"イエス\",\n        \"ベア\",\n        \"民衆\",\n        \"科目\",\n        \"郷土\",\n        \"##切ら\",\n        \"##ERO\",\n        \"クロアチア\",\n        \"品川\",\n        \"チン\",\n        \"明かし\",\n        \"景観\",\n        \"浮か\",\n        \"切断\",\n        \"ネル\",\n        \"開け\",\n        \"##・ラ\",\n        \"ルネ\",\n        \"原田\",\n        \"シロ\",\n        \"安田\",\n        \"製薬\",\n        \"ローン\",\n        \"洞窟\",\n        \"習得\",\n        \"##あい\",\n        \"MUS\",\n        \"五郎\",\n        \"ブレイク\",\n        \"##リャ\",\n        \"モント\",\n        \"明るい\",\n        \"##65\",\n        \"特撮\",\n        \"ペイ\",\n        \"レア\",\n        \"違法\",\n        \"Ste\",\n        \"ダグ\",\n        \"乗務\",\n        \"県内\",\n        \"野生\",\n        \"##olog\",\n        \"日向\",\n        \"##ロニ\",\n        \"箱根\",\n        \"奪取\",\n        \"モーニング\",\n        \"見つかっ\",\n        \"インス\",\n        \"グラウンド\",\n        \"ボブ\",\n        \"ミックス\",\n        \"##ザード\",\n        \"##キット\",\n        \"博覧\",\n        \"満足\",\n        \"たん\",\n        \"適し\",\n        \"ギタリスト\",\n        \"Met\",\n        \"##ult\",\n        \"マカ\",\n        \"##・サ\",\n        \"##ゲーム\",\n        \"城主\",\n        \"白石\",\n        \"工芸\",\n        \"広げ\",\n        \"親交\",\n        \"法則\",\n        \"上述\",\n        \"奪っ\",\n        \"##レア\",\n        \"佐野\",\n        \"取り組み\",\n        \"抜擢\",\n        \"望む\",\n        \"ハリウッド\",\n        \"アンケート\",\n        \"生え\",\n        \"脅威\",\n        \"##ros\",\n        \"1872\",\n        \"PL\",\n        \"アパート\",\n        \"##34\",\n        \"##っこ\",\n        \"##ローチ\",\n        \"アバ\",\n        \"ツイ\",\n        \"##ACK\",\n        \"セール\",\n        \"天下\",\n        \"航行\",\n        \"##リーグ\",\n        \"##ハイ\",\n        \"改訂\",\n        \"毎月\",\n        \"追跡\",\n        \"大井\",\n        \"異動\",\n        \"リッチ\",\n        \"シュタ\",\n        \"割り当て\",\n        \"西口\",\n        \"永遠\",\n        \"##っち\",\n        \"##フィン\",\n        \"食べ物\",\n        \"筋肉\",\n        \"賠償\",\n        \"リトアニア\",\n        \"比率\",\n        \"要する\",\n        \"阻害\",\n        \"艦艇\",\n        \"キューバ\",\n        \"SL\",\n        \"##たん\",\n        \"##ode\",\n        \"東山\",\n        \"##ゴー\",\n        \"ミュンヘン\",\n        \"京王\",\n        \"赤色\",\n        \"引き継が\",\n        \"人質\",\n        \"シャツ\",\n        \"ガラ\",\n        \"ヨハ\",\n        \"育っ\",\n        \"隊員\",\n        \"kW\",\n        \"##ount\",\n        \"技法\",\n        \"アーサー\",\n        \"反撃\",\n        \"コーポ\",\n        \"メイド\",\n        \"食堂\",\n        \"an\",\n        \"業界\",\n        \"バイト\",\n        \"大河\",\n        \"ヴォー\",\n        \"ジュー\",\n        \"礼拝\",\n        \"法務\",\n        \"甲府\",\n        \"##ood\",\n        \"##ale\",\n        \"##ome\",\n        \"CPU\",\n        \"生前\",\n        \"##ata\",\n        \"AKB\",\n        \"##ame\",\n        \"ライフル\",\n        \"耐久\",\n        \"繰り広げ\",\n        \"春秋\",\n        \"入居\",\n        \"ブロード\",\n        \"いじめ\",\n        \"捕獲\",\n        \"##バキア\",\n        \"ジェフ\",\n        \"トニー\",\n        \"121\",\n        \"部位\",\n        \"ペンシル\",\n        \"発信\",\n        \"噴火\",\n        \"老朽\",\n        \"虐殺\",\n        \"##ART\",\n        \"ダンサー\",\n        \"Gu\",\n        \"商標\",\n        \"被告\",\n        \"神聖\",\n        \"経歴\",\n        \"360\",\n        \"カウント\",\n        \"ケル\",\n        \"把握\",\n        \"旭川\",\n        \"ストレート\",\n        \"ジャイアンツ\",\n        \"幹事\",\n        \"表情\",\n        \"シード\",\n        \"遠藤\",\n        \"意志\",\n        \"ハリー\",\n        \"ホラー\",\n        \"##チオ\",\n        \"##ake\",\n        \"テーブル\",\n        \"京成\",\n        \"締め\",\n        \"貫通\",\n        \"##ペット\",\n        \"エコ\",\n        \"セガ\",\n        \"##af\",\n        \"GM\",\n        \"かく\",\n        \"廃棄\",\n        \"横山\",\n        \"詰め\",\n        \"ソングライター\",\n        \"暮らす\",\n        \"メロディ\",\n        \"リメ\",\n        \"ワル\",\n        \"一行\",\n        \"バグ\",\n        \"城下\",\n        \"転用\",\n        \"##UB\",\n        \"水準\",\n        \"##ミット\",\n        \"吉本\",\n        \"初日\",\n        \"グレー\",\n        \"府中\",\n        \"背後\",\n        \"##ウンス\",\n        \"ストップ\",\n        \"みつ\",\n        \"食い\",\n        \"プリンス\",\n        \"公民\",\n        \"胴体\",\n        \"警告\",\n        \"111\",\n        \"使え\",\n        \"排気\",\n        \"##ヴェン\",\n        \"強度\",\n        \"なかなか\",\n        \"ボクサー\",\n        \"告知\",\n        \"1868\",\n        \"熱心\",\n        \"狭い\",\n        \"立川\",\n        \"##ギス\",\n        \"##ild\",\n        \"貴重\",\n        \"定理\",\n        \"顕著\",\n        \"挨拶\",\n        \"遠く\",\n        \"アーカイブ\",\n        \"免疫\",\n        \"標本\",\n        \"脂肪\",\n        \"##面目\",\n        \"ランダム\",\n        \"取り組ん\",\n        \"##ance\",\n        \"小笠\",\n        \"葬儀\",\n        \"マネジメント\",\n        \"ワード\",\n        \"殿堂\",\n        \"出品\",\n        \"ファイト\",\n        \"数百\",\n        \"物体\",\n        \"マウス\",\n        \"##ンジョン\",\n        \"まり\",\n        \"乗る\",\n        \"呼びかけ\",\n        \"先代\",\n        \"2023\",\n        \"展望\",\n        \"MBS\",\n        \"誤解\",\n        \"##バッハ\",\n        \"##セフ\",\n        \"ヴィルヘルム\",\n        \"光線\",\n        \"敗れる\",\n        \"玩具\",\n        \"少佐\",\n        \"排出\",\n        \"落成\",\n        \"##クチン\",\n        \"スプリング\",\n        \"ドール\",\n        \"後退\",\n        \"柴田\",\n        \"流出\",\n        \"フュー\",\n        \"地質\",\n        \"所長\",\n        \"##edia\",\n        \"互換\",\n        \"ブラッド\",\n        \"シドニー\",\n        \"出口\",\n        \"##ky\",\n        \"メダ\",\n        \"ロイ\",\n        \"上空\",\n        \"上がる\",\n        \"109\",\n        \"Fran\",\n        \"マクロ\",\n        \"##ベンチ\",\n        \"権威\",\n        \"チリ\",\n        \"造ら\",\n        \"マレーシア\",\n        \"TS\",\n        \"石炭\",\n        \"アダルト\",\n        \"リレー\",\n        \"過剰\",\n        \"アシスト\",\n        \"動く\",\n        \"伝達\",\n        \"1886\",\n        \"桜井\",\n        \"興業\",\n        \"再婚\",\n        \"##ict\",\n        \"技能\",\n        \"信者\",\n        \"発注\",\n        \"赴任\",\n        \"妖精\",\n        \"生態\",\n        \"西方\",\n        \"##ザス\",\n        \"RC\",\n        \"EN\",\n        \"医科\",\n        \"望ん\",\n        \"指令\",\n        \"介護\",\n        \"##シウム\",\n        \"幸せ\",\n        \"##AB\",\n        \"今度\",\n        \"世間\",\n        \"沿線\",\n        \"チケット\",\n        \"起訴\",\n        \"139\",\n        \"##oll\",\n        \"クーデター\",\n        \"西村\",\n        \"Ge\",\n        \"支線\",\n        \"船体\",\n        \"めい\",\n        \"ゲー\",\n        \"##ork\",\n        \"垂直\",\n        \"##yn\",\n        \"##ゲット\",\n        \"ビス\",\n        \"##ホン\",\n        \"セキュ\",\n        \"曲線\",\n        \"譲り\",\n        \"きゅう\",\n        \"re\",\n        \"アッ\",\n        \"勝っ\",\n        \"白色\",\n        \"予報\",\n        \"##ject\",\n        \"シールド\",\n        \"加える\",\n        \"##itt\",\n        \"CG\",\n        \"わかっ\",\n        \"不要\",\n        \"完結\",\n        \"同志\",\n        \"##ree\",\n        \"魔力\",\n        \"取り戻し\",\n        \"入ら\",\n        \"ケンタ\",\n        \"好み\",\n        \"除去\",\n        \"種子\",\n        \"クリスト\",\n        \"哨戒\",\n        \"近世\",\n        \"PD\",\n        \"詳しく\",\n        \"じん\",\n        \"オハ\",\n        \"全集\",\n        \"デラ\",\n        \"マット\",\n        \"##oci\",\n        \"128\",\n        \"療養\",\n        \"1895\",\n        \"極端\",\n        \"職務\",\n        \"##ッシー\",\n        \"知的\",\n        \"新潮\",\n        \"##ream\",\n        \"ES\",\n        \"っぽ\",\n        \"ミー\",\n        \"充実\",\n        \"定数\",\n        \"技師\",\n        \"追わ\",\n        \"真理\",\n        \"##68\",\n        \"Ab\",\n        \"パレス\",\n        \"多用\",\n        \"グッド\",\n        \"Bar\",\n        \"マドリード\",\n        \"##ブリン\",\n        \"知り合い\",\n        \"ロープ\",\n        \"売れ\",\n        \"海底\",\n        \"借金\",\n        \"助言\",\n        \"##セロナ\",\n        \"体調\",\n        \"ループ\",\n        \"##ition\",\n        \"##っぽ\",\n        \"冷却\",\n        \"##orn\",\n        \"超人\",\n        \"ユニオン\",\n        \"##らっ\",\n        \"伊東\",\n        \"繋がっ\",\n        \"防災\",\n        \"ピエール\",\n        \"仕組み\",\n        \"招集\",\n        \"##ogle\",\n        \"菊池\",\n        \"牧師\",\n        \"遂げ\",\n        \"移さ\",\n        \"バルセロナ\",\n        \"チャンピオンシップ\",\n        \"##ヴィン\",\n        \"集配\",\n        \"都心\",\n        \"半身\",\n        \"セラ\",\n        \"ボイス\",\n        \"慶応\",\n        \"ショウ\",\n        \"声明\",\n        \"##寄せ\",\n        \"ハウ\",\n        \"大王\",\n        \"Qu\",\n        \"モロ\",\n        \"個性\",\n        \"生み出し\",\n        \"ISO\",\n        \"たっ\",\n        \"庶民\",\n        \"誤っ\",\n        \"関わり\",\n        \"1880\",\n        \"駅名\",\n        \"##ott\",\n        \"まい\",\n        \"個々\",\n        \"適応\",\n        \"契機\",\n        \"王妃\",\n        \"申し出\",\n        \"神学\",\n        \"##抜き\",\n        \"マーティン\",\n        \"判事\",\n        \"##mer\",\n        \"電磁\",\n        \"アルゴ\",\n        \"首長\",\n        \"唱え\",\n        \"##レスト\",\n        \"国分\",\n        \"弾薬\",\n        \"ロビン\",\n        \"##ガイ\",\n        \"入植\",\n        \"因子\",\n        \"守っ\",\n        \"満了\",\n        \"##ータス\",\n        \"ライブラ\",\n        \"同性\",\n        \"最寄り\",\n        \"ぶん\",\n        \"支所\",\n        \"浄土\",\n        \"エージェント\",\n        \"岩波\",\n        \"性別\",\n        \"1875\",\n        \"Sm\",\n        \"タマ\",\n        \"島田\",\n        \"代々\",\n        \"領地\",\n        \"##ise\",\n        \"1892\",\n        \"親衛\",\n        \"セッション\",\n        \"太夫\",\n        \"##ose\",\n        \"厳密\",\n        \"特番\",\n        \"平面\",\n        \"留まっ\",\n        \"もらい\",\n        \"タル\",\n        \"法令\",\n        \"##eat\",\n        \"八戸\",\n        \"同型\",\n        \"岡本\",\n        \"スティーヴ\",\n        \"##えもん\",\n        \"拉致\",\n        \"思考\",\n        \"##AI\",\n        \"三田\",\n        \"加わる\",\n        \"##ニーズ\",\n        \"##ヴィチ\",\n        \"立憲\",\n        \"アルメ\",\n        \"1878\",\n        \"USS\",\n        \"マスコミ\",\n        \"成し\",\n        \"アナウンス\",\n        \"ピース\",\n        \"中旬\",\n        \"タイミング\",\n        \"上司\",\n        \"小泉\",\n        \"##アント\",\n        \"1893\",\n        \"ブライアン\",\n        \"FR\",\n        \"原型\",\n        \"突撃\",\n        \"##まさ\",\n        \"リボン\",\n        \"暗黒\",\n        \"1887\",\n        \"108\",\n        \"##ERS\",\n        \"マーケット\",\n        \"探索\",\n        \"襲い\",\n        \"ネコ\",\n        \"勇者\",\n        \"干渉\",\n        \"捉え\",\n        \"摂取\",\n        \"日米\",\n        \"広大\",\n        \"低迷\",\n        \"ピッチ\",\n        \"いし\",\n        \"##pr\",\n        \"##まい\",\n        \"##切る\",\n        \"もちろん\",\n        \"付加\",\n        \"チームメイト\",\n        \"帽子\",\n        \"芝居\",\n        \"NO\",\n        \"明かさ\",\n        \"都立\",\n        \"骨折\",\n        \"リメイク\",\n        \"On\",\n        \"所得\",\n        \"海域\",\n        \"ドメイン\",\n        \"準々\",\n        \"符号\",\n        \"##ベリー\",\n        \"##ower\",\n        \"Is\",\n        \"釈放\",\n        \"##irl\",\n        \"精度\",\n        \"ムス\",\n        \"キリ\",\n        \"##CE\",\n        \"備える\",\n        \"##シスト\",\n        \"##IE\",\n        \"まつり\",\n        \"##シオン\",\n        \"見なさ\",\n        \"家系\",\n        \"##ヴィア\",\n        \"アプローチ\",\n        \"武蔵野\",\n        \"HE\",\n        \"117\",\n        \"水野\",\n        \"For\",\n        \"王女\",\n        \"##ホール\",\n        \"らん\",\n        \"##KE\",\n        \"All\",\n        \"##ベート\",\n        \"旅館\",\n        \"祝日\",\n        \"あお\",\n        \"サイクル\",\n        \"マスコット\",\n        \"##ポリス\",\n        \"NS\",\n        \"デュー\",\n        \"望遠\",\n        \"with\",\n        \"ドラえもん\",\n        \"なす\",\n        \"いす\",\n        \"週末\",\n        \"解答\",\n        \"ノベル\",\n        \"アンナ\",\n        \"ワイルド\",\n        \"ナイフ\",\n        \"ナイン\",\n        \"夏季\",\n        \"##26\",\n        \"##チェスター\",\n        \"倫理\",\n        \"視覚\",\n        \"ダブルス\",\n        \"勢い\",\n        \"入れ替\",\n        \"しっかり\",\n        \"##四郎\",\n        \"本田\",\n        \"自信\",\n        \"不振\",\n        \"##ホー\",\n        \"アンテナ\",\n        \"ひら\",\n        \"南極\",\n        \"対面\",\n        \"ワークス\",\n        \"サーバ\",\n        \"スワ\",\n        \"不動\",\n        \"こん\",\n        \"新しく\",\n        \"エレベーター\",\n        \"トマス\",\n        \"レク\",\n        \"ホンダ\",\n        \"公的\",\n        \"シャトル\",\n        \"メリー\",\n        \"正室\",\n        \"##46\",\n        \"増設\",\n        \"台北\",\n        \"届け\",\n        \"ヴァージ\",\n        \"##ナミ\",\n        \"##ープル\",\n        \"ウエ\",\n        \"ビート\",\n        \"##リオン\",\n        \"内野\",\n        \"怪物\",\n        \"##セッツ\",\n        \"未だ\",\n        \"くら\",\n        \"##リュ\",\n        \"次官\",\n        \"面倒\",\n        \"##ナーズ\",\n        \"安政\",\n        \"引く\",\n        \"つながる\",\n        \"ペルシア\",\n        \"皇子\",\n        \"豊橋\",\n        \"活かし\",\n        \"湘南\",\n        \"##ッセイ\",\n        \"タカ\",\n        \"手前\",\n        \"あし\",\n        \"金庫\",\n        \"ギャグ\",\n        \"小笠原\",\n        \"わから\",\n        \"他社\",\n        \"加わり\",\n        \"概ね\",\n        \"##MS\",\n        \"やら\",\n        \"美人\",\n        \"アイデア\",\n        \"麻雀\",\n        \"Op\",\n        \"かぶ\",\n        \"ひろし\",\n        \"オイル\",\n        \"カレン\",\n        \"セルフ\",\n        \"ペー\",\n        \"太鼓\",\n        \"川越\",\n        \"##メット\",\n        \"抽選\",\n        \"マサチュー\",\n        \"連動\",\n        \"紅白\",\n        \"船橋\",\n        \"マサチューセッツ\",\n        \"ホット\",\n        \"重大\",\n        \"##MA\",\n        \"だり\",\n        \"東口\",\n        \"金銭\",\n        \"NAS\",\n        \"WBC\",\n        \"飲料\",\n        \"##コル\",\n        \"ヤクルト\",\n        \"##ベンチャー\",\n        \"AB\",\n        \"右側\",\n        \"##ッラ\",\n        \"トロン\",\n        \"佐久\",\n        \"浅野\",\n        \"Mk\",\n        \"列島\",\n        \"爵位\",\n        \"フラッシュ\",\n        \"Google\",\n        \"忠実\",\n        \"##合わ\",\n        \"駐在\",\n        \"##リアス\",\n        \"富田\",\n        \"漫才\",\n        \"1894\",\n        \"メー\",\n        \"ブリー\",\n        \"良好\",\n        \"ウィリアムズ\",\n        \"ディスプレイ\",\n        \"バナ\",\n        \"今井\",\n        \"打席\",\n        \"市制\",\n        \"採択\",\n        \"##つく\",\n        \"クラスメイト\",\n        \"AI\",\n        \"1884\",\n        \"##・イ\",\n        \"パシ\",\n        \"YO\",\n        \"和泉\",\n        \"越後\",\n        \"サーキット\",\n        \"\\\")\",\n        \"母音\",\n        \"院長\",\n        \"テキスト\",\n        \"パロディ\",\n        \"アース\",\n        \"競合\",\n        \"症候\",\n        \"ウェールズ\",\n        \"れい\",\n        \"鎮圧\",\n        \"不在\",\n        \"交付\",\n        \"145\",\n        \"ベースボール\",\n        \"イーグ\",\n        \"我が\",\n        \"151\",\n        \"潜入\",\n        \"力学\",\n        \"払い\",\n        \"集英\",\n        \"シフト\",\n        \"挑む\",\n        \"河原\",\n        \"探査\",\n        \"##ロック\",\n        \"光学\",\n        \"宣教\",\n        \"メディ\",\n        \"レオン\",\n        \"撃退\",\n        \"アドレス\",\n        \"陣営\",\n        \"振る舞\",\n        \"対空\",\n        \"年金\",\n        \"根本\",\n        \"神々\",\n        \"農村\",\n        \"パーセント\",\n        \"エントリー\",\n        \"イスラーム\",\n        \"薄い\",\n        \"難易\",\n        \"アイランド\",\n        \"反面\",\n        \"推奨\",\n        \"火星\",\n        \"1885\",\n        \"ムービー\",\n        \"てつ\",\n        \"すみ\",\n        \"ナム\",\n        \"下関\",\n        \"組み込ま\",\n        \"4000\",\n        \"Jr\",\n        \"一気\",\n        \"突如\",\n        \"レンジャー\",\n        \"浮上\",\n        \"立法\",\n        \"##ポリ\",\n        \"カーブ\",\n        \"パンク\",\n        \"藤沢\",\n        \"皇太子\",\n        \"露出\",\n        \"合理\",\n        \"リタ\",\n        \"##ッサー\",\n        \"##ニル\",\n        \"でん\",\n        \"ゲン\",\n        \"水域\",\n        \"都内\",\n        \"##42\",\n        \"探す\",\n        \"西暦\",\n        \"ベッド\",\n        \"サンダー\",\n        \"バルト\",\n        \"懲役\",\n        \"見送\",\n        \"名乗り\",\n        \"恵まれ\",\n        \"アピ\",\n        \"##anc\",\n        \"剣道\",\n        \"演習\",\n        \"##OCK\",\n        \"教区\",\n        \"策定\",\n        \"果て\",\n        \"羽田\",\n        \"##ous\",\n        \"中京\",\n        \"##ッペ\",\n        \"##デルフィア\",\n        \"使者\",\n        \"最適\",\n        \"アール\",\n        \"1876\",\n        \"デバイス\",\n        \"チャンピオンズ\",\n        \"##ハム\",\n        \"1891\",\n        \"EU\",\n        \"基金\",\n        \"電撃\",\n        \"コンスタン\",\n        \"OVA\",\n        \"逃走\",\n        \"頂点\",\n        \"Gre\",\n        \"##わけ\",\n        \"前橋\",\n        \"実戦\",\n        \"フィラデルフィア\",\n        \"稲荷\",\n        \"1874\",\n        \"同校\",\n        \"##ノコ\",\n        \"##ark\",\n        \"1870\",\n        \"平行\",\n        \"見直し\",\n        \"日程\",\n        \"浜田\",\n        \"分から\",\n        \"##とり\",\n        \"宮内\",\n        \"掲示\",\n        \"高める\",\n        \"##ンドラ\",\n        \"教諭\",\n        \"ブルック\",\n        \"太子\",\n        \"明け\",\n        \"LE\",\n        \"カジ\",\n        \"##イング\",\n        \"やめ\",\n        \"##明け\",\n        \"先住\",\n        \"那覇\",\n        \"要件\",\n        \"##ッシング\",\n        \"##だい\",\n        \"任さ\",\n        \"右手\",\n        \"絵本\",\n        \"吹き替え\",\n        \"撃ち\",\n        \"駆使\",\n        \"公募\",\n        \"内田\",\n        \"農家\",\n        \"##ward\",\n        \"押さ\",\n        \"プログラミング\",\n        \"##すけ\",\n        \"引き上げ\",\n        \"角度\",\n        \"TKO\",\n        \"iP\",\n        \"寛政\",\n        \"苦し\",\n        \"ターゲット\",\n        \"ネー\",\n        \"##ade\",\n        \"##ere\",\n        \"焦点\",\n        \"識別\",\n        \"復旧\",\n        \"1888\",\n        \"1869\",\n        \"電圧\",\n        \"##リウム\",\n        \"テレビジョン\",\n        \"はな\",\n        \"サト\",\n        \"マウント\",\n        \"アドベンチャー\",\n        \"BE\",\n        \"熊谷\",\n        \"##けん\",\n        \"JA\",\n        \"享保\",\n        \"制約\",\n        \"本国\",\n        \"出荷\",\n        \"聞か\",\n        \"花火\",\n        \"名人\",\n        \"##ames\",\n        \"氏族\",\n        \"気圧\",\n        \"陰謀\",\n        \"##pl\",\n        \"横綱\",\n        \"##ましい\",\n        \"##enn\",\n        \"対称\",\n        \"119\",\n        \"Apple\",\n        \"ヘア\",\n        \"ダンジョン\",\n        \"ピーク\",\n        \"辞退\",\n        \"方程\",\n        \"淡路\",\n        \"思い出\",\n        \"狙う\",\n        \"比べる\",\n        \"総額\",\n        \"部長\",\n        \"遅く\",\n        \"コンピューター\",\n        \"エロ\",\n        \"同局\",\n        \"砲兵\",\n        \"##がく\",\n        \"ドミニ\",\n        \"感じる\",\n        \"格納\",\n        \"##ギン\",\n        \"ホークス\",\n        \"##oot\",\n        \"htt\",\n        \"津波\",\n        \"年少\",\n        \"許し\",\n        \"助ける\",\n        \"爆破\",\n        \"Ac\",\n        \"呪い\",\n        \"各社\",\n        \"染色\",\n        \"仮想\",\n        \"受け取っ\",\n        \"##HS\",\n        \"引き起こし\",\n        \"マリン\",\n        \"ココ\",\n        \"デン\",\n        \"校区\",\n        \"##ピュ\",\n        \"##23\",\n        \"クリスタル\",\n        \"新曲\",\n        \"注文\",\n        \"酒井\",\n        \"ナイター\",\n        \"かな\",\n        \"会合\",\n        \"##渡さ\",\n        \"##休み\",\n        \"石原\",\n        \"ビジョン\",\n        \"誇り\",\n        \"町田\",\n        \"##グラム\",\n        \"1879\",\n        \"大いに\",\n        \"##ラド\",\n        \"わたし\",\n        \"ray\",\n        \"定時\",\n        \"##抜け\",\n        \"TOUR\",\n        \"志願\",\n        \"流さ\",\n        \"赤坂\",\n        \"農場\",\n        \"インパ\",\n        \"単一\",\n        \"発現\",\n        \"誘い\",\n        \"##HT\",\n        \"ヴェネツィア\",\n        \"橋梁\",\n        \"習慣\",\n        \"転校\",\n        \"アイヌ\",\n        \"がわ\",\n        \"住吉\",\n        \"消化\",\n        \"CF\",\n        \"ボランティア\",\n        \"伏見\",\n        \"フェイス\",\n        \"ブラウ\",\n        \"キット\",\n        \"売買\",\n        \"##プライズ\",\n        \"##ung\",\n        \"会っ\",\n        \"可決\",\n        \"引き起こす\",\n        \"取り扱い\",\n        \"エクスプレス\",\n        \"きん\",\n        \"すず\",\n        \"過激\",\n        \"リモ\",\n        \"各駅\",\n        \"背負\",\n        \"調節\",\n        \"改定\",\n        \"燃焼\",\n        \"メソ\",\n        \"オタ\",\n        \"池袋\",\n        \"As\",\n        \"イノ\",\n        \"##ords\",\n        \"SUPER\",\n        \"変遷\",\n        \"元素\",\n        \"増し\",\n        \"ヴァイ\",\n        \"##ジェリア\",\n        \"お前\",\n        \"工科\",\n        \"最期\",\n        \"##ドルフ\",\n        \"正当\",\n        \"##ATION\",\n        \"集まり\",\n        \"退学\",\n        \"寄贈\",\n        \"##DA\",\n        \"保全\",\n        \"##ミナ\",\n        \"帰り\",\n        \"債務\",\n        \"市販\",\n        \"想像\",\n        \"累計\",\n        \"射殺\",\n        \"引い\",\n        \"増強\",\n        \"密か\",\n        \"待っ\",\n        \"DR\",\n        \"客員\",\n        \"ポスター\",\n        \"喫茶\",\n        \"母体\",\n        \"セキュリティ\",\n        \"##リク\",\n        \"##HO\",\n        \"##もの\",\n        \"pro\",\n        \"##コフ\",\n        \"タイムズ\",\n        \"振り返\",\n        \"抱く\",\n        \"ウエスト\",\n        \"量子\",\n        \"ラフ\",\n        \"中東\",\n        \"土壌\",\n        \"さき\",\n        \"バリア\",\n        \"得票\",\n        \"##ちに\",\n        \"RS\",\n        \"サクラ\",\n        \"木材\",\n        \"法廷\",\n        \"しき\",\n        \"タブ\",\n        \"マキ\",\n        \"##上がる\",\n        \"山内\",\n        \"音響\",\n        \"たけし\",\n        \"##und\",\n        \"管制\",\n        \"貨車\",\n        \"就役\",\n        \"トゥー\",\n        \"収益\",\n        \"発祥\",\n        \"目立つ\",\n        \"スモ\",\n        \"##ヒト\",\n        \"ギャラリー\",\n        \"拍子\",\n        \"珍しく\",\n        \"##回し\",\n        \"スタンダ\",\n        \"苦労\",\n        \"##タミン\",\n        \"##エゴ\",\n        \"##ュル\",\n        \"##がわ\",\n        \"##ley\",\n        \"繰り返す\",\n        \"本堂\",\n        \"薬師\",\n        \"##さと\",\n        \"アパ\",\n        \"セリフ\",\n        \"ワクチン\",\n        \"##ke\",\n        \"磁気\",\n        \"マーケ\",\n        \"排水\",\n        \"狙撃\",\n        \"服装\",\n        \"せよ\",\n        \"寄生\",\n        \"バク\",\n        \"馬力\",\n        \"##up\",\n        \"サンク\",\n        \"ピアニスト\",\n        \"IBM\",\n        \"不全\",\n        \"##トリー\",\n        \"ふた\",\n        \"1600\",\n        \"##ぐるみ\",\n        \"傾斜\",\n        \"投球\",\n        \"本郷\",\n        \"たかっ\",\n        \"カウン\",\n        \"ジオ\",\n        \"仮説\",\n        \"運搬\",\n        \"##クトリー\",\n        \"ベリー\",\n        \"リース\",\n        \"星野\",\n        \"##GA\",\n        \"役職\",\n        \"##ハルト\",\n        \"とりわけ\",\n        \"番手\",\n        \"Gl\",\n        \"ボリ\",\n        \"秋葉\",\n        \"System\",\n        \"側近\",\n        \"共著\",\n        \"大神\",\n        \"奪還\",\n        \"打っ\",\n        \"127\",\n        \"バッテ\",\n        \"欠点\",\n        \"貨幣\",\n        \"ケア\",\n        \"##ans\",\n        \"##row\",\n        \"##・デ・\",\n        \"作動\",\n        \"安藤\",\n        \"小隊\",\n        \"薬剤\",\n        \"ポンプ\",\n        \"##ディアン\",\n        \"シングルス\",\n        \"棋士\",\n        \"mi\",\n        \"pr\",\n        \"シベ\",\n        \"支える\",\n        \"新生\",\n        \"あか\",\n        \"ヨーク\",\n        \"出入り\",\n        \"取れ\",\n        \"ミン\",\n        \"幼児\",\n        \"Cr\",\n        \"jp\",\n        \"時折\",\n        \"並べ\",\n        \"大森\",\n        \"カ国\",\n        \"わが\",\n        \"パト\",\n        \"右翼\",\n        \"急遽\",\n        \"損失\",\n        \"##88\",\n        \"子爵\",\n        \"##ハンマ\",\n        \"##ぼす\",\n        \"##フィールド\",\n        \"UF\",\n        \"##ana\",\n        \"##ンスク\",\n        \"バート\",\n        \"分かる\",\n        \"禁じ\",\n        \"##ゥー\",\n        \"卓球\",\n        \"巡る\",\n        \"##ジャン\",\n        \"南京\",\n        \"##ェン\",\n        \"オフィシャル\",\n        \"本質\",\n        \"自作\",\n        \"シンク\",\n        \"弱点\",\n        \"激怒\",\n        \"##バマ\",\n        \"後楽\",\n        \"##デート\",\n        \"##討ち\",\n        \"宮本\",\n        \"川上\",\n        \"彗星\",\n        \"救済\",\n        \"飾り\",\n        \"ニコニコ\",\n        \"気味\",\n        \"単なる\",\n        \"多少\",\n        \"軽減\",\n        \"JRA\",\n        \"Off\",\n        \"三好\",\n        \"宝石\",\n        \"おと\",\n        \"##own\",\n        \"明るく\",\n        \"##えて\",\n        \"チェル\",\n        \"コンビニ\",\n        \"努め\",\n        \"支給\",\n        \"水路\",\n        \"BR\",\n        \"Univers\",\n        \"危惧\",\n        \"実態\",\n        \"ボルト\",\n        \"チャイ\",\n        \"MUSIC\",\n        \"sh\",\n        \"抜い\",\n        \"斉藤\",\n        \"##ign\",\n        \"制圧\",\n        \"弘前\",\n        \"輩出\",\n        \"巡っ\",\n        \"##LD\",\n        \"##よし\",\n        \"矛盾\",\n        \"永久\",\n        \"##テレ\",\n        \"殺す\",\n        \"##yl\",\n        \"辞め\",\n        \"グラフ\",\n        \"エスト\",\n        \"公会\",\n        \"造り\",\n        \"シェル\",\n        \"ぞう\",\n        \"##iam\",\n        \"FL\",\n        \"市電\",\n        \"両手\",\n        \"左側\",\n        \"107\",\n        \"悩み\",\n        \"ONE\",\n        \"##いろ\",\n        \"アロ\",\n        \"サント\",\n        \"テイ\",\n        \"プー\",\n        \"寄与\",\n        \"##タール\",\n        \"奇跡\",\n        \"書類\",\n        \"天国\",\n        \"秩序\",\n        \"##ara\",\n        \"エンターテインメント\",\n        \"ハナ\",\n        \"過ごす\",\n        \"丸山\",\n        \"合い\",\n        \"秩父\",\n        \"中田\",\n        \"貧困\",\n        \"##スカ\",\n        \"レシ\",\n        \"増える\",\n        \"惚れ\",\n        \"内海\",\n        \"家老\",\n        \"アンソ\",\n        \"内陸\",\n        \"あだ\",\n        \"ボウル\",\n        \"所領\",\n        \"移設\",\n        \"##ワーズ\",\n        \"ぼく\",\n        \"ヶ所\",\n        \"ウィーク\",\n        \"前進\",\n        \"Mr\",\n        \"オマ\",\n        \"情勢\",\n        \"##ジウム\",\n        \"##ハンマド\",\n        \"Ass\",\n        \"ビリー\",\n        \"出題\",\n        \"早朝\",\n        \"スプリ\",\n        \"by\",\n        \"真相\",\n        \"越前\",\n        \"プライベート\",\n        \"バーク\",\n        \"マイン\",\n        \"##43\",\n        \"モリ\",\n        \"有馬\",\n        \"育ち\",\n        \"菩薩\",\n        \"クラーク\",\n        \".,\",\n        \"始動\",\n        \"楽しむ\",\n        \"グレン\",\n        \"正常\",\n        \"\\\"(\",\n        \"##通り\",\n        \"寿命\",\n        \"商事\",\n        \"日蓮\",\n        \"グラビア\",\n        \"##ビッド\",\n        \"ユーゴ\",\n        \"エリック\",\n        \"白鳥\",\n        \"イレ\",\n        \"久留\",\n        \"乗組\",\n        \"ゆかり\",\n        \"割引\",\n        \"ライオンズ\",\n        \"冷静\",\n        \"円形\",\n        \"北口\",\n        \"永禄\",\n        \"##UL\",\n        \"決着\",\n        \"##和田\",\n        \"具合\",\n        \"旗本\",\n        \"転写\",\n        \"マーケティング\",\n        \"火力\",\n        \"##押し\",\n        \"##リューション\",\n        \"名目\",\n        \"絶望\",\n        \"ウルフ\",\n        \"##シカ\",\n        \"幽霊\",\n        \"招き\",\n        \"ビートル\",\n        \"歌わ\",\n        \"##ネタ\",\n        \"笑顔\",\n        \"西鉄\",\n        \"##me\",\n        \"宇治\",\n        \"緊張\",\n        \"カルロス\",\n        \"中立\",\n        \"##・ロ\",\n        \"革新\",\n        \"魔物\",\n        \"実写\",\n        \"因ん\",\n        \"ティア\",\n        \"パレード\",\n        \"中佐\",\n        \"),\",\n        \"イカ\",\n        \"ハミ\",\n        \"ピット\",\n        \"真言\",\n        \"調子\",\n        \"##ックル\",\n        \"コック\",\n        \"入隊\",\n        \"戸田\",\n        \"括弧\",\n        \"止める\",\n        \"付く\",\n        \"##ナイト\",\n        \"1881\",\n        \"CC\",\n        \"##かせ\",\n        \"トランプ\",\n        \"とん\",\n        \"キャップ\",\n        \"バッテリー\",\n        \"サマー\",\n        \"モンテ\",\n        \"##rans\",\n        \"103\",\n        \"##チンコ\",\n        \"香り\",\n        \"撃沈\",\n        \"##ts\",\n        \"##ディン\",\n        \"学士\",\n        \"##早く\",\n        \"リクエスト\",\n        \"機材\",\n        \"没し\",\n        \"踏襲\",\n        \"##ヴィヒ\",\n        \"さか\",\n        \"デッド\",\n        \"現職\",\n        \"##ダウン\",\n        \"##テイメント\",\n        \"ドコモ\",\n        \"好評\",\n        \"強盗\",\n        \"プレーヤー\",\n        \"DO\",\n        \"三塁\",\n        \"佐伯\",\n        \"##ヶ谷\",\n        \"1882\",\n        \"発する\",\n        \"二塁\",\n        \"##マラ\",\n        \"Cor\",\n        \"Net\",\n        \"外伝\",\n        \"ナル\",\n        \"世田\",\n        \"対峙\",\n        \"工程\",\n        \"繁栄\",\n        \"##ほん\",\n        \"従う\",\n        \"被っ\",\n        \"西宮\",\n        \"美容\",\n        \"阿波\",\n        \"##レール\",\n        \"怪人\",\n        \"BB\",\n        \"ルパン\",\n        \"渓谷\",\n        \"みなみ\",\n        \"オム\",\n        \"治世\",\n        \"素晴\",\n        \"電流\",\n        \"ヴォル\",\n        \"コンパクト\",\n        \"常勤\",\n        \"木曽\",\n        \"##エス\",\n        \"斜面\",\n        \"##バース\",\n        \"##マト\",\n        \"MVP\",\n        \"天候\",\n        \"持続\",\n        \"陸奥\",\n        \"中原\",\n        \"拒絶\",\n        \"パイプ\",\n        \"##ife\",\n        \"平等\",\n        \"松尾\",\n        \"頻度\",\n        \"げん\",\n        \"タバ\",\n        \"もうけ\",\n        \"バリエーション\",\n        \"リポーター\",\n        \"ポルノ\",\n        \"砲塔\",\n        \"Air\",\n        \"千歳\",\n        \"##ディス\",\n        \"Part\",\n        \"##ドール\",\n        \"シニア\",\n        \"起きる\",\n        \"先進\",\n        \"功労\",\n        \"専務\",\n        \"知名\",\n        \"転落\",\n        \"Comm\",\n        \"つとめ\",\n        \"ネク\",\n        \"##ons\",\n        \"こんな\",\n        \"エール\",\n        \"任ぜ\",\n        \"医者\",\n        \"WOR\",\n        \"パール\",\n        \"優位\",\n        \"公司\",\n        \"同地\",\n        \"間違い\",\n        \"世田谷\",\n        \"カブ\",\n        \"vol\",\n        \"吸血\",\n        \"安芸\",\n        \"Will\",\n        \"ゾンビ\",\n        \"一宮\",\n        \"運休\",\n        \"マルコ\",\n        \"マニュ\",\n        \"弥生\",\n        \"逃し\",\n        \"駅伝\",\n        \"梅田\",\n        \"決断\",\n        \"アンリ\",\n        \"ペンシルベニア\",\n        \"先祖\",\n        \"トリオ\",\n        \"##ドニア\",\n        \"##ニウム\",\n        \"バスター\",\n        \"有形\",\n        \"松原\",\n        \"記す\",\n        \"バンダイ\",\n        \"先駆け\",\n        \"鶴見\",\n        \"##ます\",\n        \"ジェン\",\n        \"ミラノ\",\n        \"厩舎\",\n        \"政務\",\n        \"津田\",\n        \"退官\",\n        \"##・モ\",\n        \"BBC\",\n        \"目論\",\n        \"##タイプ\",\n        \"会い\",\n        \"校歌\",\n        \"著しく\",\n        \"##ほど\",\n        \"アビ\",\n        \"広がり\",\n        \"水雷\",\n        \"##ラーズ\",\n        \"ar\",\n        \"口調\",\n        \"MF\",\n        \"好ん\",\n        \"起工\",\n        \"DM\",\n        \"化し\",\n        \"長調\",\n        \"##デント\",\n        \"アップデート\",\n        \"アーク\",\n        \"本数\",\n        \"野党\",\n        \"常識\",\n        \"見学\",\n        \"ストラ\",\n        \"後世\",\n        \"中津\",\n        \"ボーイズ\",\n        \"スケール\",\n        \"ゼネ\",\n        \"初出\",\n        \"泣き\",\n        \"飛ぶ\",\n        \"フォーム\",\n        \"ねじ\",\n        \"原稿\",\n        \"文政\",\n        \"真珠\",\n        \"##ESS\",\n        \"田辺\",\n        \"開戦\",\n        \"ジョル\",\n        \"返り\",\n        \"一見\",\n        \"植え\",\n        \"楕円\",\n        \"兵力\",\n        \"帯び\",\n        \"##ツォ\",\n        \"テオ\",\n        \"小売\",\n        \"流入\",\n        \"直轄\",\n        \"1200\",\n        \"オリックス\",\n        \"ろう\",\n        \"リム\",\n        \"じょ\",\n        \"倉敷\",\n        \"没後\",\n        \"古川\",\n        \"アンティ\",\n        \"カウンター\",\n        \"LP\",\n        \"四日市\",\n        \"種別\",\n        \"高岡\",\n        \"##サギ\",\n        \"##返さ\",\n        \"Mic\",\n        \"中毒\",\n        \"傭兵\",\n        \"高まっ\",\n        \"フェリ\",\n        \"ゴン\",\n        \"重点\",\n        \"領事\",\n        \"社内\",\n        \"隠居\",\n        \"##フェル\",\n        \"コミュー\",\n        \"立た\",\n        \"##バック\",\n        \"めぐる\",\n        \"##ヌー\",\n        \"チャージ\",\n        \"アフガニ\",\n        \"コラム\",\n        \"兼務\",\n        \"運送\",\n        \"102\",\n        \"141\",\n        \"We\",\n        \"軍艦\",\n        \"門下\",\n        \"アトランタ\",\n        \"サク\",\n        \"盆地\",\n        \"絶え\",\n        \"##BI\",\n        \"シミュレーション\",\n        \"気動\",\n        \"アフガニスタン\",\n        \"つる\",\n        \"国語\",\n        \"捕食\",\n        \"首席\",\n        \"ノイ\",\n        \"追悼\",\n        \"##VER\",\n        \"アルメニア\",\n        \"近接\",\n        \"Rob\",\n        \"リサ\",\n        \"##ぱい\",\n        \"マント\",\n        \"本願\",\n        \"軍用\",\n        \"##ナラ\",\n        \"継ぐ\",\n        \"RO\",\n        \"すす\",\n        \"再選\",\n        \"現金\",\n        \"金子\",\n        \"次いで\",\n        \"こなし\",\n        \"オハイオ\",\n        \"BEST\",\n        \"土器\",\n        \"ボーイング\",\n        \"スタンダード\",\n        \"必須\",\n        \"##AF\",\n        \"のりば\",\n        \"オカ\",\n        \"好む\",\n        \"##レッド\",\n        \"プロテスタント\",\n        \"##UC\",\n        \"しの\",\n        \"ハンドル\",\n        \"教える\",\n        \"高層\",\n        \"##gr\",\n        \"孤立\",\n        \"##ニエ\",\n        \"落とす\",\n        \"丹波\",\n        \"党首\",\n        \"難民\",\n        \"ディオ\",\n        \"北上\",\n        \"及ん\",\n        \"虐待\",\n        \"##way\",\n        \"狩り\",\n        \"テイラー\",\n        \"大川\",\n        \"安価\",\n        \"適合\",\n        \"##のり\",\n        \"すけ\",\n        \"ウー\",\n        \"囲碁\",\n        \"工房\",\n        \"高島\",\n        \"由紀\",\n        \"賭け\",\n        \"アテネ\",\n        \"ツッコ\",\n        \"乙女\",\n        \"収穫\",\n        \"こども\",\n        \"フォーマ\",\n        \"稽古\",\n        \"##ヴィル\",\n        \"ツァ\",\n        \"載せ\",\n        \"Inc\",\n        \"倒産\",\n        \"狙い\",\n        \"##HC\",\n        \"大関\",\n        \"悲劇\",\n        \"英文\",\n        \"帰る\",\n        \"プリンセス\",\n        \"アウグ\",\n        \"-」\",\n        \"##ハウゼン\",\n        \"利根\",\n        \"International\",\n        \"こなす\",\n        \"採掘\",\n        \"郡区\",\n        \"実証\",\n        \"軍勢\",\n        \"##ENT\",\n        \"上方\",\n        \"秋山\",\n        \"##チカ\",\n        \"##ヶ丘\",\n        \"誤り\",\n        \"さらなる\",\n        \"クモ\",\n        \"パキスタン\",\n        \"如来\",\n        \"播磨\",\n        \"森田\",\n        \"町域\",\n        \"苦戦\",\n        \"金剛\",\n        \"##シティ\",\n        \"タイガー\",\n        \"##サンダー\",\n        \"Mi\",\n        \"ドリ\",\n        \"Mo\",\n        \"基調\",\n        \"警部\",\n        \"マケ\",\n        \"真面目\",\n        \"ちょっと\",\n        \"##roid\",\n        \"金田\",\n        \"日付\",\n        \"##ハウス\",\n        \"##ino\",\n        \"アカウント\",\n        \"告発\",\n        \"行進\",\n        \"鳥類\",\n        \"とどまっ\",\n        \"最上\",\n        \"##UD\",\n        \"アンドレ\",\n        \"Tom\",\n        \"出向\",\n        \"幾何\",\n        \"##ブリッド\",\n        \"腫瘍\",\n        \"通商\",\n        \"##ari\",\n        \"##ECT\",\n        \"LED\",\n        \"実体\",\n        \"動機\",\n        \"##キュア\",\n        \"詐欺\",\n        \"野外\",\n        \"##フルト\",\n        \"司祭\",\n        \"掘り\",\n        \"ばら\",\n        \"スラム\",\n        \"読書\",\n        \"チーフ\",\n        \"八木\",\n        \"標識\",\n        \"水力\",\n        \"クラフト\",\n        \"Pre\",\n        \"##ヤン\",\n        \"リュウ\",\n        \"リミックス\",\n        \"執政\",\n        \"##KA\",\n        \"レーン\",\n        \"偉大\",\n        \"##ヴァル\",\n        \"マニア\",\n        \"石垣\",\n        \"PA\",\n        \"犯行\",\n        \"##KI\",\n        \"##GB\",\n        \"##fer\",\n        \"伊賀\",\n        \"組む\",\n        \"美女\",\n        \"邸宅\",\n        \"重い\",\n        \"##ナ・\",\n        \"##ケイ\",\n        \"サロン\",\n        \"か国\",\n        \"##ーレ\",\n        \"破綻\",\n        \"破産\",\n        \"還元\",\n        \"##下ろし\",\n        \"再興\",\n        \"奪う\",\n        \"牧野\",\n        \"産地\",\n        \"##ゆみ\",\n        \"でしょう\",\n        \"体格\",\n        \"暴行\",\n        \"アジ\",\n        \"モジュール\",\n        \"襲名\",\n        \"##ini\",\n        \"サンディ\",\n        \"欠場\",\n        \"伊予\",\n        \"##ソル\",\n        \"小田急\",\n        \"##port\",\n        \"##ATO\",\n        \"シップ\",\n        \"吹奏\",\n        \"御所\",\n        \"歩道\",\n        \"白山\",\n        \"博し\",\n        \"擁立\",\n        \"造形\",\n        \"河野\",\n        \"町制\",\n        \"赤字\",\n        \"フォックス\",\n        \"センサー\",\n        \"##ツィオ\",\n        \"ゆり\",\n        \"血管\",\n        \"##ave\",\n        \"担任\",\n        \"残存\",\n        \"ザン\",\n        \"アーチ\",\n        \"南口\",\n        \"##リッシュ\",\n        \"フェニックス\",\n        \"インディーズ\",\n        \"138\",\n        \"Per\",\n        \"スノー\",\n        \"ホスト\",\n        \"勧告\",\n        \"148\",\n        \"一斉\",\n        \"クリスティ\",\n        \"##able\",\n        \"ピラ\",\n        \"##アミ\",\n        \"教官\",\n        \"聞こ\",\n        \"返し\",\n        \"アルミ\",\n        \"自覚\",\n        \"踏まえ\",\n        \"鉱物\",\n        \"セリエ\",\n        \"忠誠\",\n        \"時々\",\n        \"ジェリー\",\n        \"作風\",\n        \"理念\",\n        \"酒造\",\n        \"##ロル\",\n        \"一撃\",\n        \"大石\",\n        \"急激\",\n        \"替え\",\n        \"朝倉\",\n        \"ヴィン\",\n        \"6000\",\n        \"多発\",\n        \"昼間\",\n        \"地蔵\",\n        \"##ウマ\",\n        \"##づくり\",\n        \"陽子\",\n        \"##カーン\",\n        \"見事\",\n        \"##こと\",\n        \"せき\",\n        \"ゴースト\",\n        \"創始\",\n        \"独裁\",\n        \"蓄積\",\n        \"キラ\",\n        \"上旬\",\n        \"蜂起\",\n        \"##ピング\",\n        \"1877\",\n        \"ブン\",\n        \"交わし\",\n        \"大事\",\n        \"リーチ\",\n        \"正しく\",\n        \"ブロン\",\n        \"入部\",\n        \"##シナ\",\n        \"スケジュール\",\n        \"ワーナー\",\n        \"AFC\",\n        \"EAN\",\n        \"友情\",\n        \"多大\",\n        \"書誌\",\n        \"113\",\n        \"なつ\",\n        \"WE\",\n        \"生理\",\n        \"間接\",\n        \"投下\",\n        \"船長\",\n        \"プロフィール\",\n        \"GB\",\n        \"全車\",\n        \"##ys\",\n        \"ビクター\",\n        \"指数\",\n        \"##ダーズ\",\n        \"両側\",\n        \"自国\",\n        \"補強\",\n        \"104\",\n        \"ドラゴンズ\",\n        \"押す\",\n        \"##PS\",\n        \"フロア\",\n        \"at\",\n        \"コーン\",\n        \"運ば\",\n        \"##ある\",\n        \"もも\",\n        \"食糧\",\n        \"220\",\n        \"車輪\",\n        \"一目\",\n        \"勘違い\",\n        \"弾き\",\n        \"手続\",\n        \"追う\",\n        \"149\",\n        \"セラー\",\n        \"愛情\",\n        \"it\",\n        \"視察\",\n        \"進展\",\n        \"カツ\",\n        \"ポニー\",\n        \"増やし\",\n        \"飛鳥\",\n        \"ex\",\n        \"エマ\",\n        \"エグ\",\n        \"ルナ\",\n        \"ピカ\",\n        \"動詞\",\n        \"家屋\",\n        \"ウイング\",\n        \"ユリウス\",\n        \"元帥\",\n        \"狩猟\",\n        \"##ator\",\n        \"DF\",\n        \"西川\",\n        \"高麗\",\n        \"ハイブリッド\",\n        \"AA\",\n        \"裏切り\",\n        \"目覚め\",\n        \"和平\",\n        \"招聘\",\n        \"##we\",\n        \"亡くし\",\n        \"勇気\",\n        \"ブレード\",\n        \"首脳\",\n        \"##・ダ\",\n        \"137\",\n        \"動脈\",\n        \"Ind\",\n        \"初版\",\n        \"客室\",\n        \"広瀬\",\n        \"移る\",\n        \"集積\",\n        \"##・フ\",\n        \"仕える\",\n        \"失踪\",\n        \"スープ\",\n        \"##はや\",\n        \"##ファン\",\n        \"名づけ\",\n        \"変数\",\n        \"占い\",\n        \"検事\",\n        \"代官\",\n        \"液晶\",\n        \"破損\",\n        \"オブジェクト\",\n        \"とある\",\n        \"オファー\",\n        \"パパ\",\n        \"国産\",\n        \"放置\",\n        \"目黒\",\n        \"負う\",\n        \"イブ\",\n        \"タケ\",\n        \"##トリウム\",\n        \"生育\",\n        \"著し\",\n        \"訪ね\",\n        \"フランシス\",\n        \"##ato\",\n        \"##ローラ\",\n        \"旗艦\",\n        \"那須\",\n        \"116\",\n        \"名所\",\n        \"##ネーム\",\n        \"##ヴィー\",\n        \"ユーゴスラ\",\n        \"ささ\",\n        \"警官\",\n        \"入れ替え\",\n        \"おん\",\n        \"すご\",\n        \"ハット\",\n        \"冠し\",\n        \"格好\",\n        \"ペルー\",\n        \"ムハンマド\",\n        \"直営\",\n        \"諦め\",\n        \"賃金\",\n        \"Mag\",\n        \"学部\",\n        \"触媒\",\n        \"髪型\",\n        \"One\",\n        \"セックス\",\n        \"四郎\",\n        \"Wii\",\n        \"たろう\",\n        \"当社\",\n        \"AG\",\n        \"FF\",\n        \"SNS\",\n        \"待機\",\n        \"##ma\",\n        \"向い\",\n        \"痛み\",\n        \"ファミコン\",\n        \"タラ\",\n        \"官位\",\n        \"尾崎\",\n        \"鑑定\",\n        \"ダイア\",\n        \"鳥居\",\n        \"##ラード\",\n        \"1800\",\n        \"Gen\",\n        \"ドッグ\",\n        \"左手\",\n        \"##ジング\",\n        \"次期\",\n        \"フォワード\",\n        \"Res\",\n        \"##ひろ\",\n        \"ダグラス\",\n        \"ブドウ\",\n        \"知能\",\n        \"1883\",\n        \"ノーベル\",\n        \"オーディオ\",\n        \"自立\",\n        \"選び\",\n        \"##トレ\",\n        \"##二郎\",\n        \"ハンマー\",\n        \"転送\",\n        \"農学\",\n        \"クラウド\",\n        \"告示\",\n        \"##デリック\",\n        \"後援\",\n        \"皮切り\",\n        \"##ータル\",\n        \"VTR\",\n        \"au\",\n        \"合法\",\n        \"広まっ\",\n        \"手塚\",\n        \"生体\",\n        \"竹内\",\n        \"風呂\",\n        \"麻薬\",\n        \"うら\",\n        \"銃撃\",\n        \"ジョニー\",\n        \"クリスチャン\",\n        \"大村\",\n        \"書簡\",\n        \"豪華\",\n        \"##立た\",\n        \"玄関\",\n        \"オートバイ\",\n        \"バト\",\n        \"疑わ\",\n        \"平田\",\n        \"##co\",\n        \"シェイ\",\n        \"エルフ\",\n        \"ハド\",\n        \"松下\",\n        \"##セッサ\",\n        \"##ava\",\n        \"南端\",\n        \"計測\",\n        \"##作り\",\n        \"##ARD\",\n        \"僧侶\",\n        \"小児\",\n        \"##AGE\",\n        \"ばん\",\n        \"わか\",\n        \"受託\",\n        \"行か\",\n        \"駿河\",\n        \"##ぼう\",\n        \"堆積\",\n        \"斬り\",\n        \"##タス\",\n        \"##ラスカ\",\n        \"TD\",\n        \"日高\",\n        \"表さ\",\n        \"##ごう\",\n        \"Bill\",\n        \"ラファ\",\n        \"##ink\",\n        \"Char\",\n        \"ムスリム\",\n        \"おかげ\",\n        \"基幹\",\n        \"##ンガム\",\n        \"Day\",\n        \"入会\",\n        \"頼朝\",\n        \"アントニオ\",\n        \"コク\",\n        \"ハマ\",\n        \"孤児\",\n        \"導い\",\n        \"穏やか\",\n        \"管内\",\n        \"遊撃\",\n        \"引き分け\",\n        \"ケネ\",\n        \"刻ま\",\n        \"愛好\",\n        \"最長\",\n        \"三宅\",\n        \"乗用\",\n        \"##もそ\",\n        \"ベルク\",\n        \"##替える\",\n        \"特有\",\n        \"運び\",\n        \"アーマー\",\n        \"セク\",\n        \"名門\",\n        \"本尊\",\n        \"ふれ\",\n        \"全曲\",\n        \"青葉\",\n        \"イエロー\",\n        \"がた\",\n        \"そもそ\",\n        \"そもそも\",\n        \"射程\",\n        \"有罪\",\n        \"112\",\n        \"ウィルソン\",\n        \"モニター\",\n        \"フレン\",\n        \"テール\",\n        \"上限\",\n        \"砂糖\",\n        \"カザ\",\n        \"党員\",\n        \"常陸\",\n        \"釧路\",\n        \"##ヶ原\",\n        \"遂行\",\n        \"##ナウ\",\n        \"主将\",\n        \"組ま\",\n        \"鉄筋\",\n        \"##つか\",\n        \"NG\",\n        \"フロン\",\n        \"Ann\",\n        \"皇族\",\n        \"内藤\",\n        \"観戦\",\n        \"触れる\",\n        \"下げ\",\n        \"時空\",\n        \"ニックネーム\",\n        \"専修\",\n        \"複製\",\n        \"抑える\",\n        \"幅広く\",\n        \"一塁\",\n        \"脱走\",\n        \"うつ\",\n        \"MR\",\n        \"オックス\",\n        \"石橋\",\n        \"##ya\",\n        \"##ita\",\n        \"ジョン・\",\n        \"ドナルド\",\n        \"バブル\",\n        \"UC\",\n        \"シチ\",\n        \"井戸\",\n        \"大社\",\n        \"媒体\",\n        \"道徳\",\n        \"メイク\",\n        \"主砲\",\n        \"据え\",\n        \"食用\",\n        \"##やま\",\n        \"210\",\n        \"一門\",\n        \"予言\",\n        \"フォト\",\n        \"公布\",\n        \"松浦\",\n        \"##ーヌ\",\n        \"とくに\",\n        \"##マーク\",\n        \"武術\",\n        \"がら\",\n        \"##ラマ\",\n        \"ha\",\n        \"リック\",\n        \"勾配\",\n        \"南米\",\n        \"##td\",\n        \"##her\",\n        \"##パール\",\n        \"上がり\",\n        \"おじ\",\n        \"奇妙\",\n        \"閉校\",\n        \"##レージ\",\n        \"デヴィッド\",\n        \"まれ\",\n        \"数列\",\n        \"回っ\",\n        \"封入\",\n        \"有無\",\n        \"道中\",\n        \"ジョセフ\",\n        \"ME\",\n        \"War\",\n        \"田原\",\n        \"迎撃\",\n        \"少尉\",\n        \"年上\",\n        \"百科\",\n        \"##ピオ\",\n        \"ソード\",\n        \"容器\",\n        \"じゅん\",\n        \"ミカ\",\n        \"相違\",\n        \"ne\",\n        \"展覧\",\n        \"換装\",\n        \"異例\",\n        \"レポート\",\n        \"平凡\",\n        \"ぼう\",\n        \"##サイド\",\n        \"青色\",\n        \"おさ\",\n        \"ノット\",\n        \"一角\",\n        \"西ドイツ\",\n        \"アピール\",\n        \"ルーキー\",\n        \"同居\",\n        \"本多\",\n        \"ぎょう\",\n        \"のび\",\n        \"差異\",\n        \"役目\",\n        \"本館\",\n        \"##ッケー\",\n        \"チーズ\",\n        \"750\",\n        \"休暇\",\n        \"多額\",\n        \"順番\",\n        \"ふるさと\",\n        \"ジル\",\n        \"公衆\",\n        \"納言\",\n        \"生没\",\n        \"祖先\",\n        \"バーグ\",\n        \"パシフィック\",\n        \"加熱\",\n        \"意気\",\n        \"##がみ\",\n        \"##ブール\",\n        \"##もう\",\n        \"##ett\",\n        \"##osh\",\n        \"Ag\",\n        \"サマ\",\n        \"ビア\",\n        \"御殿\",\n        \"矢野\",\n        \"追求\",\n        \"##ng\",\n        \"にほん\",\n        \"出港\",\n        \"ドロップ\",\n        \"NCID\",\n        \"ケンタッキー\",\n        \"テック\",\n        \"##ゾナ\",\n        \"登記\",\n        \"カプセル\",\n        \"ユーゴスラビア\",\n        \"コンプレ\",\n        \"MT\",\n        \"ソニック\",\n        \"参事\",\n        \"くま\",\n        \"屋外\",\n        \"町長\",\n        \"フェラー\",\n        \"鳥羽\",\n        \"##rum\",\n        \"本州\",\n        \"真田\",\n        \"突っ\",\n        \"ハリス\",\n        \"位相\",\n        \"##ka\",\n        \"WA\",\n        \"紀伊\",\n        \"NFL\",\n        \"中型\",\n        \"郡庁\",\n        \"浸透\",\n        \"スロット\",\n        \"知れ\",\n        \"講習\",\n        \"コミューン\",\n        \"迫っ\",\n        \"##ベール\",\n        \"UP\",\n        \"伝わっ\",\n        \"楽譜\",\n        \"131\",\n        \"満たし\",\n        \"Android\",\n        \"エッセイ\",\n        \"遺構\",\n        \"##ric\",\n        \"##ited\",\n        \"題名\",\n        \"##グアイ\",\n        \"かかり\",\n        \"パウ\",\n        \"従兄\",\n        \"くに\",\n        \"ダッシュ\",\n        \"アドバイス\",\n        \"きょく\",\n        \"コーポレーション\",\n        \"セグ\",\n        \"戻し\",\n        \"補償\",\n        \"##yo\",\n        \"##ンジュ\",\n        \"フランツ\",\n        \"内装\",\n        \"##ラート\",\n        \"侵害\",\n        \"ハインリヒ\",\n        \"ボーン\",\n        \"採取\",\n        \"##ビット\",\n        \"##LC\",\n        \"公安\",\n        \"概要\",\n        \"語源\",\n        \"##LS\",\n        \"エビ\",\n        \"グレゴ\",\n        \"ミスター\",\n        \"通い\",\n        \"1860\",\n        \"la\",\n        \"揃っ\",\n        \"郡山\",\n        \"たくさん\",\n        \"Night\",\n        \"ニア\",\n        \"パチンコ\",\n        \"化け\",\n        \"クォ\",\n        \"フォール\",\n        \"生没年\",\n        \"出血\",\n        \"鎮座\",\n        \"##ボーン\",\n        \"##フェクト\",\n        \"##ッケン\",\n        \"SR\",\n        \"連敗\",\n        \"##ual\",\n        \"岩崎\",\n        \"新興\",\n        \"中尉\",\n        \"史学\",\n        \"親善\",\n        \"醸造\",\n        \"##焼き\",\n        \"シャイ\",\n        \"アーキ\",\n        \"ミステリー\",\n        \"ラク\",\n        \"営む\",\n        \"情熱\",\n        \"拡散\",\n        \"リン酸\",\n        \"JP\",\n        \"きち\",\n        \"新井\",\n        \"親族\",\n        \"寸前\",\n        \"津軽\",\n        \"テネ\",\n        \"神道\",\n        \"##ベック\",\n        \"たた\",\n        \"##デイ\",\n        \"特攻\",\n        \"単体\",\n        \"受付\",\n        \"王家\",\n        \"##AST\",\n        \"cl\",\n        \"複線\",\n        \"##リッツ\",\n        \"ストレス\",\n        \"ウィキ\",\n        \"RA\",\n        \"改題\",\n        \"木下\",\n        \"決まり\",\n        \"##ームス\",\n        \"フランソ\",\n        \"クローン\",\n        \"気づい\",\n        \"伝記\",\n        \"##切れ\",\n        \"小沢\",\n        \"スティーブ\",\n        \"エフエム\",\n        \"工夫\",\n        \"村田\",\n        \"豊島\",\n        \"階層\",\n        \"モナ\",\n        \"半径\",\n        \"吸い\",\n        \"食材\",\n        \"8000\",\n        \"わざ\",\n        \"ハイド\",\n        \"実務\",\n        \"民事\",\n        \"測量\",\n        \"セールス\",\n        \"加茂\",\n        \"抹消\",\n        \"踏切\",\n        \"追撃\",\n        \"天平\",\n        \"##ごと\",\n        \"プラスチック\",\n        \"いん\",\n        \"反論\",\n        \"##ラシ\",\n        \"デジモン\",\n        \"始発\",\n        \"演算\",\n        \"ブリュ\",\n        \"ベクトル\",\n        \"全日\",\n        \"服部\",\n        \"疑惑\",\n        \"高温\",\n        \"##lex\",\n        \"屋上\",\n        \"成る\",\n        \"シベリア\",\n        \"崩れ\",\n        \"閣僚\",\n        \"JCT\",\n        \"ビートルズ\",\n        \"代謝\",\n        \"新町\",\n        \"ソマ\",\n        \"松江\",\n        \"通知\",\n        \"ゆめ\",\n        \"民放\",\n        \"ヤマハ\",\n        \"あきら\",\n        \"擁護\",\n        \"##わす\",\n        \"129\",\n        \"ふさ\",\n        \"八重\",\n        \"転生\",\n        \"ジェイム\",\n        \"つながり\",\n        \"NET\",\n        \"エウ\",\n        \"トス\",\n        \"他者\",\n        \"国体\",\n        \"入り口\",\n        \"ダイエー\",\n        \"##グラフ\",\n        \"##ナンド\",\n        \"ファーム\",\n        \"仲介\",\n        \"ラインナップ\",\n        \"増築\",\n        \"取り戻す\",\n        \"ボム\",\n        \"政界\",\n        \"日本橋\",\n        \"就く\",\n        \"一生\",\n        \"協奏\",\n        \"小樽\",\n        \"山陰\",\n        \"馬車\",\n        \"106\",\n        \"Open\",\n        \"女流\",\n        \"##ゥス\",\n        \"パズル\",\n        \"大夫\",\n        \"金色\",\n        \"##デレ\",\n        \"襲っ\",\n        \"フェン\",\n        \"きら\",\n        \"舞鶴\",\n        \"##キンス\",\n        \"ハーバード\",\n        \"動向\",\n        \"国旗\",\n        \"めぐみ\",\n        \"常磐\",\n        \"##ニティ\",\n        \"Amer\",\n        \"ボケ\",\n        \"グローブ\",\n        \"NEWS\",\n        \"略奪\",\n        \"##ALL\",\n        \"OB\",\n        \"四季\",\n        \"控訴\",\n        \"代役\",\n        \"詳しい\",\n        \"難しく\",\n        \"PK\",\n        \"テー\",\n        \"工藤\",\n        \"樺太\",\n        \"侯爵\",\n        \"台頭\",\n        \"##box\",\n        \"切る\",\n        \"愛する\",\n        \"みたい\",\n        \"方形\",\n        \"農地\",\n        \"写本\",\n        \"##・ブ\",\n        \"##ism\",\n        \"右腕\",\n        \"製鉄\",\n        \"ちょうど\",\n        \"Je\",\n        \"ソックス\",\n        \"列伝\",\n        \"##ナタ\",\n        \"組み立て\",\n        \"インディアナ\",\n        \"迫る\",\n        \"Har\",\n        \"ホロ\",\n        \"任せ\",\n        \"桐生\",\n        \"決まる\",\n        \"縄文\",\n        \"デビル\",\n        \"ツッコミ\",\n        \"リハ\",\n        \"島式\",\n        \"ドラッグ\",\n        \"CEO\",\n        \"便宜\",\n        \"債権\",\n        \"学芸\",\n        \"紙幣\",\n        \"ドラマー\",\n        \"バルブ\",\n        \"Pa\",\n        \"呪文\",\n        \"解明\",\n        \"下野\",\n        \"田園\",\n        \"かし\",\n        \"ノア\",\n        \"付随\",\n        \"巫女\",\n        \"##せい\",\n        \"有数\",\n        \"つくば\",\n        \"北野\",\n        \"##ントロ\",\n        \"喜び\",\n        \"武力\",\n        \"エム\",\n        \"リフト\",\n        \"エリート\",\n        \"亡くなる\",\n        \"リュー\",\n        \"婚姻\",\n        \"##ald\",\n        \"人文\",\n        \"強引\",\n        \"##なら\",\n        \"ニュージャ\",\n        \"##マックス\",\n        \"別府\",\n        \"依然\",\n        \"##デュ\",\n        \"サイバー\",\n        \"アシュ\",\n        \"シンプル\",\n        \"ナトリウム\",\n        \"イラストレーター\",\n        \"NPB\",\n        \"間違え\",\n        \"行える\",\n        \"Linux\",\n        \"久留米\",\n        \"反し\",\n        \"木製\",\n        \"ケネディ\",\n        \"除外\",\n        \"離れる\",\n        \"ユニフォーム\",\n        \"ボイ\",\n        \"利点\",\n        \"中西\",\n        \"##ane\",\n        \"付き合い\",\n        \"常連\",\n        \"究極\",\n        \"あだ名\",\n        \"sp\",\n        \"大原\",\n        \"茶屋\",\n        \"アルゴリズム\",\n        \"もはや\",\n        \"樹脂\",\n        \"艦船\",\n        \"集まる\",\n        \"##ナード\",\n        \"灰色\",\n        \"薬品\",\n        \"Ro\",\n        \"##ッテル\",\n        \"##バリー\",\n        \"天満\",\n        \"母艦\",\n        \"越える\",\n        \"ISS\",\n        \"ビジュアル\",\n        \"枚数\",\n        \"与党\",\n        \"図ら\",\n        \"##que\",\n        \"ダート\",\n        \"器具\",\n        \"嫉妬\",\n        \"家政\",\n        \"小柄\",\n        \"Her\",\n        \"和名\",\n        \"柔らか\",\n        \"発車\",\n        \"##ius\",\n        \"不利\",\n        \"自在\",\n        \"##カナ\",\n        \"##YS\",\n        \"147\",\n        \"ウズ\",\n        \"当事\",\n        \"##・グ\",\n        \"カテゴリー\",\n        \"仲良\",\n        \"##テール\",\n        \"アミノ\",\n        \"クマ\",\n        \"ハンス\",\n        \"志摩\",\n        \"クラッシュ\",\n        \"見つける\",\n        \"一色\",\n        \"掌握\",\n        \"軽い\",\n        \"在日\",\n        \"NASA\",\n        \"家畜\",\n        \"レジスタ\",\n        \"機銃\",\n        \"王室\",\n        \"途上\",\n        \"Ltd\",\n        \"魔界\",\n        \"##テラン\",\n        \"##じょう\",\n        \"見守\",\n        \"##ony\",\n        \"アレクサンドル\",\n        \"戯曲\",\n        \"意義\",\n        \"正統\",\n        \"順序\",\n        \"カタル\",\n        \"遅い\",\n        \"隠さ\",\n        \"台地\",\n        \"強豪\",\n        \"骨格\",\n        \"デルタ\",\n        \"リバー\",\n        \"書院\",\n        \"##タゴ\",\n        \"##・レ\",\n        \"グリー\",\n        \"##ンドウ\",\n        \"ヴィクトリア\",\n        \"ホリ\",\n        \"古河\",\n        \"156\",\n        \"アリゾナ\",\n        \"フォーマット\",\n        \"巡回\",\n        \"遊園\",\n        \"ニュージャージー\",\n        \"占拠\",\n        \"在来\",\n        \"##えん\",\n        \"国内外\",\n        \"リンカーン\",\n        \"プリキュア\",\n        \"増刊\",\n        \"満点\",\n        \"燃え\",\n        \"商会\",\n        \"打た\",\n        \"腹部\",\n        \"あて\",\n        \"ホッケー\",\n        \"等級\",\n        \"鈴鹿\",\n        \"本機\",\n        \"分泌\",\n        \"学制\",\n        \"系図\",\n        \"不死\",\n        \"極東\",\n        \"相模原\",\n        \"まんが\",\n        \"先述\",\n        \"対話\",\n        \"次女\",\n        \"馬身\",\n        \"##ッリ\",\n        \"トルク\",\n        \"主席\",\n        \"代数\",\n        \"##フェンス\",\n        \"風俗\",\n        \"450\",\n        \"##ents\",\n        \"##ジャース\",\n        \"会う\",\n        \"旋回\",\n        \"相応\",\n        \"##レータ\",\n        \"メリ\",\n        \"免除\",\n        \"田舎\",\n        \"細長\",\n        \"西経\",\n        \"州都\",\n        \"次長\",\n        \"遺族\",\n        \"##ブライ\",\n        \"レバ\",\n        \"ver\",\n        \"大友\",\n        \"感動\",\n        \"菅原\",\n        \"##ノキ\",\n        \"バウ\",\n        \"バッハ\",\n        \"ホセ\",\n        \"嫌っ\",\n        \"論じ\",\n        \"##ins\",\n        \"かわい\",\n        \"DX\",\n        \"はい\",\n        \"追い詰め\",\n        \"トロント\",\n        \"足立\",\n        \"進路\",\n        \"ギャング\",\n        \"Fr\",\n        \"ゴミ\",\n        \"捧げ\",\n        \"立花\",\n        \"##ッタン\",\n        \"フォーミュ\",\n        \"BC\",\n        \"et\",\n        \"南朝\",\n        \"##延び\",\n        \"分かれる\",\n        \"School\",\n        \"預け\",\n        \"エンジェル\",\n        \"鎮守\",\n        \"アルト\",\n        \"ハヤ\",\n        \"再発\",\n        \"政令\",\n        \"暴動\",\n        \"輝い\",\n        \"所要\",\n        \"見出し\",\n        \"##cl\",\n        \"Do\",\n        \"フォーラム\",\n        \"##・シ\",\n        \"ハードウェア\",\n        \"ハイパー\",\n        \"チョウ\",\n        \"##UND\",\n        \"廃校\",\n        \"手掛ける\",\n        \"誘わ\",\n        \"一瞬\",\n        \"聖職\",\n        \"能登\",\n        \"##ーマル\",\n        \"##ental\",\n        \"凍結\",\n        \"断っ\",\n        \"##ゲート\",\n        \"##インズ\",\n        \"##ファレンス\",\n        \"リカ\",\n        \"休養\",\n        \"定住\",\n        \"理科\",\n        \"進水\",\n        \"バーチャ\",\n        \"スクエア\",\n        \"Records\",\n        \"クビ\",\n        \"色々\",\n        \"アクア\",\n        \"アトラ\",\n        \"##落とし\",\n        \"足り\",\n        \"##リンク\",\n        \"追い込ま\",\n        \"##III\",\n        \"不二\",\n        \"制裁\",\n        \"pl\",\n        \"##ype\",\n        \"アレックス\",\n        \"喜多\",\n        \"##落ち\",\n        \"レバー\",\n        \"永井\",\n        \"肯定\",\n        \"郵政\",\n        \"##IDE\",\n        \"Sou\",\n        \"くろ\",\n        \"ミク\",\n        \"逸話\",\n        \"Star\",\n        \"支払う\",\n        \"ホップ\",\n        \"栄え\",\n        \"硫黄\",\n        \"##ビィ\",\n        \"##小路\",\n        \"好ま\",\n        \"祭神\",\n        \"たとえ\",\n        \"ザクセン\",\n        \"ル・\",\n        \"繋がり\",\n        \"イリノイ\",\n        \"7000\",\n        \"ログ\",\n        \"混同\",\n        \"見舞わ\",\n        \"交互\",\n        \"##・ザ\",\n        \"##ンジー\",\n        \"バース\",\n        \"Chr\",\n        \"エキス\",\n        \"対談\",\n        \"チェロ\",\n        \"##ッスン\",\n        \"フレーズ\",\n        \"手がける\",\n        \"High\",\n        \"市原\",\n        \"弱く\",\n        \"スウィ\",\n        \"##かわ\",\n        \"##払い\",\n        \"太守\",\n        \"東亜\",\n        \"##ピット\",\n        \"##ニッシュ\",\n        \"あらか\",\n        \"くり\",\n        \"スナ\",\n        \"中性\",\n        \"答える\",\n        \"高額\",\n        \"投じ\",\n        \"##・アル\",\n        \"ブッシュ\",\n        \"処置\",\n        \"##モンズ\",\n        \"Pe\",\n        \"免れ\",\n        \"遠隔\",\n        \"高地\",\n        \"136\",\n        \"北軍\",\n        \"タバコ\",\n        \"営利\",\n        \"##YA\",\n        \"ハミルトン\",\n        \"樹木\",\n        \"##殺し\",\n        \"テクノロジー\",\n        \"エナ\",\n        \"大砲\",\n        \"##GP\",\n        \"携わる\",\n        \"舞踊\",\n        \"CV\",\n        \"口癖\",\n        \"It\",\n        \"さわ\",\n        \"好物\",\n        \"##マンド\",\n        \"GL\",\n        \"トリック\",\n        \"モス\",\n        \"近所\",\n        \"##メイ\",\n        \"曜日\",\n        \"桃山\",\n        \"ステレオ\",\n        \"亜種\",\n        \"円盤\",\n        \"型式\",\n        \"##リーガ\",\n        \"##イトン\",\n        \"カテゴリ\",\n        \"ケーキ\",\n        \"JST\",\n        \"ランス\",\n        \"主権\",\n        \"伝道\",\n        \"順調\",\n        \"##ull\",\n        \"##ネイロ\",\n        \"海老\",\n        \"##ger\",\n        \"Ma\",\n        \"破棄\",\n        \"マネー\",\n        \"ぜん\",\n        \"Hot\",\n        \"執り\",\n        \"死に\",\n        \"陸地\",\n        \"##やり\",\n        \"尽くし\",\n        \"ハワード\",\n        \"マール\",\n        \"生誕\",\n        \"聖人\",\n        \"##之介\",\n        \"基部\",\n        \"孤独\",\n        \"祈り\",\n        \"##スロ\",\n        \"##ーシ\",\n        \"ブラザーズ\",\n        \"ウス\",\n        \"主教\",\n        \"挿絵\",\n        \"数千\",\n        \"##ブリッジ\",\n        \"Super\",\n        \"Mon\",\n        \"タム\",\n        \"交え\",\n        \"収納\",\n        \"聖母\",\n        \"西郷\",\n        \"Em\",\n        \"MHz\",\n        \"各々\",\n        \"子女\",\n        \"系譜\",\n        \"緑地\",\n        \"##CO\",\n        \"##ings\",\n        \"合金\",\n        \"図鑑\",\n        \"アンドリュー\",\n        \"BD\",\n        \"三条\",\n        \"信託\",\n        \"理工\",\n        \"百合\",\n        \"聴い\",\n        \"マンチェスター\",\n        \"GS\",\n        \"ぶつ\",\n        \"原始\",\n        \"##じみ\",\n        \"リハビリ\",\n        \"炭鉱\",\n        \"当てる\",\n        \"親戚\",\n        \"マクド\",\n        \"ムーア\",\n        \"パブ\",\n        \"導体\",\n        \"授け\",\n        \"240\",\n        \"レアル\",\n        \"放ち\",\n        \"待つ\",\n        \"所管\",\n        \"キャス\",\n        \"マーガ\",\n        \"外し\",\n        \"多彩\",\n        \"大内\",\n        \"ナポリ\",\n        \"一揆\",\n        \"招か\",\n        \"百済\",\n        \"ラト\",\n        \"断層\",\n        \"造成\",\n        \"##・ミ\",\n        \"ボトル\",\n        \"幸福\",\n        \"成熟\",\n        \"##ブック\",\n        \"グラム\",\n        \"喫煙\",\n        \"戻す\",\n        \"村立\",\n        \"水田\",\n        \"転移\",\n        \"通報\",\n        \"##ノム\",\n        \"キャッシュ\",\n        \"ブロー\",\n        \"麻生\",\n        \"##ution\",\n        \"哺乳\",\n        \"膨大\",\n        \"遭い\",\n        \"打ち切り\",\n        \"飲ん\",\n        \"フォーミュラ\",\n        \"なに\",\n        \"エリー\",\n        \"含める\",\n        \"歩い\",\n        \"高かっ\",\n        \"色彩\",\n        \"イド\",\n        \"ベテラン\",\n        \"着け\",\n        \"##red\",\n        \"伸びる\",\n        \"れん\",\n        \"タグ\",\n        \"急性\",\n        \"川島\",\n        \"市道\",\n        \"電灯\",\n        \"カ月\",\n        \"シール\",\n        \"有人\",\n        \"松岡\",\n        \"Colle\",\n        \"行なう\",\n        \"ラヴ\",\n        \"改変\",\n        \"##air\",\n        \"166\",\n        \"金山\",\n        \"##alk\",\n        \"主婦\",\n        \"TC\",\n        \"攻勢\",\n        \"知り合っ\",\n        \"保っ\",\n        \"冷房\",\n        \"日露\",\n        \"最速\",\n        \"洗礼\",\n        \"無償\",\n        \"集約\",\n        \"##タナ\",\n        \"##MO\",\n        \"##ッチャー\",\n        \"##ason\",\n        \"北斗\",\n        \"双葉\",\n        \"墓所\",\n        \"##・ヘ\",\n        \"あらかじめ\",\n        \"年始\",\n        \"悟空\",\n        \"裕福\",\n        \"ヒント\",\n        \"全土\",\n        \"奉納\",\n        \"岡村\",\n        \"アンジェ\",\n        \"初等\",\n        \"##ードン\",\n        \"アルファベット\",\n        \"実習\",\n        \"尼崎\",\n        \"新制\",\n        \"本家\",\n        \"##51\",\n        \"パレスチナ\",\n        \"カセット\",\n        \"公明\",\n        \"ウォール\",\n        \"幻想\",\n        \"歓迎\",\n        \"フェス\",\n        \"くじ\",\n        \"完璧\",\n        \"積ん\",\n        \"##chn\",\n        \"シーク\",\n        \"全滅\",\n        \"大師\",\n        \"打つ\",\n        \"##IB\",\n        \"##通し\",\n        \"サイク\",\n        \"##board\",\n        \"##換える\",\n        \"混ぜ\",\n        \"SN\",\n        \"一橋\",\n        \"##モント\",\n        \"##XT\",\n        \"ハッピー\",\n        \"没収\",\n        \"負荷\",\n        \"マーシャル\",\n        \"ウォーカー\",\n        \"あつ\",\n        \"フレイ\",\n        \"致命\",\n        \"藤本\",\n        \"##ンタム\",\n        \"パラダ\",\n        \"はじめて\",\n        \"高まり\",\n        \"##リヤ\",\n        \"Ele\",\n        \"##だし\",\n        \"##ジャネイロ\",\n        \"Aut\",\n        \"留守\",\n        \"蹴り\",\n        \"静か\",\n        \"114\",\n        \"フェラーリ\",\n        \"役人\",\n        \"消失\",\n        \"真宗\",\n        \"運ぶ\",\n        \"トレイン\",\n        \"イグ\",\n        \"オース\",\n        \"ラック\",\n        \"久米\",\n        \"吾妻\",\n        \"商船\",\n        \"##ガメ\",\n        \"内科\",\n        \"北極\",\n        \"及ば\",\n        \"進軍\",\n        \"難波\",\n        \"Stud\",\n        \"ラッセル\",\n        \"加算\",\n        \"明神\",\n        \"玉川\",\n        \"##ムシ\",\n        \"##がれ\",\n        \"サイエンス\",\n        \"ネズミ\",\n        \"修業\",\n        \"布告\",\n        \"##ぎり\",\n        \"##より\",\n        \"ステン\",\n        \"増殖\",\n        \"高価\",\n        \"1864\",\n        \"パラメ\",\n        \"プライム\",\n        \"こい\",\n        \"のぞ\",\n        \"サポーター\",\n        \"要員\",\n        \"赤軍\",\n        \"カスタム\",\n        \"原案\",\n        \"ヒューストン\",\n        \"##ML\",\n        \"スターリン\",\n        \"だら\",\n        \"深め\",\n        \"車輌\",\n        \"厳格\",\n        \"地裁\",\n        \"連装\",\n        \"いと\",\n        \"園芸\",\n        \"石器\",\n        \"リーガ\",\n        \"デイリー\",\n        \"ナス\",\n        \"浮世\",\n        \"チョコレート\",\n        \"パワ\",\n        \"##リッド\",\n        \"##ニール\",\n        \"回し\",\n        \"撤回\",\n        \"未明\",\n        \"飼い\",\n        \"##ater\",\n        \"生き残っ\",\n        \"HT\",\n        \"温暖\",\n        \"##並み\",\n        \"##ンジャーズ\",\n        \"中枢\",\n        \"通告\",\n        \"OR\",\n        \"ゲリラ\",\n        \"以南\",\n        \"包括\",\n        \"弾圧\",\n        \"##ローグ\",\n        \"ゆる\",\n        \"MA\",\n        \"トキ\",\n        \"フィー\",\n        \"##ement\",\n        \"推し\",\n        \"突起\",\n        \"京浜\",\n        \"俳句\",\n        \"出展\",\n        \"山手\",\n        \"日比\",\n        \"録画\",\n        \"ハロー\",\n        \"マック\",\n        \"千里\",\n        \"外来\",\n        \"湾岸\",\n        \"##ene\",\n        \"スキャ\",\n        \"ROM\",\n        \"長老\",\n        \"広東\",\n        \"出世\",\n        \"斜め\",\n        \"考察\",\n        \"サスペン\",\n        \"##・リーグ\",\n        \"##ンダル\",\n        \"大垣\",\n        \"注釈\",\n        \"フォート\",\n        \"ひょう\",\n        \"夏休み\",\n        \"群れ\",\n        \"さと\",\n        \"はし\",\n        \"##ョー\",\n        \"サテ\",\n        \"二郎\",\n        \"対馬\",\n        \"平原\",\n        \"平家\",\n        \"戻さ\",\n        \"##ute\",\n        \"差し替え\",\n        \"上層\",\n        \"確信\",\n        \"薬学\",\n        \"ナー\",\n        \"佐渡\",\n        \"公職\",\n        \"教職\",\n        \"王族\",\n        \"男優\",\n        \"負い\",\n        \"##ンスキー\",\n        \"Rad\",\n        \"ZERO\",\n        \"ユウ\",\n        \"告げる\",\n        \"覚悟\",\n        \"ティム\",\n        \"受け継い\",\n        \"Girl\",\n        \"シリン\",\n        \"他国\",\n        \"使節\",\n        \"動い\",\n        \"寛文\",\n        \"新羅\",\n        \"犯し\",\n        \"辺境\",\n        \"安置\",\n        \"##yd\",\n        \"生み出す\",\n        \"エヴァ\",\n        \"惹か\",\n        \"##セラ\",\n        \"オックスフォード\",\n        \"アオ\",\n        \"MB\",\n        \"ホーク\",\n        \"サーバー\",\n        \"徴収\",\n        \"真空\",\n        \"##オニア\",\n        \"駆けつけ\",\n        \"っぽい\",\n        \"is\",\n        \"のぼ\",\n        \"##ロメ\",\n        \"窒素\",\n        \"同誌\",\n        \"拷問\",\n        \"ホームズ\",\n        \"引っ越し\",\n        \"Mc\",\n        \"di\",\n        \"ヒップ\",\n        \"他方\",\n        \"##リンゲン\",\n        \"WBA\",\n        \"寿司\",\n        \"抽出\",\n        \"かえ\",\n        \"ピック\",\n        \"IR\",\n        \"目立っ\",\n        \"軽く\",\n        \"落ちる\",\n        \"カタログ\",\n        \"上手く\",\n        \"一新\",\n        \"原発\",\n        \"飾る\",\n        \"川村\",\n        \"慢性\",\n        \"プラハ\",\n        \"本気\",\n        \"フェザー\",\n        \"手伝い\",\n        \"仮定\",\n        \"歩く\",\n        \"水面\",\n        \"##ema\",\n        \"マケドニア\",\n        \"本校\",\n        \"財閥\",\n        \"水源\",\n        \"クラウン\",\n        \"はん\",\n        \"えい\",\n        \"イマ\",\n        \"千秋\",\n        \"長州\",\n        \"代わる\",\n        \"余裕\",\n        \"##アンス\",\n        \"すい\",\n        \"新書\",\n        \"稲葉\",\n        \"オルガン\",\n        \"弁当\",\n        \"##じっ\",\n        \"##替わり\",\n        \"汎用\",\n        \"減っ\",\n        \"ミシガン\",\n        \"閉館\",\n        \"アスレ\",\n        \"オットー\",\n        \"カワ\",\n        \"愛人\",\n        \"知人\",\n        \"ペーパー\",\n        \"TE\",\n        \"名声\",\n        \"微分\",\n        \"##ケー\",\n        \"スペクトル\",\n        \"1862\",\n        \"コロム\",\n        \"Bo\",\n        \"模索\",\n        \"カンザス\",\n        \"リンゴ\",\n        \"ニコラ\",\n        \"南軍\",\n        \"相棒\",\n        \"ともない\",\n        \"MG\",\n        \"かす\",\n        \"救わ\",\n        \"##ットン\",\n        \"FS\",\n        \"クワ\",\n        \"親しま\",\n        \"解剖\",\n        \"踊る\",\n        \"邪魔\",\n        \"##バイザー\",\n        \"メダリスト\",\n        \"直ちに\",\n        \"仕上げ\",\n        \"フランソワ\",\n        \"保つ\",\n        \"少なかっ\",\n        \"ルカ\",\n        \"末裔\",\n        \"遺物\",\n        \"##ru\",\n        \"CBC\",\n        \"元老\",\n        \"健一\",\n        \"語尾\",\n        \"賞賛\",\n        \"こうとう\",\n        \"TH\",\n        \"上越\",\n        \"今川\",\n        \"書物\",\n        \"##どん\",\n        \"あず\",\n        \"ブース\",\n        \"##テンベルク\",\n        \"ミニゲーム\",\n        \"春季\",\n        \"競艇\",\n        \"集結\",\n        \"ライアン\",\n        \"クルーズ\",\n        \"下ろし\",\n        \"刺史\",\n        \"速い\",\n        \"増やす\",\n        \"##ki\",\n        \"##oup\",\n        \"アレン\",\n        \"国営\",\n        \"アクティブ\",\n        \"体型\",\n        \"異母\",\n        \"語学\",\n        \"センス\",\n        \"好調\",\n        \"##ano\",\n        \"ジャンク\",\n        \"シューティング\",\n        \"空き\",\n        \"WORLD\",\n        \"設ける\",\n        \"##むね\",\n        \"you\",\n        \"たつ\",\n        \"中高\",\n        \"成年\",\n        \"##チャーズ\",\n        \"ドレ\",\n        \"現し\",\n        \"野口\",\n        \"飛ん\",\n        \"ジャーナル\",\n        \"産出\",\n        \"繋がる\",\n        \"##ele\",\n        \"ワンダー\",\n        \"割れ\",\n        \"天津\",\n        \"県庁\",\n        \"##バイバル\",\n        \"カタルーニャ\",\n        \"ナウ\",\n        \"レフ\",\n        \"出家\",\n        \"親しく\",\n        \"警報\",\n        \"面会\",\n        \"バナナ\",\n        \"反省\",\n        \"字幕\",\n        \"村山\",\n        \"National\",\n        \"ひど\",\n        \"ケリー\",\n        \"トミー\",\n        \"ロッド\",\n        \"自家\",\n        \"別荘\",\n        \"特権\",\n        \"乃木\",\n        \"##app\",\n        \"マザー\",\n        \"土俵\",\n        \"##aster\",\n        \"おおむね\",\n        \"メガネ\",\n        \"気付い\",\n        \"強大\",\n        \"趣旨\",\n        \"アソ\",\n        \"アーツ\",\n        \"グルメ\",\n        \"アレクサンダー\",\n        \"ぐらい\",\n        \"援軍\",\n        \"取り消\",\n        \"コンスタンティ\",\n        \"文法\",\n        \"ふたり\",\n        \"まき\",\n        \"回線\",\n        \"1863\",\n        \"マナ\",\n        \"Eng\",\n        \"店員\",\n        \"景気\",\n        \"あえて\",\n        \"召集\",\n        \"白川\",\n        \"結城\",\n        \"タービン\",\n        \"1867\",\n        \"コロラド\",\n        \"聴取\",\n        \"土砂\",\n        \"旧姓\",\n        \"西尾\",\n        \"陥る\",\n        \"コパ\",\n        \"汽船\",\n        \"feat\",\n        \"オズ\",\n        \"家具\",\n        \"頂上\",\n        \"PH\",\n        \"たどり\",\n        \"争っ\",\n        \"別々\",\n        \"原爆\",\n        \"土屋\",\n        \"復刻\",\n        \"総統\",\n        \"脱落\",\n        \"カロライナ\",\n        \"ひた\",\n        \"サハ\",\n        \"哲也\",\n        \"琵琶\",\n        \"補充\",\n        \"ソナタ\",\n        \"タコ\",\n        \"住職\",\n        \"##メンタル\",\n        \"Mot\",\n        \"物流\",\n        \"##サンス\",\n        \"リオデ\",\n        \"最悪\",\n        \"釈迦\",\n        \"フィッシュ\",\n        \"めぐっ\",\n        \"おこなっ\",\n        \"テリー\",\n        \"発作\",\n        \"##・フォ\",\n        \"受け入れる\",\n        \"ルーツ\",\n        \"ワゴン\",\n        \"囚人\",\n        \"寄稿\",\n        \"##IZ\",\n        \"勝つ\",\n        \"娯楽\",\n        \"富士見\",\n        \"ヘルメット\",\n        \"ラング\",\n        \"睡眠\",\n        \"降水\",\n        \"アポロ\",\n        \"コロムビア\",\n        \"リオデジャネイロ\",\n        \"ふり\",\n        \"嘉永\",\n        \"無数\",\n        \"##ゥル\",\n        \"まつわる\",\n        \"営ん\",\n        \"対局\",\n        \"尊重\",\n        \"本山\",\n        \"きわ\",\n        \"逃げる\",\n        \"Project\",\n        \"コンプレックス\",\n        \"##ep\",\n        \"南北朝\",\n        \"ギルド\",\n        \"ジミー\",\n        \"ルーズ\",\n        \"出番\",\n        \"四方\",\n        \"##tr\",\n        \"レイク\",\n        \"NPO\",\n        \"マート\",\n        \"##ディオ\",\n        \"ゼネラル\",\n        \"Can\",\n        \"ビタミン\",\n        \"志望\",\n        \"指輪\",\n        \"遺言\",\n        \"柔軟\",\n        \"参拝\",\n        \"武家\",\n        \"##リッジ\",\n        \"オーガ\",\n        \"FW\",\n        \"ソウ\",\n        \"特設\",\n        \"続行\",\n        \"講和\",\n        \"途絶\",\n        \"宣告\",\n        \"取り除\",\n        \"Val\",\n        \"巡り\",\n        \"母方\",\n        \"ハチ\",\n        \"灯台\",\n        \"背面\",\n        \"Micros\",\n        \"争う\",\n        \"動かす\",\n        \"合う\",\n        \"搬送\",\n        \"称賛\",\n        \"##レックス\",\n        \"##サーチ\",\n        \"ランナー\",\n        \"320\",\n        \"スカート\",\n        \"ニコライ\",\n        \"そっくり\",\n        \"カエ\",\n        \"##ハッタン\",\n        \"##リントン\",\n        \"テナント\",\n        \"ニール\",\n        \"通じる\",\n        \"##91\",\n        \"いっぱい\",\n        \"##テルブルク\",\n        \"受け継が\",\n        \"休刊\",\n        \"喜劇\",\n        \"特例\",\n        \"夜行\",\n        \"##na\",\n        \"単発\",\n        \"ウマ\",\n        \"いかに\",\n        \"ルク\",\n        \"インフラ\",\n        \"ミルク\",\n        \"公正\",\n        \"##uro\",\n        \"コンポ\",\n        \"ヴォーカル\",\n        \"人体\",\n        \"参画\",\n        \"##sc\",\n        \"店長\",\n        \"##スパ\",\n        \"ヤクザ\",\n        \"POP\",\n        \"片側\",\n        \"細かい\",\n        \"もたらさ\",\n        \"応答\",\n        \"気分\",\n        \"フェイ\",\n        \"ヒュ\",\n        \"日系\",\n        \"石灰\",\n        \"##sch\",\n        \"キャノン\",\n        \"##ウンテン\",\n        \"世論\",\n        \"強烈\",\n        \"譲っ\",\n        \"ディフェン\",\n        \"マイアミ\",\n        \"トレーナー\",\n        \"電信\",\n        \"##ばら\",\n        \"マンハッタン\",\n        \"はや\",\n        \"デトロ\",\n        \"宮古\",\n        \"遮断\",\n        \"##ニウス\",\n        \"スチ\",\n        \"応え\",\n        \"進入\",\n        \"SW\",\n        \"ボロ\",\n        \"レート\",\n        \"傑作\",\n        \"通訳\",\n        \"養父\",\n        \"##eth\",\n        \"トライアル\",\n        \"支局\",\n        \"魚類\",\n        \"楽しみ\",\n        \"成し遂\",\n        \"マシ\",\n        \"妄想\",\n        \"砲弾\",\n        \"飛騨\",\n        \"SHOW\",\n        \"西田\",\n        \"##ニカル\",\n        \"##去っ\",\n        \"デトロイト\",\n        \"パトリック\",\n        \"##テージ\",\n        \"##まね\",\n        \"エルサ\",\n        \"休憩\",\n        \"専任\",\n        \"陣地\",\n        \"マーガレット\",\n        \"嫡男\",\n        \"法政\",\n        \"##rit\",\n        \"##しょ\",\n        \"##遣い\",\n        \"エレクトリック\",\n        \"MAX\",\n        \"氷河\",\n        \"シチリア\",\n        \"ウサギ\",\n        \"サザン\",\n        \"満ち\",\n        \"知らさ\",\n        \"CA\",\n        \"ブルク\",\n        \"フラワー\",\n        \"ひさ\",\n        \"コング\",\n        \"ホス\",\n        \"精密\",\n        \"食物\",\n        \"##ソタ\",\n        \"##ベーション\",\n        \"##少年\",\n        \"アイアン\",\n        \"取り組む\",\n        \"エチオ\",\n        \"ホーン\",\n        \"BN\",\n        \"任官\",\n        \"八十\",\n        \"志向\",\n        \"指標\",\n        \"青少年\",\n        \"##・メ\",\n        \"アルフレ\",\n        \"ルートヴィヒ\",\n        \"フランクフルト\",\n        \"克服\",\n        \"大国\",\n        \"大勢\",\n        \"##ショップ\",\n        \"クイーンズ\",\n        \"皮肉\",\n        \"##ツキ\",\n        \"宰相\",\n        \"慣習\",\n        \"##ズエラ\",\n        \"多岐\",\n        \"暗い\",\n        \"脅迫\",\n        \"##ANG\",\n        \"カミ\",\n        \"導く\",\n        \"持株\",\n        \"釜山\",\n        \"230\",\n        \"ポーズ\",\n        \"##コク\",\n        \"うか\",\n        \"会派\",\n        \"地盤\",\n        \"造営\",\n        \"##メーション\",\n        \"バスク\",\n        \"ダメ\",\n        \"報復\",\n        \"救い\",\n        \"生地\",\n        \"アルミニ\",\n        \"テネシー\",\n        \"スネ\",\n        \"レッスン\",\n        \"左腕\",\n        \"##ubl\",\n        \"キッド\",\n        \"戦法\",\n        \"断絶\",\n        \"ストン\",\n        \"ウェア\",\n        \"##リオール\",\n        \"ハーン\",\n        \"杉山\",\n        \"異性\",\n        \"##form\",\n        \"##さま\",\n        \"ファクトリー\",\n        \"引き受け\",\n        \"同梱\",\n        \"巡礼\",\n        \"荒木\",\n        \"遥か\",\n        \"収める\",\n        \"早川\",\n        \"納入\",\n        \"##let\",\n        \"ビルボード\",\n        \"GK\",\n        \"阿弥\",\n        \"離陸\",\n        \"ヴァー\",\n        \"##フェース\",\n        \"天狗\",\n        \"アトラクション\",\n        \"BA\",\n        \"密着\",\n        \"議事\",\n        \"フレンド\",\n        \"ミシシ\",\n        \"台数\",\n        \"封鎖\",\n        \"愛国\",\n        \"豪雨\",\n        \"##じり\",\n        \"援護\",\n        \"乗り換え\",\n        \"いかなる\",\n        \"積載\",\n        \"築か\",\n        \"防空\",\n        \"まるで\",\n        \"給食\",\n        \"アセ\",\n        \"次回\",\n        \"##ヴィッチ\",\n        \"Art\",\n        \"優しく\",\n        \"高雄\",\n        \"コンボ\",\n        \"コーラ\",\n        \"シアトル\",\n        \"アワード\",\n        \"馬鹿\",\n        \"いろいろ\",\n        \"FO\",\n        \"よば\",\n        \"若松\",\n        \"##コンド\",\n        \"##キース\",\n        \"セーラー\",\n        \"マニュアル\",\n        \"任天\",\n        \"充電\",\n        \"朗読\",\n        \"条項\",\n        \"素晴らしい\",\n        \"対岸\",\n        \"産駒\",\n        \"落合\",\n        \"##ゲイ\",\n        \"1865\",\n        \"見習\",\n        \"配達\",\n        \"合わせる\",\n        \"エチオピア\",\n        \"三原\",\n        \"原画\",\n        \"大洋\",\n        \"##ology\",\n        \"Sec\",\n        \"Microsoft\",\n        \"デート\",\n        \"ハッチ\",\n        \"剣術\",\n        \"大同\",\n        \"板橋\",\n        \"##ファイ\",\n        \"##ersion\",\n        \"トール\",\n        \"ドット\",\n        \"課税\",\n        \"ウォルター\",\n        \"しら\",\n        \"崇拝\",\n        \"##lymp\",\n        \"ろく\",\n        \"厚い\",\n        \"##ラルド\",\n        \"##ベイ\",\n        \"コスプレ\",\n        \"どん\",\n        \"コト\",\n        \"ドック\",\n        \"総数\",\n        \"##urn\",\n        \"ブリティ\",\n        \"職場\",\n        \"長け\",\n        \"テラ\",\n        \"点数\",\n        \"##返り\",\n        \"##IGHT\",\n        \"手配\",\n        \"##ヨー\",\n        \"いったん\",\n        \"ロジャー\",\n        \"日活\",\n        \"派手\",\n        \"##rap\",\n        \"CB\",\n        \"券売\",\n        \"県民\",\n        \"飛車\",\n        \"LT\",\n        \"リマ\",\n        \"合わ\",\n        \"本殿\",\n        \"バッファ\",\n        \"家事\",\n        \"レーサー\",\n        \"天王寺\",\n        \"カニ\",\n        \"バンタム\",\n        \"ボンバー\",\n        \"悲しみ\",\n        \"特命\",\n        \"サスペンション\",\n        \"休業\",\n        \"出羽\",\n        \"西南\",\n        \"イレブン\",\n        \"函数\",\n        \"大敗\",\n        \"明記\",\n        \"起因\",\n        \"##ラビア\",\n        \"引き換え\",\n        \"アイン\",\n        \"下さ\",\n        \"周回\",\n        \"抱える\",\n        \"曹操\",\n        \"神楽\",\n        \"##enc\",\n        \"##ボルン\",\n        \"Count\",\n        \"体質\",\n        \"入国\",\n        \"派閥\",\n        \"硬式\",\n        \"築城\",\n        \"##テナンス\",\n        \"NEC\",\n        \"けんど\",\n        \"立案\",\n        \"プロセッサ\",\n        \"ローリング\",\n        \"スライド\",\n        \"Disc\",\n        \"サビ\",\n        \"意欲\",\n        \"消息\",\n        \"渋滞\",\n        \"融資\",\n        \"##・セ\",\n        \"##・ト\",\n        \"##ロイ\",\n        \"シャープ\",\n        \"うどん\",\n        \"たて\",\n        \"ドミ\",\n        \"進撃\",\n        \"鋭い\",\n        \"頭脳\",\n        \"##しょう\",\n        \"ビルマ\",\n        \"天野\",\n        \"##ations\",\n        \"ケンブリッジ\",\n        \"取り扱う\",\n        \"リヴァ\",\n        \"甘い\",\n        \"臨ん\",\n        \"##ミントン\",\n        \"ひかり\",\n        \"サード\",\n        \"実父\",\n        \"##ラフ\",\n        \"日清\",\n        \"持ち帰\",\n        \"Red\",\n        \"バレン\",\n        \"仕方\",\n        \"低減\",\n        \"勝者\",\n        \"素直\",\n        \"なくし\",\n        \"##ama\",\n        \"ファイターズ\",\n        \"サヨ\",\n        \"慎重\",\n        \"片方\",\n        \"##コム\",\n        \"##越え\",\n        \"チェン\",\n        \"クレア\",\n        \"常時\",\n        \"##プリング\",\n        \"##コブ\",\n        \"アンダーソン\",\n        \"合弁\",\n        \"業者\",\n        \"ユーザ\",\n        \"もらえ\",\n        \"モデ\",\n        \"屋内\",\n        \"準拠\",\n        \"病死\",\n        \"通用\",\n        \"Java\",\n        \"山川\",\n        \"##55\",\n        \"ウィング\",\n        \"ウォーズ\",\n        \"ミネソタ\",\n        \"アデ\",\n        \"レジェ\",\n        \"不幸\",\n        \"沼津\",\n        \"着任\",\n        \"##ソニック\",\n        \"代用\",\n        \"為替\",\n        \"クライアント\",\n        \"合宿\",\n        \"常任\",\n        \"殴り\",\n        \"バリー\",\n        \"クス\",\n        \"単式\",\n        \"留まり\",\n        \"痛め\",\n        \"##シミ\",\n        \"宝暦\",\n        \"源流\",\n        \"都営\",\n        \"##FE\",\n        \"西山\",\n        \"速く\",\n        \"##ヶ崎\",\n        \"##本木\",\n        \"インク\",\n        \"##フォーク\",\n        \"一流\",\n        \"挑ん\",\n        \"ゴッド\",\n        \"ロイド\",\n        \"亜科\",\n        \"同窓\",\n        \"プロペラ\",\n        \"主翼\",\n        \"名物\",\n        \"未知\",\n        \"カップル\",\n        \"えん\",\n        \"常設\",\n        \"形容\",\n        \"河合\",\n        \"特色\",\n        \"諜報\",\n        \"通話\",\n        \"仮名\",\n        \"太刀\",\n        \"豊川\",\n        \"##ex\",\n        \"##ダース\",\n        \"CT\",\n        \"調和\",\n        \"金髪\",\n        \"ソーシャル\",\n        \"メンテナンス\",\n        \"マツダ\",\n        \"国府\",\n        \"等しい\",\n        \"##まち\",\n        \"##グマ\",\n        \"テロップ\",\n        \"はた\",\n        \"養護\",\n        \"小麦\",\n        \"火器\",\n        \"誇っ\",\n        \"##ha\",\n        \"##ナート\",\n        \"##ばり\",\n        \"##ンクス\",\n        \"マニラ\",\n        \"イケ\",\n        \"奨学\",\n        \"頼り\",\n        \"##inc\",\n        \"##any\",\n        \"取り壊\",\n        \"アムステル\",\n        \"しめ\",\n        \"なな\",\n        \"わかり\",\n        \"ド・\",\n        \"救っ\",\n        \"減らし\",\n        \"転身\",\n        \"Black\",\n        \"Dav\",\n        \"from\",\n        \"郡内\",\n        \"##わい\",\n        \"1866\",\n        \"Olymp\",\n        \"Tour\",\n        \"##って\",\n        \"ベネズエラ\",\n        \"領有\",\n        \"##ors\",\n        \"回る\",\n        \"志村\",\n        \"日経\",\n        \"米子\",\n        \"抗体\",\n        \"バーチャル\",\n        \"文久\",\n        \"プリント\",\n        \"At\",\n        \"使徒\",\n        \"山村\",\n        \"掃除\",\n        \"##IAL\",\n        \"##ルティング\",\n        \"##もっ\",\n        \"ROCK\",\n        \"遭っ\",\n        \"鋳造\",\n        \"グラフィ\",\n        \"カンボ\",\n        \"##IME\",\n        \"ヘー\",\n        \"組成\",\n        \"ライド\",\n        \"アルミニウム\",\n        \"交番\",\n        \"WWE\",\n        \"ふみ\",\n        \"アコース\",\n        \"マフィア\",\n        \"旋律\",\n        \"相馬\",\n        \"遅延\",\n        \"##CH\",\n        \"亡き\",\n        \"北端\",\n        \"鉱業\",\n        \"##ASH\",\n        \"GH\",\n        \"To\",\n        \"##por\",\n        \"Spec\",\n        \"尋ね\",\n        \"インパクト\",\n        \"ブラウザ\",\n        \"カーン\",\n        \"大崎\",\n        \"決闘\",\n        \"##リップ\",\n        \"キャニオン\",\n        \"##inal\",\n        \"ダウンタウン\",\n        \"サタ\",\n        \"出動\",\n        \"天地\",\n        \"小牧\",\n        \"##vel\",\n        \"ハイム\",\n        \"エンターテイメント\",\n        \"サンディエゴ\",\n        \"イヌ\",\n        \"ウン\",\n        \"草津\",\n        \"アンチ\",\n        \"##チェン\",\n        \"ファイブ\",\n        \"公使\",\n        \"年長\",\n        \"書紀\",\n        \"流す\",\n        \"University\",\n        \"どころ\",\n        \"共闘\",\n        \"四十\",\n        \"笑っ\",\n        \"##ww\",\n        \"##ビアン\",\n        \"ヘッセン\",\n        \"ヨン\",\n        \"塩化\",\n        \"Pol\",\n        \"des\",\n        \"振付\",\n        \"##がき\",\n        \"近づく\",\n        \"ラバ\",\n        \"リサーチ\",\n        \"原産\",\n        \"am\",\n        \"待合\",\n        \"遂に\",\n        \"高圧\",\n        \"デイヴィッド\",\n        \"Xbox\",\n        \"co\",\n        \"ひめ\",\n        \"カープ\",\n        \"年俸\",\n        \"意匠\",\n        \"興奮\",\n        \"##AWA\",\n        \"PP\",\n        \"みゆき\",\n        \"テイク\",\n        \"中古\",\n        \"信念\",\n        \"意外\",\n        \"誘致\",\n        \"チョン\",\n        \"佐竹\",\n        \"係数\",\n        \"密接\",\n        \"男の子\",\n        \"##ネーション\",\n        \"アコースティック\",\n        \"コカ\",\n        \"##継ぎ\",\n        \"ミシシッピ\",\n        \"出航\",\n        \"悩まさ\",\n        \"未遂\",\n        \"潜在\",\n        \"薄く\",\n        \"Don\",\n        \"fr\",\n        \"##ナギ\",\n        \"##きん\",\n        \"スズキ\",\n        \"ゴードン\",\n        \"ツリー\",\n        \"固体\",\n        \"エスカ\",\n        \"Dream\",\n        \"バド\",\n        \"商売\",\n        \"広義\",\n        \"##ストル\",\n        \"つくる\",\n        \"フィルハー\",\n        \"レシピ\",\n        \"ふれあい\",\n        \"アズ\",\n        \"ウラン\",\n        \"指向\",\n        \"賛同\",\n        \"振る舞い\",\n        \"凱旋\",\n        \"叢書\",\n        \"摂津\",\n        \"無罪\",\n        \"盗賊\",\n        \"線形\",\n        \"フランシスコ\",\n        \"コロニー\",\n        \"ネパール\",\n        \"特記\",\n        \"胞子\",\n        \"Pet\",\n        \"ナノ\",\n        \"William\",\n        \"八代\",\n        \"ソロモン\",\n        \"ジェイムズ\",\n        \"ガイア\",\n        \"プエ\",\n        \"仕立て\",\n        \"弾丸\",\n        \"添加\",\n        \"高句\",\n        \"##パル\",\n        \"ウォン\",\n        \"もらえる\",\n        \"アイスランド\",\n        \"高句麗\",\n        \"増田\",\n        \"真似\",\n        \"##gh\",\n        \"##ヴィエ\",\n        \"シンセ\",\n        \"フロンティア\",\n        \"GN\",\n        \"me\",\n        \"以っ\",\n        \"有志\",\n        \"生ん\",\n        \"痕跡\",\n        \"ヤンキース\",\n        \"ヤー\",\n        \"直面\",\n        \"黒色\",\n        \"##ler\",\n        \"MD\",\n        \"はち\",\n        \"廃業\",\n        \"楽しめる\",\n        \"モロッコ\",\n        \"ラボ\",\n        \"長尾\",\n        \"##リーニ\",\n        \"ブリティッシュ\",\n        \"KD\",\n        \"タス\",\n        \"チャーリー\",\n        \"ゴシック\",\n        \"去る\",\n        \"閉じ込め\",\n        \"うけ\",\n        \"ヵ月\",\n        \"堤防\",\n        \"版画\",\n        \"留置\",\n        \"継ぎ\",\n        \"グルジア\",\n        \"ウェーブ\",\n        \"バッグ\",\n        \"仮称\",\n        \"地表\",\n        \"投げる\",\n        \"衛門\",\n        \"魔導\",\n        \"##ざい\",\n        \"テクニック\",\n        \"Club\",\n        \"ルノー\",\n        \"公示\",\n        \"奉仕\",\n        \"小池\",\n        \"育つ\",\n        \"##ッダ\",\n        \"126\",\n        \"あげる\",\n        \"怒っ\",\n        \"##ble\",\n        \"ミュージアム\",\n        \"ナビゲ\",\n        \"ざわ\",\n        \"ヨシ\",\n        \"リヒ\",\n        \"単身\",\n        \"谷川\",\n        \"何者\",\n        \"諸説\",\n        \"##ランカ\",\n        \"##シュタット\",\n        \"アウグスト\",\n        \"Rock\",\n        \"やむ\",\n        \"ポリス\",\n        \"ワープ\",\n        \"右投\",\n        \"皇室\",\n        \"##わしい\",\n        \"##ンプソン\",\n        \"アーキテク\",\n        \"##っぱ\",\n        \"バルカン\",\n        \"##URO\",\n        \"キエフ\",\n        \"中略\",\n        \"部員\",\n        \"オーダー\",\n        \"収蔵\",\n        \"湿地\",\n        \"路上\",\n        \"作り出し\",\n        \"準じ\",\n        \"うん\",\n        \"失脚\",\n        \"魔神\",\n        \"チェス\",\n        \"プラズマ\",\n        \"キラー\",\n        \"バビ\",\n        \"文藝\",\n        \"新編\",\n        \"補正\",\n        \"逝去\",\n        \"##直す\",\n        \"セントル\",\n        \"散歩\",\n        \"木星\",\n        \"##がけ\",\n        \"カリブ\",\n        \"のび太\",\n        \"ひがし\",\n        \"トーン\",\n        \"党派\",\n        \"左岸\",\n        \"##エイ\",\n        \"1861\",\n        \"フライト\",\n        \"奥州\",\n        \"##71\",\n        \"##らぎ\",\n        \"チャーチ\",\n        \"ウィス\",\n        \"フレデリック\",\n        \"アムステルダム\",\n        \"NATO\",\n        \"Vo\",\n        \"きみ\",\n        \"供養\",\n        \"元和\",\n        \"開園\",\n        \"飼っ\",\n        \"1850\",\n        \"カンボジア\",\n        \"かき\",\n        \"ツェ\",\n        \"劣る\",\n        \"小銃\",\n        \"要し\",\n        \"別冊\",\n        \"##モロ\",\n        \"ゼル\",\n        \"剥奪\",\n        \"右衛門\",\n        \"津山\",\n        \"サイコ\",\n        \"試みる\",\n        \"ブロードウェイ\",\n        \"奇襲\",\n        \"小室\",\n        \"永田\",\n        \"調印\",\n        \"122\",\n        \"番付\",\n        \"おは\",\n        \"オイ\",\n        \"メド\",\n        \"反動\",\n        \"寝台\",\n        \"##ニク\",\n        \"ルネサンス\",\n        \"物産\",\n        \"##aka\",\n        \"だいがく\",\n        \"ゆっくり\",\n        \"旭日\",\n        \"##じて\",\n        \"Int\",\n        \"ユキ\",\n        \"練馬\",\n        \"##かかっ\",\n        \"伊丹\",\n        \"慰安\",\n        \"##ストリ\",\n        \"クア\",\n        \"ホン\",\n        \"飲む\",\n        \"##ロド\",\n        \"アドルフ\",\n        \"刺さ\",\n        \"反転\",\n        \"吊り\",\n        \"片岡\",\n        \"エアロ\",\n        \"カメラマン\",\n        \"訴える\",\n        \"ディープ\",\n        \"往来\",\n        \"遠い\",\n        \"##ボス\",\n        \"使命\",\n        \"大沢\",\n        \"愛用\",\n        \"直流\",\n        \"赤外\",\n        \"辺り\",\n        \"リタイア\",\n        \"Christ\",\n        \"マッカ\",\n        \"断片\",\n        \"渡す\",\n        \"適当\",\n        \"飛び出し\",\n        \"ゼン\",\n        \"フアン\",\n        \"ロビー\",\n        \"なんて\",\n        \"入選\",\n        \"操業\",\n        \"牛乳\",\n        \"若き\",\n        \"##チョウ\",\n        \"TAK\",\n        \"於い\",\n        \"##ダス\",\n        \"コンゴ\",\n        \"パナソニック\",\n        \"モア\",\n        \"最短\",\n        \"##戻し\",\n        \"CBS\",\n        \"がく\",\n        \"コナン\",\n        \"生殖\",\n        \"硬貨\",\n        \"電報\",\n        \"宗家\",\n        \"折り返し\",\n        \"ネス\",\n        \"直樹\",\n        \"資材\",\n        \"立てる\",\n        \"ケルン\",\n        \"北欧\",\n        \"減らす\",\n        \"火薬\",\n        \"あゆみ\",\n        \"ゾイド\",\n        \"店主\",\n        \"結核\",\n        \"醤油\",\n        \"##付い\",\n        \"ニンテン\",\n        \"どおり\",\n        \"平地\",\n        \"武者\",\n        \"点在\",\n        \"納得\",\n        \"##・リ\",\n        \"##fl\",\n        \"スピーカー\",\n        \"セダン\",\n        \"退け\",\n        \"クリエイティブ\",\n        \"ヘブライ\",\n        \"不法\",\n        \"決済\",\n        \"竹田\",\n        \"築き\",\n        \"サンプル\",\n        \"##スティック\",\n        \"てい\",\n        \"直結\",\n        \"##デラ\",\n        \"##リッヒ\",\n        \"##ura\",\n        \"握っ\",\n        \"驚い\",\n        \"キャサ\",\n        \"輝く\",\n        \"頼み\",\n        \"##ONE\",\n        \"不可欠\",\n        \"信徒\",\n        \"台東\",\n        \"キャピ\",\n        \"ナチ\",\n        \"川内\",\n        \"連ね\",\n        \"市中\",\n        \"ジェノ\",\n        \"www\",\n        \"ミハ\",\n        \"国軍\",\n        \"本書\",\n        \"##pm\",\n        \"##ラーゼ\",\n        \"ジャニーズ\",\n        \"フック\",\n        \"松島\",\n        \"洋画\",\n        \"買う\",\n        \"たば\",\n        \"中堅\",\n        \"手順\",\n        \"神秘\",\n        \"##コック\",\n        \"##グレ\",\n        \"この世\",\n        \"立ち向\",\n        \"大将軍\",\n        \"エルサレム\",\n        \"Best\",\n        \"跳ね\",\n        \"連立\",\n        \"北村\",\n        \"即座\",\n        \"天明\",\n        \"打倒\",\n        \"精力\",\n        \"##プール\",\n        \"ローレンス\",\n        \"上原\",\n        \"町立\",\n        \"##ッテン\",\n        \"引き継ぐ\",\n        \"ソフィア\",\n        \"左派\",\n        \"浄化\",\n        \"田口\",\n        \"新社\",\n        \"経っ\",\n        \"フェロー\",\n        \"ローラ\",\n        \"いわき\",\n        \"なみ\",\n        \"カク\",\n        \"ピュ\",\n        \"一言\",\n        \"切手\",\n        \"宛て\",\n        \"巡査\",\n        \"徴兵\",\n        \"歌人\",\n        \"##プライ\",\n        \"##oss\",\n        \"喜ん\",\n        \"年下\",\n        \"書道\",\n        \"つづ\",\n        \"なろう\",\n        \"擁する\",\n        \"ER\",\n        \"##張っ\",\n        \"ペドロ\",\n        \"冷凍\",\n        \"強め\",\n        \"本文\",\n        \"##DP\",\n        \"ノルマン\",\n        \"村長\",\n        \"民謡\",\n        \"装填\",\n        \"123\",\n        \"受け取る\",\n        \"メルセ\",\n        \"Bro\",\n        \"##ソール\",\n        \"アルバート\",\n        \"ユリ\",\n        \"事象\",\n        \"守ら\",\n        \"平井\",\n        \"発光\",\n        \"引き継ぎ\",\n        \"ATM\",\n        \"生み出さ\",\n        \"##REAM\",\n        \"レモン\",\n        \"混雑\",\n        \"視野\",\n        \"##フィス\",\n        \"吉岡\",\n        \"椎名\",\n        \"##きょう\",\n        \"アルカ\",\n        \"ハドソン\",\n        \"シリ\",\n        \"動揺\",\n        \"帰宅\",\n        \"掲げる\",\n        \"##ビシオン\",\n        \"Fac\",\n        \"ネック\",\n        \"帰郷\",\n        \"慣れ\",\n        \"臨海\",\n        \"送電\",\n        \"##sp\",\n        \"東郷\",\n        \"連行\",\n        \"##du\",\n        \"##降り\",\n        \"##ティエ\",\n        \"##ディーン\",\n        \"みなと\",\n        \"ホルモン\",\n        \"面白い\",\n        \"ミシェル\",\n        \"給与\",\n        \"荒廃\",\n        \"ありが\",\n        \"##ブレム\",\n        \"仲良く\",\n        \"ナレーター\",\n        \"桑田\",\n        \"レインボー\",\n        \"DA\",\n        \"罰金\",\n        \"転属\",\n        \"開花\",\n        \"##ille\",\n        \"冷戦\",\n        \"##チド\",\n        \"##振り\",\n        \"VR\",\n        \"ヨル\",\n        \"リット\",\n        \"名残\",\n        \"変装\",\n        \"消す\",\n        \"祈願\",\n        \"織り\",\n        \"長門\",\n        \"##ブランド\",\n        \"##めき\",\n        \"エストニア\",\n        \"提督\",\n        \"破る\",\n        \"グラント\",\n        \"テンポ\",\n        \"頭取\",\n        \"##ボウ\",\n        \"コンタ\",\n        \"イサ\",\n        \"大破\",\n        \"穀物\",\n        \"##ese\",\n        \"##ンパイア\",\n        \"キッズ\",\n        \"勤める\",\n        \"追いかけ\",\n        \"作り上げ\",\n        \"促す\",\n        \"託し\",\n        \"シス\",\n        \"知恵\",\n        \"JO\",\n        \"探知\",\n        \"##ガンダ\",\n        \"呼び出し\",\n        \"無くなっ\",\n        \"ぐる\",\n        \"定番\",\n        \"獲物\",\n        \"隼人\",\n        \"落ち着い\",\n        \"##ーマーケット\",\n        \"過酷\",\n        \"##クサ\",\n        \"Wi\",\n        \"WD\",\n        \"ジオン\",\n        \"公言\",\n        \"右岸\",\n        \"篠原\",\n        \"鶴岡\",\n        \"550\",\n        \"古巣\",\n        \"民法\",\n        \"##イクル\",\n        \"志賀\",\n        \"転居\",\n        \"##out\",\n        \"しゃべ\",\n        \"ヒート\",\n        \"ムシ\",\n        \"月間\",\n        \"紳士\",\n        \"スパイダー\",\n        \"Mod\",\n        \"スティック\",\n        \"花園\",\n        \"モントリオール\",\n        \"ヌー\",\n        \"出自\",\n        \"間に\",\n        \"カザフ\",\n        \"乗合\",\n        \"基督\",\n        \"有田\",\n        \"架け\",\n        \"良かっ\",\n        \"スーパーマーケット\",\n        \"塗り\",\n        \"配分\",\n        \"門司\",\n        \"メルセデス\",\n        \"届か\",\n        \"##ートー\",\n        \"ファイア\",\n        \"ウズベ\",\n        \"浸水\",\n        \"遊ぶ\",\n        \"ピッツ\",\n        \"ポッド\",\n        \"御前\",\n        \"摩擦\",\n        \"##ぐち\",\n        \"##のう\",\n        \"アイオ\",\n        \"Mich\",\n        \"佐倉\",\n        \"駐留\",\n        \"切り離\",\n        \"祀る\",\n        \"##トペ\",\n        \"コーディ\",\n        \"キャンセル\",\n        \"Billboard\",\n        \"Tok\",\n        \"大江\",\n        \"満洲\",\n        \"発酵\",\n        \"##ven\",\n        \"スロバキア\",\n        \"##ship\",\n        \"Associ\",\n        \"家電\",\n        \"張っ\",\n        \"濃い\",\n        \"迅速\",\n        \"不調\",\n        \"側室\",\n        \"加古\",\n        \"移す\",\n        \"見下\",\n        \"ケータ\",\n        \"ビュ\",\n        \"社殿\",\n        \"置換\",\n        \"製紙\",\n        \"##ner\",\n        \"オリエ\",\n        \"リバウンド\",\n        \"動か\",\n        \"蝦夷\",\n        \"フランチャ\",\n        \"SK\",\n        \"ムラ\",\n        \"幅員\",\n        \"発令\",\n        \"赤穂\",\n        \"##ior\",\n        \"##75\",\n        \"マイナス\",\n        \"あす\",\n        \"処女\",\n        \"国宝\",\n        \"腕前\",\n        \"ヴァージョン\",\n        \"YOU\",\n        \"火炎\",\n        \"Sal\",\n        \"ベール\",\n        \"上回っ\",\n        \"寄進\",\n        \"局所\",\n        \"舗装\",\n        \"葛飾\",\n        \"オールド\",\n        \"優勢\",\n        \"匹敵\",\n        \"日刊\",\n        \"##シマ\",\n        \"##ゃく\",\n        \"MON\",\n        \"パルス\",\n        \"配合\",\n        \"##ドア\",\n        \"##ばん\",\n        \"##じん\",\n        \"信州\",\n        \"分かり\",\n        \"摂政\",\n        \"末端\",\n        \"黒川\",\n        \"佐久間\",\n        \"壊れ\",\n        \"水分\",\n        \"聞かさ\",\n        \"フルート\",\n        \"吹き飛\",\n        \"##チューム\",\n        \"後漢\",\n        \"##ニクス\",\n        \"岩石\",\n        \"挟ま\",\n        \"退場\",\n        \"開山\",\n        \"ロータ\",\n        \"公転\",\n        \"細い\",\n        \"##まつ\",\n        \"パナマ\",\n        \"事変\",\n        \"分断\",\n        \"アング\",\n        \"分配\",\n        \"可動\",\n        \"台本\",\n        \"清掃\",\n        \"短調\",\n        \"秋季\",\n        \"ステータス\",\n        \"楽しん\",\n        \"プロトコル\",\n        \"Life\",\n        \"ラマ\",\n        \"リーズ\",\n        \"顔面\",\n        \"##らん\",\n        \"サーカス\",\n        \"##クタール\",\n        \"ずれ\",\n        \"アゼル\",\n        \"画策\",\n        \"##しゅ\",\n        \"スタメン\",\n        \"まさに\",\n        \"ヨハネ\",\n        \"係る\",\n        \"洗脳\",\n        \"##LA\",\n        \"##ーツァ\",\n        \"火事\",\n        \"立方\",\n        \"遡る\",\n        \"##ざし\",\n        \"ジョイ\",\n        \"及ぼす\",\n        \"始末\",\n        \"##INAL\",\n        \"1848\",\n        \"アテナ\",\n        \"コスチューム\",\n        \"Geor\",\n        \"上皇\",\n        \"分家\",\n        \"目録\",\n        \"##amb\",\n        \"三遊\",\n        \"広州\",\n        \"詩集\",\n        \"##ミュー\",\n        \"なくなり\",\n        \"シュトゥ\",\n        \"##iver\",\n        \"いすゞ\",\n        \"サテライト\",\n        \"AF\",\n        \"なぞ\",\n        \"生母\",\n        \"番外\",\n        \"祖国\",\n        \"稼ぎ\",\n        \"##ヒル\",\n        \"##んじゃ\",\n        \"メリット\",\n        \"採集\",\n        \"##ral\",\n        \"##ella\",\n        \"イズ\",\n        \"アクセント\",\n        \"サヨナラ\",\n        \"ラ・\",\n        \"公団\",\n        \"有用\",\n        \"##ンドル\",\n        \"ブリテン\",\n        \"づくり\",\n        \"過ぎる\",\n        \"テム\",\n        \"ロベルト\",\n        \"整え\",\n        \"貝塚\",\n        \"陽性\",\n        \"##ベス\",\n        \"ファイン\",\n        \"イザ\",\n        \"蔵書\",\n        \"##クリ\",\n        \"いずみ\",\n        \"オト\",\n        \"元来\",\n        \"幕下\",\n        \"有権\",\n        \"ましょう\",\n        \"キャサリン\",\n        \"イヴ\",\n        \"素子\",\n        \"##ニバル\",\n        \"ウォル\",\n        \"SG\",\n        \"##さか\",\n        \"アンディ\",\n        \"be\",\n        \"へい\",\n        \"バタ\",\n        \"史実\",\n        \"羽根\",\n        \"陥り\",\n        \"2500\",\n        \"アドバイザー\",\n        \"ストローク\",\n        \"カモ\",\n        \"メチル\",\n        \"初心\",\n        \"刺し\",\n        \"安心\",\n        \"架かる\",\n        \"クライマックス\",\n        \"河北\",\n        \"##デンブルク\",\n        \"菩提\",\n        \"調べる\",\n        \"転入\",\n        \"##き出し\",\n        \"##グリ\",\n        \"##ンドロ\",\n        \"慕容\",\n        \"米沢\",\n        \"##eral\",\n        \"(-\",\n        \"ml\",\n        \"本能\",\n        \"激突\",\n        \"全編\",\n        \"子役\",\n        \"##メール\",\n        \"##DL\",\n        \"Min\",\n        \"一味\",\n        \"##げん\",\n        \"##沿い\",\n        \"アルバニア\",\n        \"江戸川\",\n        \"##ミュエル\",\n        \"松戸\",\n        \"運ん\",\n        \"##ぐり\",\n        \"MM\",\n        \"ヘクタール\",\n        \"ホース\",\n        \"公平\",\n        \"名簿\",\n        \"奄美\",\n        \"民家\",\n        \"物件\",\n        \"パンツ\",\n        \"フェルディ\",\n        \"デカ\",\n        \"内包\",\n        \"端子\",\n        \"マーチ\",\n        \"カンファレンス\",\n        \"機密\",\n        \"隷下\",\n        \"##ポー\",\n        \"大木\",\n        \"有害\",\n        \"盗み\",\n        \"頼ま\",\n        \"いくら\",\n        \"トリプル\",\n        \"移り住\",\n        \"ヨーゼフ\",\n        \"並み\",\n        \"城壁\",\n        \"除籍\",\n        \"##ガタ\",\n        \"さす\",\n        \"居城\",\n        \"最盛\",\n        \"##ouse\",\n        \"ac\",\n        \"ノック\",\n        \"戴冠\",\n        \"義経\",\n        \"ミズーリ\",\n        \"以北\",\n        \"古今\",\n        \"合っ\",\n        \"若く\",\n        \"苦しみ\",\n        \"サウジア\",\n        \"OK\",\n        \"Power\",\n        \"モーション\",\n        \"放火\",\n        \"疲労\",\n        \"##・ウ\",\n        \"##きゅう\",\n        \"ルドルフ\",\n        \"雇わ\",\n        \"ボスニア\",\n        \"Sing\",\n        \"サントリー\",\n        \"炭酸\",\n        \"特筆\",\n        \"アベニュー\",\n        \"Trans\",\n        \"イニング\",\n        \"掘削\",\n        \"##かう\",\n        \"オア\",\n        \"下級\",\n        \"瑞穂\",\n        \"義勇\",\n        \"自慢\",\n        \"話者\",\n        \"##まわり\",\n        \"##ードル\",\n        \"fl\",\n        \"谷口\",\n        \"包ま\",\n        \"発案\",\n        \"Inter\",\n        \"原曲\",\n        \"渡さ\",\n        \"麻痺\",\n        \"##さき\",\n        \"パラダイス\",\n        \"##トペテルブルク\",\n        \"偽装\",\n        \"内外\",\n        \"燃費\",\n        \"貼り\",\n        \"##ren\",\n        \"##ステン\",\n        \"イース\",\n        \"勧誘\",\n        \"萩原\",\n        \"赴い\",\n        \"##ision\",\n        \"ライブラリ\",\n        \"Nor\",\n        \"le\",\n        \"衣服\",\n        \"ヴィー\",\n        \"##ACE\",\n        \"ストライク\",\n        \"大介\",\n        \"巧み\",\n        \"承継\",\n        \"見かけ\",\n        \"ノイズ\",\n        \"体長\",\n        \"地主\",\n        \"##iro\",\n        \"フランクリン\",\n        \"ロマンス\",\n        \"年表\",\n        \"所沢\",\n        \"##IK\",\n        \"1830\",\n        \"ジャスティ\",\n        \"ヴェー\",\n        \"スローガン\",\n        \"久保田\",\n        \"反抗\",\n        \"抽象\",\n        \"静止\",\n        \"アルマ\",\n        \"ギャン\",\n        \"下田\",\n        \"勅令\",\n        \"後続\",\n        \"収束\",\n        \"編制\",\n        \"##ero\",\n        \"プロフェ\",\n        \"##ats\",\n        \"レイアウト\",\n        \"キノコ\",\n        \"促し\",\n        \"改宗\",\n        \"生駒\",\n        \"開会\",\n        \"サイモン\",\n        \"EL\",\n        \"アラスカ\",\n        \"勝率\",\n        \"問う\",\n        \"##ショウ\",\n        \"インストール\",\n        \"コナミ\",\n        \"接収\",\n        \"##ペスト\",\n        \"両端\",\n        \"堀江\",\n        \"崩し\",\n        \"白井\",\n        \"耐性\",\n        \"##ican\",\n        \"REC\",\n        \"サミュエル\",\n        \"退治\",\n        \"風土\",\n        \"ディーン\",\n        \"##ital\",\n        \"プラント\",\n        \"マクロス\",\n        \"イーグルス\",\n        \"イオ\",\n        \"幼虫\",\n        \"煙突\",\n        \"重臣\",\n        \"望月\",\n        \"極め\",\n        \"胸部\",\n        \"サウジアラビア\",\n        \"ゲオ\",\n        \"パド\",\n        \"各所\",\n        \"対外\",\n        \"義理\",\n        \"貯金\",\n        \"エンタープライズ\",\n        \"ゾウ\",\n        \"リンパ\",\n        \"全権\",\n        \"尻尾\",\n        \"監禁\",\n        \"シャッター\",\n        \"スパルタ\",\n        \"##ebook\",\n        \"待遇\",\n        \"漏れ\",\n        \"##てい\",\n        \"Award\",\n        \"Time\",\n        \"一説\",\n        \"前部\",\n        \"収監\",\n        \"四川\",\n        \"思え\",\n        \"##・ボ\",\n        \"330\",\n        \"アライ\",\n        \"使い手\",\n        \"つぶ\",\n        \"ノーマル\",\n        \"暴露\",\n        \"自伝\",\n        \"長寿\",\n        \"飯塚\",\n        \"両腕\",\n        \"動かし\",\n        \"商学\",\n        \"恒例\",\n        \"病理\",\n        \"経費\",\n        \"##バナ\",\n        \"##デンス\",\n        \"書き下ろし\",\n        \"##ャンマー\",\n        \"Er\",\n        \"マフ\",\n        \"カジノ\",\n        \"セントルイス\",\n        \"CON\",\n        \"普遍\",\n        \"莫大\",\n        \"Ang\",\n        \"まこと\",\n        \"全力\",\n        \"坂井\",\n        \"市域\",\n        \"旧称\",\n        \"##work\",\n        \"激化\",\n        \"##トリア\",\n        \"あいだ\",\n        \"失格\",\n        \"安土\",\n        \"肺炎\",\n        \"##トス\",\n        \"##キサ\",\n        \"##ICE\",\n        \"von\",\n        \"代打\",\n        \"属す\",\n        \"承諾\",\n        \"##おか\",\n        \"ライス\",\n        \"にくく\",\n        \"タク\",\n        \"一条\",\n        \"変貌\",\n        \"尚書\",\n        \"屈指\",\n        \"平塚\",\n        \"急死\",\n        \"退い\",\n        \"発砲\",\n        \"見込み\",\n        \"##サリー\",\n        \"##ザール\",\n        \"##チネ\",\n        \"模倣\",\n        \"##ミッド\",\n        \"古賀\",\n        \"招く\",\n        \"漁港\",\n        \"育てる\",\n        \"ショーン\",\n        \"伯父\",\n        \"##ジック\",\n        \"##がん\",\n        \"##井沢\",\n        \"インテル\",\n        \"##バイジャン\",\n        \"FOR\",\n        \"工廠\",\n        \"関税\",\n        \"高槻\",\n        \"net\",\n        \"ホウ\",\n        \"民兵\",\n        \"添え\",\n        \"優等\",\n        \"ウォーク\",\n        \"ステンレス\",\n        \"フン\",\n        \"マヌ\",\n        \"ミャンマー\",\n        \"南下\",\n        \"外さ\",\n        \"##メリカ\",\n        \"##十郎\",\n        \"スプリント\",\n        \"アゼルバイジャン\",\n        \"##ze\",\n        \"カルシウム\",\n        \"たばこ\",\n        \"Bas\",\n        \"アリー\",\n        \"何故\",\n        \"八百\",\n        \"発想\",\n        \"移送\",\n        \"貯蔵\",\n        \"起業\",\n        \"酷似\",\n        \"モーツァ\",\n        \"失業\",\n        \"接種\",\n        \"明和\",\n        \"軽井沢\",\n        \"ファラ\",\n        \"##ネスコ\",\n        \"(\\\"\",\n        \"マウンテン\",\n        \"味噌\",\n        \"##付き\",\n        \"un\",\n        \"ミヤ\",\n        \"持ち込ん\",\n        \"いきなり\",\n        \"生き残り\",\n        \"ハラ\",\n        \"マッカー\",\n        \"山麓\",\n        \"ジェーン\",\n        \"慕っ\",\n        \"窮地\",\n        \"読ま\",\n        \"LS\",\n        \"リエ\",\n        \"筐体\",\n        \"達人\",\n        \"##コード\",\n        \"キャロル\",\n        \"やく\",\n        \"茶色\",\n        \"##レクト\",\n        \"##レーヌ\",\n        \"##メンテ\",\n        \"SON\",\n        \"はく\",\n        \"レンジ\",\n        \"出陣\",\n        \"留め\",\n        \"##キル\",\n        \"##ノル\",\n        \"ベラル\",\n        \"ミッキー\",\n        \"献上\",\n        \"疎開\",\n        \"Reg\",\n        \"JS\",\n        \"Ter\",\n        \"じんじゃ\",\n        \"兄妹\",\n        \"戦果\",\n        \"貧しい\",\n        \"##コット\",\n        \"エッジ\",\n        \"硫酸\",\n        \"誓い\",\n        \"クロム\",\n        \"庄内\",\n        \"Win\",\n        \"全英\",\n        \"法制\",\n        \"##のぼ\",\n        \"フォント\",\n        \"ハリケ\",\n        \"伴奏\",\n        \"宿主\",\n        \"アンソニー\",\n        \"共用\",\n        \"翌週\",\n        \"近辺\",\n        \"馴染\",\n        \"成し遂げ\",\n        \"並木\",\n        \"児玉\",\n        \"渡米\",\n        \"OH\",\n        \"再戦\",\n        \"商用\",\n        \"望み\",\n        \"遊ん\",\n        \"##くら\",\n        \"##着く\",\n        \"ステア\",\n        \"##ーニュ\",\n        \"パーソナル\",\n        \"LINE\",\n        \"グライ\",\n        \"ゴス\",\n        \"売っ\",\n        \"官職\",\n        \"海運\",\n        \"##オラ\",\n        \"##ody\",\n        \"売ら\",\n        \"早々\",\n        \"マルタ\",\n        \"敢行\",\n        \"無駄\",\n        \"終始\",\n        \"覆う\",\n        \"諸侯\",\n        \"##ッロ\",\n        \"オーラ\",\n        \"ウェルター\",\n        \"Act\",\n        \"多重\",\n        \"子音\",\n        \"##こん\",\n        \"##レンツェ\",\n        \"パイオニア\",\n        \"同点\",\n        \"炎上\",\n        \"狙わ\",\n        \"退却\",\n        \"Robert\",\n        \"少々\",\n        \"水晶\",\n        \"豊後\",\n        \"預金\",\n        \"##ij\",\n        \"##ギリ\",\n        \"ジュリア\",\n        \"クレーン\",\n        \"グスタ\",\n        \"便利\",\n        \"晴れ\",\n        \"有明\",\n        \"白河\",\n        \"碑文\",\n        \"絶賛\",\n        \"サラリー\",\n        \"アーキテクチャ\",\n        \"HS\",\n        \"MX\",\n        \"われ\",\n        \"ロブ\",\n        \"塩基\",\n        \"##バータ\",\n        \"近づい\",\n        \"掃海\",\n        \"祇園\",\n        \"驚く\",\n        \"アルビ\",\n        \"同曲\",\n        \"更なる\",\n        \"自爆\",\n        \"チャー\",\n        \"ファイナ\",\n        \"イヤ\",\n        \"ジーン\",\n        \"ミツ\",\n        \"崩御\",\n        \"近縁\",\n        \"Mor\",\n        \"do\",\n        \"ノリ\",\n        \"鍛え\",\n        \"除け\",\n        \"##ソス\",\n        \"ヒューマン\",\n        \"共鳴\",\n        \"急増\",\n        \"表向き\",\n        \"アレル\",\n        \"##ッケル\",\n        \"ベーシスト\",\n        \"GE\",\n        \"カヴァー\",\n        \"ナッシュ\",\n        \"##IVE\",\n        \"##メガ\",\n        \"ルス\",\n        \"受注\",\n        \"無名\",\n        \"総監\",\n        \"補完\",\n        \"##ミッション\",\n        \"Ber\",\n        \"中身\",\n        \"本戦\",\n        \"##・ム\",\n        \"##ぐれ\",\n        \"クリミア\",\n        \"チェコスロ\",\n        \"マキシ\",\n        \"宇部\",\n        \"届く\",\n        \"結社\",\n        \"##持つ\",\n        \"エンジニアリング\",\n        \"サンクトペテルブルク\",\n        \"ソラ\",\n        \"噛み\",\n        \"祀ら\",\n        \"めぐり\",\n        \"セミナー\",\n        \"マッ\",\n        \"古来\",\n        \"稼動\",\n        \"車掌\",\n        \"養老\",\n        \"##ギャ\",\n        \"##ノミ\",\n        \"出せ\",\n        \"新党\",\n        \"織物\",\n        \"##ザース\",\n        \"コミュニケーションズ\",\n        \"クリストファー\",\n        \"執事\",\n        \"##れん\",\n        \"間違っ\",\n        \"San\",\n        \"セクション\",\n        \"混在\",\n        \"部落\",\n        \"飛ばし\",\n        \"##コーン\",\n        \"キン肉\",\n        \"キネマ\",\n        \"回帰\",\n        \"恨み\",\n        \"阿蘇\",\n        \"##ダラ\",\n        \"##ティウス\",\n        \"Cent\",\n        \"信任\",\n        \"浅井\",\n        \"ジャングル\",\n        \"##atch\",\n        \"つくり\",\n        \"グー\",\n        \"ユン\",\n        \"戸籍\",\n        \"東ドイツ\",\n        \"狭く\",\n        \"迷宮\",\n        \"マルク\",\n        \"阿弥陀\",\n        \"VHS\",\n        \"天台\",\n        \"学期\",\n        \"平坦\",\n        \"##ball\",\n        \"##ケス\",\n        \"##ホルム\",\n        \"バラード\",\n        \"まとめる\",\n        \"だし\",\n        \"六角\",\n        \"新造\",\n        \"沼田\",\n        \"##ナール\",\n        \"##助け\",\n        \"##フィールダー\",\n        \"がり\",\n        \"可変\",\n        \"日報\",\n        \"格子\",\n        \"法華\",\n        \"ミッドフィールダー\",\n        \"##カロ\",\n        \"205\",\n        \"タキ\",\n        \"母国\",\n        \"リリーフ\",\n        \"ハイビジョン\",\n        \"秋葉原\",\n        \"RNA\",\n        \"毒性\",\n        \"称え\",\n        \"Des\",\n        \"必死\",\n        \"オレゴン\",\n        \"微妙\",\n        \"終わら\",\n        \"迷惑\",\n        \"##タリ\",\n        \"##プラー\",\n        \"##だん\",\n        \"##々しい\",\n        \"たまたま\",\n        \"転倒\",\n        \"スミ\",\n        \"乱入\",\n        \"奮闘\",\n        \"##ッペン\",\n        \"カルチャー\",\n        \"エグゼ\",\n        \"大門\",\n        \"撤廃\",\n        \"競う\",\n        \"達也\",\n        \"メモリー\",\n        \"屋台\",\n        \"村人\",\n        \"重ねる\",\n        \"集計\",\n        \"黄色い\",\n        \"揺れ\",\n        \"担い\",\n        \"本番\",\n        \"##クレ\",\n        \"##乗り\",\n        \"マウ\",\n        \"亀山\",\n        \"宇佐\",\n        \"フィクション\",\n        \"みなし\",\n        \"日韓\",\n        \"首領\",\n        \"ランチャー\",\n        \"])\",\n        \"小西\",\n        \"総括\",\n        \"##ye\",\n        \"##コシ\",\n        \"LC\",\n        \"ガム\",\n        \"吉村\",\n        \"向こう\",\n        \"無敵\",\n        \"直撃\",\n        \"##ジアナ\",\n        \"Rev\",\n        \"PAS\",\n        \"却下\",\n        \"##ガラ\",\n        \"ピラミッド\",\n        \"三遊亭\",\n        \"今治\",\n        \"南道\",\n        \"宿舎\",\n        \"親方\",\n        \"##カリスト\",\n        \"ギー\",\n        \"マシュー\",\n        \"処罰\",\n        \"支出\",\n        \"解禁\",\n        \"逃れる\",\n        \"##イアント\",\n        \"さし\",\n        \"丹後\",\n        \"##its\",\n        \"クオ\",\n        \"低地\",\n        \"儀礼\",\n        \"全盛\",\n        \"オリン\",\n        \"ベビー\",\n        \"マテ\",\n        \"淡水\",\n        \"眠り\",\n        \"納め\",\n        \"迫ら\",\n        \"パーカー\",\n        \"##ATE\",\n        \"メロディー\",\n        \"レバノン\",\n        \"きた\",\n        \"夢見\",\n        \"##ニアン\",\n        \"ちなむ\",\n        \"バンコク\",\n        \"se\",\n        \"増幅\",\n        \"延暦\",\n        \"真剣\",\n        \"軽巡\",\n        \"Up\",\n        \"ペナル\",\n        \"開閉\",\n        \"##・イン\",\n        \"オラ\",\n        \"片山\",\n        \"薔薇\",\n        \"西端\",\n        \"##さつ\",\n        \"アヤ\",\n        \"ベラ\",\n        \"大火\",\n        \"容赦\",\n        \"山東\",\n        \"ストリー\",\n        \"Sport\",\n        \"日比谷\",\n        \"650\",\n        \"パニック\",\n        \"##イルズ\",\n        \"##ARS\",\n        \"カーター\",\n        \"下水\",\n        \"扮し\",\n        \"紅葉\",\n        \"銘柄\",\n        \"##っ子\",\n        \"ディビジョン\",\n        \"弾道\",\n        \"救命\",\n        \"赴き\",\n        \"##マーシャル\",\n        \"宅地\",\n        \"敦賀\",\n        \"機雷\",\n        \"##プトン\",\n        \"サング\",\n        \"州道\",\n        \"幕内\",\n        \"繰り広げる\",\n        \"売春\",\n        \"座っ\",\n        \"関ヶ原\",\n        \"プライド\",\n        \"返済\",\n        \"カマ\",\n        \"ドリル\",\n        \"中頃\",\n        \"支障\",\n        \"騒ぎ\",\n        \"##ideo\",\n        \"News\",\n        \"KBS\",\n        \"mg\",\n        \"備前\",\n        \"##・ファ\",\n        \"一騎\",\n        \"入試\",\n        \"反する\",\n        \"棄権\",\n        \"知行\",\n        \"防護\",\n        \"フィレンツェ\",\n        \"コンピレーション\",\n        \"ハンドボール\",\n        \"ベラルーシ\",\n        \"City\",\n        \"アストロ\",\n        \"ホモ\",\n        \"尾道\",\n        \"旗揚げ\",\n        \"規約\",\n        \"閉塞\",\n        \"執り行\",\n        \"きわめて\",\n        \"モーツァルト\",\n        \"唐津\",\n        \"立教\",\n        \"##まま\",\n        \"##ージョ\",\n        \"マヤ\",\n        \"江東\",\n        \"BAS\",\n        \"ダラス\",\n        \"ルビー\",\n        \"充分\",\n        \"北見\",\n        \"支払わ\",\n        \"##フレーズ\",\n        \"Song\",\n        \"セメント\",\n        \"悩ん\",\n        \"遠山\",\n        \"遠ざ\",\n        \"JIS\",\n        \"ノウ\",\n        \"公家\",\n        \"尾根\",\n        \"岩田\",\n        \"辞書\",\n        \"##・ベ\",\n        \"コンペ\",\n        \"Mark\",\n        \"ヒルズ\",\n        \"進言\",\n        \"##トゥス\",\n        \"Port\",\n        \"なさい\",\n        \"エステ\",\n        \"カレ\",\n        \"処方\",\n        \"大きかっ\",\n        \"EMI\",\n        \"ロッキ\",\n        \"提起\",\n        \"##ola\",\n        \"ギュ\",\n        \"152\",\n        \"mmF\",\n        \"ヴェスト\",\n        \"艦名\",\n        \"##ッチン\",\n        \"MY\",\n        \"サリ\",\n        \"土浦\",\n        \"激減\",\n        \"##83\",\n        \"##食い\",\n        \"スキン\",\n        \"1859\",\n        \"##ルタント\",\n        \"メカニズム\",\n        \"アリア\",\n        \"波長\",\n        \"陰陽\",\n        \"風貌\",\n        \"##ンスト\",\n        \"リポート\",\n        \"例年\",\n        \"別人\",\n        \"図り\",\n        \"堀川\",\n        \"##hone\",\n        \"ヘルマン\",\n        \"ロータリー\",\n        \"成す\",\n        \"絡み\",\n        \"見抜\",\n        \"波動\",\n        \"講堂\",\n        \"##連れ\",\n        \"ふう\",\n        \"大胆\",\n        \"平定\",\n        \"爆笑\",\n        \"インフル\",\n        \"スティーヴン\",\n        \"Fi\",\n        \"うさ\",\n        \"低温\",\n        \"届い\",\n        \"教場\",\n        \"説教\",\n        \"##ゴス\",\n        \"EF\",\n        \"Kn\",\n        \"ぬい\",\n        \"墳丘\",\n        \"消火\",\n        \"##・ホ\",\n        \"##バーズ\",\n        \"ブレイン\",\n        \"アルフレッド\",\n        \"ヒンド\",\n        \"ユネスコ\",\n        \"助成\",\n        \"那珂\",\n        \"鉄砲\",\n        \"コンサルタント\",\n        \"野望\",\n        \"##テー\",\n        \"国々\",\n        \"室蘭\",\n        \"敬意\",\n        \"自走\",\n        \"麻酔\",\n        \"ジャム\",\n        \"クロウ\",\n        \"スカー\",\n        \"帯広\",\n        \"水深\",\n        \"私鉄\",\n        \"##ガルト\",\n        \"ジョナ\",\n        \"国政\",\n        \"日テレ\",\n        \"発進\",\n        \"##が丘\",\n        \"##ボリ\",\n        \"器用\",\n        \"欠け\",\n        \"藤岡\",\n        \"負債\",\n        \"麻衣\",\n        \"##ボロ\",\n        \"-(\",\n        \"隠す\",\n        \"宮中\",\n        \"接合\",\n        \"提言\",\n        \"##15\",\n        \"280\",\n        \"キングス\",\n        \"よこ\",\n        \"シュル\",\n        \"ウォッチ\",\n        \"ディフェンダー\",\n        \"リブ\",\n        \"反響\",\n        \"含有\",\n        \"杉並\",\n        \"華族\",\n        \"迷い\",\n        \"フィニッシュ\",\n        \"ピストン\",\n        \"ホールド\",\n        \"入所\",\n        \"多々\",\n        \"征伐\",\n        \"選帝\",\n        \"##ューズ\",\n        \"繰り返さ\",\n        \"呼び名\",\n        \"ネルソン\",\n        \"一派\",\n        \"権現\",\n        \"瑞宝\",\n        \"外相\",\n        \"嫌悪\",\n        \"連射\",\n        \"##の丸\",\n        \"##ico\",\n        \"##olution\",\n        \"WEB\",\n        \"イソ\",\n        \"培養\",\n        \"注ぐ\",\n        \"スタンプ\",\n        \"エイジ\",\n        \"北川\",\n        \"噴射\",\n        \"死神\",\n        \"終える\",\n        \"部数\",\n        \"青梅\",\n        \"願っ\",\n        \"##ツィヒ\",\n        \"ドリー\",\n        \"手数\",\n        \"藩領\",\n        \"黒髪\",\n        \"##シリーズ\",\n        \"##カーズ\",\n        \"アルプス\",\n        \"270\",\n        \"Amaz\",\n        \"国分寺\",\n        \"オタク\",\n        \"内定\",\n        \"吹田\",\n        \"大通り\",\n        \"##ずら\",\n        \"##フォー\",\n        \"キャッチフレーズ\",\n        \"##マイカ\",\n        \"FBI\",\n        \"スカル\",\n        \"石碑\",\n        \"連想\",\n        \"1858\",\n        \"投獄\",\n        \"立命\",\n        \"計量\",\n        \"##レク\",\n        \"スロベニア\",\n        \"プロトタイプ\",\n        \"器官\",\n        \"軌間\",\n        \"バンクーバー\",\n        \"おこなわ\",\n        \"マディ\",\n        \"炎症\",\n        \"鍛冶\",\n        \"##TO\",\n        \"大抵\",\n        \"宮川\",\n        \"浪人\",\n        \"調停\",\n        \"迂回\",\n        \"##ARA\",\n        \"NAID\",\n        \"パラメータ\",\n        \"Mer\",\n        \"大平\",\n        \"歩き\",\n        \"流派\",\n        \"フライング\",\n        \"TM\",\n        \"##メス\",\n        \"##ホマ\",\n        \"##ンガル\",\n        \"ハンブルク\",\n        \"フリゲート\",\n        \"延び\",\n        \"神父\",\n        \"里見\",\n        \"260\",\n        \"プラグ\",\n        \"テロリスト\",\n        \"Techn\",\n        \"チア\",\n        \"レット\",\n        \"土井\",\n        \"声楽\",\n        \"隔離\",\n        \"シャドウ\",\n        \"ベートー\",\n        \"アルベルト\",\n        \"ジェル\",\n        \"いざ\",\n        \"準急\",\n        \"直列\",\n        \"組長\",\n        \"ブルックリン\",\n        \"サバ\",\n        \"写像\",\n        \"粘土\",\n        \"若年\",\n        \"開口\",\n        \"##ドキ\",\n        \"シグナル\",\n        \"Che\",\n        \"六本木\",\n        \"川端\",\n        \"流星\",\n        \"アルテ\",\n        \"マクドナルド\",\n        \"tr\",\n        \"分ける\",\n        \"打診\",\n        \"換算\",\n        \"松永\",\n        \"話さ\",\n        \"##サラ\",\n        \"行き来\",\n        \"http\",\n        \"シリンダー\",\n        \"不当\",\n        \"厚木\",\n        \"四角\",\n        \"攻防\",\n        \"断ら\",\n        \"すば\",\n        \"アロー\",\n        \"終焉\",\n        \"愛宕\",\n        \"説い\",\n        \"##ントス\",\n        \"アクセ\",\n        \"フランチャイズ\",\n        \"中年\",\n        \"放浪\",\n        \"DT\",\n        \"バックス\",\n        \"健太\",\n        \"本庄\",\n        \"##祭り\",\n        \"ギン\",\n        \"下総\",\n        \"離党\",\n        \"##RO\",\n        \"ギブ\",\n        \"分化\",\n        \"いな\",\n        \"多賀\",\n        \"挑発\",\n        \"砲台\",\n        \"ライプ\",\n        \"こだわり\",\n        \"Sn\",\n        \"ノブ\",\n        \"栄誉\",\n        \"校内\",\n        \"ララ\",\n        \"レプ\",\n        \"桑名\",\n        \"##to\",\n        \"コマーシャル\",\n        \"##ソウ\",\n        \"##ヘル\",\n        \"クリエイター\",\n        \"オムニ\",\n        \"注射\",\n        \"カラーリング\",\n        \"##ハーゲン\",\n        \"なれる\",\n        \"ノード\",\n        \"分立\",\n        \"葬ら\",\n        \"視界\",\n        \"音色\",\n        \"##カミ\",\n        \"##ンプトン\",\n        \"トランペット\",\n        \"Blue\",\n        \"希少\",\n        \"演芸\",\n        \"##QU\",\n        \"##らう\",\n        \"##ona\",\n        \"カリス\",\n        \"トマト\",\n        \"パク\",\n        \"有り\",\n        \"貸切\",\n        \"##アム\",\n        \"##arl\",\n        \"##ney\",\n        \"サックス\",\n        \"反則\",\n        \"発刊\",\n        \"糖尿\",\n        \"UFO\",\n        \"アソシエ\",\n        \"もて\",\n        \"代議\",\n        \"参道\",\n        \"櫻井\",\n        \"返す\",\n        \"##バンス\",\n        \"##ush\",\n        \"エディション\",\n        \"MAN\",\n        \"三国\",\n        \"協調\",\n        \"##ワース\",\n        \"エイリアン\",\n        \"King\",\n        \"ソリューション\",\n        \"焼い\",\n        \"遭難\",\n        \"騒音\",\n        \"高砂\",\n        \"##ツキー\",\n        \"アルジェリア\",\n        \"##オーバー\",\n        \"RECOR\",\n        \"RT\",\n        \"アッシ\",\n        \"付録\",\n        \"旧暦\",\n        \"ポルシェ\",\n        \"BP\",\n        \"Fe\",\n        \"エラー\",\n        \"パンタ\",\n        \"富岡\",\n        \"店頭\",\n        \"母校\",\n        \"深川\",\n        \"##ets\",\n        \"クリップ\",\n        \"##ike\",\n        \"知性\",\n        \"許容\",\n        \"クリーブランド\",\n        \"オウ\",\n        \"恐慌\",\n        \"##ネード\",\n        \"ギャル\",\n        \"マスターズ\",\n        \"##キャップ\",\n        \"##uck\",\n        \"キリン\",\n        \"ケープ\",\n        \"一応\",\n        \"体色\",\n        \"司る\",\n        \"弾頭\",\n        \"絞り\",\n        \"頼ん\",\n        \"呈し\",\n        \"奥田\",\n        \"##yr\",\n        \"ステッカー\",\n        \"##ブリエル\",\n        \"オリー\",\n        \"不審\",\n        \"##くる\",\n        \"シマ\",\n        \"刑法\",\n        \"部署\",\n        \"##ety\",\n        \"八尾\",\n        \"大映\",\n        \"悪役\",\n        \"樋口\",\n        \"演歌\",\n        \"襲う\",\n        \"西岸\",\n        \"見通し\",\n        \"##ific\",\n        \"かま\",\n        \"戸塚\",\n        \"ハイウェイ\",\n        \"PRO\",\n        \"GA\",\n        \"イニ\",\n        \"直人\",\n        \"艦載\",\n        \"##シズム\",\n        \"##テラ\",\n        \"インデ\",\n        \"##ストラクター\",\n        \"Champ\",\n        \"デイヴィス\",\n        \"Sun\",\n        \"iOS\",\n        \"入線\",\n        \"対潜\",\n        \"独身\",\n        \"迫害\",\n        \"飾ら\",\n        \"##rop\",\n        \"生き延び\",\n        \"RAD\",\n        \"Soft\",\n        \"キース\",\n        \"宇和\",\n        \"東端\",\n        \"法定\",\n        \"浮遊\",\n        \"香取\",\n        \"たまに\",\n        \"EV\",\n        \"サボ\",\n        \"ダニー\",\n        \"レム\",\n        \"大仏\",\n        \"握り\",\n        \"速力\",\n        \"コリ\",\n        \"学派\",\n        \"寺社\",\n        \"志し\",\n        \"消耗\",\n        \"##ナーレ\",\n        \"盛り込ま\",\n        \"聞こえ\",\n        \"山間\",\n        \"帝都\",\n        \"点検\",\n        \"ディフェンス\",\n        \"##フェルト\",\n        \"##ちゃん\",\n        \"ニーズ\",\n        \"開港\",\n        \"##ろす\",\n        \"オバマ\",\n        \"バーナ\",\n        \"作物\",\n        \"栗原\",\n        \"カネ\",\n        \"勝敗\",\n        \"増備\",\n        \"戦記\",\n        \"ファント\",\n        \"ファンド\",\n        \"ストーム\",\n        \"UH\",\n        \"えり\",\n        \"ケント\",\n        \"ポピュ\",\n        \"納税\",\n        \"年寄\",\n        \"教義\",\n        \"衰え\",\n        \"隆盛\",\n        \"隕石\",\n        \"鳴門\",\n        \"五十嵐\",\n        \"##ield\",\n        \"無形\",\n        \"チェコスロバキア\",\n        \"クック\",\n        \"利便\",\n        \"実子\",\n        \"欠陥\",\n        \"美し\",\n        \"進級\",\n        \"##ポル\",\n        \"##あげ\",\n        \"トリノ\",\n        \"LA\",\n        \"PM\",\n        \"アワー\",\n        \"抹殺\",\n        \"綬章\",\n        \"##witch\",\n        \"ドミニカ\",\n        \"ジブ\",\n        \"ヒメ\",\n        \"大小\",\n        \"徳間\",\n        \"目の\",\n        \"オークランド\",\n        \"ゴロ\",\n        \"公判\",\n        \"教鞭\",\n        \"曹洞\",\n        \"USB\",\n        \"従兄弟\",\n        \"ばね\",\n        \"クリーン\",\n        \"擁し\",\n        \"水族\",\n        \"##あき\",\n        \"始祖\",\n        \"延喜\",\n        \"建っ\",\n        \"竜王\",\n        \"スペック\",\n        \"NBC\",\n        \"Sum\",\n        \"オクラ\",\n        \"ブレス\",\n        \"ブースター\",\n        \"共々\",\n        \"溶岩\",\n        \"Str\",\n        \"公卿\",\n        \"奔走\",\n        \"自力\",\n        \"スケッチ\",\n        \"1854\",\n        \"クイン\",\n        \"叫び\",\n        \"含み\",\n        \"浅間\",\n        \"猶予\",\n        \"裏面\",\n        \"##ベガス\",\n        \"##ちょう\",\n        \"ジャイアント\",\n        \"コンサルティング\",\n        \"スティーブン\",\n        \"そろ\",\n        \"前衛\",\n        \"勝て\",\n        \"祭祀\",\n        \"##VID\",\n        \"##チウム\",\n        \"##受ける\",\n        \"グルー\",\n        \"USA\",\n        \"##ルツェ\",\n        \"Thom\",\n        \"Tw\",\n        \"あふ\",\n        \"ボイラー\",\n        \"制式\",\n        \"厚く\",\n        \"噴出\",\n        \"従属\",\n        \"赴く\",\n        \"スカパー\",\n        \"ミリオン\",\n        \"一転\",\n        \"返上\",\n        \"##ハル\",\n        \"Os\",\n        \"結末\",\n        \"人道\",\n        \"反逆\",\n        \"##レナ\",\n        \"##シャワ\",\n        \"##ocal\",\n        \"Facebook\",\n        \"サラリーマン\",\n        \"マッド\",\n        \"出かけ\",\n        \"新宮\",\n        \"##DI\",\n        \"##レーツ\",\n        \"##ナーゼ\",\n        \"James\",\n        \"察知\",\n        \"尽き\",\n        \"患っ\",\n        \"産経\",\n        \"空挺\",\n        \"観念\",\n        \"讃岐\",\n        \"##タニア\",\n        \"##TH\",\n        \"##カム\",\n        \"##寄っ\",\n        \"##売り\",\n        \"サンパ\",\n        \"##イオス\",\n        \"BMW\",\n        \"ロット\",\n        \"同郡\",\n        \"大東\",\n        \"##バリ\",\n        \"##カレ\",\n        \"##びき\",\n        \"なくなる\",\n        \"コンチネ\",\n        \"con\",\n        \"メッツ\",\n        \"北海\",\n        \"寸法\",\n        \"新報\",\n        \"日吉\",\n        \"美味\",\n        \"証人\",\n        \"Tri\",\n        \"みき\",\n        \"付着\",\n        \"半球\",\n        \"大連\",\n        \"水色\",\n        \"##チー\",\n        \"付き合っ\",\n        \"アサヒ\",\n        \"サリー\",\n        \"信玄\",\n        \"協賛\",\n        \"##・タ\",\n        \"##ずみ\",\n        \"ストライキ\",\n        \"神崎\",\n        \"築地\",\n        \"臨む\",\n        \"訳さ\",\n        \"##98\",\n        \"##za\",\n        \"TOP\",\n        \"ジュース\",\n        \"ナムコ\",\n        \"ル・マン\",\n        \"さよ\",\n        \"奈々\",\n        \"さよなら\",\n        \"GU\",\n        \"ヒール\",\n        \"小金\",\n        \"明瞭\",\n        \"星座\",\n        \"父子\",\n        \"耐震\",\n        \"##コウ\",\n        \"ユニーク\",\n        \"やり取り\",\n        \"見習い\",\n        \"ひまわり\",\n        \"宇野\",\n        \"##強い\",\n        \"デビッド\",\n        \"ホルン\",\n        \"大物\",\n        \"大寺\",\n        \"推力\",\n        \"ジュン\",\n        \"カレンダー\",\n        \"フィルハーモニー\",\n        \"くす\",\n        \"交配\",\n        \"勝目\",\n        \"翌月\",\n        \"124\",\n        \"1300\",\n        \"Association\",\n        \"もろ\",\n        \"兵役\",\n        \"島原\",\n        \"粛清\",\n        \"タウ\",\n        \"産物\",\n        \"築造\",\n        \"1400\",\n        \"つなぐ\",\n        \"ありがとう\",\n        \"コンチネンタル\",\n        \"ブエ\",\n        \"リール\",\n        \"河南\",\n        \"スクウェア\",\n        \"1855\",\n        \"オウム\",\n        \"クィ\",\n        \"ヴュル\",\n        \"初音\",\n        \"柔術\",\n        \"極度\",\n        \"物事\",\n        \"##かえ\",\n        \"##ぼさ\",\n        \"GHQ\",\n        \"ムル\",\n        \"及ぼし\",\n        \"点灯\",\n        \"##レーン\",\n        \"##ッティング\",\n        \"##カップ\",\n        \"振り返っ\",\n        \"修学\",\n        \"合作\",\n        \"天草\",\n        \"長浜\",\n        \"##リナ\",\n        \"##ビウス\",\n        \"クローズ\",\n        \"##クスピア\",\n        \"木場\",\n        \"##めん\",\n        \"アマゾン\",\n        \"横手\",\n        \"課長\",\n        \"##ンシー\",\n        \"##ハマ\",\n        \"##グア\",\n        \"##巻き\",\n        \"##ぶり\",\n        \"クラリ\",\n        \"くさ\",\n        \"シラ\",\n        \"モモ\",\n        \"平山\",\n        \"腐敗\",\n        \"解読\",\n        \"スクラ\",\n        \"大船\",\n        \"幕張\",\n        \"犬種\",\n        \"紫色\",\n        \"工法\",\n        \"撮り\",\n        \"母子\",\n        \"特務\",\n        \"適正\",\n        \"医院\",\n        \"見受け\",\n        \"辿り\",\n        \"ケータイ\",\n        \"アザ\",\n        \"##フマン\",\n        \"##vent\",\n        \"思い出し\",\n        \"カスティー\",\n        \"隙間\",\n        \"Sl\",\n        \"困っ\",\n        \"追及\",\n        \"##プテ\",\n        \"イントロ\",\n        \"クッパ\",\n        \"ヶ国\",\n        \"不倫\",\n        \"人造\",\n        \"##コト\",\n        \"強かっ\",\n        \"##oph\",\n        \"アッパー\",\n        \"新川\",\n        \"溶け\",\n        \"照準\",\n        \"苗字\",\n        \"##CA\",\n        \"ルーズベルト\",\n        \"Ze\",\n        \"セネ\",\n        \"吉良\",\n        \"養殖\",\n        \"キューブ\",\n        \"ラスベガス\",\n        \"バファ\",\n        \"マリーン\",\n        \"劣化\",\n        \"江南\",\n        \"筑紫\",\n        \"至り\",\n        \"まとも\",\n        \"石室\",\n        \"薬局\",\n        \"##ワット\",\n        \"ひこ\",\n        \"アクター\",\n        \"一括\",\n        \"三味\",\n        \"手助け\",\n        \"止まり\",\n        \"トラップ\",\n        \"建て替え\",\n        \"ヴォルフ\",\n        \"ダス\",\n        \"手足\",\n        \"止まっ\",\n        \"##行き\",\n        \"ふん\",\n        \"直属\",\n        \"##エール\",\n        \"##そり\",\n        \"##ipp\",\n        \"おもちゃ\",\n        \"American\",\n        \"Special\",\n        \"ハリケーン\",\n        \"吉祥\",\n        \"熱血\",\n        \"血統\",\n        \"キャット\",\n        \"プラチナ\",\n        \"Enter\",\n        \"CLUB\",\n        \"バロック\",\n        \"改める\",\n        \"狭義\",\n        \"用水\",\n        \"霊場\",\n        \"青銅\",\n        \"##カゲ\",\n        \"##ワフ\",\n        \"ルイジアナ\",\n        \"メーター\",\n        \"横田\",\n        \"観覧\",\n        \"長身\",\n        \"##ヘッド\",\n        \"##ora\",\n        \"カト\",\n        \"導き\",\n        \"溶接\",\n        \"##ael\",\n        \"ウルグアイ\",\n        \"JT\",\n        \"ゲノム\",\n        \"シスター\",\n        \"ホープ\",\n        \"優駿\",\n        \"城山\",\n        \"給油\",\n        \"##タリア\",\n        \"##りん\",\n        \"アンカー\",\n        \"クロード\",\n        \"バックアップ\",\n        \"クリーク\",\n        \"LD\",\n        \"ひな\",\n        \"デリ\",\n        \"並列\",\n        \"養女\",\n        \"##セックス\",\n        \"起こさ\",\n        \"コスモ\",\n        \"ギャラクシー\",\n        \"CIA\",\n        \"みせ\",\n        \"荘園\",\n        \"モノレール\",\n        \"##iversary\",\n        \"ヨハネス\",\n        \"支那\",\n        \"繰り出す\",\n        \"Med\",\n        \"du\",\n        \"公営\",\n        \"大工\",\n        \"解く\",\n        \"通販\",\n        \"##tain\",\n        \"##ィー\",\n        \"##AMA\",\n        \"##ELL\",\n        \"iPhone\",\n        \"リモコン\",\n        \"不況\",\n        \"入札\",\n        \"田代\",\n        \"破片\",\n        \"警護\",\n        \"##17\",\n        \"##パルト\",\n        \"いまだ\",\n        \"カズ\",\n        \"シング\",\n        \"デパート\",\n        \"リソ\",\n        \"光景\",\n        \"政宗\",\n        \"若狭\",\n        \"##レイク\",\n        \"アミューズ\",\n        \"Tokyo\",\n        \"らく\",\n        \"ユタ\",\n        \"蛍光\",\n        \"連鎖\",\n        \"##ジーミル\",\n        \"パラリンピック\",\n        \"DAY\",\n        \"ひき\",\n        \"図柄\",\n        \"在職\",\n        \"明示\",\n        \"金星\",\n        \"フィア\",\n        \"ジェイソン\",\n        \"デラックス\",\n        \"Pi\",\n        \"充て\",\n        \"熱海\",\n        \"##カヤ\",\n        \"##ホーム\",\n        \"ストリーム\",\n        \"ナナ\",\n        \"一線\",\n        \"着目\",\n        \"請け\",\n        \"青島\",\n        \"##ダード\",\n        \"##ロラ\",\n        \"世襲\",\n        \"肥料\",\n        \"##GS\",\n        \"ジャマイカ\",\n        \"埋め立て\",\n        \"おはよう\",\n        \"つば\",\n        \"名作\",\n        \"弱体\",\n        \"旧来\",\n        \"祝福\",\n        \"カービィ\",\n        \"細長い\",\n        \"後円\",\n        \"短歌\",\n        \"経理\",\n        \"豪族\",\n        \"##ゲス\",\n        \"##渡す\",\n        \"##OSS\",\n        \"MAR\",\n        \"bl\",\n        \"キプ\",\n        \"請願\",\n        \"##my\",\n        \"##ena\",\n        \"キログラム\",\n        \"バッジ\",\n        \"ミッチ\",\n        \"打数\",\n        \"鉄路\",\n        \"顕彰\",\n        \"##かつ\",\n        \"バーデン\",\n        \"So\",\n        \"ガリア\",\n        \"照射\",\n        \"閣議\",\n        \"サミット\",\n        \"円筒\",\n        \"問屋\",\n        \"飛躍\",\n        \"##たか\",\n        \"アクセル\",\n        \"##ーチャー\",\n        \"レター\",\n        \"売店\",\n        \"池上\",\n        \"##ッツォ\",\n        \"グスタフ\",\n        \"ヴュルテンベルク\",\n        \"リビア\",\n        \"取れる\",\n        \"田川\",\n        \"盗ん\",\n        \"兵衛\",\n        \"同県\",\n        \"太政\",\n        \"石巻\",\n        \"##さり\",\n        \"##変わり\",\n        \"勝ち越し\",\n        \"ドキュメント\",\n        \"埠頭\",\n        \"ものまね\",\n        \"--\",\n        \"NM\",\n        \"ボヘ\",\n        \"土岐\",\n        \"採っ\",\n        \"##ham\",\n        \"折れ\",\n        \"撃た\",\n        \"格差\",\n        \"死傷\",\n        \"素顔\",\n        \"##ざき\",\n        \"バースト\",\n        \"ファイヤー\",\n        \"こころ\",\n        \"大泉\",\n        \"##ヴル\",\n        \"##ated\",\n        \"ベートーヴェン\",\n        \"まな\",\n        \"ルーク\",\n        \"健全\",\n        \"愛さ\",\n        \"接着\",\n        \"日没\",\n        \"##タリー\",\n        \"Jo\",\n        \"オロ\",\n        \"前頭\",\n        \"大黒\",\n        \"楽しい\",\n        \"細工\",\n        \"臓器\",\n        \"##lt\",\n        \"##RNA\",\n        \"Fri\",\n        \"コスタ\",\n        \"ヒン\",\n        \"荷重\",\n        \"重なっ\",\n        \"Amazon\",\n        \"フッ\",\n        \"下っ\",\n        \"##コミ\",\n        \"##ぜん\",\n        \"##去ら\",\n        \"フェルト\",\n        \"乗り込ん\",\n        \"デニス\",\n        \"積分\",\n        \"西条\",\n        \"##奈子\",\n        \"144\",\n        \"ウェン\",\n        \"ビック\",\n        \"レジャー\",\n        \"##んどう\",\n        \"SPEC\",\n        \"Sil\",\n        \"完走\",\n        \"構える\",\n        \"##uss\",\n        \"##over\",\n        \"セレクション\",\n        \"外出\",\n        \"文京\",\n        \"水島\",\n        \"補欠\",\n        \"農園\",\n        \"仕掛ける\",\n        \"公用\",\n        \"律令\",\n        \"絵師\",\n        \"##ジェスト\",\n        \"##IST\",\n        \"org\",\n        \"プエルト\",\n        \"ペトロ\",\n        \"新城\",\n        \"望ましい\",\n        \"沢田\",\n        \"片手\",\n        \"西欧\",\n        \"##詰める\",\n        \"知多\",\n        \"給付\",\n        \"##直さ\",\n        \"ウッ\",\n        \"クン\",\n        \"坂口\",\n        \"均一\",\n        \"校地\",\n        \"##モト\",\n        \"##リオット\",\n        \"##ada\",\n        \"##ATA\",\n        \"おば\",\n        \"浅い\",\n        \"##・ル\",\n        \"##OLD\",\n        \"ライブラリー\",\n        \"インフルエン\",\n        \"カバ\",\n        \"ロスト\",\n        \"童話\",\n        \"自機\",\n        \"貯水\",\n        \"##ボーグ\",\n        \"##ISS\",\n        \"1840\",\n        \"大作\",\n        \"討論\",\n        \"重く\",\n        \"##テット\",\n        \"Bre\",\n        \"供与\",\n        \"入党\",\n        \"共感\",\n        \"寺田\",\n        \"浮き\",\n        \"要領\",\n        \"##ブリア\",\n        \"##ペス\",\n        \"##72\",\n        \"##まか\",\n        \"##ルツブルク\",\n        \"トランスミッション\",\n        \"すり\",\n        \"プチ\",\n        \"ミキ\",\n        \"居る\",\n        \"聖地\",\n        \"聴く\",\n        \"超過\",\n        \"陣屋\",\n        \"##やき\",\n        \"##キュラ\",\n        \"1857\",\n        \"フェルナンド\",\n        \"シュタイン\",\n        \"乃木坂\",\n        \"エステル\",\n        \"リプレイ\",\n        \"さらさ\",\n        \"##ello\",\n        \"リヤ\",\n        \"万葉\",\n        \"各局\",\n        \"廉価\",\n        \"視力\",\n        \"頼っ\",\n        \"満たさ\",\n        \"ft\",\n        \"コバ\",\n        \"コメンテ\",\n        \"口座\",\n        \"##テロ\",\n        \"##ゴラ\",\n        \"アンモ\",\n        \"480\",\n        \"Alb\",\n        \"Paul\",\n        \"Li\",\n        \"RK\",\n        \"おっ\",\n        \"入浴\",\n        \"別途\",\n        \"幽閉\",\n        \"一夜\",\n        \"不信\",\n        \"##ジロ\",\n        \"##サキ\",\n        \"##YP\",\n        \"##止める\",\n        \"WAVE\",\n        \"京急\",\n        \"分身\",\n        \"施策\",\n        \"##トロン\",\n        \"シェイクスピア\",\n        \"ピッツバーグ\",\n        \"アディ\",\n        \"剣士\",\n        \"##IF\",\n        \"エルンスト\",\n        \"メリーランド\",\n        \"オク\",\n        \"モラ\",\n        \"紀州\",\n        \"##aj\",\n        \"##rumental\",\n        \"コメンテーター\",\n        \"エプ\",\n        \"争奪\",\n        \"入間\",\n        \"洋子\",\n        \"異端\",\n        \"##コタ\",\n        \"クランク\",\n        \"サンパウロ\",\n        \"オセ\",\n        \"パトロ\",\n        \"ルター\",\n        \"万博\",\n        \"東名\",\n        \"ヒドロ\",\n        \"転職\",\n        \"##mb\",\n        \"##ゴール\",\n        \"OG\",\n        \"降車\",\n        \"つくら\",\n        \"Cap\",\n        \"ジーク\",\n        \"バチ\",\n        \"棄却\",\n        \"武藤\",\n        \"見知\",\n        \"高倉\",\n        \"ジャワ\",\n        \"スパイク\",\n        \"Bu\",\n        \"スチュ\",\n        \"受講\",\n        \"安永\",\n        \"岩国\",\n        \"彦根\",\n        \"水害\",\n        \"訂正\",\n        \"トラウマ\",\n        \"加古川\",\n        \"オクラホマ\",\n        \"草原\",\n        \"解像\",\n        \"部会\",\n        \"##・ビ\",\n        \"##illa\",\n        \"SV\",\n        \"スレ\",\n        \"ベリ\",\n        \"伊集\",\n        \"吐き\",\n        \"大差\",\n        \"登校\",\n        \"肝臓\",\n        \"魔族\",\n        \"##よい\",\n        \"ディスコ\",\n        \"https\",\n        \"伊集院\",\n        \"治水\",\n        \"県都\",\n        \"スム\",\n        \"断面\",\n        \"月面\",\n        \"派出\",\n        \"諮問\",\n        \"##メア\",\n        \"##分ける\",\n        \"ぬいぐるみ\",\n        \"DREAM\",\n        \"テラス\",\n        \"ハノー\",\n        \"大成\",\n        \"近海\",\n        \"Bi\",\n        \"公論\",\n        \"兵装\",\n        \"同上\",\n        \"巡航\",\n        \"行こう\",\n        \"見積\",\n        \"フォレスト\",\n        \"フレッシュ\",\n        \"さだ\",\n        \"らい\",\n        \"ガブリエル\",\n        \"レック\",\n        \"最寄\",\n        \"着ぐるみ\",\n        \"金利\",\n        \"アーノ\",\n        \"ペンギン\",\n        \"デュオ\",\n        \"サファ\",\n        \"モンタ\",\n        \"リフ\",\n        \"久美子\",\n        \"乗船\",\n        \"八郎\",\n        \"団長\",\n        \"邦題\",\n        \"##ペディア\",\n        \"フルーツ\",\n        \"コントラ\",\n        \"リットル\",\n        \"FINAL\",\n        \"久々\",\n        \"敗者\",\n        \"望ま\",\n        \"移築\",\n        \"貞観\",\n        \"MAS\",\n        \"Po\",\n        \"アクト\",\n        \"ラド\",\n        \"生還\",\n        \"さんま\",\n        \"シンセサイ\",\n        \"リコ\",\n        \"催さ\",\n        \"原点\",\n        \"定か\",\n        \"幕僚\",\n        \"縁起\",\n        \"1856\",\n        \"トロフィー\",\n        \"せんしゅ\",\n        \"モト\",\n        \"議決\",\n        \"##18\",\n        \"マルティ\",\n        \"人柄\",\n        \"執っ\",\n        \"学業\",\n        \"忍び\",\n        \"手動\",\n        \"泥棒\",\n        \"肥後\",\n        \"ディスカ\",\n        \"っ子\",\n        \"へん\",\n        \"カラス\",\n        \"コリン\",\n        \"伝導\",\n        \"挟み\",\n        \"水谷\",\n        \"速報\",\n        \"1700\",\n        \"##ensis\",\n        \"イアン\",\n        \"ピュー\",\n        \"岸田\",\n        \"クロック\",\n        \"##OME\",\n        \"モーリス\",\n        \"ベンツ\",\n        \"##endo\",\n        \"##デレラ\",\n        \"ISSN\",\n        \"にゃ\",\n        \"ブーツ\",\n        \"代々木\",\n        \"効力\",\n        \"外装\",\n        \"揶揄\",\n        \"祝い\",\n        \"銃身\",\n        \"##よそ\",\n        \"Group\",\n        \"##ittle\",\n        \"ヒラ\",\n        \"疲れ\",\n        \"私的\",\n        \"編み\",\n        \"裕子\",\n        \"##たら\",\n        \"##デスリーガ\",\n        \"レオポ\",\n        \"プス\",\n        \"無断\",\n        \"福知\",\n        \"紀行\",\n        \"##12\",\n        \"いただ\",\n        \"手伝っ\",\n        \"由紀夫\",\n        \"アイオワ\",\n        \"乱闘\",\n        \"均衡\",\n        \"手間\",\n        \"##サム\",\n        \"##モー\",\n        \"ウェイン\",\n        \"##berg\",\n        \"ソマリア\",\n        \"小坂\",\n        \"常盤\",\n        \"滝川\",\n        \"王宮\",\n        \"算出\",\n        \"緩やか\",\n        \"野戦\",\n        \"驚き\",\n        \"1100\",\n        \"ジャス\",\n        \"カルタゴ\",\n        \"フラット\",\n        \"Yah\",\n        \"アッシュ\",\n        \"エラ\",\n        \"光明\",\n        \"小浜\",\n        \"オリオン\",\n        \"PDF\",\n        \"カオス\",\n        \"来場\",\n        \"歌声\",\n        \"淀川\",\n        \"David\",\n        \"Cy\",\n        \"KC\",\n        \"ナオ\",\n        \"万国\",\n        \"妥協\",\n        \"枠組み\",\n        \"##高い\",\n        \"ブレーブス\",\n        \"コイル\",\n        \"ダブリン\",\n        \"岡部\",\n        \"新庄\",\n        \"立派\",\n        \"飲酒\",\n        \"ワルシャワ\",\n        \"Not\",\n        \"ブタ\",\n        \"主計\",\n        \"出兵\",\n        \"磐田\",\n        \"##ling\",\n        \"ディン\",\n        \"ジェームス\",\n        \"ウェスタン\",\n        \"ロビンソン\",\n        \"GC\",\n        \"減速\",\n        \"錬金\",\n        \"チャップ\",\n        \"持ち込ま\",\n        \"ローラー\",\n        \"##OCA\",\n        \"##ッシブ\",\n        \"宮田\",\n        \"昨年\",\n        \"特産\",\n        \"畠山\",\n        \"##ッラー\",\n        \"リーフ\",\n        \"##esents\",\n        \"##グラード\",\n        \"イワ\",\n        \"ケベック\",\n        \"元号\",\n        \"神谷\",\n        \"##・ナ\",\n        \"##UP\",\n        \"##仮名\",\n        \"パスポート\",\n        \"エレクトロ\",\n        \"LAN\",\n        \"VI\",\n        \"岩井\",\n        \"間に合わ\",\n        \"シンセサイザー\",\n        \"根岸\",\n        \"欠席\",\n        \"潜伏\",\n        \"##タイトル\",\n        \"##ILE\",\n        \"##rain\",\n        \"買い物\",\n        \"IMD\",\n        \"ルース\",\n        \"小平\",\n        \"憑依\",\n        \"細かく\",\n        \"ハブ\",\n        \"以西\",\n        \"殲滅\",\n        \"洗濯\",\n        \"相性\",\n        \"紡績\",\n        \"行け\",\n        \"賃貸\",\n        \"133\",\n        \"##elle\",\n        \"テュー\",\n        \"四条\",\n        \"弦楽\",\n        \"後見\",\n        \"栄光\",\n        \"桑原\",\n        \"芦屋\",\n        \"##オウ\",\n        \"##eng\",\n        \"トリガー\",\n        \"富士通\",\n        \"しお\",\n        \"バズ\",\n        \"共生\",\n        \"天空\",\n        \"宇多\",\n        \"雑貨\",\n        \"##ンドルフ\",\n        \"プロポ\",\n        \"知らせ\",\n        \"ブンデスリーガ\",\n        \"Af\",\n        \"TP\",\n        \"エーカー\",\n        \"クレー\",\n        \"ケニア\",\n        \"シルク\",\n        \"留まる\",\n        \"長安\",\n        \"##ta\",\n        \"##ネスト\",\n        \"パブリック\",\n        \"PT\",\n        \"ブックス\",\n        \"マスト\",\n        \"一因\",\n        \"工兵\",\n        \"強固\",\n        \"後押し\",\n        \"担保\",\n        \"秀樹\",\n        \"##ラール\",\n        \"スリランカ\",\n        \"だらけ\",\n        \"福知山\",\n        \"Il\",\n        \"rpm\",\n        \"海面\",\n        \"##ck\",\n        \"ヒンドゥー\",\n        \"おま\",\n        \"タスク\",\n        \"一層\",\n        \"堀内\",\n        \"家人\",\n        \"強要\",\n        \"滅ぼし\",\n        \"##オロ\",\n        \"##enter\",\n        \"アッシリア\",\n        \"Rem\",\n        \"演目\",\n        \"激戦\",\n        \"##de\",\n        \"引き取ら\",\n        \"振り回\",\n        \"キャンベル\",\n        \"ナイジェリア\",\n        \"かたち\",\n        \"County\",\n        \"バレンシア\",\n        \"Sam\",\n        \"載っ\",\n        \"門前\",\n        \"魔人\",\n        \"##irect\",\n        \"AW\",\n        \"NWA\",\n        \"つと\",\n        \"夜中\",\n        \"準州\",\n        \"赤松\",\n        \"重用\",\n        \"##・ポ\",\n        \"##かかる\",\n        \"10000\",\n        \"アトリエ\",\n        \"レジェンド\",\n        \"リオン\",\n        \"上水\",\n        \"優子\",\n        \"自害\",\n        \"製菓\",\n        \"##la\",\n        \"ラッキー\",\n        \"レンガ\",\n        \"基底\",\n        \"履歴\",\n        \"血圧\",\n        \"闘い\",\n        \"驚異\",\n        \"クリントン\",\n        \"##クラブ\",\n        \"覚える\",\n        \"##ーグル\",\n        \"DeNA\",\n        \"メルボルン\",\n        \"TW\",\n        \"同調\",\n        \"後悔\",\n        \"新居\",\n        \"走者\",\n        \"##ロア\",\n        \"チューブ\",\n        \"パーソナリティー\",\n        \"ジョーダン\",\n        \"Suica\",\n        \"ウラジーミル\",\n        \"カスティーリャ\",\n        \"NR\",\n        \"ペプ\",\n        \"共存\",\n        \"襲来\",\n        \"##ボク\",\n        \"グリップ\",\n        \"Hi\",\n        \"べし\",\n        \"兵員\",\n        \"和彦\",\n        \"清算\",\n        \"##be\",\n        \"Champion\",\n        \"Lib\",\n        \"委任\",\n        \"戦役\",\n        \"明言\",\n        \"秋元\",\n        \"策略\",\n        \"##掛かり\",\n        \"フランチェ\",\n        \"フィルター\",\n        \"クエ\",\n        \"刈谷\",\n        \"簡素\",\n        \"##・ユ\",\n        \"##千代\",\n        \"乗馬\",\n        \"劇作\",\n        \"父母\",\n        \"相関\",\n        \"##ny\",\n        \"##シアム\",\n        \"ジャンクション\",\n        \"JB\",\n        \"いら\",\n        \"##EP\",\n        \"##END\",\n        \"ニュートン\",\n        \"Rich\",\n        \"Sw\",\n        \"キャンディ\",\n        \"Serv\",\n        \"コンタクト\",\n        \"インフルエンザ\",\n        \"gr\",\n        \"川西\",\n        \"源泉\",\n        \"筒井\",\n        \"親しい\",\n        \"##ダスト\",\n        \"ティラ\",\n        \"##ファーソン\",\n        \"タール\",\n        \"バッド\",\n        \"ミミ\",\n        \"亀田\",\n        \"壁画\",\n        \"帰化\",\n        \"苦しん\",\n        \"茨木\",\n        \"闘士\",\n        \"146\",\n        \"##ンタイン\",\n        \"ケイト\",\n        \"ブダ\",\n        \"下着\",\n        \"保留\",\n        \"家業\",\n        \"明智\",\n        \"産卵\",\n        \"かねて\",\n        \"たった\",\n        \"当面\",\n        \"拠れ\",\n        \"発端\",\n        \"開場\",\n        \"随時\",\n        \"##みつ\",\n        \"##倒し\",\n        \"##ンバーグ\",\n        \"##ブルドン\",\n        \"マッサ\",\n        \"丁寧\",\n        \"休み\",\n        \"冗談\",\n        \"回送\",\n        \"架橋\",\n        \"クーパー\",\n        \"IF\",\n        \"転々\",\n        \"郡上\",\n        \"ノーフォーク\",\n        \"発起\",\n        \"社交\",\n        \"身代\",\n        \"##・ガ\",\n        \"スクロール\",\n        \"可愛い\",\n        \"ラベル\",\n        \"侍従\",\n        \"儲け\",\n        \"割っ\",\n        \"圧迫\",\n        \"揚陸\",\n        \"素早く\",\n        \"負わ\",\n        \"麻布\",\n        \"##ser\",\n        \"アレルギー\",\n        \"ちん\",\n        \"ほの\",\n        \"イナ\",\n        \"ヘルス\",\n        \"リッジ\",\n        \"伝来\",\n        \"踏ん\",\n        \"##ルカ\",\n        \"アイコン\",\n        \"スーダン\",\n        \"##ANT\",\n        \"ドラムス\",\n        \"バッファロー\",\n        \"スルー\",\n        \"五島\",\n        \"チャネル\",\n        \"引き起こさ\",\n        \"インテリア\",\n        \"バファローズ\",\n        \"あま\",\n        \"シノ\",\n        \"感想\",\n        \"##ネーター\",\n        \"シュヴァ\",\n        \"380\",\n        \"クロン\",\n        \"セクター\",\n        \"変態\",\n        \"夜明け\",\n        \"実権\",\n        \"短大\",\n        \"祭壇\",\n        \"IDOL\",\n        \"Mart\",\n        \"ph\",\n        \"パケット\",\n        \"後進\",\n        \"熱狂\",\n        \"絶大\",\n        \"自生\",\n        \"響き\",\n        \"##bur\",\n        \"オーブ\",\n        \"グラミー\",\n        \"グリッド\",\n        \"CN\",\n        \"刷新\",\n        \"女装\",\n        \"徳山\",\n        \"感銘\",\n        \"極限\",\n        \"ウィンドウ\",\n        \"ティン\",\n        \"##iko\",\n        \"Pal\",\n        \"パウロ\",\n        \"人型\",\n        \"和夫\",\n        \"抜群\",\n        \"捕ら\",\n        \"突出\",\n        \"巻き起こ\",\n        \"ペナルティ\",\n        \"一大\",\n        \"採ら\",\n        \"男児\",\n        \"神明\",\n        \"都督\",\n        \"鳴き\",\n        \"##ごろ\",\n        \"NEXT\",\n        \"Good\",\n        \"エナジー\",\n        \"PAR\",\n        \"SRC\",\n        \"体当たり\",\n        \"四球\",\n        \"天守\",\n        \"廃線\",\n        \"江川\",\n        \"渡航\",\n        \"近似\",\n        \"##ッホ\",\n        \"##牟田\",\n        \"ソフトボール\",\n        \"打ち出し\",\n        \"ニコラス\",\n        \"##OLL\",\n        \"サブタイトル\",\n        \"テュ\",\n        \"ワト\",\n        \"去り\",\n        \"太宰\",\n        \"抜く\",\n        \"##重なる\",\n        \"##ates\",\n        \"心身\",\n        \"艦橋\",\n        \"陶器\",\n        \"##iew\",\n        \"オスカー\",\n        \"インストゥル\",\n        \"途絶え\",\n        \"RECORDS\",\n        \"Hen\",\n        \"らし\",\n        \"パンダ\",\n        \"文脈\",\n        \"硬化\",\n        \"結界\",\n        \"越中\",\n        \"しげ\",\n        \"ほっ\",\n        \"赤城\",\n        \"イースタン\",\n        \"モダン\",\n        \"ラプ\",\n        \"広め\",\n        \"手帳\",\n        \"鳩山\",\n        \"##イロ\",\n        \"##ウェン\",\n        \"##unes\",\n        \"グリル\",\n        \"GIR\",\n        \"気絶\",\n        \"選曲\",\n        \"##ザル\",\n        \"##さく\",\n        \"フィット\",\n        \"スワローズ\",\n        \"my\",\n        \"坂上\",\n        \"強行\",\n        \"強硬\",\n        \"豊岡\",\n        \"##ぶつ\",\n        \"シンデレラ\",\n        \"おおよそ\",\n        \"IMDb\",\n        \"メロン\",\n        \"モリス\",\n        \"回廊\",\n        \"強姦\",\n        \"船員\",\n        \"雲南\",\n        \"##・ソ\",\n        \"##バット\",\n        \"アルティ\",\n        \"カイロ\",\n        \"ウィンブルドン\",\n        \"シークレット\",\n        \"じい\",\n        \"カエル\",\n        \"乏しい\",\n        \"気体\",\n        \"素人\",\n        \"ウォルト\",\n        \"ノーザン\",\n        \"つま\",\n        \"ミノ\",\n        \"基板\",\n        \"慕わ\",\n        \"洗浄\",\n        \"苦悩\",\n        \"英名\",\n        \"都会\",\n        \"##向け\",\n        \"301\",\n        \"Heart\",\n        \"サングラス\",\n        \"涼子\",\n        \"脊椎\",\n        \"乗り場\",\n        \"フットサル\",\n        \"入省\",\n        \"同区\",\n        \"水着\",\n        \"Yahoo\",\n        \"WH\",\n        \"九十\",\n        \"単線\",\n        \"突進\",\n        \"##OO\",\n        \"##ファーレン\",\n        \"よろ\",\n        \"ロドリ\",\n        \"信越\",\n        \"坊主\",\n        \"宝永\",\n        \"対比\",\n        \"府道\",\n        \"浩二\",\n        \"ひとみ\",\n        \"すすめ\",\n        \"WBO\",\n        \"ベック\",\n        \"売る\",\n        \"岩倉\",\n        \"エンブレム\",\n        \"落とさ\",\n        \"オークション\",\n        \"##リノ\",\n        \"クリニック\",\n        \"マカオ\",\n        \"デコ\",\n        \"ピンチ\",\n        \"停戦\",\n        \"客観\",\n        \"進ま\",\n        \"##こく\",\n        \"##ative\",\n        \"310\",\n        \"キッチン\",\n        \"ギミック\",\n        \"十郎\",\n        \"津島\",\n        \"キャバ\",\n        \"サイレント\",\n        \"プレゼン\",\n        \"スマイル\",\n        \"教え子\",\n        \"ルクセン\",\n        \"国交\",\n        \"業態\",\n        \"銚子\",\n        \"ジョブ\",\n        \"ランカ\",\n        \"フィリップス\",\n        \"ベンチャー\",\n        \"ミクロ\",\n        \"個展\",\n        \"坂田\",\n        \"奥羽\",\n        \"沿革\",\n        \"良き\",\n        \"配偶\",\n        \"##79\",\n        \"ウィンター\",\n        \"Radio\",\n        \"850\",\n        \"共作\",\n        \"劇的\",\n        \"見れ\",\n        \"コールド\",\n        \"先制\",\n        \"増資\",\n        \"小原\",\n        \"歩み\",\n        \"誠実\",\n        \"預言\",\n        \"Del\",\n        \"ウリ\",\n        \"オンタ\",\n        \"ワニ\",\n        \"吉井\",\n        \"杉本\",\n        \"松阪\",\n        \"##キウス\",\n        \"##era\",\n        \"クラッチ\",\n        \"バトラー\",\n        \"ファントム\",\n        \"アガ\",\n        \"いや\",\n        \"不快\",\n        \"暴れ\",\n        \"未亡\",\n        \"秘め\",\n        \"艦上\",\n        \"赤羽\",\n        \"アトランティック\",\n        \"未亡人\",\n        \"三沢\",\n        \"土産\",\n        \"映し\",\n        \"病原\",\n        \"銃弾\",\n        \"阿久\",\n        \"##マール\",\n        \"ANN\",\n        \"交友\",\n        \"因縁\",\n        \"奇数\",\n        \"帰投\",\n        \"廃藩\",\n        \"授賞\",\n        \"##EG\",\n        \"##13\",\n        \"受け取り\",\n        \"オンタリオ\",\n        \"Gal\",\n        \"ペリー\",\n        \"ボビー\",\n        \"マヨ\",\n        \"怒ら\",\n        \"東邦\",\n        \"汚れ\",\n        \"益田\",\n        \"雷撃\",\n        \"162\",\n        \"##ICK\",\n        \"ガイドライン\",\n        \"ゲオルク\",\n        \"ジョナサン\",\n        \"エッグ\",\n        \"店内\",\n        \"捕縛\",\n        \"教習\",\n        \"滑り\",\n        \"##・ヴィ\",\n        \"##シャイン\",\n        \"宝物\",\n        \"慈善\",\n        \"野心\",\n        \"両立\",\n        \"両社\",\n        \"握る\",\n        \"操り\",\n        \"決算\",\n        \"沈ん\",\n        \"畜産\",\n        \"##56\",\n        \"##たる\",\n        \"134\",\n        \"くち\",\n        \"中井\",\n        \"急進\",\n        \"果物\",\n        \"##去る\",\n        \"レーニン\",\n        \"ざん\",\n        \"はっ\",\n        \"イモ\",\n        \"各務\",\n        \"待た\",\n        \"##フー\",\n        \"レコーダー\",\n        \"Sci\",\n        \"押さえ\",\n        \"ギガ\",\n        \"下手\",\n        \"天竜\",\n        \"居酒\",\n        \"帰属\",\n        \"深海\",\n        \"造園\",\n        \"##ディウス\",\n        \"居酒屋\",\n        \"PART\",\n        \"マタ\",\n        \"翻弄\",\n        \"肥前\",\n        \"阿南\",\n        \"##ぱら\",\n        \"アンコール\",\n        \"たかし\",\n        \"伊那\",\n        \"同然\",\n        \"天理\",\n        \"張本\",\n        \"強奪\",\n        \"流動\",\n        \"精製\",\n        \"##ミール\",\n        \"132\",\n        \"乗り越え\",\n        \"キア\",\n        \"バター\",\n        \"分社\",\n        \"揃え\",\n        \"本丸\",\n        \"眠っ\",\n        \"##オリ\",\n        \"スタイ\",\n        \"サーチ\",\n        \"##ival\",\n        \"Fight\",\n        \"将兵\",\n        \"ピクチャーズ\",\n        \"HO\",\n        \"オデ\",\n        \"フレー\",\n        \"光子\",\n        \"清朝\",\n        \"##gen\",\n        \"##カワ\",\n        \"##留め\",\n        \"ジャンボ\",\n        \"譲り受け\",\n        \"直し\",\n        \"造語\",\n        \"##おる\",\n        \"##ILL\",\n        \"返り討ち\",\n        \"VF\",\n        \"叔母\",\n        \"実弟\",\n        \"新橋\",\n        \"蘇生\",\n        \"##バダ\",\n        \"乗り出し\",\n        \"SMAP\",\n        \"怖い\",\n        \"気づき\",\n        \"Anniversary\",\n        \"パトロール\",\n        \"カ所\",\n        \"文禄\",\n        \"##ITY\",\n        \"##オーリンズ\",\n        \"女児\",\n        \"庇護\",\n        \"木津\",\n        \"理性\",\n        \"税務\",\n        \"複素\",\n        \"##uel\",\n        \"##19\",\n        \"1853\",\n        \"ミケ\",\n        \"北道\",\n        \"憲章\",\n        \"松前\",\n        \"注入\",\n        \"流体\",\n        \"規範\",\n        \"##屋敷\",\n        \"##ッツァ\",\n        \"##サンブル\",\n        \"しず\",\n        \"大別\",\n        \"断り\",\n        \"解か\",\n        \"##ORY\",\n        \"フラッグ\",\n        \"##サック\",\n        \"##ぶし\",\n        \"プロパ\",\n        \"ダイジェスト\",\n        \"KAD\",\n        \"mus\",\n        \"下降\",\n        \"介石\",\n        \"島内\",\n        \"恵比\",\n        \"カリウム\",\n        \"スラヴ\",\n        \"ru\",\n        \"乱れ\",\n        \"堂々\",\n        \"注い\",\n        \"熱い\",\n        \"##JP\",\n        \"シェフ\",\n        \"ワイヤー\",\n        \"ルクセンブルク\",\n        \"マンス\",\n        \"元町\",\n        \"半田\",\n        \"批准\",\n        \"本島\",\n        \"海中\",\n        \"消える\",\n        \"緒方\",\n        \"##ズス\",\n        \"##ci\",\n        \"##どか\",\n        \"デュエット\",\n        \"Ev\",\n        \"UR\",\n        \"クジラ\",\n        \"ルシ\",\n        \"上総\",\n        \"推計\",\n        \"芥川\",\n        \"##ットガルト\",\n        \"話し合い\",\n        \"Game\",\n        \"カサ\",\n        \"変速\",\n        \"大樹\",\n        \"著しい\",\n        \"蒸留\",\n        \"##・ヒ\",\n        \"##言葉\",\n        \"ますます\",\n        \"アフター\",\n        \"##ウォー\",\n        \"Alex\",\n        \"よみ\",\n        \"トレイ\",\n        \"借用\",\n        \"従え\",\n        \"整形\",\n        \"桜花\",\n        \"飛来\",\n        \"##MM\",\n        \"ジャンヌ\",\n        \"Dis\",\n        \"見立て\",\n        \"##本松\",\n        \"ニューオーリンズ\",\n        \"もっぱら\",\n        \"ALL\",\n        \"イブン\",\n        \"ドジャース\",\n        \"レシー\",\n        \"ロート\",\n        \"北魏\",\n        \"原動\",\n        \"名跡\",\n        \"拡充\",\n        \"歌曲\",\n        \"輝き\",\n        \"##・ペ\",\n        \"##..\",\n        \"##育て\",\n        \"##ima\",\n        \"##ense\",\n        \"請け負\",\n        \"ロア\",\n        \"判別\",\n        \"官吏\",\n        \"##しめ\",\n        \"モーガン\",\n        \"FU\",\n        \"XX\",\n        \"音波\",\n        \"PSP\",\n        \"カルト\",\n        \"ナンバ\",\n        \"全勝\",\n        \"川田\",\n        \"汽車\",\n        \"赤道\",\n        \"##ギニア\",\n        \"ワース\",\n        \"伝送\",\n        \"有能\",\n        \"石狩\",\n        \"ジョゼフ\",\n        \"働きかけ\",\n        \"ピックアップ\",\n        \"インストゥルメンタル\",\n        \"あけ\",\n        \"さとう\",\n        \"サイボーグ\",\n        \"ハンデ\",\n        \"##ograp\",\n        \"キミ\",\n        \"犬山\",\n        \"##アメリカ\",\n        \"ATP\",\n        \"##press\",\n        \"Sol\",\n        \"けれ\",\n        \"ハプス\",\n        \"藤村\",\n        \"調布\",\n        \"面接\",\n        \"##JI\",\n        \"とどめ\",\n        \"エリス\",\n        \"コイ\",\n        \"今年\",\n        \"多種\",\n        \"漁師\",\n        \"##aut\",\n        \"##やさ\",\n        \"逃げ出し\",\n        \"web\",\n        \"カノン\",\n        \"上る\",\n        \"賢者\",\n        \"Park\",\n        \"ポピュラー\",\n        \"Cal\",\n        \"下北\",\n        \"妨げ\",\n        \"対等\",\n        \"山名\",\n        \"Grand\",\n        \"致死\",\n        \"##ロニア\",\n        \"Stre\",\n        \"##アイランド\",\n        \"みずほ\",\n        \"中道\",\n        \"同族\",\n        \"完封\",\n        \"容認\",\n        \"恵那\",\n        \"爬虫\",\n        \"生田\",\n        \"稲垣\",\n        \"譲受\",\n        \"伊勢崎\",\n        \"セイバー\",\n        \"Pat\",\n        \"エニックス\",\n        \"主戦\",\n        \"嵯峨\",\n        \"廃墟\",\n        \"憲兵\",\n        \"染め\",\n        \"海防\",\n        \"王冠\",\n        \"街区\",\n        \"銀色\",\n        \"ダウ\",\n        \"北山\",\n        \"同化\",\n        \"安保\",\n        \"宣戦\",\n        \"教材\",\n        \"膨張\",\n        \"買わ\",\n        \"##ニシ\",\n        \"##フェリー\",\n        \"ちゃんねる\",\n        \"##チスロ\",\n        \"der\",\n        \"原告\",\n        \"着せ\",\n        \"##ヴン\",\n        \"##持っ\",\n        \"##暮らし\",\n        \"142\",\n        \"##osa\",\n        \"ルーカス\",\n        \"OC\",\n        \"上川\",\n        \"校章\",\n        \"##クティブ\",\n        \"アニメーター\",\n        \"カタール\",\n        \"サスペ\",\n        \"ハプスブルク\",\n        \"Euro\",\n        \"卸売\",\n        \"正直\",\n        \"法科\",\n        \"用地\",\n        \"申告\",\n        \"社屋\",\n        \"竹本\",\n        \"筑後\",\n        \"脆弱\",\n        \"身近\",\n        \"鋼鉄\",\n        \"##ドス\",\n        \"##ほう\",\n        \"##フォンソ\",\n        \"ねこ\",\n        \"京子\",\n        \"匿名\",\n        \"役立つ\",\n        \"溶解\",\n        \"馬主\",\n        \"アップル\",\n        \"all\",\n        \"シュタット\",\n        \"京極\",\n        \"准将\",\n        \"夕刊\",\n        \"妻子\",\n        \"##チレン\",\n        \"##ローラー\",\n        \"勝ち点\",\n        \"当ては\",\n        \"パチスロ\",\n        \"即興\",\n        \"政友\",\n        \"顕微\",\n        \"##コフスキー\",\n        \"しな\",\n        \"風刺\",\n        \"##ゼー\",\n        \"デ・\",\n        \"ムン\",\n        \"洛陽\",\n        \"艦首\",\n        \"院内\",\n        \"##ッガー\",\n        \"Class\",\n        \"Ep\",\n        \"広げる\",\n        \"度重なる\",\n        \"甲賀\",\n        \"貧乏\",\n        \"##デンティ\",\n        \"ハス\",\n        \"上洛\",\n        \"富豪\",\n        \"トレードマーク\",\n        \"仁川\",\n        \"他界\",\n        \"血縁\",\n        \"##リブ\",\n        \"シャーマン\",\n        \"##agram\",\n        \"カザフスタン\",\n        \"Hol\",\n        \"乗じ\",\n        \"代償\",\n        \"信条\",\n        \"同種\",\n        \"若林\",\n        \"葉山\",\n        \"補う\",\n        \"関口\",\n        \"アブドゥ\",\n        \"サトシ\",\n        \"時事\",\n        \"王政\",\n        \"脱線\",\n        \"自律\",\n        \"鉱石\",\n        \"##置き\",\n        \"パスワード\",\n        \"サバイバル\",\n        \"軟式\",\n        \"如く\",\n        \"花嫁\",\n        \"苫小\",\n        \"間際\",\n        \"##line\",\n        \"##ars\",\n        \"##oto\",\n        \"苫小牧\",\n        \"了承\",\n        \"夏目\",\n        \"##の内\",\n        \"##伏せ\",\n        \"チェリー\",\n        \"シュトラ\",\n        \"##OKAWA\",\n        \"ブリュッセル\",\n        \"戦績\",\n        \"長田\",\n        \"風船\",\n        \"フィッシャー\",\n        \"##アーノ\",\n        \"メモリアル\",\n        \"テクニカル\",\n        \"ばい\",\n        \"上がら\",\n        \"更生\",\n        \"機甲\",\n        \"瀕死\",\n        \"##ho\",\n        \"ジャッキー\",\n        \"アンサンブル\",\n        \"作り出す\",\n        \"ギャンブル\",\n        \"大竹\",\n        \"若葉\",\n        \"銃器\",\n        \"スライダー\",\n        \"Company\",\n        \"吉原\",\n        \"羽生\",\n        \"##り物\",\n        \"テント\",\n        \"色素\",\n        \"請負\",\n        \"長者\",\n        \"##着き\",\n        \"##利き\",\n        \"##ンジン\",\n        \"ステート\",\n        \"ジョルジュ\",\n        \"長島\",\n        \"イーグル\",\n        \"シュトゥットガルト\",\n        \"おや\",\n        \"モンド\",\n        \"右打\",\n        \"唱える\",\n        \"妥当\",\n        \"熱田\",\n        \"磁場\",\n        \"舞踏\",\n        \"##ison\",\n        \"##els\",\n        \"##OWN\",\n        \"KADOKAWA\",\n        \"Sk\",\n        \"右派\",\n        \"恐ろ\",\n        \"憎悪\",\n        \"残党\",\n        \"混成\",\n        \"連発\",\n        \"##チモア\",\n        \"OL\",\n        \"さやか\",\n        \"タックル\",\n        \"全額\",\n        \"川原\",\n        \"終着\",\n        \"美しく\",\n        \"費やし\",\n        \"##ブレッド\",\n        \"ジェンダー\",\n        \"スナイ\",\n        \"副官\",\n        \"助演\",\n        \"枚方\",\n        \"田畑\",\n        \"舞い\",\n        \"長良\",\n        \"離反\",\n        \"アスリート\",\n        \"ゲルマン\",\n        \"カフ\",\n        \"ボディー\",\n        \"国税\",\n        \"沙汰\",\n        \"IBF\",\n        \"バドミントン\",\n        \"尾翼\",\n        \"次ぎ\",\n        \"田島\",\n        \"監獄\",\n        \"##麻呂\",\n        \"アトラス\",\n        \"シャーロット\",\n        \"UTC\",\n        \"柏原\",\n        \"できれ\",\n        \"ランニング\",\n        \"1852\",\n        \"カント\",\n        \"下層\",\n        \"学力\",\n        \"布教\",\n        \"曲名\",\n        \"松村\",\n        \"ギャップ\",\n        \"ふさわしい\",\n        \"オリーブ\",\n        \"Miss\",\n        \"倒壊\",\n        \"砲身\",\n        \"綴り\",\n        \"##なじみ\",\n        \"乗り物\",\n        \"ハニー\",\n        \"受領\",\n        \"命じる\",\n        \"軍需\",\n        \"##ブー\",\n        \"##ノイド\",\n        \"##ゴメ\",\n        \"##ッキリ\",\n        \"##ference\",\n        \"オムニバス\",\n        \"Lu\",\n        \"コソ\",\n        \"仮設\",\n        \"地雷\",\n        \"増発\",\n        \"虚偽\",\n        \"触手\",\n        \"153\",\n        \"##ショナ\",\n        \"大町\",\n        \"巻い\",\n        \"鳥栖\",\n        \"いわく\",\n        \"よしもと\",\n        \"コックピット\",\n        \"カッター\",\n        \"二宮\",\n        \"初年\",\n        \"建つ\",\n        \"焼け\",\n        \"##どころ\",\n        \"##ターズ\",\n        \"スパーク\",\n        \"祈祷\",\n        \"##メート\",\n        \"アニマル\",\n        \"チキン\",\n        \"ネガ\",\n        \"掛川\",\n        \"見込ま\",\n        \"##の中\",\n        \"##離れ\",\n        \"ジョーカー\",\n        \"ボルチモア\",\n        \"キャピタル\",\n        \"クラリネット\",\n        \"ビースト\",\n        \"充当\",\n        \"彼氏\",\n        \"高まる\",\n        \"##ギア\",\n        \"##モデル\",\n        \"##GE\",\n        \"亡くなり\",\n        \"スリップ\",\n        \"コネチカ\",\n        \"景勝\",\n        \"着物\",\n        \"##der\",\n        \"##ヤーズ\",\n        \"マーベル\",\n        \"##AGUE\",\n        \"FNN\",\n        \"エイト\",\n        \"半減\",\n        \"新線\",\n        \"##カール\",\n        \"##嫌い\",\n        \"杉田\",\n        \"泣い\",\n        \"競り\",\n        \"防備\",\n        \"風味\",\n        \"パイレーツ\",\n        \"##AME\",\n        \"コネチカット\",\n        \"メット\",\n        \"ヨウ\",\n        \"人力\",\n        \"投影\",\n        \"誘惑\",\n        \"遊歩\",\n        \"面々\",\n        \"##by\",\n        \"##16\",\n        \"##レーティング\",\n        \"##キャラ\",\n        \"服用\",\n        \"霧島\",\n        \"フランケン\",\n        \"ローテーション\",\n        \"繰り上げ\",\n        \"ベンジャ\",\n        \"恋心\",\n        \"震度\",\n        \"##ビナ\",\n        \"##トム\",\n        \"ヌード\",\n        \"築く\",\n        \"肥満\",\n        \"##366\",\n        \"##いん\",\n        \"LEAGUE\",\n        \"man\",\n        \"ナミ\",\n        \"マダ\",\n        \"子育て\",\n        \"語彙\",\n        \"またがる\",\n        \"アキラ\",\n        \"Of\",\n        \"ラット\",\n        \"到来\",\n        \"指針\",\n        \"有楽\",\n        \"梗塞\",\n        \"武帝\",\n        \"ファウ\",\n        \"取り外\",\n        \"ジョヴァン\",\n        \"カーネル\",\n        \"##ript\",\n        \"SB\",\n        \"スパー\",\n        \"ポット\",\n        \"大麻\",\n        \"平壌\",\n        \"点火\",\n        \"王権\",\n        \"ストックホルム\",\n        \"背負っ\",\n        \"go\",\n        \"レズ\",\n        \"催眠\",\n        \"揚げ\",\n        \"##ks\",\n        \"##なぎ\",\n        \"おまけ\",\n        \"GEN\",\n        \"上尾\",\n        \"信じる\",\n        \"叙任\",\n        \"喋る\",\n        \"夕張\",\n        \"重工\",\n        \"##パード\",\n        \"コンビニエンス\",\n        \"Batt\",\n        \"Lim\",\n        \"TA\",\n        \"ドバイ\",\n        \"ベータ\",\n        \"城南\",\n        \"皇女\",\n        \"細部\",\n        \"鬼太郎\",\n        \"##58\",\n        \"##がた\",\n        \"##リエット\",\n        \"気づか\",\n        \"くみ\",\n        \"とれ\",\n        \"ほし\",\n        \"聴覚\",\n        \"蒲生\",\n        \"##・シュ\",\n        \"ベルン\",\n        \"サラブレッド\",\n        \"抜け出し\",\n        \"9000\",\n        \"吉備\",\n        \"広範\",\n        \"快適\",\n        \"殺到\",\n        \"発効\",\n        \"西野\",\n        \"##クロス\",\n        \"TT\",\n        \"ザク\",\n        \"上段\",\n        \"皆無\",\n        \"ダイレクト\",\n        \"ティル\",\n        \"ポートランド\",\n        \"スキャンダル\",\n        \"KE\",\n        \"ゼウス\",\n        \"開ける\",\n        \"高射\",\n        \"##ッショナル\",\n        \"##ロップ\",\n        \"##ショー\",\n        \"ミラクル\",\n        \"おそれ\",\n        \"ツーリング\",\n        \"浮かぶ\",\n        \"パンタグラフ\",\n        \"JF\",\n        \"上っ\",\n        \"台場\",\n        \"##パイ\",\n        \"フォア\",\n        \"United\",\n        \"モナコ\",\n        \"Jose\",\n        \"デマンド\",\n        \"叶わ\",\n        \"幸子\",\n        \"幼年\",\n        \"慰霊\",\n        \"高台\",\n        \"##・ピ\",\n        \"##リエン\",\n        \"デュアル\",\n        \"殺し屋\",\n        \"Ju\",\n        \"マロ\",\n        \"全幅\",\n        \"文句\",\n        \"##ずり\",\n        \"##曽根\",\n        \"チャット\",\n        \"ディーラー\",\n        \"Im\",\n        \"揖斐\",\n        \"登り\",\n        \"##デシュ\",\n        \"ウィルス\",\n        \"いとう\",\n        \"てれ\",\n        \"パッド\",\n        \"両面\",\n        \"品番\",\n        \"貸出\",\n        \"跨線\",\n        \"##出る\",\n        \"シャワー\",\n        \"Ap\",\n        \"パッチ\",\n        \"休戦\",\n        \"停泊\",\n        \"出願\",\n        \"黎明\",\n        \"##OG\",\n        \"Arch\",\n        \"ボヘミア\",\n        \"二男\",\n        \"別当\",\n        \"目玉\",\n        \"貰っ\",\n        \"##ret\",\n        \"カーボン\",\n        \"Gi\",\n        \"ヘレン\",\n        \"伐採\",\n        \"株価\",\n        \"直行\",\n        \"線型\",\n        \"翌朝\",\n        \"養育\",\n        \"インフォ\",\n        \"マシーン\",\n        \"レガ\",\n        \"産ん\",\n        \"遊戯\",\n        \"高騰\",\n        \"##ペイ\",\n        \"カリスマ\",\n        \"LM\",\n        \"ウイン\",\n        \"下がっ\",\n        \"囚われ\",\n        \"地価\",\n        \"拡幅\",\n        \"甲州\",\n        \"賀茂\",\n        \"配し\",\n        \"重巡\",\n        \"##ラシア\",\n        \"##残し\",\n        \"##ross\",\n        \"##ティーノ\",\n        \"YouTuber\",\n        \"Phil\",\n        \"カンタ\",\n        \"ヒカル\",\n        \"停滞\",\n        \"嫌う\",\n        \"旧道\",\n        \"漬け\",\n        \"農産\",\n        \"通達\",\n        \"##マルク\",\n        \"##ough\",\n        \"##ional\",\n        \"カルロ\",\n        \"アラバマ\",\n        \"シンクロ\",\n        \"寄宿\",\n        \"捕鯨\",\n        \"明王\",\n        \"賭博\",\n        \"##yle\",\n        \"##ube\",\n        \"せつ\",\n        \"城内\",\n        \"場外\",\n        \"持参\",\n        \"連帯\",\n        \"門人\",\n        \"降る\",\n        \"ウィー\",\n        \"Type\",\n        \"元首\",\n        \"多項\",\n        \"新春\",\n        \"須賀\",\n        \"飲ま\",\n        \"ガーディアン\",\n        \"ストリーミング\",\n        \"ライプツィヒ\",\n        \"目の当たり\",\n        \"OEM\",\n        \"下げる\",\n        \"内面\",\n        \"大道\",\n        \"愛子\",\n        \"退去\",\n        \"##ータン\",\n        \"1851\",\n        \"享年\",\n        \"信夫\",\n        \"卓越\",\n        \"製法\",\n        \"重なり\",\n        \"##去り\",\n        \"チャリティー\",\n        \"##ジャック\",\n        \"いとこ\",\n        \"Fire\",\n        \"ちか\",\n        \"はつ\",\n        \"ラビ\",\n        \"壊し\",\n        \"懇願\",\n        \"気球\",\n        \"軍曹\",\n        \"持ち込み\",\n        \"言い渡さ\",\n        \"催し\",\n        \"国定\",\n        \"申し立て\",\n        \"いたる\",\n        \"さかのぼ\",\n        \"ばあ\",\n        \"バング\",\n        \"合間\",\n        \"礼儀\",\n        \"醍醐\",\n        \"##ちょ\",\n        \"教職員\",\n        \"Video\",\n        \"バロン\",\n        \"健太郎\",\n        \"死因\",\n        \"高値\",\n        \"##バサ\",\n        \"##アーズ\",\n        \"しみ\",\n        \"加納\",\n        \"恐らく\",\n        \"戦中\",\n        \"本科\",\n        \"灌漑\",\n        \"##ートニー\",\n        \"パーキング\",\n        \"書き込み\",\n        \"リベラル\",\n        \"Nint\",\n        \"ぞく\",\n        \"備中\",\n        \"冷蔵\",\n        \"同定\",\n        \"咲く\",\n        \"園内\",\n        \"埴輪\",\n        \"従わ\",\n        \"祭典\",\n        \"##ワート\",\n        \"##ガード\",\n        \"取りや\",\n        \"つなぎ\",\n        \"いち早く\",\n        \"春日井\",\n        \"##ポリタン\",\n        \"ベンジャミン\",\n        \"レッズ\",\n        \"余剰\",\n        \"##出そう\",\n        \"少なから\",\n        \"フリーランス\",\n        \"##ird\",\n        \"WOW\",\n        \"原宿\",\n        \"星雲\",\n        \"石山\",\n        \"225\",\n        \"Sound\",\n        \"iT\",\n        \"リップ\",\n        \"ローター\",\n        \"同書\",\n        \"大岡\",\n        \"耕作\",\n        \"##orld\",\n        \"##ister\",\n        \"持ち合わせ\",\n        \"340\",\n        \"##ルンベルク\",\n        \"レジスタンス\",\n        \"EURO\",\n        \"健在\",\n        \"嫌わ\",\n        \"杉浦\",\n        \"荒井\",\n        \"##ッチャ\",\n        \"Edition\",\n        \"けれど\",\n        \"BIG\",\n        \"たど\",\n        \"テッド\",\n        \"互角\",\n        \"逆襲\",\n        \"ジャガー\",\n        \"取り込ま\",\n        \"##ステークス\",\n        \"ローソン\",\n        \"Sim\",\n        \"コープ\",\n        \"パット\",\n        \"休館\",\n        \"手下\",\n        \"新星\",\n        \"検知\",\n        \"産生\",\n        \"##che\",\n        \"##ージョン\",\n        \"##irst\",\n        \"1849\",\n        \"コスモス\",\n        \"Light\",\n        \"そん\",\n        \"ルン\",\n        \"共学\",\n        \"判例\",\n        \"名字\",\n        \"延べ\",\n        \"洗練\",\n        \"矢部\",\n        \"##ザック\",\n        \"##フォルト\",\n        \"苦しめ\",\n        \"コモン\",\n        \"覆い\",\n        \"誤差\",\n        \"##モール\",\n        \"取り囲\",\n        \"##icial\",\n        \"アイデンティ\",\n        \"スピーチ\",\n        \"WR\",\n        \"奉公\",\n        \"##ズラ\",\n        \"##ボルト\",\n        \"##ッチェ\",\n        \"##ady\",\n        \"ウエスタン\",\n        \"JNN\",\n        \"ほく\",\n        \"##多摩\",\n        \"##フィクション\",\n        \"ウェザー\",\n        \"スコープ\",\n        \"トゥル\",\n        \"オペレーティング\",\n        \"見送ら\",\n        \"ウズベキスタン\",\n        \"Switch\",\n        \"なだ\",\n        \"クレーター\",\n        \"世俗\",\n        \"和子\",\n        \"寺町\",\n        \"本流\",\n        \"終日\",\n        \"##リィ\",\n        \"キャッスル\",\n        \"ウェイト\",\n        \"SPECIAL\",\n        \"メイト\",\n        \"レノン\",\n        \"右京\",\n        \"枢機\",\n        \"アルカリ\",\n        \"披露目\",\n        \"ミハイル\",\n        \"Nintendo\",\n        \"UD\",\n        \"兼ねる\",\n        \"冷酷\",\n        \"武官\",\n        \"氏名\",\n        \"狩野\",\n        \"鉄鋼\",\n        \"##デール\",\n        \"ディック\",\n        \"とうきょう\",\n        \"TB\",\n        \"いじ\",\n        \"かおり\",\n        \"ギネス\",\n        \"チュニ\",\n        \"入江\",\n        \"戦勝\",\n        \"祭礼\",\n        \"赤く\",\n        \"飢饉\",\n        \"黒幕\",\n        \"##がす\",\n        \"##ルトゥ\",\n        \"MOV\",\n        \"割譲\",\n        \"絵柄\",\n        \"野々\",\n        \"##ーア\",\n        \"##ヨシ\",\n        \"DIS\",\n        \"がる\",\n        \"みの\",\n        \"やさ\",\n        \"神官\",\n        \"筑摩\",\n        \"繊細\",\n        \"配当\",\n        \"カンヌ\",\n        \"一躍\",\n        \"引か\",\n        \"来訪\",\n        \"面識\",\n        \"256\",\n        \"かわり\",\n        \"河岸\",\n        \"混血\",\n        \"##キーパー\",\n        \"Let\",\n        \"Mem\",\n        \"エックス\",\n        \"増す\",\n        \"安達\",\n        \"平戸\",\n        \"戦災\",\n        \"物品\",\n        \"裁定\",\n        \"電荷\",\n        \"驚か\",\n        \"##がえる\",\n        \"##らわ\",\n        \"フィーチャー\",\n        \"Max\",\n        \"万能\",\n        \"円谷\",\n        \"列挙\",\n        \"専業\",\n        \"必然\",\n        \"藤子\",\n        \"##ko\",\n        \"##ヤマ\",\n        \"##ノア\",\n        \"キャスティング\",\n        \"バディ\",\n        \"欲望\",\n        \"没年\",\n        \"眠る\",\n        \"覆面\",\n        \"##プラノ\",\n        \"富裕\",\n        \"文理\",\n        \"##しむ\",\n        \"バラバラ\",\n        \"プロフェッショナル\",\n        \"Luc\",\n        \"ちび\",\n        \"両軍\",\n        \"仏像\",\n        \"前向き\",\n        \"南町\",\n        \"実録\",\n        \"東岸\",\n        \"楽園\",\n        \"野中\",\n        \"鋼製\",\n        \"##タケ\",\n        \"##之内\",\n        \"##ula\",\n        \"ツイート\",\n        \"Ca\",\n        \"Out\",\n        \"君臨\",\n        \"地層\",\n        \"帝王\",\n        \"Instit\",\n        \"リサイクル\",\n        \"サタデー\",\n        \"優し\",\n        \"参列\",\n        \"土日\",\n        \"未定\",\n        \"水銀\",\n        \"見なし\",\n        \"##込める\",\n        \"del\",\n        \"導か\",\n        \"美和\",\n        \"美智\",\n        \"自我\",\n        \"GPS\",\n        \"Da\",\n        \"Di\",\n        \"のん\",\n        \"ダコタ\",\n        \"坂東\",\n        \"尋問\",\n        \"町村\",\n        \"百姓\",\n        \"荒れ\",\n        \"##oon\",\n        \"##HA\",\n        \"ストレ\",\n        \"マグマ\",\n        \"タンカー\",\n        \"レディース\",\n        \"公害\",\n        \"凶暴\",\n        \"刺客\",\n        \"収縮\",\n        \"無双\",\n        \"躊躇\",\n        \"##ぶん\",\n        \"レナ\",\n        \"十和田\",\n        \"新入\",\n        \"森山\",\n        \"生計\",\n        \"相方\",\n        \"西園\",\n        \"黒木\",\n        \"##キス\",\n        \"##チコ\",\n        \"##ゼット\",\n        \"ジョッキー\",\n        \"##チェル\",\n        \"##erson\",\n        \"##AMP\",\n        \"トゥール\",\n        \"Your\",\n        \"ウイグル\",\n        \"エカ\",\n        \"制動\",\n        \"甚大\",\n        \"相場\",\n        \"行先\",\n        \"受け止め\",\n        \"##ブリュ\",\n        \"インタフェース\",\n        \"マッカートニー\",\n        \"]、\",\n        \"タカラ\",\n        \"ヘヴィ\",\n        \"リヨン\",\n        \"召し\",\n        \"左京\",\n        \"日数\",\n        \"登頂\",\n        \"Version\",\n        \"商社\",\n        \"嫡子\",\n        \"空白\",\n        \"誓っ\",\n        \"農協\",\n        \"##li\",\n        \"##リアーズ\",\n        \"##ッカーズ\",\n        \"Ref\",\n        \"おもに\",\n        \"Soci\",\n        \"シオン\",\n        \"ツル\",\n        \"下表\",\n        \"中流\",\n        \"隔週\",\n        \"##ベラ\",\n        \"果たせ\",\n        \"ダイビング\",\n        \"##ナンデス\",\n        \"メラ\",\n        \"レックス\",\n        \"前夜\",\n        \"啓蒙\",\n        \"浮気\",\n        \"見逃\",\n        \"限っ\",\n        \"##ORE\",\n        \"とし\",\n        \"ブール\",\n        \"世の中\",\n        \"帝政\",\n        \"手首\",\n        \"歯車\",\n        \"残骸\",\n        \"筆記\",\n        \"##RA\",\n        \"1820\",\n        \"取り込ん\",\n        \"キプロス\",\n        \"ぎん\",\n        \"シオ\",\n        \"ズーム\",\n        \"ビクトリア\",\n        \"出所\",\n        \"手当\",\n        \"決心\",\n        \"過度\",\n        \"トラベル\",\n        \"Child\",\n        \"ワークショップ\",\n        \"ステアリング\",\n        \"出仕\",\n        \"切ら\",\n        \"商法\",\n        \"在庫\",\n        \"壁面\",\n        \"挙兵\",\n        \"極秘\",\n        \"略し\",\n        \"老舗\",\n        \"高瀬\",\n        \"高尾\",\n        \"Corpor\",\n        \"宇和島\",\n        \"DB\",\n        \"アエ\",\n        \"執着\",\n        \"近傍\",\n        \"金持ち\",\n        \"ハンセン\",\n        \"ファルコン\",\n        \"尾上\",\n        \"本曲\",\n        \"滑らか\",\n        \"高官\",\n        \"##クシ\",\n        \"引き出し\",\n        \"ポップス\",\n        \"カウンセ\",\n        \"スチール\",\n        \"なぎ\",\n        \"らしき\",\n        \"大雨\",\n        \"客船\",\n        \"探る\",\n        \"解き\",\n        \"身柄\",\n        \"##キラ\",\n        \"208\",\n        \"##ANCE\",\n        \"アトレ\",\n        \"大倉\",\n        \"纏っ\",\n        \"##バチ\",\n        \"##ノサウルス\",\n        \"##調べ\",\n        \"ラピ\",\n        \"ラント\",\n        \"千種\",\n        \"譲る\",\n        \"##ロワ\",\n        \"##DER\",\n        \"Boy\",\n        \"ゆい\",\n        \"早世\",\n        \"無力\",\n        \"フェデ\",\n        \"セルゲイ\",\n        \"ニュルンベルク\",\n        \"主君\",\n        \"拝殿\",\n        \"随筆\",\n        \"飛翔\",\n        \"##・ヴァ\",\n        \"アドバンス\",\n        \"ネイティブ\",\n        \"コンポーネ\",\n        \"取り壊さ\",\n        \"Sant\",\n        \"オメガ\",\n        \"国造\",\n        \"漁船\",\n        \"試練\",\n        \"降っ\",\n        \"154\",\n        \"Ke\",\n        \"Mil\",\n        \"党内\",\n        \"国歌\",\n        \"故人\",\n        \"有る\",\n        \"郷里\",\n        \"頭蓋\",\n        \"鶴田\",\n        \"ジョシュ\",\n        \"沈黙\",\n        \"近親\",\n        \"あっさり\",\n        \"フェミニ\",\n        \"##イスキー\",\n        \"フレッド\",\n        \"ノンフィクション\",\n        \"シリアル\",\n        \"いさ\",\n        \"ばし\",\n        \"ケビン\",\n        \"勝山\",\n        \"和音\",\n        \"小名\",\n        \"抜ける\",\n        \"正午\",\n        \"特捜\",\n        \"転任\",\n        \"辞し\",\n        \"##ring\",\n        \"##モンテ\",\n        \"リヴァプール\",\n        \"May\",\n        \"シネ\",\n        \"夢中\",\n        \"##ニット\",\n        \"##まじ\",\n        \"ヨルダン\",\n        \"恵比寿\",\n        \"サスペンス\",\n        \"ふし\",\n        \"元祖\",\n        \"可視\",\n        \"多田\",\n        \"数える\",\n        \"毛皮\",\n        \"水質\",\n        \"パンフ\",\n        \"いたずら\",\n        \"しゅん\",\n        \"回顧\",\n        \"寒冷\",\n        \"規律\",\n        \"マルティン\",\n        \"##une\",\n        \"サムライ\",\n        \"類型\",\n        \"##KS\",\n        \"アクシ\",\n        \"セス\",\n        \"建武\",\n        \"木戸\",\n        \"##ティコ\",\n        \"まちづくり\",\n        \"キツ\",\n        \"下士\",\n        \"永正\",\n        \"省庁\",\n        \"託さ\",\n        \"##lin\",\n        \"FEST\",\n        \"Little\",\n        \"Na\",\n        \"ぶら\",\n        \"偽造\",\n        \"傷つけ\",\n        \"冷たい\",\n        \"裏側\",\n        \"##idae\",\n        \"ルーシ\",\n        \"HC\",\n        \"さつ\",\n        \"スバル\",\n        \"ナツ\",\n        \"マッハ\",\n        \"ミレ\",\n        \"リナ\",\n        \"因む\",\n        \"目前\",\n        \"##TP\",\n        \"##モノ\",\n        \"ヘルシン\",\n        \"##aint\",\n        \"カエサル\",\n        \"IG\",\n        \"まえ\",\n        \"わん\",\n        \"創価\",\n        \"救世\",\n        \"林業\",\n        \"神輿\",\n        \"細く\",\n        \"贈っ\",\n        \"難航\",\n        \"ことば\",\n        \"##ストロング\",\n        \"寄せる\",\n        \"岸和田\",\n        \"矯正\",\n        \"##ゼーション\",\n        \"スナック\",\n        \"ザイ\",\n        \"傾倒\",\n        \"委ね\",\n        \"字体\",\n        \"風間\",\n        \"##59\",\n        \"##わざ\",\n        \"コンプ\",\n        \"STAR\",\n        \"サメ\",\n        \"シモン\",\n        \"ベニ\",\n        \"日誌\",\n        \"榎本\",\n        \"聴き\",\n        \"通す\",\n        \"タブレット\",\n        \"Michael\",\n        \"SRCL\",\n        \"イロ\",\n        \"トータル\",\n        \"ラルフ\",\n        \"匂い\",\n        \"旅人\",\n        \"病床\",\n        \"##じま\",\n        \"SPOR\",\n        \"ツイッター\",\n        \"Nav\",\n        \"ゲオル\",\n        \"村域\",\n        \"枢密\",\n        \"消極\",\n        \"酒場\",\n        \"レプリカ\",\n        \"Bab\",\n        \"Dig\",\n        \"ピート\",\n        \"一夫\",\n        \"周防\",\n        \"立像\",\n        \"##・テ\",\n        \"1846\",\n        \"テンション\",\n        \"イルカ\",\n        \"ブダペスト\",\n        \"ベス\",\n        \"氾濫\",\n        \"災い\",\n        \"転出\",\n        \"##ural\",\n        \"追い込ん\",\n        \"ヴェストファーレン\",\n        \"プエルトリコ\",\n        \"iTunes\",\n        \"ソルト\",\n        \"リラ\",\n        \"団結\",\n        \"恩恵\",\n        \"捕え\",\n        \"直訳\",\n        \"著述\",\n        \"##77\",\n        \"生き物\",\n        \"セレクト\",\n        \"おこなう\",\n        \"##・ディビシオン\",\n        \"コンスタンティノ\",\n        \"リソース\",\n        \"JFL\",\n        \"不祥\",\n        \"傷害\",\n        \"太い\",\n        \"生後\",\n        \"藤枝\",\n        \"##カルド\",\n        \"マグネ\",\n        \"スティール\",\n        \"##ロニクス\",\n        \"カクテル\",\n        \"冊子\",\n        \"官邸\",\n        \"整っ\",\n        \"育児\",\n        \"褒章\",\n        \"躍進\",\n        \"長江\",\n        \"静脈\",\n        \"##53\",\n        \"##ンドー\",\n        \"ジュール\",\n        \"ETC\",\n        \"Fre\",\n        \"上告\",\n        \"初恋\",\n        \"年鑑\",\n        \"後醍\",\n        \"正徳\",\n        \"滝沢\",\n        \"目さ\",\n        \"積雪\",\n        \"練り\",\n        \"選任\",\n        \"関根\",\n        \"黒崎\",\n        \"##ベリ\",\n        \"ヴァレ\",\n        \"##ウィック\",\n        \"後醍醐\",\n        \"アウェー\",\n        \"没落\",\n        \"河村\",\n        \"自発\",\n        \"花序\",\n        \"阿武\",\n        \"##14\",\n        \"##河内\",\n        \"受け付け\",\n        \"乗り入れる\",\n        \"クレオ\",\n        \"スキャン\",\n        \"Charles\",\n        \"FE\",\n        \"ゲッ\",\n        \"老中\",\n        \"##・ジュ\",\n        \"##合わさ\",\n        \"取り扱っ\",\n        \"メドレー\",\n        \"Pop\",\n        \"Sa\",\n        \"ズボン\",\n        \"トマ\",\n        \"海南\",\n        \"特訓\",\n        \"立山\",\n        \"配線\",\n        \"##olf\",\n        \"ダイナミック\",\n        \"パンフレット\",\n        \"はめ\",\n        \"検閲\",\n        \"##パラ\",\n        \"バスケ\",\n        \"組み合わせる\",\n        \"そちら\",\n        \"仲裁\",\n        \"劉備\",\n        \"懸命\",\n        \"救難\",\n        \"破れ\",\n        \"繋ぐ\",\n        \"##オフ\",\n        \"ジェファーソン\",\n        \"サイコロ\",\n        \"シンフォ\",\n        \"Arc\",\n        \"取り上げる\",\n        \"COVID\",\n        \"Sky\",\n        \"山野\",\n        \"##リータ\",\n        \"##ular\",\n        \"つくっ\",\n        \"WC\",\n        \"203\",\n        \"##very\",\n        \"##ublic\",\n        \"Dan\",\n        \"Gold\",\n        \"トンプソン\",\n        \"亀井\",\n        \"壱岐\",\n        \"法典\",\n        \"神事\",\n        \"野沢\",\n        \"##せつ\",\n        \"オーロラ\",\n        \"##ーツク\",\n        \"ガルシア\",\n        \"Thomas\",\n        \"ドリンク\",\n        \"七尾\",\n        \"前座\",\n        \"柳田\",\n        \"様相\",\n        \"蒲田\",\n        \"##バルディア\",\n        \"エドゥ\",\n        \"ゴルゴ\",\n        \"オアシス\",\n        \"YU\",\n        \"みらい\",\n        \"セーフ\",\n        \"木更\",\n        \"植木\",\n        \"油圧\",\n        \"町民\",\n        \"Store\",\n        \"##クラテス\",\n        \"カウントダウン\",\n        \"マッカーサー\",\n        \"木更津\",\n        \"ペダル\",\n        \"桃太郎\",\n        \"竹中\",\n        \"補修\",\n        \"##ラーレン\",\n        \"チャック\",\n        \"デュエル\",\n        \"支払っ\",\n        \"ブックレット\",\n        \"エージェンシー\",\n        \"Mel\",\n        \"サタン\",\n        \"合図\",\n        \"直下\",\n        \"窃盗\",\n        \"邪悪\",\n        \"システムズ\",\n        \"やん\",\n        \"丹羽\",\n        \"言論\",\n        \"谷村\",\n        \"タフ\",\n        \"ツィ\",\n        \"好奇\",\n        \"慣例\",\n        \"画期\",\n        \"釜石\",\n        \"##そく\",\n        \"##差し\",\n        \"ジョアン\",\n        \"ユーモア\",\n        \"ヘビ\",\n        \"マッキ\",\n        \"付さ\",\n        \"小豆\",\n        \"島々\",\n        \"未熟\",\n        \"見出さ\",\n        \"マヌエル\",\n        \"産む\",\n        \"異議\",\n        \"##スン\",\n        \"##ッチメント\",\n        \"アテナイ\",\n        \"例え\",\n        \"年限\",\n        \"頓挫\",\n        \"##マイズ\",\n        \"Mat\",\n        \"デフォルト\",\n        \"レポーター\",\n        \"企て\",\n        \"叙せ\",\n        \"滅び\",\n        \"##ナダ\",\n        \"Office\",\n        \"FNS\",\n        \"MH\",\n        \"シティー\",\n        \"秒間\",\n        \"退位\",\n        \"##クトップ\",\n        \"ボーカリスト\",\n        \"シャーシ\",\n        \"API\",\n        \"##otten\",\n        \"チェルシー\",\n        \"イケメン\",\n        \"モテ\",\n        \"茶道\",\n        \"農耕\",\n        \"##だち\",\n        \"##コンシン\",\n        \"FIA\",\n        \"デスクトップ\",\n        \"浴びる\",\n        \"IL\",\n        \"同法\",\n        \"存命\",\n        \"平城\",\n        \"弾い\",\n        \"復員\",\n        \"着い\",\n        \"葛西\",\n        \"違和\",\n        \"重度\",\n        \"##ボット\",\n        \"##代子\",\n        \"イト\",\n        \"城郭\",\n        \"応永\",\n        \"桜木\",\n        \"##ん坊\",\n        \"##ぶさ\",\n        \"ウィザード\",\n        \"スターリング\",\n        \"いわば\",\n        \"##OWER\",\n        \"ふと\",\n        \"アリスト\",\n        \"ジア\",\n        \"水槽\",\n        \"濃く\",\n        \"熱中\",\n        \"野手\",\n        \"隔て\",\n        \"##ラウ\",\n        \"##帰り\",\n        \"ストリング\",\n        \"##APP\",\n        \"Direct\",\n        \"ブス\",\n        \"三上\",\n        \"参詣\",\n        \"叫ん\",\n        \"極楽\",\n        \"##ery\",\n        \"143\",\n        \"##oud\",\n        \"ボウリング\",\n        \"チャーチル\",\n        \"立ち向かう\",\n        \"Big\",\n        \"Lab\",\n        \"カッコ\",\n        \"修繕\",\n        \"公子\",\n        \"実物\",\n        \"監察\",\n        \"祝う\",\n        \"サンシャイン\",\n        \"スペンサー\",\n        \"##ハーサル\",\n        \"ノヴァ\",\n        \"ポロ\",\n        \"レンジャーズ\",\n        \"三鷹\",\n        \"拾っ\",\n        \"絶命\",\n        \"誤認\",\n        \"##ien\",\n        \"##uch\",\n        \"430\",\n        \"オペレーション\",\n        \"DOS\",\n        \"あかり\",\n        \"すく\",\n        \"リハーサル\",\n        \"光秀\",\n        \"旧約\",\n        \"美作\",\n        \"##百合\",\n        \"ジグ\",\n        \"戦列\",\n        \"振ら\",\n        \"撮っ\",\n        \"溶液\",\n        \"症例\",\n        \"被爆\",\n        \"電器\",\n        \"##FT\",\n        \"##ノラマ\",\n        \"ついで\",\n        \"インテリ\",\n        \"イヴァン\",\n        \"チー\",\n        \"ニセ\",\n        \"主軸\",\n        \"全高\",\n        \"由美\",\n        \"##ミド\",\n        \"ナビゲーター\",\n        \"こっ\",\n        \"ひばり\",\n        \"エアー\",\n        \"付か\",\n        \"有線\",\n        \"正則\",\n        \"水没\",\n        \"##投げ\",\n        \"ウェルズ\",\n        \"key\",\n        \"づき\",\n        \"イシ\",\n        \"ラオス\",\n        \"射出\",\n        \"振っ\",\n        \"採り\",\n        \"新車\",\n        \"絶縁\",\n        \"美穂\",\n        \"賢治\",\n        \"いちご\",\n        \"アームストロング\",\n        \"ウィスコンシン\",\n        \"ベンガル\",\n        \"使役\",\n        \"奥義\",\n        \"少量\",\n        \"返答\",\n        \"銅像\",\n        \"龍馬\",\n        \"シルエット\",\n        \"##bert\",\n        \"尽くす\",\n        \"うみ\",\n        \"戦わ\",\n        \"打球\",\n        \"提訴\",\n        \"治め\",\n        \"自粛\",\n        \"走ら\",\n        \"越し\",\n        \"都城\",\n        \"##SU\",\n        \"##ビッチ\",\n        \"##ったり\",\n        \"##omb\",\n        \"スクリ\",\n        \"いちろう\",\n        \"クロスオーバー\",\n        \"##・ド・\",\n        \"のぼる\",\n        \"イスタン\",\n        \"モットー\",\n        \"レパート\",\n        \"十勝\",\n        \"因果\",\n        \"小杉\",\n        \"漂流\",\n        \"画質\",\n        \"税金\",\n        \"行え\",\n        \"##ME\",\n        \"##PC\",\n        \"見つから\",\n        \"ロースター\",\n        \"余地\",\n        \"古事\",\n        \"安い\",\n        \"森本\",\n        \"騙さ\",\n        \"シンシナ\",\n        \"Fil\",\n        \"MI\",\n        \"NK\",\n        \"スン\",\n        \"加害\",\n        \"念願\",\n        \"手持ち\",\n        \"独断\",\n        \"線維\",\n        \"難い\",\n        \"風習\",\n        \"4547\",\n        \"上り線\",\n        \"Franc\",\n        \"かれ\",\n        \"平衡\",\n        \"脱獄\",\n        \"音速\",\n        \"##ボラ\",\n        \"##こし\",\n        \"アイディア\",\n        \"送り出し\",\n        \"ボリビア\",\n        \"おし\",\n        \"ぶっ\",\n        \"スワン\",\n        \"伝授\",\n        \"分担\",\n        \"半期\",\n        \"発熱\",\n        \"貫く\",\n        \"##バオ\",\n        \"パーフェクト\",\n        \"##ander\",\n        \"##IVAL\",\n        \"リモート\",\n        \"ウィキペディア\",\n        \"ラトビア\",\n        \"KB\",\n        \"Ob\",\n        \"RD\",\n        \"ホビー\",\n        \"志す\",\n        \"本性\",\n        \"格付け\",\n        \"ランディ\",\n        \"1845\",\n        \"スタンフォード\",\n        \"BLUE\",\n        \"リンダ\",\n        \"加担\",\n        \"国文\",\n        \"扶桑\",\n        \"系外\",\n        \"豆腐\",\n        \"軍部\",\n        \"ジュラ\",\n        \"AE\",\n        \"Hist\",\n        \"ケプラー\",\n        \"美咲\",\n        \"##cess\",\n        \"##itz\",\n        \"##ume\",\n        \"Team\",\n        \"リグ\",\n        \"レフェリー\",\n        \"巨乳\",\n        \"幼なじみ\",\n        \"田町\",\n        \"登用\",\n        \"重なる\",\n        \"頼む\",\n        \"##hr\",\n        \"フランコ\",\n        \"プリメ\",\n        \"4547366\",\n        \"Bel\",\n        \"ad\",\n        \"ねえ\",\n        \"狂気\",\n        \"番長\",\n        \"盗ま\",\n        \"裏腹\",\n        \"音節\",\n        \"##ムラー\",\n        \"さほど\",\n        \"コブラ\",\n        \"ハプ\",\n        \"人衆\",\n        \"和也\",\n        \"榴弾\",\n        \"親密\",\n        \"フィード\",\n        \"##ACT\",\n        \"Hy\",\n        \"デア\",\n        \"ベジ\",\n        \"一座\",\n        \"北原\",\n        \"文科\",\n        \"滅ぼさ\",\n        \"粉砕\",\n        \"臨済\",\n        \"ゼー\",\n        \"タイル\",\n        \"バント\",\n        \"モビル\",\n        \"視線\",\n        \"持ちかけ\",\n        \"##ICA\",\n        \"シンシナティ\",\n        \"Roy\",\n        \"勇敢\",\n        \"狭山\",\n        \"美里\",\n        \"贈呈\",\n        \"鴨川\",\n        \"##ga\",\n        \"##va\",\n        \"##ダンス\",\n        \"##之島\",\n        \"##歩い\",\n        \"アトム\",\n        \"申し入れ\",\n        \"ケルト\",\n        \"三越\",\n        \"博文\",\n        \"本宮\",\n        \"水木\",\n        \"簡略\",\n        \"網走\",\n        \"臭い\",\n        \"##メト\",\n        \"##マネ\",\n        \"##gy\",\n        \"コースト\",\n        \"1843\",\n        \"ヴェルディ\",\n        \"Kr\",\n        \"かさ\",\n        \"外壁\",\n        \"市外\",\n        \"日時\",\n        \"時速\",\n        \"眺め\",\n        \"芝生\",\n        \"軍令\",\n        \"172\",\n        \"007\",\n        \"ユーラシア\",\n        \"1837\",\n        \"わざと\",\n        \"三和\",\n        \"下がる\",\n        \"丸い\",\n        \"延宝\",\n        \"恵子\",\n        \"捕まえ\",\n        \"暗躍\",\n        \"柏木\",\n        \"残虐\",\n        \"##ルドー\",\n        \"フレンチ\",\n        \"レパートリー\",\n        \"FK\",\n        \"執拗\",\n        \"実母\",\n        \"飽和\",\n        \"スクラン\",\n        \"イエズス\",\n        \"アタッチメント\",\n        \"ひろみ\",\n        \"ペリ\",\n        \"リガ\",\n        \"リフレ\",\n        \"叩く\",\n        \"大当たり\",\n        \"新装\",\n        \"聖子\",\n        \"##グレード\",\n        \"1844\",\n        \"Tim\",\n        \"TIME\",\n        \"アステ\",\n        \"ペレ\",\n        \"ワイヤ\",\n        \"中南\",\n        \"童子\",\n        \"高見\",\n        \"##サール\",\n        \"##ルドバ\",\n        \"UK\",\n        \"Wr\",\n        \"そら\",\n        \"とに\",\n        \"ニャン\",\n        \"密集\",\n        \"東国\",\n        \"治癒\",\n        \"登る\",\n        \"##メド\",\n        \"##lo\",\n        \"##ブリー\",\n        \"##ゲー\",\n        \"##寄せる\",\n        \"163\",\n        \"##フスキ\",\n        \"メトロポリタン\",\n        \"気付き\",\n        \"George\",\n        \"Free\",\n        \"Land\",\n        \"よかっ\",\n        \"久慈\",\n        \"内山\",\n        \"募金\",\n        \"##ムント\",\n        \"##カライズ\",\n        \"下り線\",\n        \"のぞみ\",\n        \"下る\",\n        \"占有\",\n        \"置県\",\n        \"##んと\",\n        \"##飾り\",\n        \"211\",\n        \"##ッツィ\",\n        \"##obile\",\n        \"大腸\",\n        \"構図\",\n        \"気仙\",\n        \"音頭\",\n        \"##アリ\",\n        \"Sur\",\n        \"サプライズ\",\n        \"セクシー\",\n        \"ドロー\",\n        \"加減\",\n        \"民生\",\n        \"緯度\",\n        \"試行\",\n        \"酒田\",\n        \"##ばっ\",\n        \"ガンマ\",\n        \"コンポーネント\",\n        \"WIN\",\n        \"つう\",\n        \"ビザン\",\n        \"事柄\",\n        \"捕まっ\",\n        \"街路\",\n        \"遊牧\",\n        \"雇っ\",\n        \"##メンス\",\n        \"##FF\",\n        \"サンゴ\",\n        \"プライス\",\n        \"ハノーファー\",\n        \"ハク\",\n        \"先立ち\",\n        \"勘定\",\n        \"口腔\",\n        \"失望\",\n        \"石見\",\n        \"肉食\",\n        \"エドガー\",\n        \"スイング\",\n        \"スイート\",\n        \"##ンバラ\",\n        \"カスタマイズ\",\n        \"伸ばす\",\n        \"太一\",\n        \"村井\",\n        \"精通\",\n        \"終末\",\n        \"越谷\",\n        \"ともさ\",\n        \"引き渡さ\",\n        \"1806\",\n        \"グレゴリオ\",\n        \"TN\",\n        \"ザック\",\n        \"全焼\",\n        \"八雲\",\n        \"州間\",\n        \"林家\",\n        \"猪木\",\n        \"##レッタ\",\n        \"チューニング\",\n        \"ブランデンブルク\",\n        \"##ツィオーネ\",\n        \"とにかく\",\n        \"おろ\",\n        \"ハッ\",\n        \"千鳥\",\n        \"札所\",\n        \"桟橋\",\n        \"温厚\",\n        \"至近\",\n        \"##go\",\n        \"##ニェ\",\n        \"##ani\",\n        \"カイザー\",\n        \"Corporation\",\n        \"NDL\",\n        \"きよ\",\n        \"サニー\",\n        \"久喜\",\n        \"以東\",\n        \"台中\",\n        \"同好\",\n        \"寄港\",\n        \"新道\",\n        \"江原\",\n        \"英米\",\n        \"##PO\",\n        \"クーペ\",\n        \"しゃべり\",\n        \"セブ\",\n        \"デリー\",\n        \"ボンド\",\n        \"ミト\",\n        \"曽根\",\n        \"白馬\",\n        \"取り消し\",\n        \"Oper\",\n        \"PI\",\n        \"ケイン\",\n        \"内地\",\n        \"大家\",\n        \"宴会\",\n        \"末尾\",\n        \"萌え\",\n        \"##もる\",\n        \"ステイ\",\n        \"パーソン\",\n        \"ラファエル\",\n        \"Championship\",\n        \"コマン\",\n        \"変革\",\n        \"宿場\",\n        \"新鮮\",\n        \"月光\",\n        \"破滅\",\n        \"部活\",\n        \"打ち切ら\",\n        \"カタカナ\",\n        \"Summer\",\n        \"ソープ\",\n        \"ハビ\",\n        \"レトロ\",\n        \"先立っ\",\n        \"六甲\",\n        \"宗派\",\n        \"赤ん坊\",\n        \"過失\",\n        \"##uz\",\n        \"チャール\",\n        \"引き渡し\",\n        \"すき\",\n        \"サザ\",\n        \"令嬢\",\n        \"体積\",\n        \"分隊\",\n        \"守山\",\n        \"実効\",\n        \"松坂\",\n        \"物価\",\n        \"##返っ\",\n        \"マインド\",\n        \"##チュエ\",\n        \"##ude\",\n        \"コフ\",\n        \"真ん\",\n        \"脊髄\",\n        \"褒め\",\n        \"##ウイ\",\n        \"##すら\",\n        \"##んどん\",\n        \"##エンヌ\",\n        \"ブエノス\",\n        \"めん\",\n        \"オード\",\n        \"下山\",\n        \"佐々\",\n        \"体勢\",\n        \"国名\",\n        \"廊下\",\n        \"快く\",\n        \"戸惑\",\n        \"機首\",\n        \"アーノルド\",\n        \"エフェクト\",\n        \"サガ\",\n        \"入港\",\n        \"同郷\",\n        \"同義\",\n        \"小数\",\n        \"環礁\",\n        \"覆っ\",\n        \"諸葛\",\n        \"議院\",\n        \"酔っ\",\n        \"隠蔽\",\n        \"##サード\",\n        \"##arm\",\n        \"ウルトラマン\",\n        \"##カロライナ\",\n        \"吉祥寺\",\n        \"コソボ\",\n        \"ゼミ\",\n        \"同心\",\n        \"山上\",\n        \"群島\",\n        \"赤ちゃん\",\n        \"##cin\",\n        \"ステファ\",\n        \"ミラージュ\",\n        \"あおい\",\n        \"クリック\",\n        \"宮島\",\n        \"形質\",\n        \"掴み\",\n        \"敷か\",\n        \"製鋼\",\n        \"須藤\",\n        \"駐日\",\n        \"##ツク\",\n        \"キャリー\",\n        \"ファステ\",\n        \"コントローラ\",\n        \"争わ\",\n        \"健二\",\n        \"児島\",\n        \"別所\",\n        \"包み\",\n        \"地頭\",\n        \"拳法\",\n        \"黒澤\",\n        \"Elect\",\n        \"Wil\",\n        \"day\",\n        \"コブ\",\n        \"リンチ\",\n        \"勤労\",\n        \"大英\",\n        \"消去\",\n        \"逓信\",\n        \"長屋\",\n        \"エスパー\",\n        \"キュア\",\n        \"苦しむ\",\n        \"ヘルシンキ\",\n        \"タナ\",\n        \"レグ\",\n        \"下宿\",\n        \"前任\",\n        \"大牟田\",\n        \"悪人\",\n        \"所定\",\n        \"##ミオ\",\n        \"##ぞう\",\n        \"バレンタイン\",\n        \"コペン\",\n        \"タツ\",\n        \"幻覚\",\n        \"抑圧\",\n        \"撃つ\",\n        \"減り\",\n        \"黒部\",\n        \"##・プ\",\n        \"##ca\",\n        \"##ピラ\",\n        \"##びれ\",\n        \"バレル\",\n        \"per\",\n        \"シモ\",\n        \"パブリ\",\n        \"中途\",\n        \"垂れ\",\n        \"家出\",\n        \"山林\",\n        \"渤海\",\n        \"福原\",\n        \"願う\",\n        \"騎馬\",\n        \"##ミヤ\",\n        \"164\",\n        \"1847\",\n        \"アジト\",\n        \"Girls\",\n        \"Cry\",\n        \"DL\",\n        \"ふそう\",\n        \"ヒゲ\",\n        \"反感\",\n        \"合祀\",\n        \"啓発\",\n        \"祀っ\",\n        \"若しくは\",\n        \"##ッレ\",\n        \"##・キ\",\n        \"##放し\",\n        \"チャイルド\",\n        \"ギルバート\",\n        \"推し進\",\n        \"リマスター\",\n        \"タップ\",\n        \"ボット\",\n        \"仙人\",\n        \"山王\",\n        \"廃し\",\n        \"彩色\",\n        \"支庁\",\n        \"苦痛\",\n        \"荒野\",\n        \"血球\",\n        \"追贈\",\n        \"雇い\",\n        \"離島\",\n        \"負け越し\",\n        \"ジョヴァンニ\",\n        \"\\\"、\",\n        \"内訳\",\n        \"皐月\",\n        \"軍務\",\n        \"カーニバル\",\n        \"ファステスト\",\n        \"シム\",\n        \"値段\",\n        \"大喜\",\n        \"孵化\",\n        \"手形\",\n        \"沢東\",\n        \"渡部\",\n        \"竹下\",\n        \"##タム\",\n        \"フランチェスコ\",\n        \"真ん中\",\n        \"RB\",\n        \"ゴート\",\n        \"丸の内\",\n        \"怪力\",\n        \"捧げる\",\n        \"##イェ\",\n        \"取り出し\",\n        \"バーガー\",\n        \"1841\",\n        \"コレクター\",\n        \"##URE\",\n        \"Tre\",\n        \"アユ\",\n        \"山県\",\n        \"方位\",\n        \"破裂\",\n        \"##ole\",\n        \"365\",\n        \"##ナンシャル\",\n        \"あさひ\",\n        \"##グループ\",\n        \"Instagram\",\n        \"あかね\",\n        \"いの\",\n        \"みか\",\n        \"よん\",\n        \"トク\",\n        \"ドニ\",\n        \"官庁\",\n        \"局面\",\n        \"態勢\",\n        \"日田\",\n        \"誘発\",\n        \"##ヶ岳\",\n        \"持ち上げ\",\n        \"##ague\",\n        \"切り替える\",\n        \"トロイ\",\n        \"結びつい\",\n        \"ペルシャ\",\n        \"WWF\",\n        \"as\",\n        \"サヴォ\",\n        \"三陸\",\n        \"伝染\",\n        \"呼応\",\n        \"国教\",\n        \"水原\",\n        \"組曲\",\n        \"##ベー\",\n        \"グラハム\",\n        \"サウスカロライナ\",\n        \"he\",\n        \"びょう\",\n        \"アヴェ\",\n        \"ムード\",\n        \"小石\",\n        \"布施\",\n        \"或いは\",\n        \"##cript\",\n        \"##ユーズ\",\n        \"##xt\",\n        \"##ンチャ\",\n        \"##ーグナー\",\n        \"しょく\",\n        \"RX\",\n        \"トモ\",\n        \"名取\",\n        \"嗜好\",\n        \"戊辰\",\n        \"榊原\",\n        \"汚職\",\n        \"衆院\",\n        \"##rid\",\n        \"##マツ\",\n        \"キャッツ\",\n        \"ウィズ\",\n        \"スマッシュ\",\n        \"かぶっ\",\n        \"カブト\",\n        \"HM\",\n        \"Rom\",\n        \"しげる\",\n        \"にい\",\n        \"ひい\",\n        \"シンジ\",\n        \"伝播\",\n        \"子宮\",\n        \"挙句\",\n        \"日置\",\n        \"洋楽\",\n        \"##・ジャ\",\n        \"Ant\",\n        \"モノクロ\",\n        \"いこう\",\n        \"パティ\",\n        \"予科\",\n        \"大祭\",\n        \"気質\",\n        \"独り\",\n        \"誌上\",\n        \"謀反\",\n        \"間近\",\n        \"##ソーム\",\n        \"シャム\",\n        \"##unt\",\n        \"インデックス\",\n        \"##ボクシング\",\n        \"岩本\",\n        \"数量\",\n        \"許す\",\n        \"銘打\",\n        \"##リーノ\",\n        \"持ち出し\",\n        \"999\",\n        \"西園寺\",\n        \"KING\",\n        \"ピョ\",\n        \"ブレン\",\n        \"伏せ\",\n        \"宮沢\",\n        \"豊中\",\n        \"風力\",\n        \"魔獣\",\n        \"##太后\",\n        \"デザート\",\n        \"メイキング\",\n        \"振るわ\",\n        \"クローバー\",\n        \"ガリシア\",\n        \"und\",\n        \"イジ\",\n        \"三宮\",\n        \"古田\",\n        \"呉服\",\n        \"委嘱\",\n        \"菊地\",\n        \"陛下\",\n        \"ハーバー\",\n        \"KT\",\n        \"交替\",\n        \"小国\",\n        \"年内\",\n        \"欠い\",\n        \"海浜\",\n        \"頻発\",\n        \"##町村\",\n        \"引き取っ\",\n        \"気付か\",\n        \"収支\",\n        \"寄席\",\n        \"暖房\",\n        \"柳生\",\n        \"##ストリー\",\n        \"レオナルド\",\n        \"アレクサンドリア\",\n        \"反復\",\n        \"延岡\",\n        \"従者\",\n        \"206\",\n        \"##ドンナ\",\n        \"RADIO\",\n        \"ps\",\n        \"ナイツ\",\n        \"ヨット\",\n        \"上人\",\n        \"回生\",\n        \"根室\",\n        \"着想\",\n        \"重症\",\n        \"##tm\",\n        \"##gram\",\n        \"読み切り\",\n        \"##キンソン\",\n        \"バケ\",\n        \"バートン\",\n        \"ミナ\",\n        \"居留\",\n        \"素性\",\n        \"やっと\",\n        \"##ブラハム\",\n        \"マディソン\",\n        \"ジロ\",\n        \"代金\",\n        \"困惑\",\n        \"小谷\",\n        \"水車\",\n        \"青空\",\n        \"##加え\",\n        \"##ori\",\n        \"ブレーメン\",\n        \"パルマ\",\n        \"WOWOW\",\n        \"Sel\",\n        \"ぐち\",\n        \"エタ\",\n        \"リル\",\n        \"刻印\",\n        \"航続\",\n        \"タイタン\",\n        \"##ste\",\n        \"浴びせ\",\n        \"##tainment\",\n        \"イスタンブール\",\n        \"End\",\n        \"Wal\",\n        \"上山\",\n        \"多忙\",\n        \"帯域\",\n        \"改番\",\n        \"栄町\",\n        \"##キナ\",\n        \"プロット\",\n        \"Studio\",\n        \"mod\",\n        \"ハープ\",\n        \"今村\",\n        \"名神\",\n        \"式内\",\n        \"成形\",\n        \"殺そう\",\n        \"沢村\",\n        \"法師\",\n        \"脅し\",\n        \"プラットホーム\",\n        \"コペンハーゲン\",\n        \"Top\",\n        \"qu\",\n        \"保ち\",\n        \"敗走\",\n        \"粉末\",\n        \"藩政\",\n        \"西原\",\n        \"##リニスト\",\n        \"コンソール\",\n        \"ブラス\",\n        \"ヴァルト\",\n        \"スチュワート\",\n        \"ウイスキー\",\n        \"ノール\",\n        \"父方\",\n        \"給料\",\n        \"計上\",\n        \"間柄\",\n        \"飛ばさ\",\n        \"##シアン\",\n        \"ハロルド\",\n        \"取りやめ\",\n        \"Mad\",\n        \"パ・リーグ\",\n        \"談話\",\n        \"##ターニュ\",\n        \"1815\",\n        \"ホイット\",\n        \"FOX\",\n        \"大柄\",\n        \"思惑\",\n        \"面影\",\n        \"魅了\",\n        \"##ビオ\",\n        \"##ぶき\",\n        \"ルーフ\",\n        \"プリメーラ\",\n        \"ラーン\",\n        \"前輪\",\n        \"強襲\",\n        \"役柄\",\n        \"私有\",\n        \"被弾\",\n        \"誓う\",\n        \"長井\",\n        \"##アラ\",\n        \"オシ\",\n        \"取組\",\n        \"地味\",\n        \"当寺\",\n        \"従前\",\n        \"故意\",\n        \"晋三\",\n        \"民政\",\n        \"水沢\",\n        \"総局\",\n        \"501\",\n        \"##ヴェー\",\n        \"Jean\",\n        \"がかっ\",\n        \"キノ\",\n        \"バシ\",\n        \"ブリス\",\n        \"マスタ\",\n        \"切符\",\n        \"島村\",\n        \"弁天\",\n        \"治虫\",\n        \"添付\",\n        \"精鋭\",\n        \"##ッショ\",\n        \"##張る\",\n        \"リーマン\",\n        \"取り締\",\n        \"440\",\n        \"飛び降り\",\n        \"はじまり\",\n        \"エレクトロニクス\",\n        \"かげ\",\n        \"のぶ\",\n        \"ケロ\",\n        \"堀田\",\n        \"尊氏\",\n        \"掴ん\",\n        \"西北\",\n        \"軍政\",\n        \"退院\",\n        \"送付\",\n        \"ブルターニュ\",\n        \"目論む\",\n        \"College\",\n        \"恐ろしい\",\n        \"ひっ\",\n        \"ザル\",\n        \"ヤス\",\n        \"リキ\",\n        \"供述\",\n        \"出征\",\n        \"感知\",\n        \"散布\",\n        \"陽気\",\n        \"黒く\",\n        \"GRE\",\n        \"くう\",\n        \"富ん\",\n        \"払っ\",\n        \"捉える\",\n        \"##メディア\",\n        \"##ドックス\",\n        \"##ange\",\n        \"グラブ\",\n        \"Sports\",\n        \"Street\",\n        \"MOVIE\",\n        \"アゲ\",\n        \"手腕\",\n        \"江口\",\n        \"透過\",\n        \"限度\",\n        \"1842\",\n        \"1832\",\n        \"Book\",\n        \"同位\",\n        \"履行\",\n        \"弘文\",\n        \"成虫\",\n        \"残酷\",\n        \"##ヨウ\",\n        \"アルタ\",\n        \"サンプリング\",\n        \"370\",\n        \"グレッグ\",\n        \"チューナー\",\n        \"NDLJP\",\n        \"Center\",\n        \"ワット\",\n        \"戦況\",\n        \"気流\",\n        \"罷免\",\n        \"車輛\",\n        \"##rich\",\n        \"##ソリ\",\n        \"##ホル\",\n        \"エディンバラ\",\n        \"##アイレス\",\n        \"成り立つ\",\n        \"##weet\",\n        \"タイト\",\n        \"一向\",\n        \"柳川\",\n        \"由利\",\n        \"落札\",\n        \"試し\",\n        \"足場\",\n        \"連打\",\n        \"##ウリ\",\n        \"エト\",\n        \"ニッケル\",\n        \"同情\",\n        \"市議\",\n        \"梶原\",\n        \"秋月\",\n        \"金賞\",\n        \"##ポス\",\n        \"##AV\",\n        \"##イチ\",\n        \"##テュ\",\n        \"##ira\",\n        \"チンギス\",\n        \"ラッピング\",\n        \"リチウム\",\n        \"ロイス\",\n        \"圧勝\",\n        \"寛容\",\n        \"##PR\",\n        \"デューク\",\n        \"KS\",\n        \"Vir\",\n        \"れれ\",\n        \"タモリ\",\n        \"一杯\",\n        \"動植\",\n        \"塩素\",\n        \"怪盗\",\n        \"旧式\",\n        \"死な\",\n        \"沙織\",\n        \"清原\",\n        \"誘っ\",\n        \"##ビック\",\n        \"##テリア\",\n        \"アーバン\",\n        \"こうじ\",\n        \"##mann\",\n        \"カートリッジ\",\n        \"Av\",\n        \"ポテン\",\n        \"京橋\",\n        \"抱か\",\n        \"機長\",\n        \"羽目\",\n        \"通例\",\n        \"野原\",\n        \"サンズ\",\n        \"Si\",\n        \"te\",\n        \"ござい\",\n        \"ざい\",\n        \"化身\",\n        \"平氏\",\n        \"旧名\",\n        \"海抜\",\n        \"辰巳\",\n        \"フィッツ\",\n        \"マルセイ\",\n        \"はじめる\",\n        \"ハント\",\n        \"ムーブ\",\n        \"レベ\",\n        \"囲む\",\n        \"拒ん\",\n        \"特製\",\n        \"頭角\",\n        \"##すぐ\",\n        \"##ディック\",\n        \"取り込み\",\n        \"ジュリアン\",\n        \"ピストル\",\n        \"レギ\",\n        \"先手\",\n        \"桃子\",\n        \"浦安\",\n        \"生む\",\n        \"顔立ち\",\n        \"##システム\",\n        \"204\",\n        \"##ジェット\",\n        \"##earch\",\n        \"アンソロジー\",\n        \"有楽町\",\n        \"Home\",\n        \"ed\",\n        \"イット\",\n        \"山門\",\n        \"聖徳\",\n        \"術師\",\n        \"謹慎\",\n        \"##マド\",\n        \"##agon\",\n        \"追い詰める\",\n        \"##シェン\",\n        \"しのぶ\",\n        \"ブエノスアイレス\",\n        \"キヤ\",\n        \"下町\",\n        \"四肢\",\n        \"晒さ\",\n        \"魔道\",\n        \"##シャス\",\n        \"マクラーレン\",\n        \"LIFE\",\n        \"とどまり\",\n        \"うさぎ\",\n        \"がたい\",\n        \"ザール\",\n        \"安城\",\n        \"##・ジ\",\n        \"##ware\",\n        \"##こみ\",\n        \"290\",\n        \"ローリー\",\n        \"柔らかい\",\n        \"##・フォン・\",\n        \"全仏\",\n        \"散乱\",\n        \"疫病\",\n        \"竜巻\",\n        \"騙し\",\n        \"##レフ\",\n        \"##恵子\",\n        \"ヴィラ\",\n        \"トラスト\",\n        \"すごい\",\n        \"ラバウル\",\n        \"アロン\",\n        \"ウミ\",\n        \"ポータル\",\n        \"ラッパー\",\n        \"二階\",\n        \"団員\",\n        \"尼子\",\n        \"曾孫\",\n        \"賛否\",\n        \"足ら\",\n        \"車軸\",\n        \"##57\",\n        \"##ダック\",\n        \"フェンス\",\n        \"##ファル\",\n        \"組み込ん\",\n        \"おとな\",\n        \"Tomato\",\n        \"Kh\",\n        \"Ol\",\n        \"Vis\",\n        \"アントン\",\n        \"ゲット\",\n        \"ベオ\",\n        \"内心\",\n        \"合致\",\n        \"商科\",\n        \"異星\",\n        \"美貌\",\n        \"骨髄\",\n        \"##モフ\",\n        \"シュウ\",\n        \"グアム\",\n        \"サック\",\n        \"スギ\",\n        \"下落\",\n        \"侮辱\",\n        \"勝田\",\n        \"厳重\",\n        \"文武\",\n        \"新製\",\n        \"機嫌\",\n        \"湖南\",\n        \"長髪\",\n        \"##ning\",\n        \"##gar\",\n        \"##シュト\",\n        \"ビルド\",\n        \"ガンバ\",\n        \"##ザンヌ\",\n        \"おおさか\",\n        \"イノベーション\",\n        \"North\",\n        \"VOL\",\n        \"ナチュ\",\n        \"多量\",\n        \"渋川\",\n        \"解け\",\n        \"隆起\",\n        \"飛ばす\",\n        \"##セー\",\n        \"##ws\",\n        \"##てん\",\n        \"クラウス\",\n        \"##ida\",\n        \"追いや\",\n        \"バークレー\",\n        \"返り咲\",\n        \"分譲\",\n        \"表せる\",\n        \"チャーター\",\n        \"##ters\",\n        \"##ADE\",\n        \"スレイ\",\n        \"ハガ\",\n        \"神山\",\n        \"若宮\",\n        \"##ih\",\n        \"##カーナ\",\n        \"オルガ\",\n        \"1812\",\n        \"デーモン\",\n        \"ロータス\",\n        \"刀剣\",\n        \"加増\",\n        \"水溶\",\n        \"流路\",\n        \"浙江\",\n        \"経典\",\n        \"込み\",\n        \"##・ノ\",\n        \"##里子\",\n        \"みなす\",\n        \"Instrumental\",\n        \"きちんと\",\n        \"稼い\",\n        \"膨ら\",\n        \"軌跡\",\n        \"重心\",\n        \"防具\",\n        \"##蹴り\",\n        \"ファイアー\",\n        \"CAS\",\n        \"ブイ\",\n        \"失調\",\n        \"孫娘\",\n        \"菅野\",\n        \"誘う\",\n        \"駅員\",\n        \"##トゥー\",\n        \"White\",\n        \"インスリン\",\n        \"ナガ\",\n        \"ロッキー\",\n        \"各部\",\n        \"怪談\",\n        \"白く\",\n        \"身延\",\n        \"##付く\",\n        \"シャフト\",\n        \"1836\",\n        \"ゲイリー\",\n        \"Great\",\n        \"動植物\",\n        \"パウル\",\n        \"同線\",\n        \"急逝\",\n        \"探求\",\n        \"日出\",\n        \"本間\",\n        \"毎時\",\n        \"脇役\",\n        \"##ジスタ\",\n        \"##リアー\",\n        \"ウェポン\",\n        \"ネクスト\",\n        \"セグンダ\",\n        \"オースティン\",\n        \"アクセサリー\",\n        \"Society\",\n        \"Master\",\n        \"Rotten\",\n        \"ゴット\",\n        \"トラス\",\n        \"別称\",\n        \"向ける\",\n        \"届出\",\n        \"市町村\",\n        \"栄一\",\n        \"螺旋\",\n        \"##ple\",\n        \"##カデ\",\n        \"ニューズ\",\n        \"ターナー\",\n        \"Richard\",\n        \"ロドリゲス\",\n        \"Fer\",\n        \"HR\",\n        \"こま\",\n        \"やつ\",\n        \"バトン\",\n        \"劣勢\",\n        \"打線\",\n        \"コミカル\",\n        \"ティーン\",\n        \"##ection\",\n        \"KDDI\",\n        \"ネロ\",\n        \"ピル\",\n        \"亜美\",\n        \"安部\",\n        \"紫外\",\n        \"苦情\",\n        \"課金\",\n        \"開基\",\n        \"高津\",\n        \"##GO\",\n        \"スピリッツ\",\n        \"アラゴン\",\n        \"9784\",\n        \"##ITE\",\n        \"MAG\",\n        \"即ち\",\n        \"感度\",\n        \"懲戒\",\n        \"稼ぐ\",\n        \"切り裂\",\n        \"エント\",\n        \"ドス\",\n        \"低速\",\n        \"年数\",\n        \"惨敗\",\n        \"板垣\",\n        \"橋上\",\n        \"用心\",\n        \"規程\",\n        \"限る\",\n        \"随所\",\n        \"##メロ\",\n        \"##BE\",\n        \"##ゴビナ\",\n        \"##あわせ\",\n        \"##ティックス\",\n        \"ブラザース\",\n        \"掛け声\",\n        \"聞こえる\",\n        \"ミッチェル\",\n        \"Mal\",\n        \"受理\",\n        \"山西\",\n        \"川沿い\",\n        \"施す\",\n        \"残念\",\n        \"濡れ\",\n        \"腎臓\",\n        \"##プタ\",\n        \"##ちこ\",\n        \"アンプ\",\n        \"##チョフ\",\n        \"##ビュート\",\n        \"xx\",\n        \"塩田\",\n        \"投降\",\n        \"推挙\",\n        \"材質\",\n        \"石造\",\n        \"習志\",\n        \"蔓延\",\n        \"転勤\",\n        \"##マム\",\n        \"##ろさ\",\n        \"##テック\",\n        \"##けい\",\n        \"UFJ\",\n        \"##GBT\",\n        \"sy\",\n        \"シックス\",\n        \"分署\",\n        \"東横\",\n        \"機内\",\n        \"熟練\",\n        \"角田\",\n        \"##巻く\",\n        \"アルス\",\n        \"ATS\",\n        \"習志野\",\n        \"Cast\",\n        \"イデオ\",\n        \"参与\",\n        \"城東\",\n        \"売場\",\n        \"愛車\",\n        \"携行\",\n        \"着地\",\n        \"綺麗\",\n        \"藤堂\",\n        \"##con\",\n        \"##広島\",\n        \"##ティクス\",\n        \"##ルドルフ\",\n        \"ルーシー\",\n        \"ノウハウ\",\n        \"ゆず\",\n        \"アット\",\n        \"クウェ\",\n        \"サターン\",\n        \"右足\",\n        \"奪回\",\n        \"統率\",\n        \"遺し\",\n        \"##52\",\n        \"ファンク\",\n        \"書き換え\",\n        \"トレーラー\",\n        \"BLACK\",\n        \"Lou\",\n        \"SI\",\n        \"ダック\",\n        \"マナー\",\n        \"充填\",\n        \"球体\",\n        \"着色\",\n        \"福建\",\n        \"続投\",\n        \"親しみ\",\n        \"##フライ\",\n        \"##CD\",\n        \"##ノ島\",\n        \"##ゴット\",\n        \"一人娘\",\n        \"ハーブ\",\n        \"ゆうき\",\n        \"##ift\",\n        \"クォーター\",\n        \"ゴリ\",\n        \"亜鉛\",\n        \"低かっ\",\n        \"偏見\",\n        \"参院\",\n        \"破ら\",\n        \"終身\",\n        \"補習\",\n        \"フラツィオーネ\",\n        \"ゴルファー\",\n        \"アバター\",\n        \"FX\",\n        \"コルト\",\n        \"ピオ\",\n        \"ラズ\",\n        \"上智\",\n        \"宝島\",\n        \"実兄\",\n        \"屋号\",\n        \"智子\",\n        \"製剤\",\n        \"速やか\",\n        \"鍵盤\",\n        \"209\",\n        \"リアス\",\n        \"取扱い\",\n        \"VO\",\n        \"ab\",\n        \"su\",\n        \"イデ\",\n        \"ボナ\",\n        \"円錐\",\n        \"在り\",\n        \"転覆\",\n        \"部局\",\n        \"##イー\",\n        \"##ゴーニュ\",\n        \"カーテン\",\n        \"シンポ\",\n        \"1789\",\n        \"ぶつけ\",\n        \"わら\",\n        \"結集\",\n        \"##若松\",\n        \"マクシミ\",\n        \"会津若松\",\n        \"ひかる\",\n        \"セリ\",\n        \"再起\",\n        \"悪事\",\n        \"華麗\",\n        \"蜘蛛\",\n        \"遠江\",\n        \"チェンバ\",\n        \"落ち込ん\",\n        \"1814\",\n        \"SUN\",\n        \"nm\",\n        \"うめ\",\n        \"座敷\",\n        \"本陣\",\n        \"賞品\",\n        \"##なべ\",\n        \"クララ\",\n        \"ストー\",\n        \"ゴールキーパー\",\n        \"キロワット\",\n        \"MiG\",\n        \"いで\",\n        \"和尚\",\n        \"宮原\",\n        \"操車\",\n        \"##SA\",\n        \"やりとり\",\n        \"Year\",\n        \"エレン\",\n        \"原油\",\n        \"改易\",\n        \"菊花\",\n        \"表れ\",\n        \"##aki\",\n        \"ヒューズ\",\n        \"各務原\",\n        \"パース\",\n        \"ペガ\",\n        \"ロザ\",\n        \"土方\",\n        \"安堵\",\n        \"放課\",\n        \"日の\",\n        \"葛藤\",\n        \"遷移\",\n        \"##ージナル\",\n        \"410\",\n        \"##udio\",\n        \"突き刺\",\n        \"チャイナ\",\n        \"##モロコシ\",\n        \"下す\",\n        \"曲げ\",\n        \"武雄\",\n        \"死別\",\n        \"知覚\",\n        \"脂質\",\n        \"##ペクト\",\n        \"##zo\",\n        \"##リスタ\",\n        \"見つかり\",\n        \"問い合わせ\",\n        \"Ger\",\n        \"ごみ\",\n        \"ヤシ\",\n        \"作ろう\",\n        \"凶悪\",\n        \"水位\",\n        \"訳語\",\n        \"##YO\",\n        \"オーシャン\",\n        \"presents\",\n        \"ノルマンディー\",\n        \"フェルディナント\",\n        \"すっかり\",\n        \"エネ\",\n        \"人魚\",\n        \"切腹\",\n        \"失速\",\n        \"村落\",\n        \"開学\",\n        \"##バンド\",\n        \"リーディング\",\n        \"クライン\",\n        \"フォロー\",\n        \"カルボ\",\n        \"バンパー\",\n        \"##awa\",\n        \"きれい\",\n        \"エスカレーター\",\n        \"Gar\",\n        \"Jun\",\n        \"ちゅ\",\n        \"カビ\",\n        \"バニ\",\n        \"ペイント\",\n        \"内乱\",\n        \"嘱託\",\n        \"工具\",\n        \"握手\",\n        \"沈着\",\n        \"義父\",\n        \"順子\",\n        \"黒海\",\n        \"##ナガ\",\n        \"##ケア\",\n        \"##oth\",\n        \"きっぷ\",\n        \"420\",\n        \"Pri\",\n        \"バラン\",\n        \"対艦\",\n        \"川辺\",\n        \"悟り\",\n        \"払う\",\n        \"取り付ける\",\n        \"引き連れ\",\n        \"##ope\",\n        \"トウモロコシ\",\n        \"Tomatoes\",\n        \"Tor\",\n        \"コリンズ\",\n        \"ピーチ\",\n        \"本艦\",\n        \"筑前\",\n        \"続出\",\n        \"##ザイク\",\n        \"##掛かっ\",\n        \"カリキュ\",\n        \"マッサージ\",\n        \"Bus\",\n        \"よら\",\n        \"キレ\",\n        \"ノーマン\",\n        \"中尾\",\n        \"外す\",\n        \"要職\",\n        \"謙信\",\n        \"ステラ\",\n        \"置き換える\",\n        \"マリーンズ\",\n        \"カシ\",\n        \"両用\",\n        \"人的\",\n        \"欠番\",\n        \"船内\",\n        \"足跡\",\n        \"連なる\",\n        \"##はし\",\n        \"いっしょ\",\n        \"エアバス\",\n        \"Cat\",\n        \"ソプラノ\",\n        \"パープル\",\n        \"中絶\",\n        \"侵食\",\n        \"女房\",\n        \"幸運\",\n        \"東欧\",\n        \"森下\",\n        \"減る\",\n        \"編著\",\n        \"サーベル\",\n        \"マネージメント\",\n        \"シアン\",\n        \"蒸発\",\n        \"##BL\",\n        \"##ニングラード\",\n        \"トレイル\",\n        \"##OTO\",\n        \"IW\",\n        \"no\",\n        \"林道\",\n        \"湯沢\",\n        \"祝賀\",\n        \"訃報\",\n        \"Show\",\n        \"ケンカ\",\n        \"アイデンティティ\",\n        \"ゆみ\",\n        \"マーズ\",\n        \"ミント\",\n        \"上面\",\n        \"南山\",\n        \"放り\",\n        \"栗田\",\n        \"沈め\",\n        \"無敗\",\n        \"自決\",\n        \"裏切っ\",\n        \"財源\",\n        \"迫撃\",\n        \"隠岐\",\n        \"館長\",\n        \"##語り\",\n        \"ユニバース\",\n        \"フォーカス\",\n        \"NEO\",\n        \"ストライカー\",\n        \"Party\",\n        \"づける\",\n        \"ドナウ\",\n        \"傀儡\",\n        \"分室\",\n        \"止まる\",\n        \"無機\",\n        \"返却\",\n        \"通年\",\n        \"頭痛\",\n        \"##istr\",\n        \"コウモリ\",\n        \"ひどく\",\n        \"鳴き声\",\n        \"Ba\",\n        \"GOLD\",\n        \"包ん\",\n        \"大まか\",\n        \"念仏\",\n        \"異形\",\n        \"脚部\",\n        \"##ツジ\",\n        \"ブライト\",\n        \"打ち破\",\n        \"Arm\",\n        \"エミー\",\n        \"リターン\",\n        \"ロワ\",\n        \"欠損\",\n        \"花粉\",\n        \"ディヴィ\",\n        \"立ち上げる\",\n        \"巻き込ん\",\n        \"バラエティー\",\n        \"XP\",\n        \"やろう\",\n        \"助力\",\n        \"叩い\",\n        \"完備\",\n        \"宗像\",\n        \"弾く\",\n        \"抜か\",\n        \"持て\",\n        \"ウォーレン\",\n        \"ボア\",\n        \"士気\",\n        \"県会\",\n        \"ライカ\",\n        \"##atic\",\n        \"シリコン\",\n        \"Over\",\n        \"West\",\n        \"テンプル\",\n        \"一途\",\n        \"便所\",\n        \"商務\",\n        \"悪夢\",\n        \"戦功\",\n        \"曳航\",\n        \"確執\",\n        \"##ビリティ\",\n        \"1818\",\n        \"メカニック\",\n        \"PE\",\n        \"ゲッター\",\n        \"三輪\",\n        \"就き\",\n        \"岩槻\",\n        \"微小\",\n        \"牽制\",\n        \"現す\",\n        \"由良\",\n        \"##クティ\",\n        \"##届け\",\n        \"##フォーマー\",\n        \"##iano\",\n        \"リミテッド\",\n        \"DDT\",\n        \"ペイン\",\n        \"俳人\",\n        \"帝京\",\n        \"序列\",\n        \"戦没\",\n        \"正人\",\n        \"正史\",\n        \"法規\",\n        \"1839\",\n        \"##angu\",\n        \"book\",\n        \"保た\",\n        \"多角\",\n        \"忠告\",\n        \"的確\",\n        \"##gin\",\n        \"ブルゴーニュ\",\n        \"パーカ\",\n        \"##ova\",\n        \"ESP\",\n        \"たき\",\n        \"コモ\",\n        \"ビオ\",\n        \"ルック\",\n        \"困窮\",\n        \"給水\",\n        \"総武\",\n        \"ローゼン\",\n        \"ごとく\",\n        \"ニーダー\",\n        \"出入口\",\n        \"とらえ\",\n        \"ふつ\",\n        \"バーンズ\",\n        \"光る\",\n        \"吹く\",\n        \"松川\",\n        \"検挙\",\n        \"重慶\",\n        \"隣国\",\n        \"##ures\",\n        \"##irc\",\n        \"Leg\",\n        \"Island\",\n        \"執り行わ\",\n        \"Ult\",\n        \"アスト\",\n        \"モニュ\",\n        \"亀裂\",\n        \"光年\",\n        \"溢れ\",\n        \"牛肉\",\n        \"貫い\",\n        \"アルフォンソ\",\n        \"クラスター\",\n        \"##シュート\",\n        \"##ヴィッツ\",\n        \"ユーリ\",\n        \"庶子\",\n        \"書体\",\n        \"空い\",\n        \"軍医\",\n        \"##ムナ\",\n        \"##払っ\",\n        \"ロックン\",\n        \"スルタン\",\n        \"##ガイモ\",\n        \"Ben\",\n        \"Just\",\n        \"つね\",\n        \"ウシ\",\n        \"ニス\",\n        \"ムサ\",\n        \"ロム\",\n        \"創出\",\n        \"安房\",\n        \"独奏\",\n        \"登っ\",\n        \"貸与\",\n        \"遺骨\",\n        \"##わう\",\n        \"引き抜\",\n        \"読み上げ\",\n        \"1835\",\n        \"##AKA\",\n        \"##落とさ\",\n        \"ソユーズ\",\n        \"ビアン\",\n        \"ロク\",\n        \"不定\",\n        \"届ける\",\n        \"悪霊\",\n        \"服役\",\n        \"鍋島\",\n        \"##・フェ\",\n        \"立ち会\",\n        \"1803\",\n        \"##obe\",\n        \"モニタ\",\n        \"シンポジウム\",\n        \"キティ\",\n        \"ペンタ\",\n        \"マドンナ\",\n        \"単装\",\n        \"変電\",\n        \"学説\",\n        \"常用\",\n        \"成瀬\",\n        \"春風\",\n        \"正門\",\n        \"縦断\",\n        \"##(\\\"\",\n        \"##レーナ\",\n        \"Stand\",\n        \"バングラ\",\n        \"rad\",\n        \"パプ\",\n        \"##ユー\",\n        \"##盛り\",\n        \"AND\",\n        \"ボリス\",\n        \"真一\",\n        \"被疑\",\n        \"##・トゥ\",\n        \"1801\",\n        \"ベイカー\",\n        \"1831\",\n        \"カリキュラム\",\n        \"こめ\",\n        \"ベロ\",\n        \"写し\",\n        \"描画\",\n        \"返事\",\n        \"##ペー\",\n        \"キャメ\",\n        \"##ンチェ\",\n        \"オオカミ\",\n        \"Network\",\n        \"PHP\",\n        \"FD\",\n        \"RED\",\n        \"エリオット\",\n        \"ロッカー\",\n        \"予知\",\n        \"小路\",\n        \"悪かっ\",\n        \"書状\",\n        \"##och\",\n        \"173\",\n        \"##ランドル\",\n        \"ランチ\",\n        \"すずき\",\n        \"Wom\",\n        \"アスタ\",\n        \"トゲ\",\n        \"ドキ\",\n        \"ロド\",\n        \"埋立\",\n        \"容積\",\n        \"架線\",\n        \"煉瓦\",\n        \"現世\",\n        \"触発\",\n        \"関白\",\n        \"電極\",\n        \"##UG\",\n        \"##ディスク\",\n        \"##itar\",\n        \"Muse\",\n        \"South\",\n        \"ネバダ\",\n        \"ホステル\",\n        \"彼方\",\n        \"相良\",\n        \"齋藤\",\n        \"##isch\",\n        \"ちゃんと\",\n        \"スピリット\",\n        \"HDD\",\n        \"スス\",\n        \"ビラ\",\n        \"ヨコ\",\n        \"分光\",\n        \"利害\",\n        \"島民\",\n        \"特科\",\n        \"童謡\",\n        \"縦貫\",\n        \"須磨\",\n        \"ジョーク\",\n        \"001\",\n        \"Inf\",\n        \"ドレスデン\",\n        \"950\",\n        \"QB\",\n        \"Tu\",\n        \"up\",\n        \"えび\",\n        \"ラル\",\n        \"即時\",\n        \"振舞\",\n        \"細分\",\n        \"##マイト\",\n        \"ディストリ\",\n        \"##ヴィング\",\n        \"トランスフォーマー\",\n        \"クルーザー\",\n        \"マキノ\",\n        \"中津川\",\n        \"MK\",\n        \"ロリ\",\n        \"変光\",\n        \"御堂\",\n        \"心筋\",\n        \"文人\",\n        \"##サイユ\",\n        \"東大阪\",\n        \"MIX\",\n        \"アングル\",\n        \"カブス\",\n        \"ワラ\",\n        \"原典\",\n        \"拓也\",\n        \"直系\",\n        \"##リケ\",\n        \"##amil\",\n        \"##ISE\",\n        \"Cre\",\n        \"Happ\",\n        \"励まし\",\n        \"平民\",\n        \"掛ける\",\n        \"欠如\",\n        \"生家\",\n        \"病棟\",\n        \"習い\",\n        \"能代\",\n        \"##ダール\",\n        \"コンコース\",\n        \"サンライズ\",\n        \"Mix\",\n        \"丸亀\",\n        \"儒学\",\n        \"六十\",\n        \"内村\",\n        \"凄まじ\",\n        \"素早\",\n        \"すみれ\",\n        \"##イングランド\",\n        \"RAM\",\n        \"但馬\",\n        \"停電\",\n        \"増援\",\n        \"昇叙\",\n        \"森永\",\n        \"視認\",\n        \"##マイオス\",\n        \"##ロギー\",\n        \"チョーク\",\n        \"##・ヘルツェ\",\n        \"マルセイユ\",\n        \"公方\",\n        \"本庁\",\n        \"遭う\",\n        \"高井\",\n        \"呼び出さ\",\n        \"OFF\",\n        \"General\",\n        \"うかがえる\",\n        \"取水\",\n        \"市政\",\n        \"恩師\",\n        \"直立\",\n        \"進駐\",\n        \"高浜\",\n        \"##キスト\",\n        \"##ティマ\",\n        \"##AYA\",\n        \"かわいい\",\n        \"どんどん\",\n        \"南岸\",\n        \"操ら\",\n        \"本営\",\n        \"##86\",\n        \"##戻さ\",\n        \"スタッド\",\n        \"##ニアム\",\n        \"ニューイングランド\",\n        \"ダイバー\",\n        \"##ACH\",\n        \"WS\",\n        \"アニー\",\n        \"優れる\",\n        \"円滑\",\n        \"県営\",\n        \"##クトン\",\n        \"スマホ\",\n        \"セレモニー\",\n        \"Pan\",\n        \"大日\",\n        \"応急\",\n        \"正宗\",\n        \"芳香\",\n        \"長大\",\n        \"開墾\",\n        \"##読み\",\n        \"タイラー\",\n        \"引き下げ\",\n        \"メディカル\",\n        \"##ritic\",\n        \"ボスニア・ヘルツェ\",\n        \"ゴア\",\n        \"南宋\",\n        \"常駐\",\n        \"東野\",\n        \"脚色\",\n        \"飯島\",\n        \"ボスニア・ヘルツェゴビナ\",\n        \"マッケ\",\n        \"ミラン\",\n        \"ラミ\",\n        \"ワーズ\",\n        \"ワーグナー\",\n        \"欠かせ\",\n        \"済ま\",\n        \"落城\",\n        \"詫び\",\n        \"長き\",\n        \"面する\",\n        \"麻呂\",\n        \"##スラー\",\n        \"207\",\n        \"ウィッチ\",\n        \"気づく\",\n        \"明日香\",\n        \"イデオロギー\",\n        \"エヴァン\",\n        \"モザイク\",\n        \"浄水\",\n        \"病弱\",\n        \"県境\",\n        \"コロコロ\",\n        \"AX\",\n        \"グラー\",\n        \"チルド\",\n        \"ナゴ\",\n        \"ブリスト\",\n        \"ワンダ\",\n        \"大晦\",\n        \"媒介\",\n        \"専売\",\n        \"明白\",\n        \"濃厚\",\n        \"神代\",\n        \"諸語\",\n        \"電線\",\n        \"館山\",\n        \"##タカ\",\n        \"##キュリー\",\n        \"##ther\",\n        \"ラテンアメリカ\",\n        \"##ather\",\n        \"Green\",\n        \"あわ\",\n        \"カリー\",\n        \"南洋\",\n        \"回す\",\n        \"境遇\",\n        \"溝口\",\n        \"##トリス\",\n        \"##どき\",\n        \"off\",\n        \"コントローラー\",\n        \"##っとり\",\n        \"振り回さ\",\n        \"モニュメント\",\n        \"720\",\n        \"HMS\",\n        \"ほり\",\n        \"カージナル\",\n        \"セオ\",\n        \"両足\",\n        \"撃っ\",\n        \"瞬時\",\n        \"連日\",\n        \"##伝え\",\n        \"大晦日\",\n        \"しつ\",\n        \"つぼ\",\n        \"ナイル\",\n        \"効か\",\n        \"抗原\",\n        \"聖歌\",\n        \"要約\",\n        \"講道\",\n        \"踊っ\",\n        \"##ヒム\",\n        \"##そば\",\n        \"##eck\",\n        \"カロリー\",\n        \"ヒドロキシ\",\n        \"じろう\",\n        \"入城\",\n        \"千住\",\n        \"否決\",\n        \"平ら\",\n        \"那賀\",\n        \"##ニヤ\",\n        \"##歩き\",\n        \"ミニチュア\",\n        \"ドーピング\",\n        \"スライム\",\n        \"class\",\n        \"Engine\",\n        \"せっ\",\n        \"アストラ\",\n        \"ボロー\",\n        \"公主\",\n        \"島嶼\",\n        \"技量\",\n        \"斡旋\",\n        \"欠く\",\n        \"渡来\",\n        \"疾病\",\n        \"神仏\",\n        \"習っ\",\n        \"肩書き\",\n        \"説く\",\n        \"踏む\",\n        \"首謀\",\n        \"##バシー\",\n        \"キングダム\",\n        \"御殿場\",\n        \"GDP\",\n        \"フランドル\",\n        \"公約\",\n        \"巨体\",\n        \"##ージャー\",\n        \"ドローン\",\n        \"DP\",\n        \"Nat\",\n        \"gl\",\n        \"エヌ\",\n        \"ザ・\",\n        \"ハルト\",\n        \"聴衆\",\n        \"蕎麦\",\n        \"辛い\",\n        \"阿賀\",\n        \"1810\",\n        \"アーロン\",\n        \"460\",\n        \"エッ\",\n        \"前世\",\n        \"山岡\",\n        \"サイパン\",\n        \"Hal\",\n        \"もみ\",\n        \"ドク\",\n        \"ピリ\",\n        \"床下\",\n        \"手榴\",\n        \"植田\",\n        \"薨去\",\n        \"鋭く\",\n        \"##ris\",\n        \"##ids\",\n        \"モンテネ\",\n        \"メソッド\",\n        \"ダイアナ\",\n        \"スネーク\",\n        \"かご\",\n        \"くわ\",\n        \"井川\",\n        \"如何\",\n        \"実名\",\n        \"殴ら\",\n        \"真由\",\n        \"頭上\",\n        \"174\",\n        \"1833\",\n        \"アミューズメント\",\n        \"Joseph\",\n        \"FESTIVAL\",\n        \"ヒスパ\",\n        \"ペロ\",\n        \"ルーン\",\n        \"側線\",\n        \"勧請\",\n        \"掛かる\",\n        \"水軍\",\n        \"甲冑\",\n        \"責め\",\n        \"超越\",\n        \"震源\",\n        \"まみ\",\n        \"サキ\",\n        \"ジングル\",\n        \"文春\",\n        \"松崎\",\n        \"片道\",\n        \"アイド\",\n        \"こうえん\",\n        \"ハイチ\",\n        \"##aku\",\n        \"売り場\",\n        \"づらい\",\n        \"ウーマン\",\n        \"サロ\",\n        \"ナマ\",\n        \"備後\",\n        \"吸気\",\n        \"埋める\",\n        \"矢作\",\n        \"蓄え\",\n        \"見捨て\",\n        \"##net\",\n        \"##でる\",\n        \"ブリストル\",\n        \"\\\"」\",\n        \"Bell\",\n        \"ババ\",\n        \"二条\",\n        \"偶数\",\n        \"化成\",\n        \"恒久\",\n        \"旺盛\",\n        \"注ぎ\",\n        \"着る\",\n        \"鮮やか\",\n        \"##ジスト\",\n        \"##of\",\n        \"スクリュー\",\n        \"ちゃっ\",\n        \"##グラフィー\",\n        \"グラフィックス\",\n        \"CAT\",\n        \"Mont\",\n        \"あべ\",\n        \"セ・リーグ\",\n        \"ペーター\",\n        \"大金\",\n        \"嫌気\",\n        \"阻ま\",\n        \"風邪\",\n        \"ヴァンパイア\",\n        \"弾き語り\",\n        \"ひたすら\",\n        \"バーナード\",\n        \"プロポーズ\",\n        \"ピョートル\",\n        \"Rail\",\n        \"ギニア\",\n        \"生やし\",\n        \"矢島\",\n        \"矢田\",\n        \"購買\",\n        \"##ヒド\",\n        \"##強く\",\n        \"##割り\",\n        \"##ティション\",\n        \"ヴェン\",\n        \"アダムズ\",\n        \"Div\",\n        \"まどか\",\n        \"ザム\",\n        \"名阪\",\n        \"後頭\",\n        \"沢山\",\n        \"火葬\",\n        \"空輸\",\n        \"観賞\",\n        \"説話\",\n        \"##・ブラ\",\n        \"##ナリー\",\n        \"##ッジョ\",\n        \"オペレーター\",\n        \"Hall\",\n        \"ロキ\",\n        \"診察\",\n        \"##ique\",\n        \"ICOCA\",\n        \"Metac\",\n        \"カージナルス\",\n        \"モレ\",\n        \"居合わせ\",\n        \"新選\",\n        \"綴っ\",\n        \"酢酸\",\n        \"##フリー\",\n        \"##gan\",\n        \"##ote\",\n        \"##ネーヴ\",\n        \"オマージュ\",\n        \"Hel\",\n        \"Ka\",\n        \"ガッツ\",\n        \"サティ\",\n        \"プトレ\",\n        \"一変\",\n        \"動け\",\n        \"台枠\",\n        \"大帝\",\n        \"白黒\",\n        \"相生\",\n        \"##本町\",\n        \"引き受ける\",\n        \"ダイエット\",\n        \"ビルディング\",\n        \"プラトン\",\n        \"LR\",\n        \"テトラ\",\n        \"トカゲ\",\n        \"今夜\",\n        \"民進\",\n        \"深谷\",\n        \"靖国\",\n        \"鮮明\",\n        \"##エロ\",\n        \"##バイン\",\n        \"##バーツ\",\n        \"シャア\",\n        \"じけん\",\n        \"ノス\",\n        \"光沢\",\n        \"原町\",\n        \"執る\",\n        \"岩見\",\n        \"弘化\",\n        \"是非\",\n        \"気配\",\n        \"煙草\",\n        \"義兄\",\n        \"衝動\",\n        \"長嶋\",\n        \"兼ね備\",\n        \"Angel\",\n        \"モンテネグロ\",\n        \")\\\"\",\n        \"Bur\",\n        \"クリン\",\n        \"ナックル\",\n        \"三枝\",\n        \"会戦\",\n        \"放水\",\n        \"森川\",\n        \"草案\",\n        \"身の\",\n        \"関門\",\n        \"##・ゴ\",\n        \"##TE\",\n        \"##ji\",\n        \"##ベックス\",\n        \"##89\",\n        \"##なみ\",\n        \"生まれ育\",\n        \"シュミット\",\n        \"ファイバー\",\n        \"スプレー\",\n        \"二階堂\",\n        \"まじ\",\n        \"カイル\",\n        \"ハーツ\",\n        \"修飾\",\n        \"服従\",\n        \"黒沢\",\n        \"黒字\",\n        \"引き離\",\n        \"ステルス\",\n        \"バーミ\",\n        \"北岸\",\n        \"新約\",\n        \"純一\",\n        \"軍備\",\n        \"野郎\",\n        \"##ワル\",\n        \"##ブルック\",\n        \"ルイージ\",\n        \"シューズ\",\n        \"春日部\",\n        \"##ウォーキー\",\n        \"バングラデシュ\",\n        \"サカ\",\n        \"プファ\",\n        \"メタン\",\n        \"リセット\",\n        \"前川\",\n        \"南緯\",\n        \"客演\",\n        \"巻末\",\n        \"花弁\",\n        \"西国\",\n        \"##レッシブ\",\n        \"##ule\",\n        \"思い込ん\",\n        \"ニュート\",\n        \"ひどい\",\n        \"Battle\",\n        \"Band\",\n        \"大軍\",\n        \"大學\",\n        \"強風\",\n        \"本所\",\n        \"深度\",\n        \"生える\",\n        \"純子\",\n        \"羽毛\",\n        \"装っ\",\n        \"農薬\",\n        \"錯誤\",\n        \"##itch\",\n        \"打ち明け\",\n        \"フラグ\",\n        \"大和田\",\n        \"気仙沼\",\n        \"はり\",\n        \"むす\",\n        \"ゆか\",\n        \"シク\",\n        \"デンバー\",\n        \"公然\",\n        \"名手\",\n        \"怒る\",\n        \"星団\",\n        \"歌集\",\n        \"稲田\",\n        \"終止\",\n        \"総集\",\n        \"##HER\",\n        \"##リスク\",\n        \"くるみ\",\n        \"振り付け\",\n        \"ぐら\",\n        \"なが\",\n        \"イク\",\n        \"人為\",\n        \"同胞\",\n        \"士族\",\n        \"画素\",\n        \"防い\",\n        \"頑丈\",\n        \"##チックス\",\n        \"##スタイル\",\n        \"イベリア\",\n        \"フリッツ\",\n        \"オカルト\",\n        \"##ECTION\",\n        \"てれび\",\n        \"Kiss\",\n        \"イネ\",\n        \"リニア\",\n        \"ルミ\",\n        \"外傷\",\n        \"天照\",\n        \"封建\",\n        \"崩落\",\n        \"柏崎\",\n        \"課せ\",\n        \"随一\",\n        \"##キリ\",\n        \"##かみ\",\n        \"##ディション\",\n        \"##フィル\",\n        \"プラモデル\",\n        \"802\",\n        \"Real\",\n        \"##UST\",\n        \"結びつき\",\n        \"エクア\",\n        \"MSX\",\n        \"かたわら\",\n        \"デラウェア\",\n        \"Metacritic\",\n        \"つぐ\",\n        \"ボギー\",\n        \"哲哉\",\n        \"速球\",\n        \"遠野\",\n        \"金城\",\n        \"長久\",\n        \"##ja\",\n        \"##ZA\",\n        \"##にち\",\n        \"呼び寄せ\",\n        \"Album\",\n        \"かる\",\n        \"安曇\",\n        \"死闘\",\n        \"洋上\",\n        \"諫早\",\n        \"雌雄\",\n        \"##かれ\",\n        \"##びん\",\n        \"プラネット\",\n        \"##立てる\",\n        \"ミッドナイト\",\n        \"ミルウォーキー\",\n        \"きく\",\n        \"トレン\",\n        \"ハジ\",\n        \"メテ\",\n        \"図形\",\n        \"発布\",\n        \"白血\",\n        \"ライム\",\n        \"シェーン\",\n        \"チューリッヒ\",\n        \"Season\",\n        \"Brow\",\n        \"なめ\",\n        \"井口\",\n        \"動的\",\n        \"右肩\",\n        \"名曲\",\n        \"国債\",\n        \"居候\",\n        \"新発\",\n        \"深める\",\n        \"送迎\",\n        \"陶芸\",\n        \"##開き\",\n        \"ウェス\",\n        \"積み重\",\n        \"ベネディ\",\n        \"ゴリラ\",\n        \"下段\",\n        \"何事\",\n        \"傲慢\",\n        \"南陽\",\n        \"埋蔵\",\n        \"懐疑\",\n        \"満塁\",\n        \"譲ら\",\n        \"造っ\",\n        \"##モル\",\n        \"##cy\",\n        \"プライバシー\",\n        \"UM\",\n        \"htm\",\n        \"おび\",\n        \"シダ\",\n        \"ハレ\",\n        \"リョウ\",\n        \"接点\",\n        \"済む\",\n        \"転戦\",\n        \"##ワンダ\",\n        \"##zy\",\n        \"スタイン\",\n        \"Wik\",\n        \"ind\",\n        \"ダール\",\n        \"ヘイズ\",\n        \"マトリ\",\n        \"伽藍\",\n        \"安楽\",\n        \"装束\",\n        \"述懐\",\n        \"##BF\",\n        \"レイズ\",\n        \"NNN\",\n        \"エコー\",\n        \"レスター\",\n        \"不変\",\n        \"叙事\",\n        \"名護\",\n        \"敵機\",\n        \"##ベツ\",\n        \"テレサ\",\n        \"オリバー\",\n        \"入れ替わる\",\n        \"ネクタイ\",\n        \"Key\",\n        \"カカ\",\n        \"不意\",\n        \"不服\",\n        \"亜紀\",\n        \"分水\",\n        \"前漢\",\n        \"因み\",\n        \"安く\",\n        \"柳沢\",\n        \"模範\",\n        \"目立た\",\n        \"##ナリ\",\n        \"##ロク\",\n        \"##ford\",\n        \"1838\",\n        \"LV\",\n        \"カッ\",\n        \"ヘアー\",\n        \"備わっ\",\n        \"四谷\",\n        \"巡業\",\n        \"蔵人\",\n        \"##・シャ\",\n        \"##ローナ\",\n        \"ビスマルク\",\n        \"POWER\",\n        \"ぱん\",\n        \"偽名\",\n        \"応える\",\n        \"日和\",\n        \"朝刊\",\n        \"紙面\",\n        \"綾瀬\",\n        \"1821\",\n        \"かわし\",\n        \"コメディアン\",\n        \"フェリペ\",\n        \"アセン\",\n        \"ピザ\",\n        \"リリ\",\n        \"併記\",\n        \"優遇\",\n        \"北島\",\n        \"大館\",\n        \"学研\",\n        \"干拓\",\n        \"心情\",\n        \"軽便\",\n        \"シュガー\",\n        \"フリート\",\n        \"出塁\",\n        \"定額\",\n        \"拾わ\",\n        \"溶媒\",\n        \"真人\",\n        \"硬い\",\n        \"開示\",\n        \"##カード\",\n        \"212\",\n        \"アップロード\",\n        \"##チュウ\",\n        \"ACT\",\n        \"EXILE\",\n        \"メタリック\",\n        \"##っぽん\",\n        \"「-\",\n        \"テンプ\",\n        \"ロレン\",\n        \"大理\",\n        \"定例\",\n        \"意地\",\n        \"##PA\",\n        \"235\",\n        \"##ami\",\n        \"ソーラー\",\n        \"RKB\",\n        \"クウェート\",\n        \"マゼ\",\n        \"ヤギ\",\n        \"呈する\",\n        \"変奏\",\n        \"慶喜\",\n        \"板倉\",\n        \"腐食\",\n        \"高裁\",\n        \"##はら\",\n        \"##iness\",\n        \"1790\",\n        \"747\",\n        \"リバース\",\n        \"ラウンジ\",\n        \"くさい\",\n        \"カド\",\n        \"ピレ\",\n        \"マム\",\n        \"地検\",\n        \"挫折\",\n        \"紅茶\",\n        \"##アール\",\n        \"##ガルド\",\n        \"##シュヴァ\",\n        \"スタック\",\n        \"アイゼン\",\n        \"##チュード\",\n        \"ワーキング\",\n        \"AIR\",\n        \"Way\",\n        \"カヤ\",\n        \"リーク\",\n        \"宮司\",\n        \"擬似\",\n        \"新進\",\n        \"配送\",\n        \"##bps\",\n        \"パラレル\",\n        \"HY\",\n        \"hp\",\n        \"園田\",\n        \"左足\",\n        \"明星\",\n        \"神名\",\n        \"篠山\",\n        \"願望\",\n        \"駆除\",\n        \"##・アン\",\n        \"チャド\",\n        \"フィルタ\",\n        \"マーカー\",\n        \"もとづ\",\n        \"プーチン\",\n        \"DI\",\n        \"min\",\n        \"千尋\",\n        \"激闘\",\n        \"焼く\",\n        \"高円\",\n        \"ことごと\",\n        \"なんば\",\n        \"キックボクシング\",\n        \"ミステリ\",\n        \"マクシミリアン\",\n        \"ことごとく\",\n        \"たなか\",\n        \"壬生\",\n        \"客席\",\n        \"暗示\",\n        \"欠ける\",\n        \"溜め\",\n        \"組員\",\n        \"ジャガイモ\",\n        \"ストーカー\",\n        \"##hem\",\n        \"510\",\n        \"マジカル\",\n        \"737\",\n        \"MOD\",\n        \"mph\",\n        \"げき\",\n        \"ルリ\",\n        \"一同\",\n        \"属州\",\n        \"履い\",\n        \"東村\",\n        \"酵母\",\n        \"##63\",\n        \"立ち並\",\n        \"立ち入り\",\n        \"##ista\",\n        \"見守る\",\n        \"Games\",\n        \"デスク\",\n        \"トラム\",\n        \"大邱\",\n        \"教訓\",\n        \"武芸\",\n        \"海部\",\n        \"香織\",\n        \"##バスティ\",\n        \"##ぬき\",\n        \"ジュネーヴ\",\n        \"##aph\",\n        \"フレンズ\",\n        \"HK\",\n        \"IA\",\n        \"名勝\",\n        \"楽しく\",\n        \"気管\",\n        \"要衝\",\n        \"##シタ\",\n        \"##へい\",\n        \"##ぷり\",\n        \"##ティーナ\",\n        \"アンゴラ\",\n        \"##unic\",\n        \"使い分け\",\n        \"##ヴォン\",\n        \"ヴァイオリニスト\",\n        \"キク\",\n        \"シエラ\",\n        \"ロジ\",\n        \"低床\",\n        \"創り\",\n        \"新種\",\n        \"現生\",\n        \"生死\",\n        \"真夏\",\n        \"逸脱\",\n        \"##ポラ\",\n        \"##ゾー\",\n        \"なおかつ\",\n        \"1804\",\n        \"リスボン\",\n        \"パートナーシップ\",\n        \"##プライン\",\n        \"BEAT\",\n        \"music\",\n        \"ケガ\",\n        \"タオル\",\n        \"叱責\",\n        \"変種\",\n        \"宗谷\",\n        \"密輸\",\n        \"旅立つ\",\n        \"磯部\",\n        \"##出せ\",\n        \"##ヶ島\",\n        \"起こら\",\n        \"##ARE\",\n        \"##ガスカル\",\n        \"Rac\",\n        \"変則\",\n        \"屈折\",\n        \"館内\",\n        \"##87\",\n        \"入れ替わり\",\n        \"フェリックス\",\n        \"Road\",\n        \"元治\",\n        \"受諾\",\n        \"口論\",\n        \"年月\",\n        \"春樹\",\n        \"棋院\",\n        \"混沌\",\n        \"湯浅\",\n        \"西新\",\n        \"遠州\",\n        \"##高田\",\n        \"##津子\",\n        \"マーキュリー\",\n        \"もとより\",\n        \"モンロー\",\n        \"クイック\",\n        \"フェンダー\",\n        \"セナ\",\n        \"マギ\",\n        \"千島\",\n        \"欲し\",\n        \"氷川\",\n        \"王太子\",\n        \"調味\",\n        \"##テレス\",\n        \"ローレン\",\n        \"カリフ\",\n        \"520\",\n        \"マダガスカル\",\n        \"プトレマイオス\",\n        \"ひる\",\n        \"セロ\",\n        \"堪能\",\n        \"御影\",\n        \"挙動\",\n        \"暮れ\",\n        \"禁煙\",\n        \"空調\",\n        \"船首\",\n        \"高位\",\n        \"##eration\",\n        \"##テルン\",\n        \"Die\",\n        \"位階\",\n        \"佐川\",\n        \"喋り\",\n        \"大隅\",\n        \"年々\",\n        \"本誌\",\n        \"白金\",\n        \"社民\",\n        \"細野\",\n        \"##まつり\",\n        \"SPORTS\",\n        \"res\",\n        \"宮前\",\n        \"年中\",\n        \"瑠璃\",\n        \"要人\",\n        \"##イッチ\",\n        \"シュト\",\n        \"迎え入れ\",\n        \"コンビネーション\",\n        \"##ヴォル\",\n        \"あすか\",\n        \"ワトソン\",\n        \"House\",\n        \"バイン\",\n        \"原文\",\n        \"基質\",\n        \"完売\",\n        \"幻影\",\n        \"村松\",\n        \"義昭\",\n        \"スタント\",\n        \"クリム\",\n        \"たまご\",\n        \"ポテンシャル\",\n        \"Jul\",\n        \"SIM\",\n        \"アホ\",\n        \"デイズ\",\n        \"内政\",\n        \"改心\",\n        \"敬愛\",\n        \"有望\",\n        \"鹵獲\",\n        \"##62\",\n        \"ホルダー\",\n        \"LG\",\n        \"だれ\",\n        \"下方\",\n        \"倣っ\",\n        \"心中\",\n        \"放題\",\n        \"桜田\",\n        \"満期\",\n        \"白紙\",\n        \"群衆\",\n        \"##らせ\",\n        \"ハイランド\",\n        \"トリビュート\",\n        \"Fest\",\n        \"びわ\",\n        \"エメ\",\n        \"上村\",\n        \"件数\",\n        \"哲郎\",\n        \"技研\",\n        \"独学\",\n        \"甲殻\",\n        \"試料\",\n        \"遠方\",\n        \"ジュエル\",\n        \"ブレイド\",\n        \"Entertainment\",\n        \"pp\",\n        \"ダイス\",\n        \"外れる\",\n        \"文言\",\n        \"港町\",\n        \"滅多\",\n        \"除名\",\n        \"障壁\",\n        \"風速\",\n        \"##ザイ\",\n        \"##ニョン\",\n        \"##ケープ\",\n        \"1825\",\n        \"なで\",\n        \"キール\",\n        \"ポーター\",\n        \"上官\",\n        \"五男\",\n        \"伊吹\",\n        \"増補\",\n        \"専ら\",\n        \"投合\",\n        \"振替\",\n        \"採算\",\n        \"漁獲\",\n        \"胎児\",\n        \"衣料\",\n        \"衰弱\",\n        \"2024\",\n        \"サンリオ\",\n        \"ルーレット\",\n        \"##vex\",\n        \"セグメント\",\n        \"ジブラル\",\n        \"新発田\",\n        \"ハッシュ\",\n        \"ミゲル\",\n        \"一日\",\n        \"小字\",\n        \"弓道\",\n        \"快挙\",\n        \"長兄\",\n        \"##Pa\",\n        \"ダイヤル\",\n        \"1834\",\n        \"##ootball\",\n        \"かも\",\n        \"ロジャース\",\n        \"新版\",\n        \"案件\",\n        \"清国\",\n        \"課さ\",\n        \"中継ぎ\",\n        \"1819\",\n        \"ナンシー\",\n        \"Lv\",\n        \"WHO\",\n        \"ぶち\",\n        \"アノ\",\n        \"エリカ\",\n        \"グリン\",\n        \"ワースト\",\n        \"名高い\",\n        \"所収\",\n        \"朝夕\",\n        \"江蘇\",\n        \"温室\",\n        \"無実\",\n        \"足首\",\n        \"陸戦\",\n        \"ステファン\",\n        \"アントワ\",\n        \"かり\",\n        \"セバス\",\n        \"倒れる\",\n        \"図案\",\n        \"国史\",\n        \"挑み\",\n        \"茂木\",\n        \"##シク\",\n        \"##ンドゥ\",\n        \"ジャコ\",\n        \"ゲームズ\",\n        \"サイクリング\",\n        \"Jour\",\n        \"Line\",\n        \"hyd\",\n        \"中庭\",\n        \"審理\",\n        \"整合\",\n        \"焼酎\",\n        \"直子\",\n        \"箕面\",\n        \"##ッダー\",\n        \"##ラック\",\n        \"##94\",\n        \"##ANA\",\n        \"見舞い\",\n        \"サトウ\",\n        \"OUT\",\n        \"ガーナ\",\n        \"亜目\",\n        \"天界\",\n        \"安井\",\n        \"家光\",\n        \"挙がっ\",\n        \"献身\",\n        \"##po\",\n        \"ジェイク\",\n        \"##ette\",\n        \"##TRA\",\n        \"ミカエル\",\n        \"mac\",\n        \"ひで\",\n        \"りく\",\n        \"オホ\",\n        \"井原\",\n        \"井伊\",\n        \"共済\",\n        \"戦乱\",\n        \"模擬\",\n        \"治める\",\n        \"烏丸\",\n        \"##ーカ\",\n        \"##の川\",\n        \"ディラン\",\n        \"シュレ\",\n        \"メンフィス\",\n        \"NSC\",\n        \"BT\",\n        \"First\",\n        \"Les\"\n    ]\n}"
  },
  {
    "path": "Bert/chinese-roberta-wwm-ext-large/Tokenizer.json",
    "content": "{\n    \"Type\": \"WordPiece\",\n    \"ContinuingSubwordPrefix\": \"##\",\n    \"Vocab\": {\n         \"0\": 121,\n         \"1\": 122,\n         \"2\": 123,\n         \"3\": 124,\n         \"4\": 125,\n         \"5\": 126,\n         \"6\": 127,\n         \"7\": 128,\n         \"8\": 129,\n         \"9\": 130,\n         \"10\": 8108,\n         \"11\": 8111,\n         \"12\": 8110,\n         \"13\": 8124,\n         \"14\": 8122,\n         \"15\": 8115,\n         \"16\": 8121,\n         \"17\": 8126,\n         \"18\": 8123,\n         \"19\": 8131,\n         \"20\": 8113,\n         \"21\": 8128,\n         \"22\": 8130,\n         \"23\": 8133,\n         \"24\": 8125,\n         \"25\": 8132,\n         \"26\": 8153,\n         \"27\": 8149,\n         \"28\": 8143,\n         \"29\": 8162,\n         \"30\": 8114,\n         \"31\": 8176,\n         \"32\": 8211,\n         \"33\": 8226,\n         \"34\": 8229,\n         \"35\": 8198,\n         \"36\": 8216,\n         \"37\": 8234,\n         \"38\": 8218,\n         \"39\": 8240,\n         \"40\": 8164,\n         \"41\": 8245,\n         \"42\": 8239,\n         \"43\": 8250,\n         \"44\": 8252,\n         \"45\": 8208,\n         \"46\": 8248,\n         \"47\": 8264,\n         \"48\": 8214,\n         \"49\": 8249,\n         \"50\": 8145,\n         \"51\": 8246,\n         \"52\": 8247,\n         \"53\": 8251,\n         \"54\": 8267,\n         \"55\": 8222,\n         \"56\": 8259,\n         \"57\": 8272,\n         \"58\": 8255,\n         \"59\": 8257,\n         \"60\": 8183,\n         \"61\": 8398,\n         \"62\": 8356,\n         \"63\": 8381,\n         \"64\": 8308,\n         \"65\": 8284,\n         \"66\": 8347,\n         \"67\": 8369,\n         \"68\": 8360,\n         \"69\": 8419,\n         \"70\": 8203,\n         \"71\": 8459,\n         \"72\": 8325,\n         \"73\": 8454,\n         \"74\": 8473,\n         \"75\": 8273,\n         \"76\": 8399,\n         \"77\": 8411,\n         \"78\": 8409,\n         \"79\": 8428,\n         \"80\": 8188,\n         \"81\": 8424,\n         \"82\": 8460,\n         \"83\": 8466,\n         \"84\": 8479,\n         \"85\": 8300,\n         \"86\": 8352,\n         \"87\": 8467,\n         \"88\": 8302,\n         \"89\": 8426,\n         \"90\": 8192,\n         \"91\": 8440,\n         \"92\": 8394,\n         \"93\": 8430,\n         \"94\": 8416,\n         \"95\": 8287,\n         \"96\": 8378,\n         \"97\": 8380,\n         \"98\": 8327,\n         \"99\": 8238,\n         \"100\": 8135,\n         \"101\": 8359,\n         \"102\": 8667,\n         \"103\": 8615,\n         \"104\": 8503,\n         \"105\": 8423,\n         \"106\": 8438,\n         \"107\": 8632,\n         \"108\": 8692,\n         \"109\": 8965,\n         \"110\": 8406,\n         \"111\": 8932,\n         \"112\": 9017,\n         \"113\": 8989,\n         \"114\": 8866,\n         \"115\": 8787,\n         \"116\": 9070,\n         \"117\": 9149,\n         \"118\": 8966,\n         \"119\": 9031,\n         \"120\": 8290,\n         \"121\": 9247,\n         \"122\": 9203,\n         \"123\": 8604,\n         \"124\": 9377,\n         \"125\": 8752,\n         \"126\": 9022,\n         \"127\": 9274,\n         \"128\": 8848,\n         \"129\": 8990,\n         \"130\": 8463,\n         \"131\": 9403,\n         \"132\": 9306,\n         \"133\": 9246,\n         \"134\": 9146,\n         \"135\": 8908,\n         \"136\": 9015,\n         \"137\": 9444,\n         \"138\": 9209,\n         \"139\": 9081,\n         \"140\": 8468,\n         \"141\": 9554,\n         \"142\": 9621,\n         \"143\": 9572,\n         \"144\": 9494,\n         \"145\": 9390,\n         \"146\": 9630,\n         \"147\": 9746,\n         \"148\": 9640,\n         \"149\": 9491,\n         \"150\": 8269,\n         \"151\": 9564,\n         \"152\": 9653,\n         \"153\": 9677,\n         \"154\": 9220,\n         \"155\": 9437,\n         \"156\": 9508,\n         \"157\": 9928,\n         \"158\": 9412,\n         \"159\": 9699,\n         \"160\": 8522,\n         \"161\": 9608,\n         \"162\": 9565,\n         \"163\": 8737,\n         \"164\": 10048,\n         \"165\": 9316,\n         \"166\": 9771,\n         \"167\": 10029,\n         \"168\": 8832,\n         \"169\": 9853,\n         \"170\": 8725,\n         \"171\": 9919,\n         \"172\": 9801,\n         \"173\": 10020,\n         \"174\": 10134,\n         \"175\": 9251,\n         \"176\": 10004,\n         \"177\": 10132,\n         \"178\": 9649,\n         \"179\": 9910,\n         \"180\": 8420,\n         \"181\": 10111,\n         \"182\": 9952,\n         \"183\": 9826,\n         \"184\": 10116,\n         \"185\": 9560,\n         \"186\": 9833,\n         \"187\": 10058,\n         \"188\": 9460,\n         \"189\": 10025,\n         \"190\": 8979,\n         \"191\": 10330,\n         \"192\": 9319,\n         \"193\": 10185,\n         \"194\": 10457,\n         \"195\": 9996,\n         \"196\": 10220,\n         \"197\": 10596,\n         \"198\": 9776,\n         \"199\": 9092,\n         \"200\": 8185,\n         \"201\": 9250,\n         \"202\": 9707,\n         \"203\": 9954,\n         \"204\": 10080,\n         \"205\": 9860,\n         \"206\": 9899,\n         \"207\": 10194,\n         \"208\": 9894,\n         \"209\": 10381,\n         \"210\": 9083,\n         \"211\": 9395,\n         \"212\": 10164,\n         \"213\": 10431,\n         \"214\": 10267,\n         \"215\": 10082,\n         \"216\": 9972,\n         \"217\": 10645,\n         \"218\": 10224,\n         \"219\": 10453,\n         \"220\": 8796,\n         \"221\": 10118,\n         \"222\": 9918,\n         \"223\": 10265,\n         \"224\": 10629,\n         \"225\": 9140,\n         \"226\": 10436,\n         \"227\": 10543,\n         \"228\": 9152,\n         \"229\": 10608,\n         \"230\": 9111,\n         \"231\": 10602,\n         \"232\": 9863,\n         \"233\": 9959,\n         \"234\": 10129,\n         \"235\": 8593,\n         \"236\": 9671,\n         \"237\": 10775,\n         \"238\": 10308,\n         \"239\": 10694,\n         \"240\": 8821,\n         \"241\": 10896,\n         \"242\": 11056,\n         \"243\": 10873,\n         \"244\": 11179,\n         \"245\": 10325,\n         \"246\": 11003,\n         \"247\": 11128,\n         \"248\": 11009,\n         \"249\": 10705,\n         \"250\": 8401,\n         \"251\": 10924,\n         \"252\": 10968,\n         \"253\": 10221,\n         \"254\": 11251,\n         \"255\": 9866,\n         \"256\": 9745,\n         \"257\": 11027,\n         \"258\": 10870,\n         \"259\": 10987,\n         \"260\": 9044,\n         \"261\": 10842,\n         \"262\": 10975,\n         \"263\": 10864,\n         \"264\": 10212,\n         \"265\": 8689,\n         \"266\": 9674,\n         \"267\": 11253,\n         \"268\": 10729,\n         \"269\": 11023,\n         \"270\": 9282,\n         \"271\": 11206,\n         \"272\": 11281,\n         \"273\": 10345,\n         \"274\": 11482,\n         \"275\": 10532,\n         \"276\": 11173,\n         \"277\": 11064,\n         \"278\": 11191,\n         \"279\": 11427,\n         \"280\": 8933,\n         \"281\": 10971,\n         \"282\": 11431,\n         \"283\": 11152,\n         \"284\": 11437,\n         \"285\": 10938,\n         \"286\": 11367,\n         \"287\": 11525,\n         \"288\": 10332,\n         \"289\": 11520,\n         \"290\": 9845,\n         \"291\": 11777,\n         \"292\": 11542,\n         \"293\": 11855,\n         \"294\": 11865,\n         \"295\": 11332,\n         \"296\": 11545,\n         \"297\": 11992,\n         \"298\": 10690,\n         \"299\": 9600,\n         \"300\": 8209,\n         \"301\": 9693,\n         \"302\": 10563,\n         \"303\": 11068,\n         \"304\": 9627,\n         \"305\": 10849,\n         \"306\": 10576,\n         \"307\": 10486,\n         \"308\": 9793,\n         \"309\": 11289,\n         \"310\": 9643,\n         \"311\": 10256,\n         \"312\": 10578,\n         \"313\": 11622,\n         \"314\": 11725,\n         \"315\": 9613,\n         \"316\": 10743,\n         \"317\": 11491,\n         \"318\": 10189,\n         \"319\": 10865,\n         \"320\": 9144,\n         \"321\": 9883,\n         \"322\": 11965,\n         \"323\": 11221,\n         \"324\": 11500,\n         \"325\": 10838,\n         \"326\": 12044,\n         \"327\": 12094,\n         \"328\": 11580,\n         \"329\": 11705,\n         \"330\": 9611,\n         \"331\": 11879,\n         \"332\": 12308,\n         \"333\": 10745,\n         \"334\": 12225,\n         \"335\": 11728,\n         \"336\": 12073,\n         \"337\": 12129,\n         \"338\": 11929,\n         \"339\": 11863,\n         \"340\": 10049,\n         \"341\": 12117,\n         \"342\": 12362,\n         \"343\": 12186,\n         \"344\": 12698,\n         \"345\": 11434,\n         \"346\": 12380,\n         \"347\": 12936,\n         \"348\": 12687,\n         \"349\": 12110,\n         \"350\": 8612,\n         \"351\": 12524,\n         \"352\": 12091,\n         \"353\": 12115,\n         \"354\": 11848,\n         \"355\": 11753,\n         \"356\": 12215,\n         \"357\": 12494,\n         \"358\": 11429,\n         \"359\": 12027,\n         \"360\": 8286,\n         \"361\": 11758,\n         \"362\": 12711,\n         \"363\": 12937,\n         \"364\": 12673,\n         \"365\": 8728,\n         \"366\": 11949,\n         \"367\": 12375,\n         \"368\": 11642,\n         \"369\": 11844,\n         \"370\": 10011,\n         \"371\": 12584,\n         \"372\": 12607,\n         \"373\": 12779,\n         \"374\": 11948,\n         \"375\": 11256,\n         \"376\": 13118,\n         \"377\": 13222,\n         \"378\": 12770,\n         \"379\": 12613,\n         \"380\": 9406,\n         \"381\": 12185,\n         \"382\": 12163,\n         \"383\": 12510,\n         \"384\": 12344,\n         \"385\": 11959,\n         \"386\": 12303,\n         \"387\": 12716,\n         \"388\": 11632,\n         \"389\": 12512,\n         \"390\": 10370,\n         \"391\": 13092,\n         \"392\": 12254,\n         \"393\": 12683,\n         \"394\": 12728,\n         \"395\": 12481,\n         \"396\": 13008,\n         \"397\": 12591,\n         \"398\": 11425,\n         \"399\": 9612,\n         \"400\": 8230,\n         \"401\": 11185,\n         \"402\": 12040,\n         \"403\": 12058,\n         \"404\": 10524,\n         \"405\": 11982,\n         \"406\": 12563,\n         \"407\": 12458,\n         \"408\": 12189,\n         \"409\": 12942,\n         \"410\": 10706,\n         \"411\": 12686,\n         \"412\": 12346,\n         \"413\": 12561,\n         \"414\": 12815,\n         \"415\": 12114,\n         \"416\": 12453,\n         \"417\": 13038,\n         \"418\": 12978,\n         \"419\": 13055,\n         \"420\": 9784,\n         \"421\": 12873,\n         \"422\": 12721,\n         \"425\": 11993,\n         \"426\": 12408,\n         \"427\": 12575,\n         \"428\": 11351,\n         \"429\": 13249,\n         \"430\": 10352,\n         \"432\": 13133,\n         \"433\": 13131,\n         \"435\": 11930,\n         \"438\": 13174,\n         \"440\": 10845,\n         \"441\": 13013,\n         \"442\": 13171,\n         \"444\": 12876,\n         \"445\": 12834,\n         \"448\": 13078,\n         \"450\": 8802,\n         \"451\": 13068,\n         \"453\": 12893,\n         \"455\": 12404,\n         \"456\": 12570,\n         \"457\": 12119,\n         \"458\": 12562,\n         \"460\": 10685,\n         \"465\": 12930,\n         \"468\": 12944,\n         \"470\": 10658,\n         \"475\": 13243,\n         \"480\": 9482,\n         \"485\": 11763,\n         \"486\": 12459,\n         \"488\": 12789,\n         \"490\": 10566,\n         \"495\": 12895,\n         \"498\": 12544,\n         \"499\": 9927,\n         \"500\": 8195,\n         \"501\": 11884,\n         \"502\": 11907,\n         \"503\": 12929,\n         \"504\": 12808,\n         \"505\": 11033,\n         \"506\": 11608,\n         \"508\": 12328,\n         \"510\": 10907,\n         \"511\": 12677,\n         \"512\": 11530,\n         \"513\": 13310,\n         \"515\": 13196,\n         \"516\": 12635,\n         \"518\": 8739,\n         \"520\": 9038,\n         \"521\": 11411,\n         \"522\": 11510,\n         \"525\": 11717,\n         \"530\": 10830,\n         \"536\": 12904,\n         \"539\": 12995,\n         \"540\": 10972,\n         \"543\": 11895,\n         \"550\": 9090,\n         \"555\": 11723,\n         \"560\": 10541,\n         \"570\": 11594,\n         \"580\": 10298,\n         \"588\": 12426,\n         \"590\": 11210,\n         \"591\": 9512,\n         \"595\": 13302,\n         \"599\": 10713,\n         \"600\": 8298,\n         \"601\": 12104,\n         \"603\": 13277,\n         \"610\": 10248,\n         \"611\": 12768,\n         \"616\": 13226,\n         \"618\": 9048,\n         \"620\": 11078,\n         \"625\": 12218,\n         \"626\": 12463,\n         \"630\": 10615,\n         \"640\": 11410,\n         \"650\": 9291,\n         \"660\": 9936,\n         \"661\": 10854,\n         \"666\": 11186,\n         \"670\": 11807,\n         \"680\": 10255,\n         \"688\": 10898,\n         \"690\": 11960,\n         \"699\": 10439,\n         \"700\": 8389,\n         \"701\": 12656,\n         \"705\": 10595,\n         \"709\": 12118,\n         \"710\": 12415,\n         \"711\": 12565,\n         \"720\": 10503,\n         \"730\": 11868,\n         \"737\": 11933,\n         \"740\": 13159,\n         \"747\": 12331,\n         \"750\": 9180,\n         \"760\": 12456,\n         \"768\": 12472,\n         \"770\": 13215,\n         \"777\": 9800,\n         \"780\": 11493,\n         \"787\": 13029,\n         \"790\": 11793,\n         \"798\": 12396,\n         \"799\": 10882,\n         \"800\": 8280,\n         \"801\": 12566,\n         \"802\": 10128,\n         \"810\": 11296,\n         \"814\": 11273,\n         \"816\": 10937,\n         \"818\": 12265,\n         \"820\": 10398,\n         \"828\": 13120,\n         \"830\": 12428,\n         \"835\": 10462,\n         \"838\": 11462,\n         \"840\": 12776,\n         \"850\": 10205,\n         \"852\": 11845,\n         \"855\": 10998,\n         \"860\": 12468,\n         \"863\": 12874,\n         \"866\": 11029,\n         \"867\": 11932,\n         \"870\": 10731,\n         \"880\": 9987,\n         \"886\": 12050,\n         \"888\": 9389,\n         \"890\": 12075,\n         \"897\": 8747,\n         \"899\": 12612,\n         \"900\": 8567,\n         \"911\": 9911,\n         \"920\": 11976,\n         \"921\": 12253,\n         \"925\": 10711,\n         \"930\": 12601,\n         \"950\": 10468,\n         \"960\": 10450,\n         \"970\": 13314,\n         \"978\": 8837,\n         \"980\": 10536,\n         \"985\": 11263,\n         \"990\": 10278,\n         \"998\": 13180,\n         \"999\": 9098,\n         \"1000\": 8212,\n         \"1001\": 11823,\n         \"1010\": 13266,\n         \"1020\": 13223,\n         \"1024\": 11570,\n         \"1080\": 10680,\n         \"1100\": 9393,\n         \"1111\": 11954,\n         \"1200\": 8552,\n         \"1234\": 10343,\n         \"1250\": 11591,\n         \"1280\": 10350,\n         \"1300\": 8925,\n         \"1350\": 12809,\n         \"1389\": 12853,\n         \"1400\": 9439,\n         \"1500\": 8443,\n         \"1600\": 8903,\n         \"1700\": 9641,\n         \"1800\": 8961,\n         \"1840\": 12571,\n         \"1850\": 12631,\n         \"1860\": 11990,\n         \"1867\": 13042,\n         \"1868\": 12590,\n         \"1870\": 12720,\n         \"1871\": 13262,\n         \"1880\": 11348,\n         \"1882\": 13273,\n         \"1884\": 13007,\n         \"1885\": 13124,\n         \"1886\": 12935,\n         \"1888\": 10988,\n         \"1889\": 12116,\n         \"1890\": 11787,\n         \"1893\": 12927,\n         \"1894\": 12221,\n         \"1895\": 10794,\n         \"1896\": 11833,\n         \"1897\": 12084,\n         \"1898\": 11459,\n         \"1899\": 11886,\n         \"1900\": 8985,\n         \"1901\": 11113,\n         \"1902\": 11487,\n         \"1903\": 11295,\n         \"1904\": 11035,\n         \"1905\": 10196,\n         \"1906\": 10959,\n         \"1907\": 11111,\n         \"1908\": 11046,\n         \"1909\": 10943,\n         \"1910\": 10428,\n         \"1911\": 10041,\n         \"1912\": 9855,\n         \"1913\": 10432,\n         \"1914\": 9837,\n         \"1915\": 10649,\n         \"1916\": 10772,\n         \"1917\": 10199,\n         \"1918\": 10106,\n         \"1919\": 9915,\n         \"1920\": 9208,\n         \"1921\": 10033,\n         \"1922\": 10209,\n         \"1923\": 10236,\n         \"1924\": 10052,\n         \"1925\": 10087,\n         \"1926\": 10126,\n         \"1927\": 9620,\n         \"1928\": 9672,\n         \"1929\": 9792,\n         \"1930\": 9275,\n         \"1931\": 9639,\n         \"1932\": 9737,\n         \"1933\": 9657,\n         \"1934\": 9823,\n         \"1935\": 9523,\n         \"1936\": 9481,\n         \"1937\": 9166,\n         \"1938\": 9429,\n         \"1939\": 9459,\n         \"1940\": 9211,\n         \"1941\": 9327,\n         \"1942\": 9480,\n         \"1943\": 9540,\n         \"1944\": 9462,\n         \"1945\": 8799,\n         \"1946\": 9120,\n         \"1947\": 9253,\n         \"1948\": 9130,\n         \"1949\": 8594,\n         \"1950\": 8707,\n         \"1951\": 9387,\n         \"1952\": 9241,\n         \"1953\": 9268,\n         \"1954\": 9258,\n         \"1955\": 9043,\n         \"1956\": 9076,\n         \"1957\": 9088,\n         \"1958\": 8955,\n         \"1959\": 9110,\n         \"1960\": 8779,\n         \"1961\": 9199,\n         \"1962\": 9121,\n         \"1963\": 9155,\n         \"1964\": 9129,\n         \"1965\": 9141,\n         \"1966\": 9093,\n         \"1967\": 9128,\n         \"1968\": 9045,\n         \"1969\": 9073,\n         \"1970\": 8464,\n         \"1971\": 9061,\n         \"1972\": 9027,\n         \"1973\": 9062,\n         \"1974\": 9072,\n         \"1975\": 8974,\n         \"1976\": 8911,\n         \"1977\": 9060,\n         \"1978\": 8774,\n         \"1979\": 8706,\n         \"1980\": 8499,\n         \"1981\": 8785,\n         \"1982\": 8687,\n         \"1983\": 8715,\n         \"1984\": 8655,\n         \"1985\": 8630,\n         \"1986\": 8629,\n         \"1987\": 8622,\n         \"1988\": 8571,\n         \"1989\": 8528,\n         \"1990\": 8431,\n         \"1991\": 8555,\n         \"1992\": 8508,\n         \"1993\": 8516,\n         \"1994\": 8447,\n         \"1995\": 8396,\n         \"1996\": 8432,\n         \"1997\": 8387,\n         \"1998\": 8368,\n         \"1999\": 8338,\n         \"2000\": 8202,\n         \"2001\": 8285,\n         \"2002\": 8301,\n         \"2003\": 8263,\n         \"2004\": 8258,\n         \"2005\": 8232,\n         \"2006\": 8213,\n         \"2007\": 8201,\n         \"2008\": 8182,\n         \"2009\": 8170,\n         \"2010\": 8166,\n         \"2011\": 8163,\n         \"2012\": 8151,\n         \"2013\": 8138,\n         \"2014\": 8127,\n         \"2015\": 8119,\n         \"2016\": 8112,\n         \"2017\": 8109,\n         \"2018\": 8271,\n         \"2019\": 9160,\n         \"2020\": 8439,\n         \"2021\": 9960,\n         \"2022\": 10550,\n         \"2025\": 8950,\n         \"2030\": 9787,\n         \"2050\": 11931,\n         \"2100\": 10247,\n         \"2200\": 10191,\n         \"2300\": 10000,\n         \"2345\": 11209,\n         \"2400\": 9851,\n         \"2500\": 8720,\n         \"2600\": 10496,\n         \"2700\": 10930,\n         \"2756\": 9397,\n         \"2765\": 9513,\n         \"2800\": 10347,\n         \"2900\": 13044,\n         \"3000\": 8283,\n         \"3100\": 12100,\n         \"3200\": 10337,\n         \"3300\": 11543,\n         \"3400\": 13294,\n         \"3500\": 9252,\n         \"3600\": 10517,\n         \"3800\": 11433,\n         \"4000\": 8442,\n         \"4066\": 9607,\n         \"4200\": 12395,\n         \"4399\": 9922,\n         \"4500\": 9805,\n         \"4600\": 8826,\n         \"4800\": 12488,\n         \"5000\": 8262,\n         \"5500\": 11298,\n         \"5757\": 12007,\n         \"6000\": 8412,\n         \"6221\": 12580,\n         \"6500\": 11247,\n         \"6606\": 8754,\n         \"6991\": 12918,\n         \"7000\": 8800,\n         \"7500\": 11271,\n         \"7866\": 12081,\n         \"8000\": 8623,\n         \"8591\": 12376,\n         \"8891\": 10546,\n         \"9000\": 9117,\n         \"9595\": 13043,\n         \"9678\": 12057,\n         \"9985\": 12839,\n         \"10000\": 8769,\n         \"12000\": 10520,\n         \"12306\": 11914,\n         \"12345\": 9700,\n         \"15000\": 10064,\n         \"15058\": 12347,\n         \"18000\": 12499,\n         \"20000\": 8875,\n         \"25000\": 13251,\n         \"30000\": 11158,\n         \"50000\": 11750,\n         \"123456\": 10644,\n         \"13913459\": 12643,\n         \"573032185\": 9970,\n         \"!\": 106,\n         \"\\\"\": 107,\n         \"#\": 108,\n         \"##!\": 13317,\n         \"##\\\"\": 13318,\n         \"###\": 13319,\n         \"##$\": 13320,\n         \"##%\": 13321,\n         \"##&\": 13322,\n         \"##'\": 13323,\n         \"##(\": 13324,\n         \"##)\": 13325,\n         \"##*\": 13326,\n         \"##+\": 13327,\n         \"##,\": 13328,\n         \"##-\": 13329,\n         \"##.\": 13330,\n         \"##/\": 13331,\n         \"##0\": 8129,\n         \"##00\": 8279,\n         \"##000\": 9086,\n         \"##001\": 9942,\n         \"##007\": 12843,\n         \"##009\": 11219,\n         \"##01\": 8665,\n         \"##010\": 11906,\n         \"##011\": 12424,\n         \"##012\": 12037,\n         \"##013\": 11335,\n         \"##014\": 11365,\n         \"##015\": 8851,\n         \"##016\": 8705,\n         \"##017\": 8710,\n         \"##02\": 8904,\n         \"##03\": 9042,\n         \"##04\": 9099,\n         \"##05\": 8920,\n         \"##06\": 8839,\n         \"##07\": 9131,\n         \"##08\": 9153,\n         \"##09\": 9267,\n         \"##0m\": 13079,\n         \"##0mm\": 12483,\n         \"##1\": 8148,\n         \"##10\": 8311,\n         \"##100\": 8823,\n         \"##1000\": 10529,\n         \"##101\": 11712,\n         \"##11\": 8452,\n         \"##110\": 12518,\n         \"##12\": 8455,\n         \"##120\": 12256,\n         \"##123\": 9807,\n         \"##13\": 8679,\n         \"##14\": 8717,\n         \"##15\": 8493,\n         \"##150\": 12041,\n         \"##16\": 8518,\n         \"##160\": 12765,\n         \"##163\": 11631,\n         \"##168\": 11090,\n         \"##17\": 8408,\n         \"##18\": 8662,\n         \"##19\": 8818,\n         \"##2\": 8144,\n         \"##20\": 8393,\n         \"##200\": 9902,\n         \"##2000\": 9842,\n         \"##2007\": 10604,\n         \"##2008\": 10545,\n         \"##2009\": 9948,\n         \"##2010\": 9546,\n         \"##2011\": 9455,\n         \"##2012\": 9285,\n         \"##2013\": 9023,\n         \"##2014\": 8951,\n         \"##2015\": 8600,\n         \"##2016\": 8386,\n         \"##2017\": 8367,\n         \"##21\": 8650,\n         \"##22\": 8683,\n         \"##23\": 8748,\n         \"##24\": 8682,\n         \"##25\": 8743,\n         \"##250\": 12629,\n         \"##26\": 8756,\n         \"##27\": 8976,\n         \"##28\": 8835,\n         \"##29\": 8887,\n         \"##2c\": 11935,\n         \"##2d\": 12675,\n         \"##2f\": 12971,\n         \"##3\": 8152,\n         \"##30\": 8471,\n         \"##300\": 10097,\n         \"##3000\": 13141,\n         \"##31\": 8805,\n         \"##32\": 8709,\n         \"##33\": 8921,\n         \"##34\": 9269,\n         \"##340\": 12149,\n         \"##35\": 8852,\n         \"##36\": 9159,\n         \"##360\": 10408,\n         \"##365\": 10422,\n         \"##37\": 9474,\n         \"##370\": 13121,\n         \"##38\": 9137,\n         \"##39\": 9355,\n         \"##3c\": 12031,\n         \"##3d\": 10696,\n         \"##4\": 8159,\n         \"##40\": 8660,\n         \"##400\": 10765,\n         \"##41\": 9281,\n         \"##42\": 9240,\n         \"##43\": 9433,\n         \"##44\": 9292,\n         \"##45\": 9039,\n         \"##46\": 9340,\n         \"##47\": 9050,\n         \"##470\": 12531,\n         \"##48\": 8849,\n         \"##480\": 11581,\n         \"##49\": 9500,\n         \"##5\": 8157,\n         \"##50\": 8474,\n         \"##500\": 9758,\n         \"##51\": 9216,\n         \"##52\": 9364,\n         \"##520\": 13241,\n         \"##53\": 9310,\n         \"##54\": 9488,\n         \"##55\": 8949,\n         \"##56\": 9352,\n         \"##57\": 9647,\n         \"##58\": 9265,\n         \"##580\": 10703,\n         \"##59\": 9632,\n         \"##5s\": 13201,\n         \"##6\": 8158,\n         \"##60\": 8581,\n         \"##600\": 10346,\n         \"##61\": 8978,\n         \"##62\": 9290,\n         \"##63\": 9373,\n         \"##64\": 9165,\n         \"##65\": 9331,\n         \"##66\": 8952,\n         \"##67\": 9411,\n         \"##68\": 9105,\n         \"##69\": 9398,\n         \"##7\": 8161,\n         \"##70\": 8740,\n         \"##700\": 11551,\n         \"##71\": 9097,\n         \"##72\": 9492,\n         \"##73\": 9148,\n         \"##74\": 9743,\n         \"##75\": 9183,\n         \"##750\": 10969,\n         \"##76\": 9624,\n         \"##77\": 8959,\n         \"##78\": 9136,\n         \"##79\": 9495,\n         \"##8\": 8156,\n         \"##80\": 8538,\n         \"##800\": 9988,\n         \"##81\": 9313,\n         \"##82\": 9605,\n         \"##83\": 9559,\n         \"##84\": 9545,\n         \"##85\": 9169,\n         \"##86\": 9219,\n         \"##87\": 9446,\n         \"##88\": 8544,\n         \"##888\": 10053,\n         \"##89\": 9402,\n         \"##9\": 8160,\n         \"##90\": 8599,\n         \"##900\": 10589,\n         \"##91\": 9332,\n         \"##92\": 9595,\n         \"##93\": 9676,\n         \"##94\": 9723,\n         \"##95\": 9102,\n         \"##96\": 9419,\n         \"##97\": 9410,\n         \"##98\": 9215,\n         \"##99\": 8653,\n         \"##999\": 11430,\n         \"##:\": 13332,\n         \"##;\": 13333,\n         \"##<\": 13334,\n         \"##=\": 13335,\n         \"##>\": 13336,\n         \"##?\": 13337,\n         \"##@\": 13338,\n         \"##[\": 13339,\n         \"##\\\\\": 13340,\n         \"##]\": 13341,\n         \"##^\": 13342,\n         \"##_\": 13343,\n         \"##a\": 8139,\n         \"##a1\": 11414,\n         \"##a2\": 12871,\n         \"##a5\": 12540,\n         \"##aa\": 10226,\n         \"##ab\": 11008,\n         \"##abc\": 12072,\n         \"##able\": 9609,\n         \"##ac\": 9202,\n         \"##ace\": 10026,\n         \"##ach\": 10289,\n         \"##ack\": 11360,\n         \"##act\": 12183,\n         \"##ad\": 8695,\n         \"##ada\": 11370,\n         \"##ade\": 10233,\n         \"##ader\": 11590,\n         \"##admin\": 11454,\n         \"##ads\": 12514,\n         \"##ae\": 10361,\n         \"##af\": 11472,\n         \"##aft\": 12106,\n         \"##ag\": 10814,\n         \"##age\": 9103,\n         \"##ager\": 13281,\n         \"##ague\": 12998,\n         \"##ah\": 9082,\n         \"##ai\": 8982,\n         \"##aid\": 11791,\n         \"##ail\": 10923,\n         \"##ain\": 9347,\n         \"##aine\": 12554,\n         \"##air\": 10908,\n         \"##ak\": 9896,\n         \"##aka\": 12417,\n         \"##ake\": 9981,\n         \"##al\": 8315,\n         \"##ala\": 11658,\n         \"##ald\": 13041,\n         \"##ale\": 11079,\n         \"##alk\": 11346,\n         \"##all\": 10050,\n         \"##als\": 12707,\n         \"##am\": 8608,\n         \"##ama\": 11135,\n         \"##ame\": 10816,\n         \"##an\": 8244,\n         \"##ana\": 9335,\n         \"##ance\": 9966,\n         \"##and\": 9369,\n         \"##anda\": 13300,\n         \"##ane\": 10581,\n         \"##ang\": 8688,\n         \"##ani\": 13154,\n         \"##ann\": 12464,\n         \"##ano\": 10855,\n         \"##anonymoussaid\": 10813,\n         \"##ans\": 11159,\n         \"##ant\": 9834,\n         \"##ao\": 8731,\n         \"##ap\": 8872,\n         \"##ape\": 11706,\n         \"##app\": 11259,\n         \"##ar\": 8458,\n         \"##ara\": 10225,\n         \"##ard\": 9345,\n         \"##are\": 10305,\n         \"##ari\": 11172,\n         \"##ark\": 11153,\n         \"##art\": 9528,\n         \"##ary\": 9277,\n         \"##as\": 8576,\n         \"##ase\": 10294,\n         \"##ash\": 9889,\n         \"##asia\": 11276,\n         \"##ass\": 11904,\n         \"##ast\": 9421,\n         \"##at\": 8488,\n         \"##ata\": 10449,\n         \"##ate\": 9690,\n         \"##ath\": 11486,\n         \"##ather\": 12290,\n         \"##atic\": 11080,\n         \"##ation\": 8794,\n         \"##ations\": 11517,\n         \"##ator\": 11762,\n         \"##ats\": 10841,\n         \"##ature\": 10461,\n         \"##atus\": 12283,\n         \"##au\": 9096,\n         \"##av\": 9876,\n         \"##ave\": 12529,\n         \"##aw\": 10922,\n         \"##ax\": 10704,\n         \"##ay\": 8760,\n         \"##b\": 8204,\n         \"##ba\": 8668,\n         \"##baby\": 12515,\n         \"##back\": 10102,\n         \"##ball\": 11050,\n         \"##bank\": 10980,\n         \"##bar\": 11031,\n         \"##baru\": 13257,\n         \"##base\": 10918,\n         \"##bat\": 12671,\n         \"##bay\": 13200,\n         \"##bb\": 10214,\n         \"##bbs\": 12646,\n         \"##bby\": 12832,\n         \"##bc\": 9242,\n         \"##be\": 8765,\n         \"##bee\": 11162,\n         \"##bel\": 12157,\n         \"##bell\": 13110,\n         \"##ber\": 8956,\n         \"##berg\": 10039,\n         \"##berry\": 10793,\n         \"##bert\": 10491,\n         \"##bet\": 9704,\n         \"##beth\": 12101,\n         \"##bi\": 9350,\n         \"##bia\": 12596,\n         \"##bian\": 11092,\n         \"##bike\": 13276,\n         \"##bility\": 13254,\n         \"##bin\": 10448,\n         \"##bit\": 9407,\n         \"##ble\": 8862,\n         \"##blog\": 10877,\n         \"##bo\": 8820,\n         \"##board\": 9472,\n         \"##body\": 11326,\n         \"##bon\": 12229,\n         \"##book\": 8874,\n         \"##bor\": 12268,\n         \"##bot\": 10119,\n         \"##bow\": 12559,\n         \"##box\": 8927,\n         \"##boy\": 11287,\n         \"##bra\": 11552,\n         \"##bre\": 12655,\n         \"##bs\": 9071,\n         \"##bscribe\": 12980,\n         \"##bt\": 10161,\n         \"##bu\": 11381,\n         \"##bug\": 12351,\n         \"##burg\": 12433,\n         \"##bus\": 10151,\n         \"##by\": 8684,\n         \"##c\": 8177,\n         \"##ca\": 8808,\n         \"##cake\": 12814,\n         \"##cal\": 10384,\n         \"##cam\": 12438,\n         \"##can\": 12632,\n         \"##car\": 9831,\n         \"##card\": 11644,\n         \"##care\": 11014,\n         \"##cast\": 13020,\n         \"##cat\": 10869,\n         \"##cation\": 11424,\n         \"##cc\": 8860,\n         \"##cca\": 13144,\n         \"##cd\": 10340,\n         \"##ce\": 8328,\n         \"##cel\": 11786,\n         \"##cent\": 11270,\n         \"##cept\": 11877,\n         \"##cer\": 10326,\n         \"##ces\": 11463,\n         \"##cg\": 11478,\n         \"##ch\": 8370,\n         \"##cha\": 11645,\n         \"##chat\": 10720,\n         \"##che\": 9763,\n         \"##chel\": 10867,\n         \"##chen\": 11595,\n         \"##cher\": 10824,\n         \"##chi\": 10525,\n         \"##ci\": 9702,\n         \"##cia\": 12382,\n         \"##cil\": 11783,\n         \"##cing\": 11540,\n         \"##city\": 10747,\n         \"##ck\": 8433,\n         \"##cker\": 10603,\n         \"##cket\": 10811,\n         \"##cks\": 11495,\n         \"##cky\": 11216,\n         \"##cl\": 10753,\n         \"##cle\": 11619,\n         \"##cm\": 8341,\n         \"##cms\": 12353,\n         \"##cm～\": 13123,\n         \"##cn\": 9435,\n         \"##co\": 8588,\n         \"##code\": 10802,\n         \"##coin\": 10160,\n         \"##com\": 9479,\n         \"##come\": 12097,\n         \"##con\": 10281,\n         \"##copyright\": 13291,\n         \"##cord\": 12291,\n         \"##core\": 11921,\n         \"##count\": 12369,\n         \"##covery\": 12548,\n         \"##cp\": 11057,\n         \"##cr\": 13129,\n         \"##cs\": 9761,\n         \"##ct\": 8722,\n         \"##ction\": 9116,\n         \"##ctionary\": 13126,\n         \"##ctive\": 11626,\n         \"##ctor\": 9610,\n         \"##cts\": 12175,\n         \"##cture\": 11235,\n         \"##cus\": 11609,\n         \"##cy\": 8890,\n         \"##d\": 8168,\n         \"##da\": 8521,\n         \"##dan\": 13184,\n         \"##dar\": 12354,\n         \"##data\": 11792,\n         \"##day\": 8758,\n         \"##db\": 9123,\n         \"##dc\": 12251,\n         \"##dd\": 9879,\n         \"##dden\": 13109,\n         \"##de\": 8510,\n         \"##ded\": 11363,\n         \"##del\": 13283,\n         \"##den\": 10241,\n         \"##deo\": 13000,\n         \"##der\": 8960,\n         \"##des\": 11211,\n         \"##desk\": 13039,\n         \"##dge\": 12025,\n         \"##dget\": 11857,\n         \"##di\": 9172,\n         \"##dia\": 9360,\n         \"##dical\": 13168,\n         \"##die\": 11588,\n         \"##ding\": 9755,\n         \"##dio\": 12159,\n         \"##dium\": 12787,\n         \"##dk\": 12806,\n         \"##dm\": 10420,\n         \"##dn\": 10853,\n         \"##do\": 8828,\n         \"##dog\": 13315,\n         \"##dom\": 11290,\n         \"##don\": 12107,\n         \"##dot\": 12402,\n         \"##down\": 11140,\n         \"##dp\": 11497,\n         \"##dr\": 11582,\n         \"##dra\": 12753,\n         \"##dragon\": 12857,\n         \"##drive\": 13115,\n         \"##ds\": 8841,\n         \"##dt\": 12672,\n         \"##du\": 11202,\n         \"##dy\": 8771,\n         \"##e\": 8154,\n         \"##ea\": 10073,\n         \"##ead\": 12943,\n         \"##eam\": 10430,\n         \"##ean\": 10096,\n         \"##ear\": 11979,\n         \"##ec\": 9587,\n         \"##ect\": 10862,\n         \"##ed\": 8303,\n         \"##ee\": 8854,\n         \"##een\": 10929,\n         \"##eep\": 12293,\n         \"##eet\": 12412,\n         \"##ef\": 9679,\n         \"##eg\": 10935,\n         \"##eh\": 12742,\n         \"##ei\": 9384,\n         \"##ein\": 11858,\n         \"##ek\": 9534,\n         \"##el\": 8472,\n         \"##ell\": 9602,\n         \"##ella\": 10311,\n         \"##ello\": 13213,\n         \"##em\": 9736,\n         \"##eme\": 12538,\n         \"##ement\": 11946,\n         \"##en\": 8329,\n         \"##ena\": 12000,\n         \"##ence\": 10504,\n         \"##end\": 11652,\n         \"##ene\": 10600,\n         \"##eng\": 9995,\n         \"##ens\": 11550,\n         \"##ent\": 8936,\n         \"##eo\": 10232,\n         \"##ep\": 11613,\n         \"##er\": 8196,\n         \"##era\": 10540,\n         \"##ere\": 12865,\n         \"##ering\": 12393,\n         \"##ern\": 9814,\n         \"##ernel\": 13272,\n         \"##erry\": 11329,\n         \"##ers\": 8755,\n         \"##erson\": 11082,\n         \"##ert\": 10707,\n         \"##ery\": 11041,\n         \"##es\": 8333,\n         \"##ese\": 9692,\n         \"##ess\": 9685,\n         \"##est\": 10414,\n         \"##et\": 8418,\n         \"##eting\": 13216,\n         \"##ets\": 12198,\n         \"##ett\": 13151,\n         \"##ette\": 13009,\n         \"##ev\": 12054,\n         \"##ever\": 11531,\n         \"##ew\": 10795,\n         \"##ews\": 13024,\n         \"##ex\": 8870,\n         \"##ey\": 8603,\n         \"##ez\": 11640,\n         \"##f\": 8189,\n         \"##f2016\": 12769,\n         \"##fa\": 9777,\n         \"##face\": 12122,\n         \"##facebook\": 12917,\n         \"##fc\": 9717,\n         \"##fe\": 9568,\n         \"##fer\": 10967,\n         \"##ference\": 11419,\n         \"##fet\": 12089,\n         \"##ff\": 9049,\n         \"##fi\": 9864,\n         \"##field\": 10901,\n         \"##fig\": 11392,\n         \"##file\": 12056,\n         \"##firm\": 12240,\n         \"##fit\": 11768,\n         \"##fl\": 11690,\n         \"##flow\": 11522,\n         \"##fly\": 11983,\n         \"##fo\": 10261,\n         \"##food\": 12973,\n         \"##force\": 10488,\n         \"##ford\": 10283,\n         \"##fork\": 10618,\n         \"##form\": 12725,\n         \"##fr\": 13245,\n         \"##free\": 13287,\n         \"##fs\": 9222,\n         \"##ft\": 9002,\n         \"##fu\": 12043,\n         \"##ful\": 10291,\n         \"##fun\": 11222,\n         \"##fw\": 12851,\n         \"##fx\": 13122,\n         \"##g\": 8181,\n         \"##ga\": 8676,\n         \"##gan\": 10622,\n         \"##gar\": 11742,\n         \"##gas\": 12400,\n         \"##gate\": 11695,\n         \"##gb\": 9673,\n         \"##gc\": 10817,\n         \"##ge\": 8441,\n         \"##ged\": 11765,\n         \"##gen\": 10152,\n         \"##gence\": 12932,\n         \"##ger\": 9289,\n         \"##get\": 10916,\n         \"##getrelax\": 13198,\n         \"##gg\": 9949,\n         \"##ggle\": 11747,\n         \"##gh\": 11304,\n         \"##ght\": 9725,\n         \"##gi\": 10006,\n         \"##gin\": 10822,\n         \"##ging\": 12374,\n         \"##gio\": 12676,\n         \"##gion\": 13258,\n         \"##gl\": 11406,\n         \"##gle\": 10098,\n         \"##gm\": 11390,\n         \"##gma\": 12880,\n         \"##gn\": 12135,\n         \"##gnet\": 13308,\n         \"##go\": 8591,\n         \"##google\": 10626,\n         \"##gp\": 10932,\n         \"##graphy\": 12872,\n         \"##ground\": 13195,\n         \"##group\": 13097,\n         \"##gs\": 9726,\n         \"##gt\": 12429,\n         \"##gy\": 9765,\n         \"##h\": 8199,\n         \"##ha\": 8778,\n         \"##hai\": 11828,\n         \"##ham\": 9593,\n         \"##han\": 9646,\n         \"##hang\": 11869,\n         \"##hat\": 12063,\n         \"##hc\": 11100,\n         \"##hd\": 9304,\n         \"##he\": 9977,\n         \"##head\": 11795,\n         \"##hen\": 11602,\n         \"##her\": 9856,\n         \"##here\": 10659,\n         \"##hg\": 12207,\n         \"##hi\": 8963,\n         \"##hia\": 12615,\n         \"##hin\": 13098,\n         \"##hing\": 10716,\n         \"##hip\": 11489,\n         \"##hk\": 11054,\n         \"##hl\": 11831,\n         \"##hm\": 13130,\n         \"##hn\": 11781,\n         \"##ho\": 9570,\n         \"##home\": 10479,\n         \"##hone\": 10271,\n         \"##hoo\": 12638,\n         \"##hop\": 11975,\n         \"##host\": 12227,\n         \"##house\": 9937,\n         \"##how\": 13132,\n         \"##hp\": 9990,\n         \"##hr\": 10561,\n         \"##hs\": 9551,\n         \"##ht\": 12160,\n         \"##http\": 11116,\n         \"##hu\": 9670,\n         \"##hua\": 13074,\n         \"##hur\": 13190,\n         \"##hy\": 9943,\n         \"##hz\": 8686,\n         \"##i\": 8169,\n         \"##ia\": 8321,\n         \"##ial\": 9501,\n         \"##ian\": 8750,\n         \"##ias\": 12803,\n         \"##ible\": 12413,\n         \"##ic\": 8317,\n         \"##ica\": 9156,\n         \"##ical\": 9430,\n         \"##ice\": 8877,\n         \"##ich\": 11578,\n         \"##ick\": 9873,\n         \"##ico\": 10641,\n         \"##icon\": 12829,\n         \"##ics\": 9034,\n         \"##id\": 8601,\n         \"##ida\": 12708,\n         \"##ide\": 9552,\n         \"##ider\": 11292,\n         \"##ie\": 8402,\n         \"##iel\": 11995,\n         \"##ien\": 12023,\n         \"##ience\": 13225,\n         \"##ier\": 9181,\n         \"##ies\": 8773,\n         \"##if\": 9536,\n         \"##ification\": 12820,\n         \"##ified\": 13237,\n         \"##ift\": 12401,\n         \"##ig\": 11421,\n         \"##ight\": 9558,\n         \"##iginal\": 13099,\n         \"##ign\": 11558,\n         \"##ii\": 8917,\n         \"##ik\": 10445,\n         \"##ika\": 11378,\n         \"##ike\": 11727,\n         \"##iki\": 12434,\n         \"##iko\": 11480,\n         \"##il\": 8742,\n         \"##ile\": 9729,\n         \"##ill\": 9868,\n         \"##ils\": 12223,\n         \"##ily\": 11779,\n         \"##im\": 9370,\n         \"##ima\": 13028,\n         \"##ime\": 11218,\n         \"##in\": 8277,\n         \"##ina\": 9314,\n         \"##ince\": 13199,\n         \"##ine\": 8620,\n         \"##iner\": 12045,\n         \"##ing\": 8221,\n         \"##ings\": 10334,\n         \"##ini\": 10489,\n         \"##ink\": 11119,\n         \"##ino\": 9846,\n         \"##ins\": 9556,\n         \"##int\": 9824,\n         \"##io\": 8652,\n         \"##ion\": 8410,\n         \"##ions\": 11137,\n         \"##ious\": 11737,\n         \"##ip\": 9032,\n         \"##ique\": 11324,\n         \"##ir\": 8977,\n         \"##ira\": 11630,\n         \"##ire\": 9764,\n         \"##is\": 8331,\n         \"##isa\": 12170,\n         \"##ise\": 9651,\n         \"##ish\": 10574,\n         \"##ision\": 12556,\n         \"##ism\": 10627,\n         \"##ison\": 10316,\n         \"##ist\": 9527,\n         \"##it\": 8500,\n         \"##ita\": 10242,\n         \"##ite\": 9538,\n         \"##ith\": 11440,\n         \"##iti\": 12644,\n         \"##ition\": 11418,\n         \"##ito\": 12899,\n         \"##itor\": 12449,\n         \"##its\": 11275,\n         \"##ity\": 8863,\n         \"##itz\": 12970,\n         \"##iu\": 12425,\n         \"##ium\": 9750,\n         \"##ius\": 10392,\n         \"##ive\": 8857,\n         \"##ivity\": 12165,\n         \"##ix\": 9330,\n         \"##ize\": 11789,\n         \"##j\": 8334,\n         \"##ja\": 10067,\n         \"##ject\": 12238,\n         \"##ji\": 9343,\n         \"##jia\": 12489,\n         \"##jiang\": 12950,\n         \"##jie\": 12732,\n         \"##jin\": 13161,\n         \"##jing\": 12128,\n         \"##jo\": 9839,\n         \"##joy\": 10284,\n         \"##js\": 11124,\n         \"##ju\": 10904,\n         \"##jun\": 12915,\n         \"##jy\": 13051,\n         \"##k\": 8197,\n         \"##ka\": 8693,\n         \"##kb\": 10285,\n         \"##ke\": 8537,\n         \"##ken\": 11285,\n         \"##ker\": 9013,\n         \"##ket\": 11820,\n         \"##key\": 9938,\n         \"##kg\": 8714,\n         \"##khz\": 12112,\n         \"##ki\": 8614,\n         \"##kin\": 12018,\n         \"##king\": 9740,\n         \"##kins\": 13084,\n         \"##kit\": 11217,\n         \"##kk\": 12693,\n         \"##km\": 8879,\n         \"##ko\": 8827,\n         \"##ks\": 9457,\n         \"##ku\": 9547,\n         \"##kv\": 11145,\n         \"##kw\": 10446,\n         \"##ky\": 10218,\n         \"##l\": 8178,\n         \"##la\": 8461,\n         \"##lab\": 11532,\n         \"##labels\": 10636,\n         \"##lace\": 12545,\n         \"##lam\": 12953,\n         \"##lan\": 9475,\n         \"##land\": 8789,\n         \"##lar\": 11208,\n         \"##las\": 10113,\n         \"##last\": 13177,\n         \"##late\": 11523,\n         \"##lax\": 12680,\n         \"##lay\": 11969,\n         \"##lc\": 11097,\n         \"##ld\": 8635,\n         \"##le\": 8268,\n         \"##lean\": 13246,\n         \"##led\": 10702,\n         \"##lee\": 12448,\n         \"##len\": 11407,\n         \"##lent\": 12974,\n         \"##ler\": 8871,\n         \"##les\": 8937,\n         \"##less\": 9920,\n         \"##let\": 10780,\n         \"##lex\": 11074,\n         \"##ley\": 8930,\n         \"##lf\": 9751,\n         \"##li\": 8636,\n         \"##lia\": 10336,\n         \"##lic\": 11809,\n         \"##lie\": 10158,\n         \"##life\": 10359,\n         \"##light\": 9638,\n         \"##lin\": 9029,\n         \"##lina\": 11585,\n         \"##line\": 8762,\n         \"##lines\": 13052,\n         \"##ling\": 9426,\n         \"##link\": 9989,\n         \"##lio\": 12068,\n         \"##lis\": 10820,\n         \"##lish\": 13128,\n         \"##list\": 10142,\n         \"##live\": 11888,\n         \"##lk\": 10758,\n         \"##ll\": 8390,\n         \"##lla\": 9585,\n         \"##lle\": 9906,\n         \"##ller\": 11284,\n         \"##lli\": 13169,\n         \"##lling\": 12903,\n         \"##llo\": 11447,\n         \"##llow\": 11200,\n         \"##lls\": 11139,\n         \"##lly\": 9456,\n         \"##lm\": 9532,\n         \"##lmer\": 12763,\n         \"##lo\": 8897,\n         \"##load\": 11713,\n         \"##lock\": 11248,\n         \"##log\": 11458,\n         \"##logy\": 11121,\n         \"##lon\": 10146,\n         \"##lone\": 12519,\n         \"##lor\": 12422,\n         \"##lot\": 10580,\n         \"##love\": 12564,\n         \"##low\": 10962,\n         \"##lp\": 10986,\n         \"##lr\": 10712,\n         \"##ls\": 8916,\n         \"##lt\": 9238,\n         \"##lter\": 12171,\n         \"##lton\": 10377,\n         \"##lts\": 12977,\n         \"##lu\": 10079,\n         \"##lus\": 11131,\n         \"##lution\": 11843,\n         \"##lux\": 12700,\n         \"##lv\": 9084,\n         \"##lvin\": 12745,\n         \"##ly\": 8436,\n         \"##m\": 8175,\n         \"##m2\": 11916,\n         \"##ma\": 8404,\n         \"##mah\": 10394,\n         \"##mail\": 10984,\n         \"##mall\": 13307,\n         \"##man\": 8490,\n         \"##mand\": 12131,\n         \"##mann\": 10750,\n         \"##map\": 10909,\n         \"##mar\": 11800,\n         \"##mark\": 9882,\n         \"##master\": 12959,\n         \"##mate\": 12125,\n         \"##max\": 10014,\n         \"##may\": 11924,\n         \"##mb\": 8517,\n         \"##mber\": 10494,\n         \"##mbps\": 12399,\n         \"##mc\": 10307,\n         \"##md\": 10638,\n         \"##me\": 8505,\n         \"##med\": 13089,\n         \"##media\": 10970,\n         \"##men\": 11839,\n         \"##ment\": 8631,\n         \"##ments\": 10444,\n         \"##mer\": 9778,\n         \"##mes\": 13060,\n         \"##mg\": 8882,\n         \"##mhz\": 9932,\n         \"##mi\": 8625,\n         \"##mic\": 11341,\n         \"##min\": 9844,\n         \"##mine\": 12723,\n         \"##ming\": 10693,\n         \"##mini\": 12391,\n         \"##mit\": 11104,\n         \"##mix\": 11091,\n         \"##ml\": 8477,\n         \"##mll\": 10682,\n         \"##mm\": 8278,\n         \"##mma\": 13292,\n         \"##mmy\": 12137,\n         \"##mn\": 11919,\n         \"##mo\": 8788,\n         \"##mobile\": 13217,\n         \"##mon\": 10427,\n         \"##mond\": 11423,\n         \"##moon\": 12682,\n         \"##more\": 11286,\n         \"##mp\": 9085,\n         \"##mple\": 12581,\n         \"##mporary\": 12392,\n         \"##ms\": 8884,\n         \"##mu\": 12924,\n         \"##mus\": 13090,\n         \"##mv\": 13275,\n         \"##mw\": 11504,\n         \"##my\": 9009,\n         \"##n\": 8171,\n         \"##n1\": 11310,\n         \"##n2\": 12750,\n         \"##na\": 8374,\n         \"##name\": 10509,\n         \"##nan\": 12457,\n         \"##nap\": 11546,\n         \"##nar\": 12469,\n         \"##nba\": 12360,\n         \"##nc\": 10507,\n         \"##nce\": 9056,\n         \"##nch\": 11106,\n         \"##ncy\": 10518,\n         \"##nd\": 8735,\n         \"##nda\": 12715,\n         \"##nder\": 10493,\n         \"##ndi\": 11874,\n         \"##ndy\": 11373,\n         \"##ne\": 8354,\n         \"##nel\": 12827,\n         \"##ner\": 8957,\n         \"##ners\": 12550,\n         \"##nes\": 10107,\n         \"##ness\": 10077,\n         \"##net\": 8914,\n         \"##new\": 10654,\n         \"##news\": 10040,\n         \"##next\": 12397,\n         \"##ney\": 10761,\n         \"##ng\": 8291,\n         \"##nge\": 10983,\n         \"##nger\": 11533,\n         \"##ni\": 8833,\n         \"##nia\": 12664,\n         \"##nic\": 12467,\n         \"##nie\": 10519,\n         \"##night\": 12734,\n         \"##ning\": 9535,\n         \"##nis\": 12334,\n         \"##nity\": 11347,\n         \"##nix\": 12955,\n         \"##nk\": 9705,\n         \"##nm\": 9359,\n         \"##nn\": 9502,\n         \"##nne\": 12866,\n         \"##nnis\": 13004,\n         \"##nny\": 13239,\n         \"##no\": 8609,\n         \"##nome\": 13125,\n         \"##nor\": 12245,\n         \"##nos\": 12782,\n         \"##note\": 13062,\n         \"##now\": 11371,\n         \"##np\": 12798,\n         \"##ns\": 8727,\n         \"##nse\": 10996,\n         \"##nsis\": 12263,\n         \"##nt\": 8511,\n         \"##nter\": 11526,\n         \"##nts\": 12585,\n         \"##nus\": 11316,\n         \"##ny\": 8680,\n         \"##o\": 8167,\n         \"##o2\": 11110,\n         \"##oa\": 11355,\n         \"##ob\": 11047,\n         \"##oc\": 9450,\n         \"##ock\": 9069,\n         \"##od\": 9308,\n         \"##ode\": 10260,\n         \"##oe\": 10115,\n         \"##of\": 10150,\n         \"##og\": 10800,\n         \"##oh\": 12355,\n         \"##oi\": 12577,\n         \"##oid\": 10523,\n         \"##ok\": 9185,\n         \"##oka\": 12279,\n         \"##ol\": 8798,\n         \"##ola\": 12653,\n         \"##ology\": 10277,\n         \"##om\": 8810,\n         \"##oman\": 13127,\n         \"##ome\": 9893,\n         \"##on\": 8224,\n         \"##ona\": 11065,\n         \"##ond\": 11684,\n         \"##one\": 9021,\n         \"##ong\": 9142,\n         \"##ons\": 9961,\n         \"##onsored\": 12504,\n         \"##oo\": 8902,\n         \"##ood\": 10919,\n         \"##ook\": 10176,\n         \"##ool\": 11627,\n         \"##oon\": 12343,\n         \"##oot\": 13187,\n         \"##op\": 9133,\n         \"##ope\": 11937,\n         \"##oper\": 11468,\n         \"##or\": 8372,\n         \"##ora\": 11455,\n         \"##orage\": 12669,\n         \"##ore\": 9132,\n         \"##ories\": 10939,\n         \"##orm\": 10530,\n         \"##ors\": 10903,\n         \"##ort\": 10143,\n         \"##ory\": 9428,\n         \"##os\": 8470,\n         \"##osa\": 12946,\n         \"##ose\": 10936,\n         \"##ost\": 12085,\n         \"##ot\": 8783,\n         \"##other\": 11759,\n         \"##oto\": 11563,\n         \"##ou\": 9857,\n         \"##oud\": 12867,\n         \"##ough\": 11600,\n         \"##ould\": 11734,\n         \"##ound\": 11477,\n         \"##our\": 9832,\n         \"##ous\": 9822,\n         \"##out\": 9408,\n         \"##ov\": 11689,\n         \"##ova\": 13067,\n         \"##over\": 11436,\n         \"##ow\": 9024,\n         \"##own\": 11751,\n         \"##ox\": 9747,\n         \"##oy\": 12532,\n         \"##oz\": 13102,\n         \"##p\": 8187,\n         \"##pa\": 8797,\n         \"##pact\": 12624,\n         \"##pad\": 10730,\n         \"##page\": 11817,\n         \"##pan\": 12297,\n         \"##pass\": 13206,\n         \"##pc\": 10022,\n         \"##pd\": 11693,\n         \"##pe\": 8619,\n         \"##per\": 9063,\n         \"##ph\": 12465,\n         \"##pi\": 9664,\n         \"##pin\": 13248,\n         \"##ping\": 10755,\n         \"##pl\": 12569,\n         \"##play\": 10324,\n         \"##ple\": 10383,\n         \"##plus\": 9682,\n         \"##pm\": 9280,\n         \"##pmlast\": 12138,\n         \"##pn\": 12991,\n         \"##po\": 9401,\n         \"##pods\": 13284,\n         \"##point\": 11112,\n         \"##pop\": 13015,\n         \"##port\": 9356,\n         \"##post\": 11719,\n         \"##posted\": 12717,\n         \"##pp\": 9586,\n         \"##pper\": 11413,\n         \"##ppy\": 12738,\n         \"##pr\": 11426,\n         \"##press\": 12300,\n         \"##price\": 13087,\n         \"##pro\": 10538,\n         \"##ps\": 8525,\n         \"##pt\": 10789,\n         \"##pu\": 11016,\n         \"##public\": 13105,\n         \"##pus\": 12657,\n         \"##put\": 11300,\n         \"##px\": 10605,\n         \"##py\": 11610,\n         \"##q\": 8326,\n         \"##qi\": 11451,\n         \"##ql\": 11083,\n         \"##qq\": 10624,\n         \"##que\": 9477,\n         \"##ques\": 12503,\n         \"##r\": 8180,\n         \"##r3\": 12549,\n         \"##r4\": 13032,\n         \"##ra\": 8332,\n         \"##rade\": 10287,\n         \"##rail\": 12783,\n         \"##rain\": 11944,\n         \"##ral\": 10482,\n         \"##ram\": 9661,\n         \"##rame\": 13185,\n         \"##ran\": 10477,\n         \"##rant\": 10834,\n         \"##rap\": 11893,\n         \"##raph\": 12220,\n         \"##ration\": 11103,\n         \"##ray\": 10009,\n         \"##rc\": 10227,\n         \"##rcle\": 12466,\n         \"##rd\": 8642,\n         \"##rder\": 12658,\n         \"##rdon\": 12702,\n         \"##re\": 8358,\n         \"##rea\": 12551,\n         \"##read\": 10314,\n         \"##ream\": 11714,\n         \"##rect\": 13075,\n         \"##red\": 9749,\n         \"##ree\": 11621,\n         \"##reen\": 10902,\n         \"##ren\": 9489,\n         \"##rence\": 12743,\n         \"##rent\": 10858,\n         \"##res\": 9683,\n         \"##ress\": 11142,\n         \"##rex\": 12437,\n         \"##rey\": 11492,\n         \"##rf\": 10531,\n         \"##rge\": 10756,\n         \"##ri\": 8641,\n         \"##ria\": 10159,\n         \"##rial\": 10358,\n         \"##rian\": 12475,\n         \"##ric\": 11748,\n         \"##rid\": 10804,\n         \"##rie\": 11062,\n         \"##ries\": 11665,\n         \"##right\": 11264,\n         \"##rin\": 13250,\n         \"##ring\": 10734,\n         \"##rio\": 12062,\n         \"##rip\": 12332,\n         \"##ris\": 9848,\n         \"##rite\": 11366,\n         \"##rity\": 12079,\n         \"##rix\": 13208,\n         \"##rk\": 10364,\n         \"##rl\": 9923,\n         \"##rley\": 13290,\n         \"##rm\": 9592,\n         \"##rma\": 13156,\n         \"##rman\": 11386,\n         \"##rmb\": 10894,\n         \"##rmin\": 13116,\n         \"##rn\": 9256,\n         \"##rner\": 11012,\n         \"##ro\": 8607,\n         \"##ron\": 8991,\n         \"##room\": 12193,\n         \"##ros\": 12409,\n         \"##row\": 10570,\n         \"##rp\": 9980,\n         \"##rr\": 12579,\n         \"##rris\": 11818,\n         \"##rry\": 9249,\n         \"##rs\": 8640,\n         \"##rss\": 12281,\n         \"##rt\": 8716,\n         \"##rtex\": 12877,\n         \"##rth\": 11207,\n         \"##ru\": 10409,\n         \"##rum\": 11075,\n         \"##rus\": 10051,\n         \"##ry\": 8449,\n         \"##s\": 8118,\n         \"##sa\": 8606,\n         \"##said\": 8944,\n         \"##san\": 10978,\n         \"##sc\": 10203,\n         \"##sch\": 13107,\n         \"##sco\": 11364,\n         \"##sd\": 10117,\n         \"##sday\": 12956,\n         \"##se\": 8417,\n         \"##self\": 13061,\n         \"##sen\": 10387,\n         \"##sent\": 11836,\n         \"##ser\": 9520,\n         \"##ses\": 12856,\n         \"##set\": 9852,\n         \"##sh\": 8613,\n         \"##sha\": 12772,\n         \"##share\": 11042,\n         \"##shi\": 9655,\n         \"##shine\": 12922,\n         \"##ship\": 11987,\n         \"##shop\": 10940,\n         \"##shot\": 11125,\n         \"##si\": 9182,\n         \"##sia\": 12557,\n         \"##side\": 11756,\n         \"##sio\": 12266,\n         \"##sion\": 9224,\n         \"##sis\": 10500,\n         \"##sit\": 12618,\n         \"##site\": 11479,\n         \"##sk\": 8998,\n         \"##skip\": 12724,\n         \"##sky\": 11700,\n         \"##sl\": 11066,\n         \"##sm\": 10244,\n         \"##sn\": 12480,\n         \"##so\": 9974,\n         \"##sol\": 12257,\n         \"##son\": 8535,\n         \"##sp\": 10367,\n         \"##space\": 12246,\n         \"##ss\": 8565,\n         \"##sse\": 12754,\n         \"##ssion\": 12726,\n         \"##sson\": 12582,\n         \"##st\": 8415,\n         \"##sta\": 10949,\n         \"##stack\": 12511,\n         \"##star\": 10297,\n         \"##ste\": 11881,\n         \"##ster\": 8996,\n         \"##stin\": 12921,\n         \"##stle\": 13026,\n         \"##ston\": 10229,\n         \"##stone\": 12795,\n         \"##stro\": 12976,\n         \"##stry\": 11001,\n         \"##style\": 10001,\n         \"##su\": 11442,\n         \"##sue\": 11872,\n         \"##sun\": 11798,\n         \"##sy\": 10178,\n         \"##t\": 8165,\n         \"##t00\": 9260,\n         \"##ta\": 8383,\n         \"##table\": 12477,\n         \"##tag\": 11882,\n         \"##tags\": 11313,\n         \"##tail\": 11662,\n         \"##tal\": 9917,\n         \"##talk\": 12534,\n         \"##tan\": 10105,\n         \"##tant\": 12028,\n         \"##tar\": 10216,\n         \"##tation\": 12386,\n         \"##tax\": 13155,\n         \"##tb\": 11126,\n         \"##tc\": 10149,\n         \"##tch\": 9496,\n         \"##te\": 8299,\n         \"##tech\": 11761,\n         \"##ted\": 9255,\n         \"##tee\": 12729,\n         \"##tein\": 12508,\n         \"##tel\": 11246,\n         \"##ten\": 11598,\n         \"##ter\": 8457,\n         \"##ters\": 12017,\n         \"##tes\": 9420,\n         \"##test\": 11574,\n         \"##text\": 11816,\n         \"##tf\": 11359,\n         \"##th\": 8414,\n         \"##the\": 11334,\n         \"##ther\": 10198,\n         \"##thing\": 12012,\n         \"##ti\": 9007,\n         \"##tic\": 9759,\n         \"##tical\": 11912,\n         \"##tics\": 11130,\n         \"##tier\": 11955,\n         \"##ties\": 11199,\n         \"##time\": 9785,\n         \"##times\": 12288,\n         \"##tin\": 10400,\n         \"##tina\": 10584,\n         \"##ting\": 9107,\n         \"##tings\": 13288,\n         \"##tion\": 8361,\n         \"##tional\": 11852,\n         \"##tions\": 9652,\n         \"##tis\": 10827,\n         \"##tive\": 9741,\n         \"##tl\": 12305,\n         \"##tle\": 11283,\n         \"##tm\": 10774,\n         \"##tment\": 12986,\n         \"##to\": 8527,\n         \"##tom\": 11686,\n         \"##ton\": 8626,\n         \"##tone\": 11902,\n         \"##top\": 10075,\n         \"##tor\": 8713,\n         \"##tore\": 12941,\n         \"##tors\": 13270,\n         \"##tory\": 12608,\n         \"##tos\": 12920,\n         \"##town\": 11323,\n         \"##tp\": 10880,\n         \"##tr\": 11309,\n         \"##tra\": 9808,\n         \"##trix\": 12749,\n         \"##tro\": 11343,\n         \"##try\": 11589,\n         \"##ts\": 8723,\n         \"##tsu\": 12230,\n         \"##tt\": 9235,\n         \"##tta\": 11245,\n         \"##tte\": 9786,\n         \"##tter\": 10766,\n         \"##tti\": 11279,\n         \"##tto\": 11403,\n         \"##tton\": 11190,\n         \"##tty\": 11160,\n         \"##tu\": 10455,\n         \"##ture\": 11704,\n         \"##tus\": 10356,\n         \"##tv\": 9171,\n         \"##tw\": 12278,\n         \"##twitter\": 12030,\n         \"##ty\": 8661,\n         \"##type\": 11085,\n         \"##tz\": 10228,\n         \"##u\": 8207,\n         \"##ua\": 9478,\n         \"##ual\": 10665,\n         \"##uality\": 13145,\n         \"##uan\": 9680,\n         \"##uard\": 12589,\n         \"##ub\": 10544,\n         \"##ube\": 10957,\n         \"##uc\": 13139,\n         \"##uce\": 12051,\n         \"##uch\": 12752,\n         \"##uck\": 11971,\n         \"##ud\": 9849,\n         \"##ude\": 11997,\n         \"##ue\": 8803,\n         \"##uel\": 11866,\n         \"##ug\": 11838,\n         \"##ugh\": 12667,\n         \"##ui\": 9273,\n         \"##uid\": 12520,\n         \"##uk\": 10687,\n         \"##ul\": 10086,\n         \"##ula\": 10456,\n         \"##ular\": 10764,\n         \"##ule\": 10724,\n         \"##ull\": 12316,\n         \"##ult\": 9766,\n         \"##um\": 8545,\n         \"##uma\": 13083,\n         \"##ume\": 11465,\n         \"##ument\": 11867,\n         \"##un\": 8829,\n         \"##unch\": 11294,\n         \"##und\": 9914,\n         \"##ung\": 9112,\n         \"##unge\": 13077,\n         \"##uo\": 9731,\n         \"##up\": 8838,\n         \"##ur\": 8685,\n         \"##ura\": 10238,\n         \"##ure\": 8813,\n         \"##urg\": 13143,\n         \"##url\": 12373,\n         \"##urn\": 12760,\n         \"##urs\": 11575,\n         \"##urt\": 10857,\n         \"##ury\": 11117,\n         \"##us\": 8293,\n         \"##use\": 10254,\n         \"##ush\": 12670,\n         \"##ust\": 12840,\n         \"##ut\": 9194,\n         \"##ute\": 9710,\n         \"##ux\": 9549,\n         \"##uy\": 12574,\n         \"##v\": 8225,\n         \"##v4\": 12507,\n         \"##va\": 8786,\n         \"##val\": 9957,\n         \"##van\": 13045,\n         \"##vas\": 12239,\n         \"##vc\": 12077,\n         \"##vd\": 10754,\n         \"##ve\": 8519,\n         \"##ved\": 11667,\n         \"##vel\": 10588,\n         \"##ven\": 10844,\n         \"##ver\": 8984,\n         \"##verse\": 11174,\n         \"##vertisement\": 12021,\n         \"##ves\": 11084,\n         \"##vg\": 12781,\n         \"##vi\": 9197,\n         \"##via\": 9490,\n         \"##vic\": 11956,\n         \"##vice\": 10666,\n         \"##view\": 8892,\n         \"##ville\": 10388,\n         \"##vin\": 10454,\n         \"##ving\": 10369,\n         \"##vis\": 11233,\n         \"##vm\": 10318,\n         \"##vo\": 10701,\n         \"##vr\": 10131,\n         \"##vs\": 11521,\n         \"##vy\": 11853,\n         \"##w\": 8220,\n         \"##wa\": 9161,\n         \"##walk\": 12621,\n         \"##walker\": 12630,\n         \"##wan\": 9951,\n         \"##wang\": 10365,\n         \"##ward\": 11612,\n         \"##ware\": 10534,\n         \"##watch\": 9907,\n         \"##way\": 8824,\n         \"##ways\": 11672,\n         \"##wd\": 11681,\n         \"##we\": 11722,\n         \"##web\": 9944,\n         \"##wei\": 12320,\n         \"##well\": 9665,\n         \"##wen\": 10861,\n         \"##wer\": 10668,\n         \"##west\": 11887,\n         \"##wf\": 12242,\n         \"##wi\": 10958,\n         \"##win\": 10237,\n         \"##wing\": 13070,\n         \"##wn\": 10799,\n         \"##wo\": 10911,\n         \"##wood\": 9730,\n         \"##word\": 10184,\n         \"##work\": 12282,\n         \"##works\": 10054,\n         \"##world\": 10120,\n         \"##ws\": 10402,\n         \"##wt\": 12271,\n         \"##wu\": 12144,\n         \"##www\": 9718,\n         \"##x\": 8206,\n         \"##x2\": 12505,\n         \"##x5\": 12704,\n         \"##xi\": 10201,\n         \"##xon\": 12854,\n         \"##xp\": 11379,\n         \"##xt\": 12452,\n         \"##xure\": 12622,\n         \"##xx\": 9517,\n         \"##xxx\": 12812,\n         \"##xy\": 11038,\n         \"##y\": 8179,\n         \"##ya\": 8741,\n         \"##yan\": 10777,\n         \"##ye\": 10522,\n         \"##yer\": 10955,\n         \"##yi\": 11017,\n         \"##ym\": 12267,\n         \"##yn\": 10879,\n         \"##yo\": 10222,\n         \"##you\": 12441,\n         \"##ys\": 9449,\n         \"##yu\": 10329,\n         \"##yy\": 12642,\n         \"##z\": 8253,\n         \"##za\": 9283,\n         \"##ze\": 9349,\n         \"##zen\": 10549,\n         \"##zer\": 10631,\n         \"##zi\": 10112,\n         \"##zl\": 12961,\n         \"##zo\": 10121,\n         \"##zon\": 10623,\n         \"##zone\": 11004,\n         \"##zu\": 13085,\n         \"##zy\": 9748,\n         \"##zz\": 9409,\n         \"##zzi\": 12939,\n         \"##{\": 13344,\n         \"##|\": 13345,\n         \"##}\": 13346,\n         \"##~\": 13347,\n         \"##£\": 13348,\n         \"##¤\": 13349,\n         \"##¥\": 13350,\n         \"##§\": 13351,\n         \"##©\": 13278,\n         \"##«\": 13352,\n         \"##®\": 8646,\n         \"##°\": 8724,\n         \"##°c\": 9953,\n         \"##±\": 13353,\n         \"##²\": 11699,\n         \"##³\": 13354,\n         \"##µ\": 13355,\n         \"##·\": 13356,\n         \"##¹\": 13357,\n         \"##º\": 13358,\n         \"##»\": 13359,\n         \"##¼\": 13360,\n         \"##×\": 9569,\n         \"##ß\": 13361,\n         \"##æ\": 13362,\n         \"##÷\": 13363,\n         \"##ø\": 13364,\n         \"##đ\": 13365,\n         \"##ŋ\": 13366,\n         \"##ɔ\": 13367,\n         \"##ə\": 13368,\n         \"##ɡ\": 13369,\n         \"##ʰ\": 13370,\n         \"##ˇ\": 13371,\n         \"##ˈ\": 13372,\n         \"##ˊ\": 13373,\n         \"##ˋ\": 13374,\n         \"##ˍ\": 13375,\n         \"##ː\": 13376,\n         \"##˙\": 13377,\n         \"##˚\": 13378,\n         \"##ˢ\": 13379,\n         \"##α\": 13380,\n         \"##β\": 13381,\n         \"##γ\": 13382,\n         \"##δ\": 13383,\n         \"##ε\": 13384,\n         \"##η\": 13385,\n         \"##θ\": 13386,\n         \"##ι\": 13387,\n         \"##κ\": 13388,\n         \"##λ\": 13389,\n         \"##μ\": 13390,\n         \"##ν\": 13391,\n         \"##ο\": 13392,\n         \"##π\": 13393,\n         \"##ρ\": 13394,\n         \"##ς\": 13395,\n         \"##σ\": 13396,\n         \"##τ\": 13397,\n         \"##υ\": 13398,\n         \"##φ\": 13399,\n         \"##χ\": 13400,\n         \"##ψ\": 13401,\n         \"##ω\": 10506,\n         \"##а\": 11318,\n         \"##б\": 13402,\n         \"##в\": 13403,\n         \"##г\": 13404,\n         \"##д\": 13405,\n         \"##е\": 13406,\n         \"##ж\": 13407,\n         \"##з\": 13408,\n         \"##и\": 11000,\n         \"##к\": 13409,\n         \"##л\": 13410,\n         \"##м\": 13411,\n         \"##н\": 13412,\n         \"##о\": 13413,\n         \"##п\": 13414,\n         \"##р\": 13415,\n         \"##с\": 13416,\n         \"##т\": 13417,\n         \"##у\": 13418,\n         \"##ф\": 13419,\n         \"##х\": 13420,\n         \"##ц\": 13421,\n         \"##ч\": 13422,\n         \"##ш\": 13423,\n         \"##ы\": 13424,\n         \"##ь\": 13425,\n         \"##я\": 12992,\n         \"##і\": 13426,\n         \"##ا\": 13427,\n         \"##ب\": 13428,\n         \"##ة\": 13429,\n         \"##ت\": 13430,\n         \"##د\": 13431,\n         \"##ر\": 13432,\n         \"##س\": 13433,\n         \"##ع\": 13434,\n         \"##ل\": 13435,\n         \"##م\": 13436,\n         \"##ن\": 13437,\n         \"##ه\": 13438,\n         \"##و\": 13439,\n         \"##ي\": 13440,\n         \"##۩\": 13441,\n         \"##ก\": 13442,\n         \"##ง\": 13443,\n         \"##น\": 13444,\n         \"##ม\": 13445,\n         \"##ย\": 13446,\n         \"##ร\": 13447,\n         \"##อ\": 13448,\n         \"##า\": 13449,\n         \"##เ\": 13450,\n         \"##๑\": 13451,\n         \"##་\": 13452,\n         \"##ღ\": 13453,\n         \"##ᄀ\": 13454,\n         \"##ᄁ\": 13455,\n         \"##ᄂ\": 13456,\n         \"##ᄃ\": 13457,\n         \"##ᄅ\": 13458,\n         \"##ᄆ\": 13459,\n         \"##ᄇ\": 13460,\n         \"##ᄈ\": 13461,\n         \"##ᄉ\": 13462,\n         \"##ᄋ\": 13463,\n         \"##ᄌ\": 13464,\n         \"##ᄎ\": 13465,\n         \"##ᄏ\": 13466,\n         \"##ᄐ\": 13467,\n         \"##ᄑ\": 13468,\n         \"##ᄒ\": 13469,\n         \"##ᅡ\": 10928,\n         \"##ᅢ\": 13470,\n         \"##ᅣ\": 13471,\n         \"##ᅥ\": 13472,\n         \"##ᅦ\": 13473,\n         \"##ᅧ\": 13474,\n         \"##ᅨ\": 13475,\n         \"##ᅩ\": 13005,\n         \"##ᅪ\": 13476,\n         \"##ᅬ\": 13477,\n         \"##ᅭ\": 13478,\n         \"##ᅮ\": 13479,\n         \"##ᅯ\": 13480,\n         \"##ᅲ\": 13481,\n         \"##ᅳ\": 13482,\n         \"##ᅴ\": 13483,\n         \"##ᅵ\": 10787,\n         \"##ᆨ\": 11953,\n         \"##ᆫ\": 9877,\n         \"##ᆯ\": 11596,\n         \"##ᆷ\": 13484,\n         \"##ᆸ\": 13485,\n         \"##ᆺ\": 13486,\n         \"##ᆻ\": 13487,\n         \"##ᆼ\": 10945,\n         \"##ᗜ\": 13488,\n         \"##ᵃ\": 13489,\n         \"##ᵉ\": 13490,\n         \"##ᵍ\": 13491,\n         \"##ᵏ\": 13492,\n         \"##ᵐ\": 13493,\n         \"##ᵒ\": 13494,\n         \"##ᵘ\": 13495,\n         \"##‖\": 13496,\n         \"##„\": 13497,\n         \"##†\": 13498,\n         \"##•\": 13499,\n         \"##‥\": 13500,\n         \"##‧\": 13501,\n         \"## \": 13502,\n         \"##‰\": 13503,\n         \"##′\": 13504,\n         \"##″\": 13505,\n         \"##‹\": 13506,\n         \"##›\": 13507,\n         \"##※\": 13508,\n         \"##‿\": 13509,\n         \"##⁄\": 13510,\n         \"##ⁱ\": 13511,\n         \"##⁺\": 13512,\n         \"##ⁿ\": 13513,\n         \"##₁\": 13514,\n         \"##₂\": 12831,\n         \"##₃\": 13515,\n         \"##₄\": 13516,\n         \"##€\": 13517,\n         \"##℃\": 8320,\n         \"##№\": 13518,\n         \"##™\": 9221,\n         \"##ⅰ\": 13519,\n         \"##ⅱ\": 13520,\n         \"##ⅲ\": 13521,\n         \"##ⅳ\": 13522,\n         \"##ⅴ\": 13523,\n         \"##←\": 13018,\n         \"##↑\": 10839,\n         \"##→\": 10057,\n         \"##↓\": 12414,\n         \"##↔\": 13524,\n         \"##↗\": 13525,\n         \"##↘\": 13526,\n         \"##⇒\": 13527,\n         \"##∀\": 13528,\n         \"##−\": 13529,\n         \"##∕\": 13530,\n         \"##∙\": 13531,\n         \"##√\": 13532,\n         \"##∞\": 13533,\n         \"##∟\": 13534,\n         \"##∠\": 13535,\n         \"##∣\": 13536,\n         \"##∥\": 10458,\n         \"##∩\": 13537,\n         \"##∮\": 13538,\n         \"##∶\": 13539,\n         \"##∼\": 13540,\n         \"##∽\": 13541,\n         \"##≈\": 13542,\n         \"##≒\": 13543,\n         \"##≡\": 13544,\n         \"##≤\": 13545,\n         \"##≥\": 13546,\n         \"##≦\": 13547,\n         \"##≧\": 13548,\n         \"##≪\": 13549,\n         \"##≫\": 13550,\n         \"##⊙\": 13551,\n         \"##⋅\": 13552,\n         \"##⋈\": 13553,\n         \"##⋯\": 13554,\n         \"##⌒\": 13555,\n         \"##①\": 13556,\n         \"##②\": 13557,\n         \"##③\": 13558,\n         \"##④\": 13559,\n         \"##⑤\": 13560,\n         \"##⑥\": 13561,\n         \"##⑦\": 13562,\n         \"##⑧\": 13563,\n         \"##⑨\": 13564,\n         \"##⑩\": 13565,\n         \"##⑴\": 13566,\n         \"##⑵\": 13567,\n         \"##⑶\": 13568,\n         \"##⑷\": 13569,\n         \"##⑸\": 13570,\n         \"##⒈\": 13571,\n         \"##⒉\": 13572,\n         \"##⒊\": 13573,\n         \"##⒋\": 13574,\n         \"##ⓒ\": 13575,\n         \"##ⓔ\": 13576,\n         \"##ⓘ\": 13577,\n         \"##─\": 11473,\n         \"##━\": 13578,\n         \"##│\": 11958,\n         \"##┃\": 13579,\n         \"##┅\": 13312,\n         \"##┆\": 13580,\n         \"##┊\": 13581,\n         \"##┌\": 13582,\n         \"##└\": 13583,\n         \"##├\": 13584,\n         \"##┣\": 13585,\n         \"##═\": 13586,\n         \"##║\": 13587,\n         \"##╚\": 13588,\n         \"##╞\": 13589,\n         \"##╠\": 13590,\n         \"##╭\": 13591,\n         \"##╮\": 13592,\n         \"##╯\": 13593,\n         \"##╰\": 13594,\n         \"##╱\": 13595,\n         \"##╳\": 13596,\n         \"##▂\": 13597,\n         \"##▃\": 13598,\n         \"##▅\": 13599,\n         \"##▇\": 13600,\n         \"##█\": 12740,\n         \"##▉\": 13601,\n         \"##▋\": 13602,\n         \"##▌\": 13603,\n         \"##▍\": 13604,\n         \"##▎\": 13605,\n         \"##■\": 10819,\n         \"##□\": 13606,\n         \"##▪\": 13607,\n         \"##▫\": 13608,\n         \"##▬\": 13609,\n         \"##▲\": 9887,\n         \"##△\": 13610,\n         \"##▶\": 13611,\n         \"##►\": 13612,\n         \"##▼\": 10264,\n         \"##▽\": 13613,\n         \"##◆\": 10497,\n         \"##◆◆\": 13019,\n         \"##◇\": 13614,\n         \"##○\": 10299,\n         \"##◎\": 11375,\n         \"##●\": 9037,\n         \"##◕\": 13615,\n         \"##◠\": 13616,\n         \"##◢\": 13617,\n         \"##◤\": 13618,\n         \"##☀\": 13619,\n         \"##★\": 8664,\n         \"##☆\": 8994,\n         \"##☕\": 13620,\n         \"##☞\": 13621,\n         \"##☺\": 13622,\n         \"##☼\": 13623,\n         \"##♀\": 13624,\n         \"##♂\": 13625,\n         \"##♠\": 13626,\n         \"##♡\": 13627,\n         \"##♣\": 13628,\n         \"##♥\": 9177,\n         \"##♦\": 13629,\n         \"##♪\": 9458,\n         \"##♫\": 13630,\n         \"##♬\": 13631,\n         \"##✈\": 13632,\n         \"##✔\": 13633,\n         \"##✕\": 13634,\n         \"##✖\": 13635,\n         \"##✦\": 13636,\n         \"##✨\": 13637,\n         \"##✪\": 13638,\n         \"##✰\": 13639,\n         \"##✿\": 13640,\n         \"##❀\": 13641,\n         \"##❤\": 10269,\n         \"##➜\": 13642,\n         \"##➤\": 13643,\n         \"##⦿\": 13644,\n         \"##、\": 13645,\n         \"##。\": 13646,\n         \"##〃\": 13647,\n         \"##々\": 13648,\n         \"##〇\": 13649,\n         \"##〈\": 13650,\n         \"##〉\": 13651,\n         \"##《\": 13652,\n         \"##》\": 13653,\n         \"##「\": 13654,\n         \"##」\": 13655,\n         \"##『\": 13656,\n         \"##』\": 13657,\n         \"##【\": 13658,\n         \"##】\": 13659,\n         \"##〓\": 13660,\n         \"##〔\": 13661,\n         \"##〕\": 13662,\n         \"##〖\": 13663,\n         \"##〗\": 13664,\n         \"##〜\": 13665,\n         \"##〝\": 13666,\n         \"##〞\": 13667,\n         \"##ぁ\": 12661,\n         \"##あ\": 12146,\n         \"##あなたに\": 12774,\n         \"##あり\": 9362,\n         \"##あります\": 10700,\n         \"##ありません\": 10769,\n         \"##ある\": 9762,\n         \"##ぃ\": 13668,\n         \"##い\": 8524,\n         \"##いい\": 12993,\n         \"##いた\": 10526,\n         \"##いて\": 10042,\n         \"##いました\": 11350,\n         \"##います\": 9184,\n         \"##いる\": 9317,\n         \"##いるのて\": 11443,\n         \"##う\": 8981,\n         \"##ぇ\": 13669,\n         \"##え\": 11661,\n         \"##お\": 8345,\n         \"##おり\": 11438,\n         \"##おります\": 9797,\n         \"##か\": 8261,\n         \"##かあります\": 12145,\n         \"##かった\": 11299,\n         \"##かな\": 13081,\n         \"##かも\": 12984,\n         \"##から\": 8825,\n         \"##かり\": 11554,\n         \"##かる\": 11571,\n         \"##き\": 8816,\n         \"##きた\": 12775,\n         \"##きました\": 12055,\n         \"##きます\": 12506,\n         \"##く\": 8763,\n         \"##くたさい\": 9175,\n         \"##くれる\": 11241,\n         \"##け\": 9525,\n         \"##けて\": 12214,\n         \"##けと\": 10095,\n         \"##ける\": 11760,\n         \"##こ\": 8557,\n         \"##こさいます\": 10286,\n         \"##こと\": 11127,\n         \"##ことか\": 10274,\n         \"##ことかてきます\": 13064,\n         \"##ことて\": 11178,\n         \"##ことを\": 12236,\n         \"##この\": 11087,\n         \"##さ\": 11647,\n         \"##さん\": 10874,\n         \"##し\": 8733,\n         \"##しい\": 10899,\n         \"##した\": 9442,\n         \"##して\": 9379,\n         \"##しています\": 12478,\n         \"##します\": 9294,\n         \"##す\": 8764,\n         \"##すか\": 11805,\n         \"##する\": 9840,\n         \"##せ\": 10452,\n         \"##そ\": 10778,\n         \"##その\": 10372,\n         \"##た\": 8856,\n         \"##たい\": 10722,\n         \"##たけて\": 12928,\n         \"##ため\": 10312,\n         \"##ために\": 12260,\n         \"##ち\": 9967,\n         \"##ちの\": 12712,\n         \"##ちは\": 12951,\n         \"##ちゃん\": 12875,\n         \"##っ\": 12934,\n         \"##った\": 9190,\n         \"##って\": 9067,\n         \"##っています\": 11822,\n         \"##っと\": 10475,\n         \"##つ\": 9775,\n         \"##て\": 8312,\n         \"##てお\": 12878,\n         \"##てきます\": 11088,\n         \"##てきる\": 11415,\n         \"##てす\": 8504,\n         \"##てすか\": 11278,\n         \"##ての\": 12852,\n         \"##ては\": 9809,\n         \"##ても\": 10508,\n         \"##と\": 8322,\n         \"##という\": 12383,\n         \"##とう\": 12471,\n         \"##とても\": 13211,\n         \"##との\": 13066,\n         \"##とは\": 11896,\n         \"##な\": 8730,\n         \"##ない\": 8560,\n         \"##なから\": 11943,\n         \"##なく\": 10395,\n         \"##なたの\": 11002,\n         \"##なった\": 12102,\n         \"##なと\": 11710,\n         \"##なら\": 10145,\n         \"##なり\": 11592,\n         \"##なりました\": 12533,\n         \"##なります\": 11293,\n         \"##なる\": 11666,\n         \"##に\": 8294,\n         \"##にお\": 12337,\n         \"##には\": 10410,\n         \"##ぬ\": 13670,\n         \"##ね\": 8900,\n         \"##の\": 8227,\n         \"##のお\": 10217,\n         \"##のか\": 9584,\n         \"##のて\": 8618,\n         \"##のてす\": 12385,\n         \"##のてすか\": 13221,\n         \"##のに\": 12813,\n         \"##のは\": 10093,\n         \"##は\": 8319,\n         \"##ひ\": 11224,\n         \"##ふ\": 13671,\n         \"##へ\": 11320,\n         \"##へて\": 12864,\n         \"##ほ\": 13672,\n         \"##ま\": 9774,\n         \"##ました\": 8861,\n         \"##ましょう\": 10759,\n         \"##ます\": 8643,\n         \"##ますのて\": 13071,\n         \"##ません\": 9035,\n         \"##ませんか\": 9862,\n         \"##また\": 13150,\n         \"##まて\": 10737,\n         \"##み\": 9344,\n         \"##みませんか\": 11775,\n         \"##む\": 13673,\n         \"##め\": 10063,\n         \"##めて\": 12274,\n         \"##も\": 8435,\n         \"##ゃ\": 13674,\n         \"##や\": 9164,\n         \"##やり\": 11077,\n         \"##ゅ\": 13675,\n         \"##ゆ\": 13676,\n         \"##ょ\": 13677,\n         \"##ょう\": 11663,\n         \"##よ\": 9427,\n         \"##よう\": 10177,\n         \"##ような\": 10895,\n         \"##ように\": 10847,\n         \"##よって\": 12957,\n         \"##より\": 10190,\n         \"##ら\": 8732,\n         \"##り\": 8506,\n         \"##りの\": 12407,\n         \"##ります\": 11395,\n         \"##る\": 8481,\n         \"##れ\": 9223,\n         \"##れた\": 10679,\n         \"##れて\": 12034,\n         \"##れている\": 11856,\n         \"##れは\": 9170,\n         \"##れます\": 11745,\n         \"##れる\": 10273,\n         \"##ろ\": 10460,\n         \"##ろう\": 12792,\n         \"##わ\": 11940,\n         \"##を\": 8292,\n         \"##をお\": 11236,\n         \"##をこ\": 12335,\n         \"##ん\": 8814,\n         \"##んて\": 12098,\n         \"##んな\": 10386,\n         \"##゜\": 13678,\n         \"##ゝ\": 13679,\n         \"##ァ\": 13680,\n         \"##ア\": 9788,\n         \"##ィ\": 12403,\n         \"##イ\": 9509,\n         \"##イス\": 13203,\n         \"##イト\": 10516,\n         \"##イフ\": 12692,\n         \"##イン\": 10108,\n         \"##ゥ\": 13681,\n         \"##ウ\": 12891,\n         \"##ェ\": 12690,\n         \"##エ\": 13682,\n         \"##ォ\": 13683,\n         \"##オ\": 11238,\n         \"##カ\": 9770,\n         \"##カー\": 10175,\n         \"##キ\": 10781,\n         \"##キンク\": 11505,\n         \"##ク\": 9625,\n         \"##クok\": 13040,\n         \"##クセス\": 13311,\n         \"##ケ\": 13684,\n         \"##コ\": 10155,\n         \"##コメント\": 13301,\n         \"##サ\": 13685,\n         \"##サイト\": 11618,\n         \"##サー\": 12636,\n         \"##シ\": 10472,\n         \"##シャンルの\": 11947,\n         \"##ション\": 10798,\n         \"##ス\": 8551,\n         \"##スト\": 10579,\n         \"##セ\": 13686,\n         \"##ソ\": 13687,\n         \"##タ\": 11011,\n         \"##ター\": 10848,\n         \"##チ\": 10202,\n         \"##ッ\": 13688,\n         \"##ック\": 9244,\n         \"##ッセーシを\": 11231,\n         \"##ット\": 9187,\n         \"##ッフ\": 10023,\n         \"##ツ\": 10419,\n         \"##テ\": 11903,\n         \"##ティー\": 12841,\n         \"##テル\": 12181,\n         \"##ト\": 8807,\n         \"##ナ\": 10714,\n         \"##ナー\": 12005,\n         \"##ニ\": 13689,\n         \"##ニア\": 12650,\n         \"##ヌ\": 13690,\n         \"##ネ\": 13691,\n         \"##ノ\": 13692,\n         \"##ハ\": 12838,\n         \"##ハー\": 10977,\n         \"##ヒ\": 10374,\n         \"##フ\": 9383,\n         \"##フト\": 10868,\n         \"##ヘ\": 13693,\n         \"##ホ\": 12889,\n         \"##マ\": 9760,\n         \"##ミ\": 10688,\n         \"##ム\": 9227,\n         \"##メ\": 10597,\n         \"##モ\": 13694,\n         \"##ャ\": 13695,\n         \"##ヤ\": 13696,\n         \"##ュ\": 13697,\n         \"##ュー\": 12778,\n         \"##ユ\": 13698,\n         \"##ョ\": 13699,\n         \"##ヨ\": 13700,\n         \"##ラ\": 9210,\n         \"##ラン\": 12048,\n         \"##リ\": 9754,\n         \"##リア\": 11989,\n         \"##リー\": 10535,\n         \"##ル\": 8492,\n         \"##ルハイト\": 13304,\n         \"##ルフ\": 12968,\n         \"##レ\": 10416,\n         \"##レス\": 12696,\n         \"##ロ\": 10068,\n         \"##ロク\": 11416,\n         \"##ワ\": 13701,\n         \"##ヲ\": 13702,\n         \"##ン\": 8489,\n         \"##ンク\": 9262,\n         \"##ンス\": 12090,\n         \"##ンター\": 11223,\n         \"##ント\": 10002,\n         \"##ヶ\": 10569,\n         \"##・\": 13703,\n         \"##ー\": 8568,\n         \"##ーク\": 12952,\n         \"##ーシ\": 10568,\n         \"##ーシてす\": 12583,\n         \"##ーション\": 12301,\n         \"##ース\": 10840,\n         \"##ータ\": 12219,\n         \"##ート\": 9006,\n         \"##ーム\": 9975,\n         \"##ール\": 9424,\n         \"##ールを\": 10994,\n         \"##ーン\": 12966,\n         \"##ヽ\": 13704,\n         \"##ㄅ\": 13705,\n         \"##ㄆ\": 13706,\n         \"##ㄇ\": 13707,\n         \"##ㄉ\": 13708,\n         \"##ㄋ\": 13709,\n         \"##ㄌ\": 13710,\n         \"##ㄍ\": 13711,\n         \"##ㄎ\": 13712,\n         \"##ㄏ\": 13713,\n         \"##ㄒ\": 13714,\n         \"##ㄚ\": 13715,\n         \"##ㄛ\": 13716,\n         \"##ㄞ\": 13717,\n         \"##ㄟ\": 13718,\n         \"##ㄢ\": 13719,\n         \"##ㄤ\": 13720,\n         \"##ㄥ\": 13721,\n         \"##ㄧ\": 13722,\n         \"##ㄨ\": 13723,\n         \"##ㆍ\": 13724,\n         \"##㈦\": 13725,\n         \"##㊣\": 13726,\n         \"##㎡\": 9236,\n         \"##㗎\": 13727,\n         \"##一\": 13728,\n         \"##丁\": 13729,\n         \"##七\": 13730,\n         \"##万\": 13731,\n         \"##丈\": 13732,\n         \"##三\": 13733,\n         \"##上\": 13734,\n         \"##下\": 13735,\n         \"##不\": 13736,\n         \"##与\": 13737,\n         \"##丐\": 13738,\n         \"##丑\": 13739,\n         \"##专\": 13740,\n         \"##且\": 13741,\n         \"##丕\": 13742,\n         \"##世\": 13743,\n         \"##丘\": 13744,\n         \"##丙\": 13745,\n         \"##业\": 13746,\n         \"##丛\": 13747,\n         \"##东\": 13748,\n         \"##丝\": 13749,\n         \"##丞\": 13750,\n         \"##丟\": 13751,\n         \"##両\": 13752,\n         \"##丢\": 13753,\n         \"##两\": 13754,\n         \"##严\": 13755,\n         \"##並\": 13756,\n         \"##丧\": 13757,\n         \"##丨\": 13758,\n         \"##个\": 13759,\n         \"##丫\": 13760,\n         \"##中\": 13761,\n         \"##丰\": 13762,\n         \"##串\": 13763,\n         \"##临\": 13764,\n         \"##丶\": 13765,\n         \"##丸\": 13766,\n         \"##丹\": 13767,\n         \"##为\": 13768,\n         \"##主\": 13769,\n         \"##丼\": 13770,\n         \"##丽\": 13771,\n         \"##举\": 13772,\n         \"##丿\": 13773,\n         \"##乂\": 13774,\n         \"##乃\": 13775,\n         \"##久\": 13776,\n         \"##么\": 13777,\n         \"##义\": 13778,\n         \"##之\": 13779,\n         \"##乌\": 13780,\n         \"##乍\": 13781,\n         \"##乎\": 13782,\n         \"##乏\": 13783,\n         \"##乐\": 13784,\n         \"##乒\": 13785,\n         \"##乓\": 13786,\n         \"##乔\": 13787,\n         \"##乖\": 13788,\n         \"##乗\": 13789,\n         \"##乘\": 13790,\n         \"##乙\": 13791,\n         \"##乜\": 13792,\n         \"##九\": 13793,\n         \"##乞\": 13794,\n         \"##也\": 13795,\n         \"##习\": 13796,\n         \"##乡\": 13797,\n         \"##书\": 13798,\n         \"##乩\": 13799,\n         \"##买\": 13800,\n         \"##乱\": 13801,\n         \"##乳\": 13802,\n         \"##乾\": 13803,\n         \"##亀\": 13804,\n         \"##亂\": 13805,\n         \"##了\": 13806,\n         \"##予\": 13807,\n         \"##争\": 13808,\n         \"##事\": 13809,\n         \"##二\": 13810,\n         \"##于\": 13811,\n         \"##亏\": 13812,\n         \"##云\": 13813,\n         \"##互\": 13814,\n         \"##五\": 13815,\n         \"##井\": 13816,\n         \"##亘\": 13817,\n         \"##亙\": 13818,\n         \"##亚\": 13819,\n         \"##些\": 13820,\n         \"##亜\": 13821,\n         \"##亞\": 13822,\n         \"##亟\": 13823,\n         \"##亡\": 13824,\n         \"##亢\": 13825,\n         \"##交\": 13826,\n         \"##亥\": 13827,\n         \"##亦\": 13828,\n         \"##产\": 13829,\n         \"##亨\": 13830,\n         \"##亩\": 13831,\n         \"##享\": 13832,\n         \"##京\": 13833,\n         \"##亭\": 13834,\n         \"##亮\": 13835,\n         \"##亲\": 13836,\n         \"##亳\": 13837,\n         \"##亵\": 13838,\n         \"##人\": 13839,\n         \"##亿\": 13840,\n         \"##什\": 13841,\n         \"##仁\": 13842,\n         \"##仃\": 13843,\n         \"##仄\": 13844,\n         \"##仅\": 13845,\n         \"##仆\": 13846,\n         \"##仇\": 13847,\n         \"##今\": 13848,\n         \"##介\": 13849,\n         \"##仍\": 13850,\n         \"##从\": 13851,\n         \"##仏\": 13852,\n         \"##仑\": 13853,\n         \"##仓\": 13854,\n         \"##仔\": 13855,\n         \"##仕\": 13856,\n         \"##他\": 13857,\n         \"##仗\": 13858,\n         \"##付\": 13859,\n         \"##仙\": 13860,\n         \"##仝\": 13861,\n         \"##仞\": 13862,\n         \"##仟\": 13863,\n         \"##代\": 13864,\n         \"##令\": 13865,\n         \"##以\": 13866,\n         \"##仨\": 13867,\n         \"##仪\": 13868,\n         \"##们\": 13869,\n         \"##仮\": 13870,\n         \"##仰\": 13871,\n         \"##仲\": 13872,\n         \"##件\": 13873,\n         \"##价\": 13874,\n         \"##任\": 13875,\n         \"##份\": 13876,\n         \"##仿\": 13877,\n         \"##企\": 13878,\n         \"##伉\": 13879,\n         \"##伊\": 13880,\n         \"##伍\": 13881,\n         \"##伎\": 13882,\n         \"##伏\": 13883,\n         \"##伐\": 13884,\n         \"##休\": 13885,\n         \"##伕\": 13886,\n         \"##众\": 13887,\n         \"##优\": 13888,\n         \"##伙\": 13889,\n         \"##会\": 13890,\n         \"##伝\": 13891,\n         \"##伞\": 13892,\n         \"##伟\": 13893,\n         \"##传\": 13894,\n         \"##伢\": 13895,\n         \"##伤\": 13896,\n         \"##伦\": 13897,\n         \"##伪\": 13898,\n         \"##伫\": 13899,\n         \"##伯\": 13900,\n         \"##估\": 13901,\n         \"##伴\": 13902,\n         \"##伶\": 13903,\n         \"##伸\": 13904,\n         \"##伺\": 13905,\n         \"##似\": 13906,\n         \"##伽\": 13907,\n         \"##佃\": 13908,\n         \"##但\": 13909,\n         \"##佇\": 13910,\n         \"##佈\": 13911,\n         \"##位\": 13912,\n         \"##低\": 13913,\n         \"##住\": 13914,\n         \"##佐\": 13915,\n         \"##佑\": 13916,\n         \"##体\": 13917,\n         \"##佔\": 13918,\n         \"##何\": 13919,\n         \"##佗\": 13920,\n         \"##佘\": 13921,\n         \"##余\": 13922,\n         \"##佚\": 13923,\n         \"##佛\": 13924,\n         \"##作\": 13925,\n         \"##佝\": 13926,\n         \"##佞\": 13927,\n         \"##佟\": 13928,\n         \"##你\": 13929,\n         \"##佢\": 13930,\n         \"##佣\": 13931,\n         \"##佤\": 13932,\n         \"##佥\": 13933,\n         \"##佩\": 13934,\n         \"##佬\": 13935,\n         \"##佯\": 13936,\n         \"##佰\": 13937,\n         \"##佳\": 13938,\n         \"##併\": 13939,\n         \"##佶\": 13940,\n         \"##佻\": 13941,\n         \"##佼\": 13942,\n         \"##使\": 13943,\n         \"##侃\": 13944,\n         \"##侄\": 13945,\n         \"##來\": 13946,\n         \"##侈\": 13947,\n         \"##例\": 13948,\n         \"##侍\": 13949,\n         \"##侏\": 13950,\n         \"##侑\": 13951,\n         \"##侖\": 13952,\n         \"##侗\": 13953,\n         \"##供\": 13954,\n         \"##依\": 13955,\n         \"##侠\": 13956,\n         \"##価\": 13957,\n         \"##侣\": 13958,\n         \"##侥\": 13959,\n         \"##侦\": 13960,\n         \"##侧\": 13961,\n         \"##侨\": 13962,\n         \"##侬\": 13963,\n         \"##侮\": 13964,\n         \"##侯\": 13965,\n         \"##侵\": 13966,\n         \"##侶\": 13967,\n         \"##侷\": 13968,\n         \"##便\": 13969,\n         \"##係\": 13970,\n         \"##促\": 13971,\n         \"##俄\": 13972,\n         \"##俊\": 13973,\n         \"##俎\": 13974,\n         \"##俏\": 13975,\n         \"##俐\": 13976,\n         \"##俑\": 13977,\n         \"##俗\": 13978,\n         \"##俘\": 13979,\n         \"##俚\": 13980,\n         \"##保\": 13981,\n         \"##俞\": 13982,\n         \"##俟\": 13983,\n         \"##俠\": 13984,\n         \"##信\": 13985,\n         \"##俨\": 13986,\n         \"##俩\": 13987,\n         \"##俪\": 13988,\n         \"##俬\": 13989,\n         \"##俭\": 13990,\n         \"##修\": 13991,\n         \"##俯\": 13992,\n         \"##俱\": 13993,\n         \"##俳\": 13994,\n         \"##俸\": 13995,\n         \"##俺\": 13996,\n         \"##俾\": 13997,\n         \"##倆\": 13998,\n         \"##倉\": 13999,\n         \"##個\": 14000,\n         \"##倌\": 14001,\n         \"##倍\": 14002,\n         \"##倏\": 14003,\n         \"##們\": 14004,\n         \"##倒\": 14005,\n         \"##倔\": 14006,\n         \"##倖\": 14007,\n         \"##倘\": 14008,\n         \"##候\": 14009,\n         \"##倚\": 14010,\n         \"##倜\": 14011,\n         \"##借\": 14012,\n         \"##倡\": 14013,\n         \"##値\": 14014,\n         \"##倦\": 14015,\n         \"##倩\": 14016,\n         \"##倪\": 14017,\n         \"##倫\": 14018,\n         \"##倬\": 14019,\n         \"##倭\": 14020,\n         \"##倶\": 14021,\n         \"##债\": 14022,\n         \"##值\": 14023,\n         \"##倾\": 14024,\n         \"##偃\": 14025,\n         \"##假\": 14026,\n         \"##偈\": 14027,\n         \"##偉\": 14028,\n         \"##偌\": 14029,\n         \"##偎\": 14030,\n         \"##偏\": 14031,\n         \"##偕\": 14032,\n         \"##做\": 14033,\n         \"##停\": 14034,\n         \"##健\": 14035,\n         \"##側\": 14036,\n         \"##偵\": 14037,\n         \"##偶\": 14038,\n         \"##偷\": 14039,\n         \"##偻\": 14040,\n         \"##偽\": 14041,\n         \"##偿\": 14042,\n         \"##傀\": 14043,\n         \"##傅\": 14044,\n         \"##傍\": 14045,\n         \"##傑\": 14046,\n         \"##傘\": 14047,\n         \"##備\": 14048,\n         \"##傚\": 14049,\n         \"##傢\": 14050,\n         \"##傣\": 14051,\n         \"##傥\": 14052,\n         \"##储\": 14053,\n         \"##傩\": 14054,\n         \"##催\": 14055,\n         \"##傭\": 14056,\n         \"##傲\": 14057,\n         \"##傳\": 14058,\n         \"##債\": 14059,\n         \"##傷\": 14060,\n         \"##傻\": 14061,\n         \"##傾\": 14062,\n         \"##僅\": 14063,\n         \"##働\": 14064,\n         \"##像\": 14065,\n         \"##僑\": 14066,\n         \"##僕\": 14067,\n         \"##僖\": 14068,\n         \"##僚\": 14069,\n         \"##僥\": 14070,\n         \"##僧\": 14071,\n         \"##僭\": 14072,\n         \"##僮\": 14073,\n         \"##僱\": 14074,\n         \"##僵\": 14075,\n         \"##價\": 14076,\n         \"##僻\": 14077,\n         \"##儀\": 14078,\n         \"##儂\": 14079,\n         \"##億\": 14080,\n         \"##儆\": 14081,\n         \"##儉\": 14082,\n         \"##儋\": 14083,\n         \"##儒\": 14084,\n         \"##儕\": 14085,\n         \"##儘\": 14086,\n         \"##償\": 14087,\n         \"##儡\": 14088,\n         \"##優\": 14089,\n         \"##儲\": 14090,\n         \"##儷\": 14091,\n         \"##儼\": 14092,\n         \"##儿\": 14093,\n         \"##兀\": 14094,\n         \"##允\": 14095,\n         \"##元\": 14096,\n         \"##兄\": 14097,\n         \"##充\": 14098,\n         \"##兆\": 14099,\n         \"##兇\": 14100,\n         \"##先\": 14101,\n         \"##光\": 14102,\n         \"##克\": 14103,\n         \"##兌\": 14104,\n         \"##免\": 14105,\n         \"##児\": 14106,\n         \"##兑\": 14107,\n         \"##兒\": 14108,\n         \"##兔\": 14109,\n         \"##兖\": 14110,\n         \"##党\": 14111,\n         \"##兜\": 14112,\n         \"##兢\": 14113,\n         \"##入\": 14114,\n         \"##內\": 14115,\n         \"##全\": 14116,\n         \"##兩\": 14117,\n         \"##八\": 14118,\n         \"##公\": 14119,\n         \"##六\": 14120,\n         \"##兮\": 14121,\n         \"##兰\": 14122,\n         \"##共\": 14123,\n         \"##兲\": 14124,\n         \"##关\": 14125,\n         \"##兴\": 14126,\n         \"##兵\": 14127,\n         \"##其\": 14128,\n         \"##具\": 14129,\n         \"##典\": 14130,\n         \"##兹\": 14131,\n         \"##养\": 14132,\n         \"##兼\": 14133,\n         \"##兽\": 14134,\n         \"##冀\": 14135,\n         \"##内\": 14136,\n         \"##円\": 14137,\n         \"##冇\": 14138,\n         \"##冈\": 14139,\n         \"##冉\": 14140,\n         \"##冊\": 14141,\n         \"##册\": 14142,\n         \"##再\": 14143,\n         \"##冏\": 14144,\n         \"##冒\": 14145,\n         \"##冕\": 14146,\n         \"##冗\": 14147,\n         \"##写\": 14148,\n         \"##军\": 14149,\n         \"##农\": 14150,\n         \"##冠\": 14151,\n         \"##冢\": 14152,\n         \"##冤\": 14153,\n         \"##冥\": 14154,\n         \"##冨\": 14155,\n         \"##冪\": 14156,\n         \"##冬\": 14157,\n         \"##冯\": 14158,\n         \"##冰\": 14159,\n         \"##冲\": 14160,\n         \"##决\": 14161,\n         \"##况\": 14162,\n         \"##冶\": 14163,\n         \"##冷\": 14164,\n         \"##冻\": 14165,\n         \"##冼\": 14166,\n         \"##冽\": 14167,\n         \"##冾\": 14168,\n         \"##净\": 14169,\n         \"##凄\": 14170,\n         \"##准\": 14171,\n         \"##凇\": 14172,\n         \"##凈\": 14173,\n         \"##凉\": 14174,\n         \"##凋\": 14175,\n         \"##凌\": 14176,\n         \"##凍\": 14177,\n         \"##减\": 14178,\n         \"##凑\": 14179,\n         \"##凛\": 14180,\n         \"##凜\": 14181,\n         \"##凝\": 14182,\n         \"##几\": 14183,\n         \"##凡\": 14184,\n         \"##凤\": 14185,\n         \"##処\": 14186,\n         \"##凪\": 14187,\n         \"##凭\": 14188,\n         \"##凯\": 14189,\n         \"##凰\": 14190,\n         \"##凱\": 14191,\n         \"##凳\": 14192,\n         \"##凶\": 14193,\n         \"##凸\": 14194,\n         \"##凹\": 14195,\n         \"##出\": 14196,\n         \"##击\": 14197,\n         \"##函\": 14198,\n         \"##凿\": 14199,\n         \"##刀\": 14200,\n         \"##刁\": 14201,\n         \"##刃\": 14202,\n         \"##分\": 14203,\n         \"##切\": 14204,\n         \"##刈\": 14205,\n         \"##刊\": 14206,\n         \"##刍\": 14207,\n         \"##刎\": 14208,\n         \"##刑\": 14209,\n         \"##划\": 14210,\n         \"##列\": 14211,\n         \"##刘\": 14212,\n         \"##则\": 14213,\n         \"##刚\": 14214,\n         \"##创\": 14215,\n         \"##初\": 14216,\n         \"##删\": 14217,\n         \"##判\": 14218,\n         \"##別\": 14219,\n         \"##刨\": 14220,\n         \"##利\": 14221,\n         \"##刪\": 14222,\n         \"##别\": 14223,\n         \"##刮\": 14224,\n         \"##到\": 14225,\n         \"##制\": 14226,\n         \"##刷\": 14227,\n         \"##券\": 14228,\n         \"##刹\": 14229,\n         \"##刺\": 14230,\n         \"##刻\": 14231,\n         \"##刽\": 14232,\n         \"##剁\": 14233,\n         \"##剂\": 14234,\n         \"##剃\": 14235,\n         \"##則\": 14236,\n         \"##剉\": 14237,\n         \"##削\": 14238,\n         \"##剋\": 14239,\n         \"##剌\": 14240,\n         \"##前\": 14241,\n         \"##剎\": 14242,\n         \"##剐\": 14243,\n         \"##剑\": 14244,\n         \"##剔\": 14245,\n         \"##剖\": 14246,\n         \"##剛\": 14247,\n         \"##剜\": 14248,\n         \"##剝\": 14249,\n         \"##剣\": 14250,\n         \"##剤\": 14251,\n         \"##剥\": 14252,\n         \"##剧\": 14253,\n         \"##剩\": 14254,\n         \"##剪\": 14255,\n         \"##副\": 14256,\n         \"##割\": 14257,\n         \"##創\": 14258,\n         \"##剷\": 14259,\n         \"##剽\": 14260,\n         \"##剿\": 14261,\n         \"##劃\": 14262,\n         \"##劇\": 14263,\n         \"##劈\": 14264,\n         \"##劉\": 14265,\n         \"##劊\": 14266,\n         \"##劍\": 14267,\n         \"##劏\": 14268,\n         \"##劑\": 14269,\n         \"##力\": 14270,\n         \"##劝\": 14271,\n         \"##办\": 14272,\n         \"##功\": 14273,\n         \"##加\": 14274,\n         \"##务\": 14275,\n         \"##劣\": 14276,\n         \"##动\": 14277,\n         \"##助\": 14278,\n         \"##努\": 14279,\n         \"##劫\": 14280,\n         \"##劭\": 14281,\n         \"##励\": 14282,\n         \"##劲\": 14283,\n         \"##劳\": 14284,\n         \"##労\": 14285,\n         \"##劵\": 14286,\n         \"##効\": 14287,\n         \"##劾\": 14288,\n         \"##势\": 14289,\n         \"##勁\": 14290,\n         \"##勃\": 14291,\n         \"##勇\": 14292,\n         \"##勉\": 14293,\n         \"##勋\": 14294,\n         \"##勐\": 14295,\n         \"##勒\": 14296,\n         \"##動\": 14297,\n         \"##勖\": 14298,\n         \"##勘\": 14299,\n         \"##務\": 14300,\n         \"##勛\": 14301,\n         \"##勝\": 14302,\n         \"##勞\": 14303,\n         \"##募\": 14304,\n         \"##勢\": 14305,\n         \"##勤\": 14306,\n         \"##勧\": 14307,\n         \"##勳\": 14308,\n         \"##勵\": 14309,\n         \"##勸\": 14310,\n         \"##勺\": 14311,\n         \"##勻\": 14312,\n         \"##勾\": 14313,\n         \"##勿\": 14314,\n         \"##匀\": 14315,\n         \"##包\": 14316,\n         \"##匆\": 14317,\n         \"##匈\": 14318,\n         \"##匍\": 14319,\n         \"##匐\": 14320,\n         \"##匕\": 14321,\n         \"##化\": 14322,\n         \"##北\": 14323,\n         \"##匙\": 14324,\n         \"##匝\": 14325,\n         \"##匠\": 14326,\n         \"##匡\": 14327,\n         \"##匣\": 14328,\n         \"##匪\": 14329,\n         \"##匮\": 14330,\n         \"##匯\": 14331,\n         \"##匱\": 14332,\n         \"##匹\": 14333,\n         \"##区\": 14334,\n         \"##医\": 14335,\n         \"##匾\": 14336,\n         \"##匿\": 14337,\n         \"##區\": 14338,\n         \"##十\": 14339,\n         \"##千\": 14340,\n         \"##卅\": 14341,\n         \"##升\": 14342,\n         \"##午\": 14343,\n         \"##卉\": 14344,\n         \"##半\": 14345,\n         \"##卍\": 14346,\n         \"##华\": 14347,\n         \"##协\": 14348,\n         \"##卑\": 14349,\n         \"##卒\": 14350,\n         \"##卓\": 14351,\n         \"##協\": 14352,\n         \"##单\": 14353,\n         \"##卖\": 14354,\n         \"##南\": 14355,\n         \"##単\": 14356,\n         \"##博\": 14357,\n         \"##卜\": 14358,\n         \"##卞\": 14359,\n         \"##卟\": 14360,\n         \"##占\": 14361,\n         \"##卡\": 14362,\n         \"##卢\": 14363,\n         \"##卤\": 14364,\n         \"##卦\": 14365,\n         \"##卧\": 14366,\n         \"##卫\": 14367,\n         \"##卮\": 14368,\n         \"##卯\": 14369,\n         \"##印\": 14370,\n         \"##危\": 14371,\n         \"##即\": 14372,\n         \"##却\": 14373,\n         \"##卵\": 14374,\n         \"##卷\": 14375,\n         \"##卸\": 14376,\n         \"##卻\": 14377,\n         \"##卿\": 14378,\n         \"##厂\": 14379,\n         \"##厄\": 14380,\n         \"##厅\": 14381,\n         \"##历\": 14382,\n         \"##厉\": 14383,\n         \"##压\": 14384,\n         \"##厌\": 14385,\n         \"##厕\": 14386,\n         \"##厘\": 14387,\n         \"##厚\": 14388,\n         \"##厝\": 14389,\n         \"##原\": 14390,\n         \"##厢\": 14391,\n         \"##厥\": 14392,\n         \"##厦\": 14393,\n         \"##厨\": 14394,\n         \"##厩\": 14395,\n         \"##厭\": 14396,\n         \"##厮\": 14397,\n         \"##厲\": 14398,\n         \"##厳\": 14399,\n         \"##去\": 14400,\n         \"##县\": 14401,\n         \"##叁\": 14402,\n         \"##参\": 14403,\n         \"##參\": 14404,\n         \"##又\": 14405,\n         \"##叉\": 14406,\n         \"##及\": 14407,\n         \"##友\": 14408,\n         \"##双\": 14409,\n         \"##反\": 14410,\n         \"##収\": 14411,\n         \"##发\": 14412,\n         \"##叔\": 14413,\n         \"##取\": 14414,\n         \"##受\": 14415,\n         \"##变\": 14416,\n         \"##叙\": 14417,\n         \"##叛\": 14418,\n         \"##叟\": 14419,\n         \"##叠\": 14420,\n         \"##叡\": 14421,\n         \"##叢\": 14422,\n         \"##口\": 14423,\n         \"##古\": 14424,\n         \"##句\": 14425,\n         \"##另\": 14426,\n         \"##叨\": 14427,\n         \"##叩\": 14428,\n         \"##只\": 14429,\n         \"##叫\": 14430,\n         \"##召\": 14431,\n         \"##叭\": 14432,\n         \"##叮\": 14433,\n         \"##可\": 14434,\n         \"##台\": 14435,\n         \"##叱\": 14436,\n         \"##史\": 14437,\n         \"##右\": 14438,\n         \"##叵\": 14439,\n         \"##叶\": 14440,\n         \"##号\": 14441,\n         \"##司\": 14442,\n         \"##叹\": 14443,\n         \"##叻\": 14444,\n         \"##叼\": 14445,\n         \"##叽\": 14446,\n         \"##吁\": 14447,\n         \"##吃\": 14448,\n         \"##各\": 14449,\n         \"##吆\": 14450,\n         \"##合\": 14451,\n         \"##吉\": 14452,\n         \"##吊\": 14453,\n         \"##吋\": 14454,\n         \"##同\": 14455,\n         \"##名\": 14456,\n         \"##后\": 14457,\n         \"##吏\": 14458,\n         \"##吐\": 14459,\n         \"##向\": 14460,\n         \"##吒\": 14461,\n         \"##吓\": 14462,\n         \"##吕\": 14463,\n         \"##吖\": 14464,\n         \"##吗\": 14465,\n         \"##君\": 14466,\n         \"##吝\": 14467,\n         \"##吞\": 14468,\n         \"##吟\": 14469,\n         \"##吠\": 14470,\n         \"##吡\": 14471,\n         \"##否\": 14472,\n         \"##吧\": 14473,\n         \"##吨\": 14474,\n         \"##吩\": 14475,\n         \"##含\": 14476,\n         \"##听\": 14477,\n         \"##吭\": 14478,\n         \"##吮\": 14479,\n         \"##启\": 14480,\n         \"##吱\": 14481,\n         \"##吳\": 14482,\n         \"##吴\": 14483,\n         \"##吵\": 14484,\n         \"##吶\": 14485,\n         \"##吸\": 14486,\n         \"##吹\": 14487,\n         \"##吻\": 14488,\n         \"##吼\": 14489,\n         \"##吽\": 14490,\n         \"##吾\": 14491,\n         \"##呀\": 14492,\n         \"##呂\": 14493,\n         \"##呃\": 14494,\n         \"##呆\": 14495,\n         \"##呈\": 14496,\n         \"##告\": 14497,\n         \"##呋\": 14498,\n         \"##呎\": 14499,\n         \"##呐\": 14500,\n         \"##呓\": 14501,\n         \"##呕\": 14502,\n         \"##呗\": 14503,\n         \"##员\": 14504,\n         \"##呛\": 14505,\n         \"##呜\": 14506,\n         \"##呢\": 14507,\n         \"##呤\": 14508,\n         \"##呦\": 14509,\n         \"##周\": 14510,\n         \"##呱\": 14511,\n         \"##呲\": 14512,\n         \"##味\": 14513,\n         \"##呵\": 14514,\n         \"##呷\": 14515,\n         \"##呸\": 14516,\n         \"##呻\": 14517,\n         \"##呼\": 14518,\n         \"##命\": 14519,\n         \"##咀\": 14520,\n         \"##咁\": 14521,\n         \"##咂\": 14522,\n         \"##咄\": 14523,\n         \"##咆\": 14524,\n         \"##咋\": 14525,\n         \"##和\": 14526,\n         \"##咎\": 14527,\n         \"##咏\": 14528,\n         \"##咐\": 14529,\n         \"##咒\": 14530,\n         \"##咔\": 14531,\n         \"##咕\": 14532,\n         \"##咖\": 14533,\n         \"##咗\": 14534,\n         \"##咘\": 14535,\n         \"##咙\": 14536,\n         \"##咚\": 14537,\n         \"##咛\": 14538,\n         \"##咣\": 14539,\n         \"##咤\": 14540,\n         \"##咦\": 14541,\n         \"##咧\": 14542,\n         \"##咨\": 14543,\n         \"##咩\": 14544,\n         \"##咪\": 14545,\n         \"##咫\": 14546,\n         \"##咬\": 14547,\n         \"##咭\": 14548,\n         \"##咯\": 14549,\n         \"##咱\": 14550,\n         \"##咲\": 14551,\n         \"##咳\": 14552,\n         \"##咸\": 14553,\n         \"##咻\": 14554,\n         \"##咽\": 14555,\n         \"##咿\": 14556,\n         \"##哀\": 14557,\n         \"##品\": 14558,\n         \"##哂\": 14559,\n         \"##哄\": 14560,\n         \"##哆\": 14561,\n         \"##哇\": 14562,\n         \"##哈\": 14563,\n         \"##哉\": 14564,\n         \"##哋\": 14565,\n         \"##哌\": 14566,\n         \"##响\": 14567,\n         \"##哎\": 14568,\n         \"##哏\": 14569,\n         \"##哐\": 14570,\n         \"##哑\": 14571,\n         \"##哒\": 14572,\n         \"##哔\": 14573,\n         \"##哗\": 14574,\n         \"##哟\": 14575,\n         \"##員\": 14576,\n         \"##哥\": 14577,\n         \"##哦\": 14578,\n         \"##哧\": 14579,\n         \"##哨\": 14580,\n         \"##哩\": 14581,\n         \"##哪\": 14582,\n         \"##哭\": 14583,\n         \"##哮\": 14584,\n         \"##哲\": 14585,\n         \"##哺\": 14586,\n         \"##哼\": 14587,\n         \"##哽\": 14588,\n         \"##唁\": 14589,\n         \"##唄\": 14590,\n         \"##唆\": 14591,\n         \"##唇\": 14592,\n         \"##唉\": 14593,\n         \"##唏\": 14594,\n         \"##唐\": 14595,\n         \"##唑\": 14596,\n         \"##唔\": 14597,\n         \"##唠\": 14598,\n         \"##唤\": 14599,\n         \"##唧\": 14600,\n         \"##唬\": 14601,\n         \"##售\": 14602,\n         \"##唯\": 14603,\n         \"##唰\": 14604,\n         \"##唱\": 14605,\n         \"##唳\": 14606,\n         \"##唷\": 14607,\n         \"##唸\": 14608,\n         \"##唾\": 14609,\n         \"##啃\": 14610,\n         \"##啄\": 14611,\n         \"##商\": 14612,\n         \"##啉\": 14613,\n         \"##啊\": 14614,\n         \"##問\": 14615,\n         \"##啓\": 14616,\n         \"##啕\": 14617,\n         \"##啖\": 14618,\n         \"##啜\": 14619,\n         \"##啞\": 14620,\n         \"##啟\": 14621,\n         \"##啡\": 14622,\n         \"##啤\": 14623,\n         \"##啥\": 14624,\n         \"##啦\": 14625,\n         \"##啧\": 14626,\n         \"##啪\": 14627,\n         \"##啫\": 14628,\n         \"##啬\": 14629,\n         \"##啮\": 14630,\n         \"##啰\": 14631,\n         \"##啱\": 14632,\n         \"##啲\": 14633,\n         \"##啵\": 14634,\n         \"##啶\": 14635,\n         \"##啷\": 14636,\n         \"##啸\": 14637,\n         \"##啻\": 14638,\n         \"##啼\": 14639,\n         \"##啾\": 14640,\n         \"##喀\": 14641,\n         \"##喂\": 14642,\n         \"##喃\": 14643,\n         \"##善\": 14644,\n         \"##喆\": 14645,\n         \"##喇\": 14646,\n         \"##喉\": 14647,\n         \"##喊\": 14648,\n         \"##喋\": 14649,\n         \"##喎\": 14650,\n         \"##喏\": 14651,\n         \"##喔\": 14652,\n         \"##喘\": 14653,\n         \"##喙\": 14654,\n         \"##喚\": 14655,\n         \"##喜\": 14656,\n         \"##喝\": 14657,\n         \"##喟\": 14658,\n         \"##喧\": 14659,\n         \"##喪\": 14660,\n         \"##喫\": 14661,\n         \"##喬\": 14662,\n         \"##單\": 14663,\n         \"##喰\": 14664,\n         \"##喱\": 14665,\n         \"##喲\": 14666,\n         \"##喳\": 14667,\n         \"##喵\": 14668,\n         \"##営\": 14669,\n         \"##喷\": 14670,\n         \"##喹\": 14671,\n         \"##喺\": 14672,\n         \"##喻\": 14673,\n         \"##喽\": 14674,\n         \"##嗅\": 14675,\n         \"##嗆\": 14676,\n         \"##嗇\": 14677,\n         \"##嗎\": 14678,\n         \"##嗑\": 14679,\n         \"##嗒\": 14680,\n         \"##嗓\": 14681,\n         \"##嗔\": 14682,\n         \"##嗖\": 14683,\n         \"##嗚\": 14684,\n         \"##嗜\": 14685,\n         \"##嗝\": 14686,\n         \"##嗟\": 14687,\n         \"##嗡\": 14688,\n         \"##嗣\": 14689,\n         \"##嗤\": 14690,\n         \"##嗦\": 14691,\n         \"##嗨\": 14692,\n         \"##嗪\": 14693,\n         \"##嗬\": 14694,\n         \"##嗯\": 14695,\n         \"##嗰\": 14696,\n         \"##嗲\": 14697,\n         \"##嗳\": 14698,\n         \"##嗶\": 14699,\n         \"##嗷\": 14700,\n         \"##嗽\": 14701,\n         \"##嘀\": 14702,\n         \"##嘅\": 14703,\n         \"##嘆\": 14704,\n         \"##嘈\": 14705,\n         \"##嘉\": 14706,\n         \"##嘌\": 14707,\n         \"##嘍\": 14708,\n         \"##嘎\": 14709,\n         \"##嘔\": 14710,\n         \"##嘖\": 14711,\n         \"##嘗\": 14712,\n         \"##嘘\": 14713,\n         \"##嘚\": 14714,\n         \"##嘛\": 14715,\n         \"##嘜\": 14716,\n         \"##嘞\": 14717,\n         \"##嘟\": 14718,\n         \"##嘢\": 14719,\n         \"##嘣\": 14720,\n         \"##嘤\": 14721,\n         \"##嘧\": 14722,\n         \"##嘩\": 14723,\n         \"##嘭\": 14724,\n         \"##嘮\": 14725,\n         \"##嘯\": 14726,\n         \"##嘰\": 14727,\n         \"##嘱\": 14728,\n         \"##嘲\": 14729,\n         \"##嘴\": 14730,\n         \"##嘶\": 14731,\n         \"##嘸\": 14732,\n         \"##嘹\": 14733,\n         \"##嘻\": 14734,\n         \"##嘿\": 14735,\n         \"##噁\": 14736,\n         \"##噌\": 14737,\n         \"##噎\": 14738,\n         \"##噓\": 14739,\n         \"##噔\": 14740,\n         \"##噗\": 14741,\n         \"##噙\": 14742,\n         \"##噜\": 14743,\n         \"##噠\": 14744,\n         \"##噢\": 14745,\n         \"##噤\": 14746,\n         \"##器\": 14747,\n         \"##噩\": 14748,\n         \"##噪\": 14749,\n         \"##噬\": 14750,\n         \"##噱\": 14751,\n         \"##噴\": 14752,\n         \"##噶\": 14753,\n         \"##噸\": 14754,\n         \"##噹\": 14755,\n         \"##噻\": 14756,\n         \"##噼\": 14757,\n         \"##嚀\": 14758,\n         \"##嚇\": 14759,\n         \"##嚎\": 14760,\n         \"##嚏\": 14761,\n         \"##嚐\": 14762,\n         \"##嚓\": 14763,\n         \"##嚕\": 14764,\n         \"##嚟\": 14765,\n         \"##嚣\": 14766,\n         \"##嚥\": 14767,\n         \"##嚨\": 14768,\n         \"##嚮\": 14769,\n         \"##嚴\": 14770,\n         \"##嚷\": 14771,\n         \"##嚼\": 14772,\n         \"##囂\": 14773,\n         \"##囉\": 14774,\n         \"##囊\": 14775,\n         \"##囍\": 14776,\n         \"##囑\": 14777,\n         \"##囔\": 14778,\n         \"##囗\": 14779,\n         \"##囚\": 14780,\n         \"##四\": 14781,\n         \"##囝\": 14782,\n         \"##回\": 14783,\n         \"##囟\": 14784,\n         \"##因\": 14785,\n         \"##囡\": 14786,\n         \"##团\": 14787,\n         \"##団\": 14788,\n         \"##囤\": 14789,\n         \"##囧\": 14790,\n         \"##囪\": 14791,\n         \"##囫\": 14792,\n         \"##园\": 14793,\n         \"##困\": 14794,\n         \"##囱\": 14795,\n         \"##囲\": 14796,\n         \"##図\": 14797,\n         \"##围\": 14798,\n         \"##囹\": 14799,\n         \"##固\": 14800,\n         \"##国\": 14801,\n         \"##图\": 14802,\n         \"##囿\": 14803,\n         \"##圃\": 14804,\n         \"##圄\": 14805,\n         \"##圆\": 14806,\n         \"##圈\": 14807,\n         \"##國\": 14808,\n         \"##圍\": 14809,\n         \"##圏\": 14810,\n         \"##園\": 14811,\n         \"##圓\": 14812,\n         \"##圖\": 14813,\n         \"##團\": 14814,\n         \"##圜\": 14815,\n         \"##土\": 14816,\n         \"##圣\": 14817,\n         \"##圧\": 14818,\n         \"##在\": 14819,\n         \"##圩\": 14820,\n         \"##圭\": 14821,\n         \"##地\": 14822,\n         \"##圳\": 14823,\n         \"##场\": 14824,\n         \"##圻\": 14825,\n         \"##圾\": 14826,\n         \"##址\": 14827,\n         \"##坂\": 14828,\n         \"##均\": 14829,\n         \"##坊\": 14830,\n         \"##坍\": 14831,\n         \"##坎\": 14832,\n         \"##坏\": 14833,\n         \"##坐\": 14834,\n         \"##坑\": 14835,\n         \"##块\": 14836,\n         \"##坚\": 14837,\n         \"##坛\": 14838,\n         \"##坝\": 14839,\n         \"##坞\": 14840,\n         \"##坟\": 14841,\n         \"##坠\": 14842,\n         \"##坡\": 14843,\n         \"##坤\": 14844,\n         \"##坦\": 14845,\n         \"##坨\": 14846,\n         \"##坪\": 14847,\n         \"##坯\": 14848,\n         \"##坳\": 14849,\n         \"##坵\": 14850,\n         \"##坷\": 14851,\n         \"##垂\": 14852,\n         \"##垃\": 14853,\n         \"##垄\": 14854,\n         \"##型\": 14855,\n         \"##垒\": 14856,\n         \"##垚\": 14857,\n         \"##垛\": 14858,\n         \"##垠\": 14859,\n         \"##垢\": 14860,\n         \"##垣\": 14861,\n         \"##垦\": 14862,\n         \"##垩\": 14863,\n         \"##垫\": 14864,\n         \"##垭\": 14865,\n         \"##垮\": 14866,\n         \"##垵\": 14867,\n         \"##埂\": 14868,\n         \"##埃\": 14869,\n         \"##埋\": 14870,\n         \"##城\": 14871,\n         \"##埔\": 14872,\n         \"##埕\": 14873,\n         \"##埗\": 14874,\n         \"##域\": 14875,\n         \"##埠\": 14876,\n         \"##埤\": 14877,\n         \"##埵\": 14878,\n         \"##執\": 14879,\n         \"##埸\": 14880,\n         \"##培\": 14881,\n         \"##基\": 14882,\n         \"##埼\": 14883,\n         \"##堀\": 14884,\n         \"##堂\": 14885,\n         \"##堃\": 14886,\n         \"##堅\": 14887,\n         \"##堆\": 14888,\n         \"##堇\": 14889,\n         \"##堑\": 14890,\n         \"##堕\": 14891,\n         \"##堙\": 14892,\n         \"##堡\": 14893,\n         \"##堤\": 14894,\n         \"##堪\": 14895,\n         \"##堯\": 14896,\n         \"##堰\": 14897,\n         \"##報\": 14898,\n         \"##場\": 14899,\n         \"##堵\": 14900,\n         \"##堺\": 14901,\n         \"##堿\": 14902,\n         \"##塊\": 14903,\n         \"##塌\": 14904,\n         \"##塑\": 14905,\n         \"##塔\": 14906,\n         \"##塗\": 14907,\n         \"##塘\": 14908,\n         \"##塚\": 14909,\n         \"##塞\": 14910,\n         \"##塢\": 14911,\n         \"##塩\": 14912,\n         \"##填\": 14913,\n         \"##塬\": 14914,\n         \"##塭\": 14915,\n         \"##塵\": 14916,\n         \"##塾\": 14917,\n         \"##墀\": 14918,\n         \"##境\": 14919,\n         \"##墅\": 14920,\n         \"##墉\": 14921,\n         \"##墊\": 14922,\n         \"##墒\": 14923,\n         \"##墓\": 14924,\n         \"##増\": 14925,\n         \"##墘\": 14926,\n         \"##墙\": 14927,\n         \"##墜\": 14928,\n         \"##增\": 14929,\n         \"##墟\": 14930,\n         \"##墨\": 14931,\n         \"##墩\": 14932,\n         \"##墮\": 14933,\n         \"##墳\": 14934,\n         \"##墻\": 14935,\n         \"##墾\": 14936,\n         \"##壁\": 14937,\n         \"##壅\": 14938,\n         \"##壆\": 14939,\n         \"##壇\": 14940,\n         \"##壊\": 14941,\n         \"##壑\": 14942,\n         \"##壓\": 14943,\n         \"##壕\": 14944,\n         \"##壘\": 14945,\n         \"##壞\": 14946,\n         \"##壟\": 14947,\n         \"##壢\": 14948,\n         \"##壤\": 14949,\n         \"##壩\": 14950,\n         \"##士\": 14951,\n         \"##壬\": 14952,\n         \"##壮\": 14953,\n         \"##壯\": 14954,\n         \"##声\": 14955,\n         \"##売\": 14956,\n         \"##壳\": 14957,\n         \"##壶\": 14958,\n         \"##壹\": 14959,\n         \"##壺\": 14960,\n         \"##壽\": 14961,\n         \"##处\": 14962,\n         \"##备\": 14963,\n         \"##変\": 14964,\n         \"##复\": 14965,\n         \"##夏\": 14966,\n         \"##夔\": 14967,\n         \"##夕\": 14968,\n         \"##外\": 14969,\n         \"##夙\": 14970,\n         \"##多\": 14971,\n         \"##夜\": 14972,\n         \"##够\": 14973,\n         \"##夠\": 14974,\n         \"##夢\": 14975,\n         \"##夥\": 14976,\n         \"##大\": 14977,\n         \"##天\": 14978,\n         \"##太\": 14979,\n         \"##夫\": 14980,\n         \"##夭\": 14981,\n         \"##央\": 14982,\n         \"##夯\": 14983,\n         \"##失\": 14984,\n         \"##头\": 14985,\n         \"##夷\": 14986,\n         \"##夸\": 14987,\n         \"##夹\": 14988,\n         \"##夺\": 14989,\n         \"##夾\": 14990,\n         \"##奂\": 14991,\n         \"##奄\": 14992,\n         \"##奇\": 14993,\n         \"##奈\": 14994,\n         \"##奉\": 14995,\n         \"##奋\": 14996,\n         \"##奎\": 14997,\n         \"##奏\": 14998,\n         \"##奐\": 14999,\n         \"##契\": 15000,\n         \"##奔\": 15001,\n         \"##奕\": 15002,\n         \"##奖\": 15003,\n         \"##套\": 15004,\n         \"##奘\": 15005,\n         \"##奚\": 15006,\n         \"##奠\": 15007,\n         \"##奢\": 15008,\n         \"##奥\": 15009,\n         \"##奧\": 15010,\n         \"##奪\": 15011,\n         \"##奬\": 15012,\n         \"##奮\": 15013,\n         \"##女\": 15014,\n         \"##奴\": 15015,\n         \"##奶\": 15016,\n         \"##奸\": 15017,\n         \"##她\": 15018,\n         \"##好\": 15019,\n         \"##如\": 15020,\n         \"##妃\": 15021,\n         \"##妄\": 15022,\n         \"##妆\": 15023,\n         \"##妇\": 15024,\n         \"##妈\": 15025,\n         \"##妊\": 15026,\n         \"##妍\": 15027,\n         \"##妒\": 15028,\n         \"##妓\": 15029,\n         \"##妖\": 15030,\n         \"##妘\": 15031,\n         \"##妙\": 15032,\n         \"##妝\": 15033,\n         \"##妞\": 15034,\n         \"##妣\": 15035,\n         \"##妤\": 15036,\n         \"##妥\": 15037,\n         \"##妨\": 15038,\n         \"##妩\": 15039,\n         \"##妪\": 15040,\n         \"##妮\": 15041,\n         \"##妲\": 15042,\n         \"##妳\": 15043,\n         \"##妹\": 15044,\n         \"##妻\": 15045,\n         \"##妾\": 15046,\n         \"##姆\": 15047,\n         \"##姉\": 15048,\n         \"##姊\": 15049,\n         \"##始\": 15050,\n         \"##姍\": 15051,\n         \"##姐\": 15052,\n         \"##姑\": 15053,\n         \"##姒\": 15054,\n         \"##姓\": 15055,\n         \"##委\": 15056,\n         \"##姗\": 15057,\n         \"##姚\": 15058,\n         \"##姜\": 15059,\n         \"##姝\": 15060,\n         \"##姣\": 15061,\n         \"##姥\": 15062,\n         \"##姦\": 15063,\n         \"##姨\": 15064,\n         \"##姪\": 15065,\n         \"##姫\": 15066,\n         \"##姬\": 15067,\n         \"##姹\": 15068,\n         \"##姻\": 15069,\n         \"##姿\": 15070,\n         \"##威\": 15071,\n         \"##娃\": 15072,\n         \"##娄\": 15073,\n         \"##娅\": 15074,\n         \"##娆\": 15075,\n         \"##娇\": 15076,\n         \"##娉\": 15077,\n         \"##娑\": 15078,\n         \"##娓\": 15079,\n         \"##娘\": 15080,\n         \"##娛\": 15081,\n         \"##娜\": 15082,\n         \"##娟\": 15083,\n         \"##娠\": 15084,\n         \"##娣\": 15085,\n         \"##娥\": 15086,\n         \"##娩\": 15087,\n         \"##娱\": 15088,\n         \"##娲\": 15089,\n         \"##娴\": 15090,\n         \"##娶\": 15091,\n         \"##娼\": 15092,\n         \"##婀\": 15093,\n         \"##婁\": 15094,\n         \"##婆\": 15095,\n         \"##婉\": 15096,\n         \"##婊\": 15097,\n         \"##婕\": 15098,\n         \"##婚\": 15099,\n         \"##婢\": 15100,\n         \"##婦\": 15101,\n         \"##婧\": 15102,\n         \"##婪\": 15103,\n         \"##婭\": 15104,\n         \"##婴\": 15105,\n         \"##婵\": 15106,\n         \"##婶\": 15107,\n         \"##婷\": 15108,\n         \"##婺\": 15109,\n         \"##婿\": 15110,\n         \"##媒\": 15111,\n         \"##媚\": 15112,\n         \"##媛\": 15113,\n         \"##媞\": 15114,\n         \"##媧\": 15115,\n         \"##媲\": 15116,\n         \"##媳\": 15117,\n         \"##媽\": 15118,\n         \"##媾\": 15119,\n         \"##嫁\": 15120,\n         \"##嫂\": 15121,\n         \"##嫉\": 15122,\n         \"##嫌\": 15123,\n         \"##嫑\": 15124,\n         \"##嫔\": 15125,\n         \"##嫖\": 15126,\n         \"##嫘\": 15127,\n         \"##嫚\": 15128,\n         \"##嫡\": 15129,\n         \"##嫣\": 15130,\n         \"##嫦\": 15131,\n         \"##嫩\": 15132,\n         \"##嫲\": 15133,\n         \"##嫵\": 15134,\n         \"##嫻\": 15135,\n         \"##嬅\": 15136,\n         \"##嬉\": 15137,\n         \"##嬌\": 15138,\n         \"##嬗\": 15139,\n         \"##嬛\": 15140,\n         \"##嬢\": 15141,\n         \"##嬤\": 15142,\n         \"##嬪\": 15143,\n         \"##嬰\": 15144,\n         \"##嬴\": 15145,\n         \"##嬷\": 15146,\n         \"##嬸\": 15147,\n         \"##嬿\": 15148,\n         \"##孀\": 15149,\n         \"##孃\": 15150,\n         \"##子\": 15151,\n         \"##孑\": 15152,\n         \"##孔\": 15153,\n         \"##孕\": 15154,\n         \"##孖\": 15155,\n         \"##字\": 15156,\n         \"##存\": 15157,\n         \"##孙\": 15158,\n         \"##孚\": 15159,\n         \"##孛\": 15160,\n         \"##孜\": 15161,\n         \"##孝\": 15162,\n         \"##孟\": 15163,\n         \"##孢\": 15164,\n         \"##季\": 15165,\n         \"##孤\": 15166,\n         \"##学\": 15167,\n         \"##孩\": 15168,\n         \"##孪\": 15169,\n         \"##孫\": 15170,\n         \"##孬\": 15171,\n         \"##孰\": 15172,\n         \"##孱\": 15173,\n         \"##孳\": 15174,\n         \"##孵\": 15175,\n         \"##學\": 15176,\n         \"##孺\": 15177,\n         \"##孽\": 15178,\n         \"##孿\": 15179,\n         \"##宁\": 15180,\n         \"##它\": 15181,\n         \"##宅\": 15182,\n         \"##宇\": 15183,\n         \"##守\": 15184,\n         \"##安\": 15185,\n         \"##宋\": 15186,\n         \"##完\": 15187,\n         \"##宏\": 15188,\n         \"##宓\": 15189,\n         \"##宕\": 15190,\n         \"##宗\": 15191,\n         \"##官\": 15192,\n         \"##宙\": 15193,\n         \"##定\": 15194,\n         \"##宛\": 15195,\n         \"##宜\": 15196,\n         \"##宝\": 15197,\n         \"##实\": 15198,\n         \"##実\": 15199,\n         \"##宠\": 15200,\n         \"##审\": 15201,\n         \"##客\": 15202,\n         \"##宣\": 15203,\n         \"##室\": 15204,\n         \"##宥\": 15205,\n         \"##宦\": 15206,\n         \"##宪\": 15207,\n         \"##宫\": 15208,\n         \"##宮\": 15209,\n         \"##宰\": 15210,\n         \"##害\": 15211,\n         \"##宴\": 15212,\n         \"##宵\": 15213,\n         \"##家\": 15214,\n         \"##宸\": 15215,\n         \"##容\": 15216,\n         \"##宽\": 15217,\n         \"##宾\": 15218,\n         \"##宿\": 15219,\n         \"##寂\": 15220,\n         \"##寄\": 15221,\n         \"##寅\": 15222,\n         \"##密\": 15223,\n         \"##寇\": 15224,\n         \"##富\": 15225,\n         \"##寐\": 15226,\n         \"##寒\": 15227,\n         \"##寓\": 15228,\n         \"##寛\": 15229,\n         \"##寝\": 15230,\n         \"##寞\": 15231,\n         \"##察\": 15232,\n         \"##寡\": 15233,\n         \"##寢\": 15234,\n         \"##寥\": 15235,\n         \"##實\": 15236,\n         \"##寧\": 15237,\n         \"##寨\": 15238,\n         \"##審\": 15239,\n         \"##寫\": 15240,\n         \"##寬\": 15241,\n         \"##寮\": 15242,\n         \"##寰\": 15243,\n         \"##寵\": 15244,\n         \"##寶\": 15245,\n         \"##寸\": 15246,\n         \"##对\": 15247,\n         \"##寺\": 15248,\n         \"##寻\": 15249,\n         \"##导\": 15250,\n         \"##対\": 15251,\n         \"##寿\": 15252,\n         \"##封\": 15253,\n         \"##専\": 15254,\n         \"##射\": 15255,\n         \"##将\": 15256,\n         \"##將\": 15257,\n         \"##專\": 15258,\n         \"##尉\": 15259,\n         \"##尊\": 15260,\n         \"##尋\": 15261,\n         \"##對\": 15262,\n         \"##導\": 15263,\n         \"##小\": 15264,\n         \"##少\": 15265,\n         \"##尔\": 15266,\n         \"##尕\": 15267,\n         \"##尖\": 15268,\n         \"##尘\": 15269,\n         \"##尚\": 15270,\n         \"##尝\": 15271,\n         \"##尤\": 15272,\n         \"##尧\": 15273,\n         \"##尬\": 15274,\n         \"##就\": 15275,\n         \"##尴\": 15276,\n         \"##尷\": 15277,\n         \"##尸\": 15278,\n         \"##尹\": 15279,\n         \"##尺\": 15280,\n         \"##尻\": 15281,\n         \"##尼\": 15282,\n         \"##尽\": 15283,\n         \"##尾\": 15284,\n         \"##尿\": 15285,\n         \"##局\": 15286,\n         \"##屁\": 15287,\n         \"##层\": 15288,\n         \"##屄\": 15289,\n         \"##居\": 15290,\n         \"##屆\": 15291,\n         \"##屈\": 15292,\n         \"##屉\": 15293,\n         \"##届\": 15294,\n         \"##屋\": 15295,\n         \"##屌\": 15296,\n         \"##屍\": 15297,\n         \"##屎\": 15298,\n         \"##屏\": 15299,\n         \"##屐\": 15300,\n         \"##屑\": 15301,\n         \"##展\": 15302,\n         \"##屜\": 15303,\n         \"##属\": 15304,\n         \"##屠\": 15305,\n         \"##屡\": 15306,\n         \"##屢\": 15307,\n         \"##層\": 15308,\n         \"##履\": 15309,\n         \"##屬\": 15310,\n         \"##屯\": 15311,\n         \"##山\": 15312,\n         \"##屹\": 15313,\n         \"##屿\": 15314,\n         \"##岀\": 15315,\n         \"##岁\": 15316,\n         \"##岂\": 15317,\n         \"##岌\": 15318,\n         \"##岐\": 15319,\n         \"##岑\": 15320,\n         \"##岔\": 15321,\n         \"##岖\": 15322,\n         \"##岗\": 15323,\n         \"##岘\": 15324,\n         \"##岙\": 15325,\n         \"##岚\": 15326,\n         \"##岛\": 15327,\n         \"##岡\": 15328,\n         \"##岩\": 15329,\n         \"##岫\": 15330,\n         \"##岬\": 15331,\n         \"##岭\": 15332,\n         \"##岱\": 15333,\n         \"##岳\": 15334,\n         \"##岷\": 15335,\n         \"##岸\": 15336,\n         \"##峇\": 15337,\n         \"##峋\": 15338,\n         \"##峒\": 15339,\n         \"##峙\": 15340,\n         \"##峡\": 15341,\n         \"##峤\": 15342,\n         \"##峥\": 15343,\n         \"##峦\": 15344,\n         \"##峨\": 15345,\n         \"##峪\": 15346,\n         \"##峭\": 15347,\n         \"##峯\": 15348,\n         \"##峰\": 15349,\n         \"##峴\": 15350,\n         \"##島\": 15351,\n         \"##峻\": 15352,\n         \"##峽\": 15353,\n         \"##崁\": 15354,\n         \"##崂\": 15355,\n         \"##崆\": 15356,\n         \"##崇\": 15357,\n         \"##崎\": 15358,\n         \"##崑\": 15359,\n         \"##崔\": 15360,\n         \"##崖\": 15361,\n         \"##崗\": 15362,\n         \"##崙\": 15363,\n         \"##崛\": 15364,\n         \"##崧\": 15365,\n         \"##崩\": 15366,\n         \"##崭\": 15367,\n         \"##崴\": 15368,\n         \"##崽\": 15369,\n         \"##嵇\": 15370,\n         \"##嵊\": 15371,\n         \"##嵋\": 15372,\n         \"##嵌\": 15373,\n         \"##嵐\": 15374,\n         \"##嵘\": 15375,\n         \"##嵩\": 15376,\n         \"##嵬\": 15377,\n         \"##嵯\": 15378,\n         \"##嶂\": 15379,\n         \"##嶄\": 15380,\n         \"##嶇\": 15381,\n         \"##嶋\": 15382,\n         \"##嶙\": 15383,\n         \"##嶺\": 15384,\n         \"##嶼\": 15385,\n         \"##嶽\": 15386,\n         \"##巅\": 15387,\n         \"##巍\": 15388,\n         \"##巒\": 15389,\n         \"##巔\": 15390,\n         \"##巖\": 15391,\n         \"##川\": 15392,\n         \"##州\": 15393,\n         \"##巡\": 15394,\n         \"##巢\": 15395,\n         \"##工\": 15396,\n         \"##左\": 15397,\n         \"##巧\": 15398,\n         \"##巨\": 15399,\n         \"##巩\": 15400,\n         \"##巫\": 15401,\n         \"##差\": 15402,\n         \"##己\": 15403,\n         \"##已\": 15404,\n         \"##巳\": 15405,\n         \"##巴\": 15406,\n         \"##巷\": 15407,\n         \"##巻\": 15408,\n         \"##巽\": 15409,\n         \"##巾\": 15410,\n         \"##巿\": 15411,\n         \"##币\": 15412,\n         \"##市\": 15413,\n         \"##布\": 15414,\n         \"##帅\": 15415,\n         \"##帆\": 15416,\n         \"##师\": 15417,\n         \"##希\": 15418,\n         \"##帐\": 15419,\n         \"##帑\": 15420,\n         \"##帕\": 15421,\n         \"##帖\": 15422,\n         \"##帘\": 15423,\n         \"##帚\": 15424,\n         \"##帛\": 15425,\n         \"##帜\": 15426,\n         \"##帝\": 15427,\n         \"##帥\": 15428,\n         \"##带\": 15429,\n         \"##帧\": 15430,\n         \"##師\": 15431,\n         \"##席\": 15432,\n         \"##帮\": 15433,\n         \"##帯\": 15434,\n         \"##帰\": 15435,\n         \"##帳\": 15436,\n         \"##帶\": 15437,\n         \"##帷\": 15438,\n         \"##常\": 15439,\n         \"##帼\": 15440,\n         \"##帽\": 15441,\n         \"##幀\": 15442,\n         \"##幂\": 15443,\n         \"##幄\": 15444,\n         \"##幅\": 15445,\n         \"##幌\": 15446,\n         \"##幔\": 15447,\n         \"##幕\": 15448,\n         \"##幟\": 15449,\n         \"##幡\": 15450,\n         \"##幢\": 15451,\n         \"##幣\": 15452,\n         \"##幫\": 15453,\n         \"##干\": 15454,\n         \"##平\": 15455,\n         \"##年\": 15456,\n         \"##并\": 15457,\n         \"##幸\": 15458,\n         \"##幹\": 15459,\n         \"##幺\": 15460,\n         \"##幻\": 15461,\n         \"##幼\": 15462,\n         \"##幽\": 15463,\n         \"##幾\": 15464,\n         \"##广\": 15465,\n         \"##庁\": 15466,\n         \"##広\": 15467,\n         \"##庄\": 15468,\n         \"##庆\": 15469,\n         \"##庇\": 15470,\n         \"##床\": 15471,\n         \"##序\": 15472,\n         \"##庐\": 15473,\n         \"##库\": 15474,\n         \"##应\": 15475,\n         \"##底\": 15476,\n         \"##庖\": 15477,\n         \"##店\": 15478,\n         \"##庙\": 15479,\n         \"##庚\": 15480,\n         \"##府\": 15481,\n         \"##庞\": 15482,\n         \"##废\": 15483,\n         \"##庠\": 15484,\n         \"##度\": 15485,\n         \"##座\": 15486,\n         \"##庫\": 15487,\n         \"##庭\": 15488,\n         \"##庵\": 15489,\n         \"##庶\": 15490,\n         \"##康\": 15491,\n         \"##庸\": 15492,\n         \"##庹\": 15493,\n         \"##庾\": 15494,\n         \"##廁\": 15495,\n         \"##廂\": 15496,\n         \"##廃\": 15497,\n         \"##廈\": 15498,\n         \"##廉\": 15499,\n         \"##廊\": 15500,\n         \"##廓\": 15501,\n         \"##廖\": 15502,\n         \"##廚\": 15503,\n         \"##廝\": 15504,\n         \"##廟\": 15505,\n         \"##廠\": 15506,\n         \"##廢\": 15507,\n         \"##廣\": 15508,\n         \"##廬\": 15509,\n         \"##廳\": 15510,\n         \"##延\": 15511,\n         \"##廷\": 15512,\n         \"##建\": 15513,\n         \"##廿\": 15514,\n         \"##开\": 15515,\n         \"##弁\": 15516,\n         \"##异\": 15517,\n         \"##弃\": 15518,\n         \"##弄\": 15519,\n         \"##弈\": 15520,\n         \"##弊\": 15521,\n         \"##弋\": 15522,\n         \"##式\": 15523,\n         \"##弑\": 15524,\n         \"##弒\": 15525,\n         \"##弓\": 15526,\n         \"##弔\": 15527,\n         \"##引\": 15528,\n         \"##弗\": 15529,\n         \"##弘\": 15530,\n         \"##弛\": 15531,\n         \"##弟\": 15532,\n         \"##张\": 15533,\n         \"##弥\": 15534,\n         \"##弦\": 15535,\n         \"##弧\": 15536,\n         \"##弩\": 15537,\n         \"##弭\": 15538,\n         \"##弯\": 15539,\n         \"##弱\": 15540,\n         \"##張\": 15541,\n         \"##強\": 15542,\n         \"##弹\": 15543,\n         \"##强\": 15544,\n         \"##弼\": 15545,\n         \"##弾\": 15546,\n         \"##彅\": 15547,\n         \"##彆\": 15548,\n         \"##彈\": 15549,\n         \"##彌\": 15550,\n         \"##彎\": 15551,\n         \"##归\": 15552,\n         \"##当\": 15553,\n         \"##录\": 15554,\n         \"##彗\": 15555,\n         \"##彙\": 15556,\n         \"##彝\": 15557,\n         \"##形\": 15558,\n         \"##彤\": 15559,\n         \"##彥\": 15560,\n         \"##彦\": 15561,\n         \"##彧\": 15562,\n         \"##彩\": 15563,\n         \"##彪\": 15564,\n         \"##彫\": 15565,\n         \"##彬\": 15566,\n         \"##彭\": 15567,\n         \"##彰\": 15568,\n         \"##影\": 15569,\n         \"##彷\": 15570,\n         \"##役\": 15571,\n         \"##彻\": 15572,\n         \"##彼\": 15573,\n         \"##彿\": 15574,\n         \"##往\": 15575,\n         \"##征\": 15576,\n         \"##径\": 15577,\n         \"##待\": 15578,\n         \"##徇\": 15579,\n         \"##很\": 15580,\n         \"##徉\": 15581,\n         \"##徊\": 15582,\n         \"##律\": 15583,\n         \"##後\": 15584,\n         \"##徐\": 15585,\n         \"##徑\": 15586,\n         \"##徒\": 15587,\n         \"##従\": 15588,\n         \"##徕\": 15589,\n         \"##得\": 15590,\n         \"##徘\": 15591,\n         \"##徙\": 15592,\n         \"##徜\": 15593,\n         \"##從\": 15594,\n         \"##徠\": 15595,\n         \"##御\": 15596,\n         \"##徨\": 15597,\n         \"##復\": 15598,\n         \"##循\": 15599,\n         \"##徬\": 15600,\n         \"##微\": 15601,\n         \"##徳\": 15602,\n         \"##徴\": 15603,\n         \"##徵\": 15604,\n         \"##德\": 15605,\n         \"##徹\": 15606,\n         \"##徼\": 15607,\n         \"##徽\": 15608,\n         \"##心\": 15609,\n         \"##必\": 15610,\n         \"##忆\": 15611,\n         \"##忌\": 15612,\n         \"##忍\": 15613,\n         \"##忏\": 15614,\n         \"##忐\": 15615,\n         \"##忑\": 15616,\n         \"##忒\": 15617,\n         \"##忖\": 15618,\n         \"##志\": 15619,\n         \"##忘\": 15620,\n         \"##忙\": 15621,\n         \"##応\": 15622,\n         \"##忠\": 15623,\n         \"##忡\": 15624,\n         \"##忤\": 15625,\n         \"##忧\": 15626,\n         \"##忪\": 15627,\n         \"##快\": 15628,\n         \"##忱\": 15629,\n         \"##念\": 15630,\n         \"##忻\": 15631,\n         \"##忽\": 15632,\n         \"##忿\": 15633,\n         \"##怀\": 15634,\n         \"##态\": 15635,\n         \"##怂\": 15636,\n         \"##怅\": 15637,\n         \"##怆\": 15638,\n         \"##怎\": 15639,\n         \"##怏\": 15640,\n         \"##怒\": 15641,\n         \"##怔\": 15642,\n         \"##怕\": 15643,\n         \"##怖\": 15644,\n         \"##怙\": 15645,\n         \"##怜\": 15646,\n         \"##思\": 15647,\n         \"##怠\": 15648,\n         \"##怡\": 15649,\n         \"##急\": 15650,\n         \"##怦\": 15651,\n         \"##性\": 15652,\n         \"##怨\": 15653,\n         \"##怪\": 15654,\n         \"##怯\": 15655,\n         \"##怵\": 15656,\n         \"##总\": 15657,\n         \"##怼\": 15658,\n         \"##恁\": 15659,\n         \"##恃\": 15660,\n         \"##恆\": 15661,\n         \"##恋\": 15662,\n         \"##恍\": 15663,\n         \"##恐\": 15664,\n         \"##恒\": 15665,\n         \"##恕\": 15666,\n         \"##恙\": 15667,\n         \"##恚\": 15668,\n         \"##恢\": 15669,\n         \"##恣\": 15670,\n         \"##恤\": 15671,\n         \"##恥\": 15672,\n         \"##恨\": 15673,\n         \"##恩\": 15674,\n         \"##恪\": 15675,\n         \"##恫\": 15676,\n         \"##恬\": 15677,\n         \"##恭\": 15678,\n         \"##息\": 15679,\n         \"##恰\": 15680,\n         \"##恳\": 15681,\n         \"##恵\": 15682,\n         \"##恶\": 15683,\n         \"##恸\": 15684,\n         \"##恺\": 15685,\n         \"##恻\": 15686,\n         \"##恼\": 15687,\n         \"##恿\": 15688,\n         \"##悄\": 15689,\n         \"##悅\": 15690,\n         \"##悉\": 15691,\n         \"##悌\": 15692,\n         \"##悍\": 15693,\n         \"##悔\": 15694,\n         \"##悖\": 15695,\n         \"##悚\": 15696,\n         \"##悟\": 15697,\n         \"##悠\": 15698,\n         \"##患\": 15699,\n         \"##悦\": 15700,\n         \"##您\": 15701,\n         \"##悩\": 15702,\n         \"##悪\": 15703,\n         \"##悬\": 15704,\n         \"##悯\": 15705,\n         \"##悱\": 15706,\n         \"##悲\": 15707,\n         \"##悴\": 15708,\n         \"##悵\": 15709,\n         \"##悶\": 15710,\n         \"##悸\": 15711,\n         \"##悻\": 15712,\n         \"##悼\": 15713,\n         \"##悽\": 15714,\n         \"##情\": 15715,\n         \"##惆\": 15716,\n         \"##惇\": 15717,\n         \"##惊\": 15718,\n         \"##惋\": 15719,\n         \"##惑\": 15720,\n         \"##惕\": 15721,\n         \"##惘\": 15722,\n         \"##惚\": 15723,\n         \"##惜\": 15724,\n         \"##惟\": 15725,\n         \"##惠\": 15726,\n         \"##惡\": 15727,\n         \"##惦\": 15728,\n         \"##惧\": 15729,\n         \"##惨\": 15730,\n         \"##惩\": 15731,\n         \"##惫\": 15732,\n         \"##惬\": 15733,\n         \"##惭\": 15734,\n         \"##惮\": 15735,\n         \"##惯\": 15736,\n         \"##惰\": 15737,\n         \"##惱\": 15738,\n         \"##想\": 15739,\n         \"##惴\": 15740,\n         \"##惶\": 15741,\n         \"##惹\": 15742,\n         \"##惺\": 15743,\n         \"##愁\": 15744,\n         \"##愆\": 15745,\n         \"##愈\": 15746,\n         \"##愉\": 15747,\n         \"##愍\": 15748,\n         \"##意\": 15749,\n         \"##愕\": 15750,\n         \"##愚\": 15751,\n         \"##愛\": 15752,\n         \"##愜\": 15753,\n         \"##感\": 15754,\n         \"##愣\": 15755,\n         \"##愤\": 15756,\n         \"##愧\": 15757,\n         \"##愫\": 15758,\n         \"##愷\": 15759,\n         \"##愿\": 15760,\n         \"##慄\": 15761,\n         \"##慈\": 15762,\n         \"##態\": 15763,\n         \"##慌\": 15764,\n         \"##慎\": 15765,\n         \"##慑\": 15766,\n         \"##慕\": 15767,\n         \"##慘\": 15768,\n         \"##慚\": 15769,\n         \"##慟\": 15770,\n         \"##慢\": 15771,\n         \"##慣\": 15772,\n         \"##慧\": 15773,\n         \"##慨\": 15774,\n         \"##慫\": 15775,\n         \"##慮\": 15776,\n         \"##慰\": 15777,\n         \"##慳\": 15778,\n         \"##慵\": 15779,\n         \"##慶\": 15780,\n         \"##慷\": 15781,\n         \"##慾\": 15782,\n         \"##憂\": 15783,\n         \"##憊\": 15784,\n         \"##憋\": 15785,\n         \"##憎\": 15786,\n         \"##憐\": 15787,\n         \"##憑\": 15788,\n         \"##憔\": 15789,\n         \"##憚\": 15790,\n         \"##憤\": 15791,\n         \"##憧\": 15792,\n         \"##憨\": 15793,\n         \"##憩\": 15794,\n         \"##憫\": 15795,\n         \"##憬\": 15796,\n         \"##憲\": 15797,\n         \"##憶\": 15798,\n         \"##憾\": 15799,\n         \"##懂\": 15800,\n         \"##懇\": 15801,\n         \"##懈\": 15802,\n         \"##應\": 15803,\n         \"##懊\": 15804,\n         \"##懋\": 15805,\n         \"##懑\": 15806,\n         \"##懒\": 15807,\n         \"##懦\": 15808,\n         \"##懲\": 15809,\n         \"##懵\": 15810,\n         \"##懶\": 15811,\n         \"##懷\": 15812,\n         \"##懸\": 15813,\n         \"##懺\": 15814,\n         \"##懼\": 15815,\n         \"##懾\": 15816,\n         \"##懿\": 15817,\n         \"##戀\": 15818,\n         \"##戈\": 15819,\n         \"##戊\": 15820,\n         \"##戌\": 15821,\n         \"##戍\": 15822,\n         \"##戎\": 15823,\n         \"##戏\": 15824,\n         \"##成\": 15825,\n         \"##我\": 15826,\n         \"##戒\": 15827,\n         \"##戕\": 15828,\n         \"##或\": 15829,\n         \"##战\": 15830,\n         \"##戚\": 15831,\n         \"##戛\": 15832,\n         \"##戟\": 15833,\n         \"##戡\": 15834,\n         \"##戦\": 15835,\n         \"##截\": 15836,\n         \"##戬\": 15837,\n         \"##戮\": 15838,\n         \"##戰\": 15839,\n         \"##戲\": 15840,\n         \"##戳\": 15841,\n         \"##戴\": 15842,\n         \"##戶\": 15843,\n         \"##户\": 15844,\n         \"##戸\": 15845,\n         \"##戻\": 15846,\n         \"##戾\": 15847,\n         \"##房\": 15848,\n         \"##所\": 15849,\n         \"##扁\": 15850,\n         \"##扇\": 15851,\n         \"##扈\": 15852,\n         \"##扉\": 15853,\n         \"##手\": 15854,\n         \"##才\": 15855,\n         \"##扎\": 15856,\n         \"##扑\": 15857,\n         \"##扒\": 15858,\n         \"##打\": 15859,\n         \"##扔\": 15860,\n         \"##払\": 15861,\n         \"##托\": 15862,\n         \"##扛\": 15863,\n         \"##扣\": 15864,\n         \"##扦\": 15865,\n         \"##执\": 15866,\n         \"##扩\": 15867,\n         \"##扪\": 15868,\n         \"##扫\": 15869,\n         \"##扬\": 15870,\n         \"##扭\": 15871,\n         \"##扮\": 15872,\n         \"##扯\": 15873,\n         \"##扰\": 15874,\n         \"##扱\": 15875,\n         \"##扳\": 15876,\n         \"##扶\": 15877,\n         \"##批\": 15878,\n         \"##扼\": 15879,\n         \"##找\": 15880,\n         \"##承\": 15881,\n         \"##技\": 15882,\n         \"##抄\": 15883,\n         \"##抉\": 15884,\n         \"##把\": 15885,\n         \"##抑\": 15886,\n         \"##抒\": 15887,\n         \"##抓\": 15888,\n         \"##投\": 15889,\n         \"##抖\": 15890,\n         \"##抗\": 15891,\n         \"##折\": 15892,\n         \"##抚\": 15893,\n         \"##抛\": 15894,\n         \"##抜\": 15895,\n         \"##択\": 15896,\n         \"##抟\": 15897,\n         \"##抠\": 15898,\n         \"##抡\": 15899,\n         \"##抢\": 15900,\n         \"##护\": 15901,\n         \"##报\": 15902,\n         \"##抨\": 15903,\n         \"##披\": 15904,\n         \"##抬\": 15905,\n         \"##抱\": 15906,\n         \"##抵\": 15907,\n         \"##抹\": 15908,\n         \"##押\": 15909,\n         \"##抽\": 15910,\n         \"##抿\": 15911,\n         \"##拂\": 15912,\n         \"##拄\": 15913,\n         \"##担\": 15914,\n         \"##拆\": 15915,\n         \"##拇\": 15916,\n         \"##拈\": 15917,\n         \"##拉\": 15918,\n         \"##拋\": 15919,\n         \"##拌\": 15920,\n         \"##拍\": 15921,\n         \"##拎\": 15922,\n         \"##拐\": 15923,\n         \"##拒\": 15924,\n         \"##拓\": 15925,\n         \"##拔\": 15926,\n         \"##拖\": 15927,\n         \"##拗\": 15928,\n         \"##拘\": 15929,\n         \"##拙\": 15930,\n         \"##拚\": 15931,\n         \"##招\": 15932,\n         \"##拜\": 15933,\n         \"##拟\": 15934,\n         \"##拡\": 15935,\n         \"##拢\": 15936,\n         \"##拣\": 15937,\n         \"##拥\": 15938,\n         \"##拦\": 15939,\n         \"##拧\": 15940,\n         \"##拨\": 15941,\n         \"##择\": 15942,\n         \"##括\": 15943,\n         \"##拭\": 15944,\n         \"##拮\": 15945,\n         \"##拯\": 15946,\n         \"##拱\": 15947,\n         \"##拳\": 15948,\n         \"##拴\": 15949,\n         \"##拷\": 15950,\n         \"##拼\": 15951,\n         \"##拽\": 15952,\n         \"##拾\": 15953,\n         \"##拿\": 15954,\n         \"##持\": 15955,\n         \"##挂\": 15956,\n         \"##指\": 15957,\n         \"##挈\": 15958,\n         \"##按\": 15959,\n         \"##挎\": 15960,\n         \"##挑\": 15961,\n         \"##挖\": 15962,\n         \"##挙\": 15963,\n         \"##挚\": 15964,\n         \"##挛\": 15965,\n         \"##挝\": 15966,\n         \"##挞\": 15967,\n         \"##挟\": 15968,\n         \"##挠\": 15969,\n         \"##挡\": 15970,\n         \"##挣\": 15971,\n         \"##挤\": 15972,\n         \"##挥\": 15973,\n         \"##挨\": 15974,\n         \"##挪\": 15975,\n         \"##挫\": 15976,\n         \"##振\": 15977,\n         \"##挲\": 15978,\n         \"##挹\": 15979,\n         \"##挺\": 15980,\n         \"##挽\": 15981,\n         \"##挾\": 15982,\n         \"##捂\": 15983,\n         \"##捅\": 15984,\n         \"##捆\": 15985,\n         \"##捉\": 15986,\n         \"##捋\": 15987,\n         \"##捌\": 15988,\n         \"##捍\": 15989,\n         \"##捎\": 15990,\n         \"##捏\": 15991,\n         \"##捐\": 15992,\n         \"##捕\": 15993,\n         \"##捞\": 15994,\n         \"##损\": 15995,\n         \"##捡\": 15996,\n         \"##换\": 15997,\n         \"##捣\": 15998,\n         \"##捧\": 15999,\n         \"##捨\": 16000,\n         \"##捩\": 16001,\n         \"##据\": 16002,\n         \"##捱\": 16003,\n         \"##捲\": 16004,\n         \"##捶\": 16005,\n         \"##捷\": 16006,\n         \"##捺\": 16007,\n         \"##捻\": 16008,\n         \"##掀\": 16009,\n         \"##掂\": 16010,\n         \"##掃\": 16011,\n         \"##掇\": 16012,\n         \"##授\": 16013,\n         \"##掉\": 16014,\n         \"##掌\": 16015,\n         \"##掏\": 16016,\n         \"##掐\": 16017,\n         \"##排\": 16018,\n         \"##掖\": 16019,\n         \"##掘\": 16020,\n         \"##掙\": 16021,\n         \"##掛\": 16022,\n         \"##掠\": 16023,\n         \"##採\": 16024,\n         \"##探\": 16025,\n         \"##掣\": 16026,\n         \"##接\": 16027,\n         \"##控\": 16028,\n         \"##推\": 16029,\n         \"##掩\": 16030,\n         \"##措\": 16031,\n         \"##掬\": 16032,\n         \"##掰\": 16033,\n         \"##掲\": 16034,\n         \"##掳\": 16035,\n         \"##掴\": 16036,\n         \"##掷\": 16037,\n         \"##掸\": 16038,\n         \"##掺\": 16039,\n         \"##揀\": 16040,\n         \"##揃\": 16041,\n         \"##揄\": 16042,\n         \"##揆\": 16043,\n         \"##揉\": 16044,\n         \"##揍\": 16045,\n         \"##描\": 16046,\n         \"##提\": 16047,\n         \"##插\": 16048,\n         \"##揖\": 16049,\n         \"##揚\": 16050,\n         \"##換\": 16051,\n         \"##握\": 16052,\n         \"##揣\": 16053,\n         \"##揩\": 16054,\n         \"##揪\": 16055,\n         \"##揭\": 16056,\n         \"##揮\": 16057,\n         \"##援\": 16058,\n         \"##揶\": 16059,\n         \"##揸\": 16060,\n         \"##揹\": 16061,\n         \"##揽\": 16062,\n         \"##搀\": 16063,\n         \"##搁\": 16064,\n         \"##搂\": 16065,\n         \"##搅\": 16066,\n         \"##損\": 16067,\n         \"##搏\": 16068,\n         \"##搐\": 16069,\n         \"##搓\": 16070,\n         \"##搔\": 16071,\n         \"##搖\": 16072,\n         \"##搗\": 16073,\n         \"##搜\": 16074,\n         \"##搞\": 16075,\n         \"##搡\": 16076,\n         \"##搪\": 16077,\n         \"##搬\": 16078,\n         \"##搭\": 16079,\n         \"##搵\": 16080,\n         \"##搶\": 16081,\n         \"##携\": 16082,\n         \"##搽\": 16083,\n         \"##摀\": 16084,\n         \"##摁\": 16085,\n         \"##摄\": 16086,\n         \"##摆\": 16087,\n         \"##摇\": 16088,\n         \"##摈\": 16089,\n         \"##摊\": 16090,\n         \"##摒\": 16091,\n         \"##摔\": 16092,\n         \"##摘\": 16093,\n         \"##摞\": 16094,\n         \"##摟\": 16095,\n         \"##摧\": 16096,\n         \"##摩\": 16097,\n         \"##摯\": 16098,\n         \"##摳\": 16099,\n         \"##摸\": 16100,\n         \"##摹\": 16101,\n         \"##摺\": 16102,\n         \"##摻\": 16103,\n         \"##撂\": 16104,\n         \"##撃\": 16105,\n         \"##撅\": 16106,\n         \"##撇\": 16107,\n         \"##撈\": 16108,\n         \"##撐\": 16109,\n         \"##撑\": 16110,\n         \"##撒\": 16111,\n         \"##撓\": 16112,\n         \"##撕\": 16113,\n         \"##撚\": 16114,\n         \"##撞\": 16115,\n         \"##撤\": 16116,\n         \"##撥\": 16117,\n         \"##撩\": 16118,\n         \"##撫\": 16119,\n         \"##撬\": 16120,\n         \"##播\": 16121,\n         \"##撮\": 16122,\n         \"##撰\": 16123,\n         \"##撲\": 16124,\n         \"##撵\": 16125,\n         \"##撷\": 16126,\n         \"##撸\": 16127,\n         \"##撻\": 16128,\n         \"##撼\": 16129,\n         \"##撿\": 16130,\n         \"##擀\": 16131,\n         \"##擁\": 16132,\n         \"##擂\": 16133,\n         \"##擄\": 16134,\n         \"##擅\": 16135,\n         \"##擇\": 16136,\n         \"##擊\": 16137,\n         \"##擋\": 16138,\n         \"##操\": 16139,\n         \"##擎\": 16140,\n         \"##擒\": 16141,\n         \"##擔\": 16142,\n         \"##擘\": 16143,\n         \"##據\": 16144,\n         \"##擞\": 16145,\n         \"##擠\": 16146,\n         \"##擡\": 16147,\n         \"##擢\": 16148,\n         \"##擦\": 16149,\n         \"##擬\": 16150,\n         \"##擰\": 16151,\n         \"##擱\": 16152,\n         \"##擲\": 16153,\n         \"##擴\": 16154,\n         \"##擷\": 16155,\n         \"##擺\": 16156,\n         \"##擼\": 16157,\n         \"##擾\": 16158,\n         \"##攀\": 16159,\n         \"##攏\": 16160,\n         \"##攒\": 16161,\n         \"##攔\": 16162,\n         \"##攘\": 16163,\n         \"##攙\": 16164,\n         \"##攜\": 16165,\n         \"##攝\": 16166,\n         \"##攞\": 16167,\n         \"##攢\": 16168,\n         \"##攣\": 16169,\n         \"##攤\": 16170,\n         \"##攥\": 16171,\n         \"##攪\": 16172,\n         \"##攫\": 16173,\n         \"##攬\": 16174,\n         \"##支\": 16175,\n         \"##收\": 16176,\n         \"##攸\": 16177,\n         \"##改\": 16178,\n         \"##攻\": 16179,\n         \"##放\": 16180,\n         \"##政\": 16181,\n         \"##故\": 16182,\n         \"##效\": 16183,\n         \"##敌\": 16184,\n         \"##敍\": 16185,\n         \"##敎\": 16186,\n         \"##敏\": 16187,\n         \"##救\": 16188,\n         \"##敕\": 16189,\n         \"##敖\": 16190,\n         \"##敗\": 16191,\n         \"##敘\": 16192,\n         \"##教\": 16193,\n         \"##敛\": 16194,\n         \"##敝\": 16195,\n         \"##敞\": 16196,\n         \"##敢\": 16197,\n         \"##散\": 16198,\n         \"##敦\": 16199,\n         \"##敬\": 16200,\n         \"##数\": 16201,\n         \"##敲\": 16202,\n         \"##整\": 16203,\n         \"##敵\": 16204,\n         \"##敷\": 16205,\n         \"##數\": 16206,\n         \"##斂\": 16207,\n         \"##斃\": 16208,\n         \"##文\": 16209,\n         \"##斋\": 16210,\n         \"##斌\": 16211,\n         \"##斎\": 16212,\n         \"##斐\": 16213,\n         \"##斑\": 16214,\n         \"##斓\": 16215,\n         \"##斗\": 16216,\n         \"##料\": 16217,\n         \"##斛\": 16218,\n         \"##斜\": 16219,\n         \"##斟\": 16220,\n         \"##斡\": 16221,\n         \"##斤\": 16222,\n         \"##斥\": 16223,\n         \"##斧\": 16224,\n         \"##斩\": 16225,\n         \"##斫\": 16226,\n         \"##斬\": 16227,\n         \"##断\": 16228,\n         \"##斯\": 16229,\n         \"##新\": 16230,\n         \"##斷\": 16231,\n         \"##方\": 16232,\n         \"##於\": 16233,\n         \"##施\": 16234,\n         \"##旁\": 16235,\n         \"##旃\": 16236,\n         \"##旅\": 16237,\n         \"##旋\": 16238,\n         \"##旌\": 16239,\n         \"##旎\": 16240,\n         \"##族\": 16241,\n         \"##旖\": 16242,\n         \"##旗\": 16243,\n         \"##无\": 16244,\n         \"##既\": 16245,\n         \"##日\": 16246,\n         \"##旦\": 16247,\n         \"##旧\": 16248,\n         \"##旨\": 16249,\n         \"##早\": 16250,\n         \"##旬\": 16251,\n         \"##旭\": 16252,\n         \"##旮\": 16253,\n         \"##旱\": 16254,\n         \"##时\": 16255,\n         \"##旷\": 16256,\n         \"##旺\": 16257,\n         \"##旻\": 16258,\n         \"##昀\": 16259,\n         \"##昂\": 16260,\n         \"##昆\": 16261,\n         \"##昇\": 16262,\n         \"##昉\": 16263,\n         \"##昊\": 16264,\n         \"##昌\": 16265,\n         \"##明\": 16266,\n         \"##昏\": 16267,\n         \"##易\": 16268,\n         \"##昔\": 16269,\n         \"##昕\": 16270,\n         \"##昙\": 16271,\n         \"##星\": 16272,\n         \"##映\": 16273,\n         \"##春\": 16274,\n         \"##昧\": 16275,\n         \"##昨\": 16276,\n         \"##昭\": 16277,\n         \"##是\": 16278,\n         \"##昱\": 16279,\n         \"##昴\": 16280,\n         \"##昵\": 16281,\n         \"##昶\": 16282,\n         \"##昼\": 16283,\n         \"##显\": 16284,\n         \"##晁\": 16285,\n         \"##時\": 16286,\n         \"##晃\": 16287,\n         \"##晉\": 16288,\n         \"##晋\": 16289,\n         \"##晌\": 16290,\n         \"##晏\": 16291,\n         \"##晒\": 16292,\n         \"##晓\": 16293,\n         \"##晔\": 16294,\n         \"##晕\": 16295,\n         \"##晖\": 16296,\n         \"##晗\": 16297,\n         \"##晚\": 16298,\n         \"##晝\": 16299,\n         \"##晞\": 16300,\n         \"##晟\": 16301,\n         \"##晤\": 16302,\n         \"##晦\": 16303,\n         \"##晨\": 16304,\n         \"##晩\": 16305,\n         \"##普\": 16306,\n         \"##景\": 16307,\n         \"##晰\": 16308,\n         \"##晴\": 16309,\n         \"##晶\": 16310,\n         \"##晷\": 16311,\n         \"##智\": 16312,\n         \"##晾\": 16313,\n         \"##暂\": 16314,\n         \"##暄\": 16315,\n         \"##暇\": 16316,\n         \"##暈\": 16317,\n         \"##暉\": 16318,\n         \"##暌\": 16319,\n         \"##暐\": 16320,\n         \"##暑\": 16321,\n         \"##暖\": 16322,\n         \"##暗\": 16323,\n         \"##暝\": 16324,\n         \"##暢\": 16325,\n         \"##暧\": 16326,\n         \"##暨\": 16327,\n         \"##暫\": 16328,\n         \"##暮\": 16329,\n         \"##暱\": 16330,\n         \"##暴\": 16331,\n         \"##暸\": 16332,\n         \"##暹\": 16333,\n         \"##曄\": 16334,\n         \"##曆\": 16335,\n         \"##曇\": 16336,\n         \"##曉\": 16337,\n         \"##曖\": 16338,\n         \"##曙\": 16339,\n         \"##曜\": 16340,\n         \"##曝\": 16341,\n         \"##曠\": 16342,\n         \"##曦\": 16343,\n         \"##曬\": 16344,\n         \"##曰\": 16345,\n         \"##曲\": 16346,\n         \"##曳\": 16347,\n         \"##更\": 16348,\n         \"##書\": 16349,\n         \"##曹\": 16350,\n         \"##曼\": 16351,\n         \"##曾\": 16352,\n         \"##替\": 16353,\n         \"##最\": 16354,\n         \"##會\": 16355,\n         \"##月\": 16356,\n         \"##有\": 16357,\n         \"##朋\": 16358,\n         \"##服\": 16359,\n         \"##朐\": 16360,\n         \"##朔\": 16361,\n         \"##朕\": 16362,\n         \"##朗\": 16363,\n         \"##望\": 16364,\n         \"##朝\": 16365,\n         \"##期\": 16366,\n         \"##朦\": 16367,\n         \"##朧\": 16368,\n         \"##木\": 16369,\n         \"##未\": 16370,\n         \"##末\": 16371,\n         \"##本\": 16372,\n         \"##札\": 16373,\n         \"##朮\": 16374,\n         \"##术\": 16375,\n         \"##朱\": 16376,\n         \"##朴\": 16377,\n         \"##朵\": 16378,\n         \"##机\": 16379,\n         \"##朽\": 16380,\n         \"##杀\": 16381,\n         \"##杂\": 16382,\n         \"##权\": 16383,\n         \"##杆\": 16384,\n         \"##杈\": 16385,\n         \"##杉\": 16386,\n         \"##李\": 16387,\n         \"##杏\": 16388,\n         \"##材\": 16389,\n         \"##村\": 16390,\n         \"##杓\": 16391,\n         \"##杖\": 16392,\n         \"##杜\": 16393,\n         \"##杞\": 16394,\n         \"##束\": 16395,\n         \"##杠\": 16396,\n         \"##条\": 16397,\n         \"##来\": 16398,\n         \"##杨\": 16399,\n         \"##杭\": 16400,\n         \"##杯\": 16401,\n         \"##杰\": 16402,\n         \"##東\": 16403,\n         \"##杳\": 16404,\n         \"##杵\": 16405,\n         \"##杷\": 16406,\n         \"##杼\": 16407,\n         \"##松\": 16408,\n         \"##板\": 16409,\n         \"##极\": 16410,\n         \"##构\": 16411,\n         \"##枇\": 16412,\n         \"##枉\": 16413,\n         \"##枋\": 16414,\n         \"##析\": 16415,\n         \"##枕\": 16416,\n         \"##林\": 16417,\n         \"##枚\": 16418,\n         \"##果\": 16419,\n         \"##枝\": 16420,\n         \"##枢\": 16421,\n         \"##枣\": 16422,\n         \"##枪\": 16423,\n         \"##枫\": 16424,\n         \"##枭\": 16425,\n         \"##枯\": 16426,\n         \"##枰\": 16427,\n         \"##枱\": 16428,\n         \"##枳\": 16429,\n         \"##架\": 16430,\n         \"##枷\": 16431,\n         \"##枸\": 16432,\n         \"##柄\": 16433,\n         \"##柏\": 16434,\n         \"##某\": 16435,\n         \"##柑\": 16436,\n         \"##柒\": 16437,\n         \"##染\": 16438,\n         \"##柔\": 16439,\n         \"##柘\": 16440,\n         \"##柚\": 16441,\n         \"##柜\": 16442,\n         \"##柞\": 16443,\n         \"##柠\": 16444,\n         \"##柢\": 16445,\n         \"##查\": 16446,\n         \"##柩\": 16447,\n         \"##柬\": 16448,\n         \"##柯\": 16449,\n         \"##柱\": 16450,\n         \"##柳\": 16451,\n         \"##柴\": 16452,\n         \"##柵\": 16453,\n         \"##査\": 16454,\n         \"##柿\": 16455,\n         \"##栀\": 16456,\n         \"##栃\": 16457,\n         \"##栄\": 16458,\n         \"##栅\": 16459,\n         \"##标\": 16460,\n         \"##栈\": 16461,\n         \"##栉\": 16462,\n         \"##栋\": 16463,\n         \"##栎\": 16464,\n         \"##栏\": 16465,\n         \"##树\": 16466,\n         \"##栓\": 16467,\n         \"##栖\": 16468,\n         \"##栗\": 16469,\n         \"##校\": 16470,\n         \"##栩\": 16471,\n         \"##株\": 16472,\n         \"##样\": 16473,\n         \"##核\": 16474,\n         \"##根\": 16475,\n         \"##格\": 16476,\n         \"##栽\": 16477,\n         \"##栾\": 16478,\n         \"##桀\": 16479,\n         \"##桁\": 16480,\n         \"##桂\": 16481,\n         \"##桃\": 16482,\n         \"##桅\": 16483,\n         \"##框\": 16484,\n         \"##案\": 16485,\n         \"##桉\": 16486,\n         \"##桌\": 16487,\n         \"##桎\": 16488,\n         \"##桐\": 16489,\n         \"##桑\": 16490,\n         \"##桓\": 16491,\n         \"##桔\": 16492,\n         \"##桜\": 16493,\n         \"##桠\": 16494,\n         \"##桡\": 16495,\n         \"##桢\": 16496,\n         \"##档\": 16497,\n         \"##桥\": 16498,\n         \"##桦\": 16499,\n         \"##桧\": 16500,\n         \"##桨\": 16501,\n         \"##桩\": 16502,\n         \"##桶\": 16503,\n         \"##桿\": 16504,\n         \"##梁\": 16505,\n         \"##梅\": 16506,\n         \"##梆\": 16507,\n         \"##梏\": 16508,\n         \"##梓\": 16509,\n         \"##梗\": 16510,\n         \"##條\": 16511,\n         \"##梟\": 16512,\n         \"##梢\": 16513,\n         \"##梦\": 16514,\n         \"##梧\": 16515,\n         \"##梨\": 16516,\n         \"##梭\": 16517,\n         \"##梯\": 16518,\n         \"##械\": 16519,\n         \"##梳\": 16520,\n         \"##梵\": 16521,\n         \"##梶\": 16522,\n         \"##检\": 16523,\n         \"##棂\": 16524,\n         \"##棄\": 16525,\n         \"##棉\": 16526,\n         \"##棋\": 16527,\n         \"##棍\": 16528,\n         \"##棒\": 16529,\n         \"##棕\": 16530,\n         \"##棗\": 16531,\n         \"##棘\": 16532,\n         \"##棚\": 16533,\n         \"##棟\": 16534,\n         \"##棠\": 16535,\n         \"##棣\": 16536,\n         \"##棧\": 16537,\n         \"##森\": 16538,\n         \"##棱\": 16539,\n         \"##棲\": 16540,\n         \"##棵\": 16541,\n         \"##棹\": 16542,\n         \"##棺\": 16543,\n         \"##椁\": 16544,\n         \"##椅\": 16545,\n         \"##椋\": 16546,\n         \"##植\": 16547,\n         \"##椎\": 16548,\n         \"##椒\": 16549,\n         \"##検\": 16550,\n         \"##椪\": 16551,\n         \"##椭\": 16552,\n         \"##椰\": 16553,\n         \"##椹\": 16554,\n         \"##椽\": 16555,\n         \"##椿\": 16556,\n         \"##楂\": 16557,\n         \"##楊\": 16558,\n         \"##楓\": 16559,\n         \"##楔\": 16560,\n         \"##楚\": 16561,\n         \"##楝\": 16562,\n         \"##楞\": 16563,\n         \"##楠\": 16564,\n         \"##楣\": 16565,\n         \"##楨\": 16566,\n         \"##楫\": 16567,\n         \"##業\": 16568,\n         \"##楮\": 16569,\n         \"##極\": 16570,\n         \"##楷\": 16571,\n         \"##楸\": 16572,\n         \"##楹\": 16573,\n         \"##楼\": 16574,\n         \"##楽\": 16575,\n         \"##概\": 16576,\n         \"##榄\": 16577,\n         \"##榆\": 16578,\n         \"##榈\": 16579,\n         \"##榉\": 16580,\n         \"##榔\": 16581,\n         \"##榕\": 16582,\n         \"##榖\": 16583,\n         \"##榛\": 16584,\n         \"##榜\": 16585,\n         \"##榨\": 16586,\n         \"##榫\": 16587,\n         \"##榭\": 16588,\n         \"##榮\": 16589,\n         \"##榱\": 16590,\n         \"##榴\": 16591,\n         \"##榷\": 16592,\n         \"##榻\": 16593,\n         \"##槁\": 16594,\n         \"##槃\": 16595,\n         \"##構\": 16596,\n         \"##槌\": 16597,\n         \"##槍\": 16598,\n         \"##槎\": 16599,\n         \"##槐\": 16600,\n         \"##槓\": 16601,\n         \"##様\": 16602,\n         \"##槛\": 16603,\n         \"##槟\": 16604,\n         \"##槤\": 16605,\n         \"##槭\": 16606,\n         \"##槲\": 16607,\n         \"##槳\": 16608,\n         \"##槻\": 16609,\n         \"##槽\": 16610,\n         \"##槿\": 16611,\n         \"##樁\": 16612,\n         \"##樂\": 16613,\n         \"##樊\": 16614,\n         \"##樑\": 16615,\n         \"##樓\": 16616,\n         \"##標\": 16617,\n         \"##樞\": 16618,\n         \"##樟\": 16619,\n         \"##模\": 16620,\n         \"##樣\": 16621,\n         \"##権\": 16622,\n         \"##横\": 16623,\n         \"##樫\": 16624,\n         \"##樯\": 16625,\n         \"##樱\": 16626,\n         \"##樵\": 16627,\n         \"##樸\": 16628,\n         \"##樹\": 16629,\n         \"##樺\": 16630,\n         \"##樽\": 16631,\n         \"##樾\": 16632,\n         \"##橄\": 16633,\n         \"##橇\": 16634,\n         \"##橋\": 16635,\n         \"##橐\": 16636,\n         \"##橘\": 16637,\n         \"##橙\": 16638,\n         \"##機\": 16639,\n         \"##橡\": 16640,\n         \"##橢\": 16641,\n         \"##橫\": 16642,\n         \"##橱\": 16643,\n         \"##橹\": 16644,\n         \"##橼\": 16645,\n         \"##檀\": 16646,\n         \"##檄\": 16647,\n         \"##檎\": 16648,\n         \"##檐\": 16649,\n         \"##檔\": 16650,\n         \"##檗\": 16651,\n         \"##檜\": 16652,\n         \"##檢\": 16653,\n         \"##檬\": 16654,\n         \"##檯\": 16655,\n         \"##檳\": 16656,\n         \"##檸\": 16657,\n         \"##檻\": 16658,\n         \"##櫃\": 16659,\n         \"##櫚\": 16660,\n         \"##櫛\": 16661,\n         \"##櫥\": 16662,\n         \"##櫸\": 16663,\n         \"##櫻\": 16664,\n         \"##欄\": 16665,\n         \"##權\": 16666,\n         \"##欒\": 16667,\n         \"##欖\": 16668,\n         \"##欠\": 16669,\n         \"##次\": 16670,\n         \"##欢\": 16671,\n         \"##欣\": 16672,\n         \"##欧\": 16673,\n         \"##欲\": 16674,\n         \"##欸\": 16675,\n         \"##欺\": 16676,\n         \"##欽\": 16677,\n         \"##款\": 16678,\n         \"##歆\": 16679,\n         \"##歇\": 16680,\n         \"##歉\": 16681,\n         \"##歌\": 16682,\n         \"##歎\": 16683,\n         \"##歐\": 16684,\n         \"##歓\": 16685,\n         \"##歙\": 16686,\n         \"##歛\": 16687,\n         \"##歡\": 16688,\n         \"##止\": 16689,\n         \"##正\": 16690,\n         \"##此\": 16691,\n         \"##步\": 16692,\n         \"##武\": 16693,\n         \"##歧\": 16694,\n         \"##歩\": 16695,\n         \"##歪\": 16696,\n         \"##歯\": 16697,\n         \"##歲\": 16698,\n         \"##歳\": 16699,\n         \"##歴\": 16700,\n         \"##歷\": 16701,\n         \"##歸\": 16702,\n         \"##歹\": 16703,\n         \"##死\": 16704,\n         \"##歼\": 16705,\n         \"##殁\": 16706,\n         \"##殃\": 16707,\n         \"##殆\": 16708,\n         \"##殇\": 16709,\n         \"##殉\": 16710,\n         \"##殊\": 16711,\n         \"##残\": 16712,\n         \"##殒\": 16713,\n         \"##殓\": 16714,\n         \"##殖\": 16715,\n         \"##殘\": 16716,\n         \"##殞\": 16717,\n         \"##殡\": 16718,\n         \"##殤\": 16719,\n         \"##殭\": 16720,\n         \"##殯\": 16721,\n         \"##殲\": 16722,\n         \"##殴\": 16723,\n         \"##段\": 16724,\n         \"##殷\": 16725,\n         \"##殺\": 16726,\n         \"##殼\": 16727,\n         \"##殿\": 16728,\n         \"##毀\": 16729,\n         \"##毁\": 16730,\n         \"##毂\": 16731,\n         \"##毅\": 16732,\n         \"##毆\": 16733,\n         \"##毋\": 16734,\n         \"##母\": 16735,\n         \"##毎\": 16736,\n         \"##每\": 16737,\n         \"##毒\": 16738,\n         \"##毓\": 16739,\n         \"##比\": 16740,\n         \"##毕\": 16741,\n         \"##毗\": 16742,\n         \"##毘\": 16743,\n         \"##毙\": 16744,\n         \"##毛\": 16745,\n         \"##毡\": 16746,\n         \"##毫\": 16747,\n         \"##毯\": 16748,\n         \"##毽\": 16749,\n         \"##氈\": 16750,\n         \"##氏\": 16751,\n         \"##氐\": 16752,\n         \"##民\": 16753,\n         \"##氓\": 16754,\n         \"##气\": 16755,\n         \"##氖\": 16756,\n         \"##気\": 16757,\n         \"##氙\": 16758,\n         \"##氛\": 16759,\n         \"##氟\": 16760,\n         \"##氡\": 16761,\n         \"##氢\": 16762,\n         \"##氣\": 16763,\n         \"##氤\": 16764,\n         \"##氦\": 16765,\n         \"##氧\": 16766,\n         \"##氨\": 16767,\n         \"##氪\": 16768,\n         \"##氫\": 16769,\n         \"##氮\": 16770,\n         \"##氯\": 16771,\n         \"##氰\": 16772,\n         \"##氲\": 16773,\n         \"##水\": 16774,\n         \"##氷\": 16775,\n         \"##永\": 16776,\n         \"##氹\": 16777,\n         \"##氾\": 16778,\n         \"##汀\": 16779,\n         \"##汁\": 16780,\n         \"##求\": 16781,\n         \"##汆\": 16782,\n         \"##汇\": 16783,\n         \"##汉\": 16784,\n         \"##汎\": 16785,\n         \"##汐\": 16786,\n         \"##汕\": 16787,\n         \"##汗\": 16788,\n         \"##汙\": 16789,\n         \"##汛\": 16790,\n         \"##汝\": 16791,\n         \"##汞\": 16792,\n         \"##江\": 16793,\n         \"##池\": 16794,\n         \"##污\": 16795,\n         \"##汤\": 16796,\n         \"##汨\": 16797,\n         \"##汩\": 16798,\n         \"##汪\": 16799,\n         \"##汰\": 16800,\n         \"##汲\": 16801,\n         \"##汴\": 16802,\n         \"##汶\": 16803,\n         \"##汹\": 16804,\n         \"##決\": 16805,\n         \"##汽\": 16806,\n         \"##汾\": 16807,\n         \"##沁\": 16808,\n         \"##沂\": 16809,\n         \"##沃\": 16810,\n         \"##沅\": 16811,\n         \"##沈\": 16812,\n         \"##沉\": 16813,\n         \"##沌\": 16814,\n         \"##沏\": 16815,\n         \"##沐\": 16816,\n         \"##沒\": 16817,\n         \"##沓\": 16818,\n         \"##沖\": 16819,\n         \"##沙\": 16820,\n         \"##沛\": 16821,\n         \"##沟\": 16822,\n         \"##没\": 16823,\n         \"##沢\": 16824,\n         \"##沣\": 16825,\n         \"##沥\": 16826,\n         \"##沦\": 16827,\n         \"##沧\": 16828,\n         \"##沪\": 16829,\n         \"##沫\": 16830,\n         \"##沭\": 16831,\n         \"##沮\": 16832,\n         \"##沱\": 16833,\n         \"##河\": 16834,\n         \"##沸\": 16835,\n         \"##油\": 16836,\n         \"##治\": 16837,\n         \"##沼\": 16838,\n         \"##沽\": 16839,\n         \"##沾\": 16840,\n         \"##沿\": 16841,\n         \"##況\": 16842,\n         \"##泄\": 16843,\n         \"##泉\": 16844,\n         \"##泊\": 16845,\n         \"##泌\": 16846,\n         \"##泓\": 16847,\n         \"##法\": 16848,\n         \"##泗\": 16849,\n         \"##泛\": 16850,\n         \"##泞\": 16851,\n         \"##泠\": 16852,\n         \"##泡\": 16853,\n         \"##波\": 16854,\n         \"##泣\": 16855,\n         \"##泥\": 16856,\n         \"##注\": 16857,\n         \"##泪\": 16858,\n         \"##泫\": 16859,\n         \"##泮\": 16860,\n         \"##泯\": 16861,\n         \"##泰\": 16862,\n         \"##泱\": 16863,\n         \"##泳\": 16864,\n         \"##泵\": 16865,\n         \"##泷\": 16866,\n         \"##泸\": 16867,\n         \"##泻\": 16868,\n         \"##泼\": 16869,\n         \"##泽\": 16870,\n         \"##泾\": 16871,\n         \"##洁\": 16872,\n         \"##洄\": 16873,\n         \"##洋\": 16874,\n         \"##洒\": 16875,\n         \"##洗\": 16876,\n         \"##洙\": 16877,\n         \"##洛\": 16878,\n         \"##洞\": 16879,\n         \"##津\": 16880,\n         \"##洩\": 16881,\n         \"##洪\": 16882,\n         \"##洮\": 16883,\n         \"##洱\": 16884,\n         \"##洲\": 16885,\n         \"##洵\": 16886,\n         \"##洶\": 16887,\n         \"##洸\": 16888,\n         \"##洹\": 16889,\n         \"##活\": 16890,\n         \"##洼\": 16891,\n         \"##洽\": 16892,\n         \"##派\": 16893,\n         \"##流\": 16894,\n         \"##浃\": 16895,\n         \"##浄\": 16896,\n         \"##浅\": 16897,\n         \"##浆\": 16898,\n         \"##浇\": 16899,\n         \"##浊\": 16900,\n         \"##测\": 16901,\n         \"##济\": 16902,\n         \"##浏\": 16903,\n         \"##浑\": 16904,\n         \"##浒\": 16905,\n         \"##浓\": 16906,\n         \"##浔\": 16907,\n         \"##浙\": 16908,\n         \"##浚\": 16909,\n         \"##浜\": 16910,\n         \"##浣\": 16911,\n         \"##浦\": 16912,\n         \"##浩\": 16913,\n         \"##浪\": 16914,\n         \"##浬\": 16915,\n         \"##浮\": 16916,\n         \"##浯\": 16917,\n         \"##浴\": 16918,\n         \"##海\": 16919,\n         \"##浸\": 16920,\n         \"##涂\": 16921,\n         \"##涅\": 16922,\n         \"##涇\": 16923,\n         \"##消\": 16924,\n         \"##涉\": 16925,\n         \"##涌\": 16926,\n         \"##涎\": 16927,\n         \"##涓\": 16928,\n         \"##涔\": 16929,\n         \"##涕\": 16930,\n         \"##涙\": 16931,\n         \"##涛\": 16932,\n         \"##涝\": 16933,\n         \"##涞\": 16934,\n         \"##涟\": 16935,\n         \"##涠\": 16936,\n         \"##涡\": 16937,\n         \"##涣\": 16938,\n         \"##涤\": 16939,\n         \"##润\": 16940,\n         \"##涧\": 16941,\n         \"##涨\": 16942,\n         \"##涩\": 16943,\n         \"##涪\": 16944,\n         \"##涮\": 16945,\n         \"##涯\": 16946,\n         \"##液\": 16947,\n         \"##涵\": 16948,\n         \"##涸\": 16949,\n         \"##涼\": 16950,\n         \"##涿\": 16951,\n         \"##淀\": 16952,\n         \"##淄\": 16953,\n         \"##淅\": 16954,\n         \"##淆\": 16955,\n         \"##淇\": 16956,\n         \"##淋\": 16957,\n         \"##淌\": 16958,\n         \"##淑\": 16959,\n         \"##淒\": 16960,\n         \"##淖\": 16961,\n         \"##淘\": 16962,\n         \"##淙\": 16963,\n         \"##淚\": 16964,\n         \"##淞\": 16965,\n         \"##淡\": 16966,\n         \"##淤\": 16967,\n         \"##淦\": 16968,\n         \"##淨\": 16969,\n         \"##淩\": 16970,\n         \"##淪\": 16971,\n         \"##淫\": 16972,\n         \"##淬\": 16973,\n         \"##淮\": 16974,\n         \"##深\": 16975,\n         \"##淳\": 16976,\n         \"##淵\": 16977,\n         \"##混\": 16978,\n         \"##淹\": 16979,\n         \"##淺\": 16980,\n         \"##添\": 16981,\n         \"##淼\": 16982,\n         \"##清\": 16983,\n         \"##済\": 16984,\n         \"##渉\": 16985,\n         \"##渊\": 16986,\n         \"##渋\": 16987,\n         \"##渍\": 16988,\n         \"##渎\": 16989,\n         \"##渐\": 16990,\n         \"##渔\": 16991,\n         \"##渗\": 16992,\n         \"##渙\": 16993,\n         \"##渚\": 16994,\n         \"##減\": 16995,\n         \"##渝\": 16996,\n         \"##渠\": 16997,\n         \"##渡\": 16998,\n         \"##渣\": 16999,\n         \"##渤\": 17000,\n         \"##渥\": 17001,\n         \"##渦\": 17002,\n         \"##温\": 17003,\n         \"##測\": 17004,\n         \"##渭\": 17005,\n         \"##港\": 17006,\n         \"##渲\": 17007,\n         \"##渴\": 17008,\n         \"##游\": 17009,\n         \"##渺\": 17010,\n         \"##渾\": 17011,\n         \"##湃\": 17012,\n         \"##湄\": 17013,\n         \"##湊\": 17014,\n         \"##湍\": 17015,\n         \"##湖\": 17016,\n         \"##湘\": 17017,\n         \"##湛\": 17018,\n         \"##湟\": 17019,\n         \"##湧\": 17020,\n         \"##湫\": 17021,\n         \"##湮\": 17022,\n         \"##湯\": 17023,\n         \"##湳\": 17024,\n         \"##湾\": 17025,\n         \"##湿\": 17026,\n         \"##満\": 17027,\n         \"##溃\": 17028,\n         \"##溅\": 17029,\n         \"##溉\": 17030,\n         \"##溏\": 17031,\n         \"##源\": 17032,\n         \"##準\": 17033,\n         \"##溜\": 17034,\n         \"##溝\": 17035,\n         \"##溟\": 17036,\n         \"##溢\": 17037,\n         \"##溥\": 17038,\n         \"##溧\": 17039,\n         \"##溪\": 17040,\n         \"##溫\": 17041,\n         \"##溯\": 17042,\n         \"##溱\": 17043,\n         \"##溴\": 17044,\n         \"##溶\": 17045,\n         \"##溺\": 17046,\n         \"##溼\": 17047,\n         \"##滁\": 17048,\n         \"##滂\": 17049,\n         \"##滄\": 17050,\n         \"##滅\": 17051,\n         \"##滇\": 17052,\n         \"##滋\": 17053,\n         \"##滌\": 17054,\n         \"##滑\": 17055,\n         \"##滓\": 17056,\n         \"##滔\": 17057,\n         \"##滕\": 17058,\n         \"##滙\": 17059,\n         \"##滚\": 17060,\n         \"##滝\": 17061,\n         \"##滞\": 17062,\n         \"##滟\": 17063,\n         \"##满\": 17064,\n         \"##滢\": 17065,\n         \"##滤\": 17066,\n         \"##滥\": 17067,\n         \"##滦\": 17068,\n         \"##滨\": 17069,\n         \"##滩\": 17070,\n         \"##滬\": 17071,\n         \"##滯\": 17072,\n         \"##滲\": 17073,\n         \"##滴\": 17074,\n         \"##滷\": 17075,\n         \"##滸\": 17076,\n         \"##滾\": 17077,\n         \"##滿\": 17078,\n         \"##漁\": 17079,\n         \"##漂\": 17080,\n         \"##漆\": 17081,\n         \"##漉\": 17082,\n         \"##漏\": 17083,\n         \"##漓\": 17084,\n         \"##演\": 17085,\n         \"##漕\": 17086,\n         \"##漠\": 17087,\n         \"##漢\": 17088,\n         \"##漣\": 17089,\n         \"##漩\": 17090,\n         \"##漪\": 17091,\n         \"##漫\": 17092,\n         \"##漬\": 17093,\n         \"##漯\": 17094,\n         \"##漱\": 17095,\n         \"##漲\": 17096,\n         \"##漳\": 17097,\n         \"##漸\": 17098,\n         \"##漾\": 17099,\n         \"##漿\": 17100,\n         \"##潆\": 17101,\n         \"##潇\": 17102,\n         \"##潋\": 17103,\n         \"##潍\": 17104,\n         \"##潑\": 17105,\n         \"##潔\": 17106,\n         \"##潘\": 17107,\n         \"##潛\": 17108,\n         \"##潜\": 17109,\n         \"##潞\": 17110,\n         \"##潟\": 17111,\n         \"##潢\": 17112,\n         \"##潤\": 17113,\n         \"##潦\": 17114,\n         \"##潧\": 17115,\n         \"##潭\": 17116,\n         \"##潮\": 17117,\n         \"##潰\": 17118,\n         \"##潴\": 17119,\n         \"##潸\": 17120,\n         \"##潺\": 17121,\n         \"##潼\": 17122,\n         \"##澀\": 17123,\n         \"##澄\": 17124,\n         \"##澆\": 17125,\n         \"##澈\": 17126,\n         \"##澍\": 17127,\n         \"##澎\": 17128,\n         \"##澗\": 17129,\n         \"##澜\": 17130,\n         \"##澡\": 17131,\n         \"##澤\": 17132,\n         \"##澧\": 17133,\n         \"##澱\": 17134,\n         \"##澳\": 17135,\n         \"##澹\": 17136,\n         \"##激\": 17137,\n         \"##濁\": 17138,\n         \"##濂\": 17139,\n         \"##濃\": 17140,\n         \"##濑\": 17141,\n         \"##濒\": 17142,\n         \"##濕\": 17143,\n         \"##濘\": 17144,\n         \"##濛\": 17145,\n         \"##濟\": 17146,\n         \"##濠\": 17147,\n         \"##濡\": 17148,\n         \"##濤\": 17149,\n         \"##濫\": 17150,\n         \"##濬\": 17151,\n         \"##濮\": 17152,\n         \"##濯\": 17153,\n         \"##濱\": 17154,\n         \"##濺\": 17155,\n         \"##濾\": 17156,\n         \"##瀅\": 17157,\n         \"##瀆\": 17158,\n         \"##瀉\": 17159,\n         \"##瀋\": 17160,\n         \"##瀏\": 17161,\n         \"##瀑\": 17162,\n         \"##瀕\": 17163,\n         \"##瀘\": 17164,\n         \"##瀚\": 17165,\n         \"##瀛\": 17166,\n         \"##瀝\": 17167,\n         \"##瀞\": 17168,\n         \"##瀟\": 17169,\n         \"##瀧\": 17170,\n         \"##瀨\": 17171,\n         \"##瀬\": 17172,\n         \"##瀰\": 17173,\n         \"##瀾\": 17174,\n         \"##灌\": 17175,\n         \"##灏\": 17176,\n         \"##灑\": 17177,\n         \"##灘\": 17178,\n         \"##灝\": 17179,\n         \"##灞\": 17180,\n         \"##灣\": 17181,\n         \"##火\": 17182,\n         \"##灬\": 17183,\n         \"##灭\": 17184,\n         \"##灯\": 17185,\n         \"##灰\": 17186,\n         \"##灵\": 17187,\n         \"##灶\": 17188,\n         \"##灸\": 17189,\n         \"##灼\": 17190,\n         \"##災\": 17191,\n         \"##灾\": 17192,\n         \"##灿\": 17193,\n         \"##炀\": 17194,\n         \"##炁\": 17195,\n         \"##炅\": 17196,\n         \"##炉\": 17197,\n         \"##炊\": 17198,\n         \"##炎\": 17199,\n         \"##炒\": 17200,\n         \"##炔\": 17201,\n         \"##炕\": 17202,\n         \"##炖\": 17203,\n         \"##炙\": 17204,\n         \"##炜\": 17205,\n         \"##炫\": 17206,\n         \"##炬\": 17207,\n         \"##炭\": 17208,\n         \"##炮\": 17209,\n         \"##炯\": 17210,\n         \"##炳\": 17211,\n         \"##炷\": 17212,\n         \"##炸\": 17213,\n         \"##点\": 17214,\n         \"##為\": 17215,\n         \"##炼\": 17216,\n         \"##炽\": 17217,\n         \"##烁\": 17218,\n         \"##烂\": 17219,\n         \"##烃\": 17220,\n         \"##烈\": 17221,\n         \"##烊\": 17222,\n         \"##烏\": 17223,\n         \"##烘\": 17224,\n         \"##烙\": 17225,\n         \"##烛\": 17226,\n         \"##烟\": 17227,\n         \"##烤\": 17228,\n         \"##烦\": 17229,\n         \"##烧\": 17230,\n         \"##烨\": 17231,\n         \"##烩\": 17232,\n         \"##烫\": 17233,\n         \"##烬\": 17234,\n         \"##热\": 17235,\n         \"##烯\": 17236,\n         \"##烷\": 17237,\n         \"##烹\": 17238,\n         \"##烽\": 17239,\n         \"##焉\": 17240,\n         \"##焊\": 17241,\n         \"##焕\": 17242,\n         \"##焖\": 17243,\n         \"##焗\": 17244,\n         \"##焘\": 17245,\n         \"##焙\": 17246,\n         \"##焚\": 17247,\n         \"##焜\": 17248,\n         \"##無\": 17249,\n         \"##焦\": 17250,\n         \"##焯\": 17251,\n         \"##焰\": 17252,\n         \"##焱\": 17253,\n         \"##然\": 17254,\n         \"##焼\": 17255,\n         \"##煅\": 17256,\n         \"##煉\": 17257,\n         \"##煊\": 17258,\n         \"##煌\": 17259,\n         \"##煎\": 17260,\n         \"##煒\": 17261,\n         \"##煖\": 17262,\n         \"##煙\": 17263,\n         \"##煜\": 17264,\n         \"##煞\": 17265,\n         \"##煤\": 17266,\n         \"##煥\": 17267,\n         \"##煦\": 17268,\n         \"##照\": 17269,\n         \"##煨\": 17270,\n         \"##煩\": 17271,\n         \"##煮\": 17272,\n         \"##煲\": 17273,\n         \"##煸\": 17274,\n         \"##煽\": 17275,\n         \"##熄\": 17276,\n         \"##熊\": 17277,\n         \"##熏\": 17278,\n         \"##熒\": 17279,\n         \"##熔\": 17280,\n         \"##熙\": 17281,\n         \"##熟\": 17282,\n         \"##熠\": 17283,\n         \"##熨\": 17284,\n         \"##熬\": 17285,\n         \"##熱\": 17286,\n         \"##熵\": 17287,\n         \"##熹\": 17288,\n         \"##熾\": 17289,\n         \"##燁\": 17290,\n         \"##燃\": 17291,\n         \"##燄\": 17292,\n         \"##燈\": 17293,\n         \"##燉\": 17294,\n         \"##燊\": 17295,\n         \"##燎\": 17296,\n         \"##燒\": 17297,\n         \"##燔\": 17298,\n         \"##燕\": 17299,\n         \"##燙\": 17300,\n         \"##燜\": 17301,\n         \"##營\": 17302,\n         \"##燥\": 17303,\n         \"##燦\": 17304,\n         \"##燧\": 17305,\n         \"##燭\": 17306,\n         \"##燮\": 17307,\n         \"##燴\": 17308,\n         \"##燻\": 17309,\n         \"##燼\": 17310,\n         \"##燿\": 17311,\n         \"##爆\": 17312,\n         \"##爍\": 17313,\n         \"##爐\": 17314,\n         \"##爛\": 17315,\n         \"##爪\": 17316,\n         \"##爬\": 17317,\n         \"##爭\": 17318,\n         \"##爰\": 17319,\n         \"##爱\": 17320,\n         \"##爲\": 17321,\n         \"##爵\": 17322,\n         \"##父\": 17323,\n         \"##爷\": 17324,\n         \"##爸\": 17325,\n         \"##爹\": 17326,\n         \"##爺\": 17327,\n         \"##爻\": 17328,\n         \"##爽\": 17329,\n         \"##爾\": 17330,\n         \"##牆\": 17331,\n         \"##片\": 17332,\n         \"##版\": 17333,\n         \"##牌\": 17334,\n         \"##牍\": 17335,\n         \"##牒\": 17336,\n         \"##牙\": 17337,\n         \"##牛\": 17338,\n         \"##牝\": 17339,\n         \"##牟\": 17340,\n         \"##牠\": 17341,\n         \"##牡\": 17342,\n         \"##牢\": 17343,\n         \"##牦\": 17344,\n         \"##牧\": 17345,\n         \"##物\": 17346,\n         \"##牯\": 17347,\n         \"##牲\": 17348,\n         \"##牴\": 17349,\n         \"##牵\": 17350,\n         \"##特\": 17351,\n         \"##牺\": 17352,\n         \"##牽\": 17353,\n         \"##犀\": 17354,\n         \"##犁\": 17355,\n         \"##犄\": 17356,\n         \"##犊\": 17357,\n         \"##犍\": 17358,\n         \"##犒\": 17359,\n         \"##犢\": 17360,\n         \"##犧\": 17361,\n         \"##犬\": 17362,\n         \"##犯\": 17363,\n         \"##状\": 17364,\n         \"##犷\": 17365,\n         \"##犸\": 17366,\n         \"##犹\": 17367,\n         \"##狀\": 17368,\n         \"##狂\": 17369,\n         \"##狄\": 17370,\n         \"##狈\": 17371,\n         \"##狎\": 17372,\n         \"##狐\": 17373,\n         \"##狒\": 17374,\n         \"##狗\": 17375,\n         \"##狙\": 17376,\n         \"##狞\": 17377,\n         \"##狠\": 17378,\n         \"##狡\": 17379,\n         \"##狩\": 17380,\n         \"##独\": 17381,\n         \"##狭\": 17382,\n         \"##狮\": 17383,\n         \"##狰\": 17384,\n         \"##狱\": 17385,\n         \"##狸\": 17386,\n         \"##狹\": 17387,\n         \"##狼\": 17388,\n         \"##狽\": 17389,\n         \"##猎\": 17390,\n         \"##猕\": 17391,\n         \"##猖\": 17392,\n         \"##猗\": 17393,\n         \"##猙\": 17394,\n         \"##猛\": 17395,\n         \"##猜\": 17396,\n         \"##猝\": 17397,\n         \"##猥\": 17398,\n         \"##猩\": 17399,\n         \"##猪\": 17400,\n         \"##猫\": 17401,\n         \"##猬\": 17402,\n         \"##献\": 17403,\n         \"##猴\": 17404,\n         \"##猶\": 17405,\n         \"##猷\": 17406,\n         \"##猾\": 17407,\n         \"##猿\": 17408,\n         \"##獄\": 17409,\n         \"##獅\": 17410,\n         \"##獎\": 17411,\n         \"##獐\": 17412,\n         \"##獒\": 17413,\n         \"##獗\": 17414,\n         \"##獠\": 17415,\n         \"##獣\": 17416,\n         \"##獨\": 17417,\n         \"##獭\": 17418,\n         \"##獰\": 17419,\n         \"##獲\": 17420,\n         \"##獵\": 17421,\n         \"##獷\": 17422,\n         \"##獸\": 17423,\n         \"##獺\": 17424,\n         \"##獻\": 17425,\n         \"##獼\": 17426,\n         \"##獾\": 17427,\n         \"##玄\": 17428,\n         \"##率\": 17429,\n         \"##玉\": 17430,\n         \"##王\": 17431,\n         \"##玑\": 17432,\n         \"##玖\": 17433,\n         \"##玛\": 17434,\n         \"##玟\": 17435,\n         \"##玠\": 17436,\n         \"##玥\": 17437,\n         \"##玩\": 17438,\n         \"##玫\": 17439,\n         \"##玮\": 17440,\n         \"##环\": 17441,\n         \"##现\": 17442,\n         \"##玲\": 17443,\n         \"##玳\": 17444,\n         \"##玷\": 17445,\n         \"##玺\": 17446,\n         \"##玻\": 17447,\n         \"##珀\": 17448,\n         \"##珂\": 17449,\n         \"##珅\": 17450,\n         \"##珈\": 17451,\n         \"##珉\": 17452,\n         \"##珊\": 17453,\n         \"##珍\": 17454,\n         \"##珏\": 17455,\n         \"##珐\": 17456,\n         \"##珑\": 17457,\n         \"##珙\": 17458,\n         \"##珞\": 17459,\n         \"##珠\": 17460,\n         \"##珣\": 17461,\n         \"##珥\": 17462,\n         \"##珩\": 17463,\n         \"##珪\": 17464,\n         \"##班\": 17465,\n         \"##珮\": 17466,\n         \"##珲\": 17467,\n         \"##珺\": 17468,\n         \"##現\": 17469,\n         \"##球\": 17470,\n         \"##琅\": 17471,\n         \"##理\": 17472,\n         \"##琇\": 17473,\n         \"##琉\": 17474,\n         \"##琊\": 17475,\n         \"##琍\": 17476,\n         \"##琏\": 17477,\n         \"##琐\": 17478,\n         \"##琛\": 17479,\n         \"##琢\": 17480,\n         \"##琥\": 17481,\n         \"##琦\": 17482,\n         \"##琨\": 17483,\n         \"##琪\": 17484,\n         \"##琬\": 17485,\n         \"##琮\": 17486,\n         \"##琰\": 17487,\n         \"##琲\": 17488,\n         \"##琳\": 17489,\n         \"##琴\": 17490,\n         \"##琵\": 17491,\n         \"##琶\": 17492,\n         \"##琺\": 17493,\n         \"##琼\": 17494,\n         \"##瑀\": 17495,\n         \"##瑁\": 17496,\n         \"##瑄\": 17497,\n         \"##瑋\": 17498,\n         \"##瑕\": 17499,\n         \"##瑗\": 17500,\n         \"##瑙\": 17501,\n         \"##瑚\": 17502,\n         \"##瑛\": 17503,\n         \"##瑜\": 17504,\n         \"##瑞\": 17505,\n         \"##瑟\": 17506,\n         \"##瑠\": 17507,\n         \"##瑣\": 17508,\n         \"##瑤\": 17509,\n         \"##瑩\": 17510,\n         \"##瑪\": 17511,\n         \"##瑯\": 17512,\n         \"##瑰\": 17513,\n         \"##瑶\": 17514,\n         \"##瑾\": 17515,\n         \"##璀\": 17516,\n         \"##璁\": 17517,\n         \"##璃\": 17518,\n         \"##璇\": 17519,\n         \"##璉\": 17520,\n         \"##璋\": 17521,\n         \"##璎\": 17522,\n         \"##璐\": 17523,\n         \"##璜\": 17524,\n         \"##璞\": 17525,\n         \"##璟\": 17526,\n         \"##璧\": 17527,\n         \"##璨\": 17528,\n         \"##環\": 17529,\n         \"##璽\": 17530,\n         \"##璿\": 17531,\n         \"##瓊\": 17532,\n         \"##瓏\": 17533,\n         \"##瓒\": 17534,\n         \"##瓜\": 17535,\n         \"##瓢\": 17536,\n         \"##瓣\": 17537,\n         \"##瓤\": 17538,\n         \"##瓦\": 17539,\n         \"##瓮\": 17540,\n         \"##瓯\": 17541,\n         \"##瓴\": 17542,\n         \"##瓶\": 17543,\n         \"##瓷\": 17544,\n         \"##甄\": 17545,\n         \"##甌\": 17546,\n         \"##甕\": 17547,\n         \"##甘\": 17548,\n         \"##甙\": 17549,\n         \"##甚\": 17550,\n         \"##甜\": 17551,\n         \"##生\": 17552,\n         \"##產\": 17553,\n         \"##産\": 17554,\n         \"##甥\": 17555,\n         \"##甦\": 17556,\n         \"##用\": 17557,\n         \"##甩\": 17558,\n         \"##甫\": 17559,\n         \"##甬\": 17560,\n         \"##甭\": 17561,\n         \"##甯\": 17562,\n         \"##田\": 17563,\n         \"##由\": 17564,\n         \"##甲\": 17565,\n         \"##申\": 17566,\n         \"##电\": 17567,\n         \"##男\": 17568,\n         \"##甸\": 17569,\n         \"##町\": 17570,\n         \"##画\": 17571,\n         \"##甾\": 17572,\n         \"##畀\": 17573,\n         \"##畅\": 17574,\n         \"##界\": 17575,\n         \"##畏\": 17576,\n         \"##畑\": 17577,\n         \"##畔\": 17578,\n         \"##留\": 17579,\n         \"##畜\": 17580,\n         \"##畝\": 17581,\n         \"##畢\": 17582,\n         \"##略\": 17583,\n         \"##畦\": 17584,\n         \"##番\": 17585,\n         \"##畫\": 17586,\n         \"##異\": 17587,\n         \"##畲\": 17588,\n         \"##畳\": 17589,\n         \"##畴\": 17590,\n         \"##當\": 17591,\n         \"##畸\": 17592,\n         \"##畹\": 17593,\n         \"##畿\": 17594,\n         \"##疆\": 17595,\n         \"##疇\": 17596,\n         \"##疊\": 17597,\n         \"##疏\": 17598,\n         \"##疑\": 17599,\n         \"##疔\": 17600,\n         \"##疖\": 17601,\n         \"##疗\": 17602,\n         \"##疙\": 17603,\n         \"##疚\": 17604,\n         \"##疝\": 17605,\n         \"##疟\": 17606,\n         \"##疡\": 17607,\n         \"##疣\": 17608,\n         \"##疤\": 17609,\n         \"##疥\": 17610,\n         \"##疫\": 17611,\n         \"##疮\": 17612,\n         \"##疯\": 17613,\n         \"##疱\": 17614,\n         \"##疲\": 17615,\n         \"##疳\": 17616,\n         \"##疵\": 17617,\n         \"##疸\": 17618,\n         \"##疹\": 17619,\n         \"##疼\": 17620,\n         \"##疽\": 17621,\n         \"##疾\": 17622,\n         \"##痂\": 17623,\n         \"##病\": 17624,\n         \"##症\": 17625,\n         \"##痈\": 17626,\n         \"##痉\": 17627,\n         \"##痊\": 17628,\n         \"##痍\": 17629,\n         \"##痒\": 17630,\n         \"##痔\": 17631,\n         \"##痕\": 17632,\n         \"##痘\": 17633,\n         \"##痙\": 17634,\n         \"##痛\": 17635,\n         \"##痞\": 17636,\n         \"##痠\": 17637,\n         \"##痢\": 17638,\n         \"##痣\": 17639,\n         \"##痤\": 17640,\n         \"##痧\": 17641,\n         \"##痨\": 17642,\n         \"##痪\": 17643,\n         \"##痫\": 17644,\n         \"##痰\": 17645,\n         \"##痱\": 17646,\n         \"##痴\": 17647,\n         \"##痹\": 17648,\n         \"##痺\": 17649,\n         \"##痼\": 17650,\n         \"##痿\": 17651,\n         \"##瘀\": 17652,\n         \"##瘁\": 17653,\n         \"##瘋\": 17654,\n         \"##瘍\": 17655,\n         \"##瘓\": 17656,\n         \"##瘘\": 17657,\n         \"##瘙\": 17658,\n         \"##瘟\": 17659,\n         \"##瘠\": 17660,\n         \"##瘡\": 17661,\n         \"##瘢\": 17662,\n         \"##瘤\": 17663,\n         \"##瘦\": 17664,\n         \"##瘧\": 17665,\n         \"##瘩\": 17666,\n         \"##瘪\": 17667,\n         \"##瘫\": 17668,\n         \"##瘴\": 17669,\n         \"##瘸\": 17670,\n         \"##瘾\": 17671,\n         \"##療\": 17672,\n         \"##癇\": 17673,\n         \"##癌\": 17674,\n         \"##癒\": 17675,\n         \"##癖\": 17676,\n         \"##癜\": 17677,\n         \"##癞\": 17678,\n         \"##癡\": 17679,\n         \"##癢\": 17680,\n         \"##癣\": 17681,\n         \"##癥\": 17682,\n         \"##癫\": 17683,\n         \"##癬\": 17684,\n         \"##癮\": 17685,\n         \"##癱\": 17686,\n         \"##癲\": 17687,\n         \"##癸\": 17688,\n         \"##発\": 17689,\n         \"##登\": 17690,\n         \"##發\": 17691,\n         \"##白\": 17692,\n         \"##百\": 17693,\n         \"##皂\": 17694,\n         \"##的\": 17695,\n         \"##皆\": 17696,\n         \"##皇\": 17697,\n         \"##皈\": 17698,\n         \"##皋\": 17699,\n         \"##皎\": 17700,\n         \"##皑\": 17701,\n         \"##皓\": 17702,\n         \"##皖\": 17703,\n         \"##皙\": 17704,\n         \"##皚\": 17705,\n         \"##皮\": 17706,\n         \"##皰\": 17707,\n         \"##皱\": 17708,\n         \"##皴\": 17709,\n         \"##皺\": 17710,\n         \"##皿\": 17711,\n         \"##盂\": 17712,\n         \"##盃\": 17713,\n         \"##盅\": 17714,\n         \"##盆\": 17715,\n         \"##盈\": 17716,\n         \"##益\": 17717,\n         \"##盎\": 17718,\n         \"##盏\": 17719,\n         \"##盐\": 17720,\n         \"##监\": 17721,\n         \"##盒\": 17722,\n         \"##盔\": 17723,\n         \"##盖\": 17724,\n         \"##盗\": 17725,\n         \"##盘\": 17726,\n         \"##盛\": 17727,\n         \"##盜\": 17728,\n         \"##盞\": 17729,\n         \"##盟\": 17730,\n         \"##盡\": 17731,\n         \"##監\": 17732,\n         \"##盤\": 17733,\n         \"##盥\": 17734,\n         \"##盧\": 17735,\n         \"##盪\": 17736,\n         \"##目\": 17737,\n         \"##盯\": 17738,\n         \"##盱\": 17739,\n         \"##盲\": 17740,\n         \"##直\": 17741,\n         \"##相\": 17742,\n         \"##盹\": 17743,\n         \"##盼\": 17744,\n         \"##盾\": 17745,\n         \"##省\": 17746,\n         \"##眈\": 17747,\n         \"##眉\": 17748,\n         \"##看\": 17749,\n         \"##県\": 17750,\n         \"##眙\": 17751,\n         \"##眞\": 17752,\n         \"##真\": 17753,\n         \"##眠\": 17754,\n         \"##眦\": 17755,\n         \"##眨\": 17756,\n         \"##眩\": 17757,\n         \"##眯\": 17758,\n         \"##眶\": 17759,\n         \"##眷\": 17760,\n         \"##眸\": 17761,\n         \"##眺\": 17762,\n         \"##眼\": 17763,\n         \"##眾\": 17764,\n         \"##着\": 17765,\n         \"##睁\": 17766,\n         \"##睇\": 17767,\n         \"##睏\": 17768,\n         \"##睐\": 17769,\n         \"##睑\": 17770,\n         \"##睛\": 17771,\n         \"##睜\": 17772,\n         \"##睞\": 17773,\n         \"##睡\": 17774,\n         \"##睢\": 17775,\n         \"##督\": 17776,\n         \"##睥\": 17777,\n         \"##睦\": 17778,\n         \"##睨\": 17779,\n         \"##睪\": 17780,\n         \"##睫\": 17781,\n         \"##睬\": 17782,\n         \"##睹\": 17783,\n         \"##睽\": 17784,\n         \"##睾\": 17785,\n         \"##睿\": 17786,\n         \"##瞄\": 17787,\n         \"##瞅\": 17788,\n         \"##瞇\": 17789,\n         \"##瞋\": 17790,\n         \"##瞌\": 17791,\n         \"##瞎\": 17792,\n         \"##瞑\": 17793,\n         \"##瞒\": 17794,\n         \"##瞓\": 17795,\n         \"##瞞\": 17796,\n         \"##瞟\": 17797,\n         \"##瞠\": 17798,\n         \"##瞥\": 17799,\n         \"##瞧\": 17800,\n         \"##瞩\": 17801,\n         \"##瞪\": 17802,\n         \"##瞬\": 17803,\n         \"##瞭\": 17804,\n         \"##瞰\": 17805,\n         \"##瞳\": 17806,\n         \"##瞻\": 17807,\n         \"##瞼\": 17808,\n         \"##瞿\": 17809,\n         \"##矇\": 17810,\n         \"##矍\": 17811,\n         \"##矗\": 17812,\n         \"##矚\": 17813,\n         \"##矛\": 17814,\n         \"##矜\": 17815,\n         \"##矢\": 17816,\n         \"##矣\": 17817,\n         \"##知\": 17818,\n         \"##矩\": 17819,\n         \"##矫\": 17820,\n         \"##短\": 17821,\n         \"##矮\": 17822,\n         \"##矯\": 17823,\n         \"##石\": 17824,\n         \"##矶\": 17825,\n         \"##矽\": 17826,\n         \"##矾\": 17827,\n         \"##矿\": 17828,\n         \"##码\": 17829,\n         \"##砂\": 17830,\n         \"##砌\": 17831,\n         \"##砍\": 17832,\n         \"##砒\": 17833,\n         \"##研\": 17834,\n         \"##砖\": 17835,\n         \"##砗\": 17836,\n         \"##砚\": 17837,\n         \"##砝\": 17838,\n         \"##砣\": 17839,\n         \"##砥\": 17840,\n         \"##砧\": 17841,\n         \"##砭\": 17842,\n         \"##砰\": 17843,\n         \"##砲\": 17844,\n         \"##破\": 17845,\n         \"##砷\": 17846,\n         \"##砸\": 17847,\n         \"##砺\": 17848,\n         \"##砼\": 17849,\n         \"##砾\": 17850,\n         \"##础\": 17851,\n         \"##硅\": 17852,\n         \"##硐\": 17853,\n         \"##硒\": 17854,\n         \"##硕\": 17855,\n         \"##硝\": 17856,\n         \"##硫\": 17857,\n         \"##硬\": 17858,\n         \"##确\": 17859,\n         \"##硯\": 17860,\n         \"##硼\": 17861,\n         \"##碁\": 17862,\n         \"##碇\": 17863,\n         \"##碉\": 17864,\n         \"##碌\": 17865,\n         \"##碍\": 17866,\n         \"##碎\": 17867,\n         \"##碑\": 17868,\n         \"##碓\": 17869,\n         \"##碗\": 17870,\n         \"##碘\": 17871,\n         \"##碚\": 17872,\n         \"##碛\": 17873,\n         \"##碟\": 17874,\n         \"##碣\": 17875,\n         \"##碧\": 17876,\n         \"##碩\": 17877,\n         \"##碰\": 17878,\n         \"##碱\": 17879,\n         \"##碳\": 17880,\n         \"##碴\": 17881,\n         \"##確\": 17882,\n         \"##碼\": 17883,\n         \"##碾\": 17884,\n         \"##磁\": 17885,\n         \"##磅\": 17886,\n         \"##磊\": 17887,\n         \"##磋\": 17888,\n         \"##磐\": 17889,\n         \"##磕\": 17890,\n         \"##磚\": 17891,\n         \"##磡\": 17892,\n         \"##磨\": 17893,\n         \"##磬\": 17894,\n         \"##磯\": 17895,\n         \"##磲\": 17896,\n         \"##磷\": 17897,\n         \"##磺\": 17898,\n         \"##礁\": 17899,\n         \"##礎\": 17900,\n         \"##礙\": 17901,\n         \"##礡\": 17902,\n         \"##礦\": 17903,\n         \"##礪\": 17904,\n         \"##礫\": 17905,\n         \"##礴\": 17906,\n         \"##示\": 17907,\n         \"##礼\": 17908,\n         \"##社\": 17909,\n         \"##祀\": 17910,\n         \"##祁\": 17911,\n         \"##祂\": 17912,\n         \"##祇\": 17913,\n         \"##祈\": 17914,\n         \"##祉\": 17915,\n         \"##祎\": 17916,\n         \"##祐\": 17917,\n         \"##祕\": 17918,\n         \"##祖\": 17919,\n         \"##祗\": 17920,\n         \"##祚\": 17921,\n         \"##祛\": 17922,\n         \"##祜\": 17923,\n         \"##祝\": 17924,\n         \"##神\": 17925,\n         \"##祟\": 17926,\n         \"##祠\": 17927,\n         \"##祢\": 17928,\n         \"##祥\": 17929,\n         \"##票\": 17930,\n         \"##祭\": 17931,\n         \"##祯\": 17932,\n         \"##祷\": 17933,\n         \"##祸\": 17934,\n         \"##祺\": 17935,\n         \"##祿\": 17936,\n         \"##禀\": 17937,\n         \"##禁\": 17938,\n         \"##禄\": 17939,\n         \"##禅\": 17940,\n         \"##禍\": 17941,\n         \"##禎\": 17942,\n         \"##福\": 17943,\n         \"##禛\": 17944,\n         \"##禦\": 17945,\n         \"##禧\": 17946,\n         \"##禪\": 17947,\n         \"##禮\": 17948,\n         \"##禱\": 17949,\n         \"##禹\": 17950,\n         \"##禺\": 17951,\n         \"##离\": 17952,\n         \"##禽\": 17953,\n         \"##禾\": 17954,\n         \"##禿\": 17955,\n         \"##秀\": 17956,\n         \"##私\": 17957,\n         \"##秃\": 17958,\n         \"##秆\": 17959,\n         \"##秉\": 17960,\n         \"##秋\": 17961,\n         \"##种\": 17962,\n         \"##科\": 17963,\n         \"##秒\": 17964,\n         \"##秘\": 17965,\n         \"##租\": 17966,\n         \"##秣\": 17967,\n         \"##秤\": 17968,\n         \"##秦\": 17969,\n         \"##秧\": 17970,\n         \"##秩\": 17971,\n         \"##秭\": 17972,\n         \"##积\": 17973,\n         \"##称\": 17974,\n         \"##秸\": 17975,\n         \"##移\": 17976,\n         \"##秽\": 17977,\n         \"##稀\": 17978,\n         \"##稅\": 17979,\n         \"##程\": 17980,\n         \"##稍\": 17981,\n         \"##税\": 17982,\n         \"##稔\": 17983,\n         \"##稗\": 17984,\n         \"##稚\": 17985,\n         \"##稜\": 17986,\n         \"##稞\": 17987,\n         \"##稟\": 17988,\n         \"##稠\": 17989,\n         \"##稣\": 17990,\n         \"##種\": 17991,\n         \"##稱\": 17992,\n         \"##稲\": 17993,\n         \"##稳\": 17994,\n         \"##稷\": 17995,\n         \"##稹\": 17996,\n         \"##稻\": 17997,\n         \"##稼\": 17998,\n         \"##稽\": 17999,\n         \"##稿\": 18000,\n         \"##穀\": 18001,\n         \"##穂\": 18002,\n         \"##穆\": 18003,\n         \"##穌\": 18004,\n         \"##積\": 18005,\n         \"##穎\": 18006,\n         \"##穗\": 18007,\n         \"##穢\": 18008,\n         \"##穩\": 18009,\n         \"##穫\": 18010,\n         \"##穴\": 18011,\n         \"##究\": 18012,\n         \"##穷\": 18013,\n         \"##穹\": 18014,\n         \"##空\": 18015,\n         \"##穿\": 18016,\n         \"##突\": 18017,\n         \"##窃\": 18018,\n         \"##窄\": 18019,\n         \"##窈\": 18020,\n         \"##窍\": 18021,\n         \"##窑\": 18022,\n         \"##窒\": 18023,\n         \"##窓\": 18024,\n         \"##窕\": 18025,\n         \"##窖\": 18026,\n         \"##窗\": 18027,\n         \"##窘\": 18028,\n         \"##窜\": 18029,\n         \"##窝\": 18030,\n         \"##窟\": 18031,\n         \"##窠\": 18032,\n         \"##窥\": 18033,\n         \"##窦\": 18034,\n         \"##窨\": 18035,\n         \"##窩\": 18036,\n         \"##窪\": 18037,\n         \"##窮\": 18038,\n         \"##窯\": 18039,\n         \"##窺\": 18040,\n         \"##窿\": 18041,\n         \"##竄\": 18042,\n         \"##竅\": 18043,\n         \"##竇\": 18044,\n         \"##竊\": 18045,\n         \"##立\": 18046,\n         \"##竖\": 18047,\n         \"##站\": 18048,\n         \"##竜\": 18049,\n         \"##竞\": 18050,\n         \"##竟\": 18051,\n         \"##章\": 18052,\n         \"##竣\": 18053,\n         \"##童\": 18054,\n         \"##竭\": 18055,\n         \"##端\": 18056,\n         \"##競\": 18057,\n         \"##竹\": 18058,\n         \"##竺\": 18059,\n         \"##竽\": 18060,\n         \"##竿\": 18061,\n         \"##笃\": 18062,\n         \"##笆\": 18063,\n         \"##笈\": 18064,\n         \"##笋\": 18065,\n         \"##笏\": 18066,\n         \"##笑\": 18067,\n         \"##笔\": 18068,\n         \"##笙\": 18069,\n         \"##笛\": 18070,\n         \"##笞\": 18071,\n         \"##笠\": 18072,\n         \"##符\": 18073,\n         \"##笨\": 18074,\n         \"##第\": 18075,\n         \"##笹\": 18076,\n         \"##笺\": 18077,\n         \"##笼\": 18078,\n         \"##筆\": 18079,\n         \"##等\": 18080,\n         \"##筊\": 18081,\n         \"##筋\": 18082,\n         \"##筍\": 18083,\n         \"##筏\": 18084,\n         \"##筐\": 18085,\n         \"##筑\": 18086,\n         \"##筒\": 18087,\n         \"##答\": 18088,\n         \"##策\": 18089,\n         \"##筛\": 18090,\n         \"##筝\": 18091,\n         \"##筠\": 18092,\n         \"##筱\": 18093,\n         \"##筲\": 18094,\n         \"##筵\": 18095,\n         \"##筷\": 18096,\n         \"##筹\": 18097,\n         \"##签\": 18098,\n         \"##简\": 18099,\n         \"##箇\": 18100,\n         \"##箋\": 18101,\n         \"##箍\": 18102,\n         \"##箏\": 18103,\n         \"##箐\": 18104,\n         \"##箔\": 18105,\n         \"##箕\": 18106,\n         \"##算\": 18107,\n         \"##箝\": 18108,\n         \"##管\": 18109,\n         \"##箩\": 18110,\n         \"##箫\": 18111,\n         \"##箭\": 18112,\n         \"##箱\": 18113,\n         \"##箴\": 18114,\n         \"##箸\": 18115,\n         \"##節\": 18116,\n         \"##篁\": 18117,\n         \"##範\": 18118,\n         \"##篆\": 18119,\n         \"##篇\": 18120,\n         \"##築\": 18121,\n         \"##篑\": 18122,\n         \"##篓\": 18123,\n         \"##篙\": 18124,\n         \"##篝\": 18125,\n         \"##篠\": 18126,\n         \"##篡\": 18127,\n         \"##篤\": 18128,\n         \"##篩\": 18129,\n         \"##篪\": 18130,\n         \"##篮\": 18131,\n         \"##篱\": 18132,\n         \"##篷\": 18133,\n         \"##簇\": 18134,\n         \"##簌\": 18135,\n         \"##簍\": 18136,\n         \"##簡\": 18137,\n         \"##簦\": 18138,\n         \"##簧\": 18139,\n         \"##簪\": 18140,\n         \"##簫\": 18141,\n         \"##簷\": 18142,\n         \"##簸\": 18143,\n         \"##簽\": 18144,\n         \"##簾\": 18145,\n         \"##簿\": 18146,\n         \"##籁\": 18147,\n         \"##籃\": 18148,\n         \"##籌\": 18149,\n         \"##籍\": 18150,\n         \"##籐\": 18151,\n         \"##籟\": 18152,\n         \"##籠\": 18153,\n         \"##籤\": 18154,\n         \"##籬\": 18155,\n         \"##籮\": 18156,\n         \"##籲\": 18157,\n         \"##米\": 18158,\n         \"##类\": 18159,\n         \"##籼\": 18160,\n         \"##籽\": 18161,\n         \"##粄\": 18162,\n         \"##粉\": 18163,\n         \"##粑\": 18164,\n         \"##粒\": 18165,\n         \"##粕\": 18166,\n         \"##粗\": 18167,\n         \"##粘\": 18168,\n         \"##粟\": 18169,\n         \"##粤\": 18170,\n         \"##粥\": 18171,\n         \"##粧\": 18172,\n         \"##粪\": 18173,\n         \"##粮\": 18174,\n         \"##粱\": 18175,\n         \"##粲\": 18176,\n         \"##粳\": 18177,\n         \"##粵\": 18178,\n         \"##粹\": 18179,\n         \"##粼\": 18180,\n         \"##粽\": 18181,\n         \"##精\": 18182,\n         \"##粿\": 18183,\n         \"##糅\": 18184,\n         \"##糊\": 18185,\n         \"##糍\": 18186,\n         \"##糕\": 18187,\n         \"##糖\": 18188,\n         \"##糗\": 18189,\n         \"##糙\": 18190,\n         \"##糜\": 18191,\n         \"##糞\": 18192,\n         \"##糟\": 18193,\n         \"##糠\": 18194,\n         \"##糧\": 18195,\n         \"##糬\": 18196,\n         \"##糯\": 18197,\n         \"##糰\": 18198,\n         \"##糸\": 18199,\n         \"##系\": 18200,\n         \"##糾\": 18201,\n         \"##紀\": 18202,\n         \"##紂\": 18203,\n         \"##約\": 18204,\n         \"##紅\": 18205,\n         \"##紉\": 18206,\n         \"##紊\": 18207,\n         \"##紋\": 18208,\n         \"##納\": 18209,\n         \"##紐\": 18210,\n         \"##紓\": 18211,\n         \"##純\": 18212,\n         \"##紗\": 18213,\n         \"##紘\": 18214,\n         \"##紙\": 18215,\n         \"##級\": 18216,\n         \"##紛\": 18217,\n         \"##紜\": 18218,\n         \"##素\": 18219,\n         \"##紡\": 18220,\n         \"##索\": 18221,\n         \"##紧\": 18222,\n         \"##紫\": 18223,\n         \"##紮\": 18224,\n         \"##累\": 18225,\n         \"##細\": 18226,\n         \"##紳\": 18227,\n         \"##紹\": 18228,\n         \"##紺\": 18229,\n         \"##終\": 18230,\n         \"##絃\": 18231,\n         \"##組\": 18232,\n         \"##絆\": 18233,\n         \"##経\": 18234,\n         \"##結\": 18235,\n         \"##絕\": 18236,\n         \"##絞\": 18237,\n         \"##絡\": 18238,\n         \"##絢\": 18239,\n         \"##給\": 18240,\n         \"##絨\": 18241,\n         \"##絮\": 18242,\n         \"##統\": 18243,\n         \"##絲\": 18244,\n         \"##絳\": 18245,\n         \"##絵\": 18246,\n         \"##絶\": 18247,\n         \"##絹\": 18248,\n         \"##綁\": 18249,\n         \"##綏\": 18250,\n         \"##綑\": 18251,\n         \"##經\": 18252,\n         \"##継\": 18253,\n         \"##続\": 18254,\n         \"##綜\": 18255,\n         \"##綠\": 18256,\n         \"##綢\": 18257,\n         \"##綦\": 18258,\n         \"##綫\": 18259,\n         \"##綬\": 18260,\n         \"##維\": 18261,\n         \"##綱\": 18262,\n         \"##網\": 18263,\n         \"##綴\": 18264,\n         \"##綵\": 18265,\n         \"##綸\": 18266,\n         \"##綺\": 18267,\n         \"##綻\": 18268,\n         \"##綽\": 18269,\n         \"##綾\": 18270,\n         \"##綿\": 18271,\n         \"##緊\": 18272,\n         \"##緋\": 18273,\n         \"##総\": 18274,\n         \"##緑\": 18275,\n         \"##緒\": 18276,\n         \"##緘\": 18277,\n         \"##線\": 18278,\n         \"##緝\": 18279,\n         \"##緞\": 18280,\n         \"##締\": 18281,\n         \"##緣\": 18282,\n         \"##編\": 18283,\n         \"##緩\": 18284,\n         \"##緬\": 18285,\n         \"##緯\": 18286,\n         \"##練\": 18287,\n         \"##緹\": 18288,\n         \"##緻\": 18289,\n         \"##縁\": 18290,\n         \"##縄\": 18291,\n         \"##縈\": 18292,\n         \"##縛\": 18293,\n         \"##縝\": 18294,\n         \"##縣\": 18295,\n         \"##縫\": 18296,\n         \"##縮\": 18297,\n         \"##縱\": 18298,\n         \"##縴\": 18299,\n         \"##縷\": 18300,\n         \"##總\": 18301,\n         \"##績\": 18302,\n         \"##繁\": 18303,\n         \"##繃\": 18304,\n         \"##繆\": 18305,\n         \"##繇\": 18306,\n         \"##繋\": 18307,\n         \"##織\": 18308,\n         \"##繕\": 18309,\n         \"##繚\": 18310,\n         \"##繞\": 18311,\n         \"##繡\": 18312,\n         \"##繩\": 18313,\n         \"##繪\": 18314,\n         \"##繫\": 18315,\n         \"##繭\": 18316,\n         \"##繳\": 18317,\n         \"##繹\": 18318,\n         \"##繼\": 18319,\n         \"##繽\": 18320,\n         \"##纂\": 18321,\n         \"##續\": 18322,\n         \"##纍\": 18323,\n         \"##纏\": 18324,\n         \"##纓\": 18325,\n         \"##纔\": 18326,\n         \"##纖\": 18327,\n         \"##纜\": 18328,\n         \"##纠\": 18329,\n         \"##红\": 18330,\n         \"##纣\": 18331,\n         \"##纤\": 18332,\n         \"##约\": 18333,\n         \"##级\": 18334,\n         \"##纨\": 18335,\n         \"##纪\": 18336,\n         \"##纫\": 18337,\n         \"##纬\": 18338,\n         \"##纭\": 18339,\n         \"##纯\": 18340,\n         \"##纰\": 18341,\n         \"##纱\": 18342,\n         \"##纲\": 18343,\n         \"##纳\": 18344,\n         \"##纵\": 18345,\n         \"##纶\": 18346,\n         \"##纷\": 18347,\n         \"##纸\": 18348,\n         \"##纹\": 18349,\n         \"##纺\": 18350,\n         \"##纽\": 18351,\n         \"##纾\": 18352,\n         \"##线\": 18353,\n         \"##绀\": 18354,\n         \"##练\": 18355,\n         \"##组\": 18356,\n         \"##绅\": 18357,\n         \"##细\": 18358,\n         \"##织\": 18359,\n         \"##终\": 18360,\n         \"##绊\": 18361,\n         \"##绍\": 18362,\n         \"##绎\": 18363,\n         \"##经\": 18364,\n         \"##绑\": 18365,\n         \"##绒\": 18366,\n         \"##结\": 18367,\n         \"##绔\": 18368,\n         \"##绕\": 18369,\n         \"##绘\": 18370,\n         \"##给\": 18371,\n         \"##绚\": 18372,\n         \"##绛\": 18373,\n         \"##络\": 18374,\n         \"##绝\": 18375,\n         \"##绞\": 18376,\n         \"##统\": 18377,\n         \"##绡\": 18378,\n         \"##绢\": 18379,\n         \"##绣\": 18380,\n         \"##绥\": 18381,\n         \"##绦\": 18382,\n         \"##继\": 18383,\n         \"##绩\": 18384,\n         \"##绪\": 18385,\n         \"##绫\": 18386,\n         \"##续\": 18387,\n         \"##绮\": 18388,\n         \"##绯\": 18389,\n         \"##绰\": 18390,\n         \"##绳\": 18391,\n         \"##维\": 18392,\n         \"##绵\": 18393,\n         \"##绶\": 18394,\n         \"##绷\": 18395,\n         \"##绸\": 18396,\n         \"##绻\": 18397,\n         \"##综\": 18398,\n         \"##绽\": 18399,\n         \"##绾\": 18400,\n         \"##绿\": 18401,\n         \"##缀\": 18402,\n         \"##缄\": 18403,\n         \"##缅\": 18404,\n         \"##缆\": 18405,\n         \"##缇\": 18406,\n         \"##缈\": 18407,\n         \"##缉\": 18408,\n         \"##缎\": 18409,\n         \"##缓\": 18410,\n         \"##缔\": 18411,\n         \"##缕\": 18412,\n         \"##编\": 18413,\n         \"##缘\": 18414,\n         \"##缙\": 18415,\n         \"##缚\": 18416,\n         \"##缜\": 18417,\n         \"##缝\": 18418,\n         \"##缠\": 18419,\n         \"##缢\": 18420,\n         \"##缤\": 18421,\n         \"##缥\": 18422,\n         \"##缨\": 18423,\n         \"##缩\": 18424,\n         \"##缪\": 18425,\n         \"##缭\": 18426,\n         \"##缮\": 18427,\n         \"##缰\": 18428,\n         \"##缱\": 18429,\n         \"##缴\": 18430,\n         \"##缸\": 18431,\n         \"##缺\": 18432,\n         \"##缽\": 18433,\n         \"##罂\": 18434,\n         \"##罄\": 18435,\n         \"##罌\": 18436,\n         \"##罐\": 18437,\n         \"##网\": 18438,\n         \"##罔\": 18439,\n         \"##罕\": 18440,\n         \"##罗\": 18441,\n         \"##罚\": 18442,\n         \"##罡\": 18443,\n         \"##罢\": 18444,\n         \"##罩\": 18445,\n         \"##罪\": 18446,\n         \"##置\": 18447,\n         \"##罰\": 18448,\n         \"##署\": 18449,\n         \"##罵\": 18450,\n         \"##罷\": 18451,\n         \"##罹\": 18452,\n         \"##羁\": 18453,\n         \"##羅\": 18454,\n         \"##羈\": 18455,\n         \"##羊\": 18456,\n         \"##羌\": 18457,\n         \"##美\": 18458,\n         \"##羔\": 18459,\n         \"##羚\": 18460,\n         \"##羞\": 18461,\n         \"##羟\": 18462,\n         \"##羡\": 18463,\n         \"##羣\": 18464,\n         \"##群\": 18465,\n         \"##羥\": 18466,\n         \"##羧\": 18467,\n         \"##羨\": 18468,\n         \"##義\": 18469,\n         \"##羯\": 18470,\n         \"##羲\": 18471,\n         \"##羸\": 18472,\n         \"##羹\": 18473,\n         \"##羽\": 18474,\n         \"##羿\": 18475,\n         \"##翁\": 18476,\n         \"##翅\": 18477,\n         \"##翊\": 18478,\n         \"##翌\": 18479,\n         \"##翎\": 18480,\n         \"##習\": 18481,\n         \"##翔\": 18482,\n         \"##翘\": 18483,\n         \"##翟\": 18484,\n         \"##翠\": 18485,\n         \"##翡\": 18486,\n         \"##翦\": 18487,\n         \"##翩\": 18488,\n         \"##翰\": 18489,\n         \"##翱\": 18490,\n         \"##翳\": 18491,\n         \"##翹\": 18492,\n         \"##翻\": 18493,\n         \"##翼\": 18494,\n         \"##耀\": 18495,\n         \"##老\": 18496,\n         \"##考\": 18497,\n         \"##耄\": 18498,\n         \"##者\": 18499,\n         \"##耆\": 18500,\n         \"##耋\": 18501,\n         \"##而\": 18502,\n         \"##耍\": 18503,\n         \"##耐\": 18504,\n         \"##耒\": 18505,\n         \"##耕\": 18506,\n         \"##耗\": 18507,\n         \"##耘\": 18508,\n         \"##耙\": 18509,\n         \"##耦\": 18510,\n         \"##耨\": 18511,\n         \"##耳\": 18512,\n         \"##耶\": 18513,\n         \"##耷\": 18514,\n         \"##耸\": 18515,\n         \"##耻\": 18516,\n         \"##耽\": 18517,\n         \"##耿\": 18518,\n         \"##聂\": 18519,\n         \"##聆\": 18520,\n         \"##聊\": 18521,\n         \"##聋\": 18522,\n         \"##职\": 18523,\n         \"##聒\": 18524,\n         \"##联\": 18525,\n         \"##聖\": 18526,\n         \"##聘\": 18527,\n         \"##聚\": 18528,\n         \"##聞\": 18529,\n         \"##聪\": 18530,\n         \"##聯\": 18531,\n         \"##聰\": 18532,\n         \"##聲\": 18533,\n         \"##聳\": 18534,\n         \"##聴\": 18535,\n         \"##聶\": 18536,\n         \"##職\": 18537,\n         \"##聽\": 18538,\n         \"##聾\": 18539,\n         \"##聿\": 18540,\n         \"##肃\": 18541,\n         \"##肄\": 18542,\n         \"##肅\": 18543,\n         \"##肆\": 18544,\n         \"##肇\": 18545,\n         \"##肉\": 18546,\n         \"##肋\": 18547,\n         \"##肌\": 18548,\n         \"##肏\": 18549,\n         \"##肓\": 18550,\n         \"##肖\": 18551,\n         \"##肘\": 18552,\n         \"##肚\": 18553,\n         \"##肛\": 18554,\n         \"##肝\": 18555,\n         \"##肠\": 18556,\n         \"##股\": 18557,\n         \"##肢\": 18558,\n         \"##肤\": 18559,\n         \"##肥\": 18560,\n         \"##肩\": 18561,\n         \"##肪\": 18562,\n         \"##肮\": 18563,\n         \"##肯\": 18564,\n         \"##肱\": 18565,\n         \"##育\": 18566,\n         \"##肴\": 18567,\n         \"##肺\": 18568,\n         \"##肽\": 18569,\n         \"##肾\": 18570,\n         \"##肿\": 18571,\n         \"##胀\": 18572,\n         \"##胁\": 18573,\n         \"##胃\": 18574,\n         \"##胄\": 18575,\n         \"##胆\": 18576,\n         \"##背\": 18577,\n         \"##胍\": 18578,\n         \"##胎\": 18579,\n         \"##胖\": 18580,\n         \"##胚\": 18581,\n         \"##胛\": 18582,\n         \"##胜\": 18583,\n         \"##胝\": 18584,\n         \"##胞\": 18585,\n         \"##胡\": 18586,\n         \"##胤\": 18587,\n         \"##胥\": 18588,\n         \"##胧\": 18589,\n         \"##胫\": 18590,\n         \"##胭\": 18591,\n         \"##胯\": 18592,\n         \"##胰\": 18593,\n         \"##胱\": 18594,\n         \"##胳\": 18595,\n         \"##胴\": 18596,\n         \"##胶\": 18597,\n         \"##胸\": 18598,\n         \"##胺\": 18599,\n         \"##能\": 18600,\n         \"##脂\": 18601,\n         \"##脅\": 18602,\n         \"##脆\": 18603,\n         \"##脇\": 18604,\n         \"##脈\": 18605,\n         \"##脉\": 18606,\n         \"##脊\": 18607,\n         \"##脍\": 18608,\n         \"##脏\": 18609,\n         \"##脐\": 18610,\n         \"##脑\": 18611,\n         \"##脓\": 18612,\n         \"##脖\": 18613,\n         \"##脘\": 18614,\n         \"##脚\": 18615,\n         \"##脛\": 18616,\n         \"##脣\": 18617,\n         \"##脩\": 18618,\n         \"##脫\": 18619,\n         \"##脯\": 18620,\n         \"##脱\": 18621,\n         \"##脲\": 18622,\n         \"##脳\": 18623,\n         \"##脸\": 18624,\n         \"##脹\": 18625,\n         \"##脾\": 18626,\n         \"##腆\": 18627,\n         \"##腈\": 18628,\n         \"##腊\": 18629,\n         \"##腋\": 18630,\n         \"##腌\": 18631,\n         \"##腎\": 18632,\n         \"##腐\": 18633,\n         \"##腑\": 18634,\n         \"##腓\": 18635,\n         \"##腔\": 18636,\n         \"##腕\": 18637,\n         \"##腥\": 18638,\n         \"##腦\": 18639,\n         \"##腩\": 18640,\n         \"##腫\": 18641,\n         \"##腭\": 18642,\n         \"##腮\": 18643,\n         \"##腰\": 18644,\n         \"##腱\": 18645,\n         \"##腳\": 18646,\n         \"##腴\": 18647,\n         \"##腸\": 18648,\n         \"##腹\": 18649,\n         \"##腺\": 18650,\n         \"##腻\": 18651,\n         \"##腼\": 18652,\n         \"##腾\": 18653,\n         \"##腿\": 18654,\n         \"##膀\": 18655,\n         \"##膈\": 18656,\n         \"##膊\": 18657,\n         \"##膏\": 18658,\n         \"##膑\": 18659,\n         \"##膘\": 18660,\n         \"##膚\": 18661,\n         \"##膛\": 18662,\n         \"##膜\": 18663,\n         \"##膝\": 18664,\n         \"##膠\": 18665,\n         \"##膦\": 18666,\n         \"##膨\": 18667,\n         \"##膩\": 18668,\n         \"##膳\": 18669,\n         \"##膺\": 18670,\n         \"##膻\": 18671,\n         \"##膽\": 18672,\n         \"##膾\": 18673,\n         \"##膿\": 18674,\n         \"##臀\": 18675,\n         \"##臂\": 18676,\n         \"##臃\": 18677,\n         \"##臆\": 18678,\n         \"##臉\": 18679,\n         \"##臊\": 18680,\n         \"##臍\": 18681,\n         \"##臓\": 18682,\n         \"##臘\": 18683,\n         \"##臟\": 18684,\n         \"##臣\": 18685,\n         \"##臥\": 18686,\n         \"##臧\": 18687,\n         \"##臨\": 18688,\n         \"##自\": 18689,\n         \"##臬\": 18690,\n         \"##臭\": 18691,\n         \"##至\": 18692,\n         \"##致\": 18693,\n         \"##臺\": 18694,\n         \"##臻\": 18695,\n         \"##臼\": 18696,\n         \"##臾\": 18697,\n         \"##舀\": 18698,\n         \"##舂\": 18699,\n         \"##舅\": 18700,\n         \"##舆\": 18701,\n         \"##與\": 18702,\n         \"##興\": 18703,\n         \"##舉\": 18704,\n         \"##舊\": 18705,\n         \"##舌\": 18706,\n         \"##舍\": 18707,\n         \"##舎\": 18708,\n         \"##舐\": 18709,\n         \"##舒\": 18710,\n         \"##舔\": 18711,\n         \"##舖\": 18712,\n         \"##舗\": 18713,\n         \"##舛\": 18714,\n         \"##舜\": 18715,\n         \"##舞\": 18716,\n         \"##舟\": 18717,\n         \"##航\": 18718,\n         \"##舫\": 18719,\n         \"##般\": 18720,\n         \"##舰\": 18721,\n         \"##舱\": 18722,\n         \"##舵\": 18723,\n         \"##舶\": 18724,\n         \"##舷\": 18725,\n         \"##舸\": 18726,\n         \"##船\": 18727,\n         \"##舺\": 18728,\n         \"##舾\": 18729,\n         \"##艇\": 18730,\n         \"##艋\": 18731,\n         \"##艘\": 18732,\n         \"##艙\": 18733,\n         \"##艦\": 18734,\n         \"##艮\": 18735,\n         \"##良\": 18736,\n         \"##艰\": 18737,\n         \"##艱\": 18738,\n         \"##色\": 18739,\n         \"##艳\": 18740,\n         \"##艷\": 18741,\n         \"##艹\": 18742,\n         \"##艺\": 18743,\n         \"##艾\": 18744,\n         \"##节\": 18745,\n         \"##芃\": 18746,\n         \"##芈\": 18747,\n         \"##芊\": 18748,\n         \"##芋\": 18749,\n         \"##芍\": 18750,\n         \"##芎\": 18751,\n         \"##芒\": 18752,\n         \"##芙\": 18753,\n         \"##芜\": 18754,\n         \"##芝\": 18755,\n         \"##芡\": 18756,\n         \"##芥\": 18757,\n         \"##芦\": 18758,\n         \"##芩\": 18759,\n         \"##芪\": 18760,\n         \"##芫\": 18761,\n         \"##芬\": 18762,\n         \"##芭\": 18763,\n         \"##芮\": 18764,\n         \"##芯\": 18765,\n         \"##花\": 18766,\n         \"##芳\": 18767,\n         \"##芷\": 18768,\n         \"##芸\": 18769,\n         \"##芹\": 18770,\n         \"##芻\": 18771,\n         \"##芽\": 18772,\n         \"##芾\": 18773,\n         \"##苁\": 18774,\n         \"##苄\": 18775,\n         \"##苇\": 18776,\n         \"##苋\": 18777,\n         \"##苍\": 18778,\n         \"##苏\": 18779,\n         \"##苑\": 18780,\n         \"##苒\": 18781,\n         \"##苓\": 18782,\n         \"##苔\": 18783,\n         \"##苕\": 18784,\n         \"##苗\": 18785,\n         \"##苛\": 18786,\n         \"##苜\": 18787,\n         \"##苞\": 18788,\n         \"##苟\": 18789,\n         \"##苡\": 18790,\n         \"##苣\": 18791,\n         \"##若\": 18792,\n         \"##苦\": 18793,\n         \"##苫\": 18794,\n         \"##苯\": 18795,\n         \"##英\": 18796,\n         \"##苷\": 18797,\n         \"##苹\": 18798,\n         \"##苻\": 18799,\n         \"##茁\": 18800,\n         \"##茂\": 18801,\n         \"##范\": 18802,\n         \"##茄\": 18803,\n         \"##茅\": 18804,\n         \"##茉\": 18805,\n         \"##茎\": 18806,\n         \"##茏\": 18807,\n         \"##茗\": 18808,\n         \"##茜\": 18809,\n         \"##茧\": 18810,\n         \"##茨\": 18811,\n         \"##茫\": 18812,\n         \"##茬\": 18813,\n         \"##茭\": 18814,\n         \"##茯\": 18815,\n         \"##茱\": 18816,\n         \"##茲\": 18817,\n         \"##茴\": 18818,\n         \"##茵\": 18819,\n         \"##茶\": 18820,\n         \"##茸\": 18821,\n         \"##茹\": 18822,\n         \"##茼\": 18823,\n         \"##荀\": 18824,\n         \"##荃\": 18825,\n         \"##荆\": 18826,\n         \"##草\": 18827,\n         \"##荊\": 18828,\n         \"##荏\": 18829,\n         \"##荐\": 18830,\n         \"##荒\": 18831,\n         \"##荔\": 18832,\n         \"##荖\": 18833,\n         \"##荘\": 18834,\n         \"##荚\": 18835,\n         \"##荞\": 18836,\n         \"##荟\": 18837,\n         \"##荠\": 18838,\n         \"##荡\": 18839,\n         \"##荣\": 18840,\n         \"##荤\": 18841,\n         \"##荥\": 18842,\n         \"##荧\": 18843,\n         \"##荨\": 18844,\n         \"##荪\": 18845,\n         \"##荫\": 18846,\n         \"##药\": 18847,\n         \"##荳\": 18848,\n         \"##荷\": 18849,\n         \"##荸\": 18850,\n         \"##荻\": 18851,\n         \"##荼\": 18852,\n         \"##荽\": 18853,\n         \"##莅\": 18854,\n         \"##莆\": 18855,\n         \"##莉\": 18856,\n         \"##莊\": 18857,\n         \"##莎\": 18858,\n         \"##莒\": 18859,\n         \"##莓\": 18860,\n         \"##莖\": 18861,\n         \"##莘\": 18862,\n         \"##莞\": 18863,\n         \"##莠\": 18864,\n         \"##莢\": 18865,\n         \"##莧\": 18866,\n         \"##莪\": 18867,\n         \"##莫\": 18868,\n         \"##莱\": 18869,\n         \"##莲\": 18870,\n         \"##莴\": 18871,\n         \"##获\": 18872,\n         \"##莹\": 18873,\n         \"##莺\": 18874,\n         \"##莽\": 18875,\n         \"##莿\": 18876,\n         \"##菀\": 18877,\n         \"##菁\": 18878,\n         \"##菅\": 18879,\n         \"##菇\": 18880,\n         \"##菈\": 18881,\n         \"##菊\": 18882,\n         \"##菌\": 18883,\n         \"##菏\": 18884,\n         \"##菓\": 18885,\n         \"##菖\": 18886,\n         \"##菘\": 18887,\n         \"##菜\": 18888,\n         \"##菟\": 18889,\n         \"##菠\": 18890,\n         \"##菡\": 18891,\n         \"##菩\": 18892,\n         \"##華\": 18893,\n         \"##菱\": 18894,\n         \"##菲\": 18895,\n         \"##菸\": 18896,\n         \"##菽\": 18897,\n         \"##萁\": 18898,\n         \"##萃\": 18899,\n         \"##萄\": 18900,\n         \"##萊\": 18901,\n         \"##萋\": 18902,\n         \"##萌\": 18903,\n         \"##萍\": 18904,\n         \"##萎\": 18905,\n         \"##萘\": 18906,\n         \"##萝\": 18907,\n         \"##萤\": 18908,\n         \"##营\": 18909,\n         \"##萦\": 18910,\n         \"##萧\": 18911,\n         \"##萨\": 18912,\n         \"##萩\": 18913,\n         \"##萬\": 18914,\n         \"##萱\": 18915,\n         \"##萵\": 18916,\n         \"##萸\": 18917,\n         \"##萼\": 18918,\n         \"##落\": 18919,\n         \"##葆\": 18920,\n         \"##葉\": 18921,\n         \"##著\": 18922,\n         \"##葚\": 18923,\n         \"##葛\": 18924,\n         \"##葡\": 18925,\n         \"##董\": 18926,\n         \"##葦\": 18927,\n         \"##葩\": 18928,\n         \"##葫\": 18929,\n         \"##葬\": 18930,\n         \"##葭\": 18931,\n         \"##葯\": 18932,\n         \"##葱\": 18933,\n         \"##葳\": 18934,\n         \"##葵\": 18935,\n         \"##葷\": 18936,\n         \"##葺\": 18937,\n         \"##蒂\": 18938,\n         \"##蒋\": 18939,\n         \"##蒐\": 18940,\n         \"##蒔\": 18941,\n         \"##蒙\": 18942,\n         \"##蒜\": 18943,\n         \"##蒞\": 18944,\n         \"##蒟\": 18945,\n         \"##蒡\": 18946,\n         \"##蒨\": 18947,\n         \"##蒲\": 18948,\n         \"##蒸\": 18949,\n         \"##蒹\": 18950,\n         \"##蒻\": 18951,\n         \"##蒼\": 18952,\n         \"##蒿\": 18953,\n         \"##蓁\": 18954,\n         \"##蓄\": 18955,\n         \"##蓆\": 18956,\n         \"##蓉\": 18957,\n         \"##蓋\": 18958,\n         \"##蓑\": 18959,\n         \"##蓓\": 18960,\n         \"##蓖\": 18961,\n         \"##蓝\": 18962,\n         \"##蓟\": 18963,\n         \"##蓦\": 18964,\n         \"##蓬\": 18965,\n         \"##蓮\": 18966,\n         \"##蓼\": 18967,\n         \"##蓿\": 18968,\n         \"##蔑\": 18969,\n         \"##蔓\": 18970,\n         \"##蔔\": 18971,\n         \"##蔗\": 18972,\n         \"##蔘\": 18973,\n         \"##蔚\": 18974,\n         \"##蔡\": 18975,\n         \"##蔣\": 18976,\n         \"##蔥\": 18977,\n         \"##蔫\": 18978,\n         \"##蔬\": 18979,\n         \"##蔭\": 18980,\n         \"##蔵\": 18981,\n         \"##蔷\": 18982,\n         \"##蔺\": 18983,\n         \"##蔻\": 18984,\n         \"##蔼\": 18985,\n         \"##蔽\": 18986,\n         \"##蕁\": 18987,\n         \"##蕃\": 18988,\n         \"##蕈\": 18989,\n         \"##蕉\": 18990,\n         \"##蕊\": 18991,\n         \"##蕎\": 18992,\n         \"##蕙\": 18993,\n         \"##蕤\": 18994,\n         \"##蕨\": 18995,\n         \"##蕩\": 18996,\n         \"##蕪\": 18997,\n         \"##蕭\": 18998,\n         \"##蕲\": 18999,\n         \"##蕴\": 19000,\n         \"##蕻\": 19001,\n         \"##蕾\": 19002,\n         \"##薄\": 19003,\n         \"##薅\": 19004,\n         \"##薇\": 19005,\n         \"##薈\": 19006,\n         \"##薊\": 19007,\n         \"##薏\": 19008,\n         \"##薑\": 19009,\n         \"##薔\": 19010,\n         \"##薙\": 19011,\n         \"##薛\": 19012,\n         \"##薦\": 19013,\n         \"##薨\": 19014,\n         \"##薩\": 19015,\n         \"##薪\": 19016,\n         \"##薬\": 19017,\n         \"##薯\": 19018,\n         \"##薰\": 19019,\n         \"##薹\": 19020,\n         \"##藉\": 19021,\n         \"##藍\": 19022,\n         \"##藏\": 19023,\n         \"##藐\": 19024,\n         \"##藓\": 19025,\n         \"##藕\": 19026,\n         \"##藜\": 19027,\n         \"##藝\": 19028,\n         \"##藤\": 19029,\n         \"##藥\": 19030,\n         \"##藩\": 19031,\n         \"##藹\": 19032,\n         \"##藻\": 19033,\n         \"##藿\": 19034,\n         \"##蘆\": 19035,\n         \"##蘇\": 19036,\n         \"##蘊\": 19037,\n         \"##蘋\": 19038,\n         \"##蘑\": 19039,\n         \"##蘚\": 19040,\n         \"##蘭\": 19041,\n         \"##蘸\": 19042,\n         \"##蘼\": 19043,\n         \"##蘿\": 19044,\n         \"##虎\": 19045,\n         \"##虏\": 19046,\n         \"##虐\": 19047,\n         \"##虑\": 19048,\n         \"##虔\": 19049,\n         \"##處\": 19050,\n         \"##虚\": 19051,\n         \"##虛\": 19052,\n         \"##虜\": 19053,\n         \"##虞\": 19054,\n         \"##號\": 19055,\n         \"##虢\": 19056,\n         \"##虧\": 19057,\n         \"##虫\": 19058,\n         \"##虬\": 19059,\n         \"##虱\": 19060,\n         \"##虹\": 19061,\n         \"##虻\": 19062,\n         \"##虽\": 19063,\n         \"##虾\": 19064,\n         \"##蚀\": 19065,\n         \"##蚁\": 19066,\n         \"##蚂\": 19067,\n         \"##蚊\": 19068,\n         \"##蚌\": 19069,\n         \"##蚓\": 19070,\n         \"##蚕\": 19071,\n         \"##蚜\": 19072,\n         \"##蚝\": 19073,\n         \"##蚣\": 19074,\n         \"##蚤\": 19075,\n         \"##蚩\": 19076,\n         \"##蚪\": 19077,\n         \"##蚯\": 19078,\n         \"##蚱\": 19079,\n         \"##蚵\": 19080,\n         \"##蛀\": 19081,\n         \"##蛆\": 19082,\n         \"##蛇\": 19083,\n         \"##蛊\": 19084,\n         \"##蛋\": 19085,\n         \"##蛎\": 19086,\n         \"##蛐\": 19087,\n         \"##蛔\": 19088,\n         \"##蛙\": 19089,\n         \"##蛛\": 19090,\n         \"##蛟\": 19091,\n         \"##蛤\": 19092,\n         \"##蛭\": 19093,\n         \"##蛮\": 19094,\n         \"##蛰\": 19095,\n         \"##蛳\": 19096,\n         \"##蛹\": 19097,\n         \"##蛻\": 19098,\n         \"##蛾\": 19099,\n         \"##蜀\": 19100,\n         \"##蜂\": 19101,\n         \"##蜃\": 19102,\n         \"##蜆\": 19103,\n         \"##蜇\": 19104,\n         \"##蜈\": 19105,\n         \"##蜊\": 19106,\n         \"##蜍\": 19107,\n         \"##蜒\": 19108,\n         \"##蜓\": 19109,\n         \"##蜕\": 19110,\n         \"##蜗\": 19111,\n         \"##蜘\": 19112,\n         \"##蜚\": 19113,\n         \"##蜜\": 19114,\n         \"##蜡\": 19115,\n         \"##蜢\": 19116,\n         \"##蜥\": 19117,\n         \"##蜱\": 19118,\n         \"##蜴\": 19119,\n         \"##蜷\": 19120,\n         \"##蜻\": 19121,\n         \"##蜿\": 19122,\n         \"##蝇\": 19123,\n         \"##蝈\": 19124,\n         \"##蝉\": 19125,\n         \"##蝌\": 19126,\n         \"##蝎\": 19127,\n         \"##蝕\": 19128,\n         \"##蝗\": 19129,\n         \"##蝙\": 19130,\n         \"##蝟\": 19131,\n         \"##蝠\": 19132,\n         \"##蝦\": 19133,\n         \"##蝨\": 19134,\n         \"##蝴\": 19135,\n         \"##蝶\": 19136,\n         \"##蝸\": 19137,\n         \"##蝼\": 19138,\n         \"##螂\": 19139,\n         \"##螃\": 19140,\n         \"##融\": 19141,\n         \"##螞\": 19142,\n         \"##螢\": 19143,\n         \"##螨\": 19144,\n         \"##螯\": 19145,\n         \"##螳\": 19146,\n         \"##螺\": 19147,\n         \"##蟀\": 19148,\n         \"##蟄\": 19149,\n         \"##蟆\": 19150,\n         \"##蟋\": 19151,\n         \"##蟎\": 19152,\n         \"##蟑\": 19153,\n         \"##蟒\": 19154,\n         \"##蟠\": 19155,\n         \"##蟬\": 19156,\n         \"##蟲\": 19157,\n         \"##蟹\": 19158,\n         \"##蟻\": 19159,\n         \"##蟾\": 19160,\n         \"##蠅\": 19161,\n         \"##蠍\": 19162,\n         \"##蠔\": 19163,\n         \"##蠕\": 19164,\n         \"##蠛\": 19165,\n         \"##蠟\": 19166,\n         \"##蠡\": 19167,\n         \"##蠢\": 19168,\n         \"##蠣\": 19169,\n         \"##蠱\": 19170,\n         \"##蠶\": 19171,\n         \"##蠹\": 19172,\n         \"##蠻\": 19173,\n         \"##血\": 19174,\n         \"##衄\": 19175,\n         \"##衅\": 19176,\n         \"##衆\": 19177,\n         \"##行\": 19178,\n         \"##衍\": 19179,\n         \"##術\": 19180,\n         \"##衔\": 19181,\n         \"##街\": 19182,\n         \"##衙\": 19183,\n         \"##衛\": 19184,\n         \"##衝\": 19185,\n         \"##衞\": 19186,\n         \"##衡\": 19187,\n         \"##衢\": 19188,\n         \"##衣\": 19189,\n         \"##补\": 19190,\n         \"##表\": 19191,\n         \"##衩\": 19192,\n         \"##衫\": 19193,\n         \"##衬\": 19194,\n         \"##衮\": 19195,\n         \"##衰\": 19196,\n         \"##衲\": 19197,\n         \"##衷\": 19198,\n         \"##衹\": 19199,\n         \"##衾\": 19200,\n         \"##衿\": 19201,\n         \"##袁\": 19202,\n         \"##袂\": 19203,\n         \"##袄\": 19204,\n         \"##袅\": 19205,\n         \"##袈\": 19206,\n         \"##袋\": 19207,\n         \"##袍\": 19208,\n         \"##袒\": 19209,\n         \"##袖\": 19210,\n         \"##袜\": 19211,\n         \"##袞\": 19212,\n         \"##袤\": 19213,\n         \"##袪\": 19214,\n         \"##被\": 19215,\n         \"##袭\": 19216,\n         \"##袱\": 19217,\n         \"##裁\": 19218,\n         \"##裂\": 19219,\n         \"##装\": 19220,\n         \"##裆\": 19221,\n         \"##裊\": 19222,\n         \"##裏\": 19223,\n         \"##裔\": 19224,\n         \"##裕\": 19225,\n         \"##裘\": 19226,\n         \"##裙\": 19227,\n         \"##補\": 19228,\n         \"##裝\": 19229,\n         \"##裟\": 19230,\n         \"##裡\": 19231,\n         \"##裤\": 19232,\n         \"##裨\": 19233,\n         \"##裱\": 19234,\n         \"##裳\": 19235,\n         \"##裴\": 19236,\n         \"##裸\": 19237,\n         \"##裹\": 19238,\n         \"##製\": 19239,\n         \"##裾\": 19240,\n         \"##褂\": 19241,\n         \"##複\": 19242,\n         \"##褐\": 19243,\n         \"##褒\": 19244,\n         \"##褓\": 19245,\n         \"##褔\": 19246,\n         \"##褚\": 19247,\n         \"##褥\": 19248,\n         \"##褪\": 19249,\n         \"##褫\": 19250,\n         \"##褲\": 19251,\n         \"##褶\": 19252,\n         \"##褻\": 19253,\n         \"##襁\": 19254,\n         \"##襄\": 19255,\n         \"##襟\": 19256,\n         \"##襠\": 19257,\n         \"##襪\": 19258,\n         \"##襬\": 19259,\n         \"##襯\": 19260,\n         \"##襲\": 19261,\n         \"##西\": 19262,\n         \"##要\": 19263,\n         \"##覃\": 19264,\n         \"##覆\": 19265,\n         \"##覇\": 19266,\n         \"##見\": 19267,\n         \"##規\": 19268,\n         \"##覓\": 19269,\n         \"##視\": 19270,\n         \"##覚\": 19271,\n         \"##覦\": 19272,\n         \"##覧\": 19273,\n         \"##親\": 19274,\n         \"##覬\": 19275,\n         \"##観\": 19276,\n         \"##覷\": 19277,\n         \"##覺\": 19278,\n         \"##覽\": 19279,\n         \"##觀\": 19280,\n         \"##见\": 19281,\n         \"##观\": 19282,\n         \"##规\": 19283,\n         \"##觅\": 19284,\n         \"##视\": 19285,\n         \"##览\": 19286,\n         \"##觉\": 19287,\n         \"##觊\": 19288,\n         \"##觎\": 19289,\n         \"##觐\": 19290,\n         \"##觑\": 19291,\n         \"##角\": 19292,\n         \"##觞\": 19293,\n         \"##解\": 19294,\n         \"##觥\": 19295,\n         \"##触\": 19296,\n         \"##觸\": 19297,\n         \"##言\": 19298,\n         \"##訂\": 19299,\n         \"##計\": 19300,\n         \"##訊\": 19301,\n         \"##討\": 19302,\n         \"##訓\": 19303,\n         \"##訕\": 19304,\n         \"##訖\": 19305,\n         \"##託\": 19306,\n         \"##記\": 19307,\n         \"##訛\": 19308,\n         \"##訝\": 19309,\n         \"##訟\": 19310,\n         \"##訣\": 19311,\n         \"##訥\": 19312,\n         \"##訪\": 19313,\n         \"##設\": 19314,\n         \"##許\": 19315,\n         \"##訳\": 19316,\n         \"##訴\": 19317,\n         \"##訶\": 19318,\n         \"##診\": 19319,\n         \"##註\": 19320,\n         \"##証\": 19321,\n         \"##詆\": 19322,\n         \"##詐\": 19323,\n         \"##詔\": 19324,\n         \"##評\": 19325,\n         \"##詛\": 19326,\n         \"##詞\": 19327,\n         \"##詠\": 19328,\n         \"##詡\": 19329,\n         \"##詢\": 19330,\n         \"##詣\": 19331,\n         \"##試\": 19332,\n         \"##詩\": 19333,\n         \"##詫\": 19334,\n         \"##詬\": 19335,\n         \"##詭\": 19336,\n         \"##詮\": 19337,\n         \"##詰\": 19338,\n         \"##話\": 19339,\n         \"##該\": 19340,\n         \"##詳\": 19341,\n         \"##詹\": 19342,\n         \"##詼\": 19343,\n         \"##誅\": 19344,\n         \"##誇\": 19345,\n         \"##誉\": 19346,\n         \"##誌\": 19347,\n         \"##認\": 19348,\n         \"##誓\": 19349,\n         \"##誕\": 19350,\n         \"##誘\": 19351,\n         \"##語\": 19352,\n         \"##誠\": 19353,\n         \"##誡\": 19354,\n         \"##誣\": 19355,\n         \"##誤\": 19356,\n         \"##誥\": 19357,\n         \"##誦\": 19358,\n         \"##誨\": 19359,\n         \"##說\": 19360,\n         \"##説\": 19361,\n         \"##読\": 19362,\n         \"##誰\": 19363,\n         \"##課\": 19364,\n         \"##誹\": 19365,\n         \"##誼\": 19366,\n         \"##調\": 19367,\n         \"##諄\": 19368,\n         \"##談\": 19369,\n         \"##請\": 19370,\n         \"##諏\": 19371,\n         \"##諒\": 19372,\n         \"##論\": 19373,\n         \"##諗\": 19374,\n         \"##諜\": 19375,\n         \"##諡\": 19376,\n         \"##諦\": 19377,\n         \"##諧\": 19378,\n         \"##諫\": 19379,\n         \"##諭\": 19380,\n         \"##諮\": 19381,\n         \"##諱\": 19382,\n         \"##諳\": 19383,\n         \"##諷\": 19384,\n         \"##諸\": 19385,\n         \"##諺\": 19386,\n         \"##諾\": 19387,\n         \"##謀\": 19388,\n         \"##謁\": 19389,\n         \"##謂\": 19390,\n         \"##謄\": 19391,\n         \"##謊\": 19392,\n         \"##謎\": 19393,\n         \"##謐\": 19394,\n         \"##謔\": 19395,\n         \"##謗\": 19396,\n         \"##謙\": 19397,\n         \"##講\": 19398,\n         \"##謝\": 19399,\n         \"##謠\": 19400,\n         \"##謨\": 19401,\n         \"##謬\": 19402,\n         \"##謹\": 19403,\n         \"##謾\": 19404,\n         \"##譁\": 19405,\n         \"##證\": 19406,\n         \"##譎\": 19407,\n         \"##譏\": 19408,\n         \"##識\": 19409,\n         \"##譙\": 19410,\n         \"##譚\": 19411,\n         \"##譜\": 19412,\n         \"##警\": 19413,\n         \"##譬\": 19414,\n         \"##譯\": 19415,\n         \"##議\": 19416,\n         \"##譲\": 19417,\n         \"##譴\": 19418,\n         \"##護\": 19419,\n         \"##譽\": 19420,\n         \"##讀\": 19421,\n         \"##變\": 19422,\n         \"##讓\": 19423,\n         \"##讚\": 19424,\n         \"##讞\": 19425,\n         \"##计\": 19426,\n         \"##订\": 19427,\n         \"##认\": 19428,\n         \"##讥\": 19429,\n         \"##讧\": 19430,\n         \"##讨\": 19431,\n         \"##让\": 19432,\n         \"##讪\": 19433,\n         \"##讫\": 19434,\n         \"##训\": 19435,\n         \"##议\": 19436,\n         \"##讯\": 19437,\n         \"##记\": 19438,\n         \"##讲\": 19439,\n         \"##讳\": 19440,\n         \"##讴\": 19441,\n         \"##讶\": 19442,\n         \"##讷\": 19443,\n         \"##许\": 19444,\n         \"##讹\": 19445,\n         \"##论\": 19446,\n         \"##讼\": 19447,\n         \"##讽\": 19448,\n         \"##设\": 19449,\n         \"##访\": 19450,\n         \"##诀\": 19451,\n         \"##证\": 19452,\n         \"##诃\": 19453,\n         \"##评\": 19454,\n         \"##诅\": 19455,\n         \"##识\": 19456,\n         \"##诈\": 19457,\n         \"##诉\": 19458,\n         \"##诊\": 19459,\n         \"##诋\": 19460,\n         \"##词\": 19461,\n         \"##诏\": 19462,\n         \"##译\": 19463,\n         \"##试\": 19464,\n         \"##诗\": 19465,\n         \"##诘\": 19466,\n         \"##诙\": 19467,\n         \"##诚\": 19468,\n         \"##诛\": 19469,\n         \"##话\": 19470,\n         \"##诞\": 19471,\n         \"##诟\": 19472,\n         \"##诠\": 19473,\n         \"##诡\": 19474,\n         \"##询\": 19475,\n         \"##诣\": 19476,\n         \"##诤\": 19477,\n         \"##该\": 19478,\n         \"##详\": 19479,\n         \"##诧\": 19480,\n         \"##诩\": 19481,\n         \"##诫\": 19482,\n         \"##诬\": 19483,\n         \"##语\": 19484,\n         \"##误\": 19485,\n         \"##诰\": 19486,\n         \"##诱\": 19487,\n         \"##诲\": 19488,\n         \"##说\": 19489,\n         \"##诵\": 19490,\n         \"##诶\": 19491,\n         \"##请\": 19492,\n         \"##诸\": 19493,\n         \"##诺\": 19494,\n         \"##读\": 19495,\n         \"##诽\": 19496,\n         \"##课\": 19497,\n         \"##诿\": 19498,\n         \"##谀\": 19499,\n         \"##谁\": 19500,\n         \"##调\": 19501,\n         \"##谄\": 19502,\n         \"##谅\": 19503,\n         \"##谆\": 19504,\n         \"##谈\": 19505,\n         \"##谊\": 19506,\n         \"##谋\": 19507,\n         \"##谌\": 19508,\n         \"##谍\": 19509,\n         \"##谎\": 19510,\n         \"##谏\": 19511,\n         \"##谐\": 19512,\n         \"##谑\": 19513,\n         \"##谒\": 19514,\n         \"##谓\": 19515,\n         \"##谔\": 19516,\n         \"##谕\": 19517,\n         \"##谗\": 19518,\n         \"##谘\": 19519,\n         \"##谙\": 19520,\n         \"##谚\": 19521,\n         \"##谛\": 19522,\n         \"##谜\": 19523,\n         \"##谟\": 19524,\n         \"##谢\": 19525,\n         \"##谣\": 19526,\n         \"##谤\": 19527,\n         \"##谥\": 19528,\n         \"##谦\": 19529,\n         \"##谧\": 19530,\n         \"##谨\": 19531,\n         \"##谩\": 19532,\n         \"##谪\": 19533,\n         \"##谬\": 19534,\n         \"##谭\": 19535,\n         \"##谯\": 19536,\n         \"##谱\": 19537,\n         \"##谲\": 19538,\n         \"##谴\": 19539,\n         \"##谶\": 19540,\n         \"##谷\": 19541,\n         \"##豁\": 19542,\n         \"##豆\": 19543,\n         \"##豇\": 19544,\n         \"##豈\": 19545,\n         \"##豉\": 19546,\n         \"##豊\": 19547,\n         \"##豌\": 19548,\n         \"##豎\": 19549,\n         \"##豐\": 19550,\n         \"##豔\": 19551,\n         \"##豚\": 19552,\n         \"##象\": 19553,\n         \"##豢\": 19554,\n         \"##豪\": 19555,\n         \"##豫\": 19556,\n         \"##豬\": 19557,\n         \"##豹\": 19558,\n         \"##豺\": 19559,\n         \"##貂\": 19560,\n         \"##貅\": 19561,\n         \"##貌\": 19562,\n         \"##貓\": 19563,\n         \"##貔\": 19564,\n         \"##貘\": 19565,\n         \"##貝\": 19566,\n         \"##貞\": 19567,\n         \"##負\": 19568,\n         \"##財\": 19569,\n         \"##貢\": 19570,\n         \"##貧\": 19571,\n         \"##貨\": 19572,\n         \"##販\": 19573,\n         \"##貪\": 19574,\n         \"##貫\": 19575,\n         \"##責\": 19576,\n         \"##貯\": 19577,\n         \"##貰\": 19578,\n         \"##貳\": 19579,\n         \"##貴\": 19580,\n         \"##貶\": 19581,\n         \"##買\": 19582,\n         \"##貸\": 19583,\n         \"##費\": 19584,\n         \"##貼\": 19585,\n         \"##貽\": 19586,\n         \"##貿\": 19587,\n         \"##賀\": 19588,\n         \"##賁\": 19589,\n         \"##賂\": 19590,\n         \"##賃\": 19591,\n         \"##賄\": 19592,\n         \"##資\": 19593,\n         \"##賈\": 19594,\n         \"##賊\": 19595,\n         \"##賑\": 19596,\n         \"##賓\": 19597,\n         \"##賜\": 19598,\n         \"##賞\": 19599,\n         \"##賠\": 19600,\n         \"##賡\": 19601,\n         \"##賢\": 19602,\n         \"##賣\": 19603,\n         \"##賤\": 19604,\n         \"##賦\": 19605,\n         \"##質\": 19606,\n         \"##賬\": 19607,\n         \"##賭\": 19608,\n         \"##賴\": 19609,\n         \"##賺\": 19610,\n         \"##購\": 19611,\n         \"##賽\": 19612,\n         \"##贅\": 19613,\n         \"##贈\": 19614,\n         \"##贊\": 19615,\n         \"##贍\": 19616,\n         \"##贏\": 19617,\n         \"##贓\": 19618,\n         \"##贖\": 19619,\n         \"##贛\": 19620,\n         \"##贝\": 19621,\n         \"##贞\": 19622,\n         \"##负\": 19623,\n         \"##贡\": 19624,\n         \"##财\": 19625,\n         \"##责\": 19626,\n         \"##贤\": 19627,\n         \"##败\": 19628,\n         \"##账\": 19629,\n         \"##货\": 19630,\n         \"##质\": 19631,\n         \"##贩\": 19632,\n         \"##贪\": 19633,\n         \"##贫\": 19634,\n         \"##贬\": 19635,\n         \"##购\": 19636,\n         \"##贮\": 19637,\n         \"##贯\": 19638,\n         \"##贰\": 19639,\n         \"##贱\": 19640,\n         \"##贲\": 19641,\n         \"##贴\": 19642,\n         \"##贵\": 19643,\n         \"##贷\": 19644,\n         \"##贸\": 19645,\n         \"##费\": 19646,\n         \"##贺\": 19647,\n         \"##贻\": 19648,\n         \"##贼\": 19649,\n         \"##贾\": 19650,\n         \"##贿\": 19651,\n         \"##赁\": 19652,\n         \"##赂\": 19653,\n         \"##赃\": 19654,\n         \"##资\": 19655,\n         \"##赅\": 19656,\n         \"##赈\": 19657,\n         \"##赊\": 19658,\n         \"##赋\": 19659,\n         \"##赌\": 19660,\n         \"##赎\": 19661,\n         \"##赏\": 19662,\n         \"##赐\": 19663,\n         \"##赓\": 19664,\n         \"##赔\": 19665,\n         \"##赖\": 19666,\n         \"##赘\": 19667,\n         \"##赚\": 19668,\n         \"##赛\": 19669,\n         \"##赝\": 19670,\n         \"##赞\": 19671,\n         \"##赠\": 19672,\n         \"##赡\": 19673,\n         \"##赢\": 19674,\n         \"##赣\": 19675,\n         \"##赤\": 19676,\n         \"##赦\": 19677,\n         \"##赧\": 19678,\n         \"##赫\": 19679,\n         \"##赭\": 19680,\n         \"##走\": 19681,\n         \"##赳\": 19682,\n         \"##赴\": 19683,\n         \"##赵\": 19684,\n         \"##赶\": 19685,\n         \"##起\": 19686,\n         \"##趁\": 19687,\n         \"##超\": 19688,\n         \"##越\": 19689,\n         \"##趋\": 19690,\n         \"##趕\": 19691,\n         \"##趙\": 19692,\n         \"##趟\": 19693,\n         \"##趣\": 19694,\n         \"##趨\": 19695,\n         \"##足\": 19696,\n         \"##趴\": 19697,\n         \"##趵\": 19698,\n         \"##趸\": 19699,\n         \"##趺\": 19700,\n         \"##趾\": 19701,\n         \"##跃\": 19702,\n         \"##跄\": 19703,\n         \"##跆\": 19704,\n         \"##跋\": 19705,\n         \"##跌\": 19706,\n         \"##跎\": 19707,\n         \"##跑\": 19708,\n         \"##跖\": 19709,\n         \"##跚\": 19710,\n         \"##跛\": 19711,\n         \"##距\": 19712,\n         \"##跟\": 19713,\n         \"##跡\": 19714,\n         \"##跤\": 19715,\n         \"##跨\": 19716,\n         \"##跩\": 19717,\n         \"##跪\": 19718,\n         \"##路\": 19719,\n         \"##跳\": 19720,\n         \"##践\": 19721,\n         \"##跷\": 19722,\n         \"##跹\": 19723,\n         \"##跺\": 19724,\n         \"##跻\": 19725,\n         \"##踉\": 19726,\n         \"##踊\": 19727,\n         \"##踌\": 19728,\n         \"##踏\": 19729,\n         \"##踐\": 19730,\n         \"##踝\": 19731,\n         \"##踞\": 19732,\n         \"##踟\": 19733,\n         \"##踢\": 19734,\n         \"##踩\": 19735,\n         \"##踪\": 19736,\n         \"##踮\": 19737,\n         \"##踱\": 19738,\n         \"##踴\": 19739,\n         \"##踵\": 19740,\n         \"##踹\": 19741,\n         \"##蹂\": 19742,\n         \"##蹄\": 19743,\n         \"##蹇\": 19744,\n         \"##蹈\": 19745,\n         \"##蹉\": 19746,\n         \"##蹊\": 19747,\n         \"##蹋\": 19748,\n         \"##蹑\": 19749,\n         \"##蹒\": 19750,\n         \"##蹙\": 19751,\n         \"##蹟\": 19752,\n         \"##蹣\": 19753,\n         \"##蹤\": 19754,\n         \"##蹦\": 19755,\n         \"##蹩\": 19756,\n         \"##蹬\": 19757,\n         \"##蹭\": 19758,\n         \"##蹲\": 19759,\n         \"##蹴\": 19760,\n         \"##蹶\": 19761,\n         \"##蹺\": 19762,\n         \"##蹼\": 19763,\n         \"##蹿\": 19764,\n         \"##躁\": 19765,\n         \"##躇\": 19766,\n         \"##躉\": 19767,\n         \"##躊\": 19768,\n         \"##躋\": 19769,\n         \"##躍\": 19770,\n         \"##躏\": 19771,\n         \"##躪\": 19772,\n         \"##身\": 19773,\n         \"##躬\": 19774,\n         \"##躯\": 19775,\n         \"##躲\": 19776,\n         \"##躺\": 19777,\n         \"##軀\": 19778,\n         \"##車\": 19779,\n         \"##軋\": 19780,\n         \"##軌\": 19781,\n         \"##軍\": 19782,\n         \"##軒\": 19783,\n         \"##軟\": 19784,\n         \"##転\": 19785,\n         \"##軸\": 19786,\n         \"##軼\": 19787,\n         \"##軽\": 19788,\n         \"##軾\": 19789,\n         \"##較\": 19790,\n         \"##載\": 19791,\n         \"##輒\": 19792,\n         \"##輓\": 19793,\n         \"##輔\": 19794,\n         \"##輕\": 19795,\n         \"##輛\": 19796,\n         \"##輝\": 19797,\n         \"##輟\": 19798,\n         \"##輩\": 19799,\n         \"##輪\": 19800,\n         \"##輯\": 19801,\n         \"##輸\": 19802,\n         \"##輻\": 19803,\n         \"##輾\": 19804,\n         \"##輿\": 19805,\n         \"##轄\": 19806,\n         \"##轅\": 19807,\n         \"##轆\": 19808,\n         \"##轉\": 19809,\n         \"##轍\": 19810,\n         \"##轎\": 19811,\n         \"##轟\": 19812,\n         \"##车\": 19813,\n         \"##轧\": 19814,\n         \"##轨\": 19815,\n         \"##轩\": 19816,\n         \"##转\": 19817,\n         \"##轭\": 19818,\n         \"##轮\": 19819,\n         \"##软\": 19820,\n         \"##轰\": 19821,\n         \"##轲\": 19822,\n         \"##轴\": 19823,\n         \"##轶\": 19824,\n         \"##轻\": 19825,\n         \"##轼\": 19826,\n         \"##载\": 19827,\n         \"##轿\": 19828,\n         \"##较\": 19829,\n         \"##辄\": 19830,\n         \"##辅\": 19831,\n         \"##辆\": 19832,\n         \"##辇\": 19833,\n         \"##辈\": 19834,\n         \"##辉\": 19835,\n         \"##辊\": 19836,\n         \"##辍\": 19837,\n         \"##辐\": 19838,\n         \"##辑\": 19839,\n         \"##输\": 19840,\n         \"##辕\": 19841,\n         \"##辖\": 19842,\n         \"##辗\": 19843,\n         \"##辘\": 19844,\n         \"##辙\": 19845,\n         \"##辛\": 19846,\n         \"##辜\": 19847,\n         \"##辞\": 19848,\n         \"##辟\": 19849,\n         \"##辣\": 19850,\n         \"##辦\": 19851,\n         \"##辨\": 19852,\n         \"##辩\": 19853,\n         \"##辫\": 19854,\n         \"##辭\": 19855,\n         \"##辮\": 19856,\n         \"##辯\": 19857,\n         \"##辰\": 19858,\n         \"##辱\": 19859,\n         \"##農\": 19860,\n         \"##边\": 19861,\n         \"##辺\": 19862,\n         \"##辻\": 19863,\n         \"##込\": 19864,\n         \"##辽\": 19865,\n         \"##达\": 19866,\n         \"##迁\": 19867,\n         \"##迂\": 19868,\n         \"##迄\": 19869,\n         \"##迅\": 19870,\n         \"##过\": 19871,\n         \"##迈\": 19872,\n         \"##迎\": 19873,\n         \"##运\": 19874,\n         \"##近\": 19875,\n         \"##返\": 19876,\n         \"##还\": 19877,\n         \"##这\": 19878,\n         \"##进\": 19879,\n         \"##远\": 19880,\n         \"##违\": 19881,\n         \"##连\": 19882,\n         \"##迟\": 19883,\n         \"##迢\": 19884,\n         \"##迤\": 19885,\n         \"##迥\": 19886,\n         \"##迦\": 19887,\n         \"##迩\": 19888,\n         \"##迪\": 19889,\n         \"##迫\": 19890,\n         \"##迭\": 19891,\n         \"##述\": 19892,\n         \"##迴\": 19893,\n         \"##迷\": 19894,\n         \"##迸\": 19895,\n         \"##迹\": 19896,\n         \"##迺\": 19897,\n         \"##追\": 19898,\n         \"##退\": 19899,\n         \"##送\": 19900,\n         \"##适\": 19901,\n         \"##逃\": 19902,\n         \"##逅\": 19903,\n         \"##逆\": 19904,\n         \"##选\": 19905,\n         \"##逊\": 19906,\n         \"##逍\": 19907,\n         \"##透\": 19908,\n         \"##逐\": 19909,\n         \"##递\": 19910,\n         \"##途\": 19911,\n         \"##逕\": 19912,\n         \"##逗\": 19913,\n         \"##這\": 19914,\n         \"##通\": 19915,\n         \"##逛\": 19916,\n         \"##逝\": 19917,\n         \"##逞\": 19918,\n         \"##速\": 19919,\n         \"##造\": 19920,\n         \"##逢\": 19921,\n         \"##連\": 19922,\n         \"##逮\": 19923,\n         \"##週\": 19924,\n         \"##進\": 19925,\n         \"##逵\": 19926,\n         \"##逶\": 19927,\n         \"##逸\": 19928,\n         \"##逻\": 19929,\n         \"##逼\": 19930,\n         \"##逾\": 19931,\n         \"##遁\": 19932,\n         \"##遂\": 19933,\n         \"##遅\": 19934,\n         \"##遇\": 19935,\n         \"##遊\": 19936,\n         \"##運\": 19937,\n         \"##遍\": 19938,\n         \"##過\": 19939,\n         \"##遏\": 19940,\n         \"##遐\": 19941,\n         \"##遑\": 19942,\n         \"##遒\": 19943,\n         \"##道\": 19944,\n         \"##達\": 19945,\n         \"##違\": 19946,\n         \"##遗\": 19947,\n         \"##遙\": 19948,\n         \"##遛\": 19949,\n         \"##遜\": 19950,\n         \"##遞\": 19951,\n         \"##遠\": 19952,\n         \"##遢\": 19953,\n         \"##遣\": 19954,\n         \"##遥\": 19955,\n         \"##遨\": 19956,\n         \"##適\": 19957,\n         \"##遭\": 19958,\n         \"##遮\": 19959,\n         \"##遲\": 19960,\n         \"##遴\": 19961,\n         \"##遵\": 19962,\n         \"##遶\": 19963,\n         \"##遷\": 19964,\n         \"##選\": 19965,\n         \"##遺\": 19966,\n         \"##遼\": 19967,\n         \"##遽\": 19968,\n         \"##避\": 19969,\n         \"##邀\": 19970,\n         \"##邁\": 19971,\n         \"##邂\": 19972,\n         \"##邃\": 19973,\n         \"##還\": 19974,\n         \"##邇\": 19975,\n         \"##邈\": 19976,\n         \"##邊\": 19977,\n         \"##邋\": 19978,\n         \"##邏\": 19979,\n         \"##邑\": 19980,\n         \"##邓\": 19981,\n         \"##邕\": 19982,\n         \"##邛\": 19983,\n         \"##邝\": 19984,\n         \"##邢\": 19985,\n         \"##那\": 19986,\n         \"##邦\": 19987,\n         \"##邨\": 19988,\n         \"##邪\": 19989,\n         \"##邬\": 19990,\n         \"##邮\": 19991,\n         \"##邯\": 19992,\n         \"##邰\": 19993,\n         \"##邱\": 19994,\n         \"##邳\": 19995,\n         \"##邵\": 19996,\n         \"##邸\": 19997,\n         \"##邹\": 19998,\n         \"##邺\": 19999,\n         \"##邻\": 20000,\n         \"##郁\": 20001,\n         \"##郅\": 20002,\n         \"##郊\": 20003,\n         \"##郎\": 20004,\n         \"##郑\": 20005,\n         \"##郜\": 20006,\n         \"##郝\": 20007,\n         \"##郡\": 20008,\n         \"##郢\": 20009,\n         \"##郤\": 20010,\n         \"##郦\": 20011,\n         \"##郧\": 20012,\n         \"##部\": 20013,\n         \"##郫\": 20014,\n         \"##郭\": 20015,\n         \"##郴\": 20016,\n         \"##郵\": 20017,\n         \"##郷\": 20018,\n         \"##郸\": 20019,\n         \"##都\": 20020,\n         \"##鄂\": 20021,\n         \"##鄉\": 20022,\n         \"##鄒\": 20023,\n         \"##鄔\": 20024,\n         \"##鄙\": 20025,\n         \"##鄞\": 20026,\n         \"##鄢\": 20027,\n         \"##鄧\": 20028,\n         \"##鄭\": 20029,\n         \"##鄰\": 20030,\n         \"##鄱\": 20031,\n         \"##鄲\": 20032,\n         \"##鄺\": 20033,\n         \"##酉\": 20034,\n         \"##酊\": 20035,\n         \"##酋\": 20036,\n         \"##酌\": 20037,\n         \"##配\": 20038,\n         \"##酐\": 20039,\n         \"##酒\": 20040,\n         \"##酗\": 20041,\n         \"##酚\": 20042,\n         \"##酝\": 20043,\n         \"##酢\": 20044,\n         \"##酣\": 20045,\n         \"##酥\": 20046,\n         \"##酩\": 20047,\n         \"##酪\": 20048,\n         \"##酬\": 20049,\n         \"##酮\": 20050,\n         \"##酯\": 20051,\n         \"##酰\": 20052,\n         \"##酱\": 20053,\n         \"##酵\": 20054,\n         \"##酶\": 20055,\n         \"##酷\": 20056,\n         \"##酸\": 20057,\n         \"##酿\": 20058,\n         \"##醃\": 20059,\n         \"##醇\": 20060,\n         \"##醉\": 20061,\n         \"##醋\": 20062,\n         \"##醍\": 20063,\n         \"##醐\": 20064,\n         \"##醒\": 20065,\n         \"##醚\": 20066,\n         \"##醛\": 20067,\n         \"##醜\": 20068,\n         \"##醞\": 20069,\n         \"##醣\": 20070,\n         \"##醪\": 20071,\n         \"##醫\": 20072,\n         \"##醬\": 20073,\n         \"##醮\": 20074,\n         \"##醯\": 20075,\n         \"##醴\": 20076,\n         \"##醺\": 20077,\n         \"##釀\": 20078,\n         \"##釁\": 20079,\n         \"##采\": 20080,\n         \"##釉\": 20081,\n         \"##释\": 20082,\n         \"##釋\": 20083,\n         \"##里\": 20084,\n         \"##重\": 20085,\n         \"##野\": 20086,\n         \"##量\": 20087,\n         \"##釐\": 20088,\n         \"##金\": 20089,\n         \"##釗\": 20090,\n         \"##釘\": 20091,\n         \"##釜\": 20092,\n         \"##針\": 20093,\n         \"##釣\": 20094,\n         \"##釦\": 20095,\n         \"##釧\": 20096,\n         \"##釵\": 20097,\n         \"##鈀\": 20098,\n         \"##鈉\": 20099,\n         \"##鈍\": 20100,\n         \"##鈎\": 20101,\n         \"##鈔\": 20102,\n         \"##鈕\": 20103,\n         \"##鈞\": 20104,\n         \"##鈣\": 20105,\n         \"##鈦\": 20106,\n         \"##鈪\": 20107,\n         \"##鈴\": 20108,\n         \"##鈺\": 20109,\n         \"##鈾\": 20110,\n         \"##鉀\": 20111,\n         \"##鉄\": 20112,\n         \"##鉅\": 20113,\n         \"##鉉\": 20114,\n         \"##鉑\": 20115,\n         \"##鉗\": 20116,\n         \"##鉚\": 20117,\n         \"##鉛\": 20118,\n         \"##鉤\": 20119,\n         \"##鉴\": 20120,\n         \"##鉻\": 20121,\n         \"##銀\": 20122,\n         \"##銃\": 20123,\n         \"##銅\": 20124,\n         \"##銑\": 20125,\n         \"##銓\": 20126,\n         \"##銖\": 20127,\n         \"##銘\": 20128,\n         \"##銜\": 20129,\n         \"##銬\": 20130,\n         \"##銭\": 20131,\n         \"##銮\": 20132,\n         \"##銳\": 20133,\n         \"##銷\": 20134,\n         \"##銹\": 20135,\n         \"##鋁\": 20136,\n         \"##鋅\": 20137,\n         \"##鋒\": 20138,\n         \"##鋤\": 20139,\n         \"##鋪\": 20140,\n         \"##鋰\": 20141,\n         \"##鋸\": 20142,\n         \"##鋼\": 20143,\n         \"##錄\": 20144,\n         \"##錐\": 20145,\n         \"##錘\": 20146,\n         \"##錚\": 20147,\n         \"##錠\": 20148,\n         \"##錢\": 20149,\n         \"##錦\": 20150,\n         \"##錨\": 20151,\n         \"##錫\": 20152,\n         \"##錮\": 20153,\n         \"##錯\": 20154,\n         \"##録\": 20155,\n         \"##錳\": 20156,\n         \"##錶\": 20157,\n         \"##鍊\": 20158,\n         \"##鍋\": 20159,\n         \"##鍍\": 20160,\n         \"##鍛\": 20161,\n         \"##鍥\": 20162,\n         \"##鍰\": 20163,\n         \"##鍵\": 20164,\n         \"##鍺\": 20165,\n         \"##鍾\": 20166,\n         \"##鎂\": 20167,\n         \"##鎊\": 20168,\n         \"##鎌\": 20169,\n         \"##鎏\": 20170,\n         \"##鎔\": 20171,\n         \"##鎖\": 20172,\n         \"##鎗\": 20173,\n         \"##鎚\": 20174,\n         \"##鎧\": 20175,\n         \"##鎬\": 20176,\n         \"##鎮\": 20177,\n         \"##鎳\": 20178,\n         \"##鏈\": 20179,\n         \"##鏖\": 20180,\n         \"##鏗\": 20181,\n         \"##鏘\": 20182,\n         \"##鏞\": 20183,\n         \"##鏟\": 20184,\n         \"##鏡\": 20185,\n         \"##鏢\": 20186,\n         \"##鏤\": 20187,\n         \"##鏽\": 20188,\n         \"##鐘\": 20189,\n         \"##鐮\": 20190,\n         \"##鐲\": 20191,\n         \"##鐳\": 20192,\n         \"##鐵\": 20193,\n         \"##鐸\": 20194,\n         \"##鐺\": 20195,\n         \"##鑄\": 20196,\n         \"##鑊\": 20197,\n         \"##鑑\": 20198,\n         \"##鑒\": 20199,\n         \"##鑣\": 20200,\n         \"##鑫\": 20201,\n         \"##鑰\": 20202,\n         \"##鑲\": 20203,\n         \"##鑼\": 20204,\n         \"##鑽\": 20205,\n         \"##鑾\": 20206,\n         \"##鑿\": 20207,\n         \"##针\": 20208,\n         \"##钉\": 20209,\n         \"##钊\": 20210,\n         \"##钎\": 20211,\n         \"##钏\": 20212,\n         \"##钒\": 20213,\n         \"##钓\": 20214,\n         \"##钗\": 20215,\n         \"##钙\": 20216,\n         \"##钛\": 20217,\n         \"##钜\": 20218,\n         \"##钝\": 20219,\n         \"##钞\": 20220,\n         \"##钟\": 20221,\n         \"##钠\": 20222,\n         \"##钡\": 20223,\n         \"##钢\": 20224,\n         \"##钣\": 20225,\n         \"##钤\": 20226,\n         \"##钥\": 20227,\n         \"##钦\": 20228,\n         \"##钧\": 20229,\n         \"##钨\": 20230,\n         \"##钩\": 20231,\n         \"##钮\": 20232,\n         \"##钯\": 20233,\n         \"##钰\": 20234,\n         \"##钱\": 20235,\n         \"##钳\": 20236,\n         \"##钴\": 20237,\n         \"##钵\": 20238,\n         \"##钺\": 20239,\n         \"##钻\": 20240,\n         \"##钼\": 20241,\n         \"##钾\": 20242,\n         \"##钿\": 20243,\n         \"##铀\": 20244,\n         \"##铁\": 20245,\n         \"##铂\": 20246,\n         \"##铃\": 20247,\n         \"##铄\": 20248,\n         \"##铅\": 20249,\n         \"##铆\": 20250,\n         \"##铉\": 20251,\n         \"##铎\": 20252,\n         \"##铐\": 20253,\n         \"##铛\": 20254,\n         \"##铜\": 20255,\n         \"##铝\": 20256,\n         \"##铠\": 20257,\n         \"##铡\": 20258,\n         \"##铢\": 20259,\n         \"##铣\": 20260,\n         \"##铤\": 20261,\n         \"##铨\": 20262,\n         \"##铩\": 20263,\n         \"##铬\": 20264,\n         \"##铭\": 20265,\n         \"##铮\": 20266,\n         \"##铰\": 20267,\n         \"##铲\": 20268,\n         \"##铵\": 20269,\n         \"##银\": 20270,\n         \"##铸\": 20271,\n         \"##铺\": 20272,\n         \"##链\": 20273,\n         \"##铿\": 20274,\n         \"##销\": 20275,\n         \"##锁\": 20276,\n         \"##锂\": 20277,\n         \"##锄\": 20278,\n         \"##锅\": 20279,\n         \"##锆\": 20280,\n         \"##锈\": 20281,\n         \"##锉\": 20282,\n         \"##锋\": 20283,\n         \"##锌\": 20284,\n         \"##锏\": 20285,\n         \"##锐\": 20286,\n         \"##锑\": 20287,\n         \"##错\": 20288,\n         \"##锚\": 20289,\n         \"##锟\": 20290,\n         \"##锡\": 20291,\n         \"##锢\": 20292,\n         \"##锣\": 20293,\n         \"##锤\": 20294,\n         \"##锥\": 20295,\n         \"##锦\": 20296,\n         \"##锭\": 20297,\n         \"##键\": 20298,\n         \"##锯\": 20299,\n         \"##锰\": 20300,\n         \"##锲\": 20301,\n         \"##锵\": 20302,\n         \"##锹\": 20303,\n         \"##锺\": 20304,\n         \"##锻\": 20305,\n         \"##镀\": 20306,\n         \"##镁\": 20307,\n         \"##镂\": 20308,\n         \"##镇\": 20309,\n         \"##镉\": 20310,\n         \"##镌\": 20311,\n         \"##镍\": 20312,\n         \"##镐\": 20313,\n         \"##镑\": 20314,\n         \"##镕\": 20315,\n         \"##镖\": 20316,\n         \"##镗\": 20317,\n         \"##镛\": 20318,\n         \"##镜\": 20319,\n         \"##镣\": 20320,\n         \"##镭\": 20321,\n         \"##镯\": 20322,\n         \"##镰\": 20323,\n         \"##镳\": 20324,\n         \"##镶\": 20325,\n         \"##長\": 20326,\n         \"##长\": 20327,\n         \"##門\": 20328,\n         \"##閃\": 20329,\n         \"##閉\": 20330,\n         \"##開\": 20331,\n         \"##閎\": 20332,\n         \"##閏\": 20333,\n         \"##閑\": 20334,\n         \"##閒\": 20335,\n         \"##間\": 20336,\n         \"##閔\": 20337,\n         \"##閘\": 20338,\n         \"##閡\": 20339,\n         \"##関\": 20340,\n         \"##閣\": 20341,\n         \"##閥\": 20342,\n         \"##閨\": 20343,\n         \"##閩\": 20344,\n         \"##閱\": 20345,\n         \"##閲\": 20346,\n         \"##閹\": 20347,\n         \"##閻\": 20348,\n         \"##閾\": 20349,\n         \"##闆\": 20350,\n         \"##闇\": 20351,\n         \"##闊\": 20352,\n         \"##闌\": 20353,\n         \"##闍\": 20354,\n         \"##闔\": 20355,\n         \"##闕\": 20356,\n         \"##闖\": 20357,\n         \"##闘\": 20358,\n         \"##關\": 20359,\n         \"##闡\": 20360,\n         \"##闢\": 20361,\n         \"##门\": 20362,\n         \"##闪\": 20363,\n         \"##闫\": 20364,\n         \"##闭\": 20365,\n         \"##问\": 20366,\n         \"##闯\": 20367,\n         \"##闰\": 20368,\n         \"##闲\": 20369,\n         \"##间\": 20370,\n         \"##闵\": 20371,\n         \"##闷\": 20372,\n         \"##闸\": 20373,\n         \"##闹\": 20374,\n         \"##闺\": 20375,\n         \"##闻\": 20376,\n         \"##闽\": 20377,\n         \"##闾\": 20378,\n         \"##阀\": 20379,\n         \"##阁\": 20380,\n         \"##阂\": 20381,\n         \"##阅\": 20382,\n         \"##阆\": 20383,\n         \"##阇\": 20384,\n         \"##阈\": 20385,\n         \"##阉\": 20386,\n         \"##阎\": 20387,\n         \"##阐\": 20388,\n         \"##阑\": 20389,\n         \"##阔\": 20390,\n         \"##阕\": 20391,\n         \"##阖\": 20392,\n         \"##阙\": 20393,\n         \"##阚\": 20394,\n         \"##阜\": 20395,\n         \"##队\": 20396,\n         \"##阡\": 20397,\n         \"##阪\": 20398,\n         \"##阮\": 20399,\n         \"##阱\": 20400,\n         \"##防\": 20401,\n         \"##阳\": 20402,\n         \"##阴\": 20403,\n         \"##阵\": 20404,\n         \"##阶\": 20405,\n         \"##阻\": 20406,\n         \"##阿\": 20407,\n         \"##陀\": 20408,\n         \"##陂\": 20409,\n         \"##附\": 20410,\n         \"##际\": 20411,\n         \"##陆\": 20412,\n         \"##陇\": 20413,\n         \"##陈\": 20414,\n         \"##陋\": 20415,\n         \"##陌\": 20416,\n         \"##降\": 20417,\n         \"##限\": 20418,\n         \"##陕\": 20419,\n         \"##陛\": 20420,\n         \"##陝\": 20421,\n         \"##陞\": 20422,\n         \"##陟\": 20423,\n         \"##陡\": 20424,\n         \"##院\": 20425,\n         \"##陣\": 20426,\n         \"##除\": 20427,\n         \"##陨\": 20428,\n         \"##险\": 20429,\n         \"##陪\": 20430,\n         \"##陰\": 20431,\n         \"##陲\": 20432,\n         \"##陳\": 20433,\n         \"##陵\": 20434,\n         \"##陶\": 20435,\n         \"##陷\": 20436,\n         \"##陸\": 20437,\n         \"##険\": 20438,\n         \"##陽\": 20439,\n         \"##隅\": 20440,\n         \"##隆\": 20441,\n         \"##隈\": 20442,\n         \"##隊\": 20443,\n         \"##隋\": 20444,\n         \"##隍\": 20445,\n         \"##階\": 20446,\n         \"##随\": 20447,\n         \"##隐\": 20448,\n         \"##隔\": 20449,\n         \"##隕\": 20450,\n         \"##隘\": 20451,\n         \"##隙\": 20452,\n         \"##際\": 20453,\n         \"##障\": 20454,\n         \"##隠\": 20455,\n         \"##隣\": 20456,\n         \"##隧\": 20457,\n         \"##隨\": 20458,\n         \"##險\": 20459,\n         \"##隱\": 20460,\n         \"##隴\": 20461,\n         \"##隶\": 20462,\n         \"##隸\": 20463,\n         \"##隻\": 20464,\n         \"##隼\": 20465,\n         \"##隽\": 20466,\n         \"##难\": 20467,\n         \"##雀\": 20468,\n         \"##雁\": 20469,\n         \"##雄\": 20470,\n         \"##雅\": 20471,\n         \"##集\": 20472,\n         \"##雇\": 20473,\n         \"##雉\": 20474,\n         \"##雋\": 20475,\n         \"##雌\": 20476,\n         \"##雍\": 20477,\n         \"##雎\": 20478,\n         \"##雏\": 20479,\n         \"##雑\": 20480,\n         \"##雒\": 20481,\n         \"##雕\": 20482,\n         \"##雖\": 20483,\n         \"##雙\": 20484,\n         \"##雛\": 20485,\n         \"##雜\": 20486,\n         \"##雞\": 20487,\n         \"##離\": 20488,\n         \"##難\": 20489,\n         \"##雨\": 20490,\n         \"##雪\": 20491,\n         \"##雯\": 20492,\n         \"##雰\": 20493,\n         \"##雲\": 20494,\n         \"##雳\": 20495,\n         \"##零\": 20496,\n         \"##雷\": 20497,\n         \"##雹\": 20498,\n         \"##電\": 20499,\n         \"##雾\": 20500,\n         \"##需\": 20501,\n         \"##霁\": 20502,\n         \"##霄\": 20503,\n         \"##霆\": 20504,\n         \"##震\": 20505,\n         \"##霈\": 20506,\n         \"##霉\": 20507,\n         \"##霊\": 20508,\n         \"##霍\": 20509,\n         \"##霎\": 20510,\n         \"##霏\": 20511,\n         \"##霑\": 20512,\n         \"##霓\": 20513,\n         \"##霖\": 20514,\n         \"##霜\": 20515,\n         \"##霞\": 20516,\n         \"##霧\": 20517,\n         \"##霭\": 20518,\n         \"##霰\": 20519,\n         \"##露\": 20520,\n         \"##霸\": 20521,\n         \"##霹\": 20522,\n         \"##霽\": 20523,\n         \"##霾\": 20524,\n         \"##靂\": 20525,\n         \"##靄\": 20526,\n         \"##靈\": 20527,\n         \"##青\": 20528,\n         \"##靓\": 20529,\n         \"##靖\": 20530,\n         \"##静\": 20531,\n         \"##靚\": 20532,\n         \"##靛\": 20533,\n         \"##靜\": 20534,\n         \"##非\": 20535,\n         \"##靠\": 20536,\n         \"##靡\": 20537,\n         \"##面\": 20538,\n         \"##靥\": 20539,\n         \"##靦\": 20540,\n         \"##革\": 20541,\n         \"##靳\": 20542,\n         \"##靴\": 20543,\n         \"##靶\": 20544,\n         \"##靼\": 20545,\n         \"##鞅\": 20546,\n         \"##鞋\": 20547,\n         \"##鞍\": 20548,\n         \"##鞏\": 20549,\n         \"##鞑\": 20550,\n         \"##鞘\": 20551,\n         \"##鞠\": 20552,\n         \"##鞣\": 20553,\n         \"##鞦\": 20554,\n         \"##鞭\": 20555,\n         \"##韆\": 20556,\n         \"##韋\": 20557,\n         \"##韌\": 20558,\n         \"##韓\": 20559,\n         \"##韜\": 20560,\n         \"##韦\": 20561,\n         \"##韧\": 20562,\n         \"##韩\": 20563,\n         \"##韬\": 20564,\n         \"##韭\": 20565,\n         \"##音\": 20566,\n         \"##韵\": 20567,\n         \"##韶\": 20568,\n         \"##韻\": 20569,\n         \"##響\": 20570,\n         \"##頁\": 20571,\n         \"##頂\": 20572,\n         \"##頃\": 20573,\n         \"##項\": 20574,\n         \"##順\": 20575,\n         \"##須\": 20576,\n         \"##頌\": 20577,\n         \"##預\": 20578,\n         \"##頑\": 20579,\n         \"##頒\": 20580,\n         \"##頓\": 20581,\n         \"##頗\": 20582,\n         \"##領\": 20583,\n         \"##頜\": 20584,\n         \"##頡\": 20585,\n         \"##頤\": 20586,\n         \"##頫\": 20587,\n         \"##頭\": 20588,\n         \"##頰\": 20589,\n         \"##頷\": 20590,\n         \"##頸\": 20591,\n         \"##頹\": 20592,\n         \"##頻\": 20593,\n         \"##頼\": 20594,\n         \"##顆\": 20595,\n         \"##題\": 20596,\n         \"##額\": 20597,\n         \"##顎\": 20598,\n         \"##顏\": 20599,\n         \"##顔\": 20600,\n         \"##願\": 20601,\n         \"##顛\": 20602,\n         \"##類\": 20603,\n         \"##顧\": 20604,\n         \"##顫\": 20605,\n         \"##顯\": 20606,\n         \"##顱\": 20607,\n         \"##顴\": 20608,\n         \"##页\": 20609,\n         \"##顶\": 20610,\n         \"##顷\": 20611,\n         \"##项\": 20612,\n         \"##顺\": 20613,\n         \"##须\": 20614,\n         \"##顼\": 20615,\n         \"##顽\": 20616,\n         \"##顾\": 20617,\n         \"##顿\": 20618,\n         \"##颁\": 20619,\n         \"##颂\": 20620,\n         \"##预\": 20621,\n         \"##颅\": 20622,\n         \"##领\": 20623,\n         \"##颇\": 20624,\n         \"##颈\": 20625,\n         \"##颉\": 20626,\n         \"##颊\": 20627,\n         \"##颌\": 20628,\n         \"##颍\": 20629,\n         \"##颐\": 20630,\n         \"##频\": 20631,\n         \"##颓\": 20632,\n         \"##颔\": 20633,\n         \"##颖\": 20634,\n         \"##颗\": 20635,\n         \"##题\": 20636,\n         \"##颚\": 20637,\n         \"##颛\": 20638,\n         \"##颜\": 20639,\n         \"##额\": 20640,\n         \"##颞\": 20641,\n         \"##颠\": 20642,\n         \"##颡\": 20643,\n         \"##颢\": 20644,\n         \"##颤\": 20645,\n         \"##颦\": 20646,\n         \"##颧\": 20647,\n         \"##風\": 20648,\n         \"##颯\": 20649,\n         \"##颱\": 20650,\n         \"##颳\": 20651,\n         \"##颶\": 20652,\n         \"##颼\": 20653,\n         \"##飄\": 20654,\n         \"##飆\": 20655,\n         \"##风\": 20656,\n         \"##飒\": 20657,\n         \"##飓\": 20658,\n         \"##飕\": 20659,\n         \"##飘\": 20660,\n         \"##飙\": 20661,\n         \"##飚\": 20662,\n         \"##飛\": 20663,\n         \"##飞\": 20664,\n         \"##食\": 20665,\n         \"##飢\": 20666,\n         \"##飨\": 20667,\n         \"##飩\": 20668,\n         \"##飪\": 20669,\n         \"##飯\": 20670,\n         \"##飲\": 20671,\n         \"##飼\": 20672,\n         \"##飽\": 20673,\n         \"##飾\": 20674,\n         \"##餃\": 20675,\n         \"##餅\": 20676,\n         \"##餉\": 20677,\n         \"##養\": 20678,\n         \"##餌\": 20679,\n         \"##餐\": 20680,\n         \"##餒\": 20681,\n         \"##餓\": 20682,\n         \"##餘\": 20683,\n         \"##餚\": 20684,\n         \"##餛\": 20685,\n         \"##餞\": 20686,\n         \"##餡\": 20687,\n         \"##館\": 20688,\n         \"##餮\": 20689,\n         \"##餵\": 20690,\n         \"##餾\": 20691,\n         \"##饅\": 20692,\n         \"##饈\": 20693,\n         \"##饋\": 20694,\n         \"##饌\": 20695,\n         \"##饍\": 20696,\n         \"##饑\": 20697,\n         \"##饒\": 20698,\n         \"##饕\": 20699,\n         \"##饗\": 20700,\n         \"##饞\": 20701,\n         \"##饥\": 20702,\n         \"##饨\": 20703,\n         \"##饪\": 20704,\n         \"##饬\": 20705,\n         \"##饭\": 20706,\n         \"##饮\": 20707,\n         \"##饯\": 20708,\n         \"##饰\": 20709,\n         \"##饱\": 20710,\n         \"##饲\": 20711,\n         \"##饴\": 20712,\n         \"##饵\": 20713,\n         \"##饶\": 20714,\n         \"##饷\": 20715,\n         \"##饺\": 20716,\n         \"##饼\": 20717,\n         \"##饽\": 20718,\n         \"##饿\": 20719,\n         \"##馀\": 20720,\n         \"##馁\": 20721,\n         \"##馄\": 20722,\n         \"##馅\": 20723,\n         \"##馆\": 20724,\n         \"##馈\": 20725,\n         \"##馋\": 20726,\n         \"##馍\": 20727,\n         \"##馏\": 20728,\n         \"##馒\": 20729,\n         \"##馔\": 20730,\n         \"##首\": 20731,\n         \"##馗\": 20732,\n         \"##香\": 20733,\n         \"##馥\": 20734,\n         \"##馨\": 20735,\n         \"##馬\": 20736,\n         \"##馭\": 20737,\n         \"##馮\": 20738,\n         \"##馳\": 20739,\n         \"##馴\": 20740,\n         \"##駁\": 20741,\n         \"##駄\": 20742,\n         \"##駅\": 20743,\n         \"##駆\": 20744,\n         \"##駐\": 20745,\n         \"##駒\": 20746,\n         \"##駕\": 20747,\n         \"##駛\": 20748,\n         \"##駝\": 20749,\n         \"##駭\": 20750,\n         \"##駱\": 20751,\n         \"##駿\": 20752,\n         \"##騁\": 20753,\n         \"##騎\": 20754,\n         \"##騏\": 20755,\n         \"##験\": 20756,\n         \"##騙\": 20757,\n         \"##騨\": 20758,\n         \"##騰\": 20759,\n         \"##騷\": 20760,\n         \"##驀\": 20761,\n         \"##驅\": 20762,\n         \"##驊\": 20763,\n         \"##驍\": 20764,\n         \"##驒\": 20765,\n         \"##驕\": 20766,\n         \"##驗\": 20767,\n         \"##驚\": 20768,\n         \"##驛\": 20769,\n         \"##驟\": 20770,\n         \"##驢\": 20771,\n         \"##驥\": 20772,\n         \"##马\": 20773,\n         \"##驭\": 20774,\n         \"##驮\": 20775,\n         \"##驯\": 20776,\n         \"##驰\": 20777,\n         \"##驱\": 20778,\n         \"##驳\": 20779,\n         \"##驴\": 20780,\n         \"##驶\": 20781,\n         \"##驷\": 20782,\n         \"##驸\": 20783,\n         \"##驹\": 20784,\n         \"##驻\": 20785,\n         \"##驼\": 20786,\n         \"##驾\": 20787,\n         \"##驿\": 20788,\n         \"##骁\": 20789,\n         \"##骂\": 20790,\n         \"##骄\": 20791,\n         \"##骅\": 20792,\n         \"##骆\": 20793,\n         \"##骇\": 20794,\n         \"##骈\": 20795,\n         \"##骊\": 20796,\n         \"##骋\": 20797,\n         \"##验\": 20798,\n         \"##骏\": 20799,\n         \"##骐\": 20800,\n         \"##骑\": 20801,\n         \"##骗\": 20802,\n         \"##骚\": 20803,\n         \"##骛\": 20804,\n         \"##骜\": 20805,\n         \"##骞\": 20806,\n         \"##骠\": 20807,\n         \"##骡\": 20808,\n         \"##骤\": 20809,\n         \"##骥\": 20810,\n         \"##骧\": 20811,\n         \"##骨\": 20812,\n         \"##骯\": 20813,\n         \"##骰\": 20814,\n         \"##骶\": 20815,\n         \"##骷\": 20816,\n         \"##骸\": 20817,\n         \"##骼\": 20818,\n         \"##髂\": 20819,\n         \"##髅\": 20820,\n         \"##髋\": 20821,\n         \"##髏\": 20822,\n         \"##髒\": 20823,\n         \"##髓\": 20824,\n         \"##體\": 20825,\n         \"##髖\": 20826,\n         \"##高\": 20827,\n         \"##髦\": 20828,\n         \"##髪\": 20829,\n         \"##髮\": 20830,\n         \"##髯\": 20831,\n         \"##髻\": 20832,\n         \"##鬃\": 20833,\n         \"##鬆\": 20834,\n         \"##鬍\": 20835,\n         \"##鬓\": 20836,\n         \"##鬚\": 20837,\n         \"##鬟\": 20838,\n         \"##鬢\": 20839,\n         \"##鬣\": 20840,\n         \"##鬥\": 20841,\n         \"##鬧\": 20842,\n         \"##鬱\": 20843,\n         \"##鬼\": 20844,\n         \"##魁\": 20845,\n         \"##魂\": 20846,\n         \"##魄\": 20847,\n         \"##魅\": 20848,\n         \"##魇\": 20849,\n         \"##魍\": 20850,\n         \"##魏\": 20851,\n         \"##魔\": 20852,\n         \"##魘\": 20853,\n         \"##魚\": 20854,\n         \"##魯\": 20855,\n         \"##魷\": 20856,\n         \"##鮑\": 20857,\n         \"##鮨\": 20858,\n         \"##鮪\": 20859,\n         \"##鮭\": 20860,\n         \"##鮮\": 20861,\n         \"##鯉\": 20862,\n         \"##鯊\": 20863,\n         \"##鯖\": 20864,\n         \"##鯛\": 20865,\n         \"##鯨\": 20866,\n         \"##鯰\": 20867,\n         \"##鯽\": 20868,\n         \"##鰍\": 20869,\n         \"##鰓\": 20870,\n         \"##鰭\": 20871,\n         \"##鰲\": 20872,\n         \"##鰻\": 20873,\n         \"##鰾\": 20874,\n         \"##鱈\": 20875,\n         \"##鱉\": 20876,\n         \"##鱔\": 20877,\n         \"##鱗\": 20878,\n         \"##鱷\": 20879,\n         \"##鱸\": 20880,\n         \"##鱼\": 20881,\n         \"##鱿\": 20882,\n         \"##鲁\": 20883,\n         \"##鲈\": 20884,\n         \"##鲍\": 20885,\n         \"##鲑\": 20886,\n         \"##鲛\": 20887,\n         \"##鲜\": 20888,\n         \"##鲟\": 20889,\n         \"##鲢\": 20890,\n         \"##鲤\": 20891,\n         \"##鲨\": 20892,\n         \"##鲫\": 20893,\n         \"##鲱\": 20894,\n         \"##鲲\": 20895,\n         \"##鲶\": 20896,\n         \"##鲷\": 20897,\n         \"##鲸\": 20898,\n         \"##鳃\": 20899,\n         \"##鳄\": 20900,\n         \"##鳅\": 20901,\n         \"##鳌\": 20902,\n         \"##鳍\": 20903,\n         \"##鳕\": 20904,\n         \"##鳖\": 20905,\n         \"##鳗\": 20906,\n         \"##鳝\": 20907,\n         \"##鳞\": 20908,\n         \"##鳥\": 20909,\n         \"##鳩\": 20910,\n         \"##鳳\": 20911,\n         \"##鳴\": 20912,\n         \"##鳶\": 20913,\n         \"##鴉\": 20914,\n         \"##鴕\": 20915,\n         \"##鴛\": 20916,\n         \"##鴦\": 20917,\n         \"##鴨\": 20918,\n         \"##鴻\": 20919,\n         \"##鴿\": 20920,\n         \"##鵑\": 20921,\n         \"##鵜\": 20922,\n         \"##鵝\": 20923,\n         \"##鵡\": 20924,\n         \"##鵬\": 20925,\n         \"##鵰\": 20926,\n         \"##鵲\": 20927,\n         \"##鶘\": 20928,\n         \"##鶩\": 20929,\n         \"##鶯\": 20930,\n         \"##鶴\": 20931,\n         \"##鷗\": 20932,\n         \"##鷲\": 20933,\n         \"##鷹\": 20934,\n         \"##鷺\": 20935,\n         \"##鸚\": 20936,\n         \"##鸞\": 20937,\n         \"##鸟\": 20938,\n         \"##鸠\": 20939,\n         \"##鸡\": 20940,\n         \"##鸢\": 20941,\n         \"##鸣\": 20942,\n         \"##鸥\": 20943,\n         \"##鸦\": 20944,\n         \"##鸨\": 20945,\n         \"##鸪\": 20946,\n         \"##鸭\": 20947,\n         \"##鸯\": 20948,\n         \"##鸳\": 20949,\n         \"##鸵\": 20950,\n         \"##鸽\": 20951,\n         \"##鸾\": 20952,\n         \"##鸿\": 20953,\n         \"##鹂\": 20954,\n         \"##鹃\": 20955,\n         \"##鹄\": 20956,\n         \"##鹅\": 20957,\n         \"##鹈\": 20958,\n         \"##鹉\": 20959,\n         \"##鹊\": 20960,\n         \"##鹌\": 20961,\n         \"##鹏\": 20962,\n         \"##鹑\": 20963,\n         \"##鹕\": 20964,\n         \"##鹘\": 20965,\n         \"##鹜\": 20966,\n         \"##鹞\": 20967,\n         \"##鹤\": 20968,\n         \"##鹦\": 20969,\n         \"##鹧\": 20970,\n         \"##鹫\": 20971,\n         \"##鹭\": 20972,\n         \"##鹰\": 20973,\n         \"##鹳\": 20974,\n         \"##鹵\": 20975,\n         \"##鹹\": 20976,\n         \"##鹼\": 20977,\n         \"##鹽\": 20978,\n         \"##鹿\": 20979,\n         \"##麂\": 20980,\n         \"##麋\": 20981,\n         \"##麒\": 20982,\n         \"##麓\": 20983,\n         \"##麗\": 20984,\n         \"##麝\": 20985,\n         \"##麟\": 20986,\n         \"##麥\": 20987,\n         \"##麦\": 20988,\n         \"##麩\": 20989,\n         \"##麴\": 20990,\n         \"##麵\": 20991,\n         \"##麸\": 20992,\n         \"##麺\": 20993,\n         \"##麻\": 20994,\n         \"##麼\": 20995,\n         \"##麽\": 20996,\n         \"##麾\": 20997,\n         \"##黃\": 20998,\n         \"##黄\": 20999,\n         \"##黍\": 21000,\n         \"##黎\": 21001,\n         \"##黏\": 21002,\n         \"##黑\": 21003,\n         \"##黒\": 21004,\n         \"##黔\": 21005,\n         \"##默\": 21006,\n         \"##黛\": 21007,\n         \"##黜\": 21008,\n         \"##黝\": 21009,\n         \"##點\": 21010,\n         \"##黠\": 21011,\n         \"##黨\": 21012,\n         \"##黯\": 21013,\n         \"##黴\": 21014,\n         \"##鼋\": 21015,\n         \"##鼎\": 21016,\n         \"##鼐\": 21017,\n         \"##鼓\": 21018,\n         \"##鼠\": 21019,\n         \"##鼬\": 21020,\n         \"##鼹\": 21021,\n         \"##鼻\": 21022,\n         \"##鼾\": 21023,\n         \"##齁\": 21024,\n         \"##齊\": 21025,\n         \"##齋\": 21026,\n         \"##齐\": 21027,\n         \"##齒\": 21028,\n         \"##齡\": 21029,\n         \"##齢\": 21030,\n         \"##齣\": 21031,\n         \"##齦\": 21032,\n         \"##齿\": 21033,\n         \"##龄\": 21034,\n         \"##龅\": 21035,\n         \"##龈\": 21036,\n         \"##龊\": 21037,\n         \"##龋\": 21038,\n         \"##龌\": 21039,\n         \"##龍\": 21040,\n         \"##龐\": 21041,\n         \"##龔\": 21042,\n         \"##龕\": 21043,\n         \"##龙\": 21044,\n         \"##龚\": 21045,\n         \"##龛\": 21046,\n         \"##龜\": 21047,\n         \"##龟\": 21048,\n         \"##👍\": 21124,\n         \"##🔥\": 21125,\n         \"##😂\": 21126,\n         \"##😎\": 21127,\n         \"##︰\": 21049,\n         \"##︱\": 21050,\n         \"##︶\": 21051,\n         \"##︿\": 21052,\n         \"##﹁\": 21053,\n         \"##﹂\": 21054,\n         \"##﹍\": 21055,\n         \"##﹏\": 21056,\n         \"##﹐\": 21057,\n         \"##﹑\": 21058,\n         \"##﹒\": 21059,\n         \"##﹔\": 21060,\n         \"##﹕\": 21061,\n         \"##﹖\": 21062,\n         \"##﹗\": 21063,\n         \"##﹙\": 21064,\n         \"##﹚\": 21065,\n         \"##﹝\": 21066,\n         \"##﹞\": 21067,\n         \"##﹡\": 21068,\n         \"##﹣\": 21069,\n         \"##！\": 21070,\n         \"##＂\": 21071,\n         \"##＃\": 21072,\n         \"##＄\": 21073,\n         \"##％\": 21074,\n         \"##＆\": 21075,\n         \"##＇\": 21076,\n         \"##（\": 21077,\n         \"##）\": 21078,\n         \"##＊\": 21079,\n         \"##＋\": 11267,\n         \"##，\": 21080,\n         \"##－\": 21081,\n         \"##．\": 21082,\n         \"##／\": 21083,\n         \"##０\": 8569,\n         \"##００\": 9885,\n         \"##１\": 8939,\n         \"##１０\": 13117,\n         \"##２\": 8929,\n         \"##３\": 9089,\n         \"##４\": 9484,\n         \"##５\": 8901,\n         \"##６\": 9234,\n         \"##７\": 9163,\n         \"##８\": 9414,\n         \"##９\": 9174,\n         \"##：\": 21084,\n         \"##；\": 21085,\n         \"##＜\": 21086,\n         \"##＝\": 12092,\n         \"##＞\": 11628,\n         \"##？\": 21087,\n         \"##＠\": 21088,\n         \"##［\": 21089,\n         \"##＼\": 21090,\n         \"##］\": 21091,\n         \"##＾\": 21092,\n         \"##＿\": 21093,\n         \"##｀\": 21094,\n         \"##ａ\": 10094,\n         \"##ｂ\": 12641,\n         \"##ｃ\": 10675,\n         \"##ｄ\": 9835,\n         \"##ｅ\": 10726,\n         \"##ｆ\": 21095,\n         \"##ｇ\": 11197,\n         \"##ｈ\": 21096,\n         \"##ｉ\": 12381,\n         \"##ｊ\": 21097,\n         \"##ｋ\": 10981,\n         \"##ｌ\": 12035,\n         \"##ｍ\": 9295,\n         \"##ｎ\": 11977,\n         \"##ｏ\": 9940,\n         \"##ｐ\": 10748,\n         \"##ｑ\": 12826,\n         \"##ｒ\": 11586,\n         \"##ｓ\": 10721,\n         \"##ｔ\": 11766,\n         \"##ｕ\": 21098,\n         \"##ｖ\": 12420,\n         \"##ｗ\": 21099,\n         \"##ｘ\": 13047,\n         \"##ｙ\": 12166,\n         \"##ｚ\": 21100,\n         \"##｛\": 21101,\n         \"##｜\": 9815,\n         \"##｝\": 21102,\n         \"##～\": 8694,\n         \"##～1\": 12427,\n         \"##～10\": 10953,\n         \"##～17\": 12405,\n         \"##～20\": 12078,\n         \"##～3\": 12617,\n         \"##～5\": 11864,\n         \"##～6\": 10709,\n         \"##～7\": 12681,\n         \"##～8\": 12270,\n         \"##｡\": 21103,\n         \"##｢\": 21104,\n         \"##｣\": 21105,\n         \"##､\": 21106,\n         \"##･\": 21107,\n         \"##ｯ\": 21108,\n         \"##ｰ\": 21109,\n         \"##ｲ\": 21110,\n         \"##ｸ\": 21111,\n         \"##ｼ\": 21112,\n         \"##ｽ\": 21113,\n         \"##ﾄ\": 21114,\n         \"##ﾉ\": 21115,\n         \"##ﾌ\": 21116,\n         \"##ﾗ\": 21117,\n         \"##ﾙ\": 21118,\n         \"##ﾝ\": 21119,\n         \"##ﾞ\": 21120,\n         \"##ﾟ\": 21121,\n         \"##￣\": 21122,\n         \"##￥\": 21123,\n         \"$\": 109,\n         \"%\": 110,\n         \"&\": 111,\n         \"'\": 112,\n         \"(\": 113,\n         \")\": 114,\n         \"*\": 115,\n         \"+\": 116,\n         \",\": 117,\n         \"-\": 118,\n         \".\": 119,\n         \"...\": 8106,\n         \"/\": 120,\n         \"00\": 8136,\n         \"000\": 8241,\n         \"001\": 9263,\n         \"002\": 11204,\n         \"0020\": 8746,\n         \"003\": 11400,\n         \"004\": 12329,\n         \"005\": 11168,\n         \"006\": 12526,\n         \"007\": 9722,\n         \"008\": 12210,\n         \"009\": 12292,\n         \"00kg\": 10501,\n         \"00z\": 9337,\n         \"00㎡\": 9506,\n         \"00㎡1\": 12411,\n         \"01\": 8146,\n         \"010\": 9138,\n         \"011\": 12603,\n         \"012\": 11496,\n         \"013\": 13034,\n         \"015\": 13220,\n         \"019\": 13146,\n         \"02\": 8150,\n         \"020\": 9147,\n         \"021\": 10385,\n         \"022\": 12522,\n         \"023\": 13244,\n         \"024\": 13002,\n         \"025\": 11900,\n         \"027\": 12849,\n         \"028\": 11842,\n         \"029\": 12801,\n         \"03\": 8140,\n         \"04\": 8147,\n         \"05\": 8137,\n         \"050\": 11972,\n         \"055\": 9659,\n         \"06\": 8116,\n         \"061\": 11757,\n         \"07\": 8155,\n         \"073\": 13021,\n         \"074\": 12780,\n         \"075\": 12660,\n         \"0755\": 10960,\n         \"08\": 8142,\n         \"080\": 12365,\n         \"0800\": 10200,\n         \"09\": 8141,\n         \"0fork\": 8453,\n         \"0l\": 10973,\n         \"0mm\": 11368,\n         \"0t\": 10691,\n         \"100g\": 10606,\n         \"100km\": 10915,\n         \"100m\": 13037,\n         \"100ml\": 11282,\n         \"101vip\": 11428,\n         \"1080p\": 9237,\n         \"10g\": 9890,\n         \"10℃\": 9115,\n         \"12345678910\": 9363,\n         \"128gb\": 12336,\n         \"14k\": 10612,\n         \"15g\": 11790,\n         \"16g\": 12823,\n         \"16gb\": 11340,\n         \"17life\": 9091,\n         \"18k\": 10323,\n         \"1a\": 11942,\n         \"1b\": 12217,\n         \"1g\": 10719,\n         \"1gb\": 12206,\n         \"1m\": 12103,\n         \"1mdb\": 12757,\n         \"1tb\": 12430,\n         \"1v\": 12819,\n         \"1～2\": 10776,\n         \"200mm\": 13166,\n         \"20cm\": 13309,\n         \"20g\": 12793,\n         \"20mm\": 12714,\n         \"20℃\": 12926,\n         \"24h\": 11450,\n         \"2a\": 11646,\n         \"2b\": 10740,\n         \"2cm\": 12988,\n         \"2d\": 9648,\n         \"2g\": 9422,\n         \"2gb\": 11380,\n         \"2k\": 10739,\n         \"2l\": 13191,\n         \"2m\": 10725,\n         \"2mm\": 12287,\n         \"2～3\": 10282,\n         \"309b\": 9799,\n         \"30cm\": 12850,\n         \"30g\": 12008,\n         \"30ml\": 11234,\n         \"32g\": 13181,\n         \"32gb\": 11155,\n         \"34e\": 11614,\n         \"360°\": 11739,\n         \"3a\": 10667,\n         \"3c\": 8344,\n         \"3ce\": 10183,\n         \"3d\": 8219,\n         \"3ds\": 11755,\n         \"3g\": 8456,\n         \"3kg\": 9619,\n         \"3m\": 9192,\n         \"3mm\": 12064,\n         \"3p\": 12108,\n         \"3s\": 13247,\n         \"3t\": 12338,\n         \"3～4\": 12907,\n         \"3～5\": 12222,\n         \"45㎡2\": 12039,\n         \"4a\": 10660,\n         \"4d\": 10571,\n         \"4g\": 8340,\n         \"4gb\": 10426,\n         \"4k\": 8574,\n         \"4l\": 13297,\n         \"4m\": 9695,\n         \"4s\": 8830,\n         \"500g\": 12623,\n         \"500ml\": 13023,\n         \"50cm\": 11721,\n         \"50g\": 12233,\n         \"50ml\": 11538,\n         \"50mm\": 11774,\n         \"52kb\": 12811,\n         \"52sykb\": 12846,\n         \"5a\": 10594,\n         \"5c\": 13025,\n         \"5cm\": 9388,\n         \"5d\": 10406,\n         \"5g\": 8711,\n         \"5k\": 12172,\n         \"5kg\": 13183,\n         \"5l\": 9892,\n         \"5m\": 11483,\n         \"5mm\": 9394,\n         \"5s\": 9376,\n         \"5t\": 12204,\n         \"5v\": 10965,\n         \"5℃\": 9687,\n         \"64gb\": 11432,\n         \"64㎡\": 13011,\n         \"6a\": 11692,\n         \"6g\": 13147,\n         \"6gb\": 12324,\n         \"6l\": 12061,\n         \"6m\": 12485,\n         \"6p\": 12786,\n         \"6s\": 9590,\n         \"720p\": 9591,\n         \"7headlines\": 11180,\n         \"7x24\": 12486,\n         \"8cm\": 12237,\n         \"8g\": 10019,\n         \"8gb\": 11257,\n         \"8k\": 12689,\n         \"8mm\": 12964,\n         \"91tv\": 12586,\n         \":\": 131,\n         \";\": 132,\n         \"<\": 133,\n         \"<S>\": 104,\n         \"<T>\": 105,\n         \"=\": 134,\n         \">\": 135,\n         \"?\": 136,\n         \"@\": 137,\n         \"[\": 138,\n         \"[CLS]\": 101,\n         \"[MASK]\": 103,\n         \"[PAD]\": 0,\n         \"[SEP]\": 102,\n         \"[UNK]\": 100,\n         \"[unused10]\": 10,\n         \"[unused11]\": 11,\n         \"[unused12]\": 12,\n         \"[unused13]\": 13,\n         \"[unused14]\": 14,\n         \"[unused15]\": 15,\n         \"[unused16]\": 16,\n         \"[unused17]\": 17,\n         \"[unused18]\": 18,\n         \"[unused19]\": 19,\n         \"[unused1]\": 1,\n         \"[unused20]\": 20,\n         \"[unused21]\": 21,\n         \"[unused22]\": 22,\n         \"[unused23]\": 23,\n         \"[unused24]\": 24,\n         \"[unused25]\": 25,\n         \"[unused26]\": 26,\n         \"[unused27]\": 27,\n         \"[unused28]\": 28,\n         \"[unused29]\": 29,\n         \"[unused2]\": 2,\n         \"[unused30]\": 30,\n         \"[unused31]\": 31,\n         \"[unused32]\": 32,\n         \"[unused33]\": 33,\n         \"[unused34]\": 34,\n         \"[unused35]\": 35,\n         \"[unused36]\": 36,\n         \"[unused37]\": 37,\n         \"[unused38]\": 38,\n         \"[unused39]\": 39,\n         \"[unused3]\": 3,\n         \"[unused40]\": 40,\n         \"[unused41]\": 41,\n         \"[unused42]\": 42,\n         \"[unused43]\": 43,\n         \"[unused44]\": 44,\n         \"[unused45]\": 45,\n         \"[unused46]\": 46,\n         \"[unused47]\": 47,\n         \"[unused48]\": 48,\n         \"[unused49]\": 49,\n         \"[unused4]\": 4,\n         \"[unused50]\": 50,\n         \"[unused51]\": 51,\n         \"[unused52]\": 52,\n         \"[unused53]\": 53,\n         \"[unused54]\": 54,\n         \"[unused55]\": 55,\n         \"[unused56]\": 56,\n         \"[unused57]\": 57,\n         \"[unused58]\": 58,\n         \"[unused59]\": 59,\n         \"[unused5]\": 5,\n         \"[unused60]\": 60,\n         \"[unused61]\": 61,\n         \"[unused62]\": 62,\n         \"[unused63]\": 63,\n         \"[unused64]\": 64,\n         \"[unused65]\": 65,\n         \"[unused66]\": 66,\n         \"[unused67]\": 67,\n         \"[unused68]\": 68,\n         \"[unused69]\": 69,\n         \"[unused6]\": 6,\n         \"[unused70]\": 70,\n         \"[unused71]\": 71,\n         \"[unused72]\": 72,\n         \"[unused73]\": 73,\n         \"[unused74]\": 74,\n         \"[unused75]\": 75,\n         \"[unused76]\": 76,\n         \"[unused77]\": 77,\n         \"[unused78]\": 78,\n         \"[unused79]\": 79,\n         \"[unused7]\": 7,\n         \"[unused80]\": 80,\n         \"[unused81]\": 81,\n         \"[unused82]\": 82,\n         \"[unused83]\": 83,\n         \"[unused84]\": 84,\n         \"[unused85]\": 85,\n         \"[unused86]\": 86,\n         \"[unused87]\": 87,\n         \"[unused88]\": 88,\n         \"[unused89]\": 89,\n         \"[unused8]\": 8,\n         \"[unused90]\": 90,\n         \"[unused91]\": 91,\n         \"[unused92]\": 92,\n         \"[unused93]\": 93,\n         \"[unused94]\": 94,\n         \"[unused95]\": 95,\n         \"[unused96]\": 96,\n         \"[unused97]\": 97,\n         \"[unused98]\": 98,\n         \"[unused99]\": 99,\n         \"[unused9]\": 9,\n         \"\\\\\": 139,\n         \"]\": 140,\n         \"^\": 141,\n         \"_\": 142,\n         \"a\": 143,\n         \"a1\": 9454,\n         \"a2\": 10301,\n         \"a3\": 10156,\n         \"a4\": 9367,\n         \"a5\": 10796,\n         \"a6\": 11716,\n         \"a7\": 11226,\n         \"a8\": 10790,\n         \"a9\": 11094,\n         \"aa\": 9563,\n         \"aaa\": 10876,\n         \"ab\": 9386,\n         \"abc\": 8425,\n         \"about\": 9053,\n         \"abs\": 8494,\n         \"ac\": 9226,\n         \"acca\": 11417,\n         \"access\": 11098,\n         \"ace\": 12192,\n         \"acer\": 10837,\n         \"acg\": 11553,\n         \"act\": 10355,\n         \"action\": 10805,\n         \"active\": 12105,\n         \"ad\": 9145,\n         \"adam\": 11194,\n         \"adc\": 10723,\n         \"adchoice\": 10999,\n         \"add\": 10253,\n         \"address\": 13093,\n         \"adi\": 11655,\n         \"adidas\": 8953,\n         \"admin\": 8843,\n         \"adobe\": 8864,\n         \"ads\": 12521,\n         \"adsense\": 11317,\n         \"adsl\": 13080,\n         \"advanced\": 12370,\n         \"ae\": 11978,\n         \"af\": 11782,\n         \"after\": 10100,\n         \"ag\": 9588,\n         \"again\": 12830,\n         \"age\": 12162,\n         \"agent\": 12948,\n         \"ago\": 8498,\n         \"agoda\": 8678,\n         \"ah\": 10785,\n         \"ai\": 8578,\n         \"air\": 8523,\n         \"airbnb\": 9709,\n         \"airmail\": 11837,\n         \"airport\": 11435,\n         \"ajax\": 11569,\n         \"ak\": 12825,\n         \"akb48\": 10521,\n         \"al\": 9266,\n         \"alan\": 11648,\n         \"album\": 13108,\n         \"alex\": 10179,\n         \"alexa\": 11193,\n         \"alexander\": 11733,\n         \"alice\": 10757,\n         \"all\": 8513,\n         \"allen\": 11736,\n         \"alpha\": 10763,\n         \"alphago\": 10941,\n         \"also\": 12216,\n         \"alt\": 9721,\n         \"am\": 8413,\n         \"am09\": 12377,\n         \"amana\": 12406,\n         \"amazon\": 8954,\n         \"amd\": 8992,\n         \"america\": 11801,\n         \"american\": 9735,\n         \"amg\": 13100,\n         \"amoled\": 11307,\n         \"amp\": 9985,\n         \"amy\": 11201,\n         \"an\": 9064,\n         \"analytics\": 12824,\n         \"and\": 8256,\n         \"andrew\": 10582,\n         \"android\": 8254,\n         \"andy\": 11036,\n         \"angel\": 9561,\n         \"angela\": 12822,\n         \"angelababy\": 10643,\n         \"ann\": 12276,\n         \"anna\": 9779,\n         \"anne\": 12860,\n         \"annie\": 11022,\n         \"anthony\": 10219,\n         \"anti\": 9204,\n         \"ap\": 9392,\n         \"apache\": 10555,\n         \"apec\": 9413,\n         \"aphojoy\": 9869,\n         \"api\": 8726,\n         \"apk\": 8543,\n         \"app\": 8172,\n         \"apple\": 8350,\n         \"application\": 12339,\n         \"appqq\": 11898,\n         \"apps\": 11006,\n         \"apr\": 9011,\n         \"april\": 9557,\n         \"apt\": 13205,\n         \"ar\": 8673,\n         \"archive\": 12884,\n         \"archives\": 12318,\n         \"arduino\": 12697,\n         \"are\": 8995,\n         \"area\": 13224,\n         \"arm\": 9498,\n         \"armani\": 11037,\n         \"arpg\": 12701,\n         \"art\": 9143,\n         \"article\": 9122,\n         \"articles\": 12431,\n         \"arts\": 12989,\n         \"as\": 8975,\n         \"asia\": 8339,\n         \"asics\": 11849,\n         \"asp\": 9596,\n         \"aspx\": 12363,\n         \"asr\": 10335,\n         \"association\": 11549,\n         \"asus\": 9300,\n         \"at\": 8243,\n         \"atm\": 8366,\n         \"atom\": 8941,\n         \"atp\": 12805,\n         \"au\": 10677,\n         \"audi\": 9976,\n         \"audio\": 11698,\n         \"aug\": 9663,\n         \"august\": 9217,\n         \"author\": 12195,\n         \"auto\": 11327,\n         \"autocad\": 12796,\n         \"av\": 8375,\n         \"avenue\": 12226,\n         \"avi\": 10548,\n         \"avira\": 10473,\n         \"award\": 11796,\n         \"awards\": 11846,\n         \"aws\": 12014,\n         \"azure\": 10421,\n         \"b\": 144,\n         \"b1\": 9338,\n         \"b12\": 12699,\n         \"b2\": 9668,\n         \"b2b\": 9493,\n         \"b2c\": 10089,\n         \"b3\": 12790,\n         \"b5\": 13137,\n         \"b6\": 11384,\n         \"ba\": 10322,\n         \"baby\": 8795,\n         \"back\": 10017,\n         \"bad\": 12139,\n         \"bag\": 13214,\n         \"baidu\": 11118,\n         \"balance\": 11606,\n         \"ball\": 10136,\n         \"band\": 11715,\n         \"bang\": 12067,\n         \"bank\": 10717,\n         \"banner\": 13256,\n         \"bar\": 9054,\n         \"bas\": 10952,\n         \"base\": 11668,\n         \"basic\": 12309,\n         \"bat\": 9806,\n         \"battle\": 12379,\n         \"bay\": 10251,\n         \"bb\": 8638,\n         \"bbc\": 8846,\n         \"bbe\": 12517,\n         \"bbq\": 10732,\n         \"bbs\": 9026,\n         \"bc\": 10954,\n         \"bd\": 8633,\n         \"be\": 8815,\n         \"be2\": 10276,\n         \"beach\": 9983,\n         \"bean\": 13188,\n         \"bear\": 13265,\n         \"beautiful\": 13106,\n         \"beauty\": 9445,\n         \"before\": 10735,\n         \"bell\": 9993,\n         \"bella\": 13192,\n         \"belle\": 13058,\n         \"ben\": 10016,\n         \"benz\": 13065,\n         \"best\": 9186,\n         \"beta\": 9861,\n         \"beyond\": 12352,\n         \"bh\": 11030,\n         \"bi\": 11055,\n         \"big\": 9193,\n         \"bigbang\": 11122,\n         \"bill\": 10681,\n         \"bim\": 11749,\n         \"bin\": 11702,\n         \"bing\": 12960,\n         \"bios\": 9324,\n         \"bird\": 13164,\n         \"bit\": 10425,\n         \"bl\": 10353,\n         \"black\": 9296,\n         \"block\": 10188,\n         \"blog\": 8309,\n         \"blogabstract\": 9288,\n         \"blogfp\": 10207,\n         \"blogger\": 9742,\n         \"blogspot\": 10437,\n         \"blogthis\": 8265,\n         \"blogtitle\": 10055,\n         \"bloomberg\": 10313,\n         \"blue\": 9036,\n         \"bmw\": 8943,\n         \"bo\": 11059,\n         \"board\": 12020,\n         \"bob\": 10542,\n         \"body\": 9867,\n         \"bonnie\": 12972,\n         \"book\": 9106,\n         \"booking\": 9309,\n         \"books\": 11280,\n         \"boost\": 11986,\n         \"boot\": 13119,\n         \"boss\": 8445,\n         \"bot\": 11825,\n         \"box\": 9553,\n         \"boy\": 10447,\n         \"bp\": 12203,\n         \"br\": 8575,\n         \"brake\": 8550,\n         \"brand\": 12326,\n         \"brandt\": 12855,\n         \"break\": 13049,\n         \"brian\": 11754,\n         \"bridge\": 11784,\n         \"brown\": 10699,\n         \"bruce\": 12897,\n         \"bt\": 8364,\n         \"buff\": 11321,\n         \"buffet\": 11637,\n         \"bug\": 8761,\n         \"build\": 11561,\n         \"burberry\": 11143,\n         \"bus\": 10411,\n         \"business\": 9913,\n         \"but\": 10288,\n         \"butler\": 11797,\n         \"buy\": 11166,\n         \"bwl\": 9681,\n         \"by\": 8120,\n         \"bye\": 10833,\n         \"bytes\": 10599,\n         \"c\": 145,\n         \"c1\": 10905,\n         \"c2\": 11854,\n         \"c3\": 11829,\n         \"c4\": 13209,\n         \"c5\": 12648,\n         \"c919\": 13136,\n         \"ca\": 8850,\n         \"cache\": 10991,\n         \"cad\": 8645,\n         \"cafe\": 8377,\n         \"cafe2017\": 8986,\n         \"cake\": 11683,\n         \"california\": 13293,\n         \"call\": 9816,\n         \"cam\": 12722,\n         \"cambridge\": 11788,\n         \"camera\": 11519,\n         \"camp\": 12275,\n         \"campaign\": 8718,\n         \"can\": 9109,\n         \"canada\": 12947,\n         \"candy\": 10653,\n         \"canmake\": 13298,\n         \"canon\": 10109,\n         \"capital\": 10715,\n         \"car\": 10875,\n         \"card\": 10674,\n         \"care\": 10614,\n         \"carlo\": 12628,\n         \"carol\": 9196,\n         \"case\": 10474,\n         \"cat\": 10165,\n         \"category\": 10633,\n         \"cb\": 12447,\n         \"cba\": 10912,\n         \"cbc\": 8712,\n         \"cbd\": 11249,\n         \"cbs\": 13035,\n         \"cc\": 8485,\n         \"ccd\": 12882,\n         \"cctv\": 10099,\n         \"cd\": 8405,\n         \"cdma\": 12902,\n         \"cdn\": 10910,\n         \"ce\": 10399,\n         \"cell\": 11490,\n         \"center\": 9469,\n         \"central\": 10890,\n         \"centre\": 10964,\n         \"ceo\": 8371,\n         \"ces\": 9818,\n         \"cf\": 9191,\n         \"cf1\": 12327,\n         \"cfa\": 9984,\n         \"cg\": 9715,\n         \"ch\": 9537,\n         \"chan\": 9318,\n         \"chanel\": 9366,\n         \"chang\": 11680,\n         \"change\": 12319,\n         \"channel\": 11261,\n         \"chapter\": 12350,\n         \"charles\": 10403,\n         \"charlie\": 12962,\n         \"check\": 9233,\n         \"cheese\": 11387,\n         \"chen\": 9798,\n         \"chi\": 12205,\n         \"chicago\": 10268,\n         \"chicken\": 12285,\n         \"children\": 12981,\n         \"china\": 8873,\n         \"chinese\": 10101,\n         \"cho\": 9829,\n         \"chocolate\": 12474,\n         \"chris\": 9582,\n         \"christian\": 11824,\n         \"chrome\": 8812,\n         \"church\": 12914,\n         \"ci\": 12364,\n         \"cia\": 11769,\n         \"cindy\": 9303,\n         \"cio\": 9351,\n         \"cisco\": 11010,\n         \"city\": 8869,\n         \"cj\": 13202,\n         \"ck\": 11623,\n         \"cl\": 12847,\n         \"claire\": 9753,\n         \"class\": 9380,\n         \"classic\": 11524,\n         \"click\": 11682,\n         \"client\": 10989,\n         \"close\": 11239,\n         \"cloud\": 10279,\n         \"club\": 8907,\n         \"cm\": 9326,\n         \"cma\": 12398,\n         \"cmos\": 10306,\n         \"cms\": 11539,\n         \"cn\": 8274,\n         \"cnc\": 12080,\n         \"cnn\": 9206,\n         \"co\": 8792,\n         \"co2\": 11444,\n         \"coach\": 10784,\n         \"coc\": 11917,\n         \"coco\": 8770,\n         \"code\": 8700,\n         \"coffee\": 9706,\n         \"collection\": 11024,\n         \"college\": 10319,\n         \"color\": 9916,\n         \"com\": 8134,\n         \"come\": 11385,\n         \"comhd\": 12587,\n         \"comment\": 9066,\n         \"comments\": 8616,\n         \"common\": 13050,\n         \"company\": 10007,\n         \"com™\": 10921,\n         \"con\": 11485,\n         \"connect\": 12280,\n         \"connectivity\": 8962,\n         \"contact\": 11860,\n         \"content\": 9432,\n         \"contextlink\": 11780,\n         \"continue\": 10859,\n         \"control\": 8809,\n         \"cook\": 12703,\n         \"cookie\": 8690,\n         \"cookies\": 8193,\n         \"cool\": 11338,\n         \"cool1\": 12032,\n         \"copy\": 11669,\n         \"copyright\": 9521,\n         \"core\": 9684,\n         \"corporation\": 8831,\n         \"cos\": 10141,\n         \"cosplay\": 9803,\n         \"costco\": 10742,\n         \"count\": 10926,\n         \"country\": 12678,\n         \"county\": 13088,\n         \"coupe\": 13142,\n         \"course\": 12654,\n         \"cover\": 12555,\n         \"cp\": 8337,\n         \"cpa\": 11963,\n         \"cpi\": 9511,\n         \"cpu\": 8476,\n         \"cr\": 10951,\n         \"cream\": 11494,\n         \"create\": 12432,\n         \"creative\": 12491,\n         \"credit\": 12241,\n         \"crm\": 9991,\n         \"cross\": 12209,\n         \"crv3000\": 12588,\n         \"cry\": 10485,\n         \"crystal\": 12070,\n         \"cs\": 9541,\n         \"css\": 8935,\n         \"css3\": 10760,\n         \"cst\": 12945,\n         \"ct\": 9162,\n         \"cto\": 12633,\n         \"ctrip\": 8223,\n         \"ctrl\": 8947,\n         \"culture\": 13219,\n         \"cup\": 10174,\n         \"curry\": 13014,\n         \"curve\": 9357,\n         \"cut\": 12322,\n         \"cv\": 10718,\n         \"cx\": 11154,\n         \"d\": 146,\n         \"d1\": 11537,\n         \"d2\": 11089,\n         \"d3\": 10966,\n         \"d5\": 12987,\n         \"da\": 10005,\n         \"dac\": 12913,\n         \"daily\": 10210,\n         \"dan\": 11404,\n         \"dance\": 12371,\n         \"daniel\": 9701,\n         \"dark\": 12705,\n         \"data\": 9000,\n         \"database\": 12435,\n         \"date\": 11624,\n         \"david\": 8776,\n         \"davis\": 11968,\n         \"day\": 8542,\n         \"day1\": 11813,\n         \"day2\": 11144,\n         \"day3\": 11649,\n         \"day4\": 12890,\n         \"days\": 9068,\n         \"db\": 9767,\n         \"dc\": 8928,\n         \"dcs\": 12418,\n         \"dd\": 10391,\n         \"ddd\": 13234,\n         \"ddos\": 12887,\n         \"de\": 8363,\n         \"dean\": 12440,\n         \"dear\": 11694,\n         \"dec\": 9333,\n         \"december\": 9871,\n         \"deep\": 12592,\n         \"del\": 10843,\n         \"delete\": 12845,\n         \"dell\": 11516,\n         \"demo\": 10828,\n         \"der\": 9157,\n         \"des\": 11081,\n         \"design\": 9225,\n         \"details\": 13227,\n         \"development\": 12261,\n         \"dha\": 11015,\n         \"dhl\": 13305,\n         \"di\": 9796,\n         \"diary\": 12940,\n         \"die\": 11633,\n         \"digital\": 10727,\n         \"dior\": 8639,\n         \"discovery\": 12748,\n         \"discuz\": 13197,\n         \"disney\": 12299,\n         \"display\": 11830,\n         \"distribution\": 9320,\n         \"dit\": 13231,\n         \"div\": 11308,\n         \"diy\": 8342,\n         \"dj\": 9135,\n         \"dji\": 12093,\n         \"dl\": 11961,\n         \"dlc\": 12439,\n         \"dll\": 9614,\n         \"dm\": 10442,\n         \"dna\": 8669,\n         \"dnf\": 11315,\n         \"dns\": 9580,\n         \"do\": 8895,\n         \"doc\": 9656,\n         \"docker\": 10290,\n         \"docomo\": 11358,\n         \"dog\": 13030,\n         \"doi\": 9962,\n         \"dollars\": 9448,\n         \"dom\": 11183,\n         \"domain\": 12168,\n         \"don\": 9524,\n         \"donald\": 9635,\n         \"dos\": 10441,\n         \"dota\": 11636,\n         \"double\": 11255,\n         \"down\": 10243,\n         \"download\": 9461,\n         \"dr\": 8647,\n         \"dragon\": 10829,\n         \"dram\": 10664,\n         \"dream\": 10252,\n         \"drive\": 10170,\n         \"dropbox\": 11277,\n         \"ds\": 11274,\n         \"dsp\": 9934,\n         \"dt\": 13260,\n         \"du\": 10173,\n         \"dv\": 12372,\n         \"dvd\": 8316,\n         \"dx\": 13240,\n         \"dyson\": 12730,\n         \"e\": 147,\n         \"e1\": 12298,\n         \"e2\": 12357,\n         \"e3\": 10440,\n         \"e5\": 10695,\n         \"e6\": 11639,\n         \"e7\": 12888,\n         \"e88\": 13313,\n         \"ea\": 9714,\n         \"earth\": 11409,\n         \"east\": 10990,\n         \"easy\": 9935,\n         \"eb\": 10979,\n         \"eba\": 11129,\n         \"ebay\": 8886,\n         \"ebd\": 8539,\n         \"ebooks\": 10186,\n         \"ec\": 12470,\n         \"ecfa\": 12496,\n         \"echo\": 11701,\n         \"eclipse\": 11752,\n         \"eco\": 12791,\n         \"economy\": 11250,\n         \"ecu\": 9526,\n         \"ed\": 9599,\n         \"ed2k\": 10587,\n         \"edge\": 9720,\n         \"edit\": 11150,\n         \"edited\": 10304,\n         \"edition\": 10621,\n         \"editor\": 11544,\n         \"edm\": 11269,\n         \"eds\": 12191,\n         \"edu\": 9827,\n         \"education\": 12727,\n         \"edward\": 12259,\n         \"ee\": 13173,\n         \"eeworld\": 12490,\n         \"ef\": 9783,\n         \"eia\": 11981,\n         \"el\": 10245,\n         \"electronic\": 9297,\n         \"eleven\": 9795,\n         \"ella\": 13056,\n         \"elle\": 11593,\n         \"else\": 11740,\n         \"em\": 13152,\n         \"email\": 8307,\n         \"emba\": 10360,\n         \"emc\": 12341,\n         \"emi\": 13104,\n         \"emily\": 12384,\n         \"emma\": 12111,\n         \"ems\": 9589,\n         \"en\": 9447,\n         \"end\": 9931,\n         \"energy\": 11939,\n         \"engine\": 11764,\n         \"english\": 8899,\n         \"enter\": 11086,\n         \"entertainment\": 11679,\n         \"eos\": 10434,\n         \"ep\": 10676,\n         \"eps\": 9629,\n         \"epson\": 12735,\n         \"eq\": 11601,\n         \"er\": 10451,\n         \"eric\": 9836,\n         \"erp\": 9529,\n         \"error\": 10812,\n         \"es\": 11696,\n         \"esc\": 9307,\n         \"esp\": 9212,\n         \"et\": 8867,\n         \"etc\": 9813,\n         \"etf\": 8946,\n         \"etnews\": 12870,\n         \"ettoday\": 9485,\n         \"eur\": 11991,\n         \"ev\": 12311,\n         \"eva\": 10154,\n         \"event\": 10992,\n         \"evernote\": 13138,\n         \"evolution\": 12691,\n         \"ex\": 9577,\n         \"excel\": 8729,\n         \"exchange\": 10974,\n         \"exe\": 9464,\n         \"exhibition\": 13282,\n         \"exo\": 11184,\n         \"expedia\": 12317,\n         \"explorer\": 10630,\n         \"express\": 9865,\n         \"eye\": 11650,\n         \"eyes\": 12909,\n         \"f\": 148,\n         \"f1\": 9080,\n         \"f16\": 12799,\n         \"f2\": 9675,\n         \"f3\": 11651,\n         \"f4\": 11464,\n         \"f5\": 12173,\n         \"fa\": 12289,\n         \"face\": 10656,\n         \"facebook\": 8200,\n         \"facebooktwitterpinterestgoogle\": 11498,\n         \"factory\": 12896,\n         \"fairmont\": 12208,\n         \"false\": 11457,\n         \"family\": 10072,\n         \"fan\": 11925,\n         \"fandom\": 9598,\n         \"fans\": 11821,\n         \"fantasy\": 12436,\n         \"faq\": 9065,\n         \"faq1\": 13006,\n         \"fashion\": 9522,\n         \"fast\": 11934,\n         \"fb\": 8573,\n         \"fbi\": 9711,\n         \"fc\": 10443,\n         \"fc2\": 11362,\n         \"fda\": 10065,\n         \"fe\": 12605,\n         \"feb\": 9694,\n         \"february\": 10028,\n         \"fed\": 9311,\n         \"fedora\": 11577,\n         \"feed\": 12006,\n         \"feel\": 11297,\n         \"ferragamo\": 9992,\n         \"festival\": 11720,\n         \"ff\": 12388,\n         \"fgo\": 11401,\n         \"fi\": 8533,\n         \"field\": 12594,\n         \"fifa\": 12130,\n         \"file\": 9828,\n         \"files\": 10463,\n         \"film\": 11149,\n         \"final\": 10591,\n         \"financial\": 12200,\n         \"find\": 11707,\n         \"fintech\": 12234,\n         \"fire\": 11229,\n         \"firefox\": 8964,\n         \"first\": 9555,\n         \"fish\": 11676,\n         \"fishbase\": 13316,\n         \"fit\": 11188,\n         \"five\": 12706,\n         \"fks\": 10044,\n         \"flash\": 8427,\n         \"flickr\": 11470,\n         \"fluke62max\": 10946,\n         \"fly\": 13010,\n         \"fm\": 9079,\n         \"focus\": 11452,\n         \"follow\": 10792,\n         \"font\": 11851,\n         \"food\": 9579,\n         \"for\": 8330,\n         \"force\": 9019,\n         \"ford\": 10296,\n         \"forest\": 10889,\n         \"form\": 12244,\n         \"forum\": 11730,\n         \"foundation\": 12099,\n         \"fox\": 10872,\n         \"fpga\": 9724,\n         \"fps\": 11671,\n         \"fpx\": 13285,\n         \"framework\": 12842,\n         \"france\": 11653,\n         \"francis\": 13134,\n         \"frank\": 10379,\n         \"free\": 8583,\n         \"fresh\": 12718,\n         \"fri\": 8611,\n         \"friday\": 11240,\n         \"friend\": 13280,\n         \"friends\": 11488,\n         \"frigidaire\": 12304,\n         \"frm\": 11794,\n         \"from\": 8670,\n         \"fsm\": 12807,\n         \"ft\": 12180,\n         \"ftp\": 9195,\n         \"fu\": 9486,\n         \"full\": 9904,\n         \"fun\": 9575,\n         \"function\": 12213,\n         \"fung\": 13238,\n         \"future\": 11814,\n         \"fx\": 12611,\n         \"g\": 149,\n         \"g1\": 11528,\n         \"g2\": 12179,\n         \"g20\": 9789,\n         \"g3\": 12493,\n         \"g4g\": 10613,\n         \"g5\": 12492,\n         \"g6\": 12958,\n         \"g7\": 13053,\n         \"g9\": 11157,\n         \"ga\": 11005,\n         \"gaga\": 12762,\n         \"galaxy\": 8547,\n         \"gallery\": 12595,\n         \"game\": 9033,\n         \"games\": 10810,\n         \"gaming\": 12444,\n         \"ganji\": 9055,\n         \"gap\": 10130,\n         \"garden\": 9794,\n         \"gartner\": 12784,\n         \"gary\": 11560,\n         \"gay\": 12211,\n         \"gb\": 9468,\n         \"gc\": 12366,\n         \"gd\": 11729,\n         \"gdp\": 8421,\n         \"ge\": 10234,\n         \"gear\": 10231,\n         \"general\": 11568,\n         \"george\": 9897,\n         \"get\": 9018,\n         \"gg\": 10206,\n         \"ghost\": 10797,\n         \"gi\": 12785,\n         \"gif\": 9047,\n         \"gigi\": 12634,\n         \"girl\": 9375,\n         \"girls\": 10803,\n         \"gis\": 12892,\n         \"git\": 10807,\n         \"github\": 10575,\n         \"givenchy\": 12065,\n         \"gl\": 9101,\n         \"glass\": 12535,\n         \"global\": 8878,\n         \"gm\": 12277,\n         \"gmail\": 8637,\n         \"gmat\": 13204,\n         \"gmp\": 10821,\n         \"gmt\": 12828,\n         \"gnu\": 12367,\n         \"go\": 8373,\n         \"god\": 11138,\n         \"gogoro\": 11225,\n         \"gohappy\": 11567,\n         \"gold\": 10628,\n         \"golden\": 12746,\n         \"gomaji\": 9576,\n         \"goo\": 9271,\n         \"good\": 9005,\n         \"goods\": 9028,\n         \"google\": 8190,\n         \"googlemsn\": 12046,\n         \"gopro\": 13176,\n         \"goris\": 9188,\n         \"gov\": 9514,\n         \"gp\": 13228,\n         \"gpa\": 12273,\n         \"gps\": 8434,\n         \"gpu\": 9483,\n         \"gr2\": 9293,\n         \"grace\": 11587,\n         \"grand\": 9968,\n         \"gre\": 10771,\n         \"great\": 10512,\n         \"green\": 9631,\n         \"group\": 9051,\n         \"gs\": 12694,\n         \"gsm\": 11484,\n         \"gt\": 9046,\n         \"gtx\": 11069,\n         \"gucci\": 10258,\n         \"guest\": 12901,\n         \"guestname\": 13082,\n         \"gui\": 12295,\n         \"guide\": 11724,\n         \"gundam\": 12523,\n         \"h\": 150,\n         \"h1\": 12333,\n         \"h2\": 12212,\n         \"h5\": 9354,\n         \"h6\": 12235,\n         \"h7n9\": 10697,\n         \"ha\": 11643,\n         \"hadoop\": 10956,\n         \"hair\": 11408,\n         \"hall\": 11049,\n         \"han\": 12126,\n         \"happy\": 9200,\n         \"hard\": 12442,\n         \"harry\": 12296,\n         \"has\": 11325,\n         \"have\": 9531,\n         \"hbl\": 12502,\n         \"hd\": 8407,\n         \"hdmi\": 9578,\n         \"hdr\": 10465,\n         \"he\": 9245,\n         \"head\": 12074,\n         \"health\": 10168,\n         \"heart\": 10240,\n         \"hello\": 8701,\n         \"help\": 10892,\n         \"helpapp\": 10609,\n         \"henry\": 11361,\n         \"her\": 11908,\n         \"here\": 10815,\n         \"herme\": 8834,\n         \"hero\": 11673,\n         \"hey\": 13153,\n         \"hgih\": 11674,\n         \"hi\": 8913,\n         \"high\": 8757,\n         \"hill\": 10562,\n         \"hip\": 11070,\n         \"his\": 10163,\n         \"history\": 9939,\n         \"hit\": 10295,\n         \"hitachi\": 12294,\n         \"hiv\": 11141,\n         \"hk\": 8512,\n         \"hktvmall\": 9688,\n         \"hmv\": 12985,\n         \"ho\": 10537,\n         \"hola\": 10961,\n         \"hold\": 10389,\n         \"holiday\": 12777,\n         \"home\": 8563,\n         \"homemesh\": 9167,\n         \"honda\": 11890,\n         \"honey\": 13299,\n         \"hong\": 8881,\n         \"hop\": 10931,\n         \"host\": 12387,\n         \"hostel\": 13113,\n         \"hot\": 9286,\n         \"hotel\": 8462,\n         \"hotels\": 8749,\n         \"hotmail\": 10728,\n         \"house\": 8696,\n         \"how\": 9510,\n         \"howard\": 11312,\n         \"hp\": 8853,\n         \"hpv\": 11067,\n         \"hr\": 8967,\n         \"hsu\": 12307,\n         \"htc\": 8530,\n         \"htm\": 9645,\n         \"html\": 8304,\n         \"html5\": 9302,\n         \"http\": 8184,\n         \"https\": 8532,\n         \"hu\": 12199,\n         \"huang\": 10788,\n         \"huawei\": 12247,\n         \"human\": 11913,\n         \"i\": 151,\n         \"i3\": 12224,\n         \"i5\": 10013,\n         \"i7\": 10008,\n         \"ian\": 13268,\n         \"ib\": 12487,\n         \"ibm\": 8699,\n         \"ic\": 8577,\n         \"ice\": 10490,\n         \"icecat\": 9336,\n         \"icloud\": 12602,\n         \"icon\": 9734,\n         \"icp\": 9658,\n         \"ict\": 13162,\n         \"id\": 8231,\n         \"idc\": 9617,\n         \"ide\": 11319,\n         \"idea\": 11834,\n         \"ie\": 8469,\n         \"ie6\": 12509,\n         \"ieee\": 12272,\n         \"if\": 8898,\n         \"ig\": 8288,\n         \"iherb\": 11040,\n         \"ii\": 8491,\n         \"iii\": 9207,\n         \"iis\": 11670,\n         \"ikea\": 10513,\n         \"il\": 12197,\n         \"im\": 10481,\n         \"image\": 9732,\n         \"images\": 12804,\n         \"imax\": 11214,\n         \"imf\": 9971,\n         \"img\": 11412,\n         \"imsean\": 12087,\n         \"in\": 8217,\n         \"inc\": 8910,\n         \"index\": 9405,\n         \"info\": 9603,\n         \"information\": 11237,\n         \"ing\": 10139,\n         \"inn\": 9696,\n         \"inparadise\": 12484,\n         \"ins\": 12323,\n         \"insee\": 11513,\n         \"inside\": 13157,\n         \"instagram\": 8780,\n         \"install\": 12461,\n         \"institute\": 11205,\n         \"int\": 10673,\n         \"intel\": 8781,\n         \"international\": 9001,\n         \"internet\": 8484,\n         \"into\": 12609,\n         \"inwedding\": 12134,\n         \"io\": 10272,\n         \"ios\": 8276,\n         \"ios10\": 10671,\n         \"ios11\": 12833,\n         \"ios7\": 13027,\n         \"ios9\": 8926,\n         \"iot\": 9543,\n         \"ip\": 8215,\n         \"ipad\": 8355,\n         \"iphone\": 8210,\n         \"iphone6\": 9878,\n         \"iphone7\": 9440,\n         \"ipo\": 8745,\n         \"ipod\": 9391,\n         \"ips\": 10511,\n         \"iptv\": 12844,\n         \"ipv6\": 12082,\n         \"iq\": 12419,\n         \"ir\": 12410,\n         \"is\": 8310,\n         \"isbn\": 8446,\n         \"isis\": 11709,\n         \"island\": 10262,\n         \"iso\": 8784,\n         \"iso9001\": 9727,\n         \"isofix\": 11962,\n         \"isp\": 12036,\n         \"it\": 8233,\n         \"item\": 9279,\n         \"its\": 12894,\n         \"itunes\": 9041,\n         \"iu\": 13172,\n         \"iv\": 10573,\n         \"ivy\": 12662,\n         \"j\": 152,\n         \"jack\": 9850,\n         \"jackson\": 11945,\n         \"james\": 8923,\n         \"jan\": 9213,\n         \"jane\": 11909,\n         \"january\": 9768,\n         \"japan\": 9151,\n         \"jason\": 10266,\n         \"java\": 8507,\n         \"javascript\": 8561,\n         \"jay\": 12541,\n         \"jayz\": 11072,\n         \"jb\": 13063,\n         \"jcb\": 10557,\n         \"jchere\": 11396,\n         \"jean\": 10483,\n         \"jeff\": 11147,\n         \"jennifer\": 12652,\n         \"jerry\": 13111,\n         \"jessica\": 11731,\n         \"ji\": 12095,\n         \"jim\": 11268,\n         \"jimmy\": 10317,\n         \"jing\": 13207,\n         \"jj\": 11095,\n         \"jo\": 13269,\n         \"job\": 12539,\n         \"jobs\": 13103,\n         \"joe\": 9516,\n         \"john\": 8675,\n         \"johnson\": 11045,\n         \"jonathan\": 11559,\n         \"jones\": 11439,\n         \"jordan\": 9229,\n         \"jose\": 12606,\n         \"joseph\": 11151,\n         \"journal\": 10321,\n         \"joy\": 12668,\n         \"jp\": 9348,\n         \"jpeg\": 11985,\n         \"jpg\": 9248,\n         \"jquery\": 10035,\n         \"jr\": 8602,\n         \"js\": 9016,\n         \"json\": 12249,\n         \"jul\": 9618,\n         \"july\": 8909,\n         \"jump\": 10331,\n         \"jun\": 8392,\n         \"june\": 8564,\n         \"junior\": 12552,\n         \"just\": 10125,\n         \"justin\": 11889,\n         \"k\": 153,\n         \"k2\": 11999,\n         \"ka\": 11306,\n         \"kai\": 13072,\n         \"kanshu\": 13236,\n         \"kanye\": 8598,\n         \"karl\": 13263,\n         \"kate\": 11058,\n         \"kb\": 9843,\n         \"kbs\": 10655,\n         \"kd\": 12695,\n         \"kde\": 12543,\n         \"keep\": 11654,\n         \"kelly\": 11394,\n         \"ken\": 11314,\n         \"kevin\": 9583,\n         \"key\": 9232,\n         \"kg\": 9515,\n         \"kic\": 11687,\n         \"kicstart2\": 12614,\n         \"kids\": 11826,\n         \"kiehl\": 8587,\n         \"kim\": 10683,\n         \"kimi\": 11966,\n         \"kindle\": 9810,\n         \"king\": 9382,\n         \"kiss\": 11192,\n         \"kit\": 12788,\n         \"kitchen\": 11808,\n         \"kitty\": 9431,\n         \"kk\": 11923,\n         \"kl\": 13289,\n         \"km\": 10062,\n         \"know\": 11460,\n         \"ko\": 10368,\n         \"kong\": 8906,\n         \"korea\": 11984,\n         \"koreanmall\": 9895,\n         \"kpi\": 11025,\n         \"ktv\": 8894,\n         \"kuso\": 10881,\n         \"ky\": 11096,\n         \"kymco\": 11013,\n         \"l\": 154,\n         \"l1\": 12421,\n         \"l2\": 12879,\n         \"la\": 8515,\n         \"lab\": 11441,\n         \"labels\": 11562,\n         \"lady\": 8822,\n         \"lake\": 10556,\n         \"lamigo\": 12536,\n         \"lan\": 11461,\n         \"land\": 11169,\n         \"language\": 8348,\n         \"last\": 10148,\n         \"law\": 11353,\n         \"lc\": 11806,\n         \"lcd\": 8919,\n         \"ldquo\": 10616,\n         \"le\": 8983,\n         \"learning\": 12315,\n         \"leave\": 10619,\n         \"led\": 8242,\n         \"lee\": 9058,\n         \"left\": 12744,\n         \"legalminer\": 11377,\n         \"lenovo\": 13031,\n         \"leo\": 11901,\n         \"leonardo\": 8579,\n         \"leonnhurt\": 13160,\n         \"les\": 10133,\n         \"let\": 9946,\n         \"level\": 9888,\n         \"lg\": 8589,\n         \"li\": 9341,\n         \"library\": 11616,\n         \"life\": 8562,\n         \"lifestyle\": 12996,\n         \"light\": 10310,\n         \"like\": 8993,\n         \"lily\": 11228,\n         \"lim\": 12817,\n         \"limited\": 10424,\n         \"lin\": 9733,\n         \"line\": 8323,\n         \"ling\": 10061,\n         \"link\": 9025,\n         \"linkedin\": 11369,\n         \"links\": 10417,\n         \"linux\": 8403,\n         \"lisa\": 10032,\n         \"list\": 9691,\n         \"little\": 9929,\n         \"liu\": 12306,\n         \"live\": 8582,\n         \"living\": 12113,\n         \"ll\": 10856,\n         \"llc\": 8236,\n         \"ln284ct\": 12969,\n         \"lo\": 12264,\n         \"loading\": 10878,\n         \"local\": 11476,\n         \"lock\": 9189,\n         \"loft\": 12751,\n         \"lofter\": 8117,\n         \"loftpermalink\": 10056,\n         \"log\": 10510,\n         \"logo\": 8529,\n         \"lohas\": 9757,\n         \"lohasthree\": 11741,\n         \"lol\": 8817,\n         \"london\": 9978,\n         \"long\": 10037,\n         \"longchamp\": 9003,\n         \"lonzo\": 12688,\n         \"look\": 9544,\n         \"lost\": 12593,\n         \"louis\": 10950,\n         \"love\": 8451,\n         \"low\": 10611,\n         \"lp\": 11195,\n         \"lt\": 10413,\n         \"ltd\": 9616,\n         \"lte\": 8987,\n         \"ltxsw\": 8793,\n         \"lu\": 12015,\n         \"lucky\": 12659,\n         \"lulu\": 11970,\n         \"lumia\": 11506,\n         \"lv\": 8289,\n         \"ly\": 13252,\n         \"lz\": 10767,\n         \"m\": 155,\n         \"m1\": 10211,\n         \"m2\": 9567,\n         \"m3\": 9305,\n         \"m4\": 11964,\n         \"m5\": 12802,\n         \"m8\": 10914,\n         \"ma\": 9622,\n         \"mac\": 8502,\n         \"macbook\": 9173,\n         \"macd\": 10851,\n         \"machine\": 12252,\n         \"made\": 10123,\n         \"magazine\": 10469,\n         \"maggie\": 12423,\n         \"magic\": 10328,\n         \"mail\": 8313,\n         \"main\": 9139,\n         \"make\": 9994,\n         \"maker\": 11389,\n         \"malaysia\": 10514,\n         \"mall\": 9628,\n         \"mama\": 13186,\n         \"man\": 8791,\n         \"management\": 10751,\n         \"manager\": 11039,\n         \"mandy\": 9518,\n         \"mango\": 12645,\n         \"map\": 9633,\n         \"maps\": 12446,\n         \"mar\": 9118,\n         \"marc\": 11511,\n         \"march\": 9581,\n         \"maria\": 12096,\n         \"mark\": 8970,\n         \"market\": 9095,\n         \"marketing\": 13189,\n         \"marriott\": 10471,\n         \"martin\": 10059,\n         \"mary\": 10786,\n         \"master\": 9261,\n         \"mastercard\": 9841,\n         \"match\": 12528,\n         \"mate\": 10577,\n         \"matlab\": 12640,\n         \"matt\": 12042,\n         \"max\": 8621,\n         \"may\": 8480,\n         \"mb\": 9499,\n         \"mba\": 8980,\n         \"mbc\": 10648,\n         \"mc\": 10341,\n         \"mcu\": 10738,\n         \"md\": 11399,\n         \"me\": 8450,\n         \"media\": 9371,\n         \"mega\": 12908,\n         \"meiki\": 9872,\n         \"melody\": 9087,\n         \"member\": 11120,\n         \"memory\": 11910,\n         \"mems\": 12530,\n         \"men\": 11305,\n         \"menu\": 8888,\n         \"message\": 12231,\n         \"messenger\": 11892,\n         \"meta\": 11799,\n         \"metal\": 13259,\n         \"metro\": 12473,\n         \"mg\": 9404,\n         \"mhz\": 12747,\n         \"mi\": 10551,\n         \"miacare\": 11918,\n         \"michael\": 8918,\n         \"micro\": 10204,\n         \"microsoft\": 8775,\n         \"mike\": 10021,\n         \"miller\": 13114,\n         \"min\": 9573,\n         \"mind\": 12573,\n         \"ming\": 11388,\n         \"mini\": 8672,\n         \"minkoff\": 11018,\n         \"miss\": 9368,\n         \"mit\": 9315,\n         \"miui\": 11342,\n         \"mix\": 9678,\n         \"mk\": 11629,\n         \"mkv\": 11557,\n         \"ml\": 10215,\n         \"mlb\": 9905,\n         \"mm\": 8595,\n         \"mmorpg\": 13274,\n         \"mo\": 11303,\n         \"moba\": 11565,\n         \"mobil\": 12572,\n         \"mobile\": 9119,\n         \"mod\": 9650,\n         \"mode\": 10770,\n         \"model\": 9264,\n         \"modern\": 12862,\n         \"momo\": 8534,\n         \"mon\": 8556,\n         \"monday\": 12069,\n         \"money\": 10348,\n         \"moneydj\": 11911,\n         \"monte\": 12861,\n         \"months\": 10195,\n         \"moon\": 9921,\n         \"more\": 8384,\n         \"morning\": 12885,\n         \"most\": 11344,\n         \"motel\": 11466,\n         \"moto\": 10429,\n         \"mount\": 12881,\n         \"mountain\": 12482,\n         \"movie\": 11099,\n         \"mozilla\": 11579,\n         \"mp\": 11198,\n         \"mp3\": 8388,\n         \"mp4\": 9399,\n         \"mpv\": 10259,\n         \"mr\": 8912,\n         \"ms\": 9396,\n         \"msci\": 9400,\n         \"msg\": 10180,\n         \"msi\": 12560,\n         \"msn\": 8804,\n         \"mt\": 10376,\n         \"mtv\": 11529,\n         \"mu\": 11677,\n         \"muji\": 13001,\n         \"multi\": 13149,\n         \"museum\": 10553,\n         \"music\": 9057,\n         \"mv\": 8546,\n         \"mvp\": 9505,\n         \"mwc\": 12184,\n         \"mx\": 11171,\n         \"my\": 8422,\n         \"mysql\": 9108,\n         \"n\": 156,\n         \"n1\": 11356,\n         \"n2\": 11832,\n         \"n3\": 12905,\n         \"na\": 11469,\n         \"name\": 8617,\n         \"namespace\": 11076,\n         \"nana\": 12140,\n         \"nand\": 11711,\n         \"nano\": 13057,\n         \"nas\": 10157,\n         \"nasa\": 9334,\n         \"nata\": 10166,\n         \"national\": 9385,\n         \"natural\": 12627,\n         \"nature\": 10467,\n         \"navigation\": 12232,\n         \"nb\": 9254,\n         \"nb40\": 12965,\n         \"nba\": 8391,\n         \"nbapop\": 12188,\n         \"nbc\": 12141,\n         \"nbsp\": 8400,\n         \"nc\": 12394,\n         \"ncc\": 8305,\n         \"ne\": 10564,\n         \"nego\": 11181,\n         \"neo\": 12169,\n         \"net\": 8336,\n         \"netcomponents\": 11471,\n         \"netflix\": 10373,\n         \"netscape\": 8691,\n         \"network\": 10339,\n         \"never\": 11718,\n         \"new\": 8343,\n         \"news\": 8501,\n         \"next\": 9321,\n         \"nexus\": 10390,\n         \"nfc\": 9298,\n         \"ng\": 8885,\n         \"nginx\": 12576,\n         \"ngo\": 11770,\n         \"nhk\": 9689,\n         \"ni\": 10560,\n         \"nice\": 10192,\n         \"nick\": 11243,\n         \"night\": 10036,\n         \"nike\": 8702,\n         \"nikkie\": 13303,\n         \"nikon\": 11391,\n         \"niusnews\": 13212,\n         \"no\": 8275,\n         \"no1\": 11448,\n         \"node\": 10320,\n         \"nokia\": 9752,\n         \"non\": 12002,\n         \"north\": 10744,\n         \"not\": 9059,\n         \"note\": 8698,\n         \"note7\": 12147,\n         \"notes\": 13165,\n         \"nov\": 9698,\n         \"nova\": 11660,\n         \"november\": 9756,\n         \"now\": 9666,\n         \"nownews\": 11123,\n         \"np\": 11203,\n         \"npc\": 9811,\n         \"ns\": 10593,\n         \"nt\": 8495,\n         \"ntd\": 12982,\n         \"nu\": 12797,\n         \"null\": 12083,\n         \"number\": 11333,\n         \"nvidia\": 9503,\n         \"o\": 157,\n         \"o2o\": 8590,\n         \"oa\": 10527,\n         \"ob\": 12639,\n         \"object\": 11336,\n         \"ocean\": 12546,\n         \"oct\": 9346,\n         \"october\": 9548,\n         \"oculus\": 10480,\n         \"oem\": 9945,\n         \"of\": 8205,\n         \"off\": 9594,\n         \"offer\": 10038,\n         \"office\": 8628,\n         \"official\": 12863,\n         \"ofo\": 9574,\n         \"ofweek\": 10140,\n         \"oh\": 9941,\n         \"oil\": 13046,\n         \"ok\": 8270,\n         \"ol\": 8972,\n         \"old\": 10404,\n         \"oldid\": 13267,\n         \"oled\": 8868,\n         \"omega\": 11938,\n         \"on\": 8281,\n         \"one\": 8429,\n         \"online\": 8314,\n         \"only\": 10110,\n         \"oo\": 11383,\n         \"oops\": 11260,\n         \"op\": 10208,\n         \"opec\": 9416,\n         \"open\": 8893,\n         \"openload\": 13096,\n         \"opera\": 10917,\n         \"oppo\": 8806,\n         \"or\": 8549,\n         \"oracle\": 10085,\n         \"orange\": 13295,\n         \"order\": 11156,\n         \"org\": 8448,\n         \"originals\": 12975,\n         \"orz\": 10836,\n         \"os\": 8721,\n         \"other\": 12132,\n         \"ott\": 11114,\n         \"our\": 11052,\n         \"out\": 8883,\n         \"outlet\": 10071,\n         \"outlook\": 11422,\n         \"over\": 10047,\n         \"overchicstoretvhome\": 12450,\n         \"overdope\": 9964,\n         \"oxford\": 12649,\n         \"p\": 158,\n         \"p1\": 11020,\n         \"p10\": 10405,\n         \"p2\": 11883,\n         \"p2p\": 8478,\n         \"p3\": 12454,\n         \"p9\": 11951,\n         \"pa\": 9519,\n         \"pacific\": 12625,\n         \"pack\": 12736,\n         \"pad\": 10257,\n         \"page\": 9040,\n         \"pan\": 11641,\n         \"panasonic\": 10752,\n         \"pantos\": 10030,\n         \"paper\": 10863,\n         \"paris\": 10708,\n         \"park\": 8865,\n         \"parker\": 12495,\n         \"part\": 9124,\n         \"party\": 9126,\n         \"pass\": 9703,\n         \"path\": 12443,\n         \"patrick\": 12003,\n         \"paul\": 8999,\n         \"pay\": 9452,\n         \"paypal\": 8657,\n         \"pc\": 8295,\n         \"pcb\": 9925,\n         \"pchome\": 9780,\n         \"pci\": 10773,\n         \"pd\": 9884,\n         \"pdf\": 8496,\n         \"pe\": 9205,\n         \"pen\": 12637,\n         \"people\": 8777,\n         \"pepper\": 11861,\n         \"pet\": 10495,\n         \"peter\": 9323,\n         \"pg\": 12898,\n         \"ph\": 9465,\n         \"philips\": 10749,\n         \"phone\": 8922,\n         \"photo\": 9020,\n         \"photos\": 9999,\n         \"photoshop\": 9415,\n         \"php\": 8531,\n         \"pi\": 10091,\n         \"piece\": 11446,\n         \"pierre\": 8744,\n         \"pin\": 11328,\n         \"ping\": 11891,\n         \"pink\": 12016,\n         \"pinkoi\": 11941,\n         \"pinterest\": 8379,\n         \"pixel\": 11688,\n         \"pixnet\": 8191,\n         \"pixnetfacebookyahoo\": 12047,\n         \"pixstyleme\": 10344,\n         \"pixstyleme3c\": 8382,\n         \"pizza\": 10315,\n         \"pk\": 8465,\n         \"pk10\": 9329,\n         \"place\": 10963,\n         \"plan\": 12248,\n         \"planet\": 12269,\n         \"play\": 8942,\n         \"player\": 9075,\n         \"playstation\": 11026,\n         \"plaza\": 11767,\n         \"plc\": 10015,\n         \"please\": 11744,\n         \"plurk\": 10498,\n         \"plus\": 8514,\n         \"pm\": 8397,\n         \"pm1\": 11819,\n         \"pm2\": 9150,\n         \"pmi\": 10127,\n         \"pmid\": 11804,\n         \"png\": 10246,\n         \"po\": 8559,\n         \"point\": 9891,\n         \"pokemon\": 8934,\n         \"policy\": 8659,\n         \"polo\": 10710,\n         \"pony\": 8365,\n         \"pop\": 8971,\n         \"popular\": 11880,\n         \"population\": 13271,\n         \"port\": 11311,\n         \"pos\": 9854,\n         \"pose\": 11474,\n         \"positioning\": 11187,\n         \"post\": 8671,\n         \"posted\": 8486,\n         \"posts\": 10639,\n         \"power\": 9239,\n         \"powered\": 10103,\n         \"powerpoint\": 12176,\n         \"pp\": 8570,\n         \"ppi\": 11393,\n         \"ppp\": 9230,\n         \"ppt\": 8842,\n         \"pptv\": 12123,\n         \"pr\": 9470,\n         \"prada\": 11617,\n         \"pre\": 11685,\n         \"prefix\": 11109,\n         \"premium\": 10371,\n         \"press\": 9228,\n         \"previous\": 12194,\n         \"price\": 11597,\n         \"prime\": 10891,\n         \"privacy\": 8677,\n         \"private\": 13233,\n         \"pro\": 8376,\n         \"process\": 12009,\n         \"product\": 11691,\n         \"profile\": 11675,\n         \"program\": 11738,\n         \"project\": 9284,\n         \"protected\": 9562,\n         \"ps\": 8362,\n         \"ps3\": 11802,\n         \"ps4\": 9986,\n         \"psp\": 11337,\n         \"pt\": 10791,\n         \"ptt\": 9773,\n         \"pu\": 11227,\n         \"public\": 10672,\n         \"published\": 12821,\n         \"publishing\": 13306,\n         \"puma\": 11803,\n         \"pure\": 13179,\n         \"push\": 11604,\n         \"pv\": 10415,\n         \"pvc\": 8656,\n         \"pvp\": 10193,\n         \"pwm\": 11840,\n         \"python\": 9030,\n         \"q\": 159,\n         \"q1\": 10670,\n         \"q10\": 11382,\n         \"q2\": 9898,\n         \"q3\": 10982,\n         \"q4\": 11625,\n         \"q5\": 11871,\n         \"q7\": 12938,\n         \"qa\": 10818,\n         \"qe\": 11534,\n         \"qi\": 11566,\n         \"qq\": 8186,\n         \"qqmei\": 12011,\n         \"qr\": 9830,\n         \"qs\": 11974,\n         \"qt\": 12933,\n         \"qualcomm\": 13264,\n         \"queen\": 11032,\n         \"quick\": 12345,\n         \"quot\": 10733,\n         \"qvod\": 10554,\n         \"r\": 160,\n         \"r1\": 12026,\n         \"r11\": 10808,\n         \"r2\": 11345,\n         \"r8\": 10187,\n         \"r9\": 12674,\n         \"ra\": 12619,\n         \"radio\": 11034,\n         \"raid\": 11044,\n         \"rain\": 11873,\n         \"rainer\": 13076,\n         \"rakuten\": 10249,\n         \"ram\": 9270,\n         \"rar\": 12773,\n         \"rate\": 12597,\n         \"raw\": 11265,\n         \"ray\": 10043,\n         \"rc\": 11746,\n         \"rcep\": 12361,\n         \"rd\": 11952,\n         \"rdquo\": 11071,\n         \"re\": 8847,\n         \"read\": 8649,\n         \"reader\": 11453,\n         \"reading\": 10303,\n         \"real\": 10153,\n         \"rebecca\": 10418,\n         \"red\": 9276,\n         \"redis\": 12599,\n         \"related\": 11148,\n         \"release\": 13017,\n         \"rends\": 9838,\n         \"reply\": 9008,\n         \"report\": 10407,\n         \"request\": 12931,\n         \"research\": 10018,\n         \"reserved\": 9644,\n         \"resort\": 10401,\n         \"restaurant\": 10637,\n         \"result\": 13170,\n         \"return\": 12330,\n         \"reuters\": 11778,\n         \"review\": 9950,\n         \"rewards\": 10197,\n         \"rf\": 10586,\n         \"rfid\": 10292,\n         \"rgb\": 11189,\n         \"rich\": 13210,\n         \"richard\": 9875,\n         \"rick\": 13253,\n         \"right\": 10378,\n         \"rights\": 9615,\n         \"river\": 10835,\n         \"rm\": 10620,\n         \"rmb\": 10887,\n         \"rmk\": 13091,\n         \"rmvb\": 9365,\n         \"rn\": 11998,\n         \"rna\": 11656,\n         \"ro\": 12910,\n         \"road\": 9772,\n         \"robert\": 9441,\n         \"rock\": 10092,\n         \"roger\": 13033,\n         \"rom\": 8891,\n         \"room\": 10083,\n         \"root\": 8859,\n         \"rose\": 9497,\n         \"rosie\": 10487,\n         \"royal\": 11019,\n         \"rp\": 12771,\n         \"rpg\": 9278,\n         \"rq\": 11635,\n         \"rs\": 10610,\n         \"rss\": 8605,\n         \"rt\": 10678,\n         \"ru\": 12818,\n         \"ruby\": 10567,\n         \"run\": 9909,\n         \"running\": 11620,\n         \"russell\": 11514,\n         \"rx\": 12342,\n         \"ryan\": 11536,\n         \"s\": 161,\n         \"s1\": 10640,\n         \"s2\": 11302,\n         \"s3\": 10647,\n         \"s4\": 11352,\n         \"s5\": 11161,\n         \"s6\": 10470,\n         \"s7\": 9821,\n         \"s8\": 8940,\n         \"sa\": 8945,\n         \"saas\": 10362,\n         \"safari\": 8580,\n         \"said\": 8385,\n         \"saint\": 10484,\n         \"sale\": 12133,\n         \"salvatore\": 10078,\n         \"sam\": 10088,\n         \"samsung\": 8931,\n         \"san\": 9542,\n         \"santa\": 12321,\n         \"sao\": 12053,\n         \"sap\": 11708,\n         \"sarah\": 12455,\n         \"sars\": 12390,\n         \"sas\": 12120,\n         \"sat\": 8536,\n         \"sata\": 11535,\n         \"save\": 13069,\n         \"say\": 10114,\n         \"says\": 9739,\n         \"sb\": 12359,\n         \"sbl\": 12250,\n         \"sbs\": 9965,\n         \"sc\": 11515,\n         \"schemas\": 11847,\n         \"school\": 9467,\n         \"sci\": 11776,\n         \"science\": 9982,\n         \"scott\": 10692,\n         \"scp\": 10547,\n         \"script\": 10860,\n         \"scrum\": 12527,\n         \"sd\": 9201,\n         \"sdk\": 10302,\n         \"se\": 9342,\n         \"sea\": 11007,\n         \"sean\": 12794,\n         \"search\": 9168,\n         \"season\": 11220,\n         \"second\": 12462,\n         \"secret\": 11634,\n         \"security\": 11547,\n         \"see\": 10235,\n         \"select\": 10634,\n         \"self\": 12178,\n         \"sense\": 12647,\n         \"seo\": 8475,\n         \"sep\": 9463,\n         \"september\": 10024,\n         \"series\": 10976,\n         \"server\": 8896,\n         \"service\": 9176,\n         \"services\": 11936,\n         \"session\": 11605,\n         \"set\": 9738,\n         \"seven\": 12684,\n         \"sex\": 11288,\n         \"sf\": 11176,\n         \"sg\": 12954,\n         \"sgs\": 11357,\n         \"sh\": 11167,\n         \"shadow\": 12378,\n         \"share\": 8697,\n         \"she\": 9374,\n         \"shell\": 10651,\n         \"shi\": 11772,\n         \"shift\": 10866,\n         \"shirt\": 12060,\n         \"shop\": 9926,\n         \"shopping\": 9662,\n         \"show\": 8658,\n         \"shtml\": 11501,\n         \"si\": 10883,\n         \"side\": 12666,\n         \"sidebar\": 11212,\n         \"sign\": 12710,\n         \"silver\": 13230,\n         \"sim\": 8703,\n         \"simon\": 10944,\n         \"simple\": 11996,\n         \"sina\": 9606,\n         \"singapore\": 12916,\n         \"single\": 12148,\n         \"sir\": 10171,\n         \"siri\": 10309,\n         \"site\": 11215,\n         \"size\": 9571,\n         \"sk\": 9820,\n         \"skin\": 12479,\n         \"skip\": 8973,\n         \"sky\": 10122,\n         \"skype\": 9713,\n         \"sm\": 9158,\n         \"small\": 11988,\n         \"smap\": 13175,\n         \"smart\": 9353,\n         \"smith\": 9912,\n         \"sms\": 12990,\n         \"sns\": 10884,\n         \"so\": 8968,\n         \"soc\": 11405,\n         \"social\": 10832,\n         \"society\": 11573,\n         \"sodu\": 9637,\n         \"sofascore\": 11555,\n         \"soft\": 12567,\n         \"software\": 11735,\n         \"sogo\": 10275,\n         \"soho\": 10831,\n         \"sohu\": 12610,\n         \"solo\": 11659,\n         \"some\": 13048,\n         \"something\": 12713,\n         \"song\": 11502,\n         \"sony\": 8772,\n         \"sophie\": 12127,\n         \"sorry\": 12758,\n         \"sotheby\": 12665,\n         \"soul\": 12286,\n         \"sound\": 12516,\n         \"source\": 9014,\n         \"south\": 10801,\n         \"sp\": 9716,\n         \"spa\": 8509,\n         \"space\": 9634,\n         \"span\": 12537,\n         \"spark\": 11134,\n         \"special\": 9969,\n         \"speed\": 12755,\n         \"spf\": 12598,\n         \"sport\": 10669,\n         \"sports\": 10646,\n         \"spotify\": 11170,\n         \"spring\": 11043,\n         \"sputniknews\": 11376,\n         \"sql\": 9078,\n         \"square\": 10897,\n         \"sr\": 12109,\n         \"ss\": 10239,\n         \"ssd\": 9004,\n         \"ssh\": 11678,\n         \"ssl\": 9708,\n         \"sso\": 11499,\n         \"st\": 8811,\n         \"stage\": 12731,\n         \"standard\": 12038,\n         \"star\": 9012,\n         \"starbucks\": 12919,\n         \"start\": 10906,\n         \"state\": 10223,\n         \"states\": 11603,\n         \"station\": 10459,\n         \"stay\": 11527,\n         \"steam\": 9325,\n         \"step\": 9451,\n         \"step1\": 8905,\n         \"step2\": 8924,\n         \"step3\": 9434,\n         \"step4\": 9504,\n         \"step5\": 10338,\n         \"stephen\": 10913,\n         \"steve\": 9812,\n         \"steven\": 12174,\n         \"stone\": 11073,\n         \"stop\": 11467,\n         \"store\": 8719,\n         \"story\": 10076,\n         \"street\": 9471,\n         \"string\": 11508,\n         \"strong\": 11732,\n         \"structure\": 13286,\n         \"studio\": 8318,\n         \"study\": 12685,\n         \"style\": 8969,\n         \"su\": 11541,\n         \"sui\": 10997,\n         \"suite\": 11420,\n         \"summer\": 10366,\n         \"sun\": 8482,\n         \"sunday\": 11548,\n         \"sunny\": 11182,\n         \"super\": 8988,\n         \"support\": 11664,\n         \"supreme\": 11272,\n         \"surface\": 9623,\n         \"survey\": 8704,\n         \"suv\": 8540,\n         \"swatch\": 11876,\n         \"sweet\": 10598,\n         \"swift\": 10081,\n         \"swiss\": 11503,\n         \"swissinfo\": 10661,\n         \"switch\": 10746,\n         \"sylvia\": 12500,\n         \"sync\": 13193,\n         \"system\": 8566,\n         \"systems\": 12451,\n         \"t\": 162,\n         \"t1\": 10585,\n         \"t2\": 10927,\n         \"t3\": 11291,\n         \"ta\": 8346,\n         \"tab\": 10476,\n         \"table\": 10809,\n         \"tag\": 8801,\n         \"tags\": 9214,\n         \"tai\": 13242,\n         \"taipei\": 9858,\n         \"taiwan\": 8674,\n         \"take\": 10985,\n         \"talk\": 9533,\n         \"talk2yam\": 8767,\n         \"tan\": 12886,\n         \"target\": 11926,\n         \"taylor\": 11053,\n         \"tb\": 11456,\n         \"tbs\": 11773,\n         \"tc\": 12858,\n         \"tcl\": 9443,\n         \"tcp\": 9901,\n         \"tcs\": 10363,\n         \"td\": 9287,\n         \"te\": 8282,\n         \"tea\": 9686,\n         \"team\": 9597,\n         \"tech\": 11402,\n         \"technology\": 11061,\n         \"techorz\": 12389,\n         \"ted\": 11398,\n         \"teddy\": 12764,\n         \"tee\": 11330,\n         \"tel\": 11108,\n         \"tesla\": 11564,\n         \"test\": 10060,\n         \"text\": 10539,\n         \"tf\": 12719,\n         \"tft\": 12177,\n         \"thai\": 12967,\n         \"than\": 13158,\n         \"that\": 9231,\n         \"the\": 8174,\n         \"there\": 11136,\n         \"they\": 12013,\n         \"think\": 12553,\n         \"thinkpad\": 12525,\n         \"this\": 8554,\n         \"thomas\": 10010,\n         \"thread\": 11164,\n         \"three\": 8844,\n         \"thu\": 8610,\n         \"thunder\": 11322,\n         \"ti\": 9654,\n         \"tiffany\": 11509,\n         \"tiger\": 12088,\n         \"tila\": 10396,\n         \"tim\": 10505,\n         \"time\": 8759,\n         \"times\": 9886,\n         \"tina\": 12925,\n         \"tinker\": 11254,\n         \"tips\": 9104,\n         \"title\": 9956,\n         \"tm\": 9908,\n         \"tmt\": 11920,\n         \"to\": 8228,\n         \"today\": 11262,\n         \"tokichoi\": 13086,\n         \"tokyo\": 10357,\n         \"tom\": 9487,\n         \"tomtom\": 12196,\n         \"tony\": 10478,\n         \"too\": 11928,\n         \"top\": 8237,\n         \"top10\": 10466,\n         \"top100\": 10124,\n         \"topapp\": 10607,\n         \"topios9\": 12994,\n         \"touch\": 8915,\n         \"tour\": 10181,\n         \"tower\": 11102,\n         \"town\": 11445,\n         \"toyota\": 10632,\n         \"tpp\": 8855,\n         \"trackback\": 11827,\n         \"traction\": 12600,\n         \"travel\": 9819,\n         \"trc\": 11885,\n         \"tree\": 10934,\n         \"trip\": 12358,\n         \"tripadvisor\": 8194,\n         \"trivago\": 9963,\n         \"true\": 10213,\n         \"trump\": 9550,\n         \"ts\": 9154,\n         \"tt\": 10333,\n         \"tue\": 8483,\n         \"turbo\": 12325,\n         \"tv\": 8395,\n         \"tvb\": 9312,\n         \"tvbs\": 11657,\n         \"tvg\": 12547,\n         \"tw\": 8351,\n         \"twd600\": 11230,\n         \"tweet\": 9874,\n         \"twice\": 13054,\n         \"twitter\": 8266,\n         \"two\": 10380,\n         \"txt\": 8666,\n         \"type\": 9178,\n         \"u\": 163,\n         \"u11\": 13235,\n         \"ua\": 11107,\n         \"uber\": 8624,\n         \"ubuntu\": 8889,\n         \"ubuntuforumwikilinuxpastechat\": 12076,\n         \"uc\": 9955,\n         \"ucbug\": 11374,\n         \"udn\": 9782,\n         \"udnbkk\": 11339,\n         \"ufo\": 10012,\n         \"uhz\": 11599,\n         \"ui\": 8840,\n         \"uk\": 10375,\n         \"ul\": 10293,\n         \"ultra\": 10893,\n         \"under\": 9997,\n         \"unicode\": 12024,\n         \"union\": 12161,\n         \"uniqlo\": 11905,\n         \"unit\": 12816,\n         \"united\": 9958,\n         \"unity\": 11897,\n         \"universal\": 13229,\n         \"university\": 8736,\n         \"unix\": 10515,\n         \"unt\": 13003,\n         \"up\": 8644,\n         \"update\": 9924,\n         \"ups\": 10846,\n         \"urban\": 13101,\n         \"url\": 8654,\n         \"urn\": 11584,\n         \"us\": 8592,\n         \"usa\": 11583,\n         \"usb\": 8335,\n         \"usb3\": 13255,\n         \"usd\": 9259,\n         \"use\": 11927,\n         \"user\": 9870,\n         \"utc\": 9361,\n         \"uv\": 9473,\n         \"v\": 164,\n         \"v1\": 9074,\n         \"v2\": 9636,\n         \"v3\": 10066,\n         \"v4\": 10942,\n         \"v5\": 11133,\n         \"v6\": 11051,\n         \"v8\": 10662,\n         \"v9\": 11894,\n         \"va\": 12949,\n         \"valley\": 11994,\n         \"value\": 10850,\n         \"van\": 9933,\n         \"vans\": 10412,\n         \"var\": 10433,\n         \"vc\": 9438,\n         \"vcd\": 10280,\n         \"vdc\": 10888,\n         \"vdf\": 13261,\n         \"ve\": 12810,\n         \"ver\": 12513,\n         \"vera\": 9378,\n         \"version\": 11354,\n         \"very\": 11785,\n         \"vetements\": 12859,\n         \"vfm\": 8597,\n         \"vga\": 13140,\n         \"vi\": 10138,\n         \"via\": 10003,\n         \"victoria\": 12445,\n         \"video\": 9539,\n         \"view\": 8876,\n         \"views\": 9881,\n         \"villa\": 10806,\n         \"village\": 12497,\n         \"vim\": 11922,\n         \"vincent\": 10993,\n         \"vip\": 8324,\n         \"virtual\": 12997,\n         \"visa\": 8958,\n         \"vision\": 10762,\n         \"vista\": 9847,\n         \"visual\": 10635,\n         \"vive\": 10167,\n         \"vivi\": 9243,\n         \"vivo\": 9381,\n         \"vm\": 13094,\n         \"vmalife\": 10823,\n         \"vmware\": 11449,\n         \"vogue\": 10137,\n         \"voice\": 11258,\n         \"vol\": 9218,\n         \"volvo\": 11048,\n         \"von\": 12310,\n         \"vornado\": 13036,\n         \"vpn\": 9358,\n         \"vps\": 10027,\n         \"vr\": 8260,\n         \"vs\": 8349,\n         \"vsa\": 10920,\n         \"vsc\": 10933,\n         \"w\": 165,\n         \"wade\": 12542,\n         \"wali\": 10736,\n         \"walker\": 12651,\n         \"wall\": 12284,\n         \"wam\": 9667,\n         \"wan\": 10686,\n         \"wang\": 9660,\n         \"want\": 12733,\n         \"wap\": 9530,\n         \"war\": 10783,\n         \"was\": 9947,\n         \"washington\": 12262,\n         \"watch\": 9114,\n         \"water\": 11060,\n         \"wave\": 12761,\n         \"way\": 10590,\n         \"waze\": 12836,\n         \"wd\": 12741,\n         \"we\": 8997,\n         \"wear\": 12679,\n         \"web\": 8353,\n         \"web885\": 8437,\n         \"wed\": 8585,\n         \"wedding\": 10826,\n         \"week\": 10090,\n         \"weeks\": 11973,\n         \"wei\": 11875,\n         \"weibo\": 10565,\n         \"welcome\": 12759,\n         \"well\": 12010,\n         \"west\": 8520,\n         \"westbrook\": 11771,\n         \"what\": 9100,\n         \"whatsapp\": 10250,\n         \"when\": 11611,\n         \"where\": 11703,\n         \"white\": 9790,\n         \"who\": 9372,\n         \"why\": 11177,\n         \"wi\": 8541,\n         \"wifi\": 8306,\n         \"wii\": 11372,\n         \"wiki\": 8548,\n         \"wikia\": 8708,\n         \"wikipedia\": 11850,\n         \"will\": 9339,\n         \"william\": 9979,\n         \"williams\": 11475,\n         \"wilson\": 12348,\n         \"win\": 9769,\n         \"win10\": 8634,\n         \"win7\": 8586,\n         \"win8\": 9436,\n         \"wind\": 12302,\n         \"window\": 12158,\n         \"windows\": 8235,\n         \"windows7\": 12258,\n         \"wine\": 12022,\n         \"wing\": 12349,\n         \"winrar\": 9476,\n         \"wish\": 12255,\n         \"with\": 8663,\n         \"wma\": 9900,\n         \"women\": 12912,\n         \"wonderland\": 9113,\n         \"wong\": 11615,\n         \"word\": 8681,\n         \"wordpress\": 8627,\n         \"work\": 10782,\n         \"works\": 13112,\n         \"world\": 8572,\n         \"worldcat\": 10698,\n         \"woshipm\": 9712,\n         \"wow\": 11607,\n         \"wp\": 10031,\n         \"wps\": 11576,\n         \"write\": 12800,\n         \"wto\": 10045,\n         \"wu\": 10552,\n         \"ww\": 13279,\n         \"wwdc\": 12848,\n         \"www\": 8173,\n         \"wx17house\": 9973,\n         \"x\": 166,\n         \"x1\": 9566,\n         \"x2\": 10104,\n         \"x3\": 10689,\n         \"x4\": 12124,\n         \"x5\": 10871,\n         \"x6\": 12121,\n         \"x7\": 12049,\n         \"x86\": 10652,\n         \"x9\": 12460,\n         \"xa\": 12626,\n         \"xbox\": 9077,\n         \"xd\": 8444,\n         \"xdd\": 11507,\n         \"xddd\": 12059,\n         \"xi\": 13135,\n         \"xl\": 10657,\n         \"xml\": 9094,\n         \"xp\": 8766,\n         \"xperia\": 9817,\n         \"xr\": 11165,\n         \"xuehai\": 10528,\n         \"xuite\": 13194,\n         \"xx\": 8584,\n         \"xxx\": 8790,\n         \"xxxx\": 12243,\n         \"xyz\": 11266,\n         \"xz\": 12999,\n         \"y\": 167,\n         \"ya\": 12066,\n         \"yahoo\": 8497,\n         \"yam\": 8107,\n         \"yamservice\": 8768,\n         \"yang\": 12086,\n         \"year\": 9299,\n         \"years\": 8753,\n         \"yes\": 9719,\n         \"yesstyle\": 12983,\n         \"yi\": 11242,\n         \"yin\": 13178,\n         \"yoga\": 13296,\n         \"york\": 9507,\n         \"you\": 8357,\n         \"yougou\": 10852,\n         \"young\": 9802,\n         \"your\": 8880,\n         \"youtube\": 8487,\n         \"yu\": 10825,\n         \"yumi\": 11697,\n         \"yy\": 9453,\n         \"z\": 168,\n         \"z2\": 12568,\n         \"zara\": 10464,\n         \"zen\": 12923,\n         \"zenfone\": 11726,\n         \"zero\": 10397,\n         \"zh\": 9998,\n         \"zip\": 10947,\n         \"zol\": 12182,\n         \"zone\": 11957,\n         \"zoom\": 12356,\n         \"{\": 169,\n         \"|\": 170,\n         \"}\": 171,\n         \"~\": 172,\n         \"£\": 173,\n         \"¤\": 174,\n         \"¥\": 175,\n         \"§\": 176,\n         \"©\": 177,\n         \"«\": 178,\n         \"®\": 179,\n         \"°\": 180,\n         \"±\": 181,\n         \"±0\": 11349,\n         \"²\": 182,\n         \"³\": 183,\n         \"µ\": 184,\n         \"·\": 185,\n         \"¹\": 186,\n         \"º\": 187,\n         \"»\": 188,\n         \"¼\": 189,\n         \"×\": 190,\n         \"×email\": 11175,\n         \"××\": 8858,\n         \"ß\": 191,\n         \"æ\": 192,\n         \"÷\": 193,\n         \"ø\": 194,\n         \"đ\": 195,\n         \"ŋ\": 196,\n         \"ɔ\": 197,\n         \"ə\": 198,\n         \"ɡ\": 199,\n         \"ʰ\": 200,\n         \"ˇ\": 201,\n         \"ˈ\": 202,\n         \"ˊ\": 203,\n         \"ˋ\": 204,\n         \"ˋ▽ˊ\": 12416,\n         \"ˍ\": 205,\n         \"ː\": 206,\n         \"˙\": 207,\n         \"˚\": 208,\n         \"ˢ\": 209,\n         \"α\": 210,\n         \"β\": 211,\n         \"γ\": 212,\n         \"δ\": 213,\n         \"ε\": 214,\n         \"η\": 215,\n         \"θ\": 216,\n         \"ι\": 217,\n         \"κ\": 218,\n         \"λ\": 219,\n         \"μ\": 220,\n         \"ν\": 221,\n         \"ο\": 222,\n         \"π\": 223,\n         \"ρ\": 224,\n         \"ς\": 225,\n         \"σ\": 226,\n         \"τ\": 227,\n         \"υ\": 228,\n         \"φ\": 229,\n         \"χ\": 230,\n         \"ψ\": 231,\n         \"ω\": 232,\n         \"а\": 233,\n         \"б\": 234,\n         \"в\": 235,\n         \"г\": 236,\n         \"д\": 237,\n         \"е\": 238,\n         \"ж\": 239,\n         \"з\": 240,\n         \"и\": 241,\n         \"к\": 242,\n         \"л\": 243,\n         \"м\": 244,\n         \"н\": 245,\n         \"о\": 246,\n         \"п\": 247,\n         \"р\": 248,\n         \"с\": 249,\n         \"т\": 250,\n         \"у\": 251,\n         \"ф\": 252,\n         \"х\": 253,\n         \"ц\": 254,\n         \"ч\": 255,\n         \"ш\": 256,\n         \"ы\": 257,\n         \"ь\": 258,\n         \"я\": 259,\n         \"і\": 260,\n         \"ا\": 261,\n         \"ب\": 262,\n         \"ة\": 263,\n         \"ت\": 264,\n         \"د\": 265,\n         \"ر\": 266,\n         \"س\": 267,\n         \"ع\": 268,\n         \"ل\": 269,\n         \"م\": 270,\n         \"ن\": 271,\n         \"ه\": 272,\n         \"و\": 273,\n         \"ي\": 274,\n         \"۩\": 275,\n         \"ก\": 276,\n         \"ง\": 277,\n         \"น\": 278,\n         \"ม\": 279,\n         \"ย\": 280,\n         \"ร\": 281,\n         \"อ\": 282,\n         \"า\": 283,\n         \"เ\": 284,\n         \"๑\": 285,\n         \"་\": 286,\n         \"ღ\": 287,\n         \"ᄀ\": 288,\n         \"ᄁ\": 289,\n         \"ᄂ\": 290,\n         \"ᄃ\": 291,\n         \"ᄅ\": 292,\n         \"ᄆ\": 293,\n         \"ᄇ\": 294,\n         \"ᄈ\": 295,\n         \"ᄉ\": 296,\n         \"ᄋ\": 297,\n         \"ᄌ\": 298,\n         \"ᄎ\": 299,\n         \"ᄏ\": 300,\n         \"ᄐ\": 301,\n         \"ᄑ\": 302,\n         \"ᄒ\": 303,\n         \"ᅡ\": 304,\n         \"ᅢ\": 305,\n         \"ᅣ\": 306,\n         \"ᅥ\": 307,\n         \"ᅦ\": 308,\n         \"ᅧ\": 309,\n         \"ᅨ\": 310,\n         \"ᅩ\": 311,\n         \"ᅪ\": 312,\n         \"ᅬ\": 313,\n         \"ᅭ\": 314,\n         \"ᅮ\": 315,\n         \"ᅯ\": 316,\n         \"ᅲ\": 317,\n         \"ᅳ\": 318,\n         \"ᅴ\": 319,\n         \"ᅵ\": 320,\n         \"ᆨ\": 321,\n         \"ᆫ\": 322,\n         \"ᆯ\": 323,\n         \"ᆷ\": 324,\n         \"ᆸ\": 325,\n         \"ᆺ\": 326,\n         \"ᆻ\": 327,\n         \"ᆼ\": 328,\n         \"ᗜ\": 329,\n         \"ᵃ\": 330,\n         \"ᵉ\": 331,\n         \"ᵍ\": 332,\n         \"ᵏ\": 333,\n         \"ᵐ\": 334,\n         \"ᵒ\": 335,\n         \"ᵘ\": 336,\n         \"‖\": 337,\n         \"„\": 338,\n         \"†\": 339,\n         \"•\": 340,\n         \"‥\": 341,\n         \"‧\": 342,\n         \" \": 343,\n         \"‰\": 344,\n         \"′\": 345,\n         \"″\": 346,\n         \"‹\": 347,\n         \"›\": 348,\n         \"※\": 349,\n         \"‿\": 350,\n         \"⁄\": 351,\n         \"ⁱ\": 352,\n         \"⁺\": 353,\n         \"ⁿ\": 354,\n         \"₁\": 355,\n         \"₂\": 356,\n         \"₃\": 357,\n         \"₄\": 358,\n         \"€\": 359,\n         \"℃\": 360,\n         \"№\": 361,\n         \"™\": 362,\n         \"ⅰ\": 363,\n         \"ⅱ\": 364,\n         \"ⅲ\": 365,\n         \"ⅳ\": 366,\n         \"ⅴ\": 367,\n         \"←\": 368,\n         \"↑\": 369,\n         \"→\": 370,\n         \"↓\": 371,\n         \"↓↓\": 12558,\n         \"↓↓↓\": 9010,\n         \"↔\": 372,\n         \"↗\": 373,\n         \"↘\": 374,\n         \"⇒\": 375,\n         \"∀\": 376,\n         \"−\": 377,\n         \"∕\": 378,\n         \"∙\": 379,\n         \"√\": 380,\n         \"∞\": 381,\n         \"∟\": 382,\n         \"∟∣\": 12979,\n         \"∠\": 383,\n         \"∣\": 384,\n         \"∥\": 385,\n         \"∩\": 386,\n         \"∮\": 387,\n         \"∶\": 388,\n         \"∼\": 389,\n         \"∽\": 390,\n         \"≈\": 391,\n         \"≒\": 392,\n         \"≡\": 393,\n         \"≤\": 394,\n         \"≥\": 395,\n         \"≦\": 396,\n         \"≧\": 397,\n         \"≪\": 398,\n         \"≫\": 399,\n         \"⊙\": 400,\n         \"⋅\": 401,\n         \"⋈\": 402,\n         \"⋯\": 403,\n         \"⋯⋯\": 10169,\n         \"⌒\": 404,\n         \"①\": 405,\n         \"②\": 406,\n         \"③\": 407,\n         \"④\": 408,\n         \"⑤\": 409,\n         \"⑥\": 410,\n         \"⑦\": 411,\n         \"⑧\": 412,\n         \"⑨\": 413,\n         \"⑩\": 414,\n         \"⑴\": 415,\n         \"⑵\": 416,\n         \"⑶\": 417,\n         \"⑷\": 418,\n         \"⑸\": 419,\n         \"⒈\": 420,\n         \"⒉\": 421,\n         \"⒊\": 422,\n         \"⒋\": 423,\n         \"ⓒ\": 424,\n         \"ⓔ\": 425,\n         \"ⓘ\": 426,\n         \"─\": 427,\n         \"──\": 8297,\n         \"━\": 428,\n         \"│\": 429,\n         \"┃\": 430,\n         \"┅\": 431,\n         \"┆\": 432,\n         \"┊\": 433,\n         \"┌\": 434,\n         \"└\": 435,\n         \"├\": 436,\n         \"┣\": 437,\n         \"═\": 438,\n         \"║\": 439,\n         \"╚\": 440,\n         \"╞\": 441,\n         \"╠\": 442,\n         \"╭\": 443,\n         \"╮\": 444,\n         \"╯\": 445,\n         \"╰\": 446,\n         \"╱\": 447,\n         \"╳\": 448,\n         \"▂\": 449,\n         \"▃\": 450,\n         \"▅\": 451,\n         \"▇\": 452,\n         \"█\": 453,\n         \"▉\": 454,\n         \"▋\": 455,\n         \"▌\": 456,\n         \"▌♥\": 9601,\n         \"▍\": 457,\n         \"▎\": 458,\n         \"■\": 459,\n         \"□\": 460,\n         \"▪\": 461,\n         \"▫\": 462,\n         \"▬\": 463,\n         \"▲\": 464,\n         \"▲top\": 9125,\n         \"▲topapr\": 10162,\n         \"▲topaug\": 10558,\n         \"▲topdec\": 10499,\n         \"▲topfeb\": 10663,\n         \"▲topjan\": 10601,\n         \"▲topjul\": 10572,\n         \"▲topjun\": 10263,\n         \"▲topmar\": 10172,\n         \"▲topmay\": 10144,\n         \"▲topnov\": 10502,\n         \"▲topoct\": 10135,\n         \"▲topsep\": 10625,\n         \"△\": 465,\n         \"▶\": 466,\n         \"►\": 467,\n         \"▼\": 468,\n         \"▽\": 469,\n         \"◆\": 470,\n         \"◆◆\": 11146,\n         \"◇\": 471,\n         \"○\": 472,\n         \"○○\": 9423,\n         \"◎\": 473,\n         \"●\": 474,\n         \"◕\": 475,\n         \"◠\": 476,\n         \"◢\": 477,\n         \"◤\": 478,\n         \"☀\": 479,\n         \"★\": 480,\n         \"★★\": 10034,\n         \"★★★\": 10559,\n         \"★★★★\": 11815,\n         \"★★★★★\": 10349,\n         \"☆\": 481,\n         \"☆☆☆\": 12201,\n         \"☕\": 482,\n         \"☞\": 483,\n         \"☺\": 484,\n         \"☼\": 485,\n         \"♀\": 486,\n         \"♂\": 487,\n         \"♠\": 488,\n         \"♡\": 489,\n         \"♣\": 490,\n         \"♥\": 491,\n         \"♥yoyo♥\": 8948,\n         \"♦\": 492,\n         \"♪\": 493,\n         \"♫\": 494,\n         \"♬\": 495,\n         \"✈\": 496,\n         \"✔\": 497,\n         \"✕\": 498,\n         \"✖\": 499,\n         \"✦\": 500,\n         \"✨\": 501,\n         \"✪\": 502,\n         \"✰\": 503,\n         \"✿\": 504,\n         \"❀\": 505,\n         \"❤\": 506,\n         \"❤2017\": 8558,\n         \"➜\": 507,\n         \"➤\": 508,\n         \"⦿\": 509,\n         \"、\": 510,\n         \"。\": 511,\n         \"〃\": 512,\n         \"々\": 513,\n         \"〇\": 514,\n         \"〈\": 515,\n         \"〉\": 516,\n         \"《\": 517,\n         \"》\": 518,\n         \"「\": 519,\n         \"」\": 520,\n         \"『\": 521,\n         \"』\": 522,\n         \"【\": 523,\n         \"】\": 524,\n         \"〓\": 525,\n         \"〔\": 526,\n         \"〕\": 527,\n         \"〖\": 528,\n         \"〗\": 529,\n         \"〜\": 530,\n         \"〝\": 531,\n         \"〞\": 532,\n         \"ぁ\": 533,\n         \"あ\": 534,\n         \"あり\": 10617,\n         \"ありな\": 13022,\n         \"あります\": 12737,\n         \"ぃ\": 535,\n         \"い\": 536,\n         \"いいえ\": 8938,\n         \"いお\": 11481,\n         \"いします\": 10342,\n         \"いた\": 12312,\n         \"いて\": 11232,\n         \"いてす\": 12837,\n         \"います\": 9466,\n         \"いを\": 12029,\n         \"う\": 537,\n         \"ぇ\": 538,\n         \"え\": 539,\n         \"えて\": 13095,\n         \"える\": 10382,\n         \"お\": 540,\n         \"か\": 541,\n         \"かあります\": 11163,\n         \"かある\": 10070,\n         \"かお\": 11252,\n         \"かかります\": 9791,\n         \"かこさいます\": 12835,\n         \"から\": 8526,\n         \"からお\": 9669,\n         \"からの\": 12498,\n         \"き\": 542,\n         \"きな\": 10423,\n         \"きなしソフトサーヒス\": 11811,\n         \"きを\": 10995,\n         \"く\": 543,\n         \"くたさい\": 9052,\n         \"くの\": 13167,\n         \"け\": 544,\n         \"けた\": 13182,\n         \"けます\": 11841,\n         \"ける\": 11132,\n         \"こ\": 545,\n         \"この\": 9134,\n         \"さ\": 546,\n         \"さい\": 9728,\n         \"された\": 10438,\n         \"されています\": 9604,\n         \"されます\": 12001,\n         \"される\": 12033,\n         \"さん\": 10533,\n         \"さんも\": 11835,\n         \"し\": 547,\n         \"しい\": 8596,\n         \"しかし\": 12906,\n         \"しく\": 9859,\n         \"した\": 8819,\n         \"して\": 8648,\n         \"しています\": 9257,\n         \"している\": 10084,\n         \"しているから\": 12004,\n         \"していると\": 11915,\n         \"しており\": 12340,\n         \"してくたさい\": 10650,\n         \"してくたさい♪この\": 12151,\n         \"してみてくたさいね\": 12142,\n         \"しにはとんとんワークケートを\": 12152,\n         \"しの\": 10270,\n         \"しました\": 10182,\n         \"します\": 8845,\n         \"す\": 548,\n         \"すく\": 12616,\n         \"する\": 8553,\n         \"することかてきます\": 11743,\n         \"するとあなたにもっとマッチした\": 12153,\n         \"せ\": 549,\n         \"せからこ\": 12150,\n         \"せます\": 10046,\n         \"せよ\": 12767,\n         \"そ\": 550,\n         \"そして\": 11812,\n         \"その\": 8782,\n         \"そんな\": 11950,\n         \"た\": 551,\n         \"たと\": 12883,\n         \"ち\": 552,\n         \"ちてすか\": 9880,\n         \"ちてない\": 9804,\n         \"っ\": 553,\n         \"った\": 9179,\n         \"って\": 9127,\n         \"っています\": 12202,\n         \"っている\": 11859,\n         \"ってくたさい\": 12900,\n         \"つ\": 554,\n         \"て\": 555,\n         \"てある\": 12190,\n         \"てお\": 10393,\n         \"てきちゃいます\": 12136,\n         \"てきます\": 11397,\n         \"てきる\": 12313,\n         \"てした\": 11331,\n         \"てす\": 8296,\n         \"てすか\": 11244,\n         \"ての\": 9697,\n         \"ては\": 9418,\n         \"ても\": 9272,\n         \"と\": 556,\n         \"という\": 10741,\n         \"として\": 10147,\n         \"とても\": 12709,\n         \"との\": 11093,\n         \"とは\": 11556,\n         \"な\": 557,\n         \"なお\": 12663,\n         \"なし\": 9930,\n         \"なと\": 9744,\n         \"なとの\": 10435,\n         \"なとはお\": 12143,\n         \"なのて\": 10925,\n         \"なら\": 12604,\n         \"ならワークケートへ\": 12154,\n         \"に\": 558,\n         \"にお\": 10768,\n         \"にこ\": 13059,\n         \"について\": 10779,\n         \"になります\": 11028,\n         \"になる\": 9322,\n         \"には\": 8738,\n         \"にも\": 9328,\n         \"により\": 11301,\n         \"による\": 12228,\n         \"ぬ\": 559,\n         \"ね\": 560,\n         \"の\": 561,\n         \"のある\": 10492,\n         \"のお\": 8751,\n         \"のこ\": 13016,\n         \"のないフロクに\": 10900,\n         \"のハイト\": 10583,\n         \"は\": 562,\n         \"はい\": 9781,\n         \"はお\": 13232,\n         \"はしめまして\": 13012,\n         \"はすへて\": 11899,\n         \"は１ヶ\": 11638,\n         \"ひ\": 563,\n         \"ふ\": 564,\n         \"へ\": 565,\n         \"への\": 11021,\n         \"ほ\": 566,\n         \"ま\": 567,\n         \"ます\": 11105,\n         \"また\": 9301,\n         \"または\": 12019,\n         \"まて\": 9642,\n         \"み\": 568,\n         \"みいたたけます\": 9825,\n         \"みてす\": 11870,\n         \"みの\": 10354,\n         \"みリストを\": 11196,\n         \"む\": 569,\n         \"め\": 570,\n         \"めた\": 12578,\n         \"めて\": 11967,\n         \"める\": 12368,\n         \"も\": 571,\n         \"もう\": 12187,\n         \"もちろん\": 12868,\n         \"もっと\": 10642,\n         \"もみつかっちゃうかも\": 12155,\n         \"ゃ\": 572,\n         \"や\": 573,\n         \"ゅ\": 574,\n         \"ゆ\": 575,\n         \"ょ\": 576,\n         \"よ\": 577,\n         \"より\": 10230,\n         \"ら\": 578,\n         \"られた\": 11512,\n         \"り\": 579,\n         \"りの\": 10592,\n         \"りは\": 13073,\n         \"る\": 580,\n         \"れ\": 581,\n         \"れた\": 13163,\n         \"れる\": 13148,\n         \"ろ\": 582,\n         \"わ\": 583,\n         \"わせ\": 11878,\n         \"を\": 584,\n         \"をお\": 8651,\n         \"をこ\": 10074,\n         \"ん\": 585,\n         \"゜\": 586,\n         \"ゝ\": 587,\n         \"ァ\": 588,\n         \"ア\": 589,\n         \"ィ\": 590,\n         \"イ\": 591,\n         \"イカせるテンマ\": 10885,\n         \"ゥ\": 592,\n         \"ウ\": 593,\n         \"ェ\": 594,\n         \"エ\": 595,\n         \"ォ\": 596,\n         \"オ\": 597,\n         \"オーフン5\": 11810,\n         \"カ\": 598,\n         \"キ\": 599,\n         \"ク\": 600,\n         \"ケ\": 601,\n         \"コ\": 602,\n         \"コメント\": 12167,\n         \"サ\": 603,\n         \"サイト\": 11572,\n         \"サイトは\": 11063,\n         \"サーヒス\": 12501,\n         \"シ\": 604,\n         \"ス\": 605,\n         \"スキル\": 11862,\n         \"スタッフ\": 9903,\n         \"スホンサー\": 10948,\n         \"スホンサーサイト\": 12314,\n         \"セ\": 606,\n         \"ソ\": 607,\n         \"タ\": 608,\n         \"チ\": 609,\n         \"ッ\": 610,\n         \"ツ\": 611,\n         \"テ\": 612,\n         \"テリヘル\": 12739,\n         \"ト\": 613,\n         \"トラックハック\": 12766,\n         \"ナ\": 614,\n         \"ニ\": 615,\n         \"ヌ\": 616,\n         \"ネ\": 617,\n         \"ノ\": 618,\n         \"ハ\": 619,\n         \"ヒ\": 620,\n         \"ヒンクテンマ3\": 10886,\n         \"フ\": 621,\n         \"ヘ\": 622,\n         \"ホ\": 623,\n         \"マ\": 624,\n         \"ミ\": 625,\n         \"ム\": 626,\n         \"メ\": 627,\n         \"メーカー\": 12052,\n         \"モ\": 628,\n         \"ャ\": 629,\n         \"ヤ\": 630,\n         \"ュ\": 631,\n         \"ユ\": 632,\n         \"ョ\": 633,\n         \"ヨ\": 634,\n         \"ラ\": 635,\n         \"リ\": 636,\n         \"リストに\": 11101,\n         \"ル\": 637,\n         \"レ\": 638,\n         \"ロ\": 639,\n         \"ロクイン\": 12071,\n         \"ワ\": 640,\n         \"ワークケートの\": 12156,\n         \"ヲ\": 641,\n         \"ン\": 642,\n         \"ヶ\": 643,\n         \"・\": 644,\n         \"ー\": 645,\n         \"ヽ\": 646,\n         \"ㄅ\": 647,\n         \"ㄆ\": 648,\n         \"ㄇ\": 649,\n         \"ㄉ\": 650,\n         \"ㄋ\": 651,\n         \"ㄌ\": 652,\n         \"ㄍ\": 653,\n         \"ㄎ\": 654,\n         \"ㄏ\": 655,\n         \"ㄒ\": 656,\n         \"ㄚ\": 657,\n         \"ㄛ\": 658,\n         \"ㄞ\": 659,\n         \"ㄟ\": 660,\n         \"ㄢ\": 661,\n         \"ㄤ\": 662,\n         \"ㄥ\": 663,\n         \"ㄧ\": 664,\n         \"ㄨ\": 665,\n         \"ㆍ\": 666,\n         \"㈦\": 667,\n         \"㊣\": 668,\n         \"㎡\": 669,\n         \"㗎\": 670,\n         \"一\": 671,\n         \"丁\": 672,\n         \"七\": 673,\n         \"万\": 674,\n         \"丈\": 675,\n         \"三\": 676,\n         \"上\": 677,\n         \"下\": 678,\n         \"不\": 679,\n         \"与\": 680,\n         \"丐\": 681,\n         \"丑\": 682,\n         \"专\": 683,\n         \"且\": 684,\n         \"丕\": 685,\n         \"世\": 686,\n         \"丘\": 687,\n         \"丙\": 688,\n         \"业\": 689,\n         \"丛\": 690,\n         \"东\": 691,\n         \"丝\": 692,\n         \"丞\": 693,\n         \"丟\": 694,\n         \"両\": 695,\n         \"丢\": 696,\n         \"两\": 697,\n         \"严\": 698,\n         \"並\": 699,\n         \"丧\": 700,\n         \"丨\": 701,\n         \"个\": 702,\n         \"丫\": 703,\n         \"中\": 704,\n         \"丰\": 705,\n         \"串\": 706,\n         \"临\": 707,\n         \"丶\": 708,\n         \"丸\": 709,\n         \"丹\": 710,\n         \"为\": 711,\n         \"主\": 712,\n         \"丼\": 713,\n         \"丽\": 714,\n         \"举\": 715,\n         \"丿\": 716,\n         \"乂\": 717,\n         \"乃\": 718,\n         \"久\": 719,\n         \"么\": 720,\n         \"义\": 721,\n         \"之\": 722,\n         \"乌\": 723,\n         \"乍\": 724,\n         \"乎\": 725,\n         \"乏\": 726,\n         \"乐\": 727,\n         \"乒\": 728,\n         \"乓\": 729,\n         \"乔\": 730,\n         \"乖\": 731,\n         \"乗\": 732,\n         \"乘\": 733,\n         \"乙\": 734,\n         \"乜\": 735,\n         \"九\": 736,\n         \"乞\": 737,\n         \"也\": 738,\n         \"习\": 739,\n         \"乡\": 740,\n         \"书\": 741,\n         \"乩\": 742,\n         \"买\": 743,\n         \"乱\": 744,\n         \"乳\": 745,\n         \"乾\": 746,\n         \"亀\": 747,\n         \"亂\": 748,\n         \"了\": 749,\n         \"予\": 750,\n         \"争\": 751,\n         \"事\": 752,\n         \"二\": 753,\n         \"于\": 754,\n         \"亏\": 755,\n         \"云\": 756,\n         \"互\": 757,\n         \"五\": 758,\n         \"井\": 759,\n         \"亘\": 760,\n         \"亙\": 761,\n         \"亚\": 762,\n         \"些\": 763,\n         \"亜\": 764,\n         \"亞\": 765,\n         \"亟\": 766,\n         \"亡\": 767,\n         \"亢\": 768,\n         \"交\": 769,\n         \"亥\": 770,\n         \"亦\": 771,\n         \"产\": 772,\n         \"亨\": 773,\n         \"亩\": 774,\n         \"享\": 775,\n         \"京\": 776,\n         \"亭\": 777,\n         \"亮\": 778,\n         \"亲\": 779,\n         \"亳\": 780,\n         \"亵\": 781,\n         \"人\": 782,\n         \"亿\": 783,\n         \"什\": 784,\n         \"仁\": 785,\n         \"仃\": 786,\n         \"仄\": 787,\n         \"仅\": 788,\n         \"仆\": 789,\n         \"仇\": 790,\n         \"今\": 791,\n         \"介\": 792,\n         \"仍\": 793,\n         \"从\": 794,\n         \"仏\": 795,\n         \"仑\": 796,\n         \"仓\": 797,\n         \"仔\": 798,\n         \"仕\": 799,\n         \"他\": 800,\n         \"仗\": 801,\n         \"付\": 802,\n         \"仙\": 803,\n         \"仝\": 804,\n         \"仞\": 805,\n         \"仟\": 806,\n         \"代\": 807,\n         \"令\": 808,\n         \"以\": 809,\n         \"仨\": 810,\n         \"仪\": 811,\n         \"们\": 812,\n         \"仮\": 813,\n         \"仰\": 814,\n         \"仲\": 815,\n         \"件\": 816,\n         \"价\": 817,\n         \"任\": 818,\n         \"份\": 819,\n         \"仿\": 820,\n         \"企\": 821,\n         \"伉\": 822,\n         \"伊\": 823,\n         \"伍\": 824,\n         \"伎\": 825,\n         \"伏\": 826,\n         \"伐\": 827,\n         \"休\": 828,\n         \"伕\": 829,\n         \"众\": 830,\n         \"优\": 831,\n         \"伙\": 832,\n         \"会\": 833,\n         \"伝\": 834,\n         \"伞\": 835,\n         \"伟\": 836,\n         \"传\": 837,\n         \"伢\": 838,\n         \"伤\": 839,\n         \"伦\": 840,\n         \"伪\": 841,\n         \"伫\": 842,\n         \"伯\": 843,\n         \"估\": 844,\n         \"伴\": 845,\n         \"伶\": 846,\n         \"伸\": 847,\n         \"伺\": 848,\n         \"似\": 849,\n         \"伽\": 850,\n         \"佃\": 851,\n         \"但\": 852,\n         \"佇\": 853,\n         \"佈\": 854,\n         \"位\": 855,\n         \"低\": 856,\n         \"住\": 857,\n         \"佐\": 858,\n         \"佑\": 859,\n         \"体\": 860,\n         \"佔\": 861,\n         \"何\": 862,\n         \"佗\": 863,\n         \"佘\": 864,\n         \"余\": 865,\n         \"佚\": 866,\n         \"佛\": 867,\n         \"作\": 868,\n         \"佝\": 869,\n         \"佞\": 870,\n         \"佟\": 871,\n         \"你\": 872,\n         \"佢\": 873,\n         \"佣\": 874,\n         \"佤\": 875,\n         \"佥\": 876,\n         \"佩\": 877,\n         \"佬\": 878,\n         \"佯\": 879,\n         \"佰\": 880,\n         \"佳\": 881,\n         \"併\": 882,\n         \"佶\": 883,\n         \"佻\": 884,\n         \"佼\": 885,\n         \"使\": 886,\n         \"侃\": 887,\n         \"侄\": 888,\n         \"來\": 889,\n         \"侈\": 890,\n         \"例\": 891,\n         \"侍\": 892,\n         \"侏\": 893,\n         \"侑\": 894,\n         \"侖\": 895,\n         \"侗\": 896,\n         \"供\": 897,\n         \"依\": 898,\n         \"侠\": 899,\n         \"価\": 900,\n         \"侣\": 901,\n         \"侥\": 902,\n         \"侦\": 903,\n         \"侧\": 904,\n         \"侨\": 905,\n         \"侬\": 906,\n         \"侮\": 907,\n         \"侯\": 908,\n         \"侵\": 909,\n         \"侶\": 910,\n         \"侷\": 911,\n         \"便\": 912,\n         \"係\": 913,\n         \"促\": 914,\n         \"俄\": 915,\n         \"俊\": 916,\n         \"俎\": 917,\n         \"俏\": 918,\n         \"俐\": 919,\n         \"俑\": 920,\n         \"俗\": 921,\n         \"俘\": 922,\n         \"俚\": 923,\n         \"保\": 924,\n         \"俞\": 925,\n         \"俟\": 926,\n         \"俠\": 927,\n         \"信\": 928,\n         \"俨\": 929,\n         \"俩\": 930,\n         \"俪\": 931,\n         \"俬\": 932,\n         \"俭\": 933,\n         \"修\": 934,\n         \"俯\": 935,\n         \"俱\": 936,\n         \"俳\": 937,\n         \"俸\": 938,\n         \"俺\": 939,\n         \"俾\": 940,\n         \"倆\": 941,\n         \"倉\": 942,\n         \"個\": 943,\n         \"倌\": 944,\n         \"倍\": 945,\n         \"倏\": 946,\n         \"們\": 947,\n         \"倒\": 948,\n         \"倔\": 949,\n         \"倖\": 950,\n         \"倘\": 951,\n         \"候\": 952,\n         \"倚\": 953,\n         \"倜\": 954,\n         \"借\": 955,\n         \"倡\": 956,\n         \"値\": 957,\n         \"倦\": 958,\n         \"倩\": 959,\n         \"倪\": 960,\n         \"倫\": 961,\n         \"倬\": 962,\n         \"倭\": 963,\n         \"倶\": 964,\n         \"债\": 965,\n         \"值\": 966,\n         \"倾\": 967,\n         \"偃\": 968,\n         \"假\": 969,\n         \"偈\": 970,\n         \"偉\": 971,\n         \"偌\": 972,\n         \"偎\": 973,\n         \"偏\": 974,\n         \"偕\": 975,\n         \"做\": 976,\n         \"停\": 977,\n         \"健\": 978,\n         \"側\": 979,\n         \"偵\": 980,\n         \"偶\": 981,\n         \"偷\": 982,\n         \"偻\": 983,\n         \"偽\": 984,\n         \"偿\": 985,\n         \"傀\": 986,\n         \"傅\": 987,\n         \"傍\": 988,\n         \"傑\": 989,\n         \"傘\": 990,\n         \"備\": 991,\n         \"傚\": 992,\n         \"傢\": 993,\n         \"傣\": 994,\n         \"傥\": 995,\n         \"储\": 996,\n         \"傩\": 997,\n         \"催\": 998,\n         \"傭\": 999,\n         \"傲\": 1000,\n         \"傳\": 1001,\n         \"債\": 1002,\n         \"傷\": 1003,\n         \"傻\": 1004,\n         \"傾\": 1005,\n         \"僅\": 1006,\n         \"働\": 1007,\n         \"像\": 1008,\n         \"僑\": 1009,\n         \"僕\": 1010,\n         \"僖\": 1011,\n         \"僚\": 1012,\n         \"僥\": 1013,\n         \"僧\": 1014,\n         \"僭\": 1015,\n         \"僮\": 1016,\n         \"僱\": 1017,\n         \"僵\": 1018,\n         \"價\": 1019,\n         \"僻\": 1020,\n         \"儀\": 1021,\n         \"儂\": 1022,\n         \"億\": 1023,\n         \"儆\": 1024,\n         \"儉\": 1025,\n         \"儋\": 1026,\n         \"儒\": 1027,\n         \"儕\": 1028,\n         \"儘\": 1029,\n         \"償\": 1030,\n         \"儡\": 1031,\n         \"優\": 1032,\n         \"儲\": 1033,\n         \"儷\": 1034,\n         \"儼\": 1035,\n         \"儿\": 1036,\n         \"兀\": 1037,\n         \"允\": 1038,\n         \"元\": 1039,\n         \"兄\": 1040,\n         \"充\": 1041,\n         \"兆\": 1042,\n         \"兇\": 1043,\n         \"先\": 1044,\n         \"光\": 1045,\n         \"克\": 1046,\n         \"兌\": 1047,\n         \"免\": 1048,\n         \"児\": 1049,\n         \"兑\": 1050,\n         \"兒\": 1051,\n         \"兔\": 1052,\n         \"兖\": 1053,\n         \"党\": 1054,\n         \"兜\": 1055,\n         \"兢\": 1056,\n         \"入\": 1057,\n         \"內\": 1058,\n         \"全\": 1059,\n         \"兩\": 1060,\n         \"八\": 1061,\n         \"公\": 1062,\n         \"六\": 1063,\n         \"兮\": 1064,\n         \"兰\": 1065,\n         \"共\": 1066,\n         \"兲\": 1067,\n         \"关\": 1068,\n         \"兴\": 1069,\n         \"兵\": 1070,\n         \"其\": 1071,\n         \"具\": 1072,\n         \"典\": 1073,\n         \"兹\": 1074,\n         \"养\": 1075,\n         \"兼\": 1076,\n         \"兽\": 1077,\n         \"冀\": 1078,\n         \"内\": 1079,\n         \"円\": 1080,\n         \"冇\": 1081,\n         \"冈\": 1082,\n         \"冉\": 1083,\n         \"冊\": 1084,\n         \"册\": 1085,\n         \"再\": 1086,\n         \"冏\": 1087,\n         \"冒\": 1088,\n         \"冕\": 1089,\n         \"冗\": 1090,\n         \"写\": 1091,\n         \"军\": 1092,\n         \"农\": 1093,\n         \"冠\": 1094,\n         \"冢\": 1095,\n         \"冤\": 1096,\n         \"冥\": 1097,\n         \"冨\": 1098,\n         \"冪\": 1099,\n         \"冬\": 1100,\n         \"冯\": 1101,\n         \"冰\": 1102,\n         \"冲\": 1103,\n         \"决\": 1104,\n         \"况\": 1105,\n         \"冶\": 1106,\n         \"冷\": 1107,\n         \"冻\": 1108,\n         \"冼\": 1109,\n         \"冽\": 1110,\n         \"冾\": 1111,\n         \"净\": 1112,\n         \"凄\": 1113,\n         \"准\": 1114,\n         \"凇\": 1115,\n         \"凈\": 1116,\n         \"凉\": 1117,\n         \"凋\": 1118,\n         \"凌\": 1119,\n         \"凍\": 1120,\n         \"减\": 1121,\n         \"凑\": 1122,\n         \"凛\": 1123,\n         \"凜\": 1124,\n         \"凝\": 1125,\n         \"几\": 1126,\n         \"凡\": 1127,\n         \"凤\": 1128,\n         \"処\": 1129,\n         \"凪\": 1130,\n         \"凭\": 1131,\n         \"凯\": 1132,\n         \"凰\": 1133,\n         \"凱\": 1134,\n         \"凳\": 1135,\n         \"凶\": 1136,\n         \"凸\": 1137,\n         \"凹\": 1138,\n         \"出\": 1139,\n         \"击\": 1140,\n         \"函\": 1141,\n         \"凿\": 1142,\n         \"刀\": 1143,\n         \"刁\": 1144,\n         \"刃\": 1145,\n         \"分\": 1146,\n         \"切\": 1147,\n         \"刈\": 1148,\n         \"刊\": 1149,\n         \"刍\": 1150,\n         \"刎\": 1151,\n         \"刑\": 1152,\n         \"划\": 1153,\n         \"列\": 1154,\n         \"刘\": 1155,\n         \"则\": 1156,\n         \"刚\": 1157,\n         \"创\": 1158,\n         \"初\": 1159,\n         \"删\": 1160,\n         \"判\": 1161,\n         \"別\": 1162,\n         \"刨\": 1163,\n         \"利\": 1164,\n         \"刪\": 1165,\n         \"别\": 1166,\n         \"刮\": 1167,\n         \"到\": 1168,\n         \"制\": 1169,\n         \"刷\": 1170,\n         \"券\": 1171,\n         \"刹\": 1172,\n         \"刺\": 1173,\n         \"刻\": 1174,\n         \"刽\": 1175,\n         \"剁\": 1176,\n         \"剂\": 1177,\n         \"剃\": 1178,\n         \"則\": 1179,\n         \"剉\": 1180,\n         \"削\": 1181,\n         \"剋\": 1182,\n         \"剌\": 1183,\n         \"前\": 1184,\n         \"剎\": 1185,\n         \"剐\": 1186,\n         \"剑\": 1187,\n         \"剔\": 1188,\n         \"剖\": 1189,\n         \"剛\": 1190,\n         \"剜\": 1191,\n         \"剝\": 1192,\n         \"剣\": 1193,\n         \"剤\": 1194,\n         \"剥\": 1195,\n         \"剧\": 1196,\n         \"剩\": 1197,\n         \"剪\": 1198,\n         \"副\": 1199,\n         \"割\": 1200,\n         \"創\": 1201,\n         \"剷\": 1202,\n         \"剽\": 1203,\n         \"剿\": 1204,\n         \"劃\": 1205,\n         \"劇\": 1206,\n         \"劈\": 1207,\n         \"劉\": 1208,\n         \"劊\": 1209,\n         \"劍\": 1210,\n         \"劏\": 1211,\n         \"劑\": 1212,\n         \"力\": 1213,\n         \"劝\": 1214,\n         \"办\": 1215,\n         \"功\": 1216,\n         \"加\": 1217,\n         \"务\": 1218,\n         \"劣\": 1219,\n         \"动\": 1220,\n         \"助\": 1221,\n         \"努\": 1222,\n         \"劫\": 1223,\n         \"劭\": 1224,\n         \"励\": 1225,\n         \"劲\": 1226,\n         \"劳\": 1227,\n         \"労\": 1228,\n         \"劵\": 1229,\n         \"効\": 1230,\n         \"劾\": 1231,\n         \"势\": 1232,\n         \"勁\": 1233,\n         \"勃\": 1234,\n         \"勇\": 1235,\n         \"勉\": 1236,\n         \"勋\": 1237,\n         \"勐\": 1238,\n         \"勒\": 1239,\n         \"動\": 1240,\n         \"勖\": 1241,\n         \"勘\": 1242,\n         \"務\": 1243,\n         \"勛\": 1244,\n         \"勝\": 1245,\n         \"勞\": 1246,\n         \"募\": 1247,\n         \"勢\": 1248,\n         \"勤\": 1249,\n         \"勧\": 1250,\n         \"勳\": 1251,\n         \"勵\": 1252,\n         \"勸\": 1253,\n         \"勺\": 1254,\n         \"勻\": 1255,\n         \"勾\": 1256,\n         \"勿\": 1257,\n         \"匀\": 1258,\n         \"包\": 1259,\n         \"匆\": 1260,\n         \"匈\": 1261,\n         \"匍\": 1262,\n         \"匐\": 1263,\n         \"匕\": 1264,\n         \"化\": 1265,\n         \"北\": 1266,\n         \"匙\": 1267,\n         \"匝\": 1268,\n         \"匠\": 1269,\n         \"匡\": 1270,\n         \"匣\": 1271,\n         \"匪\": 1272,\n         \"匮\": 1273,\n         \"匯\": 1274,\n         \"匱\": 1275,\n         \"匹\": 1276,\n         \"区\": 1277,\n         \"医\": 1278,\n         \"匾\": 1279,\n         \"匿\": 1280,\n         \"區\": 1281,\n         \"十\": 1282,\n         \"千\": 1283,\n         \"卅\": 1284,\n         \"升\": 1285,\n         \"午\": 1286,\n         \"卉\": 1287,\n         \"半\": 1288,\n         \"卍\": 1289,\n         \"华\": 1290,\n         \"协\": 1291,\n         \"卑\": 1292,\n         \"卒\": 1293,\n         \"卓\": 1294,\n         \"協\": 1295,\n         \"单\": 1296,\n         \"卖\": 1297,\n         \"南\": 1298,\n         \"単\": 1299,\n         \"博\": 1300,\n         \"卜\": 1301,\n         \"卞\": 1302,\n         \"卟\": 1303,\n         \"占\": 1304,\n         \"卡\": 1305,\n         \"卢\": 1306,\n         \"卤\": 1307,\n         \"卦\": 1308,\n         \"卧\": 1309,\n         \"卫\": 1310,\n         \"卮\": 1311,\n         \"卯\": 1312,\n         \"印\": 1313,\n         \"危\": 1314,\n         \"即\": 1315,\n         \"却\": 1316,\n         \"卵\": 1317,\n         \"卷\": 1318,\n         \"卸\": 1319,\n         \"卻\": 1320,\n         \"卿\": 1321,\n         \"厂\": 1322,\n         \"厄\": 1323,\n         \"厅\": 1324,\n         \"历\": 1325,\n         \"厉\": 1326,\n         \"压\": 1327,\n         \"厌\": 1328,\n         \"厕\": 1329,\n         \"厘\": 1330,\n         \"厚\": 1331,\n         \"厝\": 1332,\n         \"原\": 1333,\n         \"厢\": 1334,\n         \"厥\": 1335,\n         \"厦\": 1336,\n         \"厨\": 1337,\n         \"厩\": 1338,\n         \"厭\": 1339,\n         \"厮\": 1340,\n         \"厲\": 1341,\n         \"厳\": 1342,\n         \"去\": 1343,\n         \"县\": 1344,\n         \"叁\": 1345,\n         \"参\": 1346,\n         \"參\": 1347,\n         \"又\": 1348,\n         \"叉\": 1349,\n         \"及\": 1350,\n         \"友\": 1351,\n         \"双\": 1352,\n         \"反\": 1353,\n         \"収\": 1354,\n         \"发\": 1355,\n         \"叔\": 1356,\n         \"取\": 1357,\n         \"受\": 1358,\n         \"变\": 1359,\n         \"叙\": 1360,\n         \"叛\": 1361,\n         \"叟\": 1362,\n         \"叠\": 1363,\n         \"叡\": 1364,\n         \"叢\": 1365,\n         \"口\": 1366,\n         \"古\": 1367,\n         \"句\": 1368,\n         \"另\": 1369,\n         \"叨\": 1370,\n         \"叩\": 1371,\n         \"只\": 1372,\n         \"叫\": 1373,\n         \"召\": 1374,\n         \"叭\": 1375,\n         \"叮\": 1376,\n         \"可\": 1377,\n         \"台\": 1378,\n         \"叱\": 1379,\n         \"史\": 1380,\n         \"右\": 1381,\n         \"叵\": 1382,\n         \"叶\": 1383,\n         \"号\": 1384,\n         \"司\": 1385,\n         \"叹\": 1386,\n         \"叻\": 1387,\n         \"叼\": 1388,\n         \"叽\": 1389,\n         \"吁\": 1390,\n         \"吃\": 1391,\n         \"各\": 1392,\n         \"吆\": 1393,\n         \"合\": 1394,\n         \"吉\": 1395,\n         \"吊\": 1396,\n         \"吋\": 1397,\n         \"同\": 1398,\n         \"名\": 1399,\n         \"后\": 1400,\n         \"吏\": 1401,\n         \"吐\": 1402,\n         \"向\": 1403,\n         \"吒\": 1404,\n         \"吓\": 1405,\n         \"吕\": 1406,\n         \"吖\": 1407,\n         \"吗\": 1408,\n         \"君\": 1409,\n         \"吝\": 1410,\n         \"吞\": 1411,\n         \"吟\": 1412,\n         \"吠\": 1413,\n         \"吡\": 1414,\n         \"否\": 1415,\n         \"吧\": 1416,\n         \"吨\": 1417,\n         \"吩\": 1418,\n         \"含\": 1419,\n         \"听\": 1420,\n         \"吭\": 1421,\n         \"吮\": 1422,\n         \"启\": 1423,\n         \"吱\": 1424,\n         \"吳\": 1425,\n         \"吴\": 1426,\n         \"吵\": 1427,\n         \"吶\": 1428,\n         \"吸\": 1429,\n         \"吹\": 1430,\n         \"吻\": 1431,\n         \"吼\": 1432,\n         \"吽\": 1433,\n         \"吾\": 1434,\n         \"呀\": 1435,\n         \"呂\": 1436,\n         \"呃\": 1437,\n         \"呆\": 1438,\n         \"呈\": 1439,\n         \"告\": 1440,\n         \"呋\": 1441,\n         \"呎\": 1442,\n         \"呐\": 1443,\n         \"呓\": 1444,\n         \"呕\": 1445,\n         \"呗\": 1446,\n         \"员\": 1447,\n         \"呛\": 1448,\n         \"呜\": 1449,\n         \"呢\": 1450,\n         \"呤\": 1451,\n         \"呦\": 1452,\n         \"周\": 1453,\n         \"呱\": 1454,\n         \"呲\": 1455,\n         \"味\": 1456,\n         \"呵\": 1457,\n         \"呷\": 1458,\n         \"呸\": 1459,\n         \"呻\": 1460,\n         \"呼\": 1461,\n         \"命\": 1462,\n         \"咀\": 1463,\n         \"咁\": 1464,\n         \"咂\": 1465,\n         \"咄\": 1466,\n         \"咆\": 1467,\n         \"咋\": 1468,\n         \"和\": 1469,\n         \"咎\": 1470,\n         \"咏\": 1471,\n         \"咐\": 1472,\n         \"咒\": 1473,\n         \"咔\": 1474,\n         \"咕\": 1475,\n         \"咖\": 1476,\n         \"咗\": 1477,\n         \"咘\": 1478,\n         \"咙\": 1479,\n         \"咚\": 1480,\n         \"咛\": 1481,\n         \"咣\": 1482,\n         \"咤\": 1483,\n         \"咦\": 1484,\n         \"咧\": 1485,\n         \"咨\": 1486,\n         \"咩\": 1487,\n         \"咪\": 1488,\n         \"咫\": 1489,\n         \"咬\": 1490,\n         \"咭\": 1491,\n         \"咯\": 1492,\n         \"咱\": 1493,\n         \"咲\": 1494,\n         \"咳\": 1495,\n         \"咸\": 1496,\n         \"咻\": 1497,\n         \"咽\": 1498,\n         \"咿\": 1499,\n         \"哀\": 1500,\n         \"品\": 1501,\n         \"哂\": 1502,\n         \"哄\": 1503,\n         \"哆\": 1504,\n         \"哇\": 1505,\n         \"哈\": 1506,\n         \"哉\": 1507,\n         \"哋\": 1508,\n         \"哌\": 1509,\n         \"响\": 1510,\n         \"哎\": 1511,\n         \"哏\": 1512,\n         \"哐\": 1513,\n         \"哑\": 1514,\n         \"哒\": 1515,\n         \"哔\": 1516,\n         \"哗\": 1517,\n         \"哟\": 1518,\n         \"員\": 1519,\n         \"哥\": 1520,\n         \"哦\": 1521,\n         \"哧\": 1522,\n         \"哨\": 1523,\n         \"哩\": 1524,\n         \"哪\": 1525,\n         \"哭\": 1526,\n         \"哮\": 1527,\n         \"哲\": 1528,\n         \"哺\": 1529,\n         \"哼\": 1530,\n         \"哽\": 1531,\n         \"唁\": 1532,\n         \"唄\": 1533,\n         \"唆\": 1534,\n         \"唇\": 1535,\n         \"唉\": 1536,\n         \"唏\": 1537,\n         \"唐\": 1538,\n         \"唑\": 1539,\n         \"唔\": 1540,\n         \"唠\": 1541,\n         \"唤\": 1542,\n         \"唧\": 1543,\n         \"唬\": 1544,\n         \"售\": 1545,\n         \"唯\": 1546,\n         \"唰\": 1547,\n         \"唱\": 1548,\n         \"唳\": 1549,\n         \"唷\": 1550,\n         \"唸\": 1551,\n         \"唾\": 1552,\n         \"啃\": 1553,\n         \"啄\": 1554,\n         \"商\": 1555,\n         \"啉\": 1556,\n         \"啊\": 1557,\n         \"問\": 1558,\n         \"啓\": 1559,\n         \"啕\": 1560,\n         \"啖\": 1561,\n         \"啜\": 1562,\n         \"啞\": 1563,\n         \"啟\": 1564,\n         \"啡\": 1565,\n         \"啤\": 1566,\n         \"啥\": 1567,\n         \"啦\": 1568,\n         \"啧\": 1569,\n         \"啪\": 1570,\n         \"啫\": 1571,\n         \"啬\": 1572,\n         \"啮\": 1573,\n         \"啰\": 1574,\n         \"啱\": 1575,\n         \"啲\": 1576,\n         \"啵\": 1577,\n         \"啶\": 1578,\n         \"啷\": 1579,\n         \"啸\": 1580,\n         \"啻\": 1581,\n         \"啼\": 1582,\n         \"啾\": 1583,\n         \"喀\": 1584,\n         \"喂\": 1585,\n         \"喃\": 1586,\n         \"善\": 1587,\n         \"喆\": 1588,\n         \"喇\": 1589,\n         \"喉\": 1590,\n         \"喊\": 1591,\n         \"喋\": 1592,\n         \"喎\": 1593,\n         \"喏\": 1594,\n         \"喔\": 1595,\n         \"喘\": 1596,\n         \"喙\": 1597,\n         \"喚\": 1598,\n         \"喜\": 1599,\n         \"喝\": 1600,\n         \"喟\": 1601,\n         \"喧\": 1602,\n         \"喪\": 1603,\n         \"喫\": 1604,\n         \"喬\": 1605,\n         \"單\": 1606,\n         \"喰\": 1607,\n         \"喱\": 1608,\n         \"喲\": 1609,\n         \"喳\": 1610,\n         \"喵\": 1611,\n         \"営\": 1612,\n         \"喷\": 1613,\n         \"喹\": 1614,\n         \"喺\": 1615,\n         \"喻\": 1616,\n         \"喽\": 1617,\n         \"嗅\": 1618,\n         \"嗆\": 1619,\n         \"嗇\": 1620,\n         \"嗎\": 1621,\n         \"嗑\": 1622,\n         \"嗒\": 1623,\n         \"嗓\": 1624,\n         \"嗔\": 1625,\n         \"嗖\": 1626,\n         \"嗚\": 1627,\n         \"嗜\": 1628,\n         \"嗝\": 1629,\n         \"嗟\": 1630,\n         \"嗡\": 1631,\n         \"嗣\": 1632,\n         \"嗤\": 1633,\n         \"嗦\": 1634,\n         \"嗨\": 1635,\n         \"嗪\": 1636,\n         \"嗬\": 1637,\n         \"嗯\": 1638,\n         \"嗰\": 1639,\n         \"嗲\": 1640,\n         \"嗳\": 1641,\n         \"嗶\": 1642,\n         \"嗷\": 1643,\n         \"嗽\": 1644,\n         \"嘀\": 1645,\n         \"嘅\": 1646,\n         \"嘆\": 1647,\n         \"嘈\": 1648,\n         \"嘉\": 1649,\n         \"嘌\": 1650,\n         \"嘍\": 1651,\n         \"嘎\": 1652,\n         \"嘔\": 1653,\n         \"嘖\": 1654,\n         \"嘗\": 1655,\n         \"嘘\": 1656,\n         \"嘚\": 1657,\n         \"嘛\": 1658,\n         \"嘜\": 1659,\n         \"嘞\": 1660,\n         \"嘟\": 1661,\n         \"嘢\": 1662,\n         \"嘣\": 1663,\n         \"嘤\": 1664,\n         \"嘧\": 1665,\n         \"嘩\": 1666,\n         \"嘭\": 1667,\n         \"嘮\": 1668,\n         \"嘯\": 1669,\n         \"嘰\": 1670,\n         \"嘱\": 1671,\n         \"嘲\": 1672,\n         \"嘴\": 1673,\n         \"嘶\": 1674,\n         \"嘸\": 1675,\n         \"嘹\": 1676,\n         \"嘻\": 1677,\n         \"嘿\": 1678,\n         \"噁\": 1679,\n         \"噌\": 1680,\n         \"噎\": 1681,\n         \"噓\": 1682,\n         \"噔\": 1683,\n         \"噗\": 1684,\n         \"噙\": 1685,\n         \"噜\": 1686,\n         \"噠\": 1687,\n         \"噢\": 1688,\n         \"噤\": 1689,\n         \"器\": 1690,\n         \"噩\": 1691,\n         \"噪\": 1692,\n         \"噬\": 1693,\n         \"噱\": 1694,\n         \"噴\": 1695,\n         \"噶\": 1696,\n         \"噸\": 1697,\n         \"噹\": 1698,\n         \"噻\": 1699,\n         \"噼\": 1700,\n         \"嚀\": 1701,\n         \"嚇\": 1702,\n         \"嚎\": 1703,\n         \"嚏\": 1704,\n         \"嚐\": 1705,\n         \"嚓\": 1706,\n         \"嚕\": 1707,\n         \"嚟\": 1708,\n         \"嚣\": 1709,\n         \"嚥\": 1710,\n         \"嚨\": 1711,\n         \"嚮\": 1712,\n         \"嚴\": 1713,\n         \"嚷\": 1714,\n         \"嚼\": 1715,\n         \"囂\": 1716,\n         \"囉\": 1717,\n         \"囊\": 1718,\n         \"囍\": 1719,\n         \"囑\": 1720,\n         \"囔\": 1721,\n         \"囗\": 1722,\n         \"囚\": 1723,\n         \"四\": 1724,\n         \"囝\": 1725,\n         \"回\": 1726,\n         \"囟\": 1727,\n         \"因\": 1728,\n         \"囡\": 1729,\n         \"团\": 1730,\n         \"団\": 1731,\n         \"囤\": 1732,\n         \"囧\": 1733,\n         \"囪\": 1734,\n         \"囫\": 1735,\n         \"园\": 1736,\n         \"困\": 1737,\n         \"囱\": 1738,\n         \"囲\": 1739,\n         \"図\": 1740,\n         \"围\": 1741,\n         \"囹\": 1742,\n         \"固\": 1743,\n         \"国\": 1744,\n         \"图\": 1745,\n         \"囿\": 1746,\n         \"圃\": 1747,\n         \"圄\": 1748,\n         \"圆\": 1749,\n         \"圈\": 1750,\n         \"國\": 1751,\n         \"圍\": 1752,\n         \"圏\": 1753,\n         \"園\": 1754,\n         \"圓\": 1755,\n         \"圖\": 1756,\n         \"團\": 1757,\n         \"圜\": 1758,\n         \"土\": 1759,\n         \"圣\": 1760,\n         \"圧\": 1761,\n         \"在\": 1762,\n         \"圩\": 1763,\n         \"圭\": 1764,\n         \"地\": 1765,\n         \"圳\": 1766,\n         \"场\": 1767,\n         \"圻\": 1768,\n         \"圾\": 1769,\n         \"址\": 1770,\n         \"坂\": 1771,\n         \"均\": 1772,\n         \"坊\": 1773,\n         \"坍\": 1774,\n         \"坎\": 1775,\n         \"坏\": 1776,\n         \"坐\": 1777,\n         \"坑\": 1778,\n         \"块\": 1779,\n         \"坚\": 1780,\n         \"坛\": 1781,\n         \"坝\": 1782,\n         \"坞\": 1783,\n         \"坟\": 1784,\n         \"坠\": 1785,\n         \"坡\": 1786,\n         \"坤\": 1787,\n         \"坦\": 1788,\n         \"坨\": 1789,\n         \"坪\": 1790,\n         \"坯\": 1791,\n         \"坳\": 1792,\n         \"坵\": 1793,\n         \"坷\": 1794,\n         \"垂\": 1795,\n         \"垃\": 1796,\n         \"垄\": 1797,\n         \"型\": 1798,\n         \"垒\": 1799,\n         \"垚\": 1800,\n         \"垛\": 1801,\n         \"垠\": 1802,\n         \"垢\": 1803,\n         \"垣\": 1804,\n         \"垦\": 1805,\n         \"垩\": 1806,\n         \"垫\": 1807,\n         \"垭\": 1808,\n         \"垮\": 1809,\n         \"垵\": 1810,\n         \"埂\": 1811,\n         \"埃\": 1812,\n         \"埋\": 1813,\n         \"城\": 1814,\n         \"埔\": 1815,\n         \"埕\": 1816,\n         \"埗\": 1817,\n         \"域\": 1818,\n         \"埠\": 1819,\n         \"埤\": 1820,\n         \"埵\": 1821,\n         \"執\": 1822,\n         \"埸\": 1823,\n         \"培\": 1824,\n         \"基\": 1825,\n         \"埼\": 1826,\n         \"堀\": 1827,\n         \"堂\": 1828,\n         \"堃\": 1829,\n         \"堅\": 1830,\n         \"堆\": 1831,\n         \"堇\": 1832,\n         \"堑\": 1833,\n         \"堕\": 1834,\n         \"堙\": 1835,\n         \"堡\": 1836,\n         \"堤\": 1837,\n         \"堪\": 1838,\n         \"堯\": 1839,\n         \"堰\": 1840,\n         \"報\": 1841,\n         \"場\": 1842,\n         \"堵\": 1843,\n         \"堺\": 1844,\n         \"堿\": 1845,\n         \"塊\": 1846,\n         \"塌\": 1847,\n         \"塑\": 1848,\n         \"塔\": 1849,\n         \"塗\": 1850,\n         \"塘\": 1851,\n         \"塚\": 1852,\n         \"塞\": 1853,\n         \"塢\": 1854,\n         \"塩\": 1855,\n         \"填\": 1856,\n         \"塬\": 1857,\n         \"塭\": 1858,\n         \"塵\": 1859,\n         \"塾\": 1860,\n         \"墀\": 1861,\n         \"境\": 1862,\n         \"墅\": 1863,\n         \"墉\": 1864,\n         \"墊\": 1865,\n         \"墒\": 1866,\n         \"墓\": 1867,\n         \"増\": 1868,\n         \"墘\": 1869,\n         \"墙\": 1870,\n         \"墜\": 1871,\n         \"增\": 1872,\n         \"墟\": 1873,\n         \"墨\": 1874,\n         \"墩\": 1875,\n         \"墮\": 1876,\n         \"墳\": 1877,\n         \"墻\": 1878,\n         \"墾\": 1879,\n         \"壁\": 1880,\n         \"壅\": 1881,\n         \"壆\": 1882,\n         \"壇\": 1883,\n         \"壊\": 1884,\n         \"壑\": 1885,\n         \"壓\": 1886,\n         \"壕\": 1887,\n         \"壘\": 1888,\n         \"壞\": 1889,\n         \"壟\": 1890,\n         \"壢\": 1891,\n         \"壤\": 1892,\n         \"壩\": 1893,\n         \"士\": 1894,\n         \"壬\": 1895,\n         \"壮\": 1896,\n         \"壯\": 1897,\n         \"声\": 1898,\n         \"売\": 1899,\n         \"壳\": 1900,\n         \"壶\": 1901,\n         \"壹\": 1902,\n         \"壺\": 1903,\n         \"壽\": 1904,\n         \"处\": 1905,\n         \"备\": 1906,\n         \"変\": 1907,\n         \"复\": 1908,\n         \"夏\": 1909,\n         \"夔\": 1910,\n         \"夕\": 1911,\n         \"外\": 1912,\n         \"夙\": 1913,\n         \"多\": 1914,\n         \"夜\": 1915,\n         \"够\": 1916,\n         \"夠\": 1917,\n         \"夢\": 1918,\n         \"夥\": 1919,\n         \"大\": 1920,\n         \"天\": 1921,\n         \"太\": 1922,\n         \"夫\": 1923,\n         \"夭\": 1924,\n         \"央\": 1925,\n         \"夯\": 1926,\n         \"失\": 1927,\n         \"头\": 1928,\n         \"夷\": 1929,\n         \"夸\": 1930,\n         \"夹\": 1931,\n         \"夺\": 1932,\n         \"夾\": 1933,\n         \"奂\": 1934,\n         \"奄\": 1935,\n         \"奇\": 1936,\n         \"奈\": 1937,\n         \"奉\": 1938,\n         \"奋\": 1939,\n         \"奎\": 1940,\n         \"奏\": 1941,\n         \"奐\": 1942,\n         \"契\": 1943,\n         \"奔\": 1944,\n         \"奕\": 1945,\n         \"奖\": 1946,\n         \"套\": 1947,\n         \"奘\": 1948,\n         \"奚\": 1949,\n         \"奠\": 1950,\n         \"奢\": 1951,\n         \"奥\": 1952,\n         \"奧\": 1953,\n         \"奪\": 1954,\n         \"奬\": 1955,\n         \"奮\": 1956,\n         \"女\": 1957,\n         \"奴\": 1958,\n         \"奶\": 1959,\n         \"奸\": 1960,\n         \"她\": 1961,\n         \"好\": 1962,\n         \"如\": 1963,\n         \"妃\": 1964,\n         \"妄\": 1965,\n         \"妆\": 1966,\n         \"妇\": 1967,\n         \"妈\": 1968,\n         \"妊\": 1969,\n         \"妍\": 1970,\n         \"妒\": 1971,\n         \"妓\": 1972,\n         \"妖\": 1973,\n         \"妘\": 1974,\n         \"妙\": 1975,\n         \"妝\": 1976,\n         \"妞\": 1977,\n         \"妣\": 1978,\n         \"妤\": 1979,\n         \"妥\": 1980,\n         \"妨\": 1981,\n         \"妩\": 1982,\n         \"妪\": 1983,\n         \"妮\": 1984,\n         \"妲\": 1985,\n         \"妳\": 1986,\n         \"妹\": 1987,\n         \"妻\": 1988,\n         \"妾\": 1989,\n         \"姆\": 1990,\n         \"姉\": 1991,\n         \"姊\": 1992,\n         \"始\": 1993,\n         \"姍\": 1994,\n         \"姐\": 1995,\n         \"姑\": 1996,\n         \"姒\": 1997,\n         \"姓\": 1998,\n         \"委\": 1999,\n         \"姗\": 2000,\n         \"姚\": 2001,\n         \"姜\": 2002,\n         \"姝\": 2003,\n         \"姣\": 2004,\n         \"姥\": 2005,\n         \"姦\": 2006,\n         \"姨\": 2007,\n         \"姪\": 2008,\n         \"姫\": 2009,\n         \"姬\": 2010,\n         \"姹\": 2011,\n         \"姻\": 2012,\n         \"姿\": 2013,\n         \"威\": 2014,\n         \"娃\": 2015,\n         \"娄\": 2016,\n         \"娅\": 2017,\n         \"娆\": 2018,\n         \"娇\": 2019,\n         \"娉\": 2020,\n         \"娑\": 2021,\n         \"娓\": 2022,\n         \"娘\": 2023,\n         \"娛\": 2024,\n         \"娜\": 2025,\n         \"娟\": 2026,\n         \"娠\": 2027,\n         \"娣\": 2028,\n         \"娥\": 2029,\n         \"娩\": 2030,\n         \"娱\": 2031,\n         \"娲\": 2032,\n         \"娴\": 2033,\n         \"娶\": 2034,\n         \"娼\": 2035,\n         \"婀\": 2036,\n         \"婁\": 2037,\n         \"婆\": 2038,\n         \"婉\": 2039,\n         \"婊\": 2040,\n         \"婕\": 2041,\n         \"婚\": 2042,\n         \"婢\": 2043,\n         \"婦\": 2044,\n         \"婧\": 2045,\n         \"婪\": 2046,\n         \"婭\": 2047,\n         \"婴\": 2048,\n         \"婵\": 2049,\n         \"婶\": 2050,\n         \"婷\": 2051,\n         \"婺\": 2052,\n         \"婿\": 2053,\n         \"媒\": 2054,\n         \"媚\": 2055,\n         \"媛\": 2056,\n         \"媞\": 2057,\n         \"媧\": 2058,\n         \"媲\": 2059,\n         \"媳\": 2060,\n         \"媽\": 2061,\n         \"媾\": 2062,\n         \"嫁\": 2063,\n         \"嫂\": 2064,\n         \"嫉\": 2065,\n         \"嫌\": 2066,\n         \"嫑\": 2067,\n         \"嫔\": 2068,\n         \"嫖\": 2069,\n         \"嫘\": 2070,\n         \"嫚\": 2071,\n         \"嫡\": 2072,\n         \"嫣\": 2073,\n         \"嫦\": 2074,\n         \"嫩\": 2075,\n         \"嫲\": 2076,\n         \"嫵\": 2077,\n         \"嫻\": 2078,\n         \"嬅\": 2079,\n         \"嬉\": 2080,\n         \"嬌\": 2081,\n         \"嬗\": 2082,\n         \"嬛\": 2083,\n         \"嬢\": 2084,\n         \"嬤\": 2085,\n         \"嬪\": 2086,\n         \"嬰\": 2087,\n         \"嬴\": 2088,\n         \"嬷\": 2089,\n         \"嬸\": 2090,\n         \"嬿\": 2091,\n         \"孀\": 2092,\n         \"孃\": 2093,\n         \"子\": 2094,\n         \"孑\": 2095,\n         \"孔\": 2096,\n         \"孕\": 2097,\n         \"孖\": 2098,\n         \"字\": 2099,\n         \"存\": 2100,\n         \"孙\": 2101,\n         \"孚\": 2102,\n         \"孛\": 2103,\n         \"孜\": 2104,\n         \"孝\": 2105,\n         \"孟\": 2106,\n         \"孢\": 2107,\n         \"季\": 2108,\n         \"孤\": 2109,\n         \"学\": 2110,\n         \"孩\": 2111,\n         \"孪\": 2112,\n         \"孫\": 2113,\n         \"孬\": 2114,\n         \"孰\": 2115,\n         \"孱\": 2116,\n         \"孳\": 2117,\n         \"孵\": 2118,\n         \"學\": 2119,\n         \"孺\": 2120,\n         \"孽\": 2121,\n         \"孿\": 2122,\n         \"宁\": 2123,\n         \"它\": 2124,\n         \"宅\": 2125,\n         \"宇\": 2126,\n         \"守\": 2127,\n         \"安\": 2128,\n         \"宋\": 2129,\n         \"完\": 2130,\n         \"宏\": 2131,\n         \"宓\": 2132,\n         \"宕\": 2133,\n         \"宗\": 2134,\n         \"官\": 2135,\n         \"宙\": 2136,\n         \"定\": 2137,\n         \"宛\": 2138,\n         \"宜\": 2139,\n         \"宝\": 2140,\n         \"实\": 2141,\n         \"実\": 2142,\n         \"宠\": 2143,\n         \"审\": 2144,\n         \"客\": 2145,\n         \"宣\": 2146,\n         \"室\": 2147,\n         \"宥\": 2148,\n         \"宦\": 2149,\n         \"宪\": 2150,\n         \"宫\": 2151,\n         \"宮\": 2152,\n         \"宰\": 2153,\n         \"害\": 2154,\n         \"宴\": 2155,\n         \"宵\": 2156,\n         \"家\": 2157,\n         \"宸\": 2158,\n         \"容\": 2159,\n         \"宽\": 2160,\n         \"宾\": 2161,\n         \"宿\": 2162,\n         \"寂\": 2163,\n         \"寄\": 2164,\n         \"寅\": 2165,\n         \"密\": 2166,\n         \"寇\": 2167,\n         \"富\": 2168,\n         \"寐\": 2169,\n         \"寒\": 2170,\n         \"寓\": 2171,\n         \"寛\": 2172,\n         \"寝\": 2173,\n         \"寞\": 2174,\n         \"察\": 2175,\n         \"寡\": 2176,\n         \"寢\": 2177,\n         \"寥\": 2178,\n         \"實\": 2179,\n         \"寧\": 2180,\n         \"寨\": 2181,\n         \"審\": 2182,\n         \"寫\": 2183,\n         \"寬\": 2184,\n         \"寮\": 2185,\n         \"寰\": 2186,\n         \"寵\": 2187,\n         \"寶\": 2188,\n         \"寸\": 2189,\n         \"对\": 2190,\n         \"寺\": 2191,\n         \"寻\": 2192,\n         \"导\": 2193,\n         \"対\": 2194,\n         \"寿\": 2195,\n         \"封\": 2196,\n         \"専\": 2197,\n         \"射\": 2198,\n         \"将\": 2199,\n         \"將\": 2200,\n         \"專\": 2201,\n         \"尉\": 2202,\n         \"尊\": 2203,\n         \"尋\": 2204,\n         \"對\": 2205,\n         \"導\": 2206,\n         \"小\": 2207,\n         \"少\": 2208,\n         \"尔\": 2209,\n         \"尕\": 2210,\n         \"尖\": 2211,\n         \"尘\": 2212,\n         \"尚\": 2213,\n         \"尝\": 2214,\n         \"尤\": 2215,\n         \"尧\": 2216,\n         \"尬\": 2217,\n         \"就\": 2218,\n         \"尴\": 2219,\n         \"尷\": 2220,\n         \"尸\": 2221,\n         \"尹\": 2222,\n         \"尺\": 2223,\n         \"尻\": 2224,\n         \"尼\": 2225,\n         \"尽\": 2226,\n         \"尾\": 2227,\n         \"尿\": 2228,\n         \"局\": 2229,\n         \"屁\": 2230,\n         \"层\": 2231,\n         \"屄\": 2232,\n         \"居\": 2233,\n         \"屆\": 2234,\n         \"屈\": 2235,\n         \"屉\": 2236,\n         \"届\": 2237,\n         \"屋\": 2238,\n         \"屌\": 2239,\n         \"屍\": 2240,\n         \"屎\": 2241,\n         \"屏\": 2242,\n         \"屐\": 2243,\n         \"屑\": 2244,\n         \"展\": 2245,\n         \"屜\": 2246,\n         \"属\": 2247,\n         \"屠\": 2248,\n         \"屡\": 2249,\n         \"屢\": 2250,\n         \"層\": 2251,\n         \"履\": 2252,\n         \"屬\": 2253,\n         \"屯\": 2254,\n         \"山\": 2255,\n         \"屹\": 2256,\n         \"屿\": 2257,\n         \"岀\": 2258,\n         \"岁\": 2259,\n         \"岂\": 2260,\n         \"岌\": 2261,\n         \"岐\": 2262,\n         \"岑\": 2263,\n         \"岔\": 2264,\n         \"岖\": 2265,\n         \"岗\": 2266,\n         \"岘\": 2267,\n         \"岙\": 2268,\n         \"岚\": 2269,\n         \"岛\": 2270,\n         \"岡\": 2271,\n         \"岩\": 2272,\n         \"岫\": 2273,\n         \"岬\": 2274,\n         \"岭\": 2275,\n         \"岱\": 2276,\n         \"岳\": 2277,\n         \"岷\": 2278,\n         \"岸\": 2279,\n         \"峇\": 2280,\n         \"峋\": 2281,\n         \"峒\": 2282,\n         \"峙\": 2283,\n         \"峡\": 2284,\n         \"峤\": 2285,\n         \"峥\": 2286,\n         \"峦\": 2287,\n         \"峨\": 2288,\n         \"峪\": 2289,\n         \"峭\": 2290,\n         \"峯\": 2291,\n         \"峰\": 2292,\n         \"峴\": 2293,\n         \"島\": 2294,\n         \"峻\": 2295,\n         \"峽\": 2296,\n         \"崁\": 2297,\n         \"崂\": 2298,\n         \"崆\": 2299,\n         \"崇\": 2300,\n         \"崎\": 2301,\n         \"崑\": 2302,\n         \"崔\": 2303,\n         \"崖\": 2304,\n         \"崗\": 2305,\n         \"崙\": 2306,\n         \"崛\": 2307,\n         \"崧\": 2308,\n         \"崩\": 2309,\n         \"崭\": 2310,\n         \"崴\": 2311,\n         \"崽\": 2312,\n         \"嵇\": 2313,\n         \"嵊\": 2314,\n         \"嵋\": 2315,\n         \"嵌\": 2316,\n         \"嵐\": 2317,\n         \"嵘\": 2318,\n         \"嵩\": 2319,\n         \"嵬\": 2320,\n         \"嵯\": 2321,\n         \"嶂\": 2322,\n         \"嶄\": 2323,\n         \"嶇\": 2324,\n         \"嶋\": 2325,\n         \"嶙\": 2326,\n         \"嶺\": 2327,\n         \"嶼\": 2328,\n         \"嶽\": 2329,\n         \"巅\": 2330,\n         \"巍\": 2331,\n         \"巒\": 2332,\n         \"巔\": 2333,\n         \"巖\": 2334,\n         \"川\": 2335,\n         \"州\": 2336,\n         \"巡\": 2337,\n         \"巢\": 2338,\n         \"工\": 2339,\n         \"左\": 2340,\n         \"巧\": 2341,\n         \"巨\": 2342,\n         \"巩\": 2343,\n         \"巫\": 2344,\n         \"差\": 2345,\n         \"己\": 2346,\n         \"已\": 2347,\n         \"巳\": 2348,\n         \"巴\": 2349,\n         \"巷\": 2350,\n         \"巻\": 2351,\n         \"巽\": 2352,\n         \"巾\": 2353,\n         \"巿\": 2354,\n         \"币\": 2355,\n         \"市\": 2356,\n         \"布\": 2357,\n         \"帅\": 2358,\n         \"帆\": 2359,\n         \"师\": 2360,\n         \"希\": 2361,\n         \"帐\": 2362,\n         \"帑\": 2363,\n         \"帕\": 2364,\n         \"帖\": 2365,\n         \"帘\": 2366,\n         \"帚\": 2367,\n         \"帛\": 2368,\n         \"帜\": 2369,\n         \"帝\": 2370,\n         \"帥\": 2371,\n         \"带\": 2372,\n         \"帧\": 2373,\n         \"師\": 2374,\n         \"席\": 2375,\n         \"帮\": 2376,\n         \"帯\": 2377,\n         \"帰\": 2378,\n         \"帳\": 2379,\n         \"帶\": 2380,\n         \"帷\": 2381,\n         \"常\": 2382,\n         \"帼\": 2383,\n         \"帽\": 2384,\n         \"幀\": 2385,\n         \"幂\": 2386,\n         \"幄\": 2387,\n         \"幅\": 2388,\n         \"幌\": 2389,\n         \"幔\": 2390,\n         \"幕\": 2391,\n         \"幟\": 2392,\n         \"幡\": 2393,\n         \"幢\": 2394,\n         \"幣\": 2395,\n         \"幫\": 2396,\n         \"干\": 2397,\n         \"平\": 2398,\n         \"年\": 2399,\n         \"并\": 2400,\n         \"幸\": 2401,\n         \"幹\": 2402,\n         \"幺\": 2403,\n         \"幻\": 2404,\n         \"幼\": 2405,\n         \"幽\": 2406,\n         \"幾\": 2407,\n         \"广\": 2408,\n         \"庁\": 2409,\n         \"広\": 2410,\n         \"庄\": 2411,\n         \"庆\": 2412,\n         \"庇\": 2413,\n         \"床\": 2414,\n         \"序\": 2415,\n         \"庐\": 2416,\n         \"库\": 2417,\n         \"应\": 2418,\n         \"底\": 2419,\n         \"庖\": 2420,\n         \"店\": 2421,\n         \"庙\": 2422,\n         \"庚\": 2423,\n         \"府\": 2424,\n         \"庞\": 2425,\n         \"废\": 2426,\n         \"庠\": 2427,\n         \"度\": 2428,\n         \"座\": 2429,\n         \"庫\": 2430,\n         \"庭\": 2431,\n         \"庵\": 2432,\n         \"庶\": 2433,\n         \"康\": 2434,\n         \"庸\": 2435,\n         \"庹\": 2436,\n         \"庾\": 2437,\n         \"廁\": 2438,\n         \"廂\": 2439,\n         \"廃\": 2440,\n         \"廈\": 2441,\n         \"廉\": 2442,\n         \"廊\": 2443,\n         \"廓\": 2444,\n         \"廖\": 2445,\n         \"廚\": 2446,\n         \"廝\": 2447,\n         \"廟\": 2448,\n         \"廠\": 2449,\n         \"廢\": 2450,\n         \"廣\": 2451,\n         \"廬\": 2452,\n         \"廳\": 2453,\n         \"延\": 2454,\n         \"廷\": 2455,\n         \"建\": 2456,\n         \"廿\": 2457,\n         \"开\": 2458,\n         \"弁\": 2459,\n         \"异\": 2460,\n         \"弃\": 2461,\n         \"弄\": 2462,\n         \"弈\": 2463,\n         \"弊\": 2464,\n         \"弋\": 2465,\n         \"式\": 2466,\n         \"弑\": 2467,\n         \"弒\": 2468,\n         \"弓\": 2469,\n         \"弔\": 2470,\n         \"引\": 2471,\n         \"弗\": 2472,\n         \"弘\": 2473,\n         \"弛\": 2474,\n         \"弟\": 2475,\n         \"张\": 2476,\n         \"弥\": 2477,\n         \"弦\": 2478,\n         \"弧\": 2479,\n         \"弩\": 2480,\n         \"弭\": 2481,\n         \"弯\": 2482,\n         \"弱\": 2483,\n         \"張\": 2484,\n         \"強\": 2485,\n         \"弹\": 2486,\n         \"强\": 2487,\n         \"弼\": 2488,\n         \"弾\": 2489,\n         \"彅\": 2490,\n         \"彆\": 2491,\n         \"彈\": 2492,\n         \"彌\": 2493,\n         \"彎\": 2494,\n         \"归\": 2495,\n         \"当\": 2496,\n         \"录\": 2497,\n         \"彗\": 2498,\n         \"彙\": 2499,\n         \"彝\": 2500,\n         \"形\": 2501,\n         \"彤\": 2502,\n         \"彥\": 2503,\n         \"彦\": 2504,\n         \"彧\": 2505,\n         \"彩\": 2506,\n         \"彪\": 2507,\n         \"彫\": 2508,\n         \"彬\": 2509,\n         \"彭\": 2510,\n         \"彰\": 2511,\n         \"影\": 2512,\n         \"彷\": 2513,\n         \"役\": 2514,\n         \"彻\": 2515,\n         \"彼\": 2516,\n         \"彿\": 2517,\n         \"往\": 2518,\n         \"征\": 2519,\n         \"径\": 2520,\n         \"待\": 2521,\n         \"徇\": 2522,\n         \"很\": 2523,\n         \"徉\": 2524,\n         \"徊\": 2525,\n         \"律\": 2526,\n         \"後\": 2527,\n         \"徐\": 2528,\n         \"徑\": 2529,\n         \"徒\": 2530,\n         \"従\": 2531,\n         \"徕\": 2532,\n         \"得\": 2533,\n         \"徘\": 2534,\n         \"徙\": 2535,\n         \"徜\": 2536,\n         \"從\": 2537,\n         \"徠\": 2538,\n         \"御\": 2539,\n         \"徨\": 2540,\n         \"復\": 2541,\n         \"循\": 2542,\n         \"徬\": 2543,\n         \"微\": 2544,\n         \"徳\": 2545,\n         \"徴\": 2546,\n         \"徵\": 2547,\n         \"德\": 2548,\n         \"徹\": 2549,\n         \"徼\": 2550,\n         \"徽\": 2551,\n         \"心\": 2552,\n         \"必\": 2553,\n         \"忆\": 2554,\n         \"忌\": 2555,\n         \"忍\": 2556,\n         \"忏\": 2557,\n         \"忐\": 2558,\n         \"忑\": 2559,\n         \"忒\": 2560,\n         \"忖\": 2561,\n         \"志\": 2562,\n         \"忘\": 2563,\n         \"忙\": 2564,\n         \"応\": 2565,\n         \"忠\": 2566,\n         \"忡\": 2567,\n         \"忤\": 2568,\n         \"忧\": 2569,\n         \"忪\": 2570,\n         \"快\": 2571,\n         \"忱\": 2572,\n         \"念\": 2573,\n         \"忻\": 2574,\n         \"忽\": 2575,\n         \"忿\": 2576,\n         \"怀\": 2577,\n         \"态\": 2578,\n         \"怂\": 2579,\n         \"怅\": 2580,\n         \"怆\": 2581,\n         \"怎\": 2582,\n         \"怏\": 2583,\n         \"怒\": 2584,\n         \"怔\": 2585,\n         \"怕\": 2586,\n         \"怖\": 2587,\n         \"怙\": 2588,\n         \"怜\": 2589,\n         \"思\": 2590,\n         \"怠\": 2591,\n         \"怡\": 2592,\n         \"急\": 2593,\n         \"怦\": 2594,\n         \"性\": 2595,\n         \"怨\": 2596,\n         \"怪\": 2597,\n         \"怯\": 2598,\n         \"怵\": 2599,\n         \"总\": 2600,\n         \"怼\": 2601,\n         \"恁\": 2602,\n         \"恃\": 2603,\n         \"恆\": 2604,\n         \"恋\": 2605,\n         \"恍\": 2606,\n         \"恐\": 2607,\n         \"恒\": 2608,\n         \"恕\": 2609,\n         \"恙\": 2610,\n         \"恚\": 2611,\n         \"恢\": 2612,\n         \"恣\": 2613,\n         \"恤\": 2614,\n         \"恥\": 2615,\n         \"恨\": 2616,\n         \"恩\": 2617,\n         \"恪\": 2618,\n         \"恫\": 2619,\n         \"恬\": 2620,\n         \"恭\": 2621,\n         \"息\": 2622,\n         \"恰\": 2623,\n         \"恳\": 2624,\n         \"恵\": 2625,\n         \"恶\": 2626,\n         \"恸\": 2627,\n         \"恺\": 2628,\n         \"恻\": 2629,\n         \"恼\": 2630,\n         \"恿\": 2631,\n         \"悄\": 2632,\n         \"悅\": 2633,\n         \"悉\": 2634,\n         \"悌\": 2635,\n         \"悍\": 2636,\n         \"悔\": 2637,\n         \"悖\": 2638,\n         \"悚\": 2639,\n         \"悟\": 2640,\n         \"悠\": 2641,\n         \"患\": 2642,\n         \"悦\": 2643,\n         \"您\": 2644,\n         \"悩\": 2645,\n         \"悪\": 2646,\n         \"悬\": 2647,\n         \"悯\": 2648,\n         \"悱\": 2649,\n         \"悲\": 2650,\n         \"悴\": 2651,\n         \"悵\": 2652,\n         \"悶\": 2653,\n         \"悸\": 2654,\n         \"悻\": 2655,\n         \"悼\": 2656,\n         \"悽\": 2657,\n         \"情\": 2658,\n         \"惆\": 2659,\n         \"惇\": 2660,\n         \"惊\": 2661,\n         \"惋\": 2662,\n         \"惑\": 2663,\n         \"惕\": 2664,\n         \"惘\": 2665,\n         \"惚\": 2666,\n         \"惜\": 2667,\n         \"惟\": 2668,\n         \"惠\": 2669,\n         \"惡\": 2670,\n         \"惦\": 2671,\n         \"惧\": 2672,\n         \"惨\": 2673,\n         \"惩\": 2674,\n         \"惫\": 2675,\n         \"惬\": 2676,\n         \"惭\": 2677,\n         \"惮\": 2678,\n         \"惯\": 2679,\n         \"惰\": 2680,\n         \"惱\": 2681,\n         \"想\": 2682,\n         \"惴\": 2683,\n         \"惶\": 2684,\n         \"惹\": 2685,\n         \"惺\": 2686,\n         \"愁\": 2687,\n         \"愆\": 2688,\n         \"愈\": 2689,\n         \"愉\": 2690,\n         \"愍\": 2691,\n         \"意\": 2692,\n         \"愕\": 2693,\n         \"愚\": 2694,\n         \"愛\": 2695,\n         \"愜\": 2696,\n         \"感\": 2697,\n         \"愣\": 2698,\n         \"愤\": 2699,\n         \"愧\": 2700,\n         \"愫\": 2701,\n         \"愷\": 2702,\n         \"愿\": 2703,\n         \"慄\": 2704,\n         \"慈\": 2705,\n         \"態\": 2706,\n         \"慌\": 2707,\n         \"慎\": 2708,\n         \"慑\": 2709,\n         \"慕\": 2710,\n         \"慘\": 2711,\n         \"慚\": 2712,\n         \"慟\": 2713,\n         \"慢\": 2714,\n         \"慣\": 2715,\n         \"慧\": 2716,\n         \"慨\": 2717,\n         \"慫\": 2718,\n         \"慮\": 2719,\n         \"慰\": 2720,\n         \"慳\": 2721,\n         \"慵\": 2722,\n         \"慶\": 2723,\n         \"慷\": 2724,\n         \"慾\": 2725,\n         \"憂\": 2726,\n         \"憊\": 2727,\n         \"憋\": 2728,\n         \"憎\": 2729,\n         \"憐\": 2730,\n         \"憑\": 2731,\n         \"憔\": 2732,\n         \"憚\": 2733,\n         \"憤\": 2734,\n         \"憧\": 2735,\n         \"憨\": 2736,\n         \"憩\": 2737,\n         \"憫\": 2738,\n         \"憬\": 2739,\n         \"憲\": 2740,\n         \"憶\": 2741,\n         \"憾\": 2742,\n         \"懂\": 2743,\n         \"懇\": 2744,\n         \"懈\": 2745,\n         \"應\": 2746,\n         \"懊\": 2747,\n         \"懋\": 2748,\n         \"懑\": 2749,\n         \"懒\": 2750,\n         \"懦\": 2751,\n         \"懲\": 2752,\n         \"懵\": 2753,\n         \"懶\": 2754,\n         \"懷\": 2755,\n         \"懸\": 2756,\n         \"懺\": 2757,\n         \"懼\": 2758,\n         \"懾\": 2759,\n         \"懿\": 2760,\n         \"戀\": 2761,\n         \"戈\": 2762,\n         \"戊\": 2763,\n         \"戌\": 2764,\n         \"戍\": 2765,\n         \"戎\": 2766,\n         \"戏\": 2767,\n         \"成\": 2768,\n         \"我\": 2769,\n         \"戒\": 2770,\n         \"戕\": 2771,\n         \"或\": 2772,\n         \"战\": 2773,\n         \"戚\": 2774,\n         \"戛\": 2775,\n         \"戟\": 2776,\n         \"戡\": 2777,\n         \"戦\": 2778,\n         \"截\": 2779,\n         \"戬\": 2780,\n         \"戮\": 2781,\n         \"戰\": 2782,\n         \"戲\": 2783,\n         \"戳\": 2784,\n         \"戴\": 2785,\n         \"戶\": 2786,\n         \"户\": 2787,\n         \"戸\": 2788,\n         \"戻\": 2789,\n         \"戾\": 2790,\n         \"房\": 2791,\n         \"所\": 2792,\n         \"扁\": 2793,\n         \"扇\": 2794,\n         \"扈\": 2795,\n         \"扉\": 2796,\n         \"手\": 2797,\n         \"才\": 2798,\n         \"扎\": 2799,\n         \"扑\": 2800,\n         \"扒\": 2801,\n         \"打\": 2802,\n         \"扔\": 2803,\n         \"払\": 2804,\n         \"托\": 2805,\n         \"扛\": 2806,\n         \"扣\": 2807,\n         \"扦\": 2808,\n         \"执\": 2809,\n         \"扩\": 2810,\n         \"扪\": 2811,\n         \"扫\": 2812,\n         \"扬\": 2813,\n         \"扭\": 2814,\n         \"扮\": 2815,\n         \"扯\": 2816,\n         \"扰\": 2817,\n         \"扱\": 2818,\n         \"扳\": 2819,\n         \"扶\": 2820,\n         \"批\": 2821,\n         \"扼\": 2822,\n         \"找\": 2823,\n         \"承\": 2824,\n         \"技\": 2825,\n         \"抄\": 2826,\n         \"抉\": 2827,\n         \"把\": 2828,\n         \"抑\": 2829,\n         \"抒\": 2830,\n         \"抓\": 2831,\n         \"投\": 2832,\n         \"抖\": 2833,\n         \"抗\": 2834,\n         \"折\": 2835,\n         \"抚\": 2836,\n         \"抛\": 2837,\n         \"抜\": 2838,\n         \"択\": 2839,\n         \"抟\": 2840,\n         \"抠\": 2841,\n         \"抡\": 2842,\n         \"抢\": 2843,\n         \"护\": 2844,\n         \"报\": 2845,\n         \"抨\": 2846,\n         \"披\": 2847,\n         \"抬\": 2848,\n         \"抱\": 2849,\n         \"抵\": 2850,\n         \"抹\": 2851,\n         \"押\": 2852,\n         \"抽\": 2853,\n         \"抿\": 2854,\n         \"拂\": 2855,\n         \"拄\": 2856,\n         \"担\": 2857,\n         \"拆\": 2858,\n         \"拇\": 2859,\n         \"拈\": 2860,\n         \"拉\": 2861,\n         \"拋\": 2862,\n         \"拌\": 2863,\n         \"拍\": 2864,\n         \"拎\": 2865,\n         \"拐\": 2866,\n         \"拒\": 2867,\n         \"拓\": 2868,\n         \"拔\": 2869,\n         \"拖\": 2870,\n         \"拗\": 2871,\n         \"拘\": 2872,\n         \"拙\": 2873,\n         \"拚\": 2874,\n         \"招\": 2875,\n         \"拜\": 2876,\n         \"拟\": 2877,\n         \"拡\": 2878,\n         \"拢\": 2879,\n         \"拣\": 2880,\n         \"拥\": 2881,\n         \"拦\": 2882,\n         \"拧\": 2883,\n         \"拨\": 2884,\n         \"择\": 2885,\n         \"括\": 2886,\n         \"拭\": 2887,\n         \"拮\": 2888,\n         \"拯\": 2889,\n         \"拱\": 2890,\n         \"拳\": 2891,\n         \"拴\": 2892,\n         \"拷\": 2893,\n         \"拼\": 2894,\n         \"拽\": 2895,\n         \"拾\": 2896,\n         \"拿\": 2897,\n         \"持\": 2898,\n         \"挂\": 2899,\n         \"指\": 2900,\n         \"挈\": 2901,\n         \"按\": 2902,\n         \"挎\": 2903,\n         \"挑\": 2904,\n         \"挖\": 2905,\n         \"挙\": 2906,\n         \"挚\": 2907,\n         \"挛\": 2908,\n         \"挝\": 2909,\n         \"挞\": 2910,\n         \"挟\": 2911,\n         \"挠\": 2912,\n         \"挡\": 2913,\n         \"挣\": 2914,\n         \"挤\": 2915,\n         \"挥\": 2916,\n         \"挨\": 2917,\n         \"挪\": 2918,\n         \"挫\": 2919,\n         \"振\": 2920,\n         \"挲\": 2921,\n         \"挹\": 2922,\n         \"挺\": 2923,\n         \"挽\": 2924,\n         \"挾\": 2925,\n         \"捂\": 2926,\n         \"捅\": 2927,\n         \"捆\": 2928,\n         \"捉\": 2929,\n         \"捋\": 2930,\n         \"捌\": 2931,\n         \"捍\": 2932,\n         \"捎\": 2933,\n         \"捏\": 2934,\n         \"捐\": 2935,\n         \"捕\": 2936,\n         \"捞\": 2937,\n         \"损\": 2938,\n         \"捡\": 2939,\n         \"换\": 2940,\n         \"捣\": 2941,\n         \"捧\": 2942,\n         \"捨\": 2943,\n         \"捩\": 2944,\n         \"据\": 2945,\n         \"捱\": 2946,\n         \"捲\": 2947,\n         \"捶\": 2948,\n         \"捷\": 2949,\n         \"捺\": 2950,\n         \"捻\": 2951,\n         \"掀\": 2952,\n         \"掂\": 2953,\n         \"掃\": 2954,\n         \"掇\": 2955,\n         \"授\": 2956,\n         \"掉\": 2957,\n         \"掌\": 2958,\n         \"掏\": 2959,\n         \"掐\": 2960,\n         \"排\": 2961,\n         \"掖\": 2962,\n         \"掘\": 2963,\n         \"掙\": 2964,\n         \"掛\": 2965,\n         \"掠\": 2966,\n         \"採\": 2967,\n         \"探\": 2968,\n         \"掣\": 2969,\n         \"接\": 2970,\n         \"控\": 2971,\n         \"推\": 2972,\n         \"掩\": 2973,\n         \"措\": 2974,\n         \"掬\": 2975,\n         \"掰\": 2976,\n         \"掲\": 2977,\n         \"掳\": 2978,\n         \"掴\": 2979,\n         \"掷\": 2980,\n         \"掸\": 2981,\n         \"掺\": 2982,\n         \"揀\": 2983,\n         \"揃\": 2984,\n         \"揄\": 2985,\n         \"揆\": 2986,\n         \"揉\": 2987,\n         \"揍\": 2988,\n         \"描\": 2989,\n         \"提\": 2990,\n         \"插\": 2991,\n         \"揖\": 2992,\n         \"揚\": 2993,\n         \"換\": 2994,\n         \"握\": 2995,\n         \"揣\": 2996,\n         \"揩\": 2997,\n         \"揪\": 2998,\n         \"揭\": 2999,\n         \"揮\": 3000,\n         \"援\": 3001,\n         \"揶\": 3002,\n         \"揸\": 3003,\n         \"揹\": 3004,\n         \"揽\": 3005,\n         \"搀\": 3006,\n         \"搁\": 3007,\n         \"搂\": 3008,\n         \"搅\": 3009,\n         \"損\": 3010,\n         \"搏\": 3011,\n         \"搐\": 3012,\n         \"搓\": 3013,\n         \"搔\": 3014,\n         \"搖\": 3015,\n         \"搗\": 3016,\n         \"搜\": 3017,\n         \"搞\": 3018,\n         \"搡\": 3019,\n         \"搪\": 3020,\n         \"搬\": 3021,\n         \"搭\": 3022,\n         \"搵\": 3023,\n         \"搶\": 3024,\n         \"携\": 3025,\n         \"搽\": 3026,\n         \"摀\": 3027,\n         \"摁\": 3028,\n         \"摄\": 3029,\n         \"摆\": 3030,\n         \"摇\": 3031,\n         \"摈\": 3032,\n         \"摊\": 3033,\n         \"摒\": 3034,\n         \"摔\": 3035,\n         \"摘\": 3036,\n         \"摞\": 3037,\n         \"摟\": 3038,\n         \"摧\": 3039,\n         \"摩\": 3040,\n         \"摯\": 3041,\n         \"摳\": 3042,\n         \"摸\": 3043,\n         \"摹\": 3044,\n         \"摺\": 3045,\n         \"摻\": 3046,\n         \"撂\": 3047,\n         \"撃\": 3048,\n         \"撅\": 3049,\n         \"撇\": 3050,\n         \"撈\": 3051,\n         \"撐\": 3052,\n         \"撑\": 3053,\n         \"撒\": 3054,\n         \"撓\": 3055,\n         \"撕\": 3056,\n         \"撚\": 3057,\n         \"撞\": 3058,\n         \"撤\": 3059,\n         \"撥\": 3060,\n         \"撩\": 3061,\n         \"撫\": 3062,\n         \"撬\": 3063,\n         \"播\": 3064,\n         \"撮\": 3065,\n         \"撰\": 3066,\n         \"撲\": 3067,\n         \"撵\": 3068,\n         \"撷\": 3069,\n         \"撸\": 3070,\n         \"撻\": 3071,\n         \"撼\": 3072,\n         \"撿\": 3073,\n         \"擀\": 3074,\n         \"擁\": 3075,\n         \"擂\": 3076,\n         \"擄\": 3077,\n         \"擅\": 3078,\n         \"擇\": 3079,\n         \"擊\": 3080,\n         \"擋\": 3081,\n         \"操\": 3082,\n         \"擎\": 3083,\n         \"擒\": 3084,\n         \"擔\": 3085,\n         \"擘\": 3086,\n         \"據\": 3087,\n         \"擞\": 3088,\n         \"擠\": 3089,\n         \"擡\": 3090,\n         \"擢\": 3091,\n         \"擦\": 3092,\n         \"擬\": 3093,\n         \"擰\": 3094,\n         \"擱\": 3095,\n         \"擲\": 3096,\n         \"擴\": 3097,\n         \"擷\": 3098,\n         \"擺\": 3099,\n         \"擼\": 3100,\n         \"擾\": 3101,\n         \"攀\": 3102,\n         \"攏\": 3103,\n         \"攒\": 3104,\n         \"攔\": 3105,\n         \"攘\": 3106,\n         \"攙\": 3107,\n         \"攜\": 3108,\n         \"攝\": 3109,\n         \"攞\": 3110,\n         \"攢\": 3111,\n         \"攣\": 3112,\n         \"攤\": 3113,\n         \"攥\": 3114,\n         \"攪\": 3115,\n         \"攫\": 3116,\n         \"攬\": 3117,\n         \"支\": 3118,\n         \"收\": 3119,\n         \"攸\": 3120,\n         \"改\": 3121,\n         \"攻\": 3122,\n         \"放\": 3123,\n         \"政\": 3124,\n         \"故\": 3125,\n         \"效\": 3126,\n         \"敌\": 3127,\n         \"敍\": 3128,\n         \"敎\": 3129,\n         \"敏\": 3130,\n         \"救\": 3131,\n         \"敕\": 3132,\n         \"敖\": 3133,\n         \"敗\": 3134,\n         \"敘\": 3135,\n         \"教\": 3136,\n         \"敛\": 3137,\n         \"敝\": 3138,\n         \"敞\": 3139,\n         \"敢\": 3140,\n         \"散\": 3141,\n         \"敦\": 3142,\n         \"敬\": 3143,\n         \"数\": 3144,\n         \"敲\": 3145,\n         \"整\": 3146,\n         \"敵\": 3147,\n         \"敷\": 3148,\n         \"數\": 3149,\n         \"斂\": 3150,\n         \"斃\": 3151,\n         \"文\": 3152,\n         \"斋\": 3153,\n         \"斌\": 3154,\n         \"斎\": 3155,\n         \"斐\": 3156,\n         \"斑\": 3157,\n         \"斓\": 3158,\n         \"斗\": 3159,\n         \"料\": 3160,\n         \"斛\": 3161,\n         \"斜\": 3162,\n         \"斟\": 3163,\n         \"斡\": 3164,\n         \"斤\": 3165,\n         \"斥\": 3166,\n         \"斧\": 3167,\n         \"斩\": 3168,\n         \"斫\": 3169,\n         \"斬\": 3170,\n         \"断\": 3171,\n         \"斯\": 3172,\n         \"新\": 3173,\n         \"斷\": 3174,\n         \"方\": 3175,\n         \"於\": 3176,\n         \"施\": 3177,\n         \"旁\": 3178,\n         \"旃\": 3179,\n         \"旅\": 3180,\n         \"旋\": 3181,\n         \"旌\": 3182,\n         \"旎\": 3183,\n         \"族\": 3184,\n         \"旖\": 3185,\n         \"旗\": 3186,\n         \"无\": 3187,\n         \"既\": 3188,\n         \"日\": 3189,\n         \"旦\": 3190,\n         \"旧\": 3191,\n         \"旨\": 3192,\n         \"早\": 3193,\n         \"旬\": 3194,\n         \"旭\": 3195,\n         \"旮\": 3196,\n         \"旱\": 3197,\n         \"时\": 3198,\n         \"旷\": 3199,\n         \"旺\": 3200,\n         \"旻\": 3201,\n         \"昀\": 3202,\n         \"昂\": 3203,\n         \"昆\": 3204,\n         \"昇\": 3205,\n         \"昉\": 3206,\n         \"昊\": 3207,\n         \"昌\": 3208,\n         \"明\": 3209,\n         \"昏\": 3210,\n         \"易\": 3211,\n         \"昔\": 3212,\n         \"昕\": 3213,\n         \"昙\": 3214,\n         \"星\": 3215,\n         \"映\": 3216,\n         \"春\": 3217,\n         \"昧\": 3218,\n         \"昨\": 3219,\n         \"昭\": 3220,\n         \"是\": 3221,\n         \"昱\": 3222,\n         \"昴\": 3223,\n         \"昵\": 3224,\n         \"昶\": 3225,\n         \"昼\": 3226,\n         \"显\": 3227,\n         \"晁\": 3228,\n         \"時\": 3229,\n         \"晃\": 3230,\n         \"晉\": 3231,\n         \"晋\": 3232,\n         \"晌\": 3233,\n         \"晏\": 3234,\n         \"晒\": 3235,\n         \"晓\": 3236,\n         \"晔\": 3237,\n         \"晕\": 3238,\n         \"晖\": 3239,\n         \"晗\": 3240,\n         \"晚\": 3241,\n         \"晝\": 3242,\n         \"晞\": 3243,\n         \"晟\": 3244,\n         \"晤\": 3245,\n         \"晦\": 3246,\n         \"晨\": 3247,\n         \"晩\": 3248,\n         \"普\": 3249,\n         \"景\": 3250,\n         \"晰\": 3251,\n         \"晴\": 3252,\n         \"晶\": 3253,\n         \"晷\": 3254,\n         \"智\": 3255,\n         \"晾\": 3256,\n         \"暂\": 3257,\n         \"暄\": 3258,\n         \"暇\": 3259,\n         \"暈\": 3260,\n         \"暉\": 3261,\n         \"暌\": 3262,\n         \"暐\": 3263,\n         \"暑\": 3264,\n         \"暖\": 3265,\n         \"暗\": 3266,\n         \"暝\": 3267,\n         \"暢\": 3268,\n         \"暧\": 3269,\n         \"暨\": 3270,\n         \"暫\": 3271,\n         \"暮\": 3272,\n         \"暱\": 3273,\n         \"暴\": 3274,\n         \"暸\": 3275,\n         \"暹\": 3276,\n         \"曄\": 3277,\n         \"曆\": 3278,\n         \"曇\": 3279,\n         \"曉\": 3280,\n         \"曖\": 3281,\n         \"曙\": 3282,\n         \"曜\": 3283,\n         \"曝\": 3284,\n         \"曠\": 3285,\n         \"曦\": 3286,\n         \"曬\": 3287,\n         \"曰\": 3288,\n         \"曲\": 3289,\n         \"曳\": 3290,\n         \"更\": 3291,\n         \"書\": 3292,\n         \"曹\": 3293,\n         \"曼\": 3294,\n         \"曾\": 3295,\n         \"替\": 3296,\n         \"最\": 3297,\n         \"會\": 3298,\n         \"月\": 3299,\n         \"有\": 3300,\n         \"朋\": 3301,\n         \"服\": 3302,\n         \"朐\": 3303,\n         \"朔\": 3304,\n         \"朕\": 3305,\n         \"朗\": 3306,\n         \"望\": 3307,\n         \"朝\": 3308,\n         \"期\": 3309,\n         \"朦\": 3310,\n         \"朧\": 3311,\n         \"木\": 3312,\n         \"未\": 3313,\n         \"末\": 3314,\n         \"本\": 3315,\n         \"札\": 3316,\n         \"朮\": 3317,\n         \"术\": 3318,\n         \"朱\": 3319,\n         \"朴\": 3320,\n         \"朵\": 3321,\n         \"机\": 3322,\n         \"朽\": 3323,\n         \"杀\": 3324,\n         \"杂\": 3325,\n         \"权\": 3326,\n         \"杆\": 3327,\n         \"杈\": 3328,\n         \"杉\": 3329,\n         \"李\": 3330,\n         \"杏\": 3331,\n         \"材\": 3332,\n         \"村\": 3333,\n         \"杓\": 3334,\n         \"杖\": 3335,\n         \"杜\": 3336,\n         \"杞\": 3337,\n         \"束\": 3338,\n         \"杠\": 3339,\n         \"条\": 3340,\n         \"来\": 3341,\n         \"杨\": 3342,\n         \"杭\": 3343,\n         \"杯\": 3344,\n         \"杰\": 3345,\n         \"東\": 3346,\n         \"杳\": 3347,\n         \"杵\": 3348,\n         \"杷\": 3349,\n         \"杼\": 3350,\n         \"松\": 3351,\n         \"板\": 3352,\n         \"极\": 3353,\n         \"构\": 3354,\n         \"枇\": 3355,\n         \"枉\": 3356,\n         \"枋\": 3357,\n         \"析\": 3358,\n         \"枕\": 3359,\n         \"林\": 3360,\n         \"枚\": 3361,\n         \"果\": 3362,\n         \"枝\": 3363,\n         \"枢\": 3364,\n         \"枣\": 3365,\n         \"枪\": 3366,\n         \"枫\": 3367,\n         \"枭\": 3368,\n         \"枯\": 3369,\n         \"枰\": 3370,\n         \"枱\": 3371,\n         \"枳\": 3372,\n         \"架\": 3373,\n         \"枷\": 3374,\n         \"枸\": 3375,\n         \"柄\": 3376,\n         \"柏\": 3377,\n         \"某\": 3378,\n         \"柑\": 3379,\n         \"柒\": 3380,\n         \"染\": 3381,\n         \"柔\": 3382,\n         \"柘\": 3383,\n         \"柚\": 3384,\n         \"柜\": 3385,\n         \"柞\": 3386,\n         \"柠\": 3387,\n         \"柢\": 3388,\n         \"查\": 3389,\n         \"柩\": 3390,\n         \"柬\": 3391,\n         \"柯\": 3392,\n         \"柱\": 3393,\n         \"柳\": 3394,\n         \"柴\": 3395,\n         \"柵\": 3396,\n         \"査\": 3397,\n         \"柿\": 3398,\n         \"栀\": 3399,\n         \"栃\": 3400,\n         \"栄\": 3401,\n         \"栅\": 3402,\n         \"标\": 3403,\n         \"栈\": 3404,\n         \"栉\": 3405,\n         \"栋\": 3406,\n         \"栎\": 3407,\n         \"栏\": 3408,\n         \"树\": 3409,\n         \"栓\": 3410,\n         \"栖\": 3411,\n         \"栗\": 3412,\n         \"校\": 3413,\n         \"栩\": 3414,\n         \"株\": 3415,\n         \"样\": 3416,\n         \"核\": 3417,\n         \"根\": 3418,\n         \"格\": 3419,\n         \"栽\": 3420,\n         \"栾\": 3421,\n         \"桀\": 3422,\n         \"桁\": 3423,\n         \"桂\": 3424,\n         \"桃\": 3425,\n         \"桅\": 3426,\n         \"框\": 3427,\n         \"案\": 3428,\n         \"桉\": 3429,\n         \"桌\": 3430,\n         \"桎\": 3431,\n         \"桐\": 3432,\n         \"桑\": 3433,\n         \"桓\": 3434,\n         \"桔\": 3435,\n         \"桜\": 3436,\n         \"桠\": 3437,\n         \"桡\": 3438,\n         \"桢\": 3439,\n         \"档\": 3440,\n         \"桥\": 3441,\n         \"桦\": 3442,\n         \"桧\": 3443,\n         \"桨\": 3444,\n         \"桩\": 3445,\n         \"桶\": 3446,\n         \"桿\": 3447,\n         \"梁\": 3448,\n         \"梅\": 3449,\n         \"梆\": 3450,\n         \"梏\": 3451,\n         \"梓\": 3452,\n         \"梗\": 3453,\n         \"條\": 3454,\n         \"梟\": 3455,\n         \"梢\": 3456,\n         \"梦\": 3457,\n         \"梧\": 3458,\n         \"梨\": 3459,\n         \"梭\": 3460,\n         \"梯\": 3461,\n         \"械\": 3462,\n         \"梳\": 3463,\n         \"梵\": 3464,\n         \"梶\": 3465,\n         \"检\": 3466,\n         \"棂\": 3467,\n         \"棄\": 3468,\n         \"棉\": 3469,\n         \"棋\": 3470,\n         \"棍\": 3471,\n         \"棒\": 3472,\n         \"棕\": 3473,\n         \"棗\": 3474,\n         \"棘\": 3475,\n         \"棚\": 3476,\n         \"棟\": 3477,\n         \"棠\": 3478,\n         \"棣\": 3479,\n         \"棧\": 3480,\n         \"森\": 3481,\n         \"棱\": 3482,\n         \"棲\": 3483,\n         \"棵\": 3484,\n         \"棹\": 3485,\n         \"棺\": 3486,\n         \"椁\": 3487,\n         \"椅\": 3488,\n         \"椋\": 3489,\n         \"植\": 3490,\n         \"椎\": 3491,\n         \"椒\": 3492,\n         \"検\": 3493,\n         \"椪\": 3494,\n         \"椭\": 3495,\n         \"椰\": 3496,\n         \"椹\": 3497,\n         \"椽\": 3498,\n         \"椿\": 3499,\n         \"楂\": 3500,\n         \"楊\": 3501,\n         \"楓\": 3502,\n         \"楔\": 3503,\n         \"楚\": 3504,\n         \"楝\": 3505,\n         \"楞\": 3506,\n         \"楠\": 3507,\n         \"楣\": 3508,\n         \"楨\": 3509,\n         \"楫\": 3510,\n         \"業\": 3511,\n         \"楮\": 3512,\n         \"極\": 3513,\n         \"楷\": 3514,\n         \"楸\": 3515,\n         \"楹\": 3516,\n         \"楼\": 3517,\n         \"楽\": 3518,\n         \"概\": 3519,\n         \"榄\": 3520,\n         \"榆\": 3521,\n         \"榈\": 3522,\n         \"榉\": 3523,\n         \"榔\": 3524,\n         \"榕\": 3525,\n         \"榖\": 3526,\n         \"榛\": 3527,\n         \"榜\": 3528,\n         \"榨\": 3529,\n         \"榫\": 3530,\n         \"榭\": 3531,\n         \"榮\": 3532,\n         \"榱\": 3533,\n         \"榴\": 3534,\n         \"榷\": 3535,\n         \"榻\": 3536,\n         \"槁\": 3537,\n         \"槃\": 3538,\n         \"構\": 3539,\n         \"槌\": 3540,\n         \"槍\": 3541,\n         \"槎\": 3542,\n         \"槐\": 3543,\n         \"槓\": 3544,\n         \"様\": 3545,\n         \"槛\": 3546,\n         \"槟\": 3547,\n         \"槤\": 3548,\n         \"槭\": 3549,\n         \"槲\": 3550,\n         \"槳\": 3551,\n         \"槻\": 3552,\n         \"槽\": 3553,\n         \"槿\": 3554,\n         \"樁\": 3555,\n         \"樂\": 3556,\n         \"樊\": 3557,\n         \"樑\": 3558,\n         \"樓\": 3559,\n         \"標\": 3560,\n         \"樞\": 3561,\n         \"樟\": 3562,\n         \"模\": 3563,\n         \"樣\": 3564,\n         \"権\": 3565,\n         \"横\": 3566,\n         \"樫\": 3567,\n         \"樯\": 3568,\n         \"樱\": 3569,\n         \"樵\": 3570,\n         \"樸\": 3571,\n         \"樹\": 3572,\n         \"樺\": 3573,\n         \"樽\": 3574,\n         \"樾\": 3575,\n         \"橄\": 3576,\n         \"橇\": 3577,\n         \"橋\": 3578,\n         \"橐\": 3579,\n         \"橘\": 3580,\n         \"橙\": 3581,\n         \"機\": 3582,\n         \"橡\": 3583,\n         \"橢\": 3584,\n         \"橫\": 3585,\n         \"橱\": 3586,\n         \"橹\": 3587,\n         \"橼\": 3588,\n         \"檀\": 3589,\n         \"檄\": 3590,\n         \"檎\": 3591,\n         \"檐\": 3592,\n         \"檔\": 3593,\n         \"檗\": 3594,\n         \"檜\": 3595,\n         \"檢\": 3596,\n         \"檬\": 3597,\n         \"檯\": 3598,\n         \"檳\": 3599,\n         \"檸\": 3600,\n         \"檻\": 3601,\n         \"櫃\": 3602,\n         \"櫚\": 3603,\n         \"櫛\": 3604,\n         \"櫥\": 3605,\n         \"櫸\": 3606,\n         \"櫻\": 3607,\n         \"欄\": 3608,\n         \"權\": 3609,\n         \"欒\": 3610,\n         \"欖\": 3611,\n         \"欠\": 3612,\n         \"次\": 3613,\n         \"欢\": 3614,\n         \"欣\": 3615,\n         \"欧\": 3616,\n         \"欲\": 3617,\n         \"欸\": 3618,\n         \"欺\": 3619,\n         \"欽\": 3620,\n         \"款\": 3621,\n         \"歆\": 3622,\n         \"歇\": 3623,\n         \"歉\": 3624,\n         \"歌\": 3625,\n         \"歎\": 3626,\n         \"歐\": 3627,\n         \"歓\": 3628,\n         \"歙\": 3629,\n         \"歛\": 3630,\n         \"歡\": 3631,\n         \"止\": 3632,\n         \"正\": 3633,\n         \"此\": 3634,\n         \"步\": 3635,\n         \"武\": 3636,\n         \"歧\": 3637,\n         \"歩\": 3638,\n         \"歪\": 3639,\n         \"歯\": 3640,\n         \"歲\": 3641,\n         \"歳\": 3642,\n         \"歴\": 3643,\n         \"歷\": 3644,\n         \"歸\": 3645,\n         \"歹\": 3646,\n         \"死\": 3647,\n         \"歼\": 3648,\n         \"殁\": 3649,\n         \"殃\": 3650,\n         \"殆\": 3651,\n         \"殇\": 3652,\n         \"殉\": 3653,\n         \"殊\": 3654,\n         \"残\": 3655,\n         \"殒\": 3656,\n         \"殓\": 3657,\n         \"殖\": 3658,\n         \"殘\": 3659,\n         \"殞\": 3660,\n         \"殡\": 3661,\n         \"殤\": 3662,\n         \"殭\": 3663,\n         \"殯\": 3664,\n         \"殲\": 3665,\n         \"殴\": 3666,\n         \"段\": 3667,\n         \"殷\": 3668,\n         \"殺\": 3669,\n         \"殼\": 3670,\n         \"殿\": 3671,\n         \"毀\": 3672,\n         \"毁\": 3673,\n         \"毂\": 3674,\n         \"毅\": 3675,\n         \"毆\": 3676,\n         \"毋\": 3677,\n         \"母\": 3678,\n         \"毎\": 3679,\n         \"每\": 3680,\n         \"毒\": 3681,\n         \"毓\": 3682,\n         \"比\": 3683,\n         \"毕\": 3684,\n         \"毗\": 3685,\n         \"毘\": 3686,\n         \"毙\": 3687,\n         \"毛\": 3688,\n         \"毡\": 3689,\n         \"毫\": 3690,\n         \"毯\": 3691,\n         \"毽\": 3692,\n         \"氈\": 3693,\n         \"氏\": 3694,\n         \"氐\": 3695,\n         \"民\": 3696,\n         \"氓\": 3697,\n         \"气\": 3698,\n         \"氖\": 3699,\n         \"気\": 3700,\n         \"氙\": 3701,\n         \"氛\": 3702,\n         \"氟\": 3703,\n         \"氡\": 3704,\n         \"氢\": 3705,\n         \"氣\": 3706,\n         \"氤\": 3707,\n         \"氦\": 3708,\n         \"氧\": 3709,\n         \"氨\": 3710,\n         \"氪\": 3711,\n         \"氫\": 3712,\n         \"氮\": 3713,\n         \"氯\": 3714,\n         \"氰\": 3715,\n         \"氲\": 3716,\n         \"水\": 3717,\n         \"氷\": 3718,\n         \"永\": 3719,\n         \"氹\": 3720,\n         \"氾\": 3721,\n         \"汀\": 3722,\n         \"汁\": 3723,\n         \"求\": 3724,\n         \"汆\": 3725,\n         \"汇\": 3726,\n         \"汉\": 3727,\n         \"汎\": 3728,\n         \"汐\": 3729,\n         \"汕\": 3730,\n         \"汗\": 3731,\n         \"汙\": 3732,\n         \"汛\": 3733,\n         \"汝\": 3734,\n         \"汞\": 3735,\n         \"江\": 3736,\n         \"池\": 3737,\n         \"污\": 3738,\n         \"汤\": 3739,\n         \"汨\": 3740,\n         \"汩\": 3741,\n         \"汪\": 3742,\n         \"汰\": 3743,\n         \"汲\": 3744,\n         \"汴\": 3745,\n         \"汶\": 3746,\n         \"汹\": 3747,\n         \"決\": 3748,\n         \"汽\": 3749,\n         \"汾\": 3750,\n         \"沁\": 3751,\n         \"沂\": 3752,\n         \"沃\": 3753,\n         \"沅\": 3754,\n         \"沈\": 3755,\n         \"沉\": 3756,\n         \"沌\": 3757,\n         \"沏\": 3758,\n         \"沐\": 3759,\n         \"沒\": 3760,\n         \"沓\": 3761,\n         \"沖\": 3762,\n         \"沙\": 3763,\n         \"沛\": 3764,\n         \"沟\": 3765,\n         \"没\": 3766,\n         \"沢\": 3767,\n         \"沣\": 3768,\n         \"沥\": 3769,\n         \"沦\": 3770,\n         \"沧\": 3771,\n         \"沪\": 3772,\n         \"沫\": 3773,\n         \"沭\": 3774,\n         \"沮\": 3775,\n         \"沱\": 3776,\n         \"河\": 3777,\n         \"沸\": 3778,\n         \"油\": 3779,\n         \"治\": 3780,\n         \"沼\": 3781,\n         \"沽\": 3782,\n         \"沾\": 3783,\n         \"沿\": 3784,\n         \"況\": 3785,\n         \"泄\": 3786,\n         \"泉\": 3787,\n         \"泊\": 3788,\n         \"泌\": 3789,\n         \"泓\": 3790,\n         \"法\": 3791,\n         \"泗\": 3792,\n         \"泛\": 3793,\n         \"泞\": 3794,\n         \"泠\": 3795,\n         \"泡\": 3796,\n         \"波\": 3797,\n         \"泣\": 3798,\n         \"泥\": 3799,\n         \"注\": 3800,\n         \"泪\": 3801,\n         \"泫\": 3802,\n         \"泮\": 3803,\n         \"泯\": 3804,\n         \"泰\": 3805,\n         \"泱\": 3806,\n         \"泳\": 3807,\n         \"泵\": 3808,\n         \"泷\": 3809,\n         \"泸\": 3810,\n         \"泻\": 3811,\n         \"泼\": 3812,\n         \"泽\": 3813,\n         \"泾\": 3814,\n         \"洁\": 3815,\n         \"洄\": 3816,\n         \"洋\": 3817,\n         \"洒\": 3818,\n         \"洗\": 3819,\n         \"洙\": 3820,\n         \"洛\": 3821,\n         \"洞\": 3822,\n         \"津\": 3823,\n         \"洩\": 3824,\n         \"洪\": 3825,\n         \"洮\": 3826,\n         \"洱\": 3827,\n         \"洲\": 3828,\n         \"洵\": 3829,\n         \"洶\": 3830,\n         \"洸\": 3831,\n         \"洹\": 3832,\n         \"活\": 3833,\n         \"洼\": 3834,\n         \"洽\": 3835,\n         \"派\": 3836,\n         \"流\": 3837,\n         \"浃\": 3838,\n         \"浄\": 3839,\n         \"浅\": 3840,\n         \"浆\": 3841,\n         \"浇\": 3842,\n         \"浊\": 3843,\n         \"测\": 3844,\n         \"济\": 3845,\n         \"浏\": 3846,\n         \"浑\": 3847,\n         \"浒\": 3848,\n         \"浓\": 3849,\n         \"浔\": 3850,\n         \"浙\": 3851,\n         \"浚\": 3852,\n         \"浜\": 3853,\n         \"浣\": 3854,\n         \"浦\": 3855,\n         \"浩\": 3856,\n         \"浪\": 3857,\n         \"浬\": 3858,\n         \"浮\": 3859,\n         \"浯\": 3860,\n         \"浴\": 3861,\n         \"海\": 3862,\n         \"浸\": 3863,\n         \"涂\": 3864,\n         \"涅\": 3865,\n         \"涇\": 3866,\n         \"消\": 3867,\n         \"涉\": 3868,\n         \"涌\": 3869,\n         \"涎\": 3870,\n         \"涓\": 3871,\n         \"涔\": 3872,\n         \"涕\": 3873,\n         \"涙\": 3874,\n         \"涛\": 3875,\n         \"涝\": 3876,\n         \"涞\": 3877,\n         \"涟\": 3878,\n         \"涠\": 3879,\n         \"涡\": 3880,\n         \"涣\": 3881,\n         \"涤\": 3882,\n         \"润\": 3883,\n         \"涧\": 3884,\n         \"涨\": 3885,\n         \"涩\": 3886,\n         \"涪\": 3887,\n         \"涮\": 3888,\n         \"涯\": 3889,\n         \"液\": 3890,\n         \"涵\": 3891,\n         \"涸\": 3892,\n         \"涼\": 3893,\n         \"涿\": 3894,\n         \"淀\": 3895,\n         \"淄\": 3896,\n         \"淅\": 3897,\n         \"淆\": 3898,\n         \"淇\": 3899,\n         \"淋\": 3900,\n         \"淌\": 3901,\n         \"淑\": 3902,\n         \"淒\": 3903,\n         \"淖\": 3904,\n         \"淘\": 3905,\n         \"淙\": 3906,\n         \"淚\": 3907,\n         \"淞\": 3908,\n         \"淡\": 3909,\n         \"淤\": 3910,\n         \"淦\": 3911,\n         \"淨\": 3912,\n         \"淩\": 3913,\n         \"淪\": 3914,\n         \"淫\": 3915,\n         \"淬\": 3916,\n         \"淮\": 3917,\n         \"深\": 3918,\n         \"淳\": 3919,\n         \"淵\": 3920,\n         \"混\": 3921,\n         \"淹\": 3922,\n         \"淺\": 3923,\n         \"添\": 3924,\n         \"淼\": 3925,\n         \"清\": 3926,\n         \"済\": 3927,\n         \"渉\": 3928,\n         \"渊\": 3929,\n         \"渋\": 3930,\n         \"渍\": 3931,\n         \"渎\": 3932,\n         \"渐\": 3933,\n         \"渔\": 3934,\n         \"渗\": 3935,\n         \"渙\": 3936,\n         \"渚\": 3937,\n         \"減\": 3938,\n         \"渝\": 3939,\n         \"渠\": 3940,\n         \"渡\": 3941,\n         \"渣\": 3942,\n         \"渤\": 3943,\n         \"渥\": 3944,\n         \"渦\": 3945,\n         \"温\": 3946,\n         \"測\": 3947,\n         \"渭\": 3948,\n         \"港\": 3949,\n         \"渲\": 3950,\n         \"渴\": 3951,\n         \"游\": 3952,\n         \"渺\": 3953,\n         \"渾\": 3954,\n         \"湃\": 3955,\n         \"湄\": 3956,\n         \"湊\": 3957,\n         \"湍\": 3958,\n         \"湖\": 3959,\n         \"湘\": 3960,\n         \"湛\": 3961,\n         \"湟\": 3962,\n         \"湧\": 3963,\n         \"湫\": 3964,\n         \"湮\": 3965,\n         \"湯\": 3966,\n         \"湳\": 3967,\n         \"湾\": 3968,\n         \"湿\": 3969,\n         \"満\": 3970,\n         \"溃\": 3971,\n         \"溅\": 3972,\n         \"溉\": 3973,\n         \"溏\": 3974,\n         \"源\": 3975,\n         \"準\": 3976,\n         \"溜\": 3977,\n         \"溝\": 3978,\n         \"溟\": 3979,\n         \"溢\": 3980,\n         \"溥\": 3981,\n         \"溧\": 3982,\n         \"溪\": 3983,\n         \"溫\": 3984,\n         \"溯\": 3985,\n         \"溱\": 3986,\n         \"溴\": 3987,\n         \"溶\": 3988,\n         \"溺\": 3989,\n         \"溼\": 3990,\n         \"滁\": 3991,\n         \"滂\": 3992,\n         \"滄\": 3993,\n         \"滅\": 3994,\n         \"滇\": 3995,\n         \"滋\": 3996,\n         \"滌\": 3997,\n         \"滑\": 3998,\n         \"滓\": 3999,\n         \"滔\": 4000,\n         \"滕\": 4001,\n         \"滙\": 4002,\n         \"滚\": 4003,\n         \"滝\": 4004,\n         \"滞\": 4005,\n         \"滟\": 4006,\n         \"满\": 4007,\n         \"滢\": 4008,\n         \"滤\": 4009,\n         \"滥\": 4010,\n         \"滦\": 4011,\n         \"滨\": 4012,\n         \"滩\": 4013,\n         \"滬\": 4014,\n         \"滯\": 4015,\n         \"滲\": 4016,\n         \"滴\": 4017,\n         \"滷\": 4018,\n         \"滸\": 4019,\n         \"滾\": 4020,\n         \"滿\": 4021,\n         \"漁\": 4022,\n         \"漂\": 4023,\n         \"漆\": 4024,\n         \"漉\": 4025,\n         \"漏\": 4026,\n         \"漓\": 4027,\n         \"演\": 4028,\n         \"漕\": 4029,\n         \"漠\": 4030,\n         \"漢\": 4031,\n         \"漣\": 4032,\n         \"漩\": 4033,\n         \"漪\": 4034,\n         \"漫\": 4035,\n         \"漬\": 4036,\n         \"漯\": 4037,\n         \"漱\": 4038,\n         \"漲\": 4039,\n         \"漳\": 4040,\n         \"漸\": 4041,\n         \"漾\": 4042,\n         \"漿\": 4043,\n         \"潆\": 4044,\n         \"潇\": 4045,\n         \"潋\": 4046,\n         \"潍\": 4047,\n         \"潑\": 4048,\n         \"潔\": 4049,\n         \"潘\": 4050,\n         \"潛\": 4051,\n         \"潜\": 4052,\n         \"潞\": 4053,\n         \"潟\": 4054,\n         \"潢\": 4055,\n         \"潤\": 4056,\n         \"潦\": 4057,\n         \"潧\": 4058,\n         \"潭\": 4059,\n         \"潮\": 4060,\n         \"潰\": 4061,\n         \"潴\": 4062,\n         \"潸\": 4063,\n         \"潺\": 4064,\n         \"潼\": 4065,\n         \"澀\": 4066,\n         \"澄\": 4067,\n         \"澆\": 4068,\n         \"澈\": 4069,\n         \"澍\": 4070,\n         \"澎\": 4071,\n         \"澗\": 4072,\n         \"澜\": 4073,\n         \"澡\": 4074,\n         \"澤\": 4075,\n         \"澧\": 4076,\n         \"澱\": 4077,\n         \"澳\": 4078,\n         \"澹\": 4079,\n         \"激\": 4080,\n         \"濁\": 4081,\n         \"濂\": 4082,\n         \"濃\": 4083,\n         \"濑\": 4084,\n         \"濒\": 4085,\n         \"濕\": 4086,\n         \"濘\": 4087,\n         \"濛\": 4088,\n         \"濟\": 4089,\n         \"濠\": 4090,\n         \"濡\": 4091,\n         \"濤\": 4092,\n         \"濫\": 4093,\n         \"濬\": 4094,\n         \"濮\": 4095,\n         \"濯\": 4096,\n         \"濱\": 4097,\n         \"濺\": 4098,\n         \"濾\": 4099,\n         \"瀅\": 4100,\n         \"瀆\": 4101,\n         \"瀉\": 4102,\n         \"瀋\": 4103,\n         \"瀏\": 4104,\n         \"瀑\": 4105,\n         \"瀕\": 4106,\n         \"瀘\": 4107,\n         \"瀚\": 4108,\n         \"瀛\": 4109,\n         \"瀝\": 4110,\n         \"瀞\": 4111,\n         \"瀟\": 4112,\n         \"瀧\": 4113,\n         \"瀨\": 4114,\n         \"瀬\": 4115,\n         \"瀰\": 4116,\n         \"瀾\": 4117,\n         \"灌\": 4118,\n         \"灏\": 4119,\n         \"灑\": 4120,\n         \"灘\": 4121,\n         \"灝\": 4122,\n         \"灞\": 4123,\n         \"灣\": 4124,\n         \"火\": 4125,\n         \"灬\": 4126,\n         \"灭\": 4127,\n         \"灯\": 4128,\n         \"灰\": 4129,\n         \"灵\": 4130,\n         \"灶\": 4131,\n         \"灸\": 4132,\n         \"灼\": 4133,\n         \"災\": 4134,\n         \"灾\": 4135,\n         \"灿\": 4136,\n         \"炀\": 4137,\n         \"炁\": 4138,\n         \"炅\": 4139,\n         \"炉\": 4140,\n         \"炊\": 4141,\n         \"炎\": 4142,\n         \"炒\": 4143,\n         \"炔\": 4144,\n         \"炕\": 4145,\n         \"炖\": 4146,\n         \"炙\": 4147,\n         \"炜\": 4148,\n         \"炫\": 4149,\n         \"炬\": 4150,\n         \"炭\": 4151,\n         \"炮\": 4152,\n         \"炯\": 4153,\n         \"炳\": 4154,\n         \"炷\": 4155,\n         \"炸\": 4156,\n         \"点\": 4157,\n         \"為\": 4158,\n         \"炼\": 4159,\n         \"炽\": 4160,\n         \"烁\": 4161,\n         \"烂\": 4162,\n         \"烃\": 4163,\n         \"烈\": 4164,\n         \"烊\": 4165,\n         \"烏\": 4166,\n         \"烘\": 4167,\n         \"烙\": 4168,\n         \"烛\": 4169,\n         \"烟\": 4170,\n         \"烤\": 4171,\n         \"烦\": 4172,\n         \"烧\": 4173,\n         \"烨\": 4174,\n         \"烩\": 4175,\n         \"烫\": 4176,\n         \"烬\": 4177,\n         \"热\": 4178,\n         \"烯\": 4179,\n         \"烷\": 4180,\n         \"烹\": 4181,\n         \"烽\": 4182,\n         \"焉\": 4183,\n         \"焊\": 4184,\n         \"焕\": 4185,\n         \"焖\": 4186,\n         \"焗\": 4187,\n         \"焘\": 4188,\n         \"焙\": 4189,\n         \"焚\": 4190,\n         \"焜\": 4191,\n         \"無\": 4192,\n         \"焦\": 4193,\n         \"焯\": 4194,\n         \"焰\": 4195,\n         \"焱\": 4196,\n         \"然\": 4197,\n         \"焼\": 4198,\n         \"煅\": 4199,\n         \"煉\": 4200,\n         \"煊\": 4201,\n         \"煌\": 4202,\n         \"煎\": 4203,\n         \"煒\": 4204,\n         \"煖\": 4205,\n         \"煙\": 4206,\n         \"煜\": 4207,\n         \"煞\": 4208,\n         \"煤\": 4209,\n         \"煥\": 4210,\n         \"煦\": 4211,\n         \"照\": 4212,\n         \"煨\": 4213,\n         \"煩\": 4214,\n         \"煮\": 4215,\n         \"煲\": 4216,\n         \"煸\": 4217,\n         \"煽\": 4218,\n         \"熄\": 4219,\n         \"熊\": 4220,\n         \"熏\": 4221,\n         \"熒\": 4222,\n         \"熔\": 4223,\n         \"熙\": 4224,\n         \"熟\": 4225,\n         \"熠\": 4226,\n         \"熨\": 4227,\n         \"熬\": 4228,\n         \"熱\": 4229,\n         \"熵\": 4230,\n         \"熹\": 4231,\n         \"熾\": 4232,\n         \"燁\": 4233,\n         \"燃\": 4234,\n         \"燄\": 4235,\n         \"燈\": 4236,\n         \"燉\": 4237,\n         \"燊\": 4238,\n         \"燎\": 4239,\n         \"燒\": 4240,\n         \"燔\": 4241,\n         \"燕\": 4242,\n         \"燙\": 4243,\n         \"燜\": 4244,\n         \"營\": 4245,\n         \"燥\": 4246,\n         \"燦\": 4247,\n         \"燧\": 4248,\n         \"燭\": 4249,\n         \"燮\": 4250,\n         \"燴\": 4251,\n         \"燻\": 4252,\n         \"燼\": 4253,\n         \"燿\": 4254,\n         \"爆\": 4255,\n         \"爍\": 4256,\n         \"爐\": 4257,\n         \"爛\": 4258,\n         \"爪\": 4259,\n         \"爬\": 4260,\n         \"爭\": 4261,\n         \"爰\": 4262,\n         \"爱\": 4263,\n         \"爲\": 4264,\n         \"爵\": 4265,\n         \"父\": 4266,\n         \"爷\": 4267,\n         \"爸\": 4268,\n         \"爹\": 4269,\n         \"爺\": 4270,\n         \"爻\": 4271,\n         \"爽\": 4272,\n         \"爾\": 4273,\n         \"牆\": 4274,\n         \"片\": 4275,\n         \"版\": 4276,\n         \"牌\": 4277,\n         \"牍\": 4278,\n         \"牒\": 4279,\n         \"牙\": 4280,\n         \"牛\": 4281,\n         \"牝\": 4282,\n         \"牟\": 4283,\n         \"牠\": 4284,\n         \"牡\": 4285,\n         \"牢\": 4286,\n         \"牦\": 4287,\n         \"牧\": 4288,\n         \"物\": 4289,\n         \"牯\": 4290,\n         \"牲\": 4291,\n         \"牴\": 4292,\n         \"牵\": 4293,\n         \"特\": 4294,\n         \"牺\": 4295,\n         \"牽\": 4296,\n         \"犀\": 4297,\n         \"犁\": 4298,\n         \"犄\": 4299,\n         \"犊\": 4300,\n         \"犍\": 4301,\n         \"犒\": 4302,\n         \"犢\": 4303,\n         \"犧\": 4304,\n         \"犬\": 4305,\n         \"犯\": 4306,\n         \"状\": 4307,\n         \"犷\": 4308,\n         \"犸\": 4309,\n         \"犹\": 4310,\n         \"狀\": 4311,\n         \"狂\": 4312,\n         \"狄\": 4313,\n         \"狈\": 4314,\n         \"狎\": 4315,\n         \"狐\": 4316,\n         \"狒\": 4317,\n         \"狗\": 4318,\n         \"狙\": 4319,\n         \"狞\": 4320,\n         \"狠\": 4321,\n         \"狡\": 4322,\n         \"狩\": 4323,\n         \"独\": 4324,\n         \"狭\": 4325,\n         \"狮\": 4326,\n         \"狰\": 4327,\n         \"狱\": 4328,\n         \"狸\": 4329,\n         \"狹\": 4330,\n         \"狼\": 4331,\n         \"狽\": 4332,\n         \"猎\": 4333,\n         \"猕\": 4334,\n         \"猖\": 4335,\n         \"猗\": 4336,\n         \"猙\": 4337,\n         \"猛\": 4338,\n         \"猜\": 4339,\n         \"猝\": 4340,\n         \"猥\": 4341,\n         \"猩\": 4342,\n         \"猪\": 4343,\n         \"猫\": 4344,\n         \"猬\": 4345,\n         \"献\": 4346,\n         \"猴\": 4347,\n         \"猶\": 4348,\n         \"猷\": 4349,\n         \"猾\": 4350,\n         \"猿\": 4351,\n         \"獄\": 4352,\n         \"獅\": 4353,\n         \"獎\": 4354,\n         \"獐\": 4355,\n         \"獒\": 4356,\n         \"獗\": 4357,\n         \"獠\": 4358,\n         \"獣\": 4359,\n         \"獨\": 4360,\n         \"獭\": 4361,\n         \"獰\": 4362,\n         \"獲\": 4363,\n         \"獵\": 4364,\n         \"獷\": 4365,\n         \"獸\": 4366,\n         \"獺\": 4367,\n         \"獻\": 4368,\n         \"獼\": 4369,\n         \"獾\": 4370,\n         \"玄\": 4371,\n         \"率\": 4372,\n         \"玉\": 4373,\n         \"王\": 4374,\n         \"玑\": 4375,\n         \"玖\": 4376,\n         \"玛\": 4377,\n         \"玟\": 4378,\n         \"玠\": 4379,\n         \"玥\": 4380,\n         \"玩\": 4381,\n         \"玫\": 4382,\n         \"玮\": 4383,\n         \"环\": 4384,\n         \"现\": 4385,\n         \"玲\": 4386,\n         \"玳\": 4387,\n         \"玷\": 4388,\n         \"玺\": 4389,\n         \"玻\": 4390,\n         \"珀\": 4391,\n         \"珂\": 4392,\n         \"珅\": 4393,\n         \"珈\": 4394,\n         \"珉\": 4395,\n         \"珊\": 4396,\n         \"珍\": 4397,\n         \"珏\": 4398,\n         \"珐\": 4399,\n         \"珑\": 4400,\n         \"珙\": 4401,\n         \"珞\": 4402,\n         \"珠\": 4403,\n         \"珣\": 4404,\n         \"珥\": 4405,\n         \"珩\": 4406,\n         \"珪\": 4407,\n         \"班\": 4408,\n         \"珮\": 4409,\n         \"珲\": 4410,\n         \"珺\": 4411,\n         \"現\": 4412,\n         \"球\": 4413,\n         \"琅\": 4414,\n         \"理\": 4415,\n         \"琇\": 4416,\n         \"琉\": 4417,\n         \"琊\": 4418,\n         \"琍\": 4419,\n         \"琏\": 4420,\n         \"琐\": 4421,\n         \"琛\": 4422,\n         \"琢\": 4423,\n         \"琥\": 4424,\n         \"琦\": 4425,\n         \"琨\": 4426,\n         \"琪\": 4427,\n         \"琬\": 4428,\n         \"琮\": 4429,\n         \"琰\": 4430,\n         \"琲\": 4431,\n         \"琳\": 4432,\n         \"琴\": 4433,\n         \"琵\": 4434,\n         \"琶\": 4435,\n         \"琺\": 4436,\n         \"琼\": 4437,\n         \"瑀\": 4438,\n         \"瑁\": 4439,\n         \"瑄\": 4440,\n         \"瑋\": 4441,\n         \"瑕\": 4442,\n         \"瑗\": 4443,\n         \"瑙\": 4444,\n         \"瑚\": 4445,\n         \"瑛\": 4446,\n         \"瑜\": 4447,\n         \"瑞\": 4448,\n         \"瑟\": 4449,\n         \"瑠\": 4450,\n         \"瑣\": 4451,\n         \"瑤\": 4452,\n         \"瑩\": 4453,\n         \"瑪\": 4454,\n         \"瑯\": 4455,\n         \"瑰\": 4456,\n         \"瑶\": 4457,\n         \"瑾\": 4458,\n         \"璀\": 4459,\n         \"璁\": 4460,\n         \"璃\": 4461,\n         \"璇\": 4462,\n         \"璉\": 4463,\n         \"璋\": 4464,\n         \"璎\": 4465,\n         \"璐\": 4466,\n         \"璜\": 4467,\n         \"璞\": 4468,\n         \"璟\": 4469,\n         \"璧\": 4470,\n         \"璨\": 4471,\n         \"環\": 4472,\n         \"璽\": 4473,\n         \"璿\": 4474,\n         \"瓊\": 4475,\n         \"瓏\": 4476,\n         \"瓒\": 4477,\n         \"瓜\": 4478,\n         \"瓢\": 4479,\n         \"瓣\": 4480,\n         \"瓤\": 4481,\n         \"瓦\": 4482,\n         \"瓮\": 4483,\n         \"瓯\": 4484,\n         \"瓴\": 4485,\n         \"瓶\": 4486,\n         \"瓷\": 4487,\n         \"甄\": 4488,\n         \"甌\": 4489,\n         \"甕\": 4490,\n         \"甘\": 4491,\n         \"甙\": 4492,\n         \"甚\": 4493,\n         \"甜\": 4494,\n         \"生\": 4495,\n         \"產\": 4496,\n         \"産\": 4497,\n         \"甥\": 4498,\n         \"甦\": 4499,\n         \"用\": 4500,\n         \"甩\": 4501,\n         \"甫\": 4502,\n         \"甬\": 4503,\n         \"甭\": 4504,\n         \"甯\": 4505,\n         \"田\": 4506,\n         \"由\": 4507,\n         \"甲\": 4508,\n         \"申\": 4509,\n         \"电\": 4510,\n         \"男\": 4511,\n         \"甸\": 4512,\n         \"町\": 4513,\n         \"画\": 4514,\n         \"甾\": 4515,\n         \"畀\": 4516,\n         \"畅\": 4517,\n         \"界\": 4518,\n         \"畏\": 4519,\n         \"畑\": 4520,\n         \"畔\": 4521,\n         \"留\": 4522,\n         \"畜\": 4523,\n         \"畝\": 4524,\n         \"畢\": 4525,\n         \"略\": 4526,\n         \"畦\": 4527,\n         \"番\": 4528,\n         \"畫\": 4529,\n         \"異\": 4530,\n         \"畲\": 4531,\n         \"畳\": 4532,\n         \"畴\": 4533,\n         \"當\": 4534,\n         \"畸\": 4535,\n         \"畹\": 4536,\n         \"畿\": 4537,\n         \"疆\": 4538,\n         \"疇\": 4539,\n         \"疊\": 4540,\n         \"疏\": 4541,\n         \"疑\": 4542,\n         \"疔\": 4543,\n         \"疖\": 4544,\n         \"疗\": 4545,\n         \"疙\": 4546,\n         \"疚\": 4547,\n         \"疝\": 4548,\n         \"疟\": 4549,\n         \"疡\": 4550,\n         \"疣\": 4551,\n         \"疤\": 4552,\n         \"疥\": 4553,\n         \"疫\": 4554,\n         \"疮\": 4555,\n         \"疯\": 4556,\n         \"疱\": 4557,\n         \"疲\": 4558,\n         \"疳\": 4559,\n         \"疵\": 4560,\n         \"疸\": 4561,\n         \"疹\": 4562,\n         \"疼\": 4563,\n         \"疽\": 4564,\n         \"疾\": 4565,\n         \"痂\": 4566,\n         \"病\": 4567,\n         \"症\": 4568,\n         \"痈\": 4569,\n         \"痉\": 4570,\n         \"痊\": 4571,\n         \"痍\": 4572,\n         \"痒\": 4573,\n         \"痔\": 4574,\n         \"痕\": 4575,\n         \"痘\": 4576,\n         \"痙\": 4577,\n         \"痛\": 4578,\n         \"痞\": 4579,\n         \"痠\": 4580,\n         \"痢\": 4581,\n         \"痣\": 4582,\n         \"痤\": 4583,\n         \"痧\": 4584,\n         \"痨\": 4585,\n         \"痪\": 4586,\n         \"痫\": 4587,\n         \"痰\": 4588,\n         \"痱\": 4589,\n         \"痴\": 4590,\n         \"痹\": 4591,\n         \"痺\": 4592,\n         \"痼\": 4593,\n         \"痿\": 4594,\n         \"瘀\": 4595,\n         \"瘁\": 4596,\n         \"瘋\": 4597,\n         \"瘍\": 4598,\n         \"瘓\": 4599,\n         \"瘘\": 4600,\n         \"瘙\": 4601,\n         \"瘟\": 4602,\n         \"瘠\": 4603,\n         \"瘡\": 4604,\n         \"瘢\": 4605,\n         \"瘤\": 4606,\n         \"瘦\": 4607,\n         \"瘧\": 4608,\n         \"瘩\": 4609,\n         \"瘪\": 4610,\n         \"瘫\": 4611,\n         \"瘴\": 4612,\n         \"瘸\": 4613,\n         \"瘾\": 4614,\n         \"療\": 4615,\n         \"癇\": 4616,\n         \"癌\": 4617,\n         \"癒\": 4618,\n         \"癖\": 4619,\n         \"癜\": 4620,\n         \"癞\": 4621,\n         \"癡\": 4622,\n         \"癢\": 4623,\n         \"癣\": 4624,\n         \"癥\": 4625,\n         \"癫\": 4626,\n         \"癬\": 4627,\n         \"癮\": 4628,\n         \"癱\": 4629,\n         \"癲\": 4630,\n         \"癸\": 4631,\n         \"発\": 4632,\n         \"登\": 4633,\n         \"發\": 4634,\n         \"白\": 4635,\n         \"百\": 4636,\n         \"皂\": 4637,\n         \"的\": 4638,\n         \"皆\": 4639,\n         \"皇\": 4640,\n         \"皈\": 4641,\n         \"皋\": 4642,\n         \"皎\": 4643,\n         \"皑\": 4644,\n         \"皓\": 4645,\n         \"皖\": 4646,\n         \"皙\": 4647,\n         \"皚\": 4648,\n         \"皮\": 4649,\n         \"皰\": 4650,\n         \"皱\": 4651,\n         \"皴\": 4652,\n         \"皺\": 4653,\n         \"皿\": 4654,\n         \"盂\": 4655,\n         \"盃\": 4656,\n         \"盅\": 4657,\n         \"盆\": 4658,\n         \"盈\": 4659,\n         \"益\": 4660,\n         \"盎\": 4661,\n         \"盏\": 4662,\n         \"盐\": 4663,\n         \"监\": 4664,\n         \"盒\": 4665,\n         \"盔\": 4666,\n         \"盖\": 4667,\n         \"盗\": 4668,\n         \"盘\": 4669,\n         \"盛\": 4670,\n         \"盜\": 4671,\n         \"盞\": 4672,\n         \"盟\": 4673,\n         \"盡\": 4674,\n         \"監\": 4675,\n         \"盤\": 4676,\n         \"盥\": 4677,\n         \"盧\": 4678,\n         \"盪\": 4679,\n         \"目\": 4680,\n         \"盯\": 4681,\n         \"盱\": 4682,\n         \"盲\": 4683,\n         \"直\": 4684,\n         \"相\": 4685,\n         \"盹\": 4686,\n         \"盼\": 4687,\n         \"盾\": 4688,\n         \"省\": 4689,\n         \"眈\": 4690,\n         \"眉\": 4691,\n         \"看\": 4692,\n         \"県\": 4693,\n         \"眙\": 4694,\n         \"眞\": 4695,\n         \"真\": 4696,\n         \"眠\": 4697,\n         \"眦\": 4698,\n         \"眨\": 4699,\n         \"眩\": 4700,\n         \"眯\": 4701,\n         \"眶\": 4702,\n         \"眷\": 4703,\n         \"眸\": 4704,\n         \"眺\": 4705,\n         \"眼\": 4706,\n         \"眾\": 4707,\n         \"着\": 4708,\n         \"睁\": 4709,\n         \"睇\": 4710,\n         \"睏\": 4711,\n         \"睐\": 4712,\n         \"睑\": 4713,\n         \"睛\": 4714,\n         \"睜\": 4715,\n         \"睞\": 4716,\n         \"睡\": 4717,\n         \"睢\": 4718,\n         \"督\": 4719,\n         \"睥\": 4720,\n         \"睦\": 4721,\n         \"睨\": 4722,\n         \"睪\": 4723,\n         \"睫\": 4724,\n         \"睬\": 4725,\n         \"睹\": 4726,\n         \"睽\": 4727,\n         \"睾\": 4728,\n         \"睿\": 4729,\n         \"瞄\": 4730,\n         \"瞅\": 4731,\n         \"瞇\": 4732,\n         \"瞋\": 4733,\n         \"瞌\": 4734,\n         \"瞎\": 4735,\n         \"瞑\": 4736,\n         \"瞒\": 4737,\n         \"瞓\": 4738,\n         \"瞞\": 4739,\n         \"瞟\": 4740,\n         \"瞠\": 4741,\n         \"瞥\": 4742,\n         \"瞧\": 4743,\n         \"瞩\": 4744,\n         \"瞪\": 4745,\n         \"瞬\": 4746,\n         \"瞭\": 4747,\n         \"瞰\": 4748,\n         \"瞳\": 4749,\n         \"瞻\": 4750,\n         \"瞼\": 4751,\n         \"瞿\": 4752,\n         \"矇\": 4753,\n         \"矍\": 4754,\n         \"矗\": 4755,\n         \"矚\": 4756,\n         \"矛\": 4757,\n         \"矜\": 4758,\n         \"矢\": 4759,\n         \"矣\": 4760,\n         \"知\": 4761,\n         \"矩\": 4762,\n         \"矫\": 4763,\n         \"短\": 4764,\n         \"矮\": 4765,\n         \"矯\": 4766,\n         \"石\": 4767,\n         \"矶\": 4768,\n         \"矽\": 4769,\n         \"矾\": 4770,\n         \"矿\": 4771,\n         \"码\": 4772,\n         \"砂\": 4773,\n         \"砌\": 4774,\n         \"砍\": 4775,\n         \"砒\": 4776,\n         \"研\": 4777,\n         \"砖\": 4778,\n         \"砗\": 4779,\n         \"砚\": 4780,\n         \"砝\": 4781,\n         \"砣\": 4782,\n         \"砥\": 4783,\n         \"砧\": 4784,\n         \"砭\": 4785,\n         \"砰\": 4786,\n         \"砲\": 4787,\n         \"破\": 4788,\n         \"砷\": 4789,\n         \"砸\": 4790,\n         \"砺\": 4791,\n         \"砼\": 4792,\n         \"砾\": 4793,\n         \"础\": 4794,\n         \"硅\": 4795,\n         \"硐\": 4796,\n         \"硒\": 4797,\n         \"硕\": 4798,\n         \"硝\": 4799,\n         \"硫\": 4800,\n         \"硬\": 4801,\n         \"确\": 4802,\n         \"硯\": 4803,\n         \"硼\": 4804,\n         \"碁\": 4805,\n         \"碇\": 4806,\n         \"碉\": 4807,\n         \"碌\": 4808,\n         \"碍\": 4809,\n         \"碎\": 4810,\n         \"碑\": 4811,\n         \"碓\": 4812,\n         \"碗\": 4813,\n         \"碘\": 4814,\n         \"碚\": 4815,\n         \"碛\": 4816,\n         \"碟\": 4817,\n         \"碣\": 4818,\n         \"碧\": 4819,\n         \"碩\": 4820,\n         \"碰\": 4821,\n         \"碱\": 4822,\n         \"碳\": 4823,\n         \"碴\": 4824,\n         \"確\": 4825,\n         \"碼\": 4826,\n         \"碾\": 4827,\n         \"磁\": 4828,\n         \"磅\": 4829,\n         \"磊\": 4830,\n         \"磋\": 4831,\n         \"磐\": 4832,\n         \"磕\": 4833,\n         \"磚\": 4834,\n         \"磡\": 4835,\n         \"磨\": 4836,\n         \"磬\": 4837,\n         \"磯\": 4838,\n         \"磲\": 4839,\n         \"磷\": 4840,\n         \"磺\": 4841,\n         \"礁\": 4842,\n         \"礎\": 4843,\n         \"礙\": 4844,\n         \"礡\": 4845,\n         \"礦\": 4846,\n         \"礪\": 4847,\n         \"礫\": 4848,\n         \"礴\": 4849,\n         \"示\": 4850,\n         \"礼\": 4851,\n         \"社\": 4852,\n         \"祀\": 4853,\n         \"祁\": 4854,\n         \"祂\": 4855,\n         \"祇\": 4856,\n         \"祈\": 4857,\n         \"祉\": 4858,\n         \"祎\": 4859,\n         \"祐\": 4860,\n         \"祕\": 4861,\n         \"祖\": 4862,\n         \"祗\": 4863,\n         \"祚\": 4864,\n         \"祛\": 4865,\n         \"祜\": 4866,\n         \"祝\": 4867,\n         \"神\": 4868,\n         \"祟\": 4869,\n         \"祠\": 4870,\n         \"祢\": 4871,\n         \"祥\": 4872,\n         \"票\": 4873,\n         \"祭\": 4874,\n         \"祯\": 4875,\n         \"祷\": 4876,\n         \"祸\": 4877,\n         \"祺\": 4878,\n         \"祿\": 4879,\n         \"禀\": 4880,\n         \"禁\": 4881,\n         \"禄\": 4882,\n         \"禅\": 4883,\n         \"禍\": 4884,\n         \"禎\": 4885,\n         \"福\": 4886,\n         \"禛\": 4887,\n         \"禦\": 4888,\n         \"禧\": 4889,\n         \"禪\": 4890,\n         \"禮\": 4891,\n         \"禱\": 4892,\n         \"禹\": 4893,\n         \"禺\": 4894,\n         \"离\": 4895,\n         \"禽\": 4896,\n         \"禾\": 4897,\n         \"禿\": 4898,\n         \"秀\": 4899,\n         \"私\": 4900,\n         \"秃\": 4901,\n         \"秆\": 4902,\n         \"秉\": 4903,\n         \"秋\": 4904,\n         \"种\": 4905,\n         \"科\": 4906,\n         \"秒\": 4907,\n         \"秘\": 4908,\n         \"租\": 4909,\n         \"秣\": 4910,\n         \"秤\": 4911,\n         \"秦\": 4912,\n         \"秧\": 4913,\n         \"秩\": 4914,\n         \"秭\": 4915,\n         \"积\": 4916,\n         \"称\": 4917,\n         \"秸\": 4918,\n         \"移\": 4919,\n         \"秽\": 4920,\n         \"稀\": 4921,\n         \"稅\": 4922,\n         \"程\": 4923,\n         \"稍\": 4924,\n         \"税\": 4925,\n         \"稔\": 4926,\n         \"稗\": 4927,\n         \"稚\": 4928,\n         \"稜\": 4929,\n         \"稞\": 4930,\n         \"稟\": 4931,\n         \"稠\": 4932,\n         \"稣\": 4933,\n         \"種\": 4934,\n         \"稱\": 4935,\n         \"稲\": 4936,\n         \"稳\": 4937,\n         \"稷\": 4938,\n         \"稹\": 4939,\n         \"稻\": 4940,\n         \"稼\": 4941,\n         \"稽\": 4942,\n         \"稿\": 4943,\n         \"穀\": 4944,\n         \"穂\": 4945,\n         \"穆\": 4946,\n         \"穌\": 4947,\n         \"積\": 4948,\n         \"穎\": 4949,\n         \"穗\": 4950,\n         \"穢\": 4951,\n         \"穩\": 4952,\n         \"穫\": 4953,\n         \"穴\": 4954,\n         \"究\": 4955,\n         \"穷\": 4956,\n         \"穹\": 4957,\n         \"空\": 4958,\n         \"穿\": 4959,\n         \"突\": 4960,\n         \"窃\": 4961,\n         \"窄\": 4962,\n         \"窈\": 4963,\n         \"窍\": 4964,\n         \"窑\": 4965,\n         \"窒\": 4966,\n         \"窓\": 4967,\n         \"窕\": 4968,\n         \"窖\": 4969,\n         \"窗\": 4970,\n         \"窘\": 4971,\n         \"窜\": 4972,\n         \"窝\": 4973,\n         \"窟\": 4974,\n         \"窠\": 4975,\n         \"窥\": 4976,\n         \"窦\": 4977,\n         \"窨\": 4978,\n         \"窩\": 4979,\n         \"窪\": 4980,\n         \"窮\": 4981,\n         \"窯\": 4982,\n         \"窺\": 4983,\n         \"窿\": 4984,\n         \"竄\": 4985,\n         \"竅\": 4986,\n         \"竇\": 4987,\n         \"竊\": 4988,\n         \"立\": 4989,\n         \"竖\": 4990,\n         \"站\": 4991,\n         \"竜\": 4992,\n         \"竞\": 4993,\n         \"竟\": 4994,\n         \"章\": 4995,\n         \"竣\": 4996,\n         \"童\": 4997,\n         \"竭\": 4998,\n         \"端\": 4999,\n         \"競\": 5000,\n         \"竹\": 5001,\n         \"竺\": 5002,\n         \"竽\": 5003,\n         \"竿\": 5004,\n         \"笃\": 5005,\n         \"笆\": 5006,\n         \"笈\": 5007,\n         \"笋\": 5008,\n         \"笏\": 5009,\n         \"笑\": 5010,\n         \"笔\": 5011,\n         \"笙\": 5012,\n         \"笛\": 5013,\n         \"笞\": 5014,\n         \"笠\": 5015,\n         \"符\": 5016,\n         \"笨\": 5017,\n         \"第\": 5018,\n         \"笹\": 5019,\n         \"笺\": 5020,\n         \"笼\": 5021,\n         \"筆\": 5022,\n         \"等\": 5023,\n         \"筊\": 5024,\n         \"筋\": 5025,\n         \"筍\": 5026,\n         \"筏\": 5027,\n         \"筐\": 5028,\n         \"筑\": 5029,\n         \"筒\": 5030,\n         \"答\": 5031,\n         \"策\": 5032,\n         \"筛\": 5033,\n         \"筝\": 5034,\n         \"筠\": 5035,\n         \"筱\": 5036,\n         \"筲\": 5037,\n         \"筵\": 5038,\n         \"筷\": 5039,\n         \"筹\": 5040,\n         \"签\": 5041,\n         \"简\": 5042,\n         \"箇\": 5043,\n         \"箋\": 5044,\n         \"箍\": 5045,\n         \"箏\": 5046,\n         \"箐\": 5047,\n         \"箔\": 5048,\n         \"箕\": 5049,\n         \"算\": 5050,\n         \"箝\": 5051,\n         \"管\": 5052,\n         \"箩\": 5053,\n         \"箫\": 5054,\n         \"箭\": 5055,\n         \"箱\": 5056,\n         \"箴\": 5057,\n         \"箸\": 5058,\n         \"節\": 5059,\n         \"篁\": 5060,\n         \"範\": 5061,\n         \"篆\": 5062,\n         \"篇\": 5063,\n         \"築\": 5064,\n         \"篑\": 5065,\n         \"篓\": 5066,\n         \"篙\": 5067,\n         \"篝\": 5068,\n         \"篠\": 5069,\n         \"篡\": 5070,\n         \"篤\": 5071,\n         \"篩\": 5072,\n         \"篪\": 5073,\n         \"篮\": 5074,\n         \"篱\": 5075,\n         \"篷\": 5076,\n         \"簇\": 5077,\n         \"簌\": 5078,\n         \"簍\": 5079,\n         \"簡\": 5080,\n         \"簦\": 5081,\n         \"簧\": 5082,\n         \"簪\": 5083,\n         \"簫\": 5084,\n         \"簷\": 5085,\n         \"簸\": 5086,\n         \"簽\": 5087,\n         \"簾\": 5088,\n         \"簿\": 5089,\n         \"籁\": 5090,\n         \"籃\": 5091,\n         \"籌\": 5092,\n         \"籍\": 5093,\n         \"籐\": 5094,\n         \"籟\": 5095,\n         \"籠\": 5096,\n         \"籤\": 5097,\n         \"籬\": 5098,\n         \"籮\": 5099,\n         \"籲\": 5100,\n         \"米\": 5101,\n         \"类\": 5102,\n         \"籼\": 5103,\n         \"籽\": 5104,\n         \"粄\": 5105,\n         \"粉\": 5106,\n         \"粑\": 5107,\n         \"粒\": 5108,\n         \"粕\": 5109,\n         \"粗\": 5110,\n         \"粘\": 5111,\n         \"粟\": 5112,\n         \"粤\": 5113,\n         \"粥\": 5114,\n         \"粧\": 5115,\n         \"粪\": 5116,\n         \"粮\": 5117,\n         \"粱\": 5118,\n         \"粲\": 5119,\n         \"粳\": 5120,\n         \"粵\": 5121,\n         \"粹\": 5122,\n         \"粼\": 5123,\n         \"粽\": 5124,\n         \"精\": 5125,\n         \"粿\": 5126,\n         \"糅\": 5127,\n         \"糊\": 5128,\n         \"糍\": 5129,\n         \"糕\": 5130,\n         \"糖\": 5131,\n         \"糗\": 5132,\n         \"糙\": 5133,\n         \"糜\": 5134,\n         \"糞\": 5135,\n         \"糟\": 5136,\n         \"糠\": 5137,\n         \"糧\": 5138,\n         \"糬\": 5139,\n         \"糯\": 5140,\n         \"糰\": 5141,\n         \"糸\": 5142,\n         \"系\": 5143,\n         \"糾\": 5144,\n         \"紀\": 5145,\n         \"紂\": 5146,\n         \"約\": 5147,\n         \"紅\": 5148,\n         \"紉\": 5149,\n         \"紊\": 5150,\n         \"紋\": 5151,\n         \"納\": 5152,\n         \"紐\": 5153,\n         \"紓\": 5154,\n         \"純\": 5155,\n         \"紗\": 5156,\n         \"紘\": 5157,\n         \"紙\": 5158,\n         \"級\": 5159,\n         \"紛\": 5160,\n         \"紜\": 5161,\n         \"素\": 5162,\n         \"紡\": 5163,\n         \"索\": 5164,\n         \"紧\": 5165,\n         \"紫\": 5166,\n         \"紮\": 5167,\n         \"累\": 5168,\n         \"細\": 5169,\n         \"紳\": 5170,\n         \"紹\": 5171,\n         \"紺\": 5172,\n         \"終\": 5173,\n         \"絃\": 5174,\n         \"組\": 5175,\n         \"絆\": 5176,\n         \"経\": 5177,\n         \"結\": 5178,\n         \"絕\": 5179,\n         \"絞\": 5180,\n         \"絡\": 5181,\n         \"絢\": 5182,\n         \"給\": 5183,\n         \"絨\": 5184,\n         \"絮\": 5185,\n         \"統\": 5186,\n         \"絲\": 5187,\n         \"絳\": 5188,\n         \"絵\": 5189,\n         \"絶\": 5190,\n         \"絹\": 5191,\n         \"綁\": 5192,\n         \"綏\": 5193,\n         \"綑\": 5194,\n         \"經\": 5195,\n         \"継\": 5196,\n         \"続\": 5197,\n         \"綜\": 5198,\n         \"綠\": 5199,\n         \"綢\": 5200,\n         \"綦\": 5201,\n         \"綫\": 5202,\n         \"綬\": 5203,\n         \"維\": 5204,\n         \"綱\": 5205,\n         \"網\": 5206,\n         \"綴\": 5207,\n         \"綵\": 5208,\n         \"綸\": 5209,\n         \"綺\": 5210,\n         \"綻\": 5211,\n         \"綽\": 5212,\n         \"綾\": 5213,\n         \"綿\": 5214,\n         \"緊\": 5215,\n         \"緋\": 5216,\n         \"総\": 5217,\n         \"緑\": 5218,\n         \"緒\": 5219,\n         \"緘\": 5220,\n         \"線\": 5221,\n         \"緝\": 5222,\n         \"緞\": 5223,\n         \"締\": 5224,\n         \"緣\": 5225,\n         \"編\": 5226,\n         \"緩\": 5227,\n         \"緬\": 5228,\n         \"緯\": 5229,\n         \"練\": 5230,\n         \"緹\": 5231,\n         \"緻\": 5232,\n         \"縁\": 5233,\n         \"縄\": 5234,\n         \"縈\": 5235,\n         \"縛\": 5236,\n         \"縝\": 5237,\n         \"縣\": 5238,\n         \"縫\": 5239,\n         \"縮\": 5240,\n         \"縱\": 5241,\n         \"縴\": 5242,\n         \"縷\": 5243,\n         \"總\": 5244,\n         \"績\": 5245,\n         \"繁\": 5246,\n         \"繃\": 5247,\n         \"繆\": 5248,\n         \"繇\": 5249,\n         \"繋\": 5250,\n         \"織\": 5251,\n         \"繕\": 5252,\n         \"繚\": 5253,\n         \"繞\": 5254,\n         \"繡\": 5255,\n         \"繩\": 5256,\n         \"繪\": 5257,\n         \"繫\": 5258,\n         \"繭\": 5259,\n         \"繳\": 5260,\n         \"繹\": 5261,\n         \"繼\": 5262,\n         \"繽\": 5263,\n         \"纂\": 5264,\n         \"續\": 5265,\n         \"纍\": 5266,\n         \"纏\": 5267,\n         \"纓\": 5268,\n         \"纔\": 5269,\n         \"纖\": 5270,\n         \"纜\": 5271,\n         \"纠\": 5272,\n         \"红\": 5273,\n         \"纣\": 5274,\n         \"纤\": 5275,\n         \"约\": 5276,\n         \"级\": 5277,\n         \"纨\": 5278,\n         \"纪\": 5279,\n         \"纫\": 5280,\n         \"纬\": 5281,\n         \"纭\": 5282,\n         \"纯\": 5283,\n         \"纰\": 5284,\n         \"纱\": 5285,\n         \"纲\": 5286,\n         \"纳\": 5287,\n         \"纵\": 5288,\n         \"纶\": 5289,\n         \"纷\": 5290,\n         \"纸\": 5291,\n         \"纹\": 5292,\n         \"纺\": 5293,\n         \"纽\": 5294,\n         \"纾\": 5295,\n         \"线\": 5296,\n         \"绀\": 5297,\n         \"练\": 5298,\n         \"组\": 5299,\n         \"绅\": 5300,\n         \"细\": 5301,\n         \"织\": 5302,\n         \"终\": 5303,\n         \"绊\": 5304,\n         \"绍\": 5305,\n         \"绎\": 5306,\n         \"经\": 5307,\n         \"绑\": 5308,\n         \"绒\": 5309,\n         \"结\": 5310,\n         \"绔\": 5311,\n         \"绕\": 5312,\n         \"绘\": 5313,\n         \"给\": 5314,\n         \"绚\": 5315,\n         \"绛\": 5316,\n         \"络\": 5317,\n         \"绝\": 5318,\n         \"绞\": 5319,\n         \"统\": 5320,\n         \"绡\": 5321,\n         \"绢\": 5322,\n         \"绣\": 5323,\n         \"绥\": 5324,\n         \"绦\": 5325,\n         \"继\": 5326,\n         \"绩\": 5327,\n         \"绪\": 5328,\n         \"绫\": 5329,\n         \"续\": 5330,\n         \"绮\": 5331,\n         \"绯\": 5332,\n         \"绰\": 5333,\n         \"绳\": 5334,\n         \"维\": 5335,\n         \"绵\": 5336,\n         \"绶\": 5337,\n         \"绷\": 5338,\n         \"绸\": 5339,\n         \"绻\": 5340,\n         \"综\": 5341,\n         \"绽\": 5342,\n         \"绾\": 5343,\n         \"绿\": 5344,\n         \"缀\": 5345,\n         \"缄\": 5346,\n         \"缅\": 5347,\n         \"缆\": 5348,\n         \"缇\": 5349,\n         \"缈\": 5350,\n         \"缉\": 5351,\n         \"缎\": 5352,\n         \"缓\": 5353,\n         \"缔\": 5354,\n         \"缕\": 5355,\n         \"编\": 5356,\n         \"缘\": 5357,\n         \"缙\": 5358,\n         \"缚\": 5359,\n         \"缜\": 5360,\n         \"缝\": 5361,\n         \"缠\": 5362,\n         \"缢\": 5363,\n         \"缤\": 5364,\n         \"缥\": 5365,\n         \"缨\": 5366,\n         \"缩\": 5367,\n         \"缪\": 5368,\n         \"缭\": 5369,\n         \"缮\": 5370,\n         \"缰\": 5371,\n         \"缱\": 5372,\n         \"缴\": 5373,\n         \"缸\": 5374,\n         \"缺\": 5375,\n         \"缽\": 5376,\n         \"罂\": 5377,\n         \"罄\": 5378,\n         \"罌\": 5379,\n         \"罐\": 5380,\n         \"网\": 5381,\n         \"罔\": 5382,\n         \"罕\": 5383,\n         \"罗\": 5384,\n         \"罚\": 5385,\n         \"罡\": 5386,\n         \"罢\": 5387,\n         \"罩\": 5388,\n         \"罪\": 5389,\n         \"置\": 5390,\n         \"罰\": 5391,\n         \"署\": 5392,\n         \"罵\": 5393,\n         \"罷\": 5394,\n         \"罹\": 5395,\n         \"羁\": 5396,\n         \"羅\": 5397,\n         \"羈\": 5398,\n         \"羊\": 5399,\n         \"羌\": 5400,\n         \"美\": 5401,\n         \"羔\": 5402,\n         \"羚\": 5403,\n         \"羞\": 5404,\n         \"羟\": 5405,\n         \"羡\": 5406,\n         \"羣\": 5407,\n         \"群\": 5408,\n         \"羥\": 5409,\n         \"羧\": 5410,\n         \"羨\": 5411,\n         \"義\": 5412,\n         \"羯\": 5413,\n         \"羲\": 5414,\n         \"羸\": 5415,\n         \"羹\": 5416,\n         \"羽\": 5417,\n         \"羿\": 5418,\n         \"翁\": 5419,\n         \"翅\": 5420,\n         \"翊\": 5421,\n         \"翌\": 5422,\n         \"翎\": 5423,\n         \"習\": 5424,\n         \"翔\": 5425,\n         \"翘\": 5426,\n         \"翟\": 5427,\n         \"翠\": 5428,\n         \"翡\": 5429,\n         \"翦\": 5430,\n         \"翩\": 5431,\n         \"翰\": 5432,\n         \"翱\": 5433,\n         \"翳\": 5434,\n         \"翹\": 5435,\n         \"翻\": 5436,\n         \"翼\": 5437,\n         \"耀\": 5438,\n         \"老\": 5439,\n         \"考\": 5440,\n         \"耄\": 5441,\n         \"者\": 5442,\n         \"耆\": 5443,\n         \"耋\": 5444,\n         \"而\": 5445,\n         \"耍\": 5446,\n         \"耐\": 5447,\n         \"耒\": 5448,\n         \"耕\": 5449,\n         \"耗\": 5450,\n         \"耘\": 5451,\n         \"耙\": 5452,\n         \"耦\": 5453,\n         \"耨\": 5454,\n         \"耳\": 5455,\n         \"耶\": 5456,\n         \"耷\": 5457,\n         \"耸\": 5458,\n         \"耻\": 5459,\n         \"耽\": 5460,\n         \"耿\": 5461,\n         \"聂\": 5462,\n         \"聆\": 5463,\n         \"聊\": 5464,\n         \"聋\": 5465,\n         \"职\": 5466,\n         \"聒\": 5467,\n         \"联\": 5468,\n         \"聖\": 5469,\n         \"聘\": 5470,\n         \"聚\": 5471,\n         \"聞\": 5472,\n         \"聪\": 5473,\n         \"聯\": 5474,\n         \"聰\": 5475,\n         \"聲\": 5476,\n         \"聳\": 5477,\n         \"聴\": 5478,\n         \"聶\": 5479,\n         \"職\": 5480,\n         \"聽\": 5481,\n         \"聾\": 5482,\n         \"聿\": 5483,\n         \"肃\": 5484,\n         \"肄\": 5485,\n         \"肅\": 5486,\n         \"肆\": 5487,\n         \"肇\": 5488,\n         \"肉\": 5489,\n         \"肋\": 5490,\n         \"肌\": 5491,\n         \"肏\": 5492,\n         \"肓\": 5493,\n         \"肖\": 5494,\n         \"肘\": 5495,\n         \"肚\": 5496,\n         \"肛\": 5497,\n         \"肝\": 5498,\n         \"肠\": 5499,\n         \"股\": 5500,\n         \"肢\": 5501,\n         \"肤\": 5502,\n         \"肥\": 5503,\n         \"肩\": 5504,\n         \"肪\": 5505,\n         \"肮\": 5506,\n         \"肯\": 5507,\n         \"肱\": 5508,\n         \"育\": 5509,\n         \"肴\": 5510,\n         \"肺\": 5511,\n         \"肽\": 5512,\n         \"肾\": 5513,\n         \"肿\": 5514,\n         \"胀\": 5515,\n         \"胁\": 5516,\n         \"胃\": 5517,\n         \"胄\": 5518,\n         \"胆\": 5519,\n         \"背\": 5520,\n         \"胍\": 5521,\n         \"胎\": 5522,\n         \"胖\": 5523,\n         \"胚\": 5524,\n         \"胛\": 5525,\n         \"胜\": 5526,\n         \"胝\": 5527,\n         \"胞\": 5528,\n         \"胡\": 5529,\n         \"胤\": 5530,\n         \"胥\": 5531,\n         \"胧\": 5532,\n         \"胫\": 5533,\n         \"胭\": 5534,\n         \"胯\": 5535,\n         \"胰\": 5536,\n         \"胱\": 5537,\n         \"胳\": 5538,\n         \"胴\": 5539,\n         \"胶\": 5540,\n         \"胸\": 5541,\n         \"胺\": 5542,\n         \"能\": 5543,\n         \"脂\": 5544,\n         \"脅\": 5545,\n         \"脆\": 5546,\n         \"脇\": 5547,\n         \"脈\": 5548,\n         \"脉\": 5549,\n         \"脊\": 5550,\n         \"脍\": 5551,\n         \"脏\": 5552,\n         \"脐\": 5553,\n         \"脑\": 5554,\n         \"脓\": 5555,\n         \"脖\": 5556,\n         \"脘\": 5557,\n         \"脚\": 5558,\n         \"脛\": 5559,\n         \"脣\": 5560,\n         \"脩\": 5561,\n         \"脫\": 5562,\n         \"脯\": 5563,\n         \"脱\": 5564,\n         \"脲\": 5565,\n         \"脳\": 5566,\n         \"脸\": 5567,\n         \"脹\": 5568,\n         \"脾\": 5569,\n         \"腆\": 5570,\n         \"腈\": 5571,\n         \"腊\": 5572,\n         \"腋\": 5573,\n         \"腌\": 5574,\n         \"腎\": 5575,\n         \"腐\": 5576,\n         \"腑\": 5577,\n         \"腓\": 5578,\n         \"腔\": 5579,\n         \"腕\": 5580,\n         \"腥\": 5581,\n         \"腦\": 5582,\n         \"腩\": 5583,\n         \"腫\": 5584,\n         \"腭\": 5585,\n         \"腮\": 5586,\n         \"腰\": 5587,\n         \"腱\": 5588,\n         \"腳\": 5589,\n         \"腴\": 5590,\n         \"腸\": 5591,\n         \"腹\": 5592,\n         \"腺\": 5593,\n         \"腻\": 5594,\n         \"腼\": 5595,\n         \"腾\": 5596,\n         \"腿\": 5597,\n         \"膀\": 5598,\n         \"膈\": 5599,\n         \"膊\": 5600,\n         \"膏\": 5601,\n         \"膑\": 5602,\n         \"膘\": 5603,\n         \"膚\": 5604,\n         \"膛\": 5605,\n         \"膜\": 5606,\n         \"膝\": 5607,\n         \"膠\": 5608,\n         \"膦\": 5609,\n         \"膨\": 5610,\n         \"膩\": 5611,\n         \"膳\": 5612,\n         \"膺\": 5613,\n         \"膻\": 5614,\n         \"膽\": 5615,\n         \"膾\": 5616,\n         \"膿\": 5617,\n         \"臀\": 5618,\n         \"臂\": 5619,\n         \"臃\": 5620,\n         \"臆\": 5621,\n         \"臉\": 5622,\n         \"臊\": 5623,\n         \"臍\": 5624,\n         \"臓\": 5625,\n         \"臘\": 5626,\n         \"臟\": 5627,\n         \"臣\": 5628,\n         \"臥\": 5629,\n         \"臧\": 5630,\n         \"臨\": 5631,\n         \"自\": 5632,\n         \"臬\": 5633,\n         \"臭\": 5634,\n         \"至\": 5635,\n         \"致\": 5636,\n         \"臺\": 5637,\n         \"臻\": 5638,\n         \"臼\": 5639,\n         \"臾\": 5640,\n         \"舀\": 5641,\n         \"舂\": 5642,\n         \"舅\": 5643,\n         \"舆\": 5644,\n         \"與\": 5645,\n         \"興\": 5646,\n         \"舉\": 5647,\n         \"舊\": 5648,\n         \"舌\": 5649,\n         \"舍\": 5650,\n         \"舎\": 5651,\n         \"舐\": 5652,\n         \"舒\": 5653,\n         \"舔\": 5654,\n         \"舖\": 5655,\n         \"舗\": 5656,\n         \"舛\": 5657,\n         \"舜\": 5658,\n         \"舞\": 5659,\n         \"舟\": 5660,\n         \"航\": 5661,\n         \"舫\": 5662,\n         \"般\": 5663,\n         \"舰\": 5664,\n         \"舱\": 5665,\n         \"舵\": 5666,\n         \"舶\": 5667,\n         \"舷\": 5668,\n         \"舸\": 5669,\n         \"船\": 5670,\n         \"舺\": 5671,\n         \"舾\": 5672,\n         \"艇\": 5673,\n         \"艋\": 5674,\n         \"艘\": 5675,\n         \"艙\": 5676,\n         \"艦\": 5677,\n         \"艮\": 5678,\n         \"良\": 5679,\n         \"艰\": 5680,\n         \"艱\": 5681,\n         \"色\": 5682,\n         \"艳\": 5683,\n         \"艷\": 5684,\n         \"艹\": 5685,\n         \"艺\": 5686,\n         \"艾\": 5687,\n         \"节\": 5688,\n         \"芃\": 5689,\n         \"芈\": 5690,\n         \"芊\": 5691,\n         \"芋\": 5692,\n         \"芍\": 5693,\n         \"芎\": 5694,\n         \"芒\": 5695,\n         \"芙\": 5696,\n         \"芜\": 5697,\n         \"芝\": 5698,\n         \"芡\": 5699,\n         \"芥\": 5700,\n         \"芦\": 5701,\n         \"芩\": 5702,\n         \"芪\": 5703,\n         \"芫\": 5704,\n         \"芬\": 5705,\n         \"芭\": 5706,\n         \"芮\": 5707,\n         \"芯\": 5708,\n         \"花\": 5709,\n         \"芳\": 5710,\n         \"芷\": 5711,\n         \"芸\": 5712,\n         \"芹\": 5713,\n         \"芻\": 5714,\n         \"芽\": 5715,\n         \"芾\": 5716,\n         \"苁\": 5717,\n         \"苄\": 5718,\n         \"苇\": 5719,\n         \"苋\": 5720,\n         \"苍\": 5721,\n         \"苏\": 5722,\n         \"苑\": 5723,\n         \"苒\": 5724,\n         \"苓\": 5725,\n         \"苔\": 5726,\n         \"苕\": 5727,\n         \"苗\": 5728,\n         \"苛\": 5729,\n         \"苜\": 5730,\n         \"苞\": 5731,\n         \"苟\": 5732,\n         \"苡\": 5733,\n         \"苣\": 5734,\n         \"若\": 5735,\n         \"苦\": 5736,\n         \"苫\": 5737,\n         \"苯\": 5738,\n         \"英\": 5739,\n         \"苷\": 5740,\n         \"苹\": 5741,\n         \"苻\": 5742,\n         \"茁\": 5743,\n         \"茂\": 5744,\n         \"范\": 5745,\n         \"茄\": 5746,\n         \"茅\": 5747,\n         \"茉\": 5748,\n         \"茎\": 5749,\n         \"茏\": 5750,\n         \"茗\": 5751,\n         \"茜\": 5752,\n         \"茧\": 5753,\n         \"茨\": 5754,\n         \"茫\": 5755,\n         \"茬\": 5756,\n         \"茭\": 5757,\n         \"茯\": 5758,\n         \"茱\": 5759,\n         \"茲\": 5760,\n         \"茴\": 5761,\n         \"茵\": 5762,\n         \"茶\": 5763,\n         \"茸\": 5764,\n         \"茹\": 5765,\n         \"茼\": 5766,\n         \"荀\": 5767,\n         \"荃\": 5768,\n         \"荆\": 5769,\n         \"草\": 5770,\n         \"荊\": 5771,\n         \"荏\": 5772,\n         \"荐\": 5773,\n         \"荒\": 5774,\n         \"荔\": 5775,\n         \"荖\": 5776,\n         \"荘\": 5777,\n         \"荚\": 5778,\n         \"荞\": 5779,\n         \"荟\": 5780,\n         \"荠\": 5781,\n         \"荡\": 5782,\n         \"荣\": 5783,\n         \"荤\": 5784,\n         \"荥\": 5785,\n         \"荧\": 5786,\n         \"荨\": 5787,\n         \"荪\": 5788,\n         \"荫\": 5789,\n         \"药\": 5790,\n         \"荳\": 5791,\n         \"荷\": 5792,\n         \"荸\": 5793,\n         \"荻\": 5794,\n         \"荼\": 5795,\n         \"荽\": 5796,\n         \"莅\": 5797,\n         \"莆\": 5798,\n         \"莉\": 5799,\n         \"莊\": 5800,\n         \"莎\": 5801,\n         \"莒\": 5802,\n         \"莓\": 5803,\n         \"莖\": 5804,\n         \"莘\": 5805,\n         \"莞\": 5806,\n         \"莠\": 5807,\n         \"莢\": 5808,\n         \"莧\": 5809,\n         \"莪\": 5810,\n         \"莫\": 5811,\n         \"莱\": 5812,\n         \"莲\": 5813,\n         \"莴\": 5814,\n         \"获\": 5815,\n         \"莹\": 5816,\n         \"莺\": 5817,\n         \"莽\": 5818,\n         \"莿\": 5819,\n         \"菀\": 5820,\n         \"菁\": 5821,\n         \"菅\": 5822,\n         \"菇\": 5823,\n         \"菈\": 5824,\n         \"菊\": 5825,\n         \"菌\": 5826,\n         \"菏\": 5827,\n         \"菓\": 5828,\n         \"菖\": 5829,\n         \"菘\": 5830,\n         \"菜\": 5831,\n         \"菟\": 5832,\n         \"菠\": 5833,\n         \"菡\": 5834,\n         \"菩\": 5835,\n         \"華\": 5836,\n         \"菱\": 5837,\n         \"菲\": 5838,\n         \"菸\": 5839,\n         \"菽\": 5840,\n         \"萁\": 5841,\n         \"萃\": 5842,\n         \"萄\": 5843,\n         \"萊\": 5844,\n         \"萋\": 5845,\n         \"萌\": 5846,\n         \"萍\": 5847,\n         \"萎\": 5848,\n         \"萘\": 5849,\n         \"萝\": 5850,\n         \"萤\": 5851,\n         \"营\": 5852,\n         \"萦\": 5853,\n         \"萧\": 5854,\n         \"萨\": 5855,\n         \"萩\": 5856,\n         \"萬\": 5857,\n         \"萱\": 5858,\n         \"萵\": 5859,\n         \"萸\": 5860,\n         \"萼\": 5861,\n         \"落\": 5862,\n         \"葆\": 5863,\n         \"葉\": 5864,\n         \"著\": 5865,\n         \"葚\": 5866,\n         \"葛\": 5867,\n         \"葡\": 5868,\n         \"董\": 5869,\n         \"葦\": 5870,\n         \"葩\": 5871,\n         \"葫\": 5872,\n         \"葬\": 5873,\n         \"葭\": 5874,\n         \"葯\": 5875,\n         \"葱\": 5876,\n         \"葳\": 5877,\n         \"葵\": 5878,\n         \"葷\": 5879,\n         \"葺\": 5880,\n         \"蒂\": 5881,\n         \"蒋\": 5882,\n         \"蒐\": 5883,\n         \"蒔\": 5884,\n         \"蒙\": 5885,\n         \"蒜\": 5886,\n         \"蒞\": 5887,\n         \"蒟\": 5888,\n         \"蒡\": 5889,\n         \"蒨\": 5890,\n         \"蒲\": 5891,\n         \"蒸\": 5892,\n         \"蒹\": 5893,\n         \"蒻\": 5894,\n         \"蒼\": 5895,\n         \"蒿\": 5896,\n         \"蓁\": 5897,\n         \"蓄\": 5898,\n         \"蓆\": 5899,\n         \"蓉\": 5900,\n         \"蓋\": 5901,\n         \"蓑\": 5902,\n         \"蓓\": 5903,\n         \"蓖\": 5904,\n         \"蓝\": 5905,\n         \"蓟\": 5906,\n         \"蓦\": 5907,\n         \"蓬\": 5908,\n         \"蓮\": 5909,\n         \"蓼\": 5910,\n         \"蓿\": 5911,\n         \"蔑\": 5912,\n         \"蔓\": 5913,\n         \"蔔\": 5914,\n         \"蔗\": 5915,\n         \"蔘\": 5916,\n         \"蔚\": 5917,\n         \"蔡\": 5918,\n         \"蔣\": 5919,\n         \"蔥\": 5920,\n         \"蔫\": 5921,\n         \"蔬\": 5922,\n         \"蔭\": 5923,\n         \"蔵\": 5924,\n         \"蔷\": 5925,\n         \"蔺\": 5926,\n         \"蔻\": 5927,\n         \"蔼\": 5928,\n         \"蔽\": 5929,\n         \"蕁\": 5930,\n         \"蕃\": 5931,\n         \"蕈\": 5932,\n         \"蕉\": 5933,\n         \"蕊\": 5934,\n         \"蕎\": 5935,\n         \"蕙\": 5936,\n         \"蕤\": 5937,\n         \"蕨\": 5938,\n         \"蕩\": 5939,\n         \"蕪\": 5940,\n         \"蕭\": 5941,\n         \"蕲\": 5942,\n         \"蕴\": 5943,\n         \"蕻\": 5944,\n         \"蕾\": 5945,\n         \"薄\": 5946,\n         \"薅\": 5947,\n         \"薇\": 5948,\n         \"薈\": 5949,\n         \"薊\": 5950,\n         \"薏\": 5951,\n         \"薑\": 5952,\n         \"薔\": 5953,\n         \"薙\": 5954,\n         \"薛\": 5955,\n         \"薦\": 5956,\n         \"薨\": 5957,\n         \"薩\": 5958,\n         \"薪\": 5959,\n         \"薬\": 5960,\n         \"薯\": 5961,\n         \"薰\": 5962,\n         \"薹\": 5963,\n         \"藉\": 5964,\n         \"藍\": 5965,\n         \"藏\": 5966,\n         \"藐\": 5967,\n         \"藓\": 5968,\n         \"藕\": 5969,\n         \"藜\": 5970,\n         \"藝\": 5971,\n         \"藤\": 5972,\n         \"藥\": 5973,\n         \"藩\": 5974,\n         \"藹\": 5975,\n         \"藻\": 5976,\n         \"藿\": 5977,\n         \"蘆\": 5978,\n         \"蘇\": 5979,\n         \"蘊\": 5980,\n         \"蘋\": 5981,\n         \"蘑\": 5982,\n         \"蘚\": 5983,\n         \"蘭\": 5984,\n         \"蘸\": 5985,\n         \"蘼\": 5986,\n         \"蘿\": 5987,\n         \"虎\": 5988,\n         \"虏\": 5989,\n         \"虐\": 5990,\n         \"虑\": 5991,\n         \"虔\": 5992,\n         \"處\": 5993,\n         \"虚\": 5994,\n         \"虛\": 5995,\n         \"虜\": 5996,\n         \"虞\": 5997,\n         \"號\": 5998,\n         \"虢\": 5999,\n         \"虧\": 6000,\n         \"虫\": 6001,\n         \"虬\": 6002,\n         \"虱\": 6003,\n         \"虹\": 6004,\n         \"虻\": 6005,\n         \"虽\": 6006,\n         \"虾\": 6007,\n         \"蚀\": 6008,\n         \"蚁\": 6009,\n         \"蚂\": 6010,\n         \"蚊\": 6011,\n         \"蚌\": 6012,\n         \"蚓\": 6013,\n         \"蚕\": 6014,\n         \"蚜\": 6015,\n         \"蚝\": 6016,\n         \"蚣\": 6017,\n         \"蚤\": 6018,\n         \"蚩\": 6019,\n         \"蚪\": 6020,\n         \"蚯\": 6021,\n         \"蚱\": 6022,\n         \"蚵\": 6023,\n         \"蛀\": 6024,\n         \"蛆\": 6025,\n         \"蛇\": 6026,\n         \"蛊\": 6027,\n         \"蛋\": 6028,\n         \"蛎\": 6029,\n         \"蛐\": 6030,\n         \"蛔\": 6031,\n         \"蛙\": 6032,\n         \"蛛\": 6033,\n         \"蛟\": 6034,\n         \"蛤\": 6035,\n         \"蛭\": 6036,\n         \"蛮\": 6037,\n         \"蛰\": 6038,\n         \"蛳\": 6039,\n         \"蛹\": 6040,\n         \"蛻\": 6041,\n         \"蛾\": 6042,\n         \"蜀\": 6043,\n         \"蜂\": 6044,\n         \"蜃\": 6045,\n         \"蜆\": 6046,\n         \"蜇\": 6047,\n         \"蜈\": 6048,\n         \"蜊\": 6049,\n         \"蜍\": 6050,\n         \"蜒\": 6051,\n         \"蜓\": 6052,\n         \"蜕\": 6053,\n         \"蜗\": 6054,\n         \"蜘\": 6055,\n         \"蜚\": 6056,\n         \"蜜\": 6057,\n         \"蜡\": 6058,\n         \"蜢\": 6059,\n         \"蜥\": 6060,\n         \"蜱\": 6061,\n         \"蜴\": 6062,\n         \"蜷\": 6063,\n         \"蜻\": 6064,\n         \"蜿\": 6065,\n         \"蝇\": 6066,\n         \"蝈\": 6067,\n         \"蝉\": 6068,\n         \"蝌\": 6069,\n         \"蝎\": 6070,\n         \"蝕\": 6071,\n         \"蝗\": 6072,\n         \"蝙\": 6073,\n         \"蝟\": 6074,\n         \"蝠\": 6075,\n         \"蝦\": 6076,\n         \"蝨\": 6077,\n         \"蝴\": 6078,\n         \"蝶\": 6079,\n         \"蝸\": 6080,\n         \"蝼\": 6081,\n         \"螂\": 6082,\n         \"螃\": 6083,\n         \"融\": 6084,\n         \"螞\": 6085,\n         \"螢\": 6086,\n         \"螨\": 6087,\n         \"螯\": 6088,\n         \"螳\": 6089,\n         \"螺\": 6090,\n         \"蟀\": 6091,\n         \"蟄\": 6092,\n         \"蟆\": 6093,\n         \"蟋\": 6094,\n         \"蟎\": 6095,\n         \"蟑\": 6096,\n         \"蟒\": 6097,\n         \"蟠\": 6098,\n         \"蟬\": 6099,\n         \"蟲\": 6100,\n         \"蟹\": 6101,\n         \"蟻\": 6102,\n         \"蟾\": 6103,\n         \"蠅\": 6104,\n         \"蠍\": 6105,\n         \"蠔\": 6106,\n         \"蠕\": 6107,\n         \"蠛\": 6108,\n         \"蠟\": 6109,\n         \"蠡\": 6110,\n         \"蠢\": 6111,\n         \"蠣\": 6112,\n         \"蠱\": 6113,\n         \"蠶\": 6114,\n         \"蠹\": 6115,\n         \"蠻\": 6116,\n         \"血\": 6117,\n         \"衄\": 6118,\n         \"衅\": 6119,\n         \"衆\": 6120,\n         \"行\": 6121,\n         \"衍\": 6122,\n         \"術\": 6123,\n         \"衔\": 6124,\n         \"街\": 6125,\n         \"衙\": 6126,\n         \"衛\": 6127,\n         \"衝\": 6128,\n         \"衞\": 6129,\n         \"衡\": 6130,\n         \"衢\": 6131,\n         \"衣\": 6132,\n         \"补\": 6133,\n         \"表\": 6134,\n         \"衩\": 6135,\n         \"衫\": 6136,\n         \"衬\": 6137,\n         \"衮\": 6138,\n         \"衰\": 6139,\n         \"衲\": 6140,\n         \"衷\": 6141,\n         \"衹\": 6142,\n         \"衾\": 6143,\n         \"衿\": 6144,\n         \"袁\": 6145,\n         \"袂\": 6146,\n         \"袄\": 6147,\n         \"袅\": 6148,\n         \"袈\": 6149,\n         \"袋\": 6150,\n         \"袍\": 6151,\n         \"袒\": 6152,\n         \"袖\": 6153,\n         \"袜\": 6154,\n         \"袞\": 6155,\n         \"袤\": 6156,\n         \"袪\": 6157,\n         \"被\": 6158,\n         \"袭\": 6159,\n         \"袱\": 6160,\n         \"裁\": 6161,\n         \"裂\": 6162,\n         \"装\": 6163,\n         \"裆\": 6164,\n         \"裊\": 6165,\n         \"裏\": 6166,\n         \"裔\": 6167,\n         \"裕\": 6168,\n         \"裘\": 6169,\n         \"裙\": 6170,\n         \"補\": 6171,\n         \"裝\": 6172,\n         \"裟\": 6173,\n         \"裡\": 6174,\n         \"裤\": 6175,\n         \"裨\": 6176,\n         \"裱\": 6177,\n         \"裳\": 6178,\n         \"裴\": 6179,\n         \"裸\": 6180,\n         \"裹\": 6181,\n         \"製\": 6182,\n         \"裾\": 6183,\n         \"褂\": 6184,\n         \"複\": 6185,\n         \"褐\": 6186,\n         \"褒\": 6187,\n         \"褓\": 6188,\n         \"褔\": 6189,\n         \"褚\": 6190,\n         \"褥\": 6191,\n         \"褪\": 6192,\n         \"褫\": 6193,\n         \"褲\": 6194,\n         \"褶\": 6195,\n         \"褻\": 6196,\n         \"襁\": 6197,\n         \"襄\": 6198,\n         \"襟\": 6199,\n         \"襠\": 6200,\n         \"襪\": 6201,\n         \"襬\": 6202,\n         \"襯\": 6203,\n         \"襲\": 6204,\n         \"西\": 6205,\n         \"要\": 6206,\n         \"覃\": 6207,\n         \"覆\": 6208,\n         \"覇\": 6209,\n         \"見\": 6210,\n         \"規\": 6211,\n         \"覓\": 6212,\n         \"視\": 6213,\n         \"覚\": 6214,\n         \"覦\": 6215,\n         \"覧\": 6216,\n         \"親\": 6217,\n         \"覬\": 6218,\n         \"観\": 6219,\n         \"覷\": 6220,\n         \"覺\": 6221,\n         \"覽\": 6222,\n         \"觀\": 6223,\n         \"见\": 6224,\n         \"观\": 6225,\n         \"规\": 6226,\n         \"觅\": 6227,\n         \"视\": 6228,\n         \"览\": 6229,\n         \"觉\": 6230,\n         \"觊\": 6231,\n         \"觎\": 6232,\n         \"觐\": 6233,\n         \"觑\": 6234,\n         \"角\": 6235,\n         \"觞\": 6236,\n         \"解\": 6237,\n         \"觥\": 6238,\n         \"触\": 6239,\n         \"觸\": 6240,\n         \"言\": 6241,\n         \"訂\": 6242,\n         \"計\": 6243,\n         \"訊\": 6244,\n         \"討\": 6245,\n         \"訓\": 6246,\n         \"訕\": 6247,\n         \"訖\": 6248,\n         \"託\": 6249,\n         \"記\": 6250,\n         \"訛\": 6251,\n         \"訝\": 6252,\n         \"訟\": 6253,\n         \"訣\": 6254,\n         \"訥\": 6255,\n         \"訪\": 6256,\n         \"設\": 6257,\n         \"許\": 6258,\n         \"訳\": 6259,\n         \"訴\": 6260,\n         \"訶\": 6261,\n         \"診\": 6262,\n         \"註\": 6263,\n         \"証\": 6264,\n         \"詆\": 6265,\n         \"詐\": 6266,\n         \"詔\": 6267,\n         \"評\": 6268,\n         \"詛\": 6269,\n         \"詞\": 6270,\n         \"詠\": 6271,\n         \"詡\": 6272,\n         \"詢\": 6273,\n         \"詣\": 6274,\n         \"試\": 6275,\n         \"詩\": 6276,\n         \"詫\": 6277,\n         \"詬\": 6278,\n         \"詭\": 6279,\n         \"詮\": 6280,\n         \"詰\": 6281,\n         \"話\": 6282,\n         \"該\": 6283,\n         \"詳\": 6284,\n         \"詹\": 6285,\n         \"詼\": 6286,\n         \"誅\": 6287,\n         \"誇\": 6288,\n         \"誉\": 6289,\n         \"誌\": 6290,\n         \"認\": 6291,\n         \"誓\": 6292,\n         \"誕\": 6293,\n         \"誘\": 6294,\n         \"語\": 6295,\n         \"誠\": 6296,\n         \"誡\": 6297,\n         \"誣\": 6298,\n         \"誤\": 6299,\n         \"誥\": 6300,\n         \"誦\": 6301,\n         \"誨\": 6302,\n         \"說\": 6303,\n         \"説\": 6304,\n         \"読\": 6305,\n         \"誰\": 6306,\n         \"課\": 6307,\n         \"誹\": 6308,\n         \"誼\": 6309,\n         \"調\": 6310,\n         \"諄\": 6311,\n         \"談\": 6312,\n         \"請\": 6313,\n         \"諏\": 6314,\n         \"諒\": 6315,\n         \"論\": 6316,\n         \"諗\": 6317,\n         \"諜\": 6318,\n         \"諡\": 6319,\n         \"諦\": 6320,\n         \"諧\": 6321,\n         \"諫\": 6322,\n         \"諭\": 6323,\n         \"諮\": 6324,\n         \"諱\": 6325,\n         \"諳\": 6326,\n         \"諷\": 6327,\n         \"諸\": 6328,\n         \"諺\": 6329,\n         \"諾\": 6330,\n         \"謀\": 6331,\n         \"謁\": 6332,\n         \"謂\": 6333,\n         \"謄\": 6334,\n         \"謊\": 6335,\n         \"謎\": 6336,\n         \"謐\": 6337,\n         \"謔\": 6338,\n         \"謗\": 6339,\n         \"謙\": 6340,\n         \"講\": 6341,\n         \"謝\": 6342,\n         \"謠\": 6343,\n         \"謨\": 6344,\n         \"謬\": 6345,\n         \"謹\": 6346,\n         \"謾\": 6347,\n         \"譁\": 6348,\n         \"證\": 6349,\n         \"譎\": 6350,\n         \"譏\": 6351,\n         \"識\": 6352,\n         \"譙\": 6353,\n         \"譚\": 6354,\n         \"譜\": 6355,\n         \"警\": 6356,\n         \"譬\": 6357,\n         \"譯\": 6358,\n         \"議\": 6359,\n         \"譲\": 6360,\n         \"譴\": 6361,\n         \"護\": 6362,\n         \"譽\": 6363,\n         \"讀\": 6364,\n         \"變\": 6365,\n         \"讓\": 6366,\n         \"讚\": 6367,\n         \"讞\": 6368,\n         \"计\": 6369,\n         \"订\": 6370,\n         \"认\": 6371,\n         \"讥\": 6372,\n         \"讧\": 6373,\n         \"讨\": 6374,\n         \"让\": 6375,\n         \"讪\": 6376,\n         \"讫\": 6377,\n         \"训\": 6378,\n         \"议\": 6379,\n         \"讯\": 6380,\n         \"记\": 6381,\n         \"讲\": 6382,\n         \"讳\": 6383,\n         \"讴\": 6384,\n         \"讶\": 6385,\n         \"讷\": 6386,\n         \"许\": 6387,\n         \"讹\": 6388,\n         \"论\": 6389,\n         \"讼\": 6390,\n         \"讽\": 6391,\n         \"设\": 6392,\n         \"访\": 6393,\n         \"诀\": 6394,\n         \"证\": 6395,\n         \"诃\": 6396,\n         \"评\": 6397,\n         \"诅\": 6398,\n         \"识\": 6399,\n         \"诈\": 6400,\n         \"诉\": 6401,\n         \"诊\": 6402,\n         \"诋\": 6403,\n         \"词\": 6404,\n         \"诏\": 6405,\n         \"译\": 6406,\n         \"试\": 6407,\n         \"诗\": 6408,\n         \"诘\": 6409,\n         \"诙\": 6410,\n         \"诚\": 6411,\n         \"诛\": 6412,\n         \"话\": 6413,\n         \"诞\": 6414,\n         \"诟\": 6415,\n         \"诠\": 6416,\n         \"诡\": 6417,\n         \"询\": 6418,\n         \"诣\": 6419,\n         \"诤\": 6420,\n         \"该\": 6421,\n         \"详\": 6422,\n         \"诧\": 6423,\n         \"诩\": 6424,\n         \"诫\": 6425,\n         \"诬\": 6426,\n         \"语\": 6427,\n         \"误\": 6428,\n         \"诰\": 6429,\n         \"诱\": 6430,\n         \"诲\": 6431,\n         \"说\": 6432,\n         \"诵\": 6433,\n         \"诶\": 6434,\n         \"请\": 6435,\n         \"诸\": 6436,\n         \"诺\": 6437,\n         \"读\": 6438,\n         \"诽\": 6439,\n         \"课\": 6440,\n         \"诿\": 6441,\n         \"谀\": 6442,\n         \"谁\": 6443,\n         \"调\": 6444,\n         \"谄\": 6445,\n         \"谅\": 6446,\n         \"谆\": 6447,\n         \"谈\": 6448,\n         \"谊\": 6449,\n         \"谋\": 6450,\n         \"谌\": 6451,\n         \"谍\": 6452,\n         \"谎\": 6453,\n         \"谏\": 6454,\n         \"谐\": 6455,\n         \"谑\": 6456,\n         \"谒\": 6457,\n         \"谓\": 6458,\n         \"谔\": 6459,\n         \"谕\": 6460,\n         \"谗\": 6461,\n         \"谘\": 6462,\n         \"谙\": 6463,\n         \"谚\": 6464,\n         \"谛\": 6465,\n         \"谜\": 6466,\n         \"谟\": 6467,\n         \"谢\": 6468,\n         \"谣\": 6469,\n         \"谤\": 6470,\n         \"谥\": 6471,\n         \"谦\": 6472,\n         \"谧\": 6473,\n         \"谨\": 6474,\n         \"谩\": 6475,\n         \"谪\": 6476,\n         \"谬\": 6477,\n         \"谭\": 6478,\n         \"谯\": 6479,\n         \"谱\": 6480,\n         \"谲\": 6481,\n         \"谴\": 6482,\n         \"谶\": 6483,\n         \"谷\": 6484,\n         \"豁\": 6485,\n         \"豆\": 6486,\n         \"豇\": 6487,\n         \"豈\": 6488,\n         \"豉\": 6489,\n         \"豊\": 6490,\n         \"豌\": 6491,\n         \"豎\": 6492,\n         \"豐\": 6493,\n         \"豔\": 6494,\n         \"豚\": 6495,\n         \"象\": 6496,\n         \"豢\": 6497,\n         \"豪\": 6498,\n         \"豫\": 6499,\n         \"豬\": 6500,\n         \"豹\": 6501,\n         \"豺\": 6502,\n         \"貂\": 6503,\n         \"貅\": 6504,\n         \"貌\": 6505,\n         \"貓\": 6506,\n         \"貔\": 6507,\n         \"貘\": 6508,\n         \"貝\": 6509,\n         \"貞\": 6510,\n         \"負\": 6511,\n         \"財\": 6512,\n         \"貢\": 6513,\n         \"貧\": 6514,\n         \"貨\": 6515,\n         \"販\": 6516,\n         \"貪\": 6517,\n         \"貫\": 6518,\n         \"責\": 6519,\n         \"貯\": 6520,\n         \"貰\": 6521,\n         \"貳\": 6522,\n         \"貴\": 6523,\n         \"貶\": 6524,\n         \"買\": 6525,\n         \"貸\": 6526,\n         \"費\": 6527,\n         \"貼\": 6528,\n         \"貽\": 6529,\n         \"貿\": 6530,\n         \"賀\": 6531,\n         \"賁\": 6532,\n         \"賂\": 6533,\n         \"賃\": 6534,\n         \"賄\": 6535,\n         \"資\": 6536,\n         \"賈\": 6537,\n         \"賊\": 6538,\n         \"賑\": 6539,\n         \"賓\": 6540,\n         \"賜\": 6541,\n         \"賞\": 6542,\n         \"賠\": 6543,\n         \"賡\": 6544,\n         \"賢\": 6545,\n         \"賣\": 6546,\n         \"賤\": 6547,\n         \"賦\": 6548,\n         \"質\": 6549,\n         \"賬\": 6550,\n         \"賭\": 6551,\n         \"賴\": 6552,\n         \"賺\": 6553,\n         \"購\": 6554,\n         \"賽\": 6555,\n         \"贅\": 6556,\n         \"贈\": 6557,\n         \"贊\": 6558,\n         \"贍\": 6559,\n         \"贏\": 6560,\n         \"贓\": 6561,\n         \"贖\": 6562,\n         \"贛\": 6563,\n         \"贝\": 6564,\n         \"贞\": 6565,\n         \"负\": 6566,\n         \"贡\": 6567,\n         \"财\": 6568,\n         \"责\": 6569,\n         \"贤\": 6570,\n         \"败\": 6571,\n         \"账\": 6572,\n         \"货\": 6573,\n         \"质\": 6574,\n         \"贩\": 6575,\n         \"贪\": 6576,\n         \"贫\": 6577,\n         \"贬\": 6578,\n         \"购\": 6579,\n         \"贮\": 6580,\n         \"贯\": 6581,\n         \"贰\": 6582,\n         \"贱\": 6583,\n         \"贲\": 6584,\n         \"贴\": 6585,\n         \"贵\": 6586,\n         \"贷\": 6587,\n         \"贸\": 6588,\n         \"费\": 6589,\n         \"贺\": 6590,\n         \"贻\": 6591,\n         \"贼\": 6592,\n         \"贾\": 6593,\n         \"贿\": 6594,\n         \"赁\": 6595,\n         \"赂\": 6596,\n         \"赃\": 6597,\n         \"资\": 6598,\n         \"赅\": 6599,\n         \"赈\": 6600,\n         \"赊\": 6601,\n         \"赋\": 6602,\n         \"赌\": 6603,\n         \"赎\": 6604,\n         \"赏\": 6605,\n         \"赐\": 6606,\n         \"赓\": 6607,\n         \"赔\": 6608,\n         \"赖\": 6609,\n         \"赘\": 6610,\n         \"赚\": 6611,\n         \"赛\": 6612,\n         \"赝\": 6613,\n         \"赞\": 6614,\n         \"赠\": 6615,\n         \"赡\": 6616,\n         \"赢\": 6617,\n         \"赣\": 6618,\n         \"赤\": 6619,\n         \"赦\": 6620,\n         \"赧\": 6621,\n         \"赫\": 6622,\n         \"赭\": 6623,\n         \"走\": 6624,\n         \"赳\": 6625,\n         \"赴\": 6626,\n         \"赵\": 6627,\n         \"赶\": 6628,\n         \"起\": 6629,\n         \"趁\": 6630,\n         \"超\": 6631,\n         \"越\": 6632,\n         \"趋\": 6633,\n         \"趕\": 6634,\n         \"趙\": 6635,\n         \"趟\": 6636,\n         \"趣\": 6637,\n         \"趨\": 6638,\n         \"足\": 6639,\n         \"趴\": 6640,\n         \"趵\": 6641,\n         \"趸\": 6642,\n         \"趺\": 6643,\n         \"趾\": 6644,\n         \"跃\": 6645,\n         \"跄\": 6646,\n         \"跆\": 6647,\n         \"跋\": 6648,\n         \"跌\": 6649,\n         \"跎\": 6650,\n         \"跑\": 6651,\n         \"跖\": 6652,\n         \"跚\": 6653,\n         \"跛\": 6654,\n         \"距\": 6655,\n         \"跟\": 6656,\n         \"跡\": 6657,\n         \"跤\": 6658,\n         \"跨\": 6659,\n         \"跩\": 6660,\n         \"跪\": 6661,\n         \"路\": 6662,\n         \"跳\": 6663,\n         \"践\": 6664,\n         \"跷\": 6665,\n         \"跹\": 6666,\n         \"跺\": 6667,\n         \"跻\": 6668,\n         \"踉\": 6669,\n         \"踊\": 6670,\n         \"踌\": 6671,\n         \"踏\": 6672,\n         \"踐\": 6673,\n         \"踝\": 6674,\n         \"踞\": 6675,\n         \"踟\": 6676,\n         \"踢\": 6677,\n         \"踩\": 6678,\n         \"踪\": 6679,\n         \"踮\": 6680,\n         \"踱\": 6681,\n         \"踴\": 6682,\n         \"踵\": 6683,\n         \"踹\": 6684,\n         \"蹂\": 6685,\n         \"蹄\": 6686,\n         \"蹇\": 6687,\n         \"蹈\": 6688,\n         \"蹉\": 6689,\n         \"蹊\": 6690,\n         \"蹋\": 6691,\n         \"蹑\": 6692,\n         \"蹒\": 6693,\n         \"蹙\": 6694,\n         \"蹟\": 6695,\n         \"蹣\": 6696,\n         \"蹤\": 6697,\n         \"蹦\": 6698,\n         \"蹩\": 6699,\n         \"蹬\": 6700,\n         \"蹭\": 6701,\n         \"蹲\": 6702,\n         \"蹴\": 6703,\n         \"蹶\": 6704,\n         \"蹺\": 6705,\n         \"蹼\": 6706,\n         \"蹿\": 6707,\n         \"躁\": 6708,\n         \"躇\": 6709,\n         \"躉\": 6710,\n         \"躊\": 6711,\n         \"躋\": 6712,\n         \"躍\": 6713,\n         \"躏\": 6714,\n         \"躪\": 6715,\n         \"身\": 6716,\n         \"躬\": 6717,\n         \"躯\": 6718,\n         \"躲\": 6719,\n         \"躺\": 6720,\n         \"軀\": 6721,\n         \"車\": 6722,\n         \"軋\": 6723,\n         \"軌\": 6724,\n         \"軍\": 6725,\n         \"軒\": 6726,\n         \"軟\": 6727,\n         \"転\": 6728,\n         \"軸\": 6729,\n         \"軼\": 6730,\n         \"軽\": 6731,\n         \"軾\": 6732,\n         \"較\": 6733,\n         \"載\": 6734,\n         \"輒\": 6735,\n         \"輓\": 6736,\n         \"輔\": 6737,\n         \"輕\": 6738,\n         \"輛\": 6739,\n         \"輝\": 6740,\n         \"輟\": 6741,\n         \"輩\": 6742,\n         \"輪\": 6743,\n         \"輯\": 6744,\n         \"輸\": 6745,\n         \"輻\": 6746,\n         \"輾\": 6747,\n         \"輿\": 6748,\n         \"轄\": 6749,\n         \"轅\": 6750,\n         \"轆\": 6751,\n         \"轉\": 6752,\n         \"轍\": 6753,\n         \"轎\": 6754,\n         \"轟\": 6755,\n         \"车\": 6756,\n         \"轧\": 6757,\n         \"轨\": 6758,\n         \"轩\": 6759,\n         \"转\": 6760,\n         \"轭\": 6761,\n         \"轮\": 6762,\n         \"软\": 6763,\n         \"轰\": 6764,\n         \"轲\": 6765,\n         \"轴\": 6766,\n         \"轶\": 6767,\n         \"轻\": 6768,\n         \"轼\": 6769,\n         \"载\": 6770,\n         \"轿\": 6771,\n         \"较\": 6772,\n         \"辄\": 6773,\n         \"辅\": 6774,\n         \"辆\": 6775,\n         \"辇\": 6776,\n         \"辈\": 6777,\n         \"辉\": 6778,\n         \"辊\": 6779,\n         \"辍\": 6780,\n         \"辐\": 6781,\n         \"辑\": 6782,\n         \"输\": 6783,\n         \"辕\": 6784,\n         \"辖\": 6785,\n         \"辗\": 6786,\n         \"辘\": 6787,\n         \"辙\": 6788,\n         \"辛\": 6789,\n         \"辜\": 6790,\n         \"辞\": 6791,\n         \"辟\": 6792,\n         \"辣\": 6793,\n         \"辦\": 6794,\n         \"辨\": 6795,\n         \"辩\": 6796,\n         \"辫\": 6797,\n         \"辭\": 6798,\n         \"辮\": 6799,\n         \"辯\": 6800,\n         \"辰\": 6801,\n         \"辱\": 6802,\n         \"農\": 6803,\n         \"边\": 6804,\n         \"辺\": 6805,\n         \"辻\": 6806,\n         \"込\": 6807,\n         \"辽\": 6808,\n         \"达\": 6809,\n         \"迁\": 6810,\n         \"迂\": 6811,\n         \"迄\": 6812,\n         \"迅\": 6813,\n         \"过\": 6814,\n         \"迈\": 6815,\n         \"迎\": 6816,\n         \"运\": 6817,\n         \"近\": 6818,\n         \"返\": 6819,\n         \"还\": 6820,\n         \"这\": 6821,\n         \"进\": 6822,\n         \"远\": 6823,\n         \"违\": 6824,\n         \"连\": 6825,\n         \"迟\": 6826,\n         \"迢\": 6827,\n         \"迤\": 6828,\n         \"迥\": 6829,\n         \"迦\": 6830,\n         \"迩\": 6831,\n         \"迪\": 6832,\n         \"迫\": 6833,\n         \"迭\": 6834,\n         \"述\": 6835,\n         \"迴\": 6836,\n         \"迷\": 6837,\n         \"迸\": 6838,\n         \"迹\": 6839,\n         \"迺\": 6840,\n         \"追\": 6841,\n         \"退\": 6842,\n         \"送\": 6843,\n         \"适\": 6844,\n         \"逃\": 6845,\n         \"逅\": 6846,\n         \"逆\": 6847,\n         \"选\": 6848,\n         \"逊\": 6849,\n         \"逍\": 6850,\n         \"透\": 6851,\n         \"逐\": 6852,\n         \"递\": 6853,\n         \"途\": 6854,\n         \"逕\": 6855,\n         \"逗\": 6856,\n         \"這\": 6857,\n         \"通\": 6858,\n         \"逛\": 6859,\n         \"逝\": 6860,\n         \"逞\": 6861,\n         \"速\": 6862,\n         \"造\": 6863,\n         \"逢\": 6864,\n         \"連\": 6865,\n         \"逮\": 6866,\n         \"週\": 6867,\n         \"進\": 6868,\n         \"逵\": 6869,\n         \"逶\": 6870,\n         \"逸\": 6871,\n         \"逻\": 6872,\n         \"逼\": 6873,\n         \"逾\": 6874,\n         \"遁\": 6875,\n         \"遂\": 6876,\n         \"遅\": 6877,\n         \"遇\": 6878,\n         \"遊\": 6879,\n         \"運\": 6880,\n         \"遍\": 6881,\n         \"過\": 6882,\n         \"遏\": 6883,\n         \"遐\": 6884,\n         \"遑\": 6885,\n         \"遒\": 6886,\n         \"道\": 6887,\n         \"達\": 6888,\n         \"違\": 6889,\n         \"遗\": 6890,\n         \"遙\": 6891,\n         \"遛\": 6892,\n         \"遜\": 6893,\n         \"遞\": 6894,\n         \"遠\": 6895,\n         \"遢\": 6896,\n         \"遣\": 6897,\n         \"遥\": 6898,\n         \"遨\": 6899,\n         \"適\": 6900,\n         \"遭\": 6901,\n         \"遮\": 6902,\n         \"遲\": 6903,\n         \"遴\": 6904,\n         \"遵\": 6905,\n         \"遶\": 6906,\n         \"遷\": 6907,\n         \"選\": 6908,\n         \"遺\": 6909,\n         \"遼\": 6910,\n         \"遽\": 6911,\n         \"避\": 6912,\n         \"邀\": 6913,\n         \"邁\": 6914,\n         \"邂\": 6915,\n         \"邃\": 6916,\n         \"還\": 6917,\n         \"邇\": 6918,\n         \"邈\": 6919,\n         \"邊\": 6920,\n         \"邋\": 6921,\n         \"邏\": 6922,\n         \"邑\": 6923,\n         \"邓\": 6924,\n         \"邕\": 6925,\n         \"邛\": 6926,\n         \"邝\": 6927,\n         \"邢\": 6928,\n         \"那\": 6929,\n         \"邦\": 6930,\n         \"邨\": 6931,\n         \"邪\": 6932,\n         \"邬\": 6933,\n         \"邮\": 6934,\n         \"邯\": 6935,\n         \"邰\": 6936,\n         \"邱\": 6937,\n         \"邳\": 6938,\n         \"邵\": 6939,\n         \"邸\": 6940,\n         \"邹\": 6941,\n         \"邺\": 6942,\n         \"邻\": 6943,\n         \"郁\": 6944,\n         \"郅\": 6945,\n         \"郊\": 6946,\n         \"郎\": 6947,\n         \"郑\": 6948,\n         \"郜\": 6949,\n         \"郝\": 6950,\n         \"郡\": 6951,\n         \"郢\": 6952,\n         \"郤\": 6953,\n         \"郦\": 6954,\n         \"郧\": 6955,\n         \"部\": 6956,\n         \"郫\": 6957,\n         \"郭\": 6958,\n         \"郴\": 6959,\n         \"郵\": 6960,\n         \"郷\": 6961,\n         \"郸\": 6962,\n         \"都\": 6963,\n         \"鄂\": 6964,\n         \"鄉\": 6965,\n         \"鄒\": 6966,\n         \"鄔\": 6967,\n         \"鄙\": 6968,\n         \"鄞\": 6969,\n         \"鄢\": 6970,\n         \"鄧\": 6971,\n         \"鄭\": 6972,\n         \"鄰\": 6973,\n         \"鄱\": 6974,\n         \"鄲\": 6975,\n         \"鄺\": 6976,\n         \"酉\": 6977,\n         \"酊\": 6978,\n         \"酋\": 6979,\n         \"酌\": 6980,\n         \"配\": 6981,\n         \"酐\": 6982,\n         \"酒\": 6983,\n         \"酗\": 6984,\n         \"酚\": 6985,\n         \"酝\": 6986,\n         \"酢\": 6987,\n         \"酣\": 6988,\n         \"酥\": 6989,\n         \"酩\": 6990,\n         \"酪\": 6991,\n         \"酬\": 6992,\n         \"酮\": 6993,\n         \"酯\": 6994,\n         \"酰\": 6995,\n         \"酱\": 6996,\n         \"酵\": 6997,\n         \"酶\": 6998,\n         \"酷\": 6999,\n         \"酸\": 7000,\n         \"酿\": 7001,\n         \"醃\": 7002,\n         \"醇\": 7003,\n         \"醉\": 7004,\n         \"醋\": 7005,\n         \"醍\": 7006,\n         \"醐\": 7007,\n         \"醒\": 7008,\n         \"醚\": 7009,\n         \"醛\": 7010,\n         \"醜\": 7011,\n         \"醞\": 7012,\n         \"醣\": 7013,\n         \"醪\": 7014,\n         \"醫\": 7015,\n         \"醬\": 7016,\n         \"醮\": 7017,\n         \"醯\": 7018,\n         \"醴\": 7019,\n         \"醺\": 7020,\n         \"釀\": 7021,\n         \"釁\": 7022,\n         \"采\": 7023,\n         \"釉\": 7024,\n         \"释\": 7025,\n         \"釋\": 7026,\n         \"里\": 7027,\n         \"重\": 7028,\n         \"野\": 7029,\n         \"量\": 7030,\n         \"釐\": 7031,\n         \"金\": 7032,\n         \"釗\": 7033,\n         \"釘\": 7034,\n         \"釜\": 7035,\n         \"針\": 7036,\n         \"釣\": 7037,\n         \"釦\": 7038,\n         \"釧\": 7039,\n         \"釵\": 7040,\n         \"鈀\": 7041,\n         \"鈉\": 7042,\n         \"鈍\": 7043,\n         \"鈎\": 7044,\n         \"鈔\": 7045,\n         \"鈕\": 7046,\n         \"鈞\": 7047,\n         \"鈣\": 7048,\n         \"鈦\": 7049,\n         \"鈪\": 7050,\n         \"鈴\": 7051,\n         \"鈺\": 7052,\n         \"鈾\": 7053,\n         \"鉀\": 7054,\n         \"鉄\": 7055,\n         \"鉅\": 7056,\n         \"鉉\": 7057,\n         \"鉑\": 7058,\n         \"鉗\": 7059,\n         \"鉚\": 7060,\n         \"鉛\": 7061,\n         \"鉤\": 7062,\n         \"鉴\": 7063,\n         \"鉻\": 7064,\n         \"銀\": 7065,\n         \"銃\": 7066,\n         \"銅\": 7067,\n         \"銑\": 7068,\n         \"銓\": 7069,\n         \"銖\": 7070,\n         \"銘\": 7071,\n         \"銜\": 7072,\n         \"銬\": 7073,\n         \"銭\": 7074,\n         \"銮\": 7075,\n         \"銳\": 7076,\n         \"銷\": 7077,\n         \"銹\": 7078,\n         \"鋁\": 7079,\n         \"鋅\": 7080,\n         \"鋒\": 7081,\n         \"鋤\": 7082,\n         \"鋪\": 7083,\n         \"鋰\": 7084,\n         \"鋸\": 7085,\n         \"鋼\": 7086,\n         \"錄\": 7087,\n         \"錐\": 7088,\n         \"錘\": 7089,\n         \"錚\": 7090,\n         \"錠\": 7091,\n         \"錢\": 7092,\n         \"錦\": 7093,\n         \"錨\": 7094,\n         \"錫\": 7095,\n         \"錮\": 7096,\n         \"錯\": 7097,\n         \"録\": 7098,\n         \"錳\": 7099,\n         \"錶\": 7100,\n         \"鍊\": 7101,\n         \"鍋\": 7102,\n         \"鍍\": 7103,\n         \"鍛\": 7104,\n         \"鍥\": 7105,\n         \"鍰\": 7106,\n         \"鍵\": 7107,\n         \"鍺\": 7108,\n         \"鍾\": 7109,\n         \"鎂\": 7110,\n         \"鎊\": 7111,\n         \"鎌\": 7112,\n         \"鎏\": 7113,\n         \"鎔\": 7114,\n         \"鎖\": 7115,\n         \"鎗\": 7116,\n         \"鎚\": 7117,\n         \"鎧\": 7118,\n         \"鎬\": 7119,\n         \"鎮\": 7120,\n         \"鎳\": 7121,\n         \"鏈\": 7122,\n         \"鏖\": 7123,\n         \"鏗\": 7124,\n         \"鏘\": 7125,\n         \"鏞\": 7126,\n         \"鏟\": 7127,\n         \"鏡\": 7128,\n         \"鏢\": 7129,\n         \"鏤\": 7130,\n         \"鏽\": 7131,\n         \"鐘\": 7132,\n         \"鐮\": 7133,\n         \"鐲\": 7134,\n         \"鐳\": 7135,\n         \"鐵\": 7136,\n         \"鐸\": 7137,\n         \"鐺\": 7138,\n         \"鑄\": 7139,\n         \"鑊\": 7140,\n         \"鑑\": 7141,\n         \"鑒\": 7142,\n         \"鑣\": 7143,\n         \"鑫\": 7144,\n         \"鑰\": 7145,\n         \"鑲\": 7146,\n         \"鑼\": 7147,\n         \"鑽\": 7148,\n         \"鑾\": 7149,\n         \"鑿\": 7150,\n         \"针\": 7151,\n         \"钉\": 7152,\n         \"钊\": 7153,\n         \"钎\": 7154,\n         \"钏\": 7155,\n         \"钒\": 7156,\n         \"钓\": 7157,\n         \"钗\": 7158,\n         \"钙\": 7159,\n         \"钛\": 7160,\n         \"钜\": 7161,\n         \"钝\": 7162,\n         \"钞\": 7163,\n         \"钟\": 7164,\n         \"钠\": 7165,\n         \"钡\": 7166,\n         \"钢\": 7167,\n         \"钣\": 7168,\n         \"钤\": 7169,\n         \"钥\": 7170,\n         \"钦\": 7171,\n         \"钧\": 7172,\n         \"钨\": 7173,\n         \"钩\": 7174,\n         \"钮\": 7175,\n         \"钯\": 7176,\n         \"钰\": 7177,\n         \"钱\": 7178,\n         \"钳\": 7179,\n         \"钴\": 7180,\n         \"钵\": 7181,\n         \"钺\": 7182,\n         \"钻\": 7183,\n         \"钼\": 7184,\n         \"钾\": 7185,\n         \"钿\": 7186,\n         \"铀\": 7187,\n         \"铁\": 7188,\n         \"铂\": 7189,\n         \"铃\": 7190,\n         \"铄\": 7191,\n         \"铅\": 7192,\n         \"铆\": 7193,\n         \"铉\": 7194,\n         \"铎\": 7195,\n         \"铐\": 7196,\n         \"铛\": 7197,\n         \"铜\": 7198,\n         \"铝\": 7199,\n         \"铠\": 7200,\n         \"铡\": 7201,\n         \"铢\": 7202,\n         \"铣\": 7203,\n         \"铤\": 7204,\n         \"铨\": 7205,\n         \"铩\": 7206,\n         \"铬\": 7207,\n         \"铭\": 7208,\n         \"铮\": 7209,\n         \"铰\": 7210,\n         \"铲\": 7211,\n         \"铵\": 7212,\n         \"银\": 7213,\n         \"铸\": 7214,\n         \"铺\": 7215,\n         \"链\": 7216,\n         \"铿\": 7217,\n         \"销\": 7218,\n         \"锁\": 7219,\n         \"锂\": 7220,\n         \"锄\": 7221,\n         \"锅\": 7222,\n         \"锆\": 7223,\n         \"锈\": 7224,\n         \"锉\": 7225,\n         \"锋\": 7226,\n         \"锌\": 7227,\n         \"锏\": 7228,\n         \"锐\": 7229,\n         \"锑\": 7230,\n         \"错\": 7231,\n         \"锚\": 7232,\n         \"锟\": 7233,\n         \"锡\": 7234,\n         \"锢\": 7235,\n         \"锣\": 7236,\n         \"锤\": 7237,\n         \"锥\": 7238,\n         \"锦\": 7239,\n         \"锭\": 7240,\n         \"键\": 7241,\n         \"锯\": 7242,\n         \"锰\": 7243,\n         \"锲\": 7244,\n         \"锵\": 7245,\n         \"锹\": 7246,\n         \"锺\": 7247,\n         \"锻\": 7248,\n         \"镀\": 7249,\n         \"镁\": 7250,\n         \"镂\": 7251,\n         \"镇\": 7252,\n         \"镉\": 7253,\n         \"镌\": 7254,\n         \"镍\": 7255,\n         \"镐\": 7256,\n         \"镑\": 7257,\n         \"镕\": 7258,\n         \"镖\": 7259,\n         \"镗\": 7260,\n         \"镛\": 7261,\n         \"镜\": 7262,\n         \"镣\": 7263,\n         \"镭\": 7264,\n         \"镯\": 7265,\n         \"镰\": 7266,\n         \"镳\": 7267,\n         \"镶\": 7268,\n         \"長\": 7269,\n         \"长\": 7270,\n         \"門\": 7271,\n         \"閃\": 7272,\n         \"閉\": 7273,\n         \"開\": 7274,\n         \"閎\": 7275,\n         \"閏\": 7276,\n         \"閑\": 7277,\n         \"閒\": 7278,\n         \"間\": 7279,\n         \"閔\": 7280,\n         \"閘\": 7281,\n         \"閡\": 7282,\n         \"関\": 7283,\n         \"閣\": 7284,\n         \"閥\": 7285,\n         \"閨\": 7286,\n         \"閩\": 7287,\n         \"閱\": 7288,\n         \"閲\": 7289,\n         \"閹\": 7290,\n         \"閻\": 7291,\n         \"閾\": 7292,\n         \"闆\": 7293,\n         \"闇\": 7294,\n         \"闊\": 7295,\n         \"闌\": 7296,\n         \"闍\": 7297,\n         \"闔\": 7298,\n         \"闕\": 7299,\n         \"闖\": 7300,\n         \"闘\": 7301,\n         \"關\": 7302,\n         \"闡\": 7303,\n         \"闢\": 7304,\n         \"门\": 7305,\n         \"闪\": 7306,\n         \"闫\": 7307,\n         \"闭\": 7308,\n         \"问\": 7309,\n         \"闯\": 7310,\n         \"闰\": 7311,\n         \"闲\": 7312,\n         \"间\": 7313,\n         \"闵\": 7314,\n         \"闷\": 7315,\n         \"闸\": 7316,\n         \"闹\": 7317,\n         \"闺\": 7318,\n         \"闻\": 7319,\n         \"闽\": 7320,\n         \"闾\": 7321,\n         \"阀\": 7322,\n         \"阁\": 7323,\n         \"阂\": 7324,\n         \"阅\": 7325,\n         \"阆\": 7326,\n         \"阇\": 7327,\n         \"阈\": 7328,\n         \"阉\": 7329,\n         \"阎\": 7330,\n         \"阐\": 7331,\n         \"阑\": 7332,\n         \"阔\": 7333,\n         \"阕\": 7334,\n         \"阖\": 7335,\n         \"阙\": 7336,\n         \"阚\": 7337,\n         \"阜\": 7338,\n         \"队\": 7339,\n         \"阡\": 7340,\n         \"阪\": 7341,\n         \"阮\": 7342,\n         \"阱\": 7343,\n         \"防\": 7344,\n         \"阳\": 7345,\n         \"阴\": 7346,\n         \"阵\": 7347,\n         \"阶\": 7348,\n         \"阻\": 7349,\n         \"阿\": 7350,\n         \"陀\": 7351,\n         \"陂\": 7352,\n         \"附\": 7353,\n         \"际\": 7354,\n         \"陆\": 7355,\n         \"陇\": 7356,\n         \"陈\": 7357,\n         \"陋\": 7358,\n         \"陌\": 7359,\n         \"降\": 7360,\n         \"限\": 7361,\n         \"陕\": 7362,\n         \"陛\": 7363,\n         \"陝\": 7364,\n         \"陞\": 7365,\n         \"陟\": 7366,\n         \"陡\": 7367,\n         \"院\": 7368,\n         \"陣\": 7369,\n         \"除\": 7370,\n         \"陨\": 7371,\n         \"险\": 7372,\n         \"陪\": 7373,\n         \"陰\": 7374,\n         \"陲\": 7375,\n         \"陳\": 7376,\n         \"陵\": 7377,\n         \"陶\": 7378,\n         \"陷\": 7379,\n         \"陸\": 7380,\n         \"険\": 7381,\n         \"陽\": 7382,\n         \"隅\": 7383,\n         \"隆\": 7384,\n         \"隈\": 7385,\n         \"隊\": 7386,\n         \"隋\": 7387,\n         \"隍\": 7388,\n         \"階\": 7389,\n         \"随\": 7390,\n         \"隐\": 7391,\n         \"隔\": 7392,\n         \"隕\": 7393,\n         \"隘\": 7394,\n         \"隙\": 7395,\n         \"際\": 7396,\n         \"障\": 7397,\n         \"隠\": 7398,\n         \"隣\": 7399,\n         \"隧\": 7400,\n         \"隨\": 7401,\n         \"險\": 7402,\n         \"隱\": 7403,\n         \"隴\": 7404,\n         \"隶\": 7405,\n         \"隸\": 7406,\n         \"隻\": 7407,\n         \"隼\": 7408,\n         \"隽\": 7409,\n         \"难\": 7410,\n         \"雀\": 7411,\n         \"雁\": 7412,\n         \"雄\": 7413,\n         \"雅\": 7414,\n         \"集\": 7415,\n         \"雇\": 7416,\n         \"雉\": 7417,\n         \"雋\": 7418,\n         \"雌\": 7419,\n         \"雍\": 7420,\n         \"雎\": 7421,\n         \"雏\": 7422,\n         \"雑\": 7423,\n         \"雒\": 7424,\n         \"雕\": 7425,\n         \"雖\": 7426,\n         \"雙\": 7427,\n         \"雛\": 7428,\n         \"雜\": 7429,\n         \"雞\": 7430,\n         \"離\": 7431,\n         \"難\": 7432,\n         \"雨\": 7433,\n         \"雪\": 7434,\n         \"雯\": 7435,\n         \"雰\": 7436,\n         \"雲\": 7437,\n         \"雳\": 7438,\n         \"零\": 7439,\n         \"雷\": 7440,\n         \"雹\": 7441,\n         \"電\": 7442,\n         \"雾\": 7443,\n         \"需\": 7444,\n         \"霁\": 7445,\n         \"霄\": 7446,\n         \"霆\": 7447,\n         \"震\": 7448,\n         \"霈\": 7449,\n         \"霉\": 7450,\n         \"霊\": 7451,\n         \"霍\": 7452,\n         \"霎\": 7453,\n         \"霏\": 7454,\n         \"霑\": 7455,\n         \"霓\": 7456,\n         \"霖\": 7457,\n         \"霜\": 7458,\n         \"霞\": 7459,\n         \"霧\": 7460,\n         \"霭\": 7461,\n         \"霰\": 7462,\n         \"露\": 7463,\n         \"霸\": 7464,\n         \"霹\": 7465,\n         \"霽\": 7466,\n         \"霾\": 7467,\n         \"靂\": 7468,\n         \"靄\": 7469,\n         \"靈\": 7470,\n         \"青\": 7471,\n         \"靓\": 7472,\n         \"靖\": 7473,\n         \"静\": 7474,\n         \"靚\": 7475,\n         \"靛\": 7476,\n         \"靜\": 7477,\n         \"非\": 7478,\n         \"靠\": 7479,\n         \"靡\": 7480,\n         \"面\": 7481,\n         \"靥\": 7482,\n         \"靦\": 7483,\n         \"革\": 7484,\n         \"靳\": 7485,\n         \"靴\": 7486,\n         \"靶\": 7487,\n         \"靼\": 7488,\n         \"鞅\": 7489,\n         \"鞋\": 7490,\n         \"鞍\": 7491,\n         \"鞏\": 7492,\n         \"鞑\": 7493,\n         \"鞘\": 7494,\n         \"鞠\": 7495,\n         \"鞣\": 7496,\n         \"鞦\": 7497,\n         \"鞭\": 7498,\n         \"韆\": 7499,\n         \"韋\": 7500,\n         \"韌\": 7501,\n         \"韓\": 7502,\n         \"韜\": 7503,\n         \"韦\": 7504,\n         \"韧\": 7505,\n         \"韩\": 7506,\n         \"韬\": 7507,\n         \"韭\": 7508,\n         \"音\": 7509,\n         \"韵\": 7510,\n         \"韶\": 7511,\n         \"韻\": 7512,\n         \"響\": 7513,\n         \"頁\": 7514,\n         \"頂\": 7515,\n         \"頃\": 7516,\n         \"項\": 7517,\n         \"順\": 7518,\n         \"須\": 7519,\n         \"頌\": 7520,\n         \"預\": 7521,\n         \"頑\": 7522,\n         \"頒\": 7523,\n         \"頓\": 7524,\n         \"頗\": 7525,\n         \"領\": 7526,\n         \"頜\": 7527,\n         \"頡\": 7528,\n         \"頤\": 7529,\n         \"頫\": 7530,\n         \"頭\": 7531,\n         \"頰\": 7532,\n         \"頷\": 7533,\n         \"頸\": 7534,\n         \"頹\": 7535,\n         \"頻\": 7536,\n         \"頼\": 7537,\n         \"顆\": 7538,\n         \"題\": 7539,\n         \"額\": 7540,\n         \"顎\": 7541,\n         \"顏\": 7542,\n         \"顔\": 7543,\n         \"願\": 7544,\n         \"顛\": 7545,\n         \"類\": 7546,\n         \"顧\": 7547,\n         \"顫\": 7548,\n         \"顯\": 7549,\n         \"顱\": 7550,\n         \"顴\": 7551,\n         \"页\": 7552,\n         \"顶\": 7553,\n         \"顷\": 7554,\n         \"项\": 7555,\n         \"顺\": 7556,\n         \"须\": 7557,\n         \"顼\": 7558,\n         \"顽\": 7559,\n         \"顾\": 7560,\n         \"顿\": 7561,\n         \"颁\": 7562,\n         \"颂\": 7563,\n         \"预\": 7564,\n         \"颅\": 7565,\n         \"领\": 7566,\n         \"颇\": 7567,\n         \"颈\": 7568,\n         \"颉\": 7569,\n         \"颊\": 7570,\n         \"颌\": 7571,\n         \"颍\": 7572,\n         \"颐\": 7573,\n         \"频\": 7574,\n         \"颓\": 7575,\n         \"颔\": 7576,\n         \"颖\": 7577,\n         \"颗\": 7578,\n         \"题\": 7579,\n         \"颚\": 7580,\n         \"颛\": 7581,\n         \"颜\": 7582,\n         \"额\": 7583,\n         \"颞\": 7584,\n         \"颠\": 7585,\n         \"颡\": 7586,\n         \"颢\": 7587,\n         \"颤\": 7588,\n         \"颦\": 7589,\n         \"颧\": 7590,\n         \"風\": 7591,\n         \"颯\": 7592,\n         \"颱\": 7593,\n         \"颳\": 7594,\n         \"颶\": 7595,\n         \"颼\": 7596,\n         \"飄\": 7597,\n         \"飆\": 7598,\n         \"风\": 7599,\n         \"飒\": 7600,\n         \"飓\": 7601,\n         \"飕\": 7602,\n         \"飘\": 7603,\n         \"飙\": 7604,\n         \"飚\": 7605,\n         \"飛\": 7606,\n         \"飞\": 7607,\n         \"食\": 7608,\n         \"飢\": 7609,\n         \"飨\": 7610,\n         \"飩\": 7611,\n         \"飪\": 7612,\n         \"飯\": 7613,\n         \"飲\": 7614,\n         \"飼\": 7615,\n         \"飽\": 7616,\n         \"飾\": 7617,\n         \"餃\": 7618,\n         \"餅\": 7619,\n         \"餉\": 7620,\n         \"養\": 7621,\n         \"餌\": 7622,\n         \"餐\": 7623,\n         \"餒\": 7624,\n         \"餓\": 7625,\n         \"餘\": 7626,\n         \"餚\": 7627,\n         \"餛\": 7628,\n         \"餞\": 7629,\n         \"餡\": 7630,\n         \"館\": 7631,\n         \"餮\": 7632,\n         \"餵\": 7633,\n         \"餾\": 7634,\n         \"饅\": 7635,\n         \"饈\": 7636,\n         \"饋\": 7637,\n         \"饌\": 7638,\n         \"饍\": 7639,\n         \"饑\": 7640,\n         \"饒\": 7641,\n         \"饕\": 7642,\n         \"饗\": 7643,\n         \"饞\": 7644,\n         \"饥\": 7645,\n         \"饨\": 7646,\n         \"饪\": 7647,\n         \"饬\": 7648,\n         \"饭\": 7649,\n         \"饮\": 7650,\n         \"饯\": 7651,\n         \"饰\": 7652,\n         \"饱\": 7653,\n         \"饲\": 7654,\n         \"饴\": 7655,\n         \"饵\": 7656,\n         \"饶\": 7657,\n         \"饷\": 7658,\n         \"饺\": 7659,\n         \"饼\": 7660,\n         \"饽\": 7661,\n         \"饿\": 7662,\n         \"馀\": 7663,\n         \"馁\": 7664,\n         \"馄\": 7665,\n         \"馅\": 7666,\n         \"馆\": 7667,\n         \"馈\": 7668,\n         \"馋\": 7669,\n         \"馍\": 7670,\n         \"馏\": 7671,\n         \"馒\": 7672,\n         \"馔\": 7673,\n         \"首\": 7674,\n         \"馗\": 7675,\n         \"香\": 7676,\n         \"馥\": 7677,\n         \"馨\": 7678,\n         \"馬\": 7679,\n         \"馭\": 7680,\n         \"馮\": 7681,\n         \"馳\": 7682,\n         \"馴\": 7683,\n         \"駁\": 7684,\n         \"駄\": 7685,\n         \"駅\": 7686,\n         \"駆\": 7687,\n         \"駐\": 7688,\n         \"駒\": 7689,\n         \"駕\": 7690,\n         \"駛\": 7691,\n         \"駝\": 7692,\n         \"駭\": 7693,\n         \"駱\": 7694,\n         \"駿\": 7695,\n         \"騁\": 7696,\n         \"騎\": 7697,\n         \"騏\": 7698,\n         \"験\": 7699,\n         \"騙\": 7700,\n         \"騨\": 7701,\n         \"騰\": 7702,\n         \"騷\": 7703,\n         \"驀\": 7704,\n         \"驅\": 7705,\n         \"驊\": 7706,\n         \"驍\": 7707,\n         \"驒\": 7708,\n         \"驕\": 7709,\n         \"驗\": 7710,\n         \"驚\": 7711,\n         \"驛\": 7712,\n         \"驟\": 7713,\n         \"驢\": 7714,\n         \"驥\": 7715,\n         \"马\": 7716,\n         \"驭\": 7717,\n         \"驮\": 7718,\n         \"驯\": 7719,\n         \"驰\": 7720,\n         \"驱\": 7721,\n         \"驳\": 7722,\n         \"驴\": 7723,\n         \"驶\": 7724,\n         \"驷\": 7725,\n         \"驸\": 7726,\n         \"驹\": 7727,\n         \"驻\": 7728,\n         \"驼\": 7729,\n         \"驾\": 7730,\n         \"驿\": 7731,\n         \"骁\": 7732,\n         \"骂\": 7733,\n         \"骄\": 7734,\n         \"骅\": 7735,\n         \"骆\": 7736,\n         \"骇\": 7737,\n         \"骈\": 7738,\n         \"骊\": 7739,\n         \"骋\": 7740,\n         \"验\": 7741,\n         \"骏\": 7742,\n         \"骐\": 7743,\n         \"骑\": 7744,\n         \"骗\": 7745,\n         \"骚\": 7746,\n         \"骛\": 7747,\n         \"骜\": 7748,\n         \"骞\": 7749,\n         \"骠\": 7750,\n         \"骡\": 7751,\n         \"骤\": 7752,\n         \"骥\": 7753,\n         \"骧\": 7754,\n         \"骨\": 7755,\n         \"骯\": 7756,\n         \"骰\": 7757,\n         \"骶\": 7758,\n         \"骷\": 7759,\n         \"骸\": 7760,\n         \"骼\": 7761,\n         \"髂\": 7762,\n         \"髅\": 7763,\n         \"髋\": 7764,\n         \"髏\": 7765,\n         \"髒\": 7766,\n         \"髓\": 7767,\n         \"體\": 7768,\n         \"髖\": 7769,\n         \"高\": 7770,\n         \"髦\": 7771,\n         \"髪\": 7772,\n         \"髮\": 7773,\n         \"髯\": 7774,\n         \"髻\": 7775,\n         \"鬃\": 7776,\n         \"鬆\": 7777,\n         \"鬍\": 7778,\n         \"鬓\": 7779,\n         \"鬚\": 7780,\n         \"鬟\": 7781,\n         \"鬢\": 7782,\n         \"鬣\": 7783,\n         \"鬥\": 7784,\n         \"鬧\": 7785,\n         \"鬱\": 7786,\n         \"鬼\": 7787,\n         \"魁\": 7788,\n         \"魂\": 7789,\n         \"魄\": 7790,\n         \"魅\": 7791,\n         \"魇\": 7792,\n         \"魍\": 7793,\n         \"魏\": 7794,\n         \"魔\": 7795,\n         \"魘\": 7796,\n         \"魚\": 7797,\n         \"魯\": 7798,\n         \"魷\": 7799,\n         \"鮑\": 7800,\n         \"鮨\": 7801,\n         \"鮪\": 7802,\n         \"鮭\": 7803,\n         \"鮮\": 7804,\n         \"鯉\": 7805,\n         \"鯊\": 7806,\n         \"鯖\": 7807,\n         \"鯛\": 7808,\n         \"鯨\": 7809,\n         \"鯰\": 7810,\n         \"鯽\": 7811,\n         \"鰍\": 7812,\n         \"鰓\": 7813,\n         \"鰭\": 7814,\n         \"鰲\": 7815,\n         \"鰻\": 7816,\n         \"鰾\": 7817,\n         \"鱈\": 7818,\n         \"鱉\": 7819,\n         \"鱔\": 7820,\n         \"鱗\": 7821,\n         \"鱷\": 7822,\n         \"鱸\": 7823,\n         \"鱼\": 7824,\n         \"鱿\": 7825,\n         \"鲁\": 7826,\n         \"鲈\": 7827,\n         \"鲍\": 7828,\n         \"鲑\": 7829,\n         \"鲛\": 7830,\n         \"鲜\": 7831,\n         \"鲟\": 7832,\n         \"鲢\": 7833,\n         \"鲤\": 7834,\n         \"鲨\": 7835,\n         \"鲫\": 7836,\n         \"鲱\": 7837,\n         \"鲲\": 7838,\n         \"鲶\": 7839,\n         \"鲷\": 7840,\n         \"鲸\": 7841,\n         \"鳃\": 7842,\n         \"鳄\": 7843,\n         \"鳅\": 7844,\n         \"鳌\": 7845,\n         \"鳍\": 7846,\n         \"鳕\": 7847,\n         \"鳖\": 7848,\n         \"鳗\": 7849,\n         \"鳝\": 7850,\n         \"鳞\": 7851,\n         \"鳥\": 7852,\n         \"鳩\": 7853,\n         \"鳳\": 7854,\n         \"鳴\": 7855,\n         \"鳶\": 7856,\n         \"鴉\": 7857,\n         \"鴕\": 7858,\n         \"鴛\": 7859,\n         \"鴦\": 7860,\n         \"鴨\": 7861,\n         \"鴻\": 7862,\n         \"鴿\": 7863,\n         \"鵑\": 7864,\n         \"鵜\": 7865,\n         \"鵝\": 7866,\n         \"鵡\": 7867,\n         \"鵬\": 7868,\n         \"鵰\": 7869,\n         \"鵲\": 7870,\n         \"鶘\": 7871,\n         \"鶩\": 7872,\n         \"鶯\": 7873,\n         \"鶴\": 7874,\n         \"鷗\": 7875,\n         \"鷲\": 7876,\n         \"鷹\": 7877,\n         \"鷺\": 7878,\n         \"鸚\": 7879,\n         \"鸞\": 7880,\n         \"鸟\": 7881,\n         \"鸠\": 7882,\n         \"鸡\": 7883,\n         \"鸢\": 7884,\n         \"鸣\": 7885,\n         \"鸥\": 7886,\n         \"鸦\": 7887,\n         \"鸨\": 7888,\n         \"鸪\": 7889,\n         \"鸭\": 7890,\n         \"鸯\": 7891,\n         \"鸳\": 7892,\n         \"鸵\": 7893,\n         \"鸽\": 7894,\n         \"鸾\": 7895,\n         \"鸿\": 7896,\n         \"鹂\": 7897,\n         \"鹃\": 7898,\n         \"鹄\": 7899,\n         \"鹅\": 7900,\n         \"鹈\": 7901,\n         \"鹉\": 7902,\n         \"鹊\": 7903,\n         \"鹌\": 7904,\n         \"鹏\": 7905,\n         \"鹑\": 7906,\n         \"鹕\": 7907,\n         \"鹘\": 7908,\n         \"鹜\": 7909,\n         \"鹞\": 7910,\n         \"鹤\": 7911,\n         \"鹦\": 7912,\n         \"鹧\": 7913,\n         \"鹫\": 7914,\n         \"鹭\": 7915,\n         \"鹰\": 7916,\n         \"鹳\": 7917,\n         \"鹵\": 7918,\n         \"鹹\": 7919,\n         \"鹼\": 7920,\n         \"鹽\": 7921,\n         \"鹿\": 7922,\n         \"麂\": 7923,\n         \"麋\": 7924,\n         \"麒\": 7925,\n         \"麓\": 7926,\n         \"麗\": 7927,\n         \"麝\": 7928,\n         \"麟\": 7929,\n         \"麥\": 7930,\n         \"麦\": 7931,\n         \"麩\": 7932,\n         \"麴\": 7933,\n         \"麵\": 7934,\n         \"麸\": 7935,\n         \"麺\": 7936,\n         \"麻\": 7937,\n         \"麼\": 7938,\n         \"麽\": 7939,\n         \"麾\": 7940,\n         \"黃\": 7941,\n         \"黄\": 7942,\n         \"黍\": 7943,\n         \"黎\": 7944,\n         \"黏\": 7945,\n         \"黑\": 7946,\n         \"黒\": 7947,\n         \"黔\": 7948,\n         \"默\": 7949,\n         \"黛\": 7950,\n         \"黜\": 7951,\n         \"黝\": 7952,\n         \"點\": 7953,\n         \"黠\": 7954,\n         \"黨\": 7955,\n         \"黯\": 7956,\n         \"黴\": 7957,\n         \"鼋\": 7958,\n         \"鼎\": 7959,\n         \"鼐\": 7960,\n         \"鼓\": 7961,\n         \"鼠\": 7962,\n         \"鼬\": 7963,\n         \"鼹\": 7964,\n         \"鼻\": 7965,\n         \"鼾\": 7966,\n         \"齁\": 7967,\n         \"齊\": 7968,\n         \"齋\": 7969,\n         \"齐\": 7970,\n         \"齒\": 7971,\n         \"齡\": 7972,\n         \"齢\": 7973,\n         \"齣\": 7974,\n         \"齦\": 7975,\n         \"齿\": 7976,\n         \"龄\": 7977,\n         \"龅\": 7978,\n         \"龈\": 7979,\n         \"龊\": 7980,\n         \"龋\": 7981,\n         \"龌\": 7982,\n         \"龍\": 7983,\n         \"龐\": 7984,\n         \"龔\": 7985,\n         \"龕\": 7986,\n         \"龙\": 7987,\n         \"龚\": 7988,\n         \"龛\": 7989,\n         \"龜\": 7990,\n         \"龟\": 7991,\n         \"👍\": 8102,\n         \"🔥\": 8103,\n         \"😂\": 8104,\n         \"😎\": 8105,\n         \"︰\": 7992,\n         \"︱\": 7993,\n         \"︶\": 7994,\n         \"︿\": 7995,\n         \"﹁\": 7996,\n         \"﹂\": 7997,\n         \"﹍\": 7998,\n         \"﹏\": 7999,\n         \"﹐\": 8000,\n         \"﹑\": 8001,\n         \"﹒\": 8002,\n         \"﹔\": 8003,\n         \"﹕\": 8004,\n         \"﹖\": 8005,\n         \"﹗\": 8006,\n         \"﹙\": 8007,\n         \"﹚\": 8008,\n         \"﹝\": 8009,\n         \"﹞\": 8010,\n         \"﹡\": 8011,\n         \"﹣\": 8012,\n         \"！\": 8013,\n         \"＂\": 8014,\n         \"＃\": 8015,\n         \"＄\": 8016,\n         \"％\": 8017,\n         \"＆\": 8018,\n         \"＇\": 8019,\n         \"（\": 8020,\n         \"）\": 8021,\n         \"＊\": 8022,\n         \"＋\": 8023,\n         \"，\": 8024,\n         \"－\": 8025,\n         \"．\": 8026,\n         \"／\": 8027,\n         \"０\": 8028,\n         \"１\": 8029,\n         \"１０\": 9198,\n         \"１１\": 10300,\n         \"１２\": 10351,\n         \"１３\": 12911,\n         \"１４\": 12164,\n         \"１５\": 11213,\n         \"１６\": 12963,\n         \"１８\": 13218,\n         \"２\": 8030,\n         \"２０\": 10327,\n         \"２４\": 12620,\n         \"３\": 8031,\n         \"３０\": 10684,\n         \"４\": 8032,\n         \"５\": 8033,\n         \"５０\": 12869,\n         \"６\": 8034,\n         \"７\": 8035,\n         \"８\": 8036,\n         \"９\": 8037,\n         \"：\": 8038,\n         \"；\": 8039,\n         \"＜\": 8040,\n         \"＝\": 8041,\n         \"＞\": 8042,\n         \"？\": 8043,\n         \"＠\": 8044,\n         \"［\": 8045,\n         \"＼\": 8046,\n         \"］\": 8047,\n         \"＾\": 8048,\n         \"＿\": 8049,\n         \"｀\": 8050,\n         \"ａ\": 8051,\n         \"ｂ\": 8052,\n         \"ｃ\": 8053,\n         \"ｃｐ\": 8836,\n         \"ｄ\": 8054,\n         \"ｅ\": 8055,\n         \"ｆ\": 8056,\n         \"ｇ\": 8057,\n         \"ｈ\": 8058,\n         \"ｉ\": 8059,\n         \"ｊ\": 8060,\n         \"ｋ\": 8061,\n         \"ｌ\": 8062,\n         \"ｍ\": 8063,\n         \"ｎ\": 8064,\n         \"ｏ\": 8065,\n         \"ｏｋ\": 11518,\n         \"ｐ\": 8066,\n         \"ｑ\": 8067,\n         \"ｒ\": 8068,\n         \"ｓ\": 8069,\n         \"ｔ\": 8070,\n         \"ｕ\": 8071,\n         \"ｖ\": 8072,\n         \"ｗ\": 8073,\n         \"ｗedding\": 10069,\n         \"ｘ\": 8074,\n         \"ｙ\": 8075,\n         \"ｚ\": 8076,\n         \"｛\": 8077,\n         \"｜\": 8078,\n         \"｝\": 8079,\n         \"～\": 8080,\n         \"～1\": 12756,\n         \"～10\": 11115,\n         \"～4\": 12476,\n         \"～5\": 11980,\n         \"～～\": 8734,\n         \"～～～\": 9626,\n         \"｡\": 8081,\n         \"｢\": 8082,\n         \"｣\": 8083,\n         \"､\": 8084,\n         \"･\": 8085,\n         \"ｯ\": 8086,\n         \"ｰ\": 8087,\n         \"ｲ\": 8088,\n         \"ｸ\": 8089,\n         \"ｼ\": 8090,\n         \"ｽ\": 8091,\n         \"ﾄ\": 8092,\n         \"ﾉ\": 8093,\n         \"ﾌ\": 8094,\n         \"ﾗ\": 8095,\n         \"ﾙ\": 8096,\n         \"ﾝ\": 8097,\n         \"ﾞ\": 8098,\n         \"ﾟ\": 8099,\n         \"￣\": 8100,\n         \"￥\": 8101,\n         \"￥2899\": 9425,\n         \"￥799\": 9417\n    }\n}"
  },
  {
    "path": "Bert/deberta-v2-large-japanese/Tokenizer.json",
    "content": "{\n    \"Type\": \"Unigram\",\n    \"ContinuingSubwordPrefix\": \"▁\",\n    \"Vocab\": [\n      [\n        \"[PAD]\",\n        0.0\n      ],\n      [\n        \"[CLS]\",\n        0.0\n      ],\n      [\n        \"[SEP]\",\n        0.0\n      ],\n      [\n        \"[UNK]\",\n        0.0\n      ],\n      [\n        \"[MASK]\",\n        0.0\n      ],\n      [\n        \"<0x00>\",\n        0.0\n      ],\n      [\n        \"<0x01>\",\n        0.0\n      ],\n      [\n        \"<0x02>\",\n        0.0\n      ],\n      [\n        \"<0x03>\",\n        0.0\n      ],\n      [\n        \"<0x04>\",\n        0.0\n      ],\n      [\n        \"<0x05>\",\n        0.0\n      ],\n      [\n        \"<0x06>\",\n        0.0\n      ],\n      [\n        \"<0x07>\",\n        0.0\n      ],\n      [\n        \"<0x08>\",\n        0.0\n      ],\n      [\n        \"<0x09>\",\n        0.0\n      ],\n      [\n        \"<0x0A>\",\n        0.0\n      ],\n      [\n        \"<0x0B>\",\n        0.0\n      ],\n      [\n        \"<0x0C>\",\n        0.0\n      ],\n      [\n        \"<0x0D>\",\n        0.0\n      ],\n      [\n        \"<0x0E>\",\n        0.0\n      ],\n      [\n        \"<0x0F>\",\n        0.0\n      ],\n      [\n        \"<0x10>\",\n        0.0\n      ],\n      [\n        \"<0x11>\",\n        0.0\n      ],\n      [\n        \"<0x12>\",\n        0.0\n      ],\n      [\n        \"<0x13>\",\n        0.0\n      ],\n      [\n        \"<0x14>\",\n        0.0\n      ],\n      [\n        \"<0x15>\",\n        0.0\n      ],\n      [\n        \"<0x16>\",\n        0.0\n      ],\n      [\n        \"<0x17>\",\n        0.0\n      ],\n      [\n        \"<0x18>\",\n        0.0\n      ],\n      [\n        \"<0x19>\",\n        0.0\n      ],\n      [\n        \"<0x1A>\",\n        0.0\n      ],\n      [\n        \"<0x1B>\",\n        0.0\n      ],\n      [\n        \"<0x1C>\",\n        0.0\n      ],\n      [\n        \"<0x1D>\",\n        0.0\n      ],\n      [\n        \"<0x1E>\",\n        0.0\n      ],\n      [\n        \"<0x1F>\",\n        0.0\n      ],\n      [\n        \"<0x20>\",\n        0.0\n      ],\n      [\n        \"<0x21>\",\n        0.0\n      ],\n      [\n        \"<0x22>\",\n        0.0\n      ],\n      [\n        \"<0x23>\",\n        0.0\n      ],\n      [\n        \"<0x24>\",\n        0.0\n      ],\n      [\n        \"<0x25>\",\n        0.0\n      ],\n      [\n        \"<0x26>\",\n        0.0\n      ],\n      [\n        \"<0x27>\",\n        0.0\n      ],\n      [\n        \"<0x28>\",\n        0.0\n      ],\n      [\n        \"<0x29>\",\n        0.0\n      ],\n      [\n        \"<0x2A>\",\n        0.0\n      ],\n      [\n        \"<0x2B>\",\n        0.0\n      ],\n      [\n        \"<0x2C>\",\n        0.0\n      ],\n      [\n        \"<0x2D>\",\n        0.0\n      ],\n      [\n        \"<0x2E>\",\n        0.0\n      ],\n      [\n        \"<0x2F>\",\n        0.0\n      ],\n      [\n        \"<0x30>\",\n        0.0\n      ],\n      [\n        \"<0x31>\",\n        0.0\n      ],\n      [\n        \"<0x32>\",\n        0.0\n      ],\n      [\n        \"<0x33>\",\n        0.0\n      ],\n      [\n        \"<0x34>\",\n        0.0\n      ],\n      [\n        \"<0x35>\",\n        0.0\n      ],\n      [\n        \"<0x36>\",\n        0.0\n      ],\n      [\n        \"<0x37>\",\n        0.0\n      ],\n      [\n        \"<0x38>\",\n        0.0\n      ],\n      [\n        \"<0x39>\",\n        0.0\n      ],\n      [\n        \"<0x3A>\",\n        0.0\n      ],\n      [\n        \"<0x3B>\",\n        0.0\n      ],\n      [\n        \"<0x3C>\",\n        0.0\n      ],\n      [\n        \"<0x3D>\",\n        0.0\n      ],\n      [\n        \"<0x3E>\",\n        0.0\n      ],\n      [\n        \"<0x3F>\",\n        0.0\n      ],\n      [\n        \"<0x40>\",\n        0.0\n      ],\n      [\n        \"<0x41>\",\n        0.0\n      ],\n      [\n        \"<0x42>\",\n        0.0\n      ],\n      [\n        \"<0x43>\",\n        0.0\n      ],\n      [\n        \"<0x44>\",\n        0.0\n      ],\n      [\n        \"<0x45>\",\n        0.0\n      ],\n      [\n        \"<0x46>\",\n        0.0\n      ],\n      [\n        \"<0x47>\",\n        0.0\n      ],\n      [\n        \"<0x48>\",\n        0.0\n      ],\n      [\n        \"<0x49>\",\n        0.0\n      ],\n      [\n        \"<0x4A>\",\n        0.0\n      ],\n      [\n        \"<0x4B>\",\n        0.0\n      ],\n      [\n        \"<0x4C>\",\n        0.0\n      ],\n      [\n        \"<0x4D>\",\n        0.0\n      ],\n      [\n        \"<0x4E>\",\n        0.0\n      ],\n      [\n        \"<0x4F>\",\n        0.0\n      ],\n      [\n        \"<0x50>\",\n        0.0\n      ],\n      [\n        \"<0x51>\",\n        0.0\n      ],\n      [\n        \"<0x52>\",\n        0.0\n      ],\n      [\n        \"<0x53>\",\n        0.0\n      ],\n      [\n        \"<0x54>\",\n        0.0\n      ],\n      [\n        \"<0x55>\",\n        0.0\n      ],\n      [\n        \"<0x56>\",\n        0.0\n      ],\n      [\n        \"<0x57>\",\n        0.0\n      ],\n      [\n        \"<0x58>\",\n        0.0\n      ],\n      [\n        \"<0x59>\",\n        0.0\n      ],\n      [\n        \"<0x5A>\",\n        0.0\n      ],\n      [\n        \"<0x5B>\",\n        0.0\n      ],\n      [\n        \"<0x5C>\",\n        0.0\n      ],\n      [\n        \"<0x5D>\",\n        0.0\n      ],\n      [\n        \"<0x5E>\",\n        0.0\n      ],\n      [\n        \"<0x5F>\",\n        0.0\n      ],\n      [\n        \"<0x60>\",\n        0.0\n      ],\n      [\n        \"<0x61>\",\n        0.0\n      ],\n      [\n        \"<0x62>\",\n        0.0\n      ],\n      [\n        \"<0x63>\",\n        0.0\n      ],\n      [\n        \"<0x64>\",\n        0.0\n      ],\n      [\n        \"<0x65>\",\n        0.0\n      ],\n      [\n        \"<0x66>\",\n        0.0\n      ],\n      [\n        \"<0x67>\",\n        0.0\n      ],\n      [\n        \"<0x68>\",\n        0.0\n      ],\n      [\n        \"<0x69>\",\n        0.0\n      ],\n      [\n        \"<0x6A>\",\n        0.0\n      ],\n      [\n        \"<0x6B>\",\n        0.0\n      ],\n      [\n        \"<0x6C>\",\n        0.0\n      ],\n      [\n        \"<0x6D>\",\n        0.0\n      ],\n      [\n        \"<0x6E>\",\n        0.0\n      ],\n      [\n        \"<0x6F>\",\n        0.0\n      ],\n      [\n        \"<0x70>\",\n        0.0\n      ],\n      [\n        \"<0x71>\",\n        0.0\n      ],\n      [\n        \"<0x72>\",\n        0.0\n      ],\n      [\n        \"<0x73>\",\n        0.0\n      ],\n      [\n        \"<0x74>\",\n        0.0\n      ],\n      [\n        \"<0x75>\",\n        0.0\n      ],\n      [\n        \"<0x76>\",\n        0.0\n      ],\n      [\n        \"<0x77>\",\n        0.0\n      ],\n      [\n        \"<0x78>\",\n        0.0\n      ],\n      [\n        \"<0x79>\",\n        0.0\n      ],\n      [\n        \"<0x7A>\",\n        0.0\n      ],\n      [\n        \"<0x7B>\",\n        0.0\n      ],\n      [\n        \"<0x7C>\",\n        0.0\n      ],\n      [\n        \"<0x7D>\",\n        0.0\n      ],\n      [\n        \"<0x7E>\",\n        0.0\n      ],\n      [\n        \"<0x7F>\",\n        0.0\n      ],\n      [\n        \"<0x80>\",\n        0.0\n      ],\n      [\n        \"<0x81>\",\n        0.0\n      ],\n      [\n        \"<0x82>\",\n        0.0\n      ],\n      [\n        \"<0x83>\",\n        0.0\n      ],\n      [\n        \"<0x84>\",\n        0.0\n      ],\n      [\n        \"<0x85>\",\n        0.0\n      ],\n      [\n        \"<0x86>\",\n        0.0\n      ],\n      [\n        \"<0x87>\",\n        0.0\n      ],\n      [\n        \"<0x88>\",\n        0.0\n      ],\n      [\n        \"<0x89>\",\n        0.0\n      ],\n      [\n        \"<0x8A>\",\n        0.0\n      ],\n      [\n        \"<0x8B>\",\n        0.0\n      ],\n      [\n        \"<0x8C>\",\n        0.0\n      ],\n      [\n        \"<0x8D>\",\n        0.0\n      ],\n      [\n        \"<0x8E>\",\n        0.0\n      ],\n      [\n        \"<0x8F>\",\n        0.0\n      ],\n      [\n        \"<0x90>\",\n        0.0\n      ],\n      [\n        \"<0x91>\",\n        0.0\n      ],\n      [\n        \"<0x92>\",\n        0.0\n      ],\n      [\n        \"<0x93>\",\n        0.0\n      ],\n      [\n        \"<0x94>\",\n        0.0\n      ],\n      [\n        \"<0x95>\",\n        0.0\n      ],\n      [\n        \"<0x96>\",\n        0.0\n      ],\n      [\n        \"<0x97>\",\n        0.0\n      ],\n      [\n        \"<0x98>\",\n        0.0\n      ],\n      [\n        \"<0x99>\",\n        0.0\n      ],\n      [\n        \"<0x9A>\",\n        0.0\n      ],\n      [\n        \"<0x9B>\",\n        0.0\n      ],\n      [\n        \"<0x9C>\",\n        0.0\n      ],\n      [\n        \"<0x9D>\",\n        0.0\n      ],\n      [\n        \"<0x9E>\",\n        0.0\n      ],\n      [\n        \"<0x9F>\",\n        0.0\n      ],\n      [\n        \"<0xA0>\",\n        0.0\n      ],\n      [\n        \"<0xA1>\",\n        0.0\n      ],\n      [\n        \"<0xA2>\",\n        0.0\n      ],\n      [\n        \"<0xA3>\",\n        0.0\n      ],\n      [\n        \"<0xA4>\",\n        0.0\n      ],\n      [\n        \"<0xA5>\",\n        0.0\n      ],\n      [\n        \"<0xA6>\",\n        0.0\n      ],\n      [\n        \"<0xA7>\",\n        0.0\n      ],\n      [\n        \"<0xA8>\",\n        0.0\n      ],\n      [\n        \"<0xA9>\",\n        0.0\n      ],\n      [\n        \"<0xAA>\",\n        0.0\n      ],\n      [\n        \"<0xAB>\",\n        0.0\n      ],\n      [\n        \"<0xAC>\",\n        0.0\n      ],\n      [\n        \"<0xAD>\",\n        0.0\n      ],\n      [\n        \"<0xAE>\",\n        0.0\n      ],\n      [\n        \"<0xAF>\",\n        0.0\n      ],\n      [\n        \"<0xB0>\",\n        0.0\n      ],\n      [\n        \"<0xB1>\",\n        0.0\n      ],\n      [\n        \"<0xB2>\",\n        0.0\n      ],\n      [\n        \"<0xB3>\",\n        0.0\n      ],\n      [\n        \"<0xB4>\",\n        0.0\n      ],\n      [\n        \"<0xB5>\",\n        0.0\n      ],\n      [\n        \"<0xB6>\",\n        0.0\n      ],\n      [\n        \"<0xB7>\",\n        0.0\n      ],\n      [\n        \"<0xB8>\",\n        0.0\n      ],\n      [\n        \"<0xB9>\",\n        0.0\n      ],\n      [\n        \"<0xBA>\",\n        0.0\n      ],\n      [\n        \"<0xBB>\",\n        0.0\n      ],\n      [\n        \"<0xBC>\",\n        0.0\n      ],\n      [\n        \"<0xBD>\",\n        0.0\n      ],\n      [\n        \"<0xBE>\",\n        0.0\n      ],\n      [\n        \"<0xBF>\",\n        0.0\n      ],\n      [\n        \"<0xC0>\",\n        0.0\n      ],\n      [\n        \"<0xC1>\",\n        0.0\n      ],\n      [\n        \"<0xC2>\",\n        0.0\n      ],\n      [\n        \"<0xC3>\",\n        0.0\n      ],\n      [\n        \"<0xC4>\",\n        0.0\n      ],\n      [\n        \"<0xC5>\",\n        0.0\n      ],\n      [\n        \"<0xC6>\",\n        0.0\n      ],\n      [\n        \"<0xC7>\",\n        0.0\n      ],\n      [\n        \"<0xC8>\",\n        0.0\n      ],\n      [\n        \"<0xC9>\",\n        0.0\n      ],\n      [\n        \"<0xCA>\",\n        0.0\n      ],\n      [\n        \"<0xCB>\",\n        0.0\n      ],\n      [\n        \"<0xCC>\",\n        0.0\n      ],\n      [\n        \"<0xCD>\",\n        0.0\n      ],\n      [\n        \"<0xCE>\",\n        0.0\n      ],\n      [\n        \"<0xCF>\",\n        0.0\n      ],\n      [\n        \"<0xD0>\",\n        0.0\n      ],\n      [\n        \"<0xD1>\",\n        0.0\n      ],\n      [\n        \"<0xD2>\",\n        0.0\n      ],\n      [\n        \"<0xD3>\",\n        0.0\n      ],\n      [\n        \"<0xD4>\",\n        0.0\n      ],\n      [\n        \"<0xD5>\",\n        0.0\n      ],\n      [\n        \"<0xD6>\",\n        0.0\n      ],\n      [\n        \"<0xD7>\",\n        0.0\n      ],\n      [\n        \"<0xD8>\",\n        0.0\n      ],\n      [\n        \"<0xD9>\",\n        0.0\n      ],\n      [\n        \"<0xDA>\",\n        0.0\n      ],\n      [\n        \"<0xDB>\",\n        0.0\n      ],\n      [\n        \"<0xDC>\",\n        0.0\n      ],\n      [\n        \"<0xDD>\",\n        0.0\n      ],\n      [\n        \"<0xDE>\",\n        0.0\n      ],\n      [\n        \"<0xDF>\",\n        0.0\n      ],\n      [\n        \"<0xE0>\",\n        0.0\n      ],\n      [\n        \"<0xE1>\",\n        0.0\n      ],\n      [\n        \"<0xE2>\",\n        0.0\n      ],\n      [\n        \"<0xE3>\",\n        0.0\n      ],\n      [\n        \"<0xE4>\",\n        0.0\n      ],\n      [\n        \"<0xE5>\",\n        0.0\n      ],\n      [\n        \"<0xE6>\",\n        0.0\n      ],\n      [\n        \"<0xE7>\",\n        0.0\n      ],\n      [\n        \"<0xE8>\",\n        0.0\n      ],\n      [\n        \"<0xE9>\",\n        0.0\n      ],\n      [\n        \"<0xEA>\",\n        0.0\n      ],\n      [\n        \"<0xEB>\",\n        0.0\n      ],\n      [\n        \"<0xEC>\",\n        0.0\n      ],\n      [\n        \"<0xED>\",\n        0.0\n      ],\n      [\n        \"<0xEE>\",\n        0.0\n      ],\n      [\n        \"<0xEF>\",\n        0.0\n      ],\n      [\n        \"<0xF0>\",\n        0.0\n      ],\n      [\n        \"<0xF1>\",\n        0.0\n      ],\n      [\n        \"<0xF2>\",\n        0.0\n      ],\n      [\n        \"<0xF3>\",\n        0.0\n      ],\n      [\n        \"<0xF4>\",\n        0.0\n      ],\n      [\n        \"<0xF5>\",\n        0.0\n      ],\n      [\n        \"<0xF6>\",\n        0.0\n      ],\n      [\n        \"<0xF7>\",\n        0.0\n      ],\n      [\n        \"<0xF8>\",\n        0.0\n      ],\n      [\n        \"<0xF9>\",\n        0.0\n      ],\n      [\n        \"<0xFA>\",\n        0.0\n      ],\n      [\n        \"<0xFB>\",\n        0.0\n      ],\n      [\n        \"<0xFC>\",\n        0.0\n      ],\n      [\n        \"<0xFD>\",\n        0.0\n      ],\n      [\n        \"<0xFE>\",\n        0.0\n      ],\n      [\n        \"<0xFF>\",\n        0.0\n      ],\n      [\n        \"▁、\",\n        -3.185030937194824\n      ],\n      [\n        \"▁の\",\n        -3.2029824256896973\n      ],\n      [\n        \"▁。\",\n        -3.5817534923553467\n      ],\n      [\n        \"▁に\",\n        -3.633868455886841\n      ],\n      [\n        \"▁を\",\n        -3.745628833770752\n      ],\n      [\n        \"▁は\",\n        -3.7610254287719727\n      ],\n      [\n        \"▁が\",\n        -3.897291898727417\n      ],\n      [\n        \"▁と\",\n        -4.033213138580322\n      ],\n      [\n        \"▁で\",\n        -4.427040100097656\n      ],\n      [\n        \"▁\",\n        -4.791779518127441\n      ],\n      [\n        \"▁)\",\n        -4.874192237854004\n      ],\n      [\n        \"▁・\",\n        -4.881843566894531\n      ],\n      [\n        \"▁(\",\n        -4.896781921386719\n      ],\n      [\n        \"▁年\",\n        -4.95025634765625\n      ],\n      [\n        \"▁して\",\n        -4.955025672912598\n      ],\n      [\n        \"▁も\",\n        -5.044909477233887\n      ],\n      [\n        \"▁さ\",\n        -5.176407814025879\n      ],\n      [\n        \"▁ます\",\n        -5.243093490600586\n      ],\n      [\n        \"▁する\",\n        -5.2626142501831055\n      ],\n      [\n        \"▁」\",\n        -5.267913818359375\n      ],\n      [\n        \"▁.\",\n        -5.334061622619629\n      ],\n      [\n        \"▁いる\",\n        -5.342490196228027\n      ],\n      [\n        \"▁こと\",\n        -5.368137359619141\n      ],\n      [\n        \"▁「\",\n        -5.388580322265625\n      ],\n      [\n        \"▁から\",\n        -5.4519805908203125\n      ],\n      [\n        \"▁し\",\n        -5.5356764793396\n      ],\n      [\n        \"▁した\",\n        -5.545491695404053\n      ],\n      [\n        \"▁月\",\n        -5.656735897064209\n      ],\n      [\n        \"▁ない\",\n        -5.707946300506592\n      ],\n      [\n        \"▁日\",\n        -5.803732395172119\n      ],\n      [\n        \"▁-\",\n        -5.826613426208496\n      ],\n      [\n        \"▁や\",\n        -5.882406711578369\n      ],\n      [\n        \"▁1\",\n        -5.980495452880859\n      ],\n      [\n        \"▁か\",\n        -5.986592769622803\n      ],\n      [\n        \"▁お\",\n        -6.049342155456543\n      ],\n      [\n        \"▁2\",\n        -6.051003932952881\n      ],\n      [\n        \"▁れた\",\n        -6.099290370941162\n      ],\n      [\n        \"▁人\",\n        -6.139554023742676\n      ],\n      [\n        \"▁れて\",\n        -6.168556213378906\n      ],\n      [\n        \"▁ある\",\n        -6.182873725891113\n      ],\n      [\n        \"▁いう\",\n        -6.194264888763428\n      ],\n      [\n        \"▁です\",\n        -6.201696872711182\n      ],\n      [\n        \"▁い\",\n        -6.223683834075928\n      ],\n      [\n        \"▁など\",\n        -6.248092174530029\n      ],\n      [\n        \"▁3\",\n        -6.307755470275879\n      ],\n      [\n        \"▁/\",\n        -6.327886581420898\n      ],\n      [\n        \"▁ました\",\n        -6.354998588562012\n      ],\n      [\n        \"▁!\",\n        -6.364776611328125\n      ],\n      [\n        \"▁である\",\n        -6.368945121765137\n      ],\n      [\n        \"▁いた\",\n        -6.440469264984131\n      ],\n      [\n        \"▁ため\",\n        -6.459425926208496\n      ],\n      [\n        \"▁れる\",\n        -6.460089683532715\n      ],\n      [\n        \"▁県\",\n        -6.517663478851318\n      ],\n      [\n        \"▁:\",\n        -6.520739555358887\n      ],\n      [\n        \"▁者\",\n        -6.531866550445557\n      ],\n      [\n        \"▁』\",\n        -6.5432000160217285\n      ],\n      [\n        \"▁あり\",\n        -6.550680160522461\n      ],\n      [\n        \"▁,\",\n        -6.567007541656494\n      ],\n      [\n        \"▁ので\",\n        -6.5858893394470215\n      ],\n      [\n        \"▁もの\",\n        -6.5932536125183105\n      ],\n      [\n        \"▁4\",\n        -6.599757194519043\n      ],\n      [\n        \"▁より\",\n        -6.6409125328063965\n      ],\n      [\n        \"▁れ\",\n        -6.657708168029785\n      ],\n      [\n        \"▁まで\",\n        -6.667444229125977\n      ],\n      [\n        \"▁市\",\n        -6.667632102966309\n      ],\n      [\n        \"▁中\",\n        -6.680952548980713\n      ],\n      [\n        \"▁日本\",\n        -6.688035488128662\n      ],\n      [\n        \"▁『\",\n        -6.691053867340088\n      ],\n      [\n        \"▁なる\",\n        -6.7163262367248535\n      ],\n      [\n        \"▁へ\",\n        -6.766645908355713\n      ],\n      [\n        \"▁5\",\n        -6.794265270233154\n      ],\n      [\n        \"▁一\",\n        -6.857036113739014\n      ],\n      [\n        \"▁その\",\n        -6.857986927032471\n      ],\n      [\n        \"▁　\",\n        -6.861833095550537\n      ],\n      [\n        \"▁なり\",\n        -6.909881114959717\n      ],\n      [\n        \"▁なって\",\n        -6.926736831665039\n      ],\n      [\n        \"▁ん\",\n        -6.926886558532715\n      ],\n      [\n        \"▁方\",\n        -6.92744255065918\n      ],\n      [\n        \"▁ご\",\n        -6.941175937652588\n      ],\n      [\n        \"▁な\",\n        -6.952221393585205\n      ],\n      [\n        \"▁この\",\n        -6.977395534515381\n      ],\n      [\n        \"▁ませ\",\n        -6.995728969573975\n      ],\n      [\n        \"▁ように\",\n        -7.003463268280029\n      ],\n      [\n        \"▁10\",\n        -7.00608491897583\n      ],\n      [\n        \"▁なった\",\n        -7.023584365844727\n      ],\n      [\n        \"▁時\",\n        -7.028842926025391\n      ],\n      [\n        \"▁第\",\n        -7.030608654022217\n      ],\n      [\n        \"▁後\",\n        -7.041182518005371\n      ],\n      [\n        \"▁6\",\n        -7.0504937171936035\n      ],\n      [\n        \"▁場合\",\n        -7.076604843139648\n      ],\n      [\n        \"▁おり\",\n        -7.087188720703125\n      ],\n      [\n        \"▁でも\",\n        -7.100583553314209\n      ],\n      [\n        \"な\",\n        -7.121886253356934\n      ],\n      [\n        \"▁?\",\n        -7.152363300323486\n      ],\n      [\n        \"▁7\",\n        -7.156400203704834\n      ],\n      [\n        \"▁つ\",\n        -7.158433437347412\n      ],\n      [\n        \"▁内\",\n        -7.159237861633301\n      ],\n      [\n        \"▁\\\"\",\n        -7.162384510040283\n      ],\n      [\n        \"て\",\n        -7.16347599029541\n      ],\n      [\n        \"▁でき\",\n        -7.169011116027832\n      ],\n      [\n        \"▁できる\",\n        -7.174111366271973\n      ],\n      [\n        \"この\",\n        -7.185379505157471\n      ],\n      [\n        \"▁ついて\",\n        -7.185727596282959\n      ],\n      [\n        \"▁大\",\n        -7.195167541503906\n      ],\n      [\n        \"▁8\",\n        -7.2087321281433105\n      ],\n      [\n        \"また\",\n        -7.210239410400391\n      ],\n      [\n        \"▁だ\",\n        -7.216036319732666\n      ],\n      [\n        \"▁性\",\n        -7.23112154006958\n      ],\n      [\n        \"る\",\n        -7.240654945373535\n      ],\n      [\n        \"に\",\n        -7.24181604385376\n      ],\n      [\n        \"▁たい\",\n        -7.255130767822266\n      ],\n      [\n        \"▁なく\",\n        -7.271181106567383\n      ],\n      [\n        \"▁的な\",\n        -7.301826000213623\n      ],\n      [\n        \"▁的に\",\n        -7.312690734863281\n      ],\n      [\n        \"▁情報\",\n        -7.313773155212402\n      ],\n      [\n        \"▁9\",\n        -7.327561855316162\n      ],\n      [\n        \"▁;\",\n        -7.330902099609375\n      ],\n      [\n        \"▁町\",\n        -7.3352251052856445\n      ],\n      [\n        \"▁だけ\",\n        -7.3486175537109375\n      ],\n      [\n        \"▁|\",\n        -7.362304210662842\n      ],\n      [\n        \"▁上\",\n        -7.3633012771606445\n      ],\n      [\n        \"▁目\",\n        -7.366700172424316\n      ],\n      [\n        \"▁ね\",\n        -7.374264717102051\n      ],\n      [\n        \"▁12\",\n        -7.377789497375488\n      ],\n      [\n        \"▁ず\",\n        -7.382078170776367\n      ],\n      [\n        \"「\",\n        -7.387681007385254\n      ],\n      [\n        \"▁&\",\n        -7.394844055175781\n      ],\n      [\n        \"▁よる\",\n        -7.414653301239014\n      ],\n      [\n        \"▁ください\",\n        -7.417072772979736\n      ],\n      [\n        \"▁家\",\n        -7.417440891265869\n      ],\n      [\n        \"▁それ\",\n        -7.418474197387695\n      ],\n      [\n        \"▁思い\",\n        -7.429837703704834\n      ],\n      [\n        \"▁前\",\n        -7.433615684509277\n      ],\n      [\n        \"▁これ\",\n        -7.437440872192383\n      ],\n      [\n        \"▁11\",\n        -7.458650588989258\n      ],\n      [\n        \"▁さん\",\n        -7.4597954750061035\n      ],\n      [\n        \"▁国\",\n        -7.46527099609375\n      ],\n      [\n        \"▁利用\",\n        -7.469320297241211\n      ],\n      [\n        \"▁時間\",\n        -7.4718732833862305\n      ],\n      [\n        \"▁t\",\n        -7.479592800140381\n      ],\n      [\n        \"り\",\n        -7.480184078216553\n      ],\n      [\n        \"ら\",\n        -7.484375476837158\n      ],\n      [\n        \"▁会\",\n        -7.488077640533447\n      ],\n      [\n        \"▁よって\",\n        -7.489053726196289\n      ],\n      [\n        \"▁本\",\n        -7.491520404815674\n      ],\n      [\n        \"▁】\",\n        -7.4928669929504395\n      ],\n      [\n        \"た\",\n        -7.512076377868652\n      ],\n      [\n        \"▁回\",\n        -7.522967338562012\n      ],\n      [\n        \"▁化\",\n        -7.5234293937683105\n      ],\n      [\n        \"ス\",\n        -7.5245537757873535\n      ],\n      [\n        \"▁ら\",\n        -7.5381574630737305\n      ],\n      [\n        \"▁円\",\n        -7.560770034790039\n      ],\n      [\n        \"▁大学\",\n        -7.561233997344971\n      ],\n      [\n        \"▁自分\",\n        -7.578431129455566\n      ],\n      [\n        \"▁なかった\",\n        -7.592169284820557\n      ],\n      [\n        \"▁等\",\n        -7.616418838500977\n      ],\n      [\n        \"▁たち\",\n        -7.617324352264404\n      ],\n      [\n        \"▁名\",\n        -7.6242475509643555\n      ],\n      [\n        \"の\",\n        -7.626774787902832\n      ],\n      [\n        \"▁なら\",\n        -7.63295841217041\n      ],\n      [\n        \"▁使用\",\n        -7.637490749359131\n      ],\n      [\n        \"▁所\",\n        -7.637675762176514\n      ],\n      [\n        \"▁よ\",\n        -7.660862922668457\n      ],\n      [\n        \"▁会社\",\n        -7.661202430725098\n      ],\n      [\n        \"▁同\",\n        -7.665493011474609\n      ],\n      [\n        \"▁私\",\n        -7.669919490814209\n      ],\n      [\n        \"▁世界\",\n        -7.67061710357666\n      ],\n      [\n        \"万\",\n        -7.679087162017822\n      ],\n      [\n        \"▁店\",\n        -7.680029392242432\n      ],\n      [\n        \"▁のです\",\n        -7.680973052978516\n      ],\n      [\n        \"▁ような\",\n        -7.685946941375732\n      ],\n      [\n        \"▁事\",\n        -7.697939395904541\n      ],\n      [\n        \"▁だった\",\n        -7.698142051696777\n      ],\n      [\n        \"これ\",\n        -7.700052261352539\n      ],\n      [\n        \"▁多く\",\n        -7.701132774353027\n      ],\n      [\n        \"▁数\",\n        -7.709089279174805\n      ],\n      [\n        \"▁駅\",\n        -7.71061897277832\n      ],\n      [\n        \"▁研究\",\n        -7.712349891662598\n      ],\n      [\n        \"▁サイト\",\n        -7.738548755645752\n      ],\n      [\n        \"▁東京\",\n        -7.741631984710693\n      ],\n      [\n        \"▁%\",\n        -7.75072717666626\n      ],\n      [\n        \"▁られる\",\n        -7.756758213043213\n      ],\n      [\n        \"その\",\n        -7.782837867736816\n      ],\n      [\n        \"▁代\",\n        -7.78517484664917\n      ],\n      [\n        \"▁語\",\n        -7.792673587799072\n      ],\n      [\n        \"▁分\",\n        -7.805175304412842\n      ],\n      [\n        \"▁二\",\n        -7.809190273284912\n      ],\n      [\n        \"で\",\n        -7.809691429138184\n      ],\n      [\n        \"▁的\",\n        -7.810966491699219\n      ],\n      [\n        \"▁...\",\n        -7.824028968811035\n      ],\n      [\n        \"▁時代\",\n        -7.827169418334961\n      ],\n      [\n        \"▁A\",\n        -7.831678867340088\n      ],\n      [\n        \"▁線\",\n        -7.833589553833008\n      ],\n      [\n        \"▁間\",\n        -7.846977233886719\n      ],\n      [\n        \"ズ\",\n        -7.847821235656738\n      ],\n      [\n        \"ト\",\n        -7.851916790008545\n      ],\n      [\n        \"い\",\n        -7.853623867034912\n      ],\n      [\n        \"▁20\",\n        -7.855557441711426\n      ],\n      [\n        \"▁部\",\n        -7.858024597167969\n      ],\n      [\n        \"▁問題\",\n        -7.858707427978516\n      ],\n      [\n        \"▁いい\",\n        -7.8588409423828125\n      ],\n      [\n        \"▁金\",\n        -7.859185695648193\n      ],\n      [\n        \"▁【\",\n        -7.861090660095215\n      ],\n      [\n        \"▁であり\",\n        -7.865991115570068\n      ],\n      [\n        \"▁あった\",\n        -7.8663649559021\n      ],\n      [\n        \"▁おいて\",\n        -7.875364780426025\n      ],\n      [\n        \"▁区\",\n        -7.879593849182129\n      ],\n      [\n        \"▁B\",\n        -7.88090705871582\n      ],\n      [\n        \"さ\",\n        -7.881806373596191\n      ],\n      [\n        \"▁0\",\n        -7.888063907623291\n      ],\n      [\n        \"▁C\",\n        -7.89302396774292\n      ],\n      [\n        \"って\",\n        -7.894173622131348\n      ],\n      [\n        \"▁であった\",\n        -7.897000789642334\n      ],\n      [\n        \"s\",\n        -7.9036865234375\n      ],\n      [\n        \"▁S\",\n        -7.9049973487854\n      ],\n      [\n        \"▁作品\",\n        -7.906022548675537\n      ],\n      [\n        \"▁他\",\n        -7.906961441040039\n      ],\n      [\n        \"しかし\",\n        -7.907767295837402\n      ],\n      [\n        \"▁見\",\n        -7.912409782409668\n      ],\n      [\n        \"▁以上\",\n        -7.91801643371582\n      ],\n      [\n        \"▁新\",\n        -7.926347732543945\n      ],\n      [\n        \"子\",\n        -7.927391052246094\n      ],\n      [\n        \"▁カナダ\",\n        -7.93876314163208\n      ],\n      [\n        \"▁モンクレール\",\n        -7.948892116546631\n      ],\n      [\n        \"▁15\",\n        -7.950605392456055\n      ],\n      [\n        \"▁ながら\",\n        -7.956249237060547\n      ],\n      [\n        \"▁戦\",\n        -7.961787223815918\n      ],\n      [\n        \"▁30\",\n        -7.962786674499512\n      ],\n      [\n        \"▁られ\",\n        -7.974327564239502\n      ],\n      [\n        \"▁]\",\n        -7.978815078735352\n      ],\n      [\n        \"▁様\",\n        -7.978870868682861\n      ],\n      [\n        \"▁気\",\n        -7.979624271392822\n      ],\n      [\n        \"▁いく\",\n        -7.984396934509277\n      ],\n      [\n        \"し\",\n        -7.99149751663208\n      ],\n      [\n        \"▁長\",\n        -7.996387481689453\n      ],\n      [\n        \"▁活動\",\n        -7.997335910797119\n      ],\n      [\n        \"▁社\",\n        -8.00036334991455\n      ],\n      [\n        \"▁現在\",\n        -8.002766609191895\n      ],\n      [\n        \"▁度\",\n        -8.005853652954102\n      ],\n      [\n        \"▁行わ\",\n        -8.006837844848633\n      ],\n      [\n        \"▁放送\",\n        -8.007451057434082\n      ],\n      [\n        \"▁地\",\n        -8.017082214355469\n      ],\n      [\n        \"▁グース\",\n        -8.020332336425781\n      ],\n      [\n        \"▁_\",\n        -8.02074909210205\n      ],\n      [\n        \"▁サービス\",\n        -8.02198600769043\n      ],\n      [\n        \"▁F\",\n        -8.023130416870117\n      ],\n      [\n        \"▁多い\",\n        -8.024787902832031\n      ],\n      [\n        \"▁用\",\n        -8.026814460754395\n      ],\n      [\n        \"▁軍\",\n        -8.03275203704834\n      ],\n      [\n        \"▁られて\",\n        -8.034721374511719\n      ],\n      [\n        \"▁力\",\n        -8.041336059570312\n      ],\n      [\n        \"▁18\",\n        -8.04395580291748\n      ],\n      [\n        \"ン\",\n        -8.046232223510742\n      ],\n      [\n        \"▁下\",\n        -8.046765327453613\n      ],\n      [\n        \"と\",\n        -8.048293113708496\n      ],\n      [\n        \"▁g\",\n        -8.049100875854492\n      ],\n      [\n        \"▁高\",\n        -8.053685188293457\n      ],\n      [\n        \"▁号\",\n        -8.055312156677246\n      ],\n      [\n        \"▁館\",\n        -8.059028625488281\n      ],\n      [\n        \"▁歳\",\n        -8.061066627502441\n      ],\n      [\n        \"▁系\",\n        -8.065824508666992\n      ],\n      [\n        \"▁方法\",\n        -8.066828727722168\n      ],\n      [\n        \"▁み\",\n        -8.066844940185547\n      ],\n      [\n        \"▁三\",\n        -8.070152282714844\n      ],\n      [\n        \"▁られた\",\n        -8.070478439331055\n      ],\n      [\n        \"▁とき\",\n        -8.078651428222656\n      ],\n      [\n        \"▁ところ\",\n        -8.0809907913208\n      ],\n      [\n        \"▁今\",\n        -8.083009719848633\n      ],\n      [\n        \"▁関係\",\n        -8.085482597351074\n      ],\n      [\n        \"▁紹介\",\n        -8.088937759399414\n      ],\n      [\n        \"▁話\",\n        -8.091839790344238\n      ],\n      [\n        \"▁手\",\n        -8.094573974609375\n      ],\n      [\n        \"▁機\",\n        -8.09585189819336\n      ],\n      [\n        \"▁点\",\n        -8.10093879699707\n      ],\n      [\n        \"田\",\n        -8.109061241149902\n      ],\n      [\n        \"(\",\n        -8.109119415283203\n      ],\n      [\n        \"▁版\",\n        -8.111604690551758\n      ],\n      [\n        \"く\",\n        -8.116199493408203\n      ],\n      [\n        \"▁法\",\n        -8.117684364318848\n      ],\n      [\n        \"▁車\",\n        -8.124707221984863\n      ],\n      [\n        \"▁=\",\n        -8.126644134521484\n      ],\n      [\n        \"▁17\",\n        -8.126801490783691\n      ],\n      [\n        \"▁でしょう\",\n        -8.127066612243652\n      ],\n      [\n        \"▁映画\",\n        -8.12856674194336\n      ],\n      [\n        \"▁位\",\n        -8.130151748657227\n      ],\n      [\n        \"▁16\",\n        -8.134845733642578\n      ],\n      [\n        \"ク\",\n        -8.13585090637207\n      ],\n      [\n        \"▁何\",\n        -8.136556625366211\n      ],\n      [\n        \"▁約\",\n        -8.13766860961914\n      ],\n      [\n        \"ド\",\n        -8.145572662353516\n      ],\n      [\n        \"▁女性\",\n        -8.146269798278809\n      ],\n      [\n        \"お\",\n        -8.149218559265137\n      ],\n      [\n        \"▁客\",\n        -8.154172897338867\n      ],\n      [\n        \"▁D\",\n        -8.159314155578613\n      ],\n      [\n        \"ー\",\n        -8.161267280578613\n      ],\n      [\n        \"▁選手\",\n        -8.161751747131348\n      ],\n      [\n        \"▁参加\",\n        -8.163887023925781\n      ],\n      [\n        \"▁存在\",\n        -8.164865493774414\n      ],\n      [\n        \"▁地域\",\n        -8.169321060180664\n      ],\n      [\n        \"▁彼\",\n        -8.170626640319824\n      ],\n      [\n        \"▁学校\",\n        -8.177874565124512\n      ],\n      [\n        \"▁せて\",\n        -8.178025245666504\n      ],\n      [\n        \"▁T\",\n        -8.178367614746094\n      ],\n      [\n        \"▁商品\",\n        -8.184220314025879\n      ],\n      [\n        \"▁M\",\n        -8.187353134155273\n      ],\n      [\n        \"▁きた\",\n        -8.190163612365723\n      ],\n      [\n        \"▁側\",\n        -8.191133499145508\n      ],\n      [\n        \"▁けど\",\n        -8.192169189453125\n      ],\n      [\n        \"▁l\",\n        -8.193598747253418\n      ],\n      [\n        \"った\",\n        -8.19489574432373\n      ],\n      [\n        \"▁せ\",\n        -8.195064544677734\n      ],\n      [\n        \"▁開催\",\n        -8.198210716247559\n      ],\n      [\n        \"▁”\",\n        -8.199389457702637\n      ],\n      [\n        \"▁m\",\n        -8.205683708190918\n      ],\n      [\n        \"▁必要\",\n        -8.206023216247559\n      ],\n      [\n        \"▁って\",\n        -8.21193790435791\n      ],\n      [\n        \"▁開発\",\n        -8.21272087097168\n      ],\n      [\n        \"▁可能\",\n        -8.214848518371582\n      ],\n      [\n        \"▁しまう\",\n        -8.216564178466797\n      ],\n      [\n        \"▁体\",\n        -8.220537185668945\n      ],\n      [\n        \"2\",\n        -8.220589637756348\n      ],\n      [\n        \"▁元\",\n        -8.223487854003906\n      ],\n      [\n        \"▁初\",\n        -8.223544120788574\n      ],\n      [\n        \"▁ゲーム\",\n        -8.230451583862305\n      ],\n      [\n        \"▁仕事\",\n        -8.23257827758789\n      ],\n      [\n        \"▁型\",\n        -8.235507011413574\n      ],\n      [\n        \"▁る\",\n        -8.237688064575195\n      ],\n      [\n        \"▁でした\",\n        -8.23890495300293\n      ],\n      [\n        \"▁13\",\n        -8.23920726776123\n      ],\n      [\n        \"▁および\",\n        -8.239863395690918\n      ],\n      [\n        \"▁また\",\n        -8.23989486694336\n      ],\n      [\n        \"▁s\",\n        -8.24000358581543\n      ],\n      [\n        \"▁水\",\n        -8.241935729980469\n      ],\n      [\n        \"▁小\",\n        -8.242103576660156\n      ],\n      [\n        \"▁考え\",\n        -8.243915557861328\n      ],\n      [\n        \"▁かも\",\n        -8.244084358215332\n      ],\n      [\n        \"本\",\n        -8.244566917419434\n      ],\n      [\n        \"▁際\",\n        -8.244651794433594\n      ],\n      [\n        \"▁全\",\n        -8.24739933013916\n      ],\n      [\n        \"ナ\",\n        -8.249013900756836\n      ],\n      [\n        \"ラ\",\n        -8.25264835357666\n      ],\n      [\n        \"▁んです\",\n        -8.257701873779297\n      ],\n      [\n        \"▁対応\",\n        -8.25841999053955\n      ],\n      [\n        \"▁販売\",\n        -8.259342193603516\n      ],\n      [\n        \"▁14\",\n        -8.259986877441406\n      ],\n      [\n        \"き\",\n        -8.2608642578125\n      ],\n      [\n        \"▁事業\",\n        -8.262687683105469\n      ],\n      [\n        \"1\",\n        -8.264510154724121\n      ],\n      [\n        \"▁郡\",\n        -8.266626358032227\n      ],\n      [\n        \"『\",\n        -8.27314567565918\n      ],\n      [\n        \"それ\",\n        -8.275477409362793\n      ],\n      [\n        \"▁社会\",\n        -8.277527809143066\n      ],\n      [\n        \"▁以下\",\n        -8.28046703338623\n      ],\n      [\n        \"山\",\n        -8.280874252319336\n      ],\n      [\n        \"▁学\",\n        -8.2835111618042\n      ],\n      [\n        \"▁昭和\",\n        -8.284724235534668\n      ],\n      [\n        \"▁生\",\n        -8.288949012756348\n      ],\n      [\n        \"▁良い\",\n        -8.292240142822266\n      ],\n      [\n        \"▁東\",\n        -8.293798446655273\n      ],\n      [\n        \"▁発表\",\n        -8.302440643310547\n      ],\n      [\n        \"▁無料\",\n        -8.311860084533691\n      ],\n      [\n        \"▁提供\",\n        -8.313860893249512\n      ],\n      [\n        \"▁P\",\n        -8.313971519470215\n      ],\n      [\n        \"▁アウトレット\",\n        -8.31779956817627\n      ],\n      [\n        \"▁行って\",\n        -8.321037292480469\n      ],\n      [\n        \"▁のみ\",\n        -8.321063995361328\n      ],\n      [\n        \"▁生活\",\n        -8.324690818786621\n      ],\n      [\n        \"▁州\",\n        -8.324767112731934\n      ],\n      [\n        \"ア\",\n        -8.326135635375977\n      ],\n      [\n        \"▁確認\",\n        -8.32917594909668\n      ],\n      [\n        \"▁内容\",\n        -8.329683303833008\n      ],\n      [\n        \"リ\",\n        -8.33302116394043\n      ],\n      [\n        \"▁権\",\n        -8.34040355682373\n      ],\n      [\n        \"▁思って\",\n        -8.342873573303223\n      ],\n      [\n        \"▁形\",\n        -8.349960327148438\n      ],\n      [\n        \"▁物\",\n        -8.351666450500488\n      ],\n      [\n        \"▁結果\",\n        -8.358297348022461\n      ],\n      [\n        \"▁同じ\",\n        -8.360219955444336\n      ],\n      [\n        \"ル\",\n        -8.367971420288086\n      ],\n      [\n        \"タ\",\n        -8.375411987304688\n      ],\n      [\n        \"▁どう\",\n        -8.37544059753418\n      ],\n      [\n        \"▁企業\",\n        -8.37961483001709\n      ],\n      [\n        \"川\",\n        -8.381178855895996\n      ],\n      [\n        \"か\",\n        -8.386651992797852\n      ],\n      [\n        \"ま\",\n        -8.386672019958496\n      ],\n      [\n        \"▁ほど\",\n        -8.388315200805664\n      ],\n      [\n        \"▁教育\",\n        -8.388477325439453\n      ],\n      [\n        \"▁大阪\",\n        -8.395724296569824\n      ],\n      [\n        \"▁アメリカ\",\n        -8.39719009399414\n      ],\n      [\n        \"▁おける\",\n        -8.400397300720215\n      ],\n      [\n        \"マ\",\n        -8.400676727294922\n      ],\n      [\n        \"人\",\n        -8.400848388671875\n      ],\n      [\n        \"▁代表\",\n        -8.401676177978516\n      ],\n      [\n        \"▁R\",\n        -8.402485847473145\n      ],\n      [\n        \"▁村\",\n        -8.403013229370117\n      ],\n      [\n        \"▁発売\",\n        -8.403596878051758\n      ],\n      [\n        \"▁書\",\n        -8.40537166595459\n      ],\n      [\n        \"▁西\",\n        -8.40694808959961\n      ],\n      [\n        \"▁き\",\n        -8.413152694702148\n      ],\n      [\n        \"▁テレビ\",\n        -8.413516998291016\n      ],\n      [\n        \"▁購入\",\n        -8.414671897888184\n      ],\n      [\n        \"▁21\",\n        -8.415777206420898\n      ],\n      [\n        \"コ\",\n        -8.416510581970215\n      ],\n      [\n        \"▁H\",\n        -8.419289588928223\n      ],\n      [\n        \"ム\",\n        -8.42374038696289\n      ],\n      [\n        \"▁場\",\n        -8.424023628234863\n      ],\n      [\n        \"▁せる\",\n        -8.425074577331543\n      ],\n      [\n        \"▁曲\",\n        -8.427006721496582\n      ],\n      [\n        \"▁ア\",\n        -8.429001808166504\n      ],\n      [\n        \"▁機能\",\n        -8.430390357971191\n      ],\n      [\n        \"一\",\n        -8.431514739990234\n      ],\n      [\n        \"▁高い\",\n        -8.435147285461426\n      ],\n      [\n        \"▁にて\",\n        -8.435932159423828\n      ],\n      [\n        \"わ\",\n        -8.43838119506836\n      ],\n      [\n        \"み\",\n        -8.439143180847168\n      ],\n      [\n        \"▁行う\",\n        -8.444581985473633\n      ],\n      [\n        \"す\",\n        -8.445134162902832\n      ],\n      [\n        \"▁いった\",\n        -8.449736595153809\n      ],\n      [\n        \"▁開始\",\n        -8.452500343322754\n      ],\n      [\n        \"▁氏\",\n        -8.452964782714844\n      ],\n      [\n        \"▁中心\",\n        -8.45935344696045\n      ],\n      [\n        \"▁変更\",\n        -8.459563255310059\n      ],\n      [\n        \"▁式\",\n        -8.459782600402832\n      ],\n      [\n        \"▁いて\",\n        -8.46031665802002\n      ],\n      [\n        \"▁写真\",\n        -8.461480140686035\n      ],\n      [\n        \"▁チーム\",\n        -8.461644172668457\n      ],\n      [\n        \"▁19\",\n        -8.463264465332031\n      ],\n      [\n        \"▁#\",\n        -8.463314056396484\n      ],\n      [\n        \"▁呼ば\",\n        -8.463386535644531\n      ],\n      [\n        \"▁品\",\n        -8.464287757873535\n      ],\n      [\n        \",\",\n        -8.465691566467285\n      ],\n      [\n        \"▁状態\",\n        -8.466142654418945\n      ],\n      [\n        \"▁店舗\",\n        -8.466987609863281\n      ],\n      [\n        \"▁25\",\n        -8.469518661499023\n      ],\n      [\n        \"カ\",\n        -8.46973991394043\n      ],\n      [\n        \"▁山\",\n        -8.469773292541504\n      ],\n      [\n        \"日本\",\n        -8.470269203186035\n      ],\n      [\n        \"▁管理\",\n        -8.475274085998535\n      ],\n      [\n        \"▁次\",\n        -8.477337837219238\n      ],\n      [\n        \"▁番組\",\n        -8.479393005371094\n      ],\n      [\n        \"▁思う\",\n        -8.481513977050781\n      ],\n      [\n        \"ロ\",\n        -8.482720375061035\n      ],\n      [\n        \"▁G\",\n        -8.483154296875\n      ],\n      [\n        \"▁作\",\n        -8.48570728302002\n      ],\n      [\n        \"▁影響\",\n        -8.489986419677734\n      ],\n      [\n        \"▁外\",\n        -8.49377727508545\n      ],\n      [\n        \"▁音楽\",\n        -8.496183395385742\n      ],\n      [\n        \"▁技術\",\n        -8.49731159210205\n      ],\n      [\n        \"▁E\",\n        -8.4986572265625\n      ],\n      [\n        \"▁関する\",\n        -8.501255989074707\n      ],\n      [\n        \"▁システム\",\n        -8.50229549407959\n      ],\n      [\n        \"▁平成\",\n        -8.503218650817871\n      ],\n      [\n        \"▁先\",\n        -8.50346565246582\n      ],\n      [\n        \"▁〜\",\n        -8.504495620727539\n      ],\n      [\n        \"▁シリーズ\",\n        -8.505021095275879\n      ],\n      [\n        \"▁場所\",\n        -8.507312774658203\n      ],\n      [\n        \"▁人気\",\n        -8.507386207580566\n      ],\n      [\n        \"▁個人\",\n        -8.507560729980469\n      ],\n      [\n        \"▁よく\",\n        -8.507830619812012\n      ],\n      [\n        \"▁2021\",\n        -8.510065078735352\n      ],\n      [\n        \"▁100\",\n        -8.511175155639648\n      ],\n      [\n        \"▁～\",\n        -8.515472412109375\n      ],\n      [\n        \"▁北\",\n        -8.515846252441406\n      ],\n      [\n        \"▁24\",\n        -8.517126083374023\n      ],\n      [\n        \"▁しれ\",\n        -8.521648406982422\n      ],\n      [\n        \"▁K\",\n        -8.522716522216797\n      ],\n      [\n        \"▁一部\",\n        -8.524723052978516\n      ],\n      [\n        \"ノ\",\n        -8.52752685546875\n      ],\n      [\n        \"▁見て\",\n        -8.53071403503418\n      ],\n      [\n        \"▁表示\",\n        -8.532846450805664\n      ],\n      [\n        \"大\",\n        -8.535872459411621\n      ],\n      [\n        \"▁科\",\n        -8.537628173828125\n      ],\n      [\n        \"▁対して\",\n        -8.5388822555542\n      ],\n      [\n        \"▁南\",\n        -8.540435791015625\n      ],\n      [\n        \"▁登録\",\n        -8.540699005126953\n      ],\n      [\n        \"▁感じ\",\n        -8.541309356689453\n      ],\n      [\n        \"▁知ら\",\n        -8.544553756713867\n      ],\n      [\n        \"▁意味\",\n        -8.546213150024414\n      ],\n      [\n        \"バ\",\n        -8.547356605529785\n      ],\n      [\n        \"▁[\",\n        -8.54958724975586\n      ],\n      [\n        \"▁効果\",\n        -8.551225662231445\n      ],\n      [\n        \"▁22\",\n        -8.552604675292969\n      ],\n      [\n        \"▁環境\",\n        -8.554305076599121\n      ],\n      [\n        \"▁各\",\n        -8.555606842041016\n      ],\n      [\n        \"▁子\",\n        -8.558232307434082\n      ],\n      [\n        \"▁タイヤ\",\n        -8.558975219726562\n      ],\n      [\n        \"▁一般\",\n        -8.56052017211914\n      ],\n      [\n        \"だ\",\n        -8.563687324523926\n      ],\n      [\n        \"フ\",\n        -8.566330909729004\n      ],\n      [\n        \"▁試験\",\n        -8.567835807800293\n      ],\n      [\n        \"▁2020\",\n        -8.568076133728027\n      ],\n      [\n        \"▁言わ\",\n        -8.569377899169922\n      ],\n      [\n        \"【\",\n        -8.57307243347168\n      ],\n      [\n        \"▁登場\",\n        -8.57370376586914\n      ],\n      [\n        \"▁調査\",\n        -8.57463550567627\n      ],\n      [\n        \"▁以降\",\n        -8.577279090881348\n      ],\n      [\n        \"▁記事\",\n        -8.578113555908203\n      ],\n      [\n        \"▁自身\",\n        -8.57868766784668\n      ],\n      [\n        \"▁当時\",\n        -8.57959270477295\n      ],\n      [\n        \"▁大会\",\n        -8.583451271057129\n      ],\n      [\n        \"▁局\",\n        -8.584240913391113\n      ],\n      [\n        \"▁または\",\n        -8.590699195861816\n      ],\n      [\n        \"その後\",\n        -8.592182159423828\n      ],\n      [\n        \"そして\",\n        -8.594971656799316\n      ],\n      [\n        \"チ\",\n        -8.595514297485352\n      ],\n      [\n        \"▁いただき\",\n        -8.595699310302734\n      ],\n      [\n        \"▁心\",\n        -8.595803260803223\n      ],\n      [\n        \"リー\",\n        -8.59677505493164\n      ],\n      [\n        \"～\",\n        -8.597053527832031\n      ],\n      [\n        \"▁国際\",\n        -8.599427223205566\n      ],\n      [\n        \"私\",\n        -8.599593162536621\n      ],\n      [\n        \"▁23\",\n        -8.600883483886719\n      ],\n      [\n        \"▁記録\",\n        -8.601479530334473\n      ],\n      [\n        \"▁カード\",\n        -8.60237979888916\n      ],\n      [\n        \"▁賞\",\n        -8.603029251098633\n      ],\n      [\n        \"同\",\n        -8.604026794433594\n      ],\n      [\n        \"▁うち\",\n        -8.60482120513916\n      ],\n      [\n        \"▁出身\",\n        -8.608070373535156\n      ],\n      [\n        \"▁委員\",\n        -8.61119556427002\n      ],\n      [\n        \"▁通り\",\n        -8.61267375946045\n      ],\n      [\n        \"▁センター\",\n        -8.61279010772705\n      ],\n      [\n        \"▁持って\",\n        -8.616338729858398\n      ],\n      [\n        \"▁ともに\",\n        -8.617701530456543\n      ],\n      [\n        \"▁ダウン\",\n        -8.617997169494629\n      ],\n      [\n        \"▁道\",\n        -8.618237495422363\n      ],\n      [\n        \"なお\",\n        -8.621746063232422\n      ],\n      [\n        \"▁設定\",\n        -8.622075080871582\n      ],\n      [\n        \"▁なければ\",\n        -8.622992515563965\n      ],\n      [\n        \"▁都\",\n        -8.623297691345215\n      ],\n      [\n        \"▁文化\",\n        -8.624309539794922\n      ],\n      [\n        \"キ\",\n        -8.625223159790039\n      ],\n      [\n        \"▁ましょう\",\n        -8.627578735351562\n      ],\n      [\n        \"▁中国\",\n        -8.633169174194336\n      ],\n      [\n        \"3\",\n        -8.633576393127441\n      ],\n      [\n        \"▁動画\",\n        -8.63395881652832\n      ],\n      [\n        \"▁んだ\",\n        -8.635092735290527\n      ],\n      [\n        \"▁頃\",\n        -8.63717269897461\n      ],\n      [\n        \"▁ページ\",\n        -8.645527839660645\n      ],\n      [\n        \"・\",\n        -8.645946502685547\n      ],\n      [\n        \"S\",\n        -8.646881103515625\n      ],\n      [\n        \"▁よう\",\n        -8.646886825561523\n      ],\n      [\n        \"▁以外\",\n        -8.646909713745117\n      ],\n      [\n        \"▁公開\",\n        -8.648885726928711\n      ],\n      [\n        \"▁役\",\n        -8.64951229095459\n      ],\n      [\n        \"▁V\",\n        -8.650028228759766\n      ],\n      [\n        \"▁J\",\n        -8.65195369720459\n      ],\n      [\n        \"▁試合\",\n        -8.654403686523438\n      ],\n      [\n        \"▁状況\",\n        -8.656203269958496\n      ],\n      [\n        \"▁プロ\",\n        -8.656368255615234\n      ],\n      [\n        \"▁データ\",\n        -8.657211303710938\n      ],\n      [\n        \"▁しまい\",\n        -8.658308029174805\n      ],\n      [\n        \"▁L\",\n        -8.664351463317871\n      ],\n      [\n        \"▁専門\",\n        -8.667210578918457\n      ],\n      [\n        \"▁感\",\n        -8.678299903869629\n      ],\n      [\n        \"▁>\",\n        -8.680032730102539\n      ],\n      [\n        \"▁いき\",\n        -8.683222770690918\n      ],\n      [\n        \"▁しか\",\n        -8.68333625793457\n      ],\n      [\n        \"▁願い\",\n        -8.683533668518066\n      ],\n      [\n        \"▁N\",\n        -8.69074535369873\n      ],\n      [\n        \"第\",\n        -8.693888664245605\n      ],\n      [\n        \"▁目的\",\n        -8.694649696350098\n      ],\n      [\n        \"▁及び\",\n        -8.697286605834961\n      ],\n      [\n        \"野\",\n        -8.701876640319824\n      ],\n      [\n        \"レ\",\n        -8.703042030334473\n      ],\n      [\n        \"ダ\",\n        -8.704231262207031\n      ],\n      [\n        \"▁大きな\",\n        -8.704476356506348\n      ],\n      [\n        \"▁くる\",\n        -8.706354141235352\n      ],\n      [\n        \"▁株式\",\n        -8.706450462341309\n      ],\n      [\n        \"▁経済\",\n        -8.707179069519043\n      ],\n      [\n        \"概要\",\n        -8.70723819732666\n      ],\n      [\n        \"▁'\",\n        -8.710365295410156\n      ],\n      [\n        \"▁2018\",\n        -8.710861206054688\n      ],\n      [\n        \"▁部分\",\n        -8.710872650146484\n      ],\n      [\n        \"▁鉄道\",\n        -8.710886001586914\n      ],\n      [\n        \"▁いたし\",\n        -8.71095085144043\n      ],\n      [\n        \"▁受け\",\n        -8.71316146850586\n      ],\n      [\n        \"▁計画\",\n        -8.714073181152344\n      ],\n      [\n        \"ツ\",\n        -8.715557098388672\n      ],\n      [\n        \"▁持つ\",\n        -8.716750144958496\n      ],\n      [\n        \"▁W\",\n        -8.72092056274414\n      ],\n      [\n        \"▁色\",\n        -8.722179412841797\n      ],\n      [\n        \"▁施設\",\n        -8.722347259521484\n      ],\n      [\n        \"▁担当\",\n        -8.723125457763672\n      ],\n      [\n        \"原\",\n        -8.723352432250977\n      ],\n      [\n        \"▁契約\",\n        -8.726580619812012\n      ],\n      [\n        \"上\",\n        -8.728938102722168\n      ],\n      [\n        \"ネ\",\n        -8.729519844055176\n      ],\n      [\n        \"▁デザイン\",\n        -8.730265617370605\n      ],\n      [\n        \"▁そう\",\n        -8.735098838806152\n      ],\n      [\n        \"▁のだ\",\n        -8.735325813293457\n      ],\n      [\n        \"▁あなた\",\n        -8.736220359802246\n      ],\n      [\n        \"▁考えて\",\n        -8.738414764404297\n      ],\n      [\n        \"▁p\",\n        -8.738759994506836\n      ],\n      [\n        \"▁級\",\n        -8.742013931274414\n      ],\n      [\n        \"▁価格\",\n        -8.742155075073242\n      ],\n      [\n        \"▁期\",\n        -8.742574691772461\n      ],\n      [\n        \"▁期間\",\n        -8.743024826049805\n      ],\n      [\n        \"▁再\",\n        -8.743167877197266\n      ],\n      [\n        \"シ\",\n        -8.744353294372559\n      ],\n      [\n        \"▁出場\",\n        -8.74435806274414\n      ],\n      [\n        \"▁出て\",\n        -8.747735977172852\n      ],\n      [\n        \"島\",\n        -8.749215126037598\n      ],\n      [\n        \"▁島\",\n        -8.750080108642578\n      ],\n      [\n        \"▁2019\",\n        -8.750238418579102\n      ],\n      [\n        \"▁省\",\n        -8.752098083496094\n      ],\n      [\n        \"▁評価\",\n        -8.752190589904785\n      ],\n      [\n        \"▁発生\",\n        -8.75312328338623\n      ],\n      [\n        \"▁川\",\n        -8.75321102142334\n      ],\n      [\n        \"▁出演\",\n        -8.754293441772461\n      ],\n      [\n        \"▁モデル\",\n        -8.758337020874023\n      ],\n      [\n        \"▁すべて\",\n        -8.7610445022583\n      ],\n      [\n        \"▁年間\",\n        -8.76142406463623\n      ],\n      [\n        \"▁選択\",\n        -8.764636039733887\n      ],\n      [\n        \"▁ございます\",\n        -8.765458106994629\n      ],\n      [\n        \"▁人間\",\n        -8.765986442565918\n      ],\n      [\n        \"▁+\",\n        -8.769140243530273\n      ],\n      [\n        \"▁関連\",\n        -8.770435333251953\n      ],\n      [\n        \"▁支援\",\n        -8.770509719848633\n      ],\n      [\n        \"▁監督\",\n        -8.770634651184082\n      ],\n      [\n        \"▁率\",\n        -8.77235221862793\n      ],\n      [\n        \"▁シーズン\",\n        -8.772828102111816\n      ],\n      [\n        \"▁イベント\",\n        -8.776876449584961\n      ],\n      [\n        \"▁サイズ\",\n        -8.776958465576172\n      ],\n      [\n        \"▁グループ\",\n        -8.780716896057129\n      ],\n      [\n        \"▁28\",\n        -8.782977104187012\n      ],\n      [\n        \"▁理由\",\n        -8.783198356628418\n      ],\n      [\n        \"サ\",\n        -8.783882141113281\n      ],\n      [\n        \"▁26\",\n        -8.785008430480957\n      ],\n      [\n        \"▁実施\",\n        -8.788067817687988\n      ],\n      [\n        \"▁世\",\n        -8.78923511505127\n      ],\n      [\n        \"ジ\",\n        -8.789690971374512\n      ],\n      [\n        \"▁番\",\n        -8.789877891540527\n      ],\n      [\n        \"▁その他\",\n        -8.790164947509766\n      ],\n      [\n        \"▁リーグ\",\n        -8.790663719177246\n      ],\n      [\n        \"イ\",\n        -8.790717124938965\n      ],\n      [\n        \"▁言う\",\n        -8.791111946105957\n      ],\n      [\n        \"▁予定\",\n        -8.79133129119873\n      ],\n      [\n        \"▁説明\",\n        -8.793964385986328\n      ],\n      [\n        \"▁すぐ\",\n        -8.796640396118164\n      ],\n      [\n        \"▁相談\",\n        -8.799564361572266\n      ],\n      [\n        \"▁ダウンロード\",\n        -8.799908638000488\n      ],\n      [\n        \"▁e\",\n        -8.800846099853516\n      ],\n      [\n        \"▁とって\",\n        -8.801958084106445\n      ],\n      [\n        \"▁ポイント\",\n        -8.802019119262695\n      ],\n      [\n        \"▁さらに\",\n        -8.80276870727539\n      ],\n      [\n        \"う\",\n        -8.805696487426758\n      ],\n      [\n        \"▁掲載\",\n        -8.80627155303955\n      ],\n      [\n        \"▁27\",\n        -8.806368827819824\n      ],\n      [\n        \"▁メール\",\n        -8.80659008026123\n      ],\n      [\n        \"▁員\",\n        -8.807891845703125\n      ],\n      [\n        \"▁地方\",\n        -8.809200286865234\n      ],\n      [\n        \"▁ここ\",\n        -8.81175422668457\n      ],\n      [\n        \"▁設置\",\n        -8.81204605102539\n      ],\n      [\n        \"▁もう\",\n        -8.81344985961914\n      ],\n      [\n        \"▁かけて\",\n        -8.815631866455078\n      ],\n      [\n        \"▁機関\",\n        -8.816887855529785\n      ],\n      [\n        \"▁実際\",\n        -8.818011283874512\n      ],\n      [\n        \"▁経験\",\n        -8.818628311157227\n      ],\n      [\n        \"▁50\",\n        -8.820055961608887\n      ],\n      [\n        \"れ\",\n        -8.822248458862305\n      ],\n      [\n        \"▁中央\",\n        -8.822585105895996\n      ],\n      [\n        \"▁言葉\",\n        -8.825173377990723\n      ],\n      [\n        \"▁“\",\n        -8.825366973876953\n      ],\n      [\n        \"▁それぞれ\",\n        -8.82688045501709\n      ],\n      [\n        \"▁電話\",\n        -8.827263832092285\n      ],\n      [\n        \"中\",\n        -8.827548027038574\n      ],\n      [\n        \"して\",\n        -8.828661918640137\n      ],\n      [\n        \"▁使って\",\n        -8.829614639282227\n      ],\n      [\n        \"▁神\",\n        -8.830536842346191\n      ],\n      [\n        \"▁ほか\",\n        -8.830570220947266\n      ],\n      [\n        \"▁バス\",\n        -8.832625389099121\n      ],\n      [\n        \"▁なくて\",\n        -8.833061218261719\n      ],\n      [\n        \"▁台\",\n        -8.83446979522705\n      ],\n      [\n        \"▁見る\",\n        -8.835578918457031\n      ],\n      [\n        \"▁ドイツ\",\n        -8.836344718933105\n      ],\n      [\n        \"ミ\",\n        -8.839237213134766\n      ],\n      [\n        \"ブ\",\n        -8.839674949645996\n      ],\n      [\n        \"こ\",\n        -8.8412446975708\n      ],\n      [\n        \"▁全国\",\n        -8.84158992767334\n      ],\n      [\n        \"▁卒業\",\n        -8.842455863952637\n      ],\n      [\n        \"C\",\n        -8.843998908996582\n      ],\n      [\n        \"▁都市\",\n        -8.845402717590332\n      ],\n      [\n        \"▁2017\",\n        -8.845974922180176\n      ],\n      [\n        \"▁フランス\",\n        -8.84687614440918\n      ],\n      [\n        \"ティ\",\n        -8.850074768066406\n      ],\n      [\n        \"▁全て\",\n        -8.850541114807129\n      ],\n      [\n        \"▁持ち\",\n        -8.853889465332031\n      ],\n      [\n        \"▁不\",\n        -8.856542587280273\n      ],\n      [\n        \"▁た\",\n        -8.857137680053711\n      ],\n      [\n        \"▁対象\",\n        -8.85767936706543\n      ],\n      [\n        \"▁米\",\n        -8.859259605407715\n      ],\n      [\n        \"▁29\",\n        -8.8596830368042\n      ],\n      [\n        \"▁子供\",\n        -8.860235214233398\n      ],\n      [\n        \"グ\",\n        -8.860330581665039\n      ],\n      [\n        \"▁士\",\n        -8.86071491241455\n      ],\n      [\n        \"ん\",\n        -8.862131118774414\n      ],\n      [\n        \"▁無\",\n        -8.866154670715332\n      ],\n      [\n        \"▁リ\",\n        -8.866772651672363\n      ],\n      [\n        \"▁所属\",\n        -8.868378639221191\n      ],\n      [\n        \"▁使い\",\n        -8.870195388793945\n      ],\n      [\n        \"▁取り\",\n        -8.870843887329102\n      ],\n      [\n        \"▁年度\",\n        -8.871124267578125\n      ],\n      [\n        \"▁位置\",\n        -8.871943473815918\n      ],\n      [\n        \"▁初めて\",\n        -8.874874114990234\n      ],\n      [\n        \"▁両\",\n        -8.874960899353027\n      ],\n      [\n        \"▁決定\",\n        -8.874967575073242\n      ],\n      [\n        \"▁枚\",\n        -8.87608814239502\n      ],\n      [\n        \"▁a\",\n        -8.87656307220459\n      ],\n      [\n        \"▁室\",\n        -8.878043174743652\n      ],\n      [\n        \"▁しまった\",\n        -8.879465103149414\n      ],\n      [\n        \"▁対する\",\n        -8.8796968460083\n      ],\n      [\n        \"ガ\",\n        -8.879983901977539\n      ],\n      [\n        \"▁対策\",\n        -8.880684852600098\n      ],\n      [\n        \"▁ス\",\n        -8.88209056854248\n      ],\n      [\n        \"▁事務\",\n        -8.882108688354492\n      ],\n      [\n        \"▁京都\",\n        -8.88350772857666\n      ],\n      [\n        \"▁向け\",\n        -8.884930610656738\n      ],\n      [\n        \"▁歴史\",\n        -8.88747501373291\n      ],\n      [\n        \"▁n\",\n        -8.887938499450684\n      ],\n      [\n        \"ば\",\n        -8.889894485473633\n      ],\n      [\n        \"▁終了\",\n        -8.890223503112793\n      ],\n      [\n        \"▁少し\",\n        -8.890716552734375\n      ],\n      [\n        \"▁結婚\",\n        -8.890750885009766\n      ],\n      [\n        \"▁行った\",\n        -8.891594886779785\n      ],\n      [\n        \"▁共に\",\n        -8.891674041748047\n      ],\n      [\n        \"▁言って\",\n        -8.893777847290039\n      ],\n      [\n        \"▁官\",\n        -8.899138450622559\n      ],\n      [\n        \"▁こちら\",\n        -8.899733543395996\n      ],\n      [\n        \"▁アルバム\",\n        -8.89995002746582\n      ],\n      [\n        \"▁そこ\",\n        -8.901435852050781\n      ],\n      [\n        \"▁政府\",\n        -8.901593208312988\n      ],\n      [\n        \"▁末\",\n        -8.90203857421875\n      ],\n      [\n        \"です\",\n        -8.9020414352417\n      ],\n      [\n        \"※\",\n        -8.909258842468262\n      ],\n      [\n        \"▁事件\",\n        -8.91042709350586\n      ],\n      [\n        \"▁I\",\n        -8.911993980407715\n      ],\n      [\n        \"▁世紀\",\n        -8.913631439208984\n      ],\n      [\n        \"▁ブログ\",\n        -8.91435718536377\n      ],\n      [\n        \"▁程度\",\n        -8.914727210998535\n      ],\n      [\n        \"▁やって\",\n        -8.914874076843262\n      ],\n      [\n        \"▁様々な\",\n        -8.915623664855957\n      ],\n      [\n        \"▁アップ\",\n        -8.915779113769531\n      ],\n      [\n        \"▁声\",\n        -8.918355941772461\n      ],\n      [\n        \"▁量\",\n        -8.918611526489258\n      ],\n      [\n        \"手\",\n        -8.918678283691406\n      ],\n      [\n        \"▁すすめ\",\n        -8.91955280303955\n      ],\n      [\n        \"▁くらい\",\n        -8.920440673828125\n      ],\n      [\n        \"4\",\n        -8.92277717590332\n      ],\n      [\n        \"▁マ\",\n        -8.923903465270996\n      ],\n      [\n        \"生\",\n        -8.92421817779541\n      ],\n      [\n        \"▁新しい\",\n        -8.924877166748047\n      ],\n      [\n        \"▁とても\",\n        -8.92615795135498\n      ],\n      [\n        \"▁メンズ\",\n        -8.926523208618164\n      ],\n      [\n        \"5\",\n        -8.926671981811523\n      ],\n      [\n        \"▁製品\",\n        -8.928423881530762\n      ],\n      [\n        \"オ\",\n        -8.9291353225708\n      ],\n      [\n        \"▁40\",\n        -8.936161994934082\n      ],\n      [\n        \"エ\",\n        -8.936803817749023\n      ],\n      [\n        \"▁旧\",\n        -8.93741512298584\n      ],\n      [\n        \"▁ラ\",\n        -8.939011573791504\n      ],\n      [\n        \"▁採用\",\n        -8.939138412475586\n      ],\n      [\n        \"▁制作\",\n        -8.942741394042969\n      ],\n      [\n        \"▁相手\",\n        -8.94318675994873\n      ],\n      [\n        \"▁海\",\n        -8.943862915039062\n      ],\n      [\n        \"▁入り\",\n        -8.945237159729004\n      ],\n      [\n        \"▁基本\",\n        -8.945245742797852\n      ],\n      [\n        \"▁男性\",\n        -8.946459770202637\n      ],\n      [\n        \"▁正\",\n        -8.949076652526855\n      ],\n      [\n        \"木\",\n        -8.952024459838867\n      ],\n      [\n        \"▁光\",\n        -8.953221321105957\n      ],\n      [\n        \"▁府\",\n        -8.954755783081055\n      ],\n      [\n        \"▁レディース\",\n        -8.95525074005127\n      ],\n      [\n        \"▁戦争\",\n        -8.956694602966309\n      ],\n      [\n        \"▁交換\",\n        -8.956847190856934\n      ],\n      [\n        \"部\",\n        -8.956883430480957\n      ],\n      [\n        \"▁花\",\n        -8.95969009399414\n      ],\n      [\n        \"▁そして\",\n        -8.959907531738281\n      ],\n      [\n        \"▁ひと\",\n        -8.96059799194336\n      ],\n      [\n        \"▁ほとんど\",\n        -8.960951805114746\n      ],\n      [\n        \"名\",\n        -8.96130657196045\n      ],\n      [\n        \"▁す\",\n        -8.961348533630371\n      ],\n      [\n        \"▁種\",\n        -8.96137809753418\n      ],\n      [\n        \"国\",\n        -8.962059020996094\n      ],\n      [\n        \"ご\",\n        -8.96352767944336\n      ],\n      [\n        \"▁特に\",\n        -8.964591026306152\n      ],\n      [\n        \"▁時期\",\n        -8.96492862701416\n      ],\n      [\n        \"▁優勝\",\n        -8.965947151184082\n      ],\n      [\n        \"▁達\",\n        -8.96638011932373\n      ],\n      [\n        \"▁出来\",\n        -8.966787338256836\n      ],\n      [\n        \"▁ネット\",\n        -8.967872619628906\n      ],\n      [\n        \"▁獲得\",\n        -8.968684196472168\n      ],\n      [\n        \"▁くれる\",\n        -8.969785690307617\n      ],\n      [\n        \"▁スポーツ\",\n        -8.96992301940918\n      ],\n      [\n        \"水\",\n        -8.96994400024414\n      ],\n      [\n        \"▁英語\",\n        -8.97229290008545\n      ],\n      [\n        \"マン\",\n        -8.97372817993164\n      ],\n      [\n        \"▁*\",\n        -8.973808288574219\n      ],\n      [\n        \"え\",\n        -8.975821495056152\n      ],\n      [\n        \"▁31\",\n        -8.976263999938965\n      ],\n      [\n        \"▁最も\",\n        -8.977171897888184\n      ],\n      [\n        \"▁面\",\n        -8.977803230285645\n      ],\n      [\n        \"▁科学\",\n        -8.978130340576172\n      ],\n      [\n        \"道\",\n        -8.979150772094727\n      ],\n      [\n        \"▁だろう\",\n        -8.979555130004883\n      ],\n      [\n        \"プ\",\n        -8.982287406921387\n      ],\n      [\n        \"メ\",\n        -8.985766410827637\n      ],\n      [\n        \"&\",\n        -8.986623764038086\n      ],\n      [\n        \"▁種類\",\n        -8.991182327270508\n      ],\n      [\n        \"▁構成\",\n        -8.99235725402832\n      ],\n      [\n        \"▁治療\",\n        -8.994498252868652\n      ],\n      [\n        \"▁特徴\",\n        -8.995141983032227\n      ],\n      [\n        \"現在\",\n        -8.997493743896484\n      ],\n      [\n        \"▁夏\",\n        -8.997525215148926\n      ],\n      [\n        \"長\",\n        -8.99767780303955\n      ],\n      [\n        \"▁あって\",\n        -8.999412536621094\n      ],\n      [\n        \"▁撮影\",\n        -9.001693725585938\n      ],\n      [\n        \"め\",\n        -9.001782417297363\n      ],\n      [\n        \"▁下さい\",\n        -9.001877784729004\n      ],\n      [\n        \"▁運営\",\n        -9.002159118652344\n      ],\n      [\n        \"▁明治\",\n        -9.004844665527344\n      ],\n      [\n        \"▁行い\",\n        -9.005451202392578\n      ],\n      [\n        \"▁大きく\",\n        -9.008038520812988\n      ],\n      [\n        \"A\",\n        -9.009247779846191\n      ],\n      [\n        \"ニ\",\n        -9.00928783416748\n      ],\n      [\n        \"▁政治\",\n        -9.009429931640625\n      ],\n      [\n        \"▁使わ\",\n        -9.009900093078613\n      ],\n      [\n        \"▁派\",\n        -9.011679649353027\n      ],\n      [\n        \"▁みて\",\n        -9.013663291931152\n      ],\n      [\n        \"▁男\",\n        -9.014392852783203\n      ],\n      [\n        \"モ\",\n        -9.014814376831055\n      ],\n      [\n        \"地\",\n        -9.015836715698242\n      ],\n      [\n        \"▁非常に\",\n        -9.018579483032227\n      ],\n      [\n        \"▁イ\",\n        -9.019038200378418\n      ],\n      [\n        \"▁総\",\n        -9.019116401672363\n      ],\n      [\n        \"テ\",\n        -9.019116401672363\n      ],\n      [\n        \"▁営業\",\n        -9.02060317993164\n      ],\n      [\n        \"B\",\n        -9.021435737609863\n      ],\n      [\n        \"▁すれば\",\n        -9.021897315979004\n      ],\n      [\n        \"▁名前\",\n        -9.023608207702637\n      ],\n      [\n        \"▁彼女\",\n        -9.024700164794922\n      ],\n      [\n        \"▁木\",\n        -9.02480411529541\n      ],\n      [\n        \"▁資料\",\n        -9.026127815246582\n      ],\n      [\n        \"▁カ\",\n        -9.02718448638916\n      ],\n      [\n        \"▁集\",\n        -9.027509689331055\n      ],\n      [\n        \"▁朝\",\n        -9.02817153930664\n      ],\n      [\n        \"▁限定\",\n        -9.028746604919434\n      ],\n      [\n        \"▁指定\",\n        -9.029034614562988\n      ],\n      [\n        \"▁配信\",\n        -9.029706954956055\n      ],\n      [\n        \"-\",\n        -9.030011177062988\n      ],\n      [\n        \"▁得\",\n        -9.030510902404785\n      ],\n      [\n        \"物\",\n        -9.030889511108398\n      ],\n      [\n        \"▁作成\",\n        -9.031505584716797\n      ],\n      [\n        \"々\",\n        -9.034482955932617\n      ],\n      [\n        \"▁別\",\n        -9.034728050231934\n      ],\n      [\n        \"▁やすい\",\n        -9.037827491760254\n      ],\n      [\n        \"▁王\",\n        -9.038017272949219\n      ],\n      [\n        \"▁アプリ\",\n        -9.038984298706055\n      ],\n      [\n        \"▁その後\",\n        -9.040660858154297\n      ],\n      [\n        \"▁アニメ\",\n        -9.040919303894043\n      ],\n      [\n        \"ゴ\",\n        -9.040971755981445\n      ],\n      [\n        \"▁00\",\n        -9.041352272033691\n      ],\n      [\n        \"▁誰\",\n        -9.041996002197266\n      ],\n      [\n        \"T\",\n        -9.043283462524414\n      ],\n      [\n        \"▁図書\",\n        -9.043764114379883\n      ],\n      [\n        \"▁経営\",\n        -9.043965339660645\n      ],\n      [\n        \"▁選挙\",\n        -9.044739723205566\n      ],\n      [\n        \"▁2016\",\n        -9.045928955078125\n      ],\n      [\n        \"▁建設\",\n        -9.047667503356934\n      ],\n      [\n        \"▁理解\",\n        -9.050714492797852\n      ],\n      [\n        \"▁最\",\n        -9.051375389099121\n      ],\n      [\n        \"▁家族\",\n        -9.052094459533691\n      ],\n      [\n        \"スト\",\n        -9.054061889648438\n      ],\n      [\n        \"▁主義\",\n        -9.054505348205566\n      ],\n      [\n        \"▁公式\",\n        -9.05477237701416\n      ],\n      [\n        \"▁メンバー\",\n        -9.055183410644531\n      ],\n      [\n        \"▁風\",\n        -9.055192947387695\n      ],\n      [\n        \"▁しよう\",\n        -9.055488586425781\n      ],\n      [\n        \"っ\",\n        -9.055549621582031\n      ],\n      [\n        \"▁医療\",\n        -9.05712890625\n      ],\n      [\n        \"▁製造\",\n        -9.058061599731445\n      ],\n      [\n        \"▁運動\",\n        -9.059392929077148\n      ],\n      [\n        \"▁生産\",\n        -9.059691429138184\n      ],\n      [\n        \"▁隊\",\n        -9.062596321105957\n      ],\n      [\n        \"▁高校\",\n        -9.062877655029297\n      ],\n      [\n        \"18\",\n        -9.063485145568848\n      ],\n      [\n        \"▁現\",\n        -9.064838409423828\n      ],\n      [\n        \"d\",\n        -9.065092086791992\n      ],\n      [\n        \"▁美\",\n        -9.066801071166992\n      ],\n      [\n        \"▁設立\",\n        -9.066949844360352\n      ],\n      [\n        \"▁人物\",\n        -9.067262649536133\n      ],\n      [\n        \"er\",\n        -9.068185806274414\n      ],\n      [\n        \"▁口\",\n        -9.068781852722168\n      ],\n      [\n        \"▁体験\",\n        -9.07010269165039\n      ],\n      [\n        \"▁どこ\",\n        -9.070695877075195\n      ],\n      [\n        \"▁連絡\",\n        -9.070826530456543\n      ],\n      [\n        \"▁頭\",\n        -9.072442054748535\n      ],\n      [\n        \"出\",\n        -9.075255393981934\n      ],\n      [\n        \"▁イギリス\",\n        -9.076701164245605\n      ],\n      [\n        \"や\",\n        -9.076745986938477\n      ],\n      [\n        \"▁女子\",\n        -9.078083992004395\n      ],\n      [\n        \"▁出\",\n        -9.08231258392334\n      ],\n      [\n        \"▁X\",\n        -9.0828857421875\n      ],\n      [\n        \"▁城\",\n        -9.085943222045898\n      ],\n      [\n        \"▁オ\",\n        -9.086359977722168\n      ],\n      [\n        \"▁ファイル\",\n        -9.087174415588379\n      ],\n      [\n        \"▁注意\",\n        -9.087627410888672\n      ],\n      [\n        \"▁石\",\n        -9.087696075439453\n      ],\n      [\n        \"▁顔\",\n        -9.089442253112793\n      ],\n      [\n        \"▁重\",\n        -9.089753150939941\n      ],\n      [\n        \"y\",\n        -9.08979320526123\n      ],\n      [\n        \"▁セット\",\n        -9.092418670654297\n      ],\n      [\n        \"▁教授\",\n        -9.093478202819824\n      ],\n      [\n        \"▁保護\",\n        -9.093779563903809\n      ],\n      [\n        \"▁師\",\n        -9.094802856445312\n      ],\n      [\n        \"▁ドラマ\",\n        -9.095076560974121\n      ],\n      [\n        \"今回\",\n        -9.095758438110352\n      ],\n      [\n        \"▁真\",\n        -9.09897232055664\n      ],\n      [\n        \"▁組織\",\n        -9.100777626037598\n      ],\n      [\n        \"ウ\",\n        -9.100875854492188\n      ],\n      [\n        \"さらに\",\n        -9.101319313049316\n      ],\n      [\n        \"▁変化\",\n        -9.102591514587402\n      ],\n      [\n        \"▁土\",\n        -9.10279369354248\n      ],\n      [\n        \"▁音\",\n        -9.105758666992188\n      ],\n      [\n        \"▁作り\",\n        -9.105948448181152\n      ],\n      [\n        \"▁愛\",\n        -9.107446670532227\n      ],\n      [\n        \"▁したり\",\n        -9.107731819152832\n      ],\n      [\n        \"ディ\",\n        -9.108332633972168\n      ],\n      [\n        \"▁病院\",\n        -9.111042022705078\n      ],\n      [\n        \"今\",\n        -9.111181259155273\n      ],\n      [\n        \"井\",\n        -9.111963272094727\n      ],\n      [\n        \"▁条件\",\n        -9.112398147583008\n      ],\n      [\n        \"▁公\",\n        -9.115428924560547\n      ],\n      [\n        \"デ\",\n        -9.117883682250977\n      ],\n      [\n        \"町\",\n        -9.118229866027832\n      ],\n      [\n        \"▁非\",\n        -9.118371963500977\n      ],\n      [\n        \"▁展開\",\n        -9.119117736816406\n      ],\n      [\n        \"▁スーパー\",\n        -9.11915111541748\n      ],\n      [\n        \"▁全体\",\n        -9.122492790222168\n      ],\n      [\n        \"▁作業\",\n        -9.12357234954834\n      ],\n      [\n        \"▁気持ち\",\n        -9.123845100402832\n      ],\n      [\n        \"ビ\",\n        -9.124731063842773\n      ],\n      [\n        \"が\",\n        -9.124900817871094\n      ],\n      [\n        \"▁攻撃\",\n        -9.127103805541992\n      ],\n      [\n        \"▁受けて\",\n        -9.133204460144043\n      ],\n      [\n        \"▁クラブ\",\n        -9.134439468383789\n      ],\n      [\n        \"▁画像\",\n        -9.134771347045898\n      ],\n      [\n        \"▁例\",\n        -9.137020111083984\n      ],\n      [\n        \"▁更新\",\n        -9.137078285217285\n      ],\n      [\n        \"ット\",\n        -9.138519287109375\n      ],\n      [\n        \"▁料理\",\n        -9.138614654541016\n      ],\n      [\n        \"▁成功\",\n        -9.139466285705566\n      ],\n      [\n        \"▁行く\",\n        -9.143403053283691\n      ],\n      [\n        \"▁労働\",\n        -9.143484115600586\n      ],\n      [\n        \"▁込み\",\n        -9.143580436706543\n      ],\n      [\n        \"▁健康\",\n        -9.143829345703125\n      ],\n      [\n        \"▁勝\",\n        -9.144928932189941\n      ],\n      [\n        \"▁cm\",\n        -9.144949913024902\n      ],\n      [\n        \"▁ブランド\",\n        -9.145341873168945\n      ],\n      [\n        \"▁指導\",\n        -9.146349906921387\n      ],\n      [\n        \"▁d\",\n        -9.148186683654785\n      ],\n      [\n        \"▁含む\",\n        -9.149499893188477\n      ],\n      [\n        \"▁活躍\",\n        -9.15026569366455\n      ],\n      [\n        \"▁白\",\n        -9.15099048614502\n      ],\n      [\n        \"▁報告\",\n        -9.151220321655273\n      ],\n      [\n        \"▁まだ\",\n        -9.151993751525879\n      ],\n      [\n        \"▁条\",\n        -9.153310775756836\n      ],\n      [\n        \"▁四\",\n        -9.15618896484375\n      ],\n      [\n        \"▁O\",\n        -9.159293174743652\n      ],\n      [\n        \"▁御\",\n        -9.159703254699707\n      ],\n      [\n        \"N\",\n        -9.160587310791016\n      ],\n      [\n        \"▁福岡\",\n        -9.162853240966797\n      ],\n      [\n        \"日\",\n        -9.163949966430664\n      ],\n      [\n        \"▁副\",\n        -9.16545295715332\n      ],\n      [\n        \"つ\",\n        -9.16608715057373\n      ],\n      [\n        \"▁通信\",\n        -9.167651176452637\n      ],\n      [\n        \"▁まま\",\n        -9.168943405151367\n      ],\n      [\n        \"▁エ\",\n        -9.169392585754395\n      ],\n      [\n        \"▁2015\",\n        -9.17041015625\n      ],\n      [\n        \"▁行動\",\n        -9.170483589172363\n      ],\n      [\n        \"▁ファン\",\n        -9.170968055725098\n      ],\n      [\n        \"▁まして\",\n        -9.171527862548828\n      ],\n      [\n        \"P\",\n        -9.171833038330078\n      ],\n      [\n        \"▁地区\",\n        -9.17293930053711\n      ],\n      [\n        \"▁足\",\n        -9.173116683959961\n      ],\n      [\n        \"▁今回\",\n        -9.173301696777344\n      ],\n      [\n        \"▁せた\",\n        -9.174955368041992\n      ],\n      [\n        \"ち\",\n        -9.175488471984863\n      ],\n      [\n        \"▁総合\",\n        -9.176103591918945\n      ],\n      [\n        \"▁最終\",\n        -9.176559448242188\n      ],\n      [\n        \"▁予約\",\n        -9.17666244506836\n      ],\n      [\n        \"▁夜\",\n        -9.178196907043457\n      ],\n      [\n        \"▁そうです\",\n        -9.179055213928223\n      ],\n      [\n        \"▁必要な\",\n        -9.17908763885498\n      ],\n      [\n        \"M\",\n        -9.179522514343262\n      ],\n      [\n        \"▁含ま\",\n        -9.179593086242676\n      ],\n      [\n        \"よう\",\n        -9.18042278289795\n      ],\n      [\n        \"▁姿\",\n        -9.180671691894531\n      ],\n      [\n        \"▁構造\",\n        -9.181654930114746\n      ],\n      [\n        \"▁主\",\n        -9.18191909790039\n      ],\n      [\n        \"した\",\n        -9.182449340820312\n      ],\n      [\n        \"▁導入\",\n        -9.184164047241211\n      ],\n      [\n        \"▁受けた\",\n        -9.184760093688965\n      ],\n      [\n        \"▁記念\",\n        -9.18513011932373\n      ],\n      [\n        \"▁JR\",\n        -9.185484886169434\n      ],\n      [\n        \"▁原因\",\n        -9.18769645690918\n      ],\n      [\n        \"▁入って\",\n        -9.19151496887207\n      ],\n      [\n        \"▁時点\",\n        -9.191828727722168\n      ],\n      [\n        \"▁タイプ\",\n        -9.192943572998047\n      ],\n      [\n        \"▁院\",\n        -9.193382263183594\n      ],\n      [\n        \")\",\n        -9.194123268127441\n      ],\n      [\n        \"▁女\",\n        -9.195418357849121\n      ],\n      [\n        \"▁きて\",\n        -9.195441246032715\n      ],\n      [\n        \"▁規模\",\n        -9.1978759765625\n      ],\n      [\n        \"▁着\",\n        -9.19864273071289\n      ],\n      [\n        \"e\",\n        -9.199080467224121\n      ],\n      [\n        \"行\",\n        -9.199302673339844\n      ],\n      [\n        \"▁べき\",\n        -9.200319290161133\n      ],\n      [\n        \"▁ようです\",\n        -9.200587272644043\n      ],\n      [\n        \"▁当\",\n        -9.201760292053223\n      ],\n      [\n        \"▁街\",\n        -9.20196533203125\n      ],\n      [\n        \"元\",\n        -9.20197582244873\n      ],\n      [\n        \"▁違い\",\n        -9.20256519317627\n      ],\n      [\n        \"▁デビュー\",\n        -9.204366683959961\n      ],\n      [\n        \"▁保険\",\n        -9.204750061035156\n      ],\n      [\n        \"前\",\n        -9.205061912536621\n      ],\n      [\n        \"▁市場\",\n        -9.205208778381348\n      ],\n      [\n        \"である\",\n        -9.206151962280273\n      ],\n      [\n        \"▁km\",\n        -9.20639419555664\n      ],\n      [\n        \"億\",\n        -9.206521987915039\n      ],\n      [\n        \"▁くれ\",\n        -9.206831932067871\n      ],\n      [\n        \"▁高等\",\n        -9.209390640258789\n      ],\n      [\n        \"▁希望\",\n        -9.210258483886719\n      ],\n      [\n        \"▁歌\",\n        -9.213333129882812\n      ],\n      [\n        \"見\",\n        -9.213459014892578\n      ],\n      [\n        \"▁c\",\n        -9.213567733764648\n      ],\n      [\n        \"▁追加\",\n        -9.215818405151367\n      ],\n      [\n        \"▁法人\",\n        -9.215978622436523\n      ],\n      [\n        \"▁制度\",\n        -9.216033935546875\n      ],\n      [\n        \"下\",\n        -9.216073036193848\n      ],\n      [\n        \"ッ\",\n        -9.21664047241211\n      ],\n      [\n        \"▁一緒に\",\n        -9.216708183288574\n      ],\n      [\n        \"▁製\",\n        -9.217292785644531\n      ],\n      [\n        \"ハ\",\n        -9.217378616333008\n      ],\n      [\n        \"▁発見\",\n        -9.21766185760498\n      ],\n      [\n        \"▁屋\",\n        -9.219771385192871\n      ],\n      [\n        \"▁使う\",\n        -9.219876289367676\n      ],\n      [\n        \"城\",\n        -9.21996021270752\n      ],\n      [\n        \"▁制\",\n        -9.220797538757324\n      ],\n      [\n        \"▁表現\",\n        -9.221220970153809\n      ],\n      [\n        \"▁新聞\",\n        -9.22142505645752\n      ],\n      [\n        \"口\",\n        -9.222566604614258\n      ],\n      [\n        \"▁b\",\n        -9.222960472106934\n      ],\n      [\n        \"▁以前\",\n        -9.22360897064209\n      ],\n      [\n        \"▁取得\",\n        -9.22455883026123\n      ],\n      [\n        \"▁みる\",\n        -9.225639343261719\n      ],\n      [\n        \"▁文\",\n        -9.226131439208984\n      ],\n      [\n        \"▁海外\",\n        -9.226415634155273\n      ],\n      [\n        \"谷\",\n        -9.227185249328613\n      ],\n      [\n        \"▁検索\",\n        -9.228116989135742\n      ],\n      [\n        \"▁為\",\n        -9.228227615356445\n      ],\n      [\n        \"▁議員\",\n        -9.230749130249023\n      ],\n      [\n        \"そこ\",\n        -9.231156349182129\n      ],\n      [\n        \"ケ\",\n        -9.23121452331543\n      ],\n      [\n        \"▁U\",\n        -9.23220157623291\n      ],\n      [\n        \"▁周辺\",\n        -9.23300552368164\n      ],\n      [\n        \"▁デ\",\n        -9.233233451843262\n      ],\n      [\n        \"▁船\",\n        -9.233329772949219\n      ],\n      [\n        \"▁航空\",\n        -9.234086990356445\n      ],\n      [\n        \"▁ちゃん\",\n        -9.23486042022705\n      ],\n      [\n        \"▁業務\",\n        -9.235803604125977\n      ],\n      [\n        \"▁シ\",\n        -9.236047744750977\n      ],\n      [\n        \"▁特別\",\n        -9.237005233764648\n      ],\n      [\n        \"▁設計\",\n        -9.238448143005371\n      ],\n      [\n        \"▁近く\",\n        -9.238696098327637\n      ],\n      [\n        \"▁ホテル\",\n        -9.238882064819336\n      ],\n      [\n        \"10\",\n        -9.240896224975586\n      ],\n      [\n        \"▁超\",\n        -9.241581916809082\n      ],\n      [\n        \"▁�\",\n        -9.241652488708496\n      ],\n      [\n        \"彼\",\n        -9.242069244384766\n      ],\n      [\n        \"▁安全\",\n        -9.243001937866211\n      ],\n      [\n        \"▁肌\",\n        -9.243254661560059\n      ],\n      [\n        \"▁じゃ\",\n        -9.243271827697754\n      ],\n      [\n        \"▁症\",\n        -9.24455451965332\n      ],\n      [\n        \"▁かなり\",\n        -9.244672775268555\n      ],\n      [\n        \"▁企画\",\n        -9.244804382324219\n      ],\n      [\n        \"▁通常\",\n        -9.246257781982422\n      ],\n      [\n        \"け\",\n        -9.246397972106934\n      ],\n      [\n        \"2021\",\n        -9.247505187988281\n      ],\n      [\n        \"▁出来る\",\n        -9.24807071685791\n      ],\n      [\n        \"む\",\n        -9.252583503723145\n      ],\n      [\n        \"▁ハ\",\n        -9.253299713134766\n      ],\n      [\n        \"▁協会\",\n        -9.253326416015625\n      ],\n      [\n        \"▁北海道\",\n        -9.254931449890137\n      ],\n      [\n        \"▁収録\",\n        -9.25529670715332\n      ],\n      [\n        \"▁異なる\",\n        -9.257509231567383\n      ],\n      [\n        \"F\",\n        -9.257669448852539\n      ],\n      [\n        \"▁出版\",\n        -9.258552551269531\n      ],\n      [\n        \"▁リリース\",\n        -9.260335922241211\n      ],\n      [\n        \"ただし\",\n        -9.260514259338379\n      ],\n      [\n        \"ここ\",\n        -9.262494087219238\n      ],\n      [\n        \"▁番号\",\n        -9.2626953125\n      ],\n      [\n        \"▁多数\",\n        -9.263348579406738\n      ],\n      [\n        \"▁一番\",\n        -9.263473510742188\n      ],\n      [\n        \"▁マン\",\n        -9.264753341674805\n      ],\n      [\n        \"村\",\n        -9.26491641998291\n      ],\n      [\n        \"んで\",\n        -9.265108108520508\n      ],\n      [\n        \"▁文字\",\n        -9.265402793884277\n      ],\n      [\n        \"▁黒\",\n        -9.266048431396484\n      ],\n      [\n        \"▁野球\",\n        -9.26607894897461\n      ],\n      [\n        \"ボ\",\n        -9.26612377166748\n      ],\n      [\n        \"▁僕\",\n        -9.2669095993042\n      ],\n      [\n        \"パ\",\n        -9.267450332641602\n      ],\n      [\n        \"▁会員\",\n        -9.268240928649902\n      ],\n      [\n        \"ソン\",\n        -9.26855182647705\n      ],\n      [\n        \"▁娘\",\n        -9.269498825073242\n      ],\n      [\n        \"▁五\",\n        -9.269698143005371\n      ],\n      [\n        \"文\",\n        -9.269699096679688\n      ],\n      [\n        \"▁漫画\",\n        -9.26992130279541\n      ],\n      [\n        \"▁就任\",\n        -9.271803855895996\n      ],\n      [\n        \"▁電子\",\n        -9.272126197814941\n      ],\n      [\n        \"▁コ\",\n        -9.272369384765625\n      ],\n      [\n        \"▁なし\",\n        -9.272653579711914\n      ],\n      [\n        \"▁旅行\",\n        -9.273746490478516\n      ],\n      [\n        \"▁受賞\",\n        -9.273773193359375\n      ],\n      [\n        \"屋\",\n        -9.274279594421387\n      ],\n      [\n        \"▁ニュース\",\n        -9.274382591247559\n      ],\n      [\n        \"体\",\n        -9.274412155151367\n      ],\n      [\n        \"線\",\n        -9.2747220993042\n      ],\n      [\n        \"▁イメージ\",\n        -9.274956703186035\n      ],\n      [\n        \"東\",\n        -9.277099609375\n      ],\n      [\n        \"▁ライブ\",\n        -9.277220726013184\n      ],\n      [\n        \"▁サポート\",\n        -9.277392387390137\n      ],\n      [\n        \"▁編集\",\n        -9.277999877929688\n      ],\n      [\n        \"ター\",\n        -9.279101371765137\n      ],\n      [\n        \"▁本当に\",\n        -9.279361724853516\n      ],\n      [\n        \"▁ベスト\",\n        -9.279541015625\n      ],\n      [\n        \"▁交通\",\n        -9.280054092407227\n      ],\n      [\n        \"▁自然\",\n        -9.280261993408203\n      ],\n      [\n        \"▁強い\",\n        -9.28046989440918\n      ],\n      [\n        \"▁コース\",\n        -9.281259536743164\n      ],\n      [\n        \"▁先生\",\n        -9.283159255981445\n      ],\n      [\n        \"そんな\",\n        -9.28353500366211\n      ],\n      [\n        \"▁あまり\",\n        -9.283734321594238\n      ],\n      [\n        \"▁名古屋\",\n        -9.284381866455078\n      ],\n      [\n        \"▁身\",\n        -9.28449821472168\n      ],\n      [\n        \"▁言い\",\n        -9.286309242248535\n      ],\n      [\n        \"高\",\n        -9.286609649658203\n      ],\n      [\n        \"平\",\n        -9.286819458007812\n      ],\n      [\n        \"▁レ\",\n        -9.287382125854492\n      ],\n      [\n        \"▁個\",\n        -9.28786563873291\n      ],\n      [\n        \"D\",\n        -9.288992881774902\n      ],\n      [\n        \"▁組\",\n        -9.289549827575684\n      ],\n      [\n        \"▁シングル\",\n        -9.291394233703613\n      ],\n      [\n        \"▁コメント\",\n        -9.291762351989746\n      ],\n      [\n        \"▁オンライン\",\n        -9.292954444885254\n      ],\n      [\n        \"そう\",\n        -9.293118476867676\n      ],\n      [\n        \"▁人々\",\n        -9.293205261230469\n      ],\n      [\n        \"▁韓国\",\n        -9.294440269470215\n      ],\n      [\n        \"でも\",\n        -9.294541358947754\n      ],\n      [\n        \"▁団体\",\n        -9.296419143676758\n      ],\n      [\n        \"6\",\n        -9.298202514648438\n      ],\n      [\n        \"▁資格\",\n        -9.2990140914917\n      ],\n      [\n        \"じ\",\n        -9.299260139465332\n      ],\n      [\n        \"▁サ\",\n        -9.299567222595215\n      ],\n      [\n        \"▁そんな\",\n        -9.299649238586426\n      ],\n      [\n        \"▁ザ\",\n        -9.299967765808105\n      ],\n      [\n        \"▁和\",\n        -9.299976348876953\n      ],\n      [\n        \"は\",\n        -9.301652908325195\n      ],\n      [\n        \"ラー\",\n        -9.301904678344727\n      ],\n      [\n        \"▁com\",\n        -9.302630424499512\n      ],\n      [\n        \"ヤ\",\n        -9.303455352783203\n      ],\n      [\n        \"▁成長\",\n        -9.303817749023438\n      ],\n      [\n        \"▁わけで\",\n        -9.304032325744629\n      ],\n      [\n        \"▁こ\",\n        -9.304119110107422\n      ],\n      [\n        \"▁責任\",\n        -9.304121017456055\n      ],\n      [\n        \"▁思わ\",\n        -9.304970741271973\n      ],\n      [\n        \"▁ソフト\",\n        -9.306215286254883\n      ],\n      [\n        \"神\",\n        -9.30634880065918\n      ],\n      [\n        \"▁会議\",\n        -9.306825637817383\n      ],\n      [\n        \"家\",\n        -9.307953834533691\n      ],\n      [\n        \"▁人口\",\n        -9.308146476745605\n      ],\n      [\n        \"▁能力\",\n        -9.309096336364746\n      ],\n      [\n        \"▁判断\",\n        -9.309202194213867\n      ],\n      [\n        \"▁ホーム\",\n        -9.310203552246094\n      ],\n      [\n        \"▁勉強\",\n        -9.311351776123047\n      ],\n      [\n        \"▁ビジネス\",\n        -9.311540603637695\n      ],\n      [\n        \"▁考える\",\n        -9.311595916748047\n      ],\n      [\n        \"▁トップ\",\n        -9.312015533447266\n      ],\n      [\n        \"▁料\",\n        -9.312338829040527\n      ],\n      [\n        \"▁準備\",\n        -9.314523696899414\n      ],\n      [\n        \"れば\",\n        -9.315176010131836\n      ],\n      [\n        \"寺\",\n        -9.316790580749512\n      ],\n      [\n        \"▁サッカー\",\n        -9.317944526672363\n      ],\n      [\n        \"気\",\n        -9.318658828735352\n      ],\n      [\n        \"▁実現\",\n        -9.318757057189941\n      ],\n      [\n        \"W\",\n        -9.31984806060791\n      ],\n      [\n        \"▁なんて\",\n        -9.320591926574707\n      ],\n      [\n        \"▁件\",\n        -9.32198715209961\n      ],\n      [\n        \"▁行き\",\n        -9.322080612182617\n      ],\n      [\n        \"▁器\",\n        -9.322379112243652\n      ],\n      [\n        \"▁キャラクター\",\n        -9.322637557983398\n      ],\n      [\n        \"▁関して\",\n        -9.32327938079834\n      ],\n      [\n        \"▁食\",\n        -9.32381534576416\n      ],\n      [\n        \"▁今日\",\n        -9.324040412902832\n      ],\n      [\n        \"▁学生\",\n        -9.324373245239258\n      ],\n      [\n        \"▁ド\",\n        -9.324833869934082\n      ],\n      [\n        \"▁参考\",\n        -9.325016021728516\n      ],\n      [\n        \"▁多\",\n        -9.325098991394043\n      ],\n      [\n        \"▁自動車\",\n        -9.325185775756836\n      ],\n      [\n        \"▁墓\",\n        -9.32519817352295\n      ],\n      [\n        \"▁求人\",\n        -9.326072692871094\n      ],\n      [\n        \"▁Z\",\n        -9.326098442077637\n      ],\n      [\n        \"▁メーカー\",\n        -9.326233863830566\n      ],\n      [\n        \"▁父\",\n        -9.330007553100586\n      ],\n      [\n        \"▁()\",\n        -9.330891609191895\n      ],\n      [\n        \"▁ケース\",\n        -9.33159065246582\n      ],\n      [\n        \"▁イン\",\n        -9.331598281860352\n      ],\n      [\n        \"▁通販\",\n        -9.332088470458984\n      ],\n      [\n        \"▁2014\",\n        -9.332161903381348\n      ],\n      [\n        \"▁子ども\",\n        -9.33288860321045\n      ],\n      [\n        \"G\",\n        -9.332911491394043\n      ],\n      [\n        \"▁活用\",\n        -9.333234786987305\n      ],\n      [\n        \"三\",\n        -9.33359146118164\n      ],\n      [\n        \"▁the\",\n        -9.334244728088379\n      ],\n      [\n        \"▁比較\",\n        -9.335680961608887\n      ],\n      [\n        \"▁表\",\n        -9.336296081542969\n      ],\n      [\n        \"▁期待\",\n        -9.337158203125\n      ],\n      [\n        \"▁移動\",\n        -9.33895206451416\n      ],\n      [\n        \"▁→\",\n        -9.339325904846191\n      ],\n      [\n        \"▁階\",\n        -9.339338302612305\n      ],\n      [\n        \"▁群\",\n        -9.339805603027344\n      ],\n      [\n        \"▁路線\",\n        -9.342694282531738\n      ],\n      [\n        \"せ\",\n        -9.342820167541504\n      ],\n      [\n        \"i\",\n        -9.3432035446167\n      ],\n      [\n        \"m\",\n        -9.343751907348633\n      ],\n      [\n        \"▁過去\",\n        -9.345674514770508\n      ],\n      [\n        \"▁道路\",\n        -9.345782279968262\n      ],\n      [\n        \"▁天\",\n        -9.345999717712402\n      ],\n      [\n        \"▁ユーザー\",\n        -9.346074104309082\n      ],\n      [\n        \"▁パ\",\n        -9.346729278564453\n      ],\n      [\n        \"▁リンク\",\n        -9.346750259399414\n      ],\n      [\n        \"ニー\",\n        -9.347302436828613\n      ],\n      [\n        \"場\",\n        -9.348091125488281\n      ],\n      [\n        \"イン\",\n        -9.349610328674316\n      ],\n      [\n        \"▁産業\",\n        -9.34961223602295\n      ],\n      [\n        \"▁公園\",\n        -9.350358009338379\n      ],\n      [\n        \"▁of\",\n        -9.35049819946289\n      ],\n      [\n        \"▁艦\",\n        -9.35092544555664\n      ],\n      [\n        \"▁部屋\",\n        -9.351593971252441\n      ],\n      [\n        \"▁無い\",\n        -9.352498054504395\n      ],\n      [\n        \"▁ケア\",\n        -9.352527618408203\n      ],\n      [\n        \"も\",\n        -9.35389518737793\n      ],\n      [\n        \"▁f\",\n        -9.354039192199707\n      ],\n      [\n        \"▁馬\",\n        -9.354095458984375\n      ],\n      [\n        \"▁スタッフ\",\n        -9.354593276977539\n      ],\n      [\n        \"▁観光\",\n        -9.355403900146484\n      ],\n      [\n        \"ing\",\n        -9.35704231262207\n      ],\n      [\n        \"▁質問\",\n        -9.358871459960938\n      ],\n      [\n        \"▁来\",\n        -9.358973503112793\n      ],\n      [\n        \"▁協力\",\n        -9.35923957824707\n      ],\n      [\n        \"▁60\",\n        -9.361331939697266\n      ],\n      [\n        \"7\",\n        -9.362516403198242\n      ],\n      [\n        \"▁♪\",\n        -9.363122940063477\n      ],\n      [\n        \"▁広島\",\n        -9.36314582824707\n      ],\n      [\n        \"▁経て\",\n        -9.363752365112305\n      ],\n      [\n        \"▁感染\",\n        -9.363971710205078\n      ],\n      [\n        \"▁テーマ\",\n        -9.364903450012207\n      ],\n      [\n        \"▁ほう\",\n        -9.364947319030762\n      ],\n      [\n        \"▁チェック\",\n        -9.36578369140625\n      ],\n      [\n        \"▁バ\",\n        -9.365982055664062\n      ],\n      [\n        \"▁車両\",\n        -9.366619110107422\n      ],\n      [\n        \"9\",\n        -9.367532730102539\n      ],\n      [\n        \"石\",\n        -9.368204116821289\n      ],\n      [\n        \"ザ\",\n        -9.368927955627441\n      ],\n      [\n        \"▁付き\",\n        -9.371187210083008\n      ],\n      [\n        \"セ\",\n        -9.373030662536621\n      ],\n      [\n        \"▁校\",\n        -9.373055458068848\n      ],\n      [\n        \"▁投稿\",\n        -9.37372875213623\n      ],\n      [\n        \"▁薬\",\n        -9.37485408782959\n      ],\n      [\n        \"▁値\",\n        -9.375889778137207\n      ],\n      [\n        \"▁改善\",\n        -9.376399040222168\n      ],\n      [\n        \"ワ\",\n        -9.376717567443848\n      ],\n      [\n        \"▁×\",\n        -9.377214431762695\n      ],\n      [\n        \"▁ロシア\",\n        -9.378369331359863\n      ],\n      [\n        \"▁問い合わせ\",\n        -9.37960147857666\n      ],\n      [\n        \"▁複数\",\n        -9.38010311126709\n      ],\n      [\n        \"▁ル\",\n        -9.380753517150879\n      ],\n      [\n        \"8\",\n        -9.381237030029297\n      ],\n      [\n        \"▁つつ\",\n        -9.381832122802734\n      ],\n      [\n        \"▁書き\",\n        -9.38192081451416\n      ],\n      [\n        \"▁連続\",\n        -9.38298511505127\n      ],\n      [\n        \"▁ロ\",\n        -9.383502006530762\n      ],\n      [\n        \"t\",\n        -9.383524894714355\n      ],\n      [\n        \"▁安心\",\n        -9.38575553894043\n      ],\n      [\n        \"▁住宅\",\n        -9.385836601257324\n      ],\n      [\n        \"▁工事\",\n        -9.387067794799805\n      ],\n      [\n        \"▁しっかり\",\n        -9.387956619262695\n      ],\n      [\n        \"▁銀行\",\n        -9.38825511932373\n      ],\n      [\n        \"X\",\n        -9.38895320892334\n      ],\n      [\n        \"▁投資\",\n        -9.388998031616211\n      ],\n      [\n        \"▁団\",\n        -9.3902006149292\n      ],\n      [\n        \"年\",\n        -9.391294479370117\n      ],\n      [\n        \"▁最大\",\n        -9.391712188720703\n      ],\n      [\n        \"▁読み\",\n        -9.391824722290039\n      ],\n      [\n        \"▁タイトル\",\n        -9.392391204833984\n      ],\n      [\n        \"▁順\",\n        -9.392569541931152\n      ],\n      [\n        \"南\",\n        -9.393961906433105\n      ],\n      [\n        \"▁製作\",\n        -9.394343376159668\n      ],\n      [\n        \"▁共同\",\n        -9.394356727600098\n      ],\n      [\n        \"▁限り\",\n        -9.395885467529297\n      ],\n      [\n        \"▁独立\",\n        -9.39594841003418\n      ],\n      [\n        \"リン\",\n        -9.396120071411133\n      ],\n      [\n        \"後\",\n        -9.39727783203125\n      ],\n      [\n        \"o\",\n        -9.39801025390625\n      ],\n      [\n        \"▁編\",\n        -9.398014068603516\n      ],\n      [\n        \"▁千葉\",\n        -9.39820384979248\n      ],\n      [\n        \"▁障害\",\n        -9.398338317871094\n      ],\n      [\n        \"▁建築\",\n        -9.398677825927734\n      ],\n      [\n        \"▁事故\",\n        -9.39880084991455\n      ],\n      [\n        \"▁のでしょう\",\n        -9.399885177612305\n      ],\n      [\n        \"▁搭載\",\n        -9.400341987609863\n      ],\n      [\n        \"美\",\n        -9.402174949645996\n      ],\n      [\n        \"▁英\",\n        -9.40234375\n      ],\n      [\n        \"H\",\n        -9.402477264404297\n      ],\n      [\n        \"▁出し\",\n        -9.40247917175293\n      ],\n      [\n        \"▁意識\",\n        -9.404303550720215\n      ],\n      [\n        \"▁勝利\",\n        -9.4048490524292\n      ],\n      [\n        \"▁教会\",\n        -9.405133247375488\n      ],\n      [\n        \"▁スタイル\",\n        -9.405447006225586\n      ],\n      [\n        \"▁沖縄\",\n        -9.40587043762207\n      ],\n      [\n        \"▁ありがとう\",\n        -9.405903816223145\n      ],\n      [\n        \"当\",\n        -9.408068656921387\n      ],\n      [\n        \"ラン\",\n        -9.409001350402832\n      ],\n      [\n        \"▁知識\",\n        -9.409638404846191\n      ],\n      [\n        \"▁横浜\",\n        -9.41016674041748\n      ],\n      [\n        \"▁解説\",\n        -9.411023139953613\n      ],\n      [\n        \"▁処理\",\n        -9.412740707397461\n      ],\n      [\n        \"▁春\",\n        -9.412944793701172\n      ],\n      [\n        \"西\",\n        -9.413432121276855\n      ],\n      [\n        \"▁用品\",\n        -9.413619041442871\n      ],\n      [\n        \"▁対し\",\n        -9.414392471313477\n      ],\n      [\n        \"▁ヶ月\",\n        -9.414427757263184\n      ],\n      [\n        \"▁小説\",\n        -9.414546966552734\n      ],\n      [\n        \"間\",\n        -9.415239334106445\n      ],\n      [\n        \"明\",\n        -9.416259765625\n      ],\n      [\n        \"▁学習\",\n        -9.41641616821289\n      ],\n      [\n        \"▁特定\",\n        -9.418209075927734\n      ],\n      [\n        \"▁拡大\",\n        -9.418992042541504\n      ],\n      [\n        \"新\",\n        -9.419384002685547\n      ],\n      [\n        \"▁コピー\",\n        -9.419872283935547\n      ],\n      [\n        \"▁料金\",\n        -9.42001724243164\n      ],\n      [\n        \"n\",\n        -9.42054557800293\n      ],\n      [\n        \"▁映像\",\n        -9.421137809753418\n      ],\n      [\n        \"▁はじめ\",\n        -9.421208381652832\n      ],\n      [\n        \"▁ハイ\",\n        -9.421246528625488\n      ],\n      [\n        \"▁ちょっと\",\n        -9.422504425048828\n      ],\n      [\n        \"シュ\",\n        -9.422616004943848\n      ],\n      [\n        \"二\",\n        -9.42300033569336\n      ],\n      [\n        \"▁ランキング\",\n        -9.423296928405762\n      ],\n      [\n        \"▁半\",\n        -9.423851013183594\n      ],\n      [\n        \"ナー\",\n        -9.425897598266602\n      ],\n      [\n        \"▁一覧\",\n        -9.426948547363281\n      ],\n      [\n        \"▁用意\",\n        -9.42745304107666\n      ],\n      [\n        \"▁バー\",\n        -9.428853988647461\n      ],\n      [\n        \"ed\",\n        -9.429615020751953\n      ],\n      [\n        \"▁解決\",\n        -9.430933952331543\n      ],\n      [\n        \"▁ドル\",\n        -9.43111515045166\n      ],\n      [\n        \"▁国民\",\n        -9.432129859924316\n      ],\n      [\n        \"▁重要な\",\n        -9.433015823364258\n      ],\n      [\n        \"▁あるいは\",\n        -9.434124946594238\n      ],\n      [\n        \"シー\",\n        -9.434366226196289\n      ],\n      [\n        \"▁図\",\n        -9.436952590942383\n      ],\n      [\n        \"▁未\",\n        -9.437867164611816\n      ],\n      [\n        \"▁r\",\n        -9.438223838806152\n      ],\n      [\n        \"▁雑誌\",\n        -9.438427925109863\n      ],\n      [\n        \"一方\",\n        -9.439248085021973\n      ],\n      [\n        \"K\",\n        -9.44058609008789\n      ],\n      [\n        \"ぎ\",\n        -9.440693855285645\n      ],\n      [\n        \"北\",\n        -9.441510200500488\n      ],\n      [\n        \"▁業者\",\n        -9.441813468933105\n      ],\n      [\n        \"リング\",\n        -9.442044258117676\n      ],\n      [\n        \"沢\",\n        -9.442882537841797\n      ],\n      [\n        \"▁サン\",\n        -9.44360637664795\n      ],\n      [\n        \"▁赤\",\n        -9.443902969360352\n      ],\n      [\n        \"▁レベル\",\n        -9.445023536682129\n      ],\n      [\n        \"▁mm\",\n        -9.445548057556152\n      ],\n      [\n        \"▁たく\",\n        -9.445730209350586\n      ],\n      [\n        \"ただ\",\n        -9.446294784545898\n      ],\n      [\n        \"▁できた\",\n        -9.4472074508667\n      ],\n      [\n        \"▁メディア\",\n        -9.447236061096191\n      ],\n      [\n        \"▁検討\",\n        -9.447441101074219\n      ],\n      [\n        \"▁対\",\n        -9.448473930358887\n      ],\n      [\n        \"▁2013\",\n        -9.44878101348877\n      ],\n      [\n        \"和\",\n        -9.45008659362793\n      ],\n      [\n        \"分\",\n        -9.450340270996094\n      ],\n      [\n        \"▁動物\",\n        -9.450708389282227\n      ],\n      [\n        \"▁知って\",\n        -9.451830863952637\n      ],\n      [\n        \"▁行為\",\n        -9.451929092407227\n      ],\n      [\n        \"▁夢\",\n        -9.453449249267578\n      ],\n      [\n        \"▁イタリア\",\n        -9.453960418701172\n      ],\n      [\n        \"バー\",\n        -9.455389022827148\n      ],\n      [\n        \"▁自由\",\n        -9.455850601196289\n      ],\n      [\n        \"▁自動\",\n        -9.457510948181152\n      ],\n      [\n        \"▁差\",\n        -9.457862854003906\n      ],\n      [\n        \"▁2012\",\n        -9.45846176147461\n      ],\n      [\n        \"▁2010\",\n        -9.458578109741211\n      ],\n      [\n        \"J\",\n        -9.459874153137207\n      ],\n      [\n        \"▁整備\",\n        -9.459887504577637\n      ],\n      [\n        \"▁生まれ\",\n        -9.46230411529541\n      ],\n      [\n        \"▁右\",\n        -9.462410926818848\n      ],\n      [\n        \"▁類\",\n        -9.463279724121094\n      ],\n      [\n        \"▁受ける\",\n        -9.463479995727539\n      ],\n      [\n        \"▁死\",\n        -9.463546752929688\n      ],\n      [\n        \"▁タイム\",\n        -9.464022636413574\n      ],\n      [\n        \"▁フリー\",\n        -9.464925765991211\n      ],\n      [\n        \"▁病\",\n        -9.465112686157227\n      ],\n      [\n        \"▁食べ\",\n        -9.465895652770996\n      ],\n      [\n        \"▁母\",\n        -9.465903282165527\n      ],\n      [\n        \"▁う\",\n        -9.467890739440918\n      ],\n      [\n        \"▁務めた\",\n        -9.468490600585938\n      ],\n      [\n        \"カー\",\n        -9.468583106994629\n      ],\n      [\n        \"宮\",\n        -9.469171524047852\n      ],\n      [\n        \"東京\",\n        -9.46926212310791\n      ],\n      [\n        \"法\",\n        -9.470210075378418\n      ],\n      [\n        \"▁可能な\",\n        -9.470429420471191\n      ],\n      [\n        \"業\",\n        -9.470484733581543\n      ],\n      [\n        \"▁分野\",\n        -9.470573425292969\n      ],\n      [\n        \"海\",\n        -9.470776557922363\n      ],\n      [\n        \"▁}\",\n        -9.471302032470703\n      ],\n      [\n        \"▁アン\",\n        -9.471388816833496\n      ],\n      [\n        \"▁帝国\",\n        -9.471497535705566\n      ],\n      [\n        \"▁機会\",\n        -9.471721649169922\n      ],\n      [\n        \"ろ\",\n        -9.472212791442871\n      ],\n      [\n        \"▁少ない\",\n        -9.473608016967773\n      ],\n      [\n        \"▁当社\",\n        -9.473608016967773\n      ],\n      [\n        \"▁高く\",\n        -9.474270820617676\n      ],\n      [\n        \"▁h\",\n        -9.47463607788086\n      ],\n      [\n        \"▁バンド\",\n        -9.474656105041504\n      ],\n      [\n        \"▁安い\",\n        -9.475422859191895\n      ],\n      [\n        \"▁形式\",\n        -9.475589752197266\n      ],\n      [\n        \"▁週間\",\n        -9.475929260253906\n      ],\n      [\n        \"▁人生\",\n        -9.477104187011719\n      ],\n      [\n        \"▁巻\",\n        -9.47712516784668\n      ],\n      [\n        \"2020\",\n        -9.477127075195312\n      ],\n      [\n        \"▁直接\",\n        -9.478097915649414\n      ],\n      [\n        \"r\",\n        -9.479289054870605\n      ],\n      [\n        \"▁左\",\n        -9.480286598205566\n      ],\n      [\n        \"▁電気\",\n        -9.481183052062988\n      ],\n      [\n        \"▁運転\",\n        -9.481222152709961\n      ],\n      [\n        \"▁つき\",\n        -9.48134994506836\n      ],\n      [\n        \"▁エンジン\",\n        -9.48141860961914\n      ],\n      [\n        \"▁ほぼ\",\n        -9.481551170349121\n      ],\n      [\n        \"▁アクセス\",\n        -9.4818754196167\n      ],\n      [\n        \"津\",\n        -9.483699798583984\n      ],\n      [\n        \"▁意見\",\n        -9.48398494720459\n      ],\n      [\n        \"▁記載\",\n        -9.484000205993652\n      ],\n      [\n        \"▁小学校\",\n        -9.484484672546387\n      ],\n      [\n        \"▁続けて\",\n        -9.484630584716797\n      ],\n      [\n        \"▁戦い\",\n        -9.48544692993164\n      ],\n      [\n        \"▁2011\",\n        -9.485678672790527\n      ],\n      [\n        \"▁用い\",\n        -9.485682487487793\n      ],\n      [\n        \"▁ごと\",\n        -9.48638916015625\n      ],\n      [\n        \"いて\",\n        -9.486419677734375\n      ],\n      [\n        \"▁完成\",\n        -9.486493110656738\n      ],\n      [\n        \"▁党\",\n        -9.486852645874023\n      ],\n      [\n        \"▁アジア\",\n        -9.487319946289062\n      ],\n      [\n        \"▁読む\",\n        -9.487568855285645\n      ],\n      [\n        \"▁物語\",\n        -9.487771034240723\n      ],\n      [\n        \"V\",\n        -9.489133834838867\n      ],\n      [\n        \"▁出会い\",\n        -9.489445686340332\n      ],\n      [\n        \"▁妻\",\n        -9.489628791809082\n      ],\n      [\n        \"▁01\",\n        -9.490052223205566\n      ],\n      [\n        \"方\",\n        -9.49027156829834\n      ],\n      [\n        \"▁CD\",\n        -9.490358352661133\n      ],\n      [\n        \"▁出す\",\n        -9.491087913513184\n      ],\n      [\n        \"▁アル\",\n        -9.491666793823242\n      ],\n      [\n        \"心\",\n        -9.492132186889648\n      ],\n      [\n        \"▁書いて\",\n        -9.492695808410645\n      ],\n      [\n        \"成\",\n        -9.49307918548584\n      ],\n      [\n        \"月\",\n        -9.493154525756836\n      ],\n      [\n        \"▁祭\",\n        -9.49343490600586\n      ],\n      [\n        \"▁☆\",\n        -9.49350357055664\n      ],\n      [\n        \"▁i\",\n        -9.494024276733398\n      ],\n      [\n        \"▁犬\",\n        -9.494359016418457\n      ],\n      [\n        \"▁取引\",\n        -9.495224952697754\n      ],\n      [\n        \"▁オープン\",\n        -9.49642562866211\n      ],\n      [\n        \"数\",\n        -9.49742603302002\n      ],\n      [\n        \"▁参照\",\n        -9.498104095458984\n      ],\n      [\n        \"合\",\n        -9.4982271194458\n      ],\n      [\n        \"自分\",\n        -9.499279022216797\n      ],\n      [\n        \"2018\",\n        -9.50013542175293\n      ],\n      [\n        \"トン\",\n        -9.50101375579834\n      ],\n      [\n        \"▁のに\",\n        -9.501072883605957\n      ],\n      [\n        \"他\",\n        -9.501118659973145\n      ],\n      [\n        \"▁国家\",\n        -9.502655982971191\n      ],\n      [\n        \"▁当初\",\n        -9.503294944763184\n      ],\n      [\n        \"▁ライン\",\n        -9.503850936889648\n      ],\n      [\n        \"▁毎日\",\n        -9.506052017211914\n      ],\n      [\n        \"▁思った\",\n        -9.506908416748047\n      ],\n      [\n        \"▁カー\",\n        -9.507786750793457\n      ],\n      [\n        \"▁森\",\n        -9.508200645446777\n      ],\n      [\n        \"▁もと\",\n        -9.508383750915527\n      ],\n      [\n        \"▁入る\",\n        -9.508698463439941\n      ],\n      [\n        \"▁名称\",\n        -9.509425163269043\n      ],\n      [\n        \"光\",\n        -9.51026725769043\n      ],\n      [\n        \"▁2000\",\n        -9.510726928710938\n      ],\n      [\n        \"▁ト\",\n        -9.510757446289062\n      ],\n      [\n        \"▁価値\",\n        -9.513932228088379\n      ],\n      [\n        \"笑\",\n        -9.51417350769043\n      ],\n      [\n        \"▁クラス\",\n        -9.514516830444336\n      ],\n      [\n        \"▁親\",\n        -9.514839172363281\n      ],\n      [\n        \"▁裁判\",\n        -9.514862060546875\n      ],\n      [\n        \"あ\",\n        -9.515724182128906\n      ],\n      [\n        \"ソ\",\n        -9.517373085021973\n      ],\n      [\n        \"▁低\",\n        -9.517895698547363\n      ],\n      [\n        \"▁始め\",\n        -9.518587112426758\n      ],\n      [\n        \"▁こそ\",\n        -9.518930435180664\n      ],\n      [\n        \"▁横\",\n        -9.519418716430664\n      ],\n      [\n        \"▁火\",\n        -9.519538879394531\n      ],\n      [\n        \"▁消費\",\n        -9.520931243896484\n      ],\n      [\n        \"▁最高\",\n        -9.521056175231934\n      ],\n      [\n        \"金\",\n        -9.521402359008789\n      ],\n      [\n        \"▁in\",\n        -9.521543502807617\n      ],\n      [\n        \"作\",\n        -9.522407531738281\n      ],\n      [\n        \"ポ\",\n        -9.523314476013184\n      ],\n      [\n        \"▁もっと\",\n        -9.523504257202148\n      ],\n      [\n        \"▁発行\",\n        -9.524192810058594\n      ],\n      [\n        \"▁2008\",\n        -9.52478313446045\n      ],\n      [\n        \"▁平\",\n        -9.525030136108398\n      ],\n      [\n        \"2019\",\n        -9.525612831115723\n      ],\n      [\n        \"▁違う\",\n        -9.52612018585205\n      ],\n      [\n        \"▁法律\",\n        -9.526598930358887\n      ],\n      [\n        \"▁PC\",\n        -9.52802562713623\n      ],\n      [\n        \"▁費\",\n        -9.529511451721191\n      ],\n      [\n        \"▁頂き\",\n        -9.529890060424805\n      ],\n      [\n        \"▁以来\",\n        -9.530716896057129\n      ],\n      [\n        \"▁距離\",\n        -9.53075885772705\n      ],\n      [\n        \"▁自ら\",\n        -9.531386375427246\n      ],\n      [\n        \"▁セ\",\n        -9.531927108764648\n      ],\n      [\n        \"▁警察\",\n        -9.53288745880127\n      ],\n      [\n        \"▁注文\",\n        -9.533001899719238\n      ],\n      [\n        \"11\",\n        -9.53311824798584\n      ],\n      [\n        \"び\",\n        -9.53392219543457\n      ],\n      [\n        \"▁プロジェクト\",\n        -9.535248756408691\n      ],\n      [\n        \"▁実\",\n        -9.53531265258789\n      ],\n      [\n        \"▁論\",\n        -9.535385131835938\n      ],\n      [\n        \"色\",\n        -9.536195755004883\n      ],\n      [\n        \"▁再び\",\n        -9.536675453186035\n      ],\n      [\n        \"▁り\",\n        -9.538570404052734\n      ],\n      [\n        \"▁スタート\",\n        -9.53873348236084\n      ],\n      [\n        \"▁次の\",\n        -9.540648460388184\n      ],\n      [\n        \"▁列車\",\n        -9.54100227355957\n      ],\n      [\n        \"▁最初の\",\n        -9.541119575500488\n      ],\n      [\n        \"▁舞台\",\n        -9.541543006896973\n      ],\n      [\n        \"▁同時に\",\n        -9.542962074279785\n      ],\n      [\n        \"▁提案\",\n        -9.543651580810547\n      ],\n      [\n        \"▁カメラ\",\n        -9.544417381286621\n      ],\n      [\n        \"▁学科\",\n        -9.544586181640625\n      ],\n      [\n        \"内\",\n        -9.544921875\n      ],\n      [\n        \"▁移籍\",\n        -9.545239448547363\n      ],\n      [\n        \"小\",\n        -9.54537296295166\n      ],\n      [\n        \"▁主張\",\n        -9.545921325683594\n      ],\n      [\n        \"▁運用\",\n        -9.54607105255127\n      ],\n      [\n        \"▁好きな\",\n        -9.546079635620117\n      ],\n      [\n        \"▁美術\",\n        -9.546207427978516\n      ],\n      [\n        \"▁x\",\n        -9.547850608825684\n      ],\n      [\n        \"▁酒\",\n        -9.54820442199707\n      ],\n      [\n        \"面\",\n        -9.5487642288208\n      ],\n      [\n        \"▁バック\",\n        -9.54921817779541\n      ],\n      [\n        \"▁部隊\",\n        -9.549718856811523\n      ],\n      [\n        \"ベ\",\n        -9.550029754638672\n      ],\n      [\n        \"▁発展\",\n        -9.550298690795898\n      ],\n      [\n        \"▁業\",\n        -9.55122184753418\n      ],\n      [\n        \"▁コン\",\n        -9.551568984985352\n      ],\n      [\n        \"▁やり\",\n        -9.552742958068848\n      ],\n      [\n        \"▁寺\",\n        -9.552799224853516\n      ],\n      [\n        \"▁機器\",\n        -9.552807807922363\n      ],\n      [\n        \"▁精神\",\n        -9.55307388305664\n      ],\n      [\n        \"f\",\n        -9.553844451904297\n      ],\n      [\n        \"▁注目\",\n        -9.55441951751709\n      ],\n      [\n        \"▁作る\",\n        -9.5545654296875\n      ],\n      [\n        \"▁中学校\",\n        -9.556949615478516\n      ],\n      [\n        \"▁認め\",\n        -9.558013916015625\n      ],\n      [\n        \"▁アメリカ合衆国\",\n        -9.558270454406738\n      ],\n      [\n        \"▁来て\",\n        -9.55937671661377\n      ],\n      [\n        \"▁ショップ\",\n        -9.55941104888916\n      ],\n      [\n        \"▁上げ\",\n        -9.559475898742676\n      ],\n      [\n        \"だった\",\n        -9.56167221069336\n      ],\n      [\n        \"歴史\",\n        -9.56221866607666\n      ],\n      [\n        \"▁ヒ\",\n        -9.56369686126709\n      ],\n      [\n        \"▁与え\",\n        -9.563873291015625\n      ],\n      [\n        \"ック\",\n        -9.563902854919434\n      ],\n      [\n        \"▁今後\",\n        -9.564408302307129\n      ],\n      [\n        \"▁200\",\n        -9.56572151184082\n      ],\n      [\n        \"▁質\",\n        -9.566338539123535\n      ],\n      [\n        \"▁依頼\",\n        -9.566380500793457\n      ],\n      [\n        \"▁向上\",\n        -9.566720962524414\n      ],\n      [\n        \"特に\",\n        -9.567098617553711\n      ],\n      [\n        \"▁カラー\",\n        -9.567414283752441\n      ],\n      [\n        \"▁合わせて\",\n        -9.568808555603027\n      ],\n      [\n        \"▁分類\",\n        -9.570124626159668\n      ],\n      [\n        \"▁秋\",\n        -9.570438385009766\n      ],\n      [\n        \"▁誌\",\n        -9.570775985717773\n      ],\n      [\n        \"▁直\",\n        -9.570780754089355\n      ],\n      [\n        \"12\",\n        -9.57093334197998\n      ],\n      [\n        \"▁宇宙\",\n        -9.571798324584961\n      ],\n      [\n        \"▁被害\",\n        -9.571805000305176\n      ],\n      [\n        \"▁どんな\",\n        -9.572442054748535\n      ],\n      [\n        \"リア\",\n        -9.572772026062012\n      ],\n      [\n        \"▁強\",\n        -9.573660850524902\n      ],\n      [\n        \"州\",\n        -9.574323654174805\n      ],\n      [\n        \"▁て\",\n        -9.574640274047852\n      ],\n      [\n        \"ヒ\",\n        -9.575005531311035\n      ],\n      [\n        \"▁jp\",\n        -9.575252532958984\n      ],\n      [\n        \"L\",\n        -9.575294494628906\n      ],\n      [\n        \"▁外国\",\n        -9.575777053833008\n      ],\n      [\n        \"▁丁目\",\n        -9.576635360717773\n      ],\n      [\n        \"▁主に\",\n        -9.576715469360352\n      ],\n      [\n        \"▁演奏\",\n        -9.576881408691406\n      ],\n      [\n        \"▁事実\",\n        -9.577272415161133\n      ],\n      [\n        \"▁全く\",\n        -9.578547477722168\n      ],\n      [\n        \"▁社長\",\n        -9.578615188598633\n      ],\n      [\n        \"▁八\",\n        -9.578829765319824\n      ],\n      [\n        \"▁インターネット\",\n        -9.579245567321777\n      ],\n      [\n        \"▁額\",\n        -9.58054256439209\n      ],\n      [\n        \"▁プログラム\",\n        -9.580703735351562\n      ],\n      [\n        \"▁いただく\",\n        -9.581104278564453\n      ],\n      [\n        \"▁基準\",\n        -9.581377029418945\n      ],\n      [\n        \"▁激安\",\n        -9.581548690795898\n      ],\n      [\n        \"▁時計\",\n        -9.581574440002441\n      ],\n      [\n        \"▁致し\",\n        -9.581586837768555\n      ],\n      [\n        \"▁Y\",\n        -9.581597328186035\n      ],\n      [\n        \"▁そのまま\",\n        -9.582375526428223\n      ],\n      [\n        \"▁星\",\n        -9.582686424255371\n      ],\n      [\n        \"▁神奈川\",\n        -9.58421802520752\n      ],\n      [\n        \"▁付け\",\n        -9.5842866897583\n      ],\n      [\n        \"▁君\",\n        -9.585280418395996\n      ],\n      [\n        \"▁不動産\",\n        -9.585945129394531\n      ],\n      [\n        \"▁かけ\",\n        -9.586511611938477\n      ],\n      [\n        \"▁平均\",\n        -9.586960792541504\n      ],\n      [\n        \"▁w\",\n        -9.588797569274902\n      ],\n      [\n        \"▁自\",\n        -9.588831901550293\n      ],\n      [\n        \"▁2009\",\n        -9.58891487121582\n      ],\n      [\n        \"▁海軍\",\n        -9.590478897094727\n      ],\n      [\n        \"▁合格\",\n        -9.590788841247559\n      ],\n      [\n        \"▁ナ\",\n        -9.59128475189209\n      ],\n      [\n        \"▁発\",\n        -9.592584609985352\n      ],\n      [\n        \"▁講座\",\n        -9.593376159667969\n      ],\n      [\n        \"▁倍\",\n        -9.593652725219727\n      ],\n      [\n        \"▁可能です\",\n        -9.595505714416504\n      ],\n      [\n        \"崎\",\n        -9.596192359924316\n      ],\n      [\n        \"▁おく\",\n        -9.596297264099121\n      ],\n      [\n        \"▁したら\",\n        -9.596911430358887\n      ],\n      [\n        \"ゲ\",\n        -9.597065925598145\n      ],\n      [\n        \"▁ぶり\",\n        -9.597792625427246\n      ],\n      [\n        \"▁検査\",\n        -9.598159790039062\n      ],\n      [\n        \"▁空港\",\n        -9.598851203918457\n      ],\n      [\n        \"▁流れ\",\n        -9.598994255065918\n      ],\n      [\n        \"▁言語\",\n        -9.599040985107422\n      ],\n      [\n        \"▁増加\",\n        -9.600330352783203\n      ],\n      [\n        \"▁画面\",\n        -9.600757598876953\n      ],\n      [\n        \"▁専用\",\n        -9.603381156921387\n      ],\n      [\n        \"▁一方\",\n        -9.603599548339844\n      ],\n      [\n        \"ダー\",\n        -9.604021072387695\n      ],\n      [\n        \"2017\",\n        -9.604887008666992\n      ],\n      [\n        \"正\",\n        -9.605152130126953\n      ],\n      [\n        \"天\",\n        -9.605157852172852\n      ],\n      [\n        \"▁ラジオ\",\n        -9.605345726013184\n      ],\n      [\n        \"▁ダ\",\n        -9.605449676513672\n      ],\n      [\n        \"実\",\n        -9.606003761291504\n      ],\n      [\n        \"▁タ\",\n        -9.60621452331543\n      ],\n      [\n        \"▁患者\",\n        -9.606232643127441\n      ],\n      [\n        \"▁由来\",\n        -9.606623649597168\n      ],\n      [\n        \"▁保存\",\n        -9.607559204101562\n      ],\n      [\n        \"▁費用\",\n        -9.607613563537598\n      ],\n      [\n        \"▁練習\",\n        -9.608406066894531\n      ],\n      [\n        \"▁アイテム\",\n        -9.608723640441895\n      ],\n      [\n        \"▁税\",\n        -9.609282493591309\n      ],\n      [\n        \"▁神社\",\n        -9.610843658447266\n      ],\n      [\n        \"▁あ\",\n        -9.610894203186035\n      ],\n      [\n        \"▁魅力\",\n        -9.611655235290527\n      ],\n      [\n        \"▁学部\",\n        -9.612127304077148\n      ],\n      [\n        \"▁説\",\n        -9.612334251403809\n      ],\n      [\n        \"▁自己\",\n        -9.613668441772461\n      ],\n      [\n        \"▁よい\",\n        -9.615653038024902\n      ],\n      [\n        \"▁http\",\n        -9.616293907165527\n      ],\n      [\n        \"▁家庭\",\n        -9.616541862487793\n      ],\n      [\n        \"学\",\n        -9.616560935974121\n      ],\n      [\n        \"▁橋\",\n        -9.617445945739746\n      ],\n      [\n        \"▁Windows\",\n        -9.61917495727539\n      ],\n      [\n        \"▁空間\",\n        -9.620125770568848\n      ],\n      [\n        \"▁古\",\n        -9.620543479919434\n      ],\n      [\n        \"▁現代\",\n        -9.62078857421875\n      ],\n      [\n        \"▁工場\",\n        -9.621721267700195\n      ],\n      [\n        \"▁始めた\",\n        -9.62185287475586\n      ],\n      [\n        \"▁アイ\",\n        -9.62236499786377\n      ],\n      [\n        \"▁方向\",\n        -9.622393608093262\n      ],\n      [\n        \"▁おき\",\n        -9.622454643249512\n      ],\n      [\n        \"▁35\",\n        -9.623419761657715\n      ],\n      [\n        \"▁基\",\n        -9.623420715332031\n      ],\n      [\n        \"▁裏\",\n        -9.624092102050781\n      ],\n      [\n        \"▁自治\",\n        -9.624153137207031\n      ],\n      [\n        \"▁旅\",\n        -9.624281883239746\n      ],\n      [\n        \"▁連合\",\n        -9.625401496887207\n      ],\n      [\n        \"▁清\",\n        -9.625802040100098\n      ],\n      [\n        \"▁広告\",\n        -9.62588882446289\n      ],\n      [\n        \"▁最近\",\n        -9.626616477966309\n      ],\n      [\n        \"▁詳細\",\n        -9.626760482788086\n      ],\n      [\n        \"▁敵\",\n        -9.627294540405273\n      ],\n      [\n        \"▁ヨーロッパ\",\n        -9.628421783447266\n      ],\n      [\n        \"▁良く\",\n        -9.62939453125\n      ],\n      [\n        \"代\",\n        -9.629852294921875\n      ],\n      [\n        \"l\",\n        -9.629940032958984\n      ],\n      [\n        \"▁安\",\n        -9.630147933959961\n      ],\n      [\n        \"▁部門\",\n        -9.630358695983887\n      ],\n      [\n        \"▁有\",\n        -9.630372047424316\n      ],\n      [\n        \"書\",\n        -9.631168365478516\n      ],\n      [\n        \"▁素材\",\n        -9.632027626037598\n      ],\n      [\n        \"王\",\n        -9.632291793823242\n      ],\n      [\n        \"▁ミ\",\n        -9.632355690002441\n      ],\n      [\n        \"▁付\",\n        -9.632637977600098\n      ],\n      [\n        \"▁政策\",\n        -9.632920265197754\n      ],\n      [\n        \"▁やすく\",\n        -9.633496284484863\n      ],\n      [\n        \"▁大統領\",\n        -9.633594512939453\n      ],\n      [\n        \"▁最新\",\n        -9.634218215942383\n      ],\n      [\n        \"▁見た\",\n        -9.634227752685547\n      ],\n      [\n        \"▁動き\",\n        -9.634559631347656\n      ],\n      [\n        \"▁興味\",\n        -9.635754585266113\n      ],\n      [\n        \"▁かつて\",\n        -9.636417388916016\n      ],\n      [\n        \"▁土地\",\n        -9.636777877807617\n      ],\n      [\n        \"▁作ら\",\n        -9.638193130493164\n      ],\n      [\n        \"▁k\",\n        -9.640009880065918\n      ],\n      [\n        \"▁パン\",\n        -9.64065170288086\n      ],\n      [\n        \"▁コロナ\",\n        -9.641532897949219\n      ],\n      [\n        \"▁The\",\n        -9.6416597366333\n      ],\n      [\n        \"▁近い\",\n        -9.642074584960938\n      ],\n      [\n        \"▁表記\",\n        -9.642489433288574\n      ],\n      [\n        \"ず\",\n        -9.642821311950684\n      ],\n      [\n        \"▁レース\",\n        -9.64344596862793\n      ],\n      [\n        \"▁戦闘\",\n        -9.644139289855957\n      ],\n      [\n        \"▁形成\",\n        -9.644418716430664\n      ],\n      [\n        \"▁ウイルス\",\n        -9.644598960876465\n      ],\n      [\n        \"▁新たな\",\n        -9.645859718322754\n      ],\n      [\n        \"▁空\",\n        -9.646261215209961\n      ],\n      [\n        \"▁決勝\",\n        -9.647119522094727\n      ],\n      [\n        \"▁ビル\",\n        -9.647186279296875\n      ],\n      [\n        \"流\",\n        -9.647785186767578\n      ],\n      [\n        \"▁作曲\",\n        -9.648319244384766\n      ],\n      [\n        \"▁伝え\",\n        -9.648874282836914\n      ],\n      [\n        \"▁もちろん\",\n        -9.649012565612793\n      ],\n      [\n        \".\",\n        -9.649291038513184\n      ],\n      [\n        \"b\",\n        -9.649316787719727\n      ],\n      [\n        \"▁悪い\",\n        -9.651187896728516\n      ],\n      [\n        \"▁あたり\",\n        -9.652119636535645\n      ],\n      [\n        \"▁2007\",\n        -9.65281867980957\n      ],\n      [\n        \"▁義\",\n        -9.652909278869629\n      ],\n      [\n        \"▁競技\",\n        -9.65311336517334\n      ],\n      [\n        \"▁プレイ\",\n        -9.653526306152344\n      ],\n      [\n        \"▁静岡\",\n        -9.653667449951172\n      ],\n      [\n        \"▁オリジナル\",\n        -9.653695106506348\n      ],\n      [\n        \"▁案内\",\n        -9.654155731201172\n      ],\n      [\n        \"ール\",\n        -9.654587745666504\n      ],\n      [\n        \"夫\",\n        -9.65481185913086\n      ],\n      [\n        \"R\",\n        -9.654946327209473\n      ],\n      [\n        \"風\",\n        -9.654994010925293\n      ],\n      [\n        \"▁紙\",\n        -9.655344009399414\n      ],\n      [\n        \"[\",\n        -9.655776023864746\n      ],\n      [\n        \"▁作用\",\n        -9.656795501708984\n      ],\n      [\n        \"▁話題\",\n        -9.656996726989746\n      ],\n      [\n        \"▁編成\",\n        -9.657304763793945\n      ],\n      [\n        \"▁コンテンツ\",\n        -9.657560348510742\n      ],\n      [\n        \"▁わかり\",\n        -9.65772819519043\n      ],\n      [\n        \"▁入力\",\n        -9.658369064331055\n      ],\n      [\n        \"▁ま\",\n        -9.658699035644531\n      ],\n      [\n        \"▁ク\",\n        -9.659235000610352\n      ],\n      [\n        \"▁愛知\",\n        -9.659646987915039\n      ],\n      [\n        \"▁かつ\",\n        -9.659727096557617\n      ],\n      [\n        \"▁俺\",\n        -9.66021728515625\n      ],\n      [\n        \"▁スター\",\n        -9.660896301269531\n      ],\n      [\n        \"コン\",\n        -9.661681175231934\n      ],\n      [\n        \"▁行\",\n        -9.661803245544434\n      ],\n      [\n        \"▁入\",\n        -9.661808967590332\n      ],\n      [\n        \"▁ビデオ\",\n        -9.661996841430664\n      ],\n      [\n        \"▁維持\",\n        -9.662003517150879\n      ],\n      [\n        \"▁......\",\n        -9.662907600402832\n      ],\n      [\n        \"▁あと\",\n        -9.662935256958008\n      ],\n      [\n        \"▁簡単に\",\n        -9.66330623626709\n      ],\n      [\n        \"▁目標\",\n        -9.66334342956543\n      ],\n      [\n        \"▁割\",\n        -9.663705825805664\n      ],\n      [\n        \"▁史\",\n        -9.663911819458008\n      ],\n      [\n        \"力\",\n        -9.664424896240234\n      ],\n      [\n        \"▁身体\",\n        -9.66616153717041\n      ],\n      [\n        \"▁少女\",\n        -9.666363716125488\n      ],\n      [\n        \"▁まとめ\",\n        -9.666996002197266\n      ],\n      [\n        \"▁成績\",\n        -9.667070388793945\n      ],\n      [\n        \"▁※\",\n        -9.667949676513672\n      ],\n      [\n        \"2016\",\n        -9.668058395385742\n      ],\n      [\n        \"▁絵\",\n        -9.668070793151855\n      ],\n      [\n        \"▁いつも\",\n        -9.66843318939209\n      ],\n      [\n        \"▁ばかり\",\n        -9.6701078414917\n      ],\n      [\n        \"アン\",\n        -9.671056747436523\n      ],\n      [\n        \"▁初期\",\n        -9.672759056091309\n      ],\n      [\n        \"p\",\n        -9.672867774963379\n      ],\n      [\n        \"戦\",\n        -9.673178672790527\n      ],\n      [\n        \"▁ツアー\",\n        -9.673505783081055\n      ],\n      [\n        \"▁難しい\",\n        -9.67436695098877\n      ],\n      [\n        \"ぶ\",\n        -9.67440128326416\n      ],\n      [\n        \"al\",\n        -9.674410820007324\n      ],\n      [\n        \"a\",\n        -9.675043106079102\n      ],\n      [\n        \"▁継続\",\n        -9.675858497619629\n      ],\n      [\n        \"頭\",\n        -9.676002502441406\n      ],\n      [\n        \"▁オリンピック\",\n        -9.676837921142578\n      ],\n      [\n        \"▁フル\",\n        -9.676894187927246\n      ],\n      [\n        \"▁埼玉\",\n        -9.677082061767578\n      ],\n      [\n        \"▁出る\",\n        -9.677213668823242\n      ],\n      [\n        \"▁範囲\",\n        -9.677852630615234\n      ],\n      [\n        \"▁知らせ\",\n        -9.678956985473633\n      ],\n      [\n        \"目\",\n        -9.680819511413574\n      ],\n      [\n        \"▁クリック\",\n        -9.682699203491211\n      ],\n      [\n        \"▁たくさん\",\n        -9.684592247009277\n      ],\n      [\n        \"▁こう\",\n        -9.685304641723633\n      ],\n      [\n        \"ロー\",\n        -9.685765266418457\n      ],\n      [\n        \"▁行政\",\n        -9.686335563659668\n      ],\n      [\n        \"▁兵\",\n        -9.686820030212402\n      ],\n      [\n        \"▁ノ\",\n        -9.686861991882324\n      ],\n      [\n        \"▁圏\",\n        -9.68710994720459\n      ],\n      [\n        \"▁大臣\",\n        -9.687216758728027\n      ],\n      [\n        \"▁わから\",\n        -9.690507888793945\n      ],\n      [\n        \"かった\",\n        -9.691427230834961\n      ],\n      [\n        \"所\",\n        -9.691874504089355\n      ],\n      [\n        \"▁状\",\n        -9.692328453063965\n      ],\n      [\n        \"▁入れ\",\n        -9.692537307739258\n      ],\n      [\n        \"会\",\n        -9.692688941955566\n      ],\n      [\n        \"▁エネルギー\",\n        -9.693071365356445\n      ],\n      [\n        \"Y\",\n        -9.693072319030762\n      ],\n      [\n        \"k\",\n        -9.693902969360352\n      ],\n      [\n        \"▁エリア\",\n        -9.694086074829102\n      ],\n      [\n        \"▁業界\",\n        -9.694646835327148\n      ],\n      [\n        \"▁できて\",\n        -9.695314407348633\n      ],\n      [\n        \"▁新潟\",\n        -9.695754051208496\n      ],\n      [\n        \"▁300\",\n        -9.695796012878418\n      ],\n      [\n        \"▁いずれ\",\n        -9.697267532348633\n      ],\n      [\n        \"▁制限\",\n        -9.697626113891602\n      ],\n      [\n        \"▁打\",\n        -9.698129653930664\n      ],\n      [\n        \"スター\",\n        -9.698177337646484\n      ],\n      [\n        \"▁こんな\",\n        -9.698680877685547\n      ],\n      [\n        \"▁自体\",\n        -9.698796272277832\n      ],\n      [\n        \"▁メートル\",\n        -9.699407577514648\n      ],\n      [\n        \"んだ\",\n        -9.700048446655273\n      ],\n      [\n        \"ギ\",\n        -9.700078964233398\n      ],\n      [\n        \"c\",\n        -9.700864791870117\n      ],\n      [\n        \"▁いって\",\n        -9.700960159301758\n      ],\n      [\n        \"▁食事\",\n        -9.7010498046875\n      ],\n      [\n        \"▁強く\",\n        -9.701075553894043\n      ],\n      [\n        \"▁募集\",\n        -9.701276779174805\n      ],\n      [\n        \"▁細胞\",\n        -9.701921463012695\n      ],\n      [\n        \"事\",\n        -9.702221870422363\n      ],\n      [\n        \"▁米国\",\n        -9.702540397644043\n      ],\n      [\n        \"▁議会\",\n        -9.703418731689453\n      ],\n      [\n        \"▁いけない\",\n        -9.704604148864746\n      ],\n      [\n        \"▁コード\",\n        -9.705116271972656\n      ],\n      [\n        \"▁別の\",\n        -9.706620216369629\n      ],\n      [\n        \"▁息子\",\n        -9.707199096679688\n      ],\n      [\n        \"性\",\n        -9.707624435424805\n      ],\n      [\n        \"▁デジタル\",\n        -9.70765495300293\n      ],\n      [\n        \"▁接続\",\n        -9.708909034729004\n      ],\n      [\n        \"▁続き\",\n        -9.709053993225098\n      ],\n      [\n        \"▁様子\",\n        -9.709291458129883\n      ],\n      [\n        \"▁指摘\",\n        -9.709466934204102\n      ],\n      [\n        \"▁廃止\",\n        -9.709689140319824\n      ],\n      [\n        \"▁ブラック\",\n        -9.710067749023438\n      ],\n      [\n        \"▁大戦\",\n        -9.710923194885254\n      ],\n      [\n        \"▁認定\",\n        -9.71155071258545\n      ],\n      [\n        \"▁ライト\",\n        -9.712876319885254\n      ],\n      [\n        \"▁書か\",\n        -9.712964057922363\n      ],\n      [\n        \"▁劇場\",\n        -9.713293075561523\n      ],\n      [\n        \"▁みんな\",\n        -9.713296890258789\n      ],\n      [\n        \"▁32\",\n        -9.713299751281738\n      ],\n      [\n        \"▁あれば\",\n        -9.713600158691406\n      ],\n      [\n        \"▁金融\",\n        -9.713642120361328\n      ],\n      [\n        \"▁必ず\",\n        -9.71402645111084\n      ],\n      [\n        \"▁テスト\",\n        -9.71408748626709\n      ],\n      [\n        \"尾\",\n        -9.715024948120117\n      ],\n      [\n        \"ね\",\n        -9.716822624206543\n      ],\n      [\n        \"▁建物\",\n        -9.717469215393066\n      ],\n      [\n        \"▁出して\",\n        -9.717918395996094\n      ],\n      [\n        \"▁早\",\n        -9.71810245513916\n      ],\n      [\n        \"▁服\",\n        -9.718924522399902\n      ],\n      [\n        \"▁ご覧\",\n        -9.718932151794434\n      ],\n      [\n        \"▁ヘルノ\",\n        -9.71972370147705\n      ],\n      [\n        \"ロン\",\n        -9.721135139465332\n      ],\n      [\n        \"▁指揮\",\n        -9.721213340759277\n      ],\n      [\n        \"▁藩\",\n        -9.721632957458496\n      ],\n      [\n        \"▁規定\",\n        -9.72168254852295\n      ],\n      [\n        \"▁モ\",\n        -9.722661018371582\n      ],\n      [\n        \"▁著作\",\n        -9.724061965942383\n      ],\n      [\n        \"▁タイ\",\n        -9.724288940429688\n      ],\n      [\n        \"▁キ\",\n        -9.724390029907227\n      ],\n      [\n        \"▁45\",\n        -9.724628448486328\n      ],\n      [\n        \"▁芸術\",\n        -9.725339889526367\n      ],\n      [\n        \"▁庁\",\n        -9.725918769836426\n      ],\n      [\n        \"▁会長\",\n        -9.726317405700684\n      ],\n      [\n        \"▁送料\",\n        -9.726558685302734\n      ],\n      [\n        \"マー\",\n        -9.727126121520996\n      ],\n      [\n        \"▁本人\",\n        -9.727484703063965\n      ],\n      [\n        \"▁わ\",\n        -9.728240013122559\n      ],\n      [\n        \"▁味\",\n        -9.728583335876465\n      ],\n      [\n        \"政\",\n        -9.729116439819336\n      ],\n      [\n        \"▁訳\",\n        -9.729314804077148\n      ],\n      [\n        \"▁ぜひ\",\n        -9.729443550109863\n      ],\n      [\n        \"▁失敗\",\n        -9.730161666870117\n      ],\n      [\n        \"立\",\n        -9.730640411376953\n      ],\n      [\n        \"▁いただけ\",\n        -9.731327056884766\n      ],\n      [\n        \"▁帯\",\n        -9.731901168823242\n      ],\n      [\n        \"経歴\",\n        -9.7321195602417\n      ],\n      [\n        \"台\",\n        -9.732391357421875\n      ],\n      [\n        \"▁タトラス\",\n        -9.73267650604248\n      ],\n      [\n        \"▁パソコン\",\n        -9.734151840209961\n      ],\n      [\n        \"▁2006\",\n        -9.734916687011719\n      ],\n      [\n        \"▁運行\",\n        -9.7349853515625\n      ],\n      [\n        \"▁工業\",\n        -9.73500919342041\n      ],\n      [\n        \"▁もって\",\n        -9.735615730285645\n      ],\n      [\n        \"▁剤\",\n        -9.735794067382812\n      ],\n      [\n        \"▁く\",\n        -9.736555099487305\n      ],\n      [\n        \"▁段階\",\n        -9.736753463745117\n      ],\n      [\n        \"▁反応\",\n        -9.737348556518555\n      ],\n      [\n        \"▁市民\",\n        -9.738125801086426\n      ],\n      [\n        \"▁展示\",\n        -9.738419532775879\n      ],\n      [\n        \"▁あの\",\n        -9.73848819732666\n      ],\n      [\n        \"▁操作\",\n        -9.738727569580078\n      ],\n      [\n        \"▁v\",\n        -9.739588737487793\n      ],\n      [\n        \"▁神戸\",\n        -9.740635871887207\n      ],\n      [\n        \"▁猫\",\n        -9.742058753967285\n      ],\n      [\n        \"2015\",\n        -9.743157386779785\n      ],\n      [\n        \"▁江戸\",\n        -9.74374771118164\n      ],\n      [\n        \"ブル\",\n        -9.743819236755371\n      ],\n      [\n        \"先\",\n        -9.74451732635498\n      ],\n      [\n        \"▁植物\",\n        -9.746087074279785\n      ],\n      [\n        \"▁印象\",\n        -9.74630069732666\n      ],\n      [\n        \"花\",\n        -9.746511459350586\n      ],\n      [\n        \"▁ベース\",\n        -9.746769905090332\n      ],\n      [\n        \"▁週\",\n        -9.747243881225586\n      ],\n      [\n        \"▁ロック\",\n        -9.74744701385498\n      ],\n      [\n        \"安\",\n        -9.747640609741211\n      ],\n      [\n        \"入\",\n        -9.74779224395752\n      ],\n      [\n        \"▁推進\",\n        -9.748215675354004\n      ],\n      [\n        \"▁分析\",\n        -9.748443603515625\n      ],\n      [\n        \"▁DVD\",\n        -9.749763488769531\n      ],\n      [\n        \"▁いわ\",\n        -9.750655174255371\n      ],\n      [\n        \"▁福島\",\n        -9.751523971557617\n      ],\n      [\n        \"▁港\",\n        -9.752480506896973\n      ],\n      [\n        \"20\",\n        -9.752487182617188\n      ],\n      [\n        \"▁装置\",\n        -9.752630233764648\n      ],\n      [\n        \"レス\",\n        -9.753190994262695\n      ],\n      [\n        \"▁ひ\",\n        -9.754096031188965\n      ],\n      [\n        \"▁実行\",\n        -9.754792213439941\n      ],\n      [\n        \"▁秒\",\n        -9.755435943603516\n      ],\n      [\n        \"▁地元\",\n        -9.755637168884277\n      ],\n      [\n        \"▁社員\",\n        -9.756723403930664\n      ],\n      [\n        \"▁冬\",\n        -9.757670402526855\n      ],\n      [\n        \"▁80\",\n        -9.758087158203125\n      ],\n      [\n        \"▁流\",\n        -9.758185386657715\n      ],\n      [\n        \"ホ\",\n        -9.758199691772461\n      ],\n      [\n        \"▁聞いて\",\n        -9.75831127166748\n      ],\n      [\n        \"▁メ\",\n        -9.759099960327148\n      ],\n      [\n        \"▁込ま\",\n        -9.759550094604492\n      ],\n      [\n        \"外\",\n        -9.759733200073242\n      ],\n      [\n        \"▁枠\",\n        -9.76075267791748\n      ],\n      [\n        \"▁届け\",\n        -9.761466026306152\n      ],\n      [\n        \"▁領\",\n        -9.761734008789062\n      ],\n      [\n        \"▁教えて\",\n        -9.761959075927734\n      ],\n      [\n        \"プロ\",\n        -9.762396812438965\n      ],\n      [\n        \"▁死去\",\n        -9.76257038116455\n      ],\n      [\n        \"▁and\",\n        -9.762683868408203\n      ],\n      [\n        \"▁買取\",\n        -9.7628812789917\n      ],\n      [\n        \"動\",\n        -9.76331901550293\n      ],\n      [\n        \"▁美容\",\n        -9.763511657714844\n      ],\n      [\n        \"主\",\n        -9.763663291931152\n      ],\n      [\n        \"門\",\n        -9.764033317565918\n      ],\n      [\n        \"in\",\n        -9.764080047607422\n      ],\n      [\n        \"▁くれた\",\n        -9.764153480529785\n      ],\n      [\n        \"▁最後の\",\n        -9.765297889709473\n      ],\n      [\n        \"▁》\",\n        -9.76552677154541\n      ],\n      [\n        \"▁丸\",\n        -9.765812873840332\n      ],\n      [\n        \"▁引き\",\n        -9.766064643859863\n      ],\n      [\n        \"▁熊本\",\n        -9.766520500183105\n      ],\n      [\n        \"▁シーン\",\n        -9.766648292541504\n      ],\n      [\n        \"食\",\n        -9.767443656921387\n      ],\n      [\n        \"O\",\n        -9.76776123046875\n      ],\n      [\n        \"▁得る\",\n        -9.768096923828125\n      ],\n      [\n        \"▁さまざまな\",\n        -9.768264770507812\n      ],\n      [\n        \"▁伴い\",\n        -9.768643379211426\n      ],\n      [\n        \"位\",\n        -9.768988609313965\n      ],\n      [\n        \"g\",\n        -9.769533157348633\n      ],\n      [\n        \"治\",\n        -9.770206451416016\n      ],\n      [\n        \"▁支配\",\n        -9.770397186279297\n      ],\n      [\n        \"▁批判\",\n        -9.771232604980469\n      ],\n      [\n        \"▁食品\",\n        -9.771415710449219\n      ],\n      [\n        \"▁調整\",\n        -9.77178955078125\n      ],\n      [\n        \"▁項\",\n        -9.772028923034668\n      ],\n      [\n        \"▁介護\",\n        -9.772472381591797\n      ],\n      [\n        \"▁500\",\n        -9.773604393005371\n      ],\n      [\n        \"▁園\",\n        -9.773635864257812\n      ],\n      [\n        \"▁入れて\",\n        -9.774152755737305\n      ],\n      [\n        \"▁03\",\n        -9.774852752685547\n      ],\n      [\n        \"▁途中\",\n        -9.774953842163086\n      ],\n      [\n        \"▁務め\",\n        -9.77507495880127\n      ],\n      [\n        \"▁高速\",\n        -9.77523422241211\n      ],\n      [\n        \"レン\",\n        -9.775471687316895\n      ],\n      [\n        \"▁講師\",\n        -9.776126861572266\n      ],\n      [\n        \"▁通じて\",\n        -9.776281356811523\n      ],\n      [\n        \"▁要素\",\n        -9.776373863220215\n      ],\n      [\n        \"▁大人\",\n        -9.77657699584961\n      ],\n      [\n        \"▁バージョン\",\n        -9.776911735534668\n      ],\n      [\n        \"▁審査\",\n        -9.777459144592285\n      ],\n      [\n        \"橋\",\n        -9.777929306030273\n      ],\n      [\n        \"▁支持\",\n        -9.778417587280273\n      ],\n      [\n        \"▁早く\",\n        -9.77906322479248\n      ],\n      [\n        \"▁地球\",\n        -9.779153823852539\n      ],\n      [\n        \"里\",\n        -9.77973461151123\n      ],\n      [\n        \"▁達成\",\n        -9.779959678649902\n      ],\n      [\n        \"▁学者\",\n        -9.780123710632324\n      ],\n      [\n        \"今日\",\n        -9.780156135559082\n      ],\n      [\n        \"▁リスト\",\n        -9.78043270111084\n      ],\n      [\n        \"▁認識\",\n        -9.780571937561035\n      ],\n      [\n        \"“\",\n        -9.78189754486084\n      ],\n      [\n        \"▁層\",\n        -9.782299995422363\n      ],\n      [\n        \"▁少なく\",\n        -9.783096313476562\n      ],\n      [\n        \"▁来た\",\n        -9.783370018005371\n      ],\n      [\n        \"▁生徒\",\n        -9.783507347106934\n      ],\n      [\n        \"▁らしい\",\n        -9.783941268920898\n      ],\n      [\n        \"▁症状\",\n        -9.784468650817871\n      ],\n      [\n        \"▁原\",\n        -9.785004615783691\n      ],\n      [\n        \"▁諸\",\n        -9.785611152648926\n      ],\n      [\n        \"▁★\",\n        -9.785619735717773\n      ],\n      [\n        \"▁日間\",\n        -9.785685539245605\n      ],\n      [\n        \"▁プラン\",\n        -9.78606128692627\n      ],\n      [\n        \"▁02\",\n        -9.786476135253906\n      ],\n      [\n        \"▁座\",\n        -9.786541938781738\n      ],\n      [\n        \"▁まず\",\n        -9.787518501281738\n      ],\n      [\n        \"▁48\",\n        -9.787557601928711\n      ],\n      [\n        \"▁相\",\n        -9.7884521484375\n      ],\n      [\n        \"▁雨\",\n        -9.788961410522461\n      ],\n      [\n        \"之\",\n        -9.789571762084961\n      ],\n      [\n        \"通\",\n        -9.789884567260742\n      ],\n      [\n        \"江\",\n        -9.791014671325684\n      ],\n      [\n        \"2010\",\n        -9.791217803955078\n      ],\n      [\n        \"▁便\",\n        -9.791704177856445\n      ],\n      [\n        \"▁求め\",\n        -9.792130470275879\n      ],\n      [\n        \"▁続ける\",\n        -9.792540550231934\n      ],\n      [\n        \"▁長い\",\n        -9.79269790649414\n      ],\n      [\n        \"定\",\n        -9.792875289916992\n      ],\n      [\n        \"▁友人\",\n        -9.793076515197754\n      ],\n      [\n        \"▁熱\",\n        -9.794096946716309\n      ],\n      [\n        \"▁貢献\",\n        -9.794193267822266\n      ],\n      [\n        \"▁観\",\n        -9.794331550598145\n      ],\n      [\n        \"音\",\n        -9.795429229736328\n      ],\n      [\n        \"et\",\n        -9.795744895935059\n      ],\n      [\n        \"▁役割\",\n        -9.796101570129395\n      ],\n      [\n        \"▁皆様\",\n        -9.796157836914062\n      ],\n      [\n        \"▁基礎\",\n        -9.796387672424316\n      ],\n      [\n        \"▁欲しい\",\n        -9.796420097351074\n      ],\n      [\n        \"▁ファッション\",\n        -9.796551704406738\n      ],\n      [\n        \"車\",\n        -9.79685115814209\n      ],\n      [\n        \"▁楽曲\",\n        -9.79736328125\n      ],\n      [\n        \"▁携帯\",\n        -9.799043655395508\n      ],\n      [\n        \"▁なかなか\",\n        -9.79911994934082\n      ],\n      [\n        \"▁課題\",\n        -9.799156188964844\n      ],\n      [\n        \"▁かかる\",\n        -9.799199104309082\n      ],\n      [\n        \"▁弾\",\n        -9.79965591430664\n      ],\n      [\n        \"w\",\n        -9.800995826721191\n      ],\n      [\n        \"▁1000\",\n        -9.80109977722168\n      ],\n      [\n        \"▁札幌\",\n        -9.801675796508789\n      ],\n      [\n        \"用\",\n        -9.802040100097656\n      ],\n      [\n        \"ックス\",\n        -9.802068710327148\n      ],\n      [\n        \"en\",\n        -9.802326202392578\n      ],\n      [\n        \"▁安定\",\n        -9.802659034729004\n      ],\n      [\n        \"▁示す\",\n        -9.8032865524292\n      ],\n      [\n        \"▁負担\",\n        -9.804300308227539\n      ],\n      [\n        \"▁07\",\n        -9.804608345031738\n      ],\n      [\n        \"▁小さな\",\n        -9.805183410644531\n      ],\n      [\n        \"2014\",\n        -9.805909156799316\n      ],\n      [\n        \"▁<\",\n        -9.806005477905273\n      ],\n      [\n        \"▁つけ\",\n        -9.806180953979492\n      ],\n      [\n        \"▁作って\",\n        -9.806605339050293\n      ],\n      [\n        \"▁FC\",\n        -9.806702613830566\n      ],\n      [\n        \"吉\",\n        -9.807188987731934\n      ],\n      [\n        \"▁ぬ\",\n        -9.80739974975586\n      ],\n      [\n        \"▁少年\",\n        -9.808112144470215\n      ],\n      [\n        \"形\",\n        -9.8108549118042\n      ],\n      [\n        \"▁通\",\n        -9.812334060668945\n      ],\n      [\n        \"いた\",\n        -9.812373161315918\n      ],\n      [\n        \"▁自宅\",\n        -9.81245231628418\n      ],\n      [\n        \"▁交流\",\n        -9.81337833404541\n      ],\n      [\n        \"▁派遣\",\n        -9.813925743103027\n      ],\n      [\n        \"▁楽しみ\",\n        -9.814337730407715\n      ],\n      [\n        \"▁切り\",\n        -9.814998626708984\n      ],\n      [\n        \"▁バッグ\",\n        -9.81505298614502\n      ],\n      [\n        \"ヌ\",\n        -9.81557559967041\n      ],\n      [\n        \"▁確保\",\n        -9.815838813781738\n      ],\n      [\n        \"ガー\",\n        -9.816351890563965\n      ],\n      [\n        \"es\",\n        -9.817941665649414\n      ],\n      [\n        \"▁感じる\",\n        -9.818463325500488\n      ],\n      [\n        \"▁明らかに\",\n        -9.818746566772461\n      ],\n      [\n        \"▁08\",\n        -9.818929672241211\n      ],\n      [\n        \"▁結成\",\n        -9.819202423095703\n      ],\n      [\n        \"▁信頼\",\n        -9.820235252380371\n      ],\n      [\n        \"▁^\",\n        -9.821073532104492\n      ],\n      [\n        \"▁完全\",\n        -9.821101188659668\n      ],\n      [\n        \"▁生まれた\",\n        -9.82243824005127\n      ],\n      [\n        \"▁何度\",\n        -9.822766304016113\n      ],\n      [\n        \"▁絶対\",\n        -9.822851181030273\n      ],\n      [\n        \"▁70\",\n        -9.82290267944336\n      ],\n      [\n        \"例えば\",\n        -9.823290824890137\n      ],\n      [\n        \"▁フ\",\n        -9.823381423950195\n      ],\n      [\n        \"▁後半\",\n        -9.824298858642578\n      ],\n      [\n        \"17\",\n        -9.82461166381836\n      ],\n      [\n        \"▁口コミ\",\n        -9.825362205505371\n      ],\n      [\n        \"▁標準\",\n        -9.8256196975708\n      ],\n      [\n        \"▁実験\",\n        -9.826081275939941\n      ],\n      [\n        \"岡\",\n        -9.826340675354004\n      ],\n      [\n        \"▁明\",\n        -9.827790260314941\n      ],\n      [\n        \"▁成立\",\n        -9.827868461608887\n      ],\n      [\n        \"▁09\",\n        -9.828660011291504\n      ],\n      [\n        \"電\",\n        -9.828717231750488\n      ],\n      [\n        \"▁大正\",\n        -9.830829620361328\n      ],\n      [\n        \"▁年齢\",\n        -9.831101417541504\n      ],\n      [\n        \"▁なか\",\n        -9.832196235656738\n      ],\n      [\n        \"▁飛行\",\n        -9.832578659057617\n      ],\n      [\n        \"▁メイン\",\n        -9.833282470703125\n      ],\n      [\n        \"E\",\n        -9.83427619934082\n      ],\n      [\n        \"信\",\n        -9.836231231689453\n      ],\n      [\n        \"▁どの\",\n        -9.836251258850098\n      ],\n      [\n        \"is\",\n        -9.836854934692383\n      ],\n      [\n        \"▁取締\",\n        -9.837202072143555\n      ],\n      [\n        \"▁七\",\n        -9.837688446044922\n      ],\n      [\n        \"▁傾向\",\n        -9.838119506835938\n      ],\n      [\n        \"▁体制\",\n        -9.838483810424805\n      ],\n      [\n        \"▁拠点\",\n        -9.838560104370117\n      ],\n      [\n        \"▁長野\",\n        -9.83874797821045\n      ],\n      [\n        \"▁ホール\",\n        -9.838841438293457\n      ],\n      [\n        \"ろう\",\n        -9.839844703674316\n      ],\n      [\n        \"松\",\n        -9.840088844299316\n      ],\n      [\n        \"▁席\",\n        -9.840104103088379\n      ],\n      [\n        \"▁ローマ\",\n        -9.840224266052246\n      ],\n      [\n        \"▁所有\",\n        -9.84060287475586\n      ],\n      [\n        \"▁世代\",\n        -9.840827941894531\n      ],\n      [\n        \"ぐ\",\n        -9.840850830078125\n      ],\n      [\n        \"▁職\",\n        -9.841645240783691\n      ],\n      [\n        \"▁ネットワーク\",\n        -9.841706275939941\n      ],\n      [\n        \"on\",\n        -9.842020988464355\n      ],\n      [\n        \"▁機械\",\n        -9.842175483703613\n      ],\n      [\n        \"市\",\n        -9.84251880645752\n      ],\n      [\n        \"▁兵庫\",\n        -9.842728614807129\n      ],\n      [\n        \"▁ふ\",\n        -9.843551635742188\n      ],\n      [\n        \"▁脳\",\n        -9.84370231628418\n      ],\n      [\n        \"▁2005\",\n        -9.84385871887207\n      ],\n      [\n        \"▁スペイン\",\n        -9.84444808959961\n      ],\n      [\n        \"▁働き\",\n        -9.845011711120605\n      ],\n      [\n        \"▁レビュー\",\n        -9.845841407775879\n      ],\n      [\n        \"▁であれば\",\n        -9.846051216125488\n      ],\n      [\n        \"2012\",\n        -9.846256256103516\n      ],\n      [\n        \"▁現場\",\n        -9.846266746520996\n      ],\n      [\n        \"▁短\",\n        -9.846426010131836\n      ],\n      [\n        \"▁込む\",\n        -9.846538543701172\n      ],\n      [\n        \"▁強化\",\n        -9.846774101257324\n      ],\n      [\n        \"』\",\n        -9.847041130065918\n      ],\n      [\n        \"▁岡山\",\n        -9.847591400146484\n      ],\n      [\n        \"▁ホ\",\n        -9.84764289855957\n      ],\n      [\n        \"ur\",\n        -9.847805976867676\n      ],\n      [\n        \"その他\",\n        -9.848577499389648\n      ],\n      [\n        \"▁弁護\",\n        -9.848613739013672\n      ],\n      [\n        \"れる\",\n        -9.848949432373047\n      ],\n      [\n        \"▁やる\",\n        -9.849288940429688\n      ],\n      [\n        \"▁方式\",\n        -9.84946060180664\n      ],\n      [\n        \"▁大きい\",\n        -9.85106086730957\n      ],\n      [\n        \"▁気軽に\",\n        -9.851109504699707\n      ],\n      [\n        \"2013\",\n        -9.852550506591797\n      ],\n      [\n        \"ゼ\",\n        -9.85265827178955\n      ],\n      [\n        \"▁悪\",\n        -9.852808952331543\n      ],\n      [\n        \"▁話し\",\n        -9.853215217590332\n      ],\n      [\n        \"▁計算\",\n        -9.85332202911377\n      ],\n      [\n        \"▁聖\",\n        -9.856243133544922\n      ],\n      [\n        \"▁05\",\n        -9.85625171661377\n      ],\n      [\n        \"▁仕様\",\n        -9.856316566467285\n      ],\n      [\n        \"サー\",\n        -9.856477737426758\n      ],\n      [\n        \"▁節\",\n        -9.857646942138672\n      ],\n      [\n        \"▁温泉\",\n        -9.857881546020508\n      ],\n      [\n        \"ザー\",\n        -9.85834789276123\n      ],\n      [\n        \"▁公演\",\n        -9.858611106872559\n      ],\n      [\n        \"武\",\n        -9.859546661376953\n      ],\n      [\n        \"全\",\n        -9.859575271606445\n      ],\n      [\n        \"▁きっかけ\",\n        -9.860132217407227\n      ],\n      [\n        \"▁再生\",\n        -9.860542297363281\n      ],\n      [\n        \"▁า\",\n        -9.860856056213379\n      ],\n      [\n        \"▁ポ\",\n        -9.861873626708984\n      ],\n      [\n        \"▁オイル\",\n        -9.862499237060547\n      ],\n      [\n        \"▁書籍\",\n        -9.863128662109375\n      ],\n      [\n        \"ランド\",\n        -9.863577842712402\n      ],\n      [\n        \"ファ\",\n        -9.863724708557129\n      ],\n      [\n        \"▁成分\",\n        -9.863933563232422\n      ],\n      [\n        \"▁買い\",\n        -9.864587783813477\n      ],\n      [\n        \"▁受験\",\n        -9.86484432220459\n      ],\n      [\n        \"馬\",\n        -9.864850997924805\n      ],\n      [\n        \"▁シュ\",\n        -9.865108489990234\n      ],\n      [\n        \"▁ガ\",\n        -9.865151405334473\n      ],\n      [\n        \"2011\",\n        -9.865311622619629\n      ],\n      [\n        \"▁おら\",\n        -9.865713119506836\n      ],\n      [\n        \"▁準\",\n        -9.866198539733887\n      ],\n      [\n        \"▁見える\",\n        -9.86715316772461\n      ],\n      [\n        \"▁周年\",\n        -9.867290496826172\n      ],\n      [\n        \"よ\",\n        -9.867574691772461\n      ],\n      [\n        \"▁04\",\n        -9.867718696594238\n      ],\n      [\n        \"or\",\n        -9.868247985839844\n      ],\n      [\n        \"▁伝統\",\n        -9.869064331054688\n      ],\n      [\n        \"▁立ち\",\n        -9.869075775146484\n      ],\n      [\n        \"▁@\",\n        -9.869205474853516\n      ],\n      [\n        \"▁ビ\",\n        -9.869688034057617\n      ],\n      [\n        \"▁そうな\",\n        -9.869930267333984\n      ],\n      [\n        \"▁2022\",\n        -9.869935035705566\n      ],\n      [\n        \"▁重要\",\n        -9.870010375976562\n      ],\n      [\n        \"▁輸送\",\n        -9.870285034179688\n      ],\n      [\n        \"▁90\",\n        -9.870652198791504\n      ],\n      [\n        \"▁ほしい\",\n        -9.872106552124023\n      ],\n      [\n        \"▁中古\",\n        -9.872332572937012\n      ],\n      [\n        \"▁段\",\n        -9.872566223144531\n      ],\n      [\n        \"▁今年\",\n        -9.872580528259277\n      ],\n      [\n        \"▁山口\",\n        -9.873000144958496\n      ],\n      [\n        \"▁選ば\",\n        -9.873627662658691\n      ],\n      [\n        \"▁候補\",\n        -9.873671531677246\n      ],\n      [\n        \"者\",\n        -9.874621391296387\n      ],\n      [\n        \"▁従\",\n        -9.87508487701416\n      ],\n      [\n        \"▁オー\",\n        -9.875393867492676\n      ],\n      [\n        \"▁奈良\",\n        -9.875592231750488\n      ],\n      [\n        \"30\",\n        -9.875690460205078\n      ],\n      [\n        \"▁カップ\",\n        -9.875895500183105\n      ],\n      [\n        \"理\",\n        -9.876387596130371\n      ],\n      [\n        \"▁挑戦\",\n        -9.876545906066895\n      ],\n      [\n        \"▁肉\",\n        -9.877068519592285\n      ],\n      [\n        \"▁増えて\",\n        -9.877362251281738\n      ],\n      [\n        \"毛\",\n        -9.877426147460938\n      ],\n      [\n        \"▁雰囲気\",\n        -9.877854347229004\n      ],\n      [\n        \"▁入った\",\n        -9.878093719482422\n      ],\n      [\n        \"▁政権\",\n        -9.878161430358887\n      ],\n      [\n        \"▁会場\",\n        -9.87833309173584\n      ],\n      [\n        \"Q\",\n        -9.87929916381836\n      ],\n      [\n        \"▁追い\",\n        -9.879470825195312\n      ],\n      [\n        \"▁収入\",\n        -9.880187034606934\n      ],\n      [\n        \"▁反\",\n        -9.880257606506348\n      ],\n      [\n        \"▁界\",\n        -9.880558013916016\n      ],\n      [\n        \"▁マーク\",\n        -9.880746841430664\n      ],\n      [\n        \"▁引退\",\n        -9.881242752075195\n      ],\n      [\n        \"▁連邦\",\n        -9.881245613098145\n      ],\n      [\n        \"▁勤務\",\n        -9.881362915039062\n      ],\n      [\n        \"▁勝ち\",\n        -9.88211727142334\n      ],\n      [\n        \"▁長崎\",\n        -9.882742881774902\n      ],\n      [\n        \"▁インド\",\n        -9.883099555969238\n      ],\n      [\n        \"▁作戦\",\n        -9.88329792022705\n      ],\n      [\n        \"▁修正\",\n        -9.883466720581055\n      ],\n      [\n        \"▁年生\",\n        -9.883605003356934\n      ],\n      [\n        \"▁やはり\",\n        -9.883666038513184\n      ],\n      [\n        \"白\",\n        -9.884025573730469\n      ],\n      [\n        \"▁生物\",\n        -9.884247779846191\n      ],\n      [\n        \"U\",\n        -9.884417533874512\n      ],\n      [\n        \"▁スタジオ\",\n        -9.88457202911377\n      ],\n      [\n        \"▁売り\",\n        -9.88546371459961\n      ],\n      [\n        \"▁Q\",\n        -9.885534286499023\n      ],\n      [\n        \"▁対戦\",\n        -9.885720252990723\n      ],\n      [\n        \"▁ツール\",\n        -9.88582706451416\n      ],\n      [\n        \"▁付近\",\n        -9.886701583862305\n      ],\n      [\n        \"▁勧め\",\n        -9.886811256408691\n      ],\n      [\n        \"▁青\",\n        -9.887517929077148\n      ],\n      [\n        \"▁もらう\",\n        -9.887530326843262\n      ],\n      [\n        \"▁信\",\n        -9.887986183166504\n      ],\n      [\n        \"▁領域\",\n        -9.888477325439453\n      ],\n      [\n        \"▁作家\",\n        -9.88862419128418\n      ],\n      [\n        \"▁文学\",\n        -9.888956069946289\n      ],\n      [\n        \"ーン\",\n        -9.889552116394043\n      ],\n      [\n        \"▁ニューヨーク\",\n        -9.889625549316406\n      ],\n      [\n        \"▁込んで\",\n        -9.8901948928833\n      ],\n      [\n        \"太\",\n        -9.891684532165527\n      ],\n      [\n        \"▁千\",\n        -9.891776084899902\n      ],\n      [\n        \"司\",\n        -9.892033576965332\n      ],\n      [\n        \"▁さま\",\n        -9.89237117767334\n      ],\n      [\n        \"▁保証\",\n        -9.892736434936523\n      ],\n      [\n        \"▁改正\",\n        -9.892755508422852\n      ],\n      [\n        \"▁連携\",\n        -9.892776489257812\n      ],\n      [\n        \"発\",\n        -9.892852783203125\n      ],\n      [\n        \"▁使った\",\n        -9.893095016479492\n      ],\n      [\n        \"▁視聴\",\n        -9.893460273742676\n      ],\n      [\n        \"身\",\n        -9.893956184387207\n      ],\n      [\n        \"▁言え\",\n        -9.894328117370605\n      ],\n      [\n        \"▁常に\",\n        -9.89550495147705\n      ],\n      [\n        \"▁テ\",\n        -9.895798683166504\n      ],\n      [\n        \"▁毛\",\n        -9.897683143615723\n      ],\n      [\n        \"▁よれば\",\n        -9.898000717163086\n      ],\n      [\n        \"▁共和\",\n        -9.89807415008545\n      ],\n      [\n        \"▁スマホ\",\n        -9.899303436279297\n      ],\n      [\n        \"▁住民\",\n        -9.89949893951416\n      ],\n      [\n        \"▁もらい\",\n        -9.900069236755371\n      ],\n      [\n        \"▁感謝\",\n        -9.901062965393066\n      ],\n      [\n        \"義\",\n        -9.901118278503418\n      ],\n      [\n        \"▁了承\",\n        -9.901200294494629\n      ],\n      [\n        \"▁め\",\n        -9.90145492553711\n      ],\n      [\n        \"▁グッズ\",\n        -9.901483535766602\n      ],\n      [\n        \"▁女優\",\n        -9.90290641784668\n      ],\n      [\n        \"▁集中\",\n        -9.90324878692627\n      ],\n      [\n        \"ピ\",\n        -9.904254913330078\n      ],\n      [\n        \"▁ホームページ\",\n        -9.904516220092773\n      ],\n      [\n        \"▁聞き\",\n        -9.904743194580078\n      ],\n      [\n        \"来歴\",\n        -9.904760360717773\n      ],\n      [\n        \"ビー\",\n        -9.904809951782227\n      ],\n      [\n        \"▁記\",\n        -9.904891967773438\n      ],\n      [\n        \"▁停止\",\n        -9.907637596130371\n      ],\n      [\n        \"葉\",\n        -9.907777786254883\n      ],\n      [\n        \"v\",\n        -9.908086776733398\n      ],\n      [\n        \"たり\",\n        -9.908323287963867\n      ],\n      [\n        \"▁ただ\",\n        -9.908435821533203\n      ],\n      [\n        \"▁ソフトウェア\",\n        -9.908563613891602\n      ],\n      [\n        \"▁満足\",\n        -9.908761024475098\n      ],\n      [\n        \"▁適用\",\n        -9.908761024475098\n      ],\n      [\n        \"▁可\",\n        -9.909123420715332\n      ],\n      [\n        \"ライ\",\n        -9.909452438354492\n      ],\n      [\n        \"▁乗り\",\n        -9.90951919555664\n      ],\n      [\n        \"戸\",\n        -9.909616470336914\n      ],\n      [\n        \"▁選出\",\n        -9.909625053405762\n      ],\n      [\n        \"▁ソ\",\n        -9.909756660461426\n      ],\n      [\n        \"▁医\",\n        -9.91008472442627\n      ],\n      [\n        \"▁y\",\n        -9.910374641418457\n      ],\n      [\n        \"▁キャンペーン\",\n        -9.910637855529785\n      ],\n      [\n        \"▁減少\",\n        -9.911046028137207\n      ],\n      [\n        \"▁現実\",\n        -9.911221504211426\n      ],\n      [\n        \"▁禁止\",\n        -9.911447525024414\n      ],\n      [\n        \"▁広\",\n        -9.911596298217773\n      ],\n      [\n        \"▁見え\",\n        -9.911869049072266\n      ],\n      [\n        \"▁メッセージ\",\n        -9.912237167358398\n      ],\n      [\n        \"室\",\n        -9.913111686706543\n      ],\n      [\n        \"▁定期\",\n        -9.91317081451416\n      ],\n      [\n        \"▁波\",\n        -9.913596153259277\n      ],\n      [\n        \"▁資金\",\n        -9.913832664489746\n      ],\n      [\n        \"▁復帰\",\n        -9.914484024047852\n      ],\n      [\n        \"▁野\",\n        -9.91489315032959\n      ],\n      [\n        \"▁画\",\n        -9.914993286132812\n      ],\n      [\n        \"▁メニュー\",\n        -9.915477752685547\n      ],\n      [\n        \"▁計\",\n        -9.915624618530273\n      ],\n      [\n        \"▁反対\",\n        -9.916123390197754\n      ],\n      [\n        \"▁夫\",\n        -9.916909217834473\n      ],\n      [\n        \"▁岩\",\n        -9.916916847229004\n      ],\n      [\n        \"▁歯\",\n        -9.91716480255127\n      ],\n      [\n        \"院\",\n        -9.91755199432373\n      ],\n      [\n        \"▁ピ\",\n        -9.91798210144043\n      ],\n      [\n        \"el\",\n        -9.918017387390137\n      ],\n      [\n        \"▁マイ\",\n        -9.918325424194336\n      ],\n      [\n        \"▁向けて\",\n        -9.918947219848633\n      ],\n      [\n        \"▁プレゼント\",\n        -9.91958236694336\n      ],\n      [\n        \"▁鹿児島\",\n        -9.919906616210938\n      ],\n      [\n        \"▁始める\",\n        -9.920415878295898\n      ],\n      [\n        \"▁感じて\",\n        -9.920454025268555\n      ],\n      [\n        \"▁new\",\n        -9.9207124710083\n      ],\n      [\n        \"語\",\n        -9.921399116516113\n      ],\n      [\n        \"z\",\n        -9.921895980834961\n      ],\n      [\n        \"▁記述\",\n        -9.922613143920898\n      ],\n      [\n        \"ジャ\",\n        -9.922892570495605\n      ],\n      [\n        \"▁06\",\n        -9.923717498779297\n      ],\n      [\n        \"▁整理\",\n        -9.923783302307129\n      ],\n      [\n        \"▁盤\",\n        -9.924186706542969\n      ],\n      [\n        \"▁~\",\n        -9.924206733703613\n      ],\n      [\n        \"▁全員\",\n        -9.924711227416992\n      ],\n      [\n        \"▁理事\",\n        -9.92505931854248\n      ],\n      [\n        \"▁選び\",\n        -9.926429748535156\n      ],\n      [\n        \"雄\",\n        -9.926702499389648\n      ],\n      [\n        \"▁鉄\",\n        -9.927002906799316\n      ],\n      [\n        \"▁そういう\",\n        -9.9276762008667\n      ],\n      [\n        \"▁続く\",\n        -9.928672790527344\n      ],\n      [\n        \"▁良\",\n        -9.928754806518555\n      ],\n      [\n        \"▁幅\",\n        -9.92972469329834\n      ],\n      [\n        \"ど\",\n        -9.930231094360352\n      ],\n      [\n        \"▁大変\",\n        -9.93073844909668\n      ],\n      [\n        \"▁効率\",\n        -9.93165397644043\n      ],\n      [\n        \"▁リスク\",\n        -9.93179702758789\n      ],\n      [\n        \"フィ\",\n        -9.932415962219238\n      ],\n      [\n        \"▁すでに\",\n        -9.932429313659668\n      ],\n      [\n        \"最近\",\n        -9.932449340820312\n      ],\n      [\n        \"2009\",\n        -9.93258285522461\n      ],\n      [\n        \"▁待ち\",\n        -9.93264389038086\n      ],\n      [\n        \"別\",\n        -9.933329582214355\n      ],\n      [\n        \"▁配置\",\n        -9.934012413024902\n      ],\n      [\n        \"する\",\n        -9.934835433959961\n      ],\n      [\n        \"▁六\",\n        -9.935032844543457\n      ],\n      [\n        \"▁不足\",\n        -9.935072898864746\n      ],\n      [\n        \"▁連載\",\n        -9.935108184814453\n      ],\n      [\n        \"▁[[\",\n        -9.935699462890625\n      ],\n      [\n        \"▁日々\",\n        -9.935853958129883\n      ],\n      [\n        \"▁え\",\n        -9.936219215393066\n      ],\n      [\n        \"ベル\",\n        -9.936220169067383\n      ],\n      [\n        \"シャ\",\n        -9.936355590820312\n      ],\n      [\n        \"▁ペ\",\n        -9.936600685119629\n      ],\n      [\n        \"種\",\n        -9.936880111694336\n      ],\n      [\n        \"▁ブルー\",\n        -9.937203407287598\n      ],\n      [\n        \"▁化学\",\n        -9.93748950958252\n      ],\n      [\n        \"▁なぜ\",\n        -9.939087867736816\n      ],\n      [\n        \"{\",\n        -9.939215660095215\n      ],\n      [\n        \"▁発電\",\n        -9.93923568725586\n      ],\n      [\n        \"量\",\n        -9.939604759216309\n      ],\n      [\n        \"ップ\",\n        -9.940277099609375\n      ],\n      [\n        \"▁一切\",\n        -9.94074821472168\n      ],\n      [\n        \"▁予想\",\n        -9.940813064575195\n      ],\n      [\n        \"ヴ\",\n        -9.9408597946167\n      ],\n      [\n        \"▁脱毛\",\n        -9.941747665405273\n      ],\n      [\n        \"▁ウェブ\",\n        -9.941815376281738\n      ],\n      [\n        \"▁以内\",\n        -9.942171096801758\n      ],\n      [\n        \"▁陸軍\",\n        -9.942253112792969\n      ],\n      [\n        \"久\",\n        -9.942272186279297\n      ],\n      [\n        \"▁下記\",\n        -9.942540168762207\n      ],\n      [\n        \"▁各地\",\n        -9.942705154418945\n      ],\n      [\n        \"▁民\",\n        -9.942933082580566\n      ],\n      [\n        \"▁加え\",\n        -9.943326950073242\n      ],\n      [\n        \"16\",\n        -9.943882942199707\n      ],\n      [\n        \"当時\",\n        -9.945001602172852\n      ],\n      [\n        \"▁証明\",\n        -9.945926666259766\n      ],\n      [\n        \"▁ステージ\",\n        -9.94594669342041\n      ],\n      [\n        \"▁ニュー\",\n        -9.94623851776123\n      ],\n      [\n        \"▁実践\",\n        -9.946868896484375\n      ],\n      [\n        \"▁コート\",\n        -9.947091102600098\n      ],\n      [\n        \"▁福祉\",\n        -9.94733715057373\n      ],\n      [\n        \"▁茶\",\n        -9.947966575622559\n      ],\n      [\n        \"▁ボ\",\n        -9.948623657226562\n      ],\n      [\n        \"▁方針\",\n        -9.948668479919434\n      ],\n      [\n        \"▁方面\",\n        -9.948680877685547\n      ],\n      [\n        \"▁品質\",\n        -9.948710441589355\n      ],\n      [\n        \"▁ジ\",\n        -9.949323654174805\n      ],\n      [\n        \"▁字\",\n        -9.9495849609375\n      ],\n      [\n        \"▁ございました\",\n        -9.949585914611816\n      ],\n      [\n        \"▁同様に\",\n        -9.949928283691406\n      ],\n      [\n        \"▁定義\",\n        -9.950343132019043\n      ],\n      [\n        \"▁ガス\",\n        -9.950465202331543\n      ],\n      [\n        \"▁岐阜\",\n        -9.950510025024414\n      ],\n      [\n        \"▁博士\",\n        -9.9514799118042\n      ],\n      [\n        \"▁不安\",\n        -9.952643394470215\n      ],\n      [\n        \"▁報道\",\n        -9.9528226852417\n      ],\n      [\n        \"▁取扱\",\n        -9.952849388122559\n      ],\n      [\n        \"▁皆さん\",\n        -9.953082084655762\n      ],\n      [\n        \"■\",\n        -9.953371047973633\n      ],\n      [\n        \"▁Web\",\n        -9.953761100769043\n      ],\n      [\n        \"▁のである\",\n        -9.95397663116455\n      ],\n      [\n        \"える\",\n        -9.954158782958984\n      ],\n      [\n        \"▁株\",\n        -9.955183029174805\n      ],\n      [\n        \"期\",\n        -9.955594062805176\n      ],\n      [\n        \"an\",\n        -9.955751419067383\n      ],\n      [\n        \"タン\",\n        -9.95658016204834\n      ],\n      [\n        \"▁看護\",\n        -9.95668888092041\n      ],\n      [\n        \"▁知り\",\n        -9.958229064941406\n      ],\n      [\n        \"▁唯一\",\n        -9.958298683166504\n      ],\n      [\n        \"〜\",\n        -9.958846092224121\n      ],\n      [\n        \"▁友達\",\n        -9.959344863891602\n      ],\n      [\n        \"2008\",\n        -9.959399223327637\n      ],\n      [\n        \"▁o\",\n        -9.959577560424805\n      ],\n      [\n        \"▁加入\",\n        -9.960230827331543\n      ],\n      [\n        \"▁速度\",\n        -9.960609436035156\n      ],\n      [\n        \"▁日常\",\n        -9.961099624633789\n      ],\n      [\n        \"▁金額\",\n        -9.962087631225586\n      ],\n      [\n        \"it\",\n        -9.96235179901123\n      ],\n      [\n        \"▁悩み\",\n        -9.962671279907227\n      ],\n      [\n        \"▁Google\",\n        -9.962845802307129\n      ],\n      [\n        \"▁積極\",\n        -9.963293075561523\n      ],\n      [\n        \"▁到着\",\n        -9.963409423828125\n      ],\n      [\n        \"▁ライフ\",\n        -9.963462829589844\n      ],\n      [\n        \"15\",\n        -9.963751792907715\n      ],\n      [\n        \"▁最大の\",\n        -9.963846206665039\n      ],\n      [\n        \"▁ディ\",\n        -9.964073181152344\n      ],\n      [\n        \"▁であって\",\n        -9.964179039001465\n      ],\n      [\n        \"▁未来\",\n        -9.964212417602539\n      ],\n      [\n        \"▁ウ\",\n        -9.964625358581543\n      ],\n      [\n        \"▁医師\",\n        -9.964629173278809\n      ],\n      [\n        \"▁シャツ\",\n        -9.964860916137695\n      ],\n      [\n        \"▁進出\",\n        -9.964954376220703\n      ],\n      [\n        \"▁誕生\",\n        -9.965662956237793\n      ],\n      [\n        \"▁教\",\n        -9.966019630432129\n      ],\n      [\n        \"▁機構\",\n        -9.966072082519531\n      ],\n      [\n        \"▁統合\",\n        -9.966267585754395\n      ],\n      [\n        \"エル\",\n        -9.966787338256836\n      ],\n      [\n        \"▁台湾\",\n        -9.966880798339844\n      ],\n      [\n        \"サン\",\n        -9.966925621032715\n      ],\n      [\n        \"星\",\n        -9.9673490524292\n      ],\n      [\n        \"▁組合\",\n        -9.967559814453125\n      ],\n      [\n        \"▁命\",\n        -9.968362808227539\n      ],\n      [\n        \"次\",\n        -9.969352722167969\n      ],\n      [\n        \"▁設備\",\n        -9.969477653503418\n      ],\n      [\n        \"▁スペース\",\n        -9.970051765441895\n      ],\n      [\n        \"▁異なり\",\n        -9.97039794921875\n      ],\n      [\n        \"▁俳優\",\n        -9.971043586730957\n      ],\n      [\n        \"▁TV\",\n        -9.97230052947998\n      ],\n      [\n        \"▁ヘ\",\n        -9.972515106201172\n      ],\n      [\n        \"▁合併\",\n        -9.972819328308105\n      ],\n      [\n        \"実際\",\n        -9.973483085632324\n      ],\n      [\n        \"▁ベル\",\n        -9.973614692687988\n      ],\n      [\n        \"▁仲間\",\n        -9.973848342895508\n      ],\n      [\n        \"質\",\n        -9.97425651550293\n      ],\n      [\n        \"男\",\n        -9.974578857421875\n      ],\n      [\n        \"▁探し\",\n        -9.974702835083008\n      ],\n      [\n        \"▁ボタン\",\n        -9.974820137023926\n      ],\n      [\n        \"▁設け\",\n        -9.975691795349121\n      ],\n      [\n        \"▁カバー\",\n        -9.975939750671387\n      ],\n      [\n        \"▁券\",\n        -9.976740837097168\n      ],\n      [\n        \"▁もしくは\",\n        -9.97697639465332\n      ],\n      [\n        \"▁アイドル\",\n        -9.977667808532715\n      ],\n      [\n        \"▁女の子\",\n        -9.977927207946777\n      ],\n      [\n        \"ペ\",\n        -9.978020668029785\n      ],\n      [\n        \"▁大型\",\n        -9.978208541870117\n      ],\n      [\n        \"テン\",\n        -9.978323936462402\n      ],\n      [\n        \"▁続け\",\n        -9.978535652160645\n      ],\n      [\n        \"▁出さ\",\n        -9.978599548339844\n      ],\n      [\n        \"▁防止\",\n        -9.979066848754883\n      ],\n      [\n        \"瀬\",\n        -9.979787826538086\n      ],\n      [\n        \"何\",\n        -9.979866981506348\n      ],\n      [\n        \"▁福井\",\n        -9.980302810668945\n      ],\n      [\n        \"▁板\",\n        -9.980535507202148\n      ],\n      [\n        \"▁選ぶ\",\n        -9.980542182922363\n      ],\n      [\n        \"▁休み\",\n        -9.980842590332031\n      ],\n      [\n        \"▁ち\",\n        -9.980865478515625\n      ],\n      [\n        \"▁2004\",\n        -9.981037139892578\n      ],\n      [\n        \"▁ロー\",\n        -9.981867790222168\n      ],\n      [\n        \"▁修理\",\n        -9.982346534729004\n      ],\n      [\n        \"▁描か\",\n        -9.983179092407227\n      ],\n      [\n        \"▁装備\",\n        -9.98376178741455\n      ],\n      [\n        \"I\",\n        -9.983891487121582\n      ],\n      [\n        \"▁to\",\n        -9.983967781066895\n      ],\n      [\n        \"▁共有\",\n        -9.984132766723633\n      ],\n      [\n        \"▁競馬\",\n        -9.98425579071045\n      ],\n      [\n        \"▁電車\",\n        -9.98462963104248\n      ],\n      [\n        \"▁訪問\",\n        -9.985995292663574\n      ],\n      [\n        \"▁am\",\n        -9.987509727478027\n      ],\n      [\n        \"▁広く\",\n        -9.987541198730469\n      ],\n      [\n        \"▁葉\",\n        -9.987541198730469\n      ],\n      [\n        \"▁相当\",\n        -9.987668991088867\n      ],\n      [\n        \"▁どちら\",\n        -9.987799644470215\n      ],\n      [\n        \"▁ずっと\",\n        -9.98816204071045\n      ],\n      [\n        \"▁国立\",\n        -9.988415718078613\n      ],\n      [\n        \"ヴァ\",\n        -9.988607406616211\n      ],\n      [\n        \"▁トレーニング\",\n        -9.989513397216797\n      ],\n      [\n        \"▁教室\",\n        -9.991349220275879\n      ],\n      [\n        \"▁危険\",\n        -9.99152660369873\n      ],\n      [\n        \"▁地震\",\n        -9.992018699645996\n      ],\n      [\n        \"▁関東\",\n        -9.992950439453125\n      ],\n      [\n        \"▁奥\",\n        -9.99334716796875\n      ],\n      [\n        \"▁戦略\",\n        -9.993931770324707\n      ],\n      [\n        \"▁出した\",\n        -9.994210243225098\n      ],\n      [\n        \"▁権利\",\n        -9.99441909790039\n      ],\n      [\n        \"▁大学院\",\n        -9.995301246643066\n      ],\n      [\n        \"▁病気\",\n        -9.995407104492188\n      ],\n      [\n        \"▁首\",\n        -9.99545669555664\n      ],\n      [\n        \"▁ペット\",\n        -9.99577522277832\n      ],\n      [\n        \"カル\",\n        -9.995792388916016\n      ],\n      [\n        \"▁co\",\n        -9.995832443237305\n      ],\n      [\n        \"女\",\n        -9.997406959533691\n      ],\n      [\n        \"▁性能\",\n        -9.997467041015625\n      ],\n      [\n        \"▁秋田\",\n        -9.997688293457031\n      ],\n      [\n        \"▁武\",\n        -9.99775505065918\n      ],\n      [\n        \"▁評判\",\n        -9.997965812683105\n      ],\n      [\n        \"2007\",\n        -9.998042106628418\n      ],\n      [\n        \"足\",\n        -9.998211860656738\n      ],\n      [\n        \"▁九州\",\n        -9.998661041259766\n      ],\n      [\n        \"▁雪\",\n        -9.998784065246582\n      ],\n      [\n        \"h\",\n        -9.999659538269043\n      ],\n      [\n        \"時\",\n        -10.001230239868164\n      ],\n      [\n        \"Z\",\n        -10.001338958740234\n      ],\n      [\n        \"民\",\n        -10.001899719238281\n      ],\n      [\n        \"▁読んで\",\n        -10.00246810913086\n      ],\n      [\n        \"▁集団\",\n        -10.003040313720703\n      ],\n      [\n        \"▁ジャケット\",\n        -10.003310203552246\n      ],\n      [\n        \"▁ã\",\n        -10.003491401672363\n      ],\n      [\n        \"▁のだろう\",\n        -10.004437446594238\n      ],\n      [\n        \"▁何も\",\n        -10.004446983337402\n      ],\n      [\n        \"▁ワン\",\n        -10.00448226928711\n      ],\n      [\n        \"▁www\",\n        -10.007009506225586\n      ],\n      [\n        \"▁33\",\n        -10.007312774658203\n      ],\n      [\n        \"▁のち\",\n        -10.007671356201172\n      ],\n      [\n        \"▁ニ\",\n        -10.008994102478027\n      ],\n      [\n        \"▁終わり\",\n        -10.009703636169434\n      ],\n      [\n        \"▁知る\",\n        -10.010102272033691\n      ],\n      [\n        \"▁続いて\",\n        -10.010820388793945\n      ],\n      [\n        \"▁送り\",\n        -10.011153221130371\n      ],\n      [\n        \"▁ショー\",\n        -10.011353492736816\n      ],\n      [\n        \"▁連\",\n        -10.011764526367188\n      ],\n      [\n        \"▁シー\",\n        -10.012078285217285\n      ],\n      [\n        \"ガン\",\n        -10.012080192565918\n      ],\n      [\n        \"▁パリ\",\n        -10.012090682983398\n      ],\n      [\n        \"▁キャリア\",\n        -10.01292610168457\n      ],\n      [\n        \"重\",\n        -10.013225555419922\n      ],\n      [\n        \"▁系統\",\n        -10.013493537902832\n      ],\n      [\n        \"路\",\n        -10.013716697692871\n      ],\n      [\n        \"▁提出\",\n        -10.014369010925293\n      ],\n      [\n        \"▁ハウス\",\n        -10.014839172363281\n      ],\n      [\n        \"▁\\\\\",\n        -10.014944076538086\n      ],\n      [\n        \"▁加工\",\n        -10.015032768249512\n      ],\n      [\n        \"▁開業\",\n        -10.015645027160645\n      ],\n      [\n        \"▁つけて\",\n        -10.015730857849121\n      ],\n      [\n        \"▁区間\",\n        -10.016651153564453\n      ],\n      [\n        \"楽\",\n        -10.01669692993164\n      ],\n      [\n        \"▁ジャパン\",\n        -10.017064094543457\n      ],\n      [\n        \"▁族\",\n        -10.017142295837402\n      ],\n      [\n        \"▁新作\",\n        -10.017585754394531\n      ],\n      [\n        \"▁んじゃ\",\n        -10.01779842376709\n      ],\n      [\n        \"▁関西\",\n        -10.018022537231445\n      ],\n      [\n        \"▁いただいて\",\n        -10.018555641174316\n      ],\n      [\n        \"▁バイト\",\n        -10.018733024597168\n      ],\n      [\n        \"▁アルバイト\",\n        -10.018851280212402\n      ],\n      [\n        \"▁方々\",\n        -10.020791053771973\n      ],\n      [\n        \"▁楽天\",\n        -10.020809173583984\n      ],\n      [\n        \"▁完全に\",\n        -10.020946502685547\n      ],\n      [\n        \"▁将来\",\n        -10.021146774291992\n      ],\n      [\n        \"▁事前\",\n        -10.022038459777832\n      ],\n      [\n        \"▁草\",\n        -10.02231502532959\n      ],\n      [\n        \"▁–\",\n        -10.022473335266113\n      ],\n      [\n        \"▁構築\",\n        -10.022811889648438\n      ],\n      [\n        \"▁来る\",\n        -10.022964477539062\n      ],\n      [\n        \"▁インストール\",\n        -10.02343463897705\n      ],\n      [\n        \"▁コーナー\",\n        -10.023529052734375\n      ],\n      [\n        \"▁トーク\",\n        -10.023530006408691\n      ],\n      [\n        \"▁増\",\n        -10.023765563964844\n      ],\n      [\n        \"▁始まり\",\n        -10.023774147033691\n      ],\n      [\n        \"ッツ\",\n        -10.024260520935059\n      ],\n      [\n        \"▁好\",\n        -10.024410247802734\n      ],\n      [\n        \"ニア\",\n        -10.02443790435791\n      ],\n      [\n        \"度\",\n        -10.024484634399414\n      ],\n      [\n        \"良\",\n        -10.024922370910645\n      ],\n      [\n        \"▁要求\",\n        -10.024956703186035\n      ],\n      [\n        \"▁ないで\",\n        -10.025384902954102\n      ],\n      [\n        \"▁ジョン\",\n        -10.0255708694458\n      ],\n      [\n        \"▁又は\",\n        -10.025613784790039\n      ],\n      [\n        \"▁入学\",\n        -10.025982856750488\n      ],\n      [\n        \"▁桜\",\n        -10.026432991027832\n      ],\n      [\n        \"▁NHK\",\n        -10.026566505432129\n      ],\n      [\n        \"▁心理\",\n        -10.027850151062012\n      ],\n      [\n        \"▁投票\",\n        -10.028437614440918\n      ],\n      [\n        \"▁章\",\n        -10.030375480651855\n      ],\n      [\n        \"▁どれ\",\n        -10.03101921081543\n      ],\n      [\n        \"▁死亡\",\n        -10.03118896484375\n      ],\n      [\n        \"▁通して\",\n        -10.031229972839355\n      ],\n      [\n        \"▁ミニ\",\n        -10.03131103515625\n      ],\n      [\n        \"▁南部\",\n        -10.031444549560547\n      ],\n      [\n        \"▁酸\",\n        -10.031462669372559\n      ],\n      [\n        \"▁前後\",\n        -10.032089233398438\n      ],\n      [\n        \"▁トラック\",\n        -10.03258991241455\n      ],\n      [\n        \"▁破壊\",\n        -10.032670974731445\n      ],\n      [\n        \"▁医学\",\n        -10.032835006713867\n      ],\n      [\n        \"▁分かり\",\n        -10.033647537231445\n      ],\n      [\n        \"▁残って\",\n        -10.03387451171875\n      ],\n      [\n        \"▁王国\",\n        -10.033942222595215\n      ],\n      [\n        \"▁《\",\n        -10.034411430358887\n      ],\n      [\n        \"座\",\n        -10.034693717956543\n      ],\n      [\n        \"▁天皇\",\n        -10.034719467163086\n      ],\n      [\n        \"▁低い\",\n        -10.035360336303711\n      ],\n      [\n        \"▁元年\",\n        -10.035867691040039\n      ],\n      [\n        \"▁許可\",\n        -10.03646183013916\n      ],\n      [\n        \"▁太陽\",\n        -10.036869049072266\n      ],\n      [\n        \"▁ラン\",\n        -10.037062644958496\n      ],\n      [\n        \"▁ร\",\n        -10.037226676940918\n      ],\n      [\n        \"▁理論\",\n        -10.03734016418457\n      ],\n      [\n        \"もう\",\n        -10.038166046142578\n      ],\n      [\n        \"▁立場\",\n        -10.038344383239746\n      ],\n      [\n        \"▁アドレス\",\n        -10.038758277893066\n      ],\n      [\n        \"▁゙\",\n        -10.039505004882812\n      ],\n      [\n        \"▁飲み\",\n        -10.040047645568848\n      ],\n      [\n        \"▁既に\",\n        -10.040164947509766\n      ],\n      [\n        \"▁ワ\",\n        -10.040910720825195\n      ],\n      [\n        \"しい\",\n        -10.041966438293457\n      ],\n      [\n        \"▁授業\",\n        -10.042150497436523\n      ],\n      [\n        \"▁文庫\",\n        -10.042882919311523\n      ],\n      [\n        \"▁昔\",\n        -10.043259620666504\n      ],\n      [\n        \"▁得点\",\n        -10.04379653930664\n      ],\n      [\n        \"▁本線\",\n        -10.044017791748047\n      ],\n      [\n        \"▁請求\",\n        -10.044360160827637\n      ],\n      [\n        \"▁心配\",\n        -10.044559478759766\n      ],\n      [\n        \"坂\",\n        -10.044876098632812\n      ],\n      [\n        \"▁宮崎\",\n        -10.044882774353027\n      ],\n      [\n        \"▁新型\",\n        -10.044904708862305\n      ],\n      [\n        \"▁応援\",\n        -10.045321464538574\n      ],\n      [\n        \"▁ストーリー\",\n        -10.045456886291504\n      ],\n      [\n        \"▁ケ\",\n        -10.045830726623535\n      ],\n      [\n        \"▁完了\",\n        -10.046196937561035\n      ],\n      [\n        \"▁けれど\",\n        -10.046610832214355\n      ],\n      [\n        \"▁産\",\n        -10.046618461608887\n      ],\n      [\n        \"レー\",\n        -10.047125816345215\n      ],\n      [\n        \"▁せい\",\n        -10.047469139099121\n      ],\n      [\n        \"▁宣言\",\n        -10.047675132751465\n      ],\n      [\n        \"▁36\",\n        -10.049159049987793\n      ],\n      [\n        \"▁いただいた\",\n        -10.051506996154785\n      ],\n      [\n        \"▁遊び\",\n        -10.052059173583984\n      ],\n      [\n        \"▁至る\",\n        -10.052531242370605\n      ],\n      [\n        \"▁従来\",\n        -10.052834510803223\n      ],\n      [\n        \"▁朝鮮\",\n        -10.054186820983887\n      ],\n      [\n        \"朝\",\n        -10.054892539978027\n      ],\n      [\n        \"▁わけです\",\n        -10.055098533630371\n      ],\n      [\n        \"火\",\n        -10.055257797241211\n      ],\n      [\n        \"士\",\n        -10.055350303649902\n      ],\n      [\n        \"▁門\",\n        -10.055607795715332\n      ],\n      [\n        \"▁核\",\n        -10.05566120147705\n      ],\n      [\n        \"▁シャ\",\n        -10.056050300598145\n      ],\n      [\n        \"▁与える\",\n        -10.056354522705078\n      ],\n      [\n        \"▁工学\",\n        -10.056478500366211\n      ],\n      [\n        \"▁湯\",\n        -10.056600570678711\n      ],\n      [\n        \"千\",\n        -10.056795120239258\n      ],\n      [\n        \"▁具体\",\n        -10.057796478271484\n      ],\n      [\n        \"モン\",\n        -10.058019638061523\n      ],\n      [\n        \"▁深\",\n        -10.058598518371582\n      ],\n      [\n        \"▁東北\",\n        -10.058735847473145\n      ],\n      [\n        \"▁長く\",\n        -10.058955192565918\n      ],\n      [\n        \"▁印刷\",\n        -10.05948257446289\n      ],\n      [\n        \"▁歴\",\n        -10.059893608093262\n      ],\n      [\n        \"▁湖\",\n        -10.06019115447998\n      ],\n      [\n        \"化\",\n        -10.060617446899414\n      ],\n      [\n        \"▁サロン\",\n        -10.060762405395508\n      ],\n      [\n        \"▁ミュージック\",\n        -10.061590194702148\n      ],\n      [\n        \"でした\",\n        -10.062191009521484\n      ],\n      [\n        \"▁申請\",\n        -10.06248664855957\n      ],\n      [\n        \"▁恋\",\n        -10.062621116638184\n      ],\n      [\n        \"▁しまって\",\n        -10.063096046447754\n      ],\n      [\n        \"▁みた\",\n        -10.06332778930664\n      ],\n      [\n        \"▁モード\",\n        -10.063626289367676\n      ],\n      [\n        \"us\",\n        -10.063685417175293\n      ],\n      [\n        \"▁石川\",\n        -10.063962936401367\n      ],\n      [\n        \"ジェ\",\n        -10.06402587890625\n      ],\n      [\n        \"▁壁\",\n        -10.065157890319824\n      ],\n      [\n        \"▁異\",\n        -10.065594673156738\n      ],\n      [\n        \"▁軽\",\n        -10.065651893615723\n      ],\n      [\n        \"▁回復\",\n        -10.066681861877441\n      ],\n      [\n        \"根\",\n        -10.06674575805664\n      ],\n      [\n        \"機\",\n        -10.066847801208496\n      ],\n      [\n        \"▁男子\",\n        -10.066882133483887\n      ],\n      [\n        \"クス\",\n        -10.0674467086792\n      ],\n      [\n        \"▁学会\",\n        -10.068056106567383\n      ],\n      [\n        \"40\",\n        -10.068117141723633\n      ],\n      [\n        \"▁ー\",\n        -10.068292617797852\n      ],\n      [\n        \"▁分から\",\n        -10.068499565124512\n      ],\n      [\n        \"▁改革\",\n        -10.068582534790039\n      ],\n      [\n        \"知\",\n        -10.068876266479492\n      ],\n      [\n        \"▁痛み\",\n        -10.06955623626709\n      ],\n      [\n        \"そ\",\n        -10.069608688354492\n      ],\n      [\n        \"波\",\n        -10.070197105407715\n      ],\n      [\n        \"▁ヒット\",\n        -10.070354461669922\n      ],\n      [\n        \"▁大き\",\n        -10.07076358795166\n      ],\n      [\n        \"▁値段\",\n        -10.070770263671875\n      ],\n      [\n        \"▁同じく\",\n        -10.070976257324219\n      ],\n      [\n        \"ic\",\n        -10.071444511413574\n      ],\n      [\n        \"▁松\",\n        -10.071602821350098\n      ],\n      [\n        \"▁記憶\",\n        -10.071648597717285\n      ],\n      [\n        \"▁プレー\",\n        -10.072369575500488\n      ],\n      [\n        \"▁for\",\n        -10.073253631591797\n      ],\n      [\n        \"▁ローン\",\n        -10.073369026184082\n      ],\n      [\n        \"▁市立\",\n        -10.07373332977295\n      ],\n      [\n        \"着\",\n        -10.073858261108398\n      ],\n      [\n        \"命\",\n        -10.074024200439453\n      ],\n      [\n        \"館\",\n        -10.07426643371582\n      ],\n      [\n        \"▁富山\",\n        -10.074913024902344\n      ],\n      [\n        \"▁県立\",\n        -10.07494831085205\n      ],\n      [\n        \"▁是非\",\n        -10.075040817260742\n      ],\n      [\n        \"▁支払い\",\n        -10.076096534729004\n      ],\n      [\n        \"▁38\",\n        -10.07680606842041\n      ],\n      [\n        \"▁楽しい\",\n        -10.07706069946289\n      ],\n      [\n        \"▁逆\",\n        -10.077482223510742\n      ],\n      [\n        \"▁腕\",\n        -10.078035354614258\n      ],\n      [\n        \"丸\",\n        -10.07833480834961\n      ],\n      [\n        \"▁単位\",\n        -10.078609466552734\n      ],\n      [\n        \"▁新たに\",\n        -10.07917594909668\n      ],\n      [\n        \"▁属\",\n        -10.079580307006836\n      ],\n      [\n        \"ふ\",\n        -10.080174446105957\n      ],\n      [\n        \"▁ベ\",\n        -10.081733703613281\n      ],\n      [\n        \"▁34\",\n        -10.081779479980469\n      ],\n      [\n        \"▁魚\",\n        -10.082364082336426\n      ],\n      [\n        \"▁周り\",\n        -10.082540512084961\n      ],\n      [\n        \"郎\",\n        -10.082986831665039\n      ],\n      [\n        \"であった\",\n        -10.083253860473633\n      ],\n      [\n        \"であり\",\n        -10.083660125732422\n      ],\n      [\n        \"▁塩\",\n        -10.084321022033691\n      ],\n      [\n        \"▁kg\",\n        -10.084656715393066\n      ],\n      [\n        \"▁学園\",\n        -10.085311889648438\n      ],\n      [\n        \"▁敗\",\n        -10.0855073928833\n      ],\n      [\n        \"▁農業\",\n        -10.08565616607666\n      ],\n      [\n        \"社\",\n        -10.085885047912598\n      ],\n      [\n        \"▁背景\",\n        -10.086856842041016\n      ],\n      [\n        \"ちゃ\",\n        -10.086897850036621\n      ],\n      [\n        \"フェ\",\n        -10.087419509887695\n      ],\n      [\n        \"▁宮城\",\n        -10.08746337890625\n      ],\n      [\n        \"徳\",\n        -10.087481498718262\n      ],\n      [\n        \"▁挙げ\",\n        -10.087512016296387\n      ],\n      [\n        \"▁ヤ\",\n        -10.08764934539795\n      ],\n      [\n        \"▁訓練\",\n        -10.0877685546875\n      ],\n      [\n        \"▁カット\",\n        -10.088549613952637\n      ],\n      [\n        \"▁必要です\",\n        -10.089083671569824\n      ],\n      [\n        \"▁46\",\n        -10.089376449584961\n      ],\n      [\n        \"le\",\n        -10.089492797851562\n      ],\n      [\n        \"▁議論\",\n        -10.090251922607422\n      ],\n      [\n        \"▁間違い\",\n        -10.090377807617188\n      ],\n      [\n        \"▁ピアノ\",\n        -10.09056282043457\n      ],\n      [\n        \"▁いか\",\n        -10.090774536132812\n      ],\n      [\n        \"▁制御\",\n        -10.09255313873291\n      ],\n      [\n        \"カン\",\n        -10.092928886413574\n      ],\n      [\n        \"無\",\n        -10.092933654785156\n      ],\n      [\n        \"▁利益\",\n        -10.09298038482666\n      ],\n      [\n        \"▁宮\",\n        -10.093358993530273\n      ],\n      [\n        \"▁内部\",\n        -10.09362506866455\n      ],\n      [\n        \"▁出た\",\n        -10.093812942504883\n      ],\n      [\n        \"志\",\n        -10.093903541564941\n      ],\n      [\n        \"2006\",\n        -10.094388961791992\n      ],\n      [\n        \"▁若い\",\n        -10.095943450927734\n      ],\n      [\n        \"▁玉\",\n        -10.096855163574219\n      ],\n      [\n        \"▁づくり\",\n        -10.097257614135742\n      ],\n      [\n        \"▁神経\",\n        -10.098594665527344\n      ],\n      [\n        \"▁本社\",\n        -10.09963321685791\n      ],\n      [\n        \"▁毎年\",\n        -10.100427627563477\n      ],\n      [\n        \"太郎\",\n        -10.10057258605957\n      ],\n      [\n        \"▁iPhone\",\n        -10.100592613220215\n      ],\n      [\n        \"▁建て\",\n        -10.101034164428711\n      ],\n      [\n        \"▁成\",\n        -10.10168743133545\n      ],\n      [\n        \"ヴィ\",\n        -10.102569580078125\n      ],\n      [\n        \"▁ルール\",\n        -10.10290813446045\n      ],\n      [\n        \"▁食べる\",\n        -10.103551864624023\n      ],\n      [\n        \"▁診断\",\n        -10.103609085083008\n      ],\n      [\n        \"▁キー\",\n        -10.10404109954834\n      ],\n      [\n        \"▁使える\",\n        -10.104482650756836\n      ],\n      [\n        \"もちろん\",\n        -10.10480785369873\n      ],\n      [\n        \"▁果たした\",\n        -10.105368614196777\n      ],\n      [\n        \"▁代わり\",\n        -10.106273651123047\n      ],\n      [\n        \"直\",\n        -10.10657024383545\n      ],\n      [\n        \"▁大分\",\n        -10.106819152832031\n      ],\n      [\n        \"▁楽\",\n        -10.107829093933105\n      ],\n      [\n        \"記\",\n        -10.108428001403809\n      ],\n      [\n        \"▁予防\",\n        -10.108612060546875\n      ],\n      [\n        \"▁2003\",\n        -10.10875415802002\n      ],\n      [\n        \"▁いただける\",\n        -10.110048294067383\n      ],\n      [\n        \"▁部長\",\n        -10.11014175415039\n      ],\n      [\n        \"教\",\n        -10.110274314880371\n      ],\n      [\n        \"▁革命\",\n        -10.11054515838623\n      ],\n      [\n        \"▁山形\",\n        -10.110770225524902\n      ],\n      [\n        \"▁中止\",\n        -10.111113548278809\n      ],\n      [\n        \"▁形態\",\n        -10.111159324645996\n      ],\n      [\n        \"▁あたる\",\n        -10.111349105834961\n      ],\n      [\n        \"▁物件\",\n        -10.111620903015137\n      ],\n      [\n        \"▁オブ\",\n        -10.111992835998535\n      ],\n      [\n        \"林\",\n        -10.113627433776855\n      ],\n      [\n        \"▁域\",\n        -10.113818168640137\n      ],\n      [\n        \"▁エル\",\n        -10.113903045654297\n      ],\n      [\n        \"▁置か\",\n        -10.114087104797363\n      ],\n      [\n        \"▁努力\",\n        -10.114179611206055\n      ],\n      [\n        \"▁耳\",\n        -10.114822387695312\n      ],\n      [\n        \"▁翌\",\n        -10.115060806274414\n      ],\n      [\n        \"x\",\n        -10.115073204040527\n      ],\n      [\n        \"▁55\",\n        -10.11527156829834\n      ],\n      [\n        \"▁髪\",\n        -10.116069793701172\n      ],\n      [\n        \"彦\",\n        -10.116384506225586\n      ],\n      [\n        \"げ\",\n        -10.117243766784668\n      ],\n      [\n        \"以下\",\n        -10.117650032043457\n      ],\n      [\n        \"▁主催\",\n        -10.117712020874023\n      ],\n      [\n        \"エン\",\n        -10.117756843566895\n      ],\n      [\n        \"▁ジャ\",\n        -10.118021011352539\n      ],\n      [\n        \"▁限ら\",\n        -10.118071556091309\n      ],\n      [\n        \"デン\",\n        -10.118179321289062\n      ],\n      [\n        \"▁バランス\",\n        -10.118228912353516\n      ],\n      [\n        \"パー\",\n        -10.118247985839844\n      ],\n      [\n        \"▁どのような\",\n        -10.118600845336914\n      ],\n      [\n        \"▁得た\",\n        -10.118637084960938\n      ],\n      [\n        \"u\",\n        -10.11959457397461\n      ],\n      [\n        \"▁発言\",\n        -10.119640350341797\n      ],\n      [\n        \"▁クレジット\",\n        -10.119758605957031\n      ],\n      [\n        \"▁II\",\n        -10.119999885559082\n      ],\n      [\n        \"▁働く\",\n        -10.120654106140137\n      ],\n      [\n        \"▁感想\",\n        -10.120808601379395\n      ],\n      [\n        \"▁宗教\",\n        -10.121011734008789\n      ],\n      [\n        \"▁規制\",\n        -10.12109088897705\n      ],\n      [\n        \"▁血\",\n        -10.121227264404297\n      ],\n      [\n        \"堂\",\n        -10.121368408203125\n      ],\n      [\n        \"▁カル\",\n        -10.121996879577637\n      ],\n      [\n        \"▁選\",\n        -10.12236499786377\n      ],\n      [\n        \"れて\",\n        -10.12311840057373\n      ],\n      [\n        \"▁田\",\n        -10.123229026794434\n      ],\n      [\n        \"▁■\",\n        -10.123257637023926\n      ],\n      [\n        \"▁パワー\",\n        -10.123678207397461\n      ],\n      [\n        \"▁マンション\",\n        -10.123706817626953\n      ],\n      [\n        \"ッチ\",\n        -10.124261856079102\n      ],\n      [\n        \"▁普通\",\n        -10.125060081481934\n      ],\n      [\n        \"アー\",\n        -10.125576972961426\n      ],\n      [\n        \"▁十\",\n        -10.125643730163574\n      ],\n      [\n        \"▁メリット\",\n        -10.126456260681152\n      ],\n      [\n        \"べ\",\n        -10.126784324645996\n      ],\n      [\n        \"▁入れる\",\n        -10.128057479858398\n      ],\n      [\n        \"▁芸能\",\n        -10.128106117248535\n      ],\n      [\n        \"▁言った\",\n        -10.12830638885498\n      ],\n      [\n        \"▁ファ\",\n        -10.128702163696289\n      ],\n      [\n        \"▁売却\",\n        -10.128732681274414\n      ],\n      [\n        \"▁本部\",\n        -10.128783226013184\n      ],\n      [\n        \"▁カフェ\",\n        -10.128854751586914\n      ],\n      [\n        \"▁トラブル\",\n        -10.12916374206543\n      ],\n      [\n        \"▁務める\",\n        -10.129315376281738\n      ],\n      [\n        \"○\",\n        -10.12962818145752\n      ],\n      [\n        \"▁セール\",\n        -10.129900932312012\n      ],\n      [\n        \"▁ロンドン\",\n        -10.130437850952148\n      ],\n      [\n        \"▁茨城\",\n        -10.131446838378906\n      ],\n      [\n        \"▁手続き\",\n        -10.131571769714355\n      ],\n      [\n        \"▁レイ\",\n        -10.13230037689209\n      ],\n      [\n        \"▁固定\",\n        -10.132400512695312\n      ],\n      [\n        \"▁用語\",\n        -10.132448196411133\n      ],\n      [\n        \"▁No\",\n        -10.132650375366211\n      ],\n      [\n        \"▁イラスト\",\n        -10.133376121520996\n      ],\n      [\n        \"▁過ぎ\",\n        -10.133461952209473\n      ],\n      [\n        \"▁普及\",\n        -10.13390064239502\n      ],\n      [\n        \"▁主人公\",\n        -10.134778022766113\n      ],\n      [\n        \"▁感覚\",\n        -10.134844779968262\n      ],\n      [\n        \"▁うえ\",\n        -10.136165618896484\n      ],\n      [\n        \"▁アート\",\n        -10.136492729187012\n      ],\n      [\n        \"▁活\",\n        -10.136899948120117\n      ],\n      [\n        \"スタ\",\n        -10.13744068145752\n      ],\n      [\n        \"▁コーチ\",\n        -10.137838363647461\n      ],\n      [\n        \"▁利\",\n        -10.138105392456055\n      ],\n      [\n        \"▁ヘア\",\n        -10.138705253601074\n      ],\n      [\n        \"▁共通\",\n        -10.139022827148438\n      ],\n      [\n        \"▁軍事\",\n        -10.139049530029297\n      ],\n      [\n        \"▁事項\",\n        -10.140003204345703\n      ],\n      [\n        \"▁職員\",\n        -10.14000415802002\n      ],\n      [\n        \"チャ\",\n        -10.140054702758789\n      ],\n      [\n        \"▁正規\",\n        -10.141352653503418\n      ],\n      [\n        \"▁充実\",\n        -10.14305591583252\n      ],\n      [\n        \"ある\",\n        -10.143348693847656\n      ],\n      [\n        \"母\",\n        -10.143455505371094\n      ],\n      [\n        \"▁書いた\",\n        -10.143980026245117\n      ],\n      [\n        \"▁レコード\",\n        -10.144062995910645\n      ],\n      [\n        \"ちなみに\",\n        -10.144242286682129\n      ],\n      [\n        \"▁さえ\",\n        -10.145636558532715\n      ],\n      [\n        \"▁ワールド\",\n        -10.146834373474121\n      ],\n      [\n        \"ッド\",\n        -10.1469087600708\n      ],\n      [\n        \"▁項目\",\n        -10.147281646728516\n      ],\n      [\n        \"▁防衛\",\n        -10.147761344909668\n      ],\n      [\n        \"ウス\",\n        -10.148383140563965\n      ],\n      [\n        \"▁チ\",\n        -10.14928150177002\n      ],\n      [\n        \"▁ム\",\n        -10.149859428405762\n      ],\n      [\n        \"▁37\",\n        -10.150376319885254\n      ],\n      [\n        \"▁アーティスト\",\n        -10.150586128234863\n      ],\n      [\n        \"▁内閣\",\n        -10.151777267456055\n      ],\n      [\n        \"▁直後\",\n        -10.151970863342285\n      ],\n      [\n        \"▁上記\",\n        -10.152312278747559\n      ],\n      [\n        \"世\",\n        -10.152620315551758\n      ],\n      [\n        \"▁シート\",\n        -10.15313720703125\n      ],\n      [\n        \"角\",\n        -10.153246879577637\n      ],\n      [\n        \"こう\",\n        -10.153270721435547\n      ],\n      [\n        \"▁比\",\n        -10.154783248901367\n      ],\n      [\n        \"こちら\",\n        -10.15495491027832\n      ],\n      [\n        \"▁徳島\",\n        -10.155017852783203\n      ],\n      [\n        \"▁スクール\",\n        -10.15542984008789\n      ],\n      [\n        \"▁削除\",\n        -10.155869483947754\n      ],\n      [\n        \"っと\",\n        -10.156556129455566\n      ],\n      [\n        \"▁2002\",\n        -10.15676212310791\n      ],\n      [\n        \"あなた\",\n        -10.157543182373047\n      ],\n      [\n        \"ia\",\n        -10.157910346984863\n      ],\n      [\n        \"倉\",\n        -10.158506393432617\n      ],\n      [\n        \"▁得て\",\n        -10.158733367919922\n      ],\n      [\n        \"▁司令\",\n        -10.159324645996094\n      ],\n      [\n        \"▁学び\",\n        -10.159610748291016\n      ],\n      [\n        \"▁くれて\",\n        -10.159777641296387\n      ],\n      [\n        \"▁歩\",\n        -10.159812927246094\n      ],\n      [\n        \"▁各種\",\n        -10.159881591796875\n      ],\n      [\n        \"▁実績\",\n        -10.160247802734375\n      ],\n      [\n        \"▁主演\",\n        -10.161070823669434\n      ],\n      [\n        \"▁ブロック\",\n        -10.16110610961914\n      ],\n      [\n        \"ar\",\n        -10.16129207611084\n      ],\n      [\n        \"▁低下\",\n        -10.161492347717285\n      ],\n      [\n        \"ーズ\",\n        -10.162286758422852\n      ],\n      [\n        \"▁わかる\",\n        -10.16247272491455\n      ],\n      [\n        \"▁新規\",\n        -10.162654876708984\n      ],\n      [\n        \"▁条約\",\n        -10.163368225097656\n      ],\n      [\n        \"▁民族\",\n        -10.163848876953125\n      ],\n      [\n        \"▁事態\",\n        -10.164390563964844\n      ],\n      [\n        \"▁角\",\n        -10.165027618408203\n      ],\n      [\n        \"▁ぐらい\",\n        -10.165179252624512\n      ],\n      [\n        \"式\",\n        -10.165266036987305\n      ],\n      [\n        \"勝\",\n        -10.166006088256836\n      ],\n      [\n        \"▁本格\",\n        -10.166057586669922\n      ],\n      [\n        \"▁復活\",\n        -10.166080474853516\n      ],\n      [\n        \"▁研修\",\n        -10.166254997253418\n      ],\n      [\n        \"▁マー\",\n        -10.166668891906738\n      ],\n      [\n        \"▁恋愛\",\n        -10.166831016540527\n      ],\n      [\n        \"各\",\n        -10.167850494384766\n      ],\n      [\n        \"▁動作\",\n        -10.168756484985352\n      ],\n      [\n        \"▁収集\",\n        -10.16929817199707\n      ],\n      [\n        \"香\",\n        -10.169703483581543\n      ],\n      [\n        \"▁銀\",\n        -10.170317649841309\n      ],\n      [\n        \"▁コミュニケーション\",\n        -10.170331001281738\n      ],\n      [\n        \"▁仙台\",\n        -10.170352935791016\n      ],\n      [\n        \"▁2001\",\n        -10.170476913452148\n      ],\n      [\n        \"▁暮らし\",\n        -10.170719146728516\n      ],\n      [\n        \"▁実は\",\n        -10.170921325683594\n      ],\n      [\n        \"▁ネ\",\n        -10.171064376831055\n      ],\n      [\n        \"ly\",\n        -10.171104431152344\n      ],\n      [\n        \"▁自転車\",\n        -10.171478271484375\n      ],\n      [\n        \"▁良かった\",\n        -10.171720504760742\n      ],\n      [\n        \"▁青森\",\n        -10.172158241271973\n      ],\n      [\n        \"▁か月\",\n        -10.172226905822754\n      ],\n      [\n        \"▁コスト\",\n        -10.173460006713867\n      ],\n      [\n        \"▁統一\",\n        -10.17435359954834\n      ],\n      [\n        \"産\",\n        -10.1752347946167\n      ],\n      [\n        \"世界\",\n        -10.175420761108398\n      ],\n      [\n        \"▁移転\",\n        -10.175716400146484\n      ],\n      [\n        \"▁なぁ\",\n        -10.175810813903809\n      ],\n      [\n        \"▁児童\",\n        -10.176252365112305\n      ],\n      [\n        \"アメリカ\",\n        -10.176490783691406\n      ],\n      [\n        \"▁最後\",\n        -10.176624298095703\n      ],\n      [\n        \"▁演出\",\n        -10.176933288574219\n      ],\n      [\n        \"▁OK\",\n        -10.177393913269043\n      ],\n      [\n        \"▁手段\",\n        -10.177395820617676\n      ],\n      [\n        \"▁本来\",\n        -10.177627563476562\n      ],\n      [\n        \"▁述べて\",\n        -10.177640914916992\n      ],\n      [\n        \"▁開設\",\n        -10.178108215332031\n      ],\n      [\n        \"▁買う\",\n        -10.178318977355957\n      ],\n      [\n        \"▁三重\",\n        -10.178378105163574\n      ],\n      [\n        \"チェ\",\n        -10.178425788879395\n      ],\n      [\n        \"▁求める\",\n        -10.17868709564209\n      ],\n      [\n        \"▁1990\",\n        -10.178801536560059\n      ],\n      [\n        \"▁名誉\",\n        -10.179173469543457\n      ],\n      [\n        \"▁ダイエット\",\n        -10.179242134094238\n      ],\n      [\n        \"▁一定\",\n        -10.17951488494873\n      ],\n      [\n        \"▁ゴール\",\n        -10.179759979248047\n      ],\n      [\n        \"▁このような\",\n        -10.179959297180176\n      ],\n      [\n        \"▁九\",\n        -10.180530548095703\n      ],\n      [\n        \"▁的で\",\n        -10.180636405944824\n      ],\n      [\n        \"▁立\",\n        -10.181344985961914\n      ],\n      [\n        \"浦\",\n        -10.181347846984863\n      ],\n      [\n        \"▁物質\",\n        -10.181495666503906\n      ],\n      [\n        \"▁ブ\",\n        -10.182380676269531\n      ],\n      [\n        \"▁用いて\",\n        -10.182509422302246\n      ],\n      [\n        \"▁空気\",\n        -10.183707237243652\n      ],\n      [\n        \"▁de\",\n        -10.18392276763916\n      ],\n      [\n        \"▁午後\",\n        -10.184065818786621\n      ],\n      [\n        \"▁事情\",\n        -10.18482780456543\n      ],\n      [\n        \"▁輸入\",\n        -10.185100555419922\n      ],\n      [\n        \"▁新宿\",\n        -10.18603515625\n      ],\n      [\n        \"▁39\",\n        -10.186256408691406\n      ],\n      [\n        \"▁交渉\",\n        -10.186765670776367\n      ],\n      [\n        \"▁仏\",\n        -10.186928749084473\n      ],\n      [\n        \"▁比べて\",\n        -10.186988830566406\n      ],\n      [\n        \"am\",\n        -10.187105178833008\n      ],\n      [\n        \"▁商業\",\n        -10.187145233154297\n      ],\n      [\n        \"▁生命\",\n        -10.187987327575684\n      ],\n      [\n        \"▁久\",\n        -10.188233375549316\n      ],\n      [\n        \"レイ\",\n        -10.188250541687012\n      ],\n      [\n        \"▁探して\",\n        -10.188350677490234\n      ],\n      [\n        \"▁ロード\",\n        -10.189229965209961\n      ],\n      [\n        \"14\",\n        -10.189322471618652\n      ],\n      [\n        \"▁長期\",\n        -10.189483642578125\n      ],\n      [\n        \"▁延長\",\n        -10.191094398498535\n      ],\n      [\n        \"▁押し\",\n        -10.19178581237793\n      ],\n      [\n        \"▁好き\",\n        -10.192069053649902\n      ],\n      [\n        \"▁案\",\n        -10.192094802856445\n      ],\n      [\n        \"▁手術\",\n        -10.192102432250977\n      ],\n      [\n        \"▁呼ぶ\",\n        -10.192741394042969\n      ],\n      [\n        \"つまり\",\n        -10.19351863861084\n      ],\n      [\n        \"▁博物\",\n        -10.193961143493652\n      ],\n      [\n        \"re\",\n        -10.195416450500488\n      ],\n      [\n        \"▁高齢\",\n        -10.19568920135498\n      ],\n      [\n        \"▁取る\",\n        -10.196154594421387\n      ],\n      [\n        \"▁留学\",\n        -10.196381568908691\n      ],\n      [\n        \"▁ワイン\",\n        -10.197135925292969\n      ],\n      [\n        \"▁胸\",\n        -10.197422981262207\n      ],\n      [\n        \"▁上昇\",\n        -10.197867393493652\n      ],\n      [\n        \"▁管\",\n        -10.198802947998047\n      ],\n      [\n        \"▁つける\",\n        -10.199614524841309\n      ],\n      [\n        \"▁〉\",\n        -10.19969367980957\n      ],\n      [\n        \"▁兼\",\n        -10.200396537780762\n      ],\n      [\n        \"▁学ぶ\",\n        -10.200592041015625\n      ],\n      [\n        \"▁400\",\n        -10.200950622558594\n      ],\n      [\n        \"アル\",\n        -10.201570510864258\n      ],\n      [\n        \"▁電力\",\n        -10.201576232910156\n      ],\n      [\n        \"▁周囲\",\n        -10.202235221862793\n      ],\n      [\n        \"▁現地\",\n        -10.202375411987305\n      ],\n      [\n        \"▁合計\",\n        -10.202400207519531\n      ],\n      [\n        \"▁加えて\",\n        -10.202675819396973\n      ],\n      [\n        \"しく\",\n        -10.202871322631836\n      ],\n      [\n        \"利\",\n        -10.20311164855957\n      ],\n      [\n        \"▁43\",\n        -10.204051971435547\n      ],\n      [\n        \"▁ゴ\",\n        -10.204180717468262\n      ],\n      [\n        \"保\",\n        -10.204325675964355\n      ],\n      [\n        \"▁みたいな\",\n        -10.204351425170898\n      ],\n      [\n        \"▁群馬\",\n        -10.204421043395996\n      ],\n      [\n        \"▁超える\",\n        -10.204585075378418\n      ],\n      [\n        \"▁陣\",\n        -10.204922676086426\n      ],\n      [\n        \"シン\",\n        -10.204987525939941\n      ],\n      [\n        \"▁うまく\",\n        -10.205254554748535\n      ],\n      [\n        \"▁首相\",\n        -10.205608367919922\n      ],\n      [\n        \"▁にくい\",\n        -10.205799102783203\n      ],\n      [\n        \"▁42\",\n        -10.206098556518555\n      ],\n      [\n        \"▁組み\",\n        -10.2063627243042\n      ],\n      [\n        \"▁ルーム\",\n        -10.206772804260254\n      ],\n      [\n        \"▁素\",\n        -10.206779479980469\n      ],\n      [\n        \"▁買って\",\n        -10.207152366638184\n      ],\n      [\n        \"▁油\",\n        -10.207260131835938\n      ],\n      [\n        \"▁列\",\n        -10.207415580749512\n      ],\n      [\n        \"▁所在\",\n        -10.208100318908691\n      ],\n      [\n        \"▁グリーン\",\n        -10.208717346191406\n      ],\n      [\n        \"▁コンピュータ\",\n        -10.208775520324707\n      ],\n      [\n        \"▁同意\",\n        -10.208819389343262\n      ],\n      [\n        \"字\",\n        -10.208826065063477\n      ],\n      [\n        \"▁CM\",\n        -10.20939826965332\n      ],\n      [\n        \"務\",\n        -10.209611892700195\n      ],\n      [\n        \"永\",\n        -10.209774017333984\n      ],\n      [\n        \"▁北部\",\n        -10.210318565368652\n      ],\n      [\n        \"▁言える\",\n        -10.210441589355469\n      ],\n      [\n        \"▁アー\",\n        -10.210592269897461\n      ],\n      [\n        \"春\",\n        -10.211310386657715\n      ],\n      [\n        \"▁除く\",\n        -10.21160888671875\n      ],\n      [\n        \"▁最初\",\n        -10.212051391601562\n      ],\n      [\n        \"▁太\",\n        -10.21212100982666\n      ],\n      [\n        \"▁論文\",\n        -10.212286949157715\n      ],\n      [\n        \"軍\",\n        -10.213054656982422\n      ],\n      [\n        \"▁勢力\",\n        -10.213224411010742\n      ],\n      [\n        \"バン\",\n        -10.213245391845703\n      ],\n      [\n        \"まず\",\n        -10.213578224182129\n      ],\n      [\n        \"真\",\n        -10.213987350463867\n      ],\n      [\n        \"▁レンタル\",\n        -10.214136123657227\n      ],\n      [\n        \"▁保育\",\n        -10.21428394317627\n      ],\n      [\n        \"トラ\",\n        -10.215141296386719\n      ],\n      [\n        \"▁原作\",\n        -10.215335845947266\n      ],\n      [\n        \"▁処分\",\n        -10.216004371643066\n      ],\n      [\n        \"▁多かった\",\n        -10.216009140014648\n      ],\n      [\n        \"▁ストレス\",\n        -10.216010093688965\n      ],\n      [\n        \"▁ストア\",\n        -10.216461181640625\n      ],\n      [\n        \"▁生まれる\",\n        -10.21728801727295\n      ],\n      [\n        \"死\",\n        -10.21760082244873\n      ],\n      [\n        \"▁すぎる\",\n        -10.217828750610352\n      ],\n      [\n        \"▁作った\",\n        -10.218454360961914\n      ],\n      [\n        \"▁林\",\n        -10.219106674194336\n      ],\n      [\n        \"▁初代\",\n        -10.21938705444336\n      ],\n      [\n        \"▁周\",\n        -10.219623565673828\n      ],\n      [\n        \"2005\",\n        -10.219664573669434\n      ],\n      [\n        \"▁古い\",\n        -10.219900131225586\n      ],\n      [\n        \"空\",\n        -10.220401763916016\n      ],\n      [\n        \"薬\",\n        -10.220454216003418\n      ],\n      [\n        \"▁どのように\",\n        -10.220763206481934\n      ],\n      [\n        \"▁モノ\",\n        -10.221078872680664\n      ],\n      [\n        \"▁答え\",\n        -10.221389770507812\n      ],\n      [\n        \"キロ\",\n        -10.22156810760498\n      ],\n      [\n        \"ネット\",\n        -10.222054481506348\n      ],\n      [\n        \"▁比較的\",\n        -10.222319602966309\n      ],\n      [\n        \"▁駐車\",\n        -10.222848892211914\n      ],\n      [\n        \"▁応じて\",\n        -10.22307014465332\n      ],\n      [\n        \"取\",\n        -10.22387981414795\n      ],\n      [\n        \"▁源\",\n        -10.224019050598145\n      ],\n      [\n        \"▁材料\",\n        -10.224226951599121\n      ],\n      [\n        \"\\\"\",\n        -10.224627494812012\n      ],\n      [\n        \"▁将軍\",\n        -10.224689483642578\n      ],\n      [\n        \"有\",\n        -10.224791526794434\n      ],\n      [\n        \"▁季節\",\n        -10.22515869140625\n      ],\n      [\n        \"▁財\",\n        -10.22670841217041\n      ],\n      [\n        \"▁供給\",\n        -10.22671890258789\n      ],\n      [\n        \"史\",\n        -10.227409362792969\n      ],\n      [\n        \"▁目指す\",\n        -10.228360176086426\n      ],\n      [\n        \"▁攻略\",\n        -10.228671073913574\n      ],\n      [\n        \"▁定\",\n        -10.229308128356934\n      ],\n      [\n        \"▁地上\",\n        -10.229634284973145\n      ],\n      [\n        \"▁徹底\",\n        -10.229820251464844\n      ],\n      [\n        \"▁ずつ\",\n        -10.230225563049316\n      ],\n      [\n        \"多\",\n        -10.231148719787598\n      ],\n      [\n        \"▁独自の\",\n        -10.231205940246582\n      ],\n      [\n        \"ジー\",\n        -10.231724739074707\n      ],\n      [\n        \"▁44\",\n        -10.232118606567383\n      ],\n      [\n        \"船\",\n        -10.232385635375977\n      ],\n      [\n        \"▁移行\",\n        -10.23312759399414\n      ],\n      [\n        \"▁同士\",\n        -10.233534812927246\n      ],\n      [\n        \"▁予算\",\n        -10.234079360961914\n      ],\n      [\n        \"▁関\",\n        -10.234198570251465\n      ],\n      [\n        \"▁佐賀\",\n        -10.23452091217041\n      ],\n      [\n        \"▁創設\",\n        -10.234539031982422\n      ],\n      [\n        \"▁弟\",\n        -10.235224723815918\n      ],\n      [\n        \"▁鏡\",\n        -10.235508918762207\n      ],\n      [\n        \"▁キッズ\",\n        -10.23554801940918\n      ],\n      [\n        \"▁艦隊\",\n        -10.235628128051758\n      ],\n      [\n        \"▁化粧\",\n        -10.235630989074707\n      ],\n      [\n        \"▁徒歩\",\n        -10.236654281616211\n      ],\n      [\n        \"▁探す\",\n        -10.236726760864258\n      ],\n      [\n        \"▁チャンネル\",\n        -10.237210273742676\n      ],\n      [\n        \"ント\",\n        -10.237351417541504\n      ],\n      [\n        \"▁ダンス\",\n        -10.238512992858887\n      ],\n      [\n        \"▁野菜\",\n        -10.238831520080566\n      ],\n      [\n        \"▁豊\",\n        -10.239356994628906\n      ],\n      [\n        \"める\",\n        -10.240373611450195\n      ],\n      [\n        \"▁育成\",\n        -10.241013526916504\n      ],\n      [\n        \"シア\",\n        -10.241768836975098\n      ],\n      [\n        \"▁クリスマス\",\n        -10.242165565490723\n      ],\n      [\n        \"▁技\",\n        -10.242307662963867\n      ],\n      [\n        \"▁ノースフェイス\",\n        -10.242383003234863\n      ],\n      [\n        \"▁ユニット\",\n        -10.242718696594238\n      ],\n      [\n        \"▁嬉しい\",\n        -10.242877960205078\n      ],\n      [\n        \"▁残り\",\n        -10.24290943145752\n      ],\n      [\n        \"▁閲覧\",\n        -10.24309253692627\n      ],\n      [\n        \"▁性格\",\n        -10.244415283203125\n      ],\n      [\n        \"▁トイレ\",\n        -10.24507999420166\n      ],\n      [\n        \"▁コーヒー\",\n        -10.245301246643066\n      ],\n      [\n        \"●\",\n        -10.245811462402344\n      ],\n      [\n        \"▁楽しむ\",\n        -10.245985984802246\n      ],\n      [\n        \"▁置いて\",\n        -10.246166229248047\n      ],\n      [\n        \"▁忠\",\n        -10.247074127197266\n      ],\n      [\n        \",000\",\n        -10.247445106506348\n      ],\n      [\n        \"▁リー\",\n        -10.247515678405762\n      ],\n      [\n        \"▁打ち\",\n        -10.248457908630371\n      ],\n      [\n        \"▁む\",\n        -10.24931526184082\n      ],\n      [\n        \"父\",\n        -10.249855995178223\n      ],\n      [\n        \"蔵\",\n        -10.250210762023926\n      ],\n      [\n        \"▁取り組み\",\n        -10.25031566619873\n      ],\n      [\n        \"▁栃木\",\n        -10.250349998474121\n      ],\n      [\n        \"▁呼び\",\n        -10.250398635864258\n      ],\n      [\n        \"▁インタビュー\",\n        -10.250503540039062\n      ],\n      [\n        \"▁基地\",\n        -10.25117015838623\n      ],\n      [\n        \"意\",\n        -10.251445770263672\n      ],\n      [\n        \"▁持た\",\n        -10.251594543457031\n      ],\n      [\n        \"▁変\",\n        -10.25228214263916\n      ],\n      [\n        \"▁和歌山\",\n        -10.252452850341797\n      ],\n      [\n        \"▁岩手\",\n        -10.252676963806152\n      ],\n      [\n        \"▁同様\",\n        -10.25295639038086\n      ],\n      [\n        \"▁とおり\",\n        -10.253084182739258\n      ],\n      [\n        \"▁公共\",\n        -10.253095626831055\n      ],\n      [\n        \"▁つく\",\n        -10.253410339355469\n      ],\n      [\n        \"▁ホワイト\",\n        -10.253459930419922\n      ],\n      [\n        \"▁オール\",\n        -10.25449275970459\n      ],\n      [\n        \"▁材\",\n        -10.254768371582031\n      ],\n      [\n        \"▁平和\",\n        -10.254971504211426\n      ],\n      [\n        \"▁憲法\",\n        -10.255131721496582\n      ],\n      [\n        \"▁スキル\",\n        -10.255338668823242\n      ],\n      [\n        \"▁査定\",\n        -10.255417823791504\n      ],\n      [\n        \"▁最後に\",\n        -10.25562858581543\n      ],\n      [\n        \"▁程\",\n        -10.255643844604492\n      ],\n      [\n        \"▁継承\",\n        -10.256033897399902\n      ],\n      [\n        \"▁よろしく\",\n        -10.258008003234863\n      ],\n      [\n        \"▁傷\",\n        -10.258216857910156\n      ],\n      [\n        \"▁―\",\n        -10.258612632751465\n      ],\n      [\n        \"▁地下\",\n        -10.258716583251953\n      ],\n      [\n        \"▁藤\",\n        -10.258809089660645\n      ],\n      [\n        \"▁可能に\",\n        -10.259041786193848\n      ],\n      [\n        \"▁極\",\n        -10.259828567504883\n      ],\n      [\n        \"2000\",\n        -10.260284423828125\n      ],\n      [\n        \"▁聞いた\",\n        -10.260334014892578\n      ],\n      [\n        \"もし\",\n        -10.260987281799316\n      ],\n      [\n        \"駅\",\n        -10.261507987976074\n      ],\n      [\n        \"▁バイク\",\n        -10.261528968811035\n      ],\n      [\n        \"▁有名な\",\n        -10.261678695678711\n      ],\n      [\n        \"▁申し上げ\",\n        -10.261812210083008\n      ],\n      [\n        \"▁当日\",\n        -10.26229190826416\n      ],\n      [\n        \"▁特集\",\n        -10.26279354095459\n      ],\n      [\n        \"▁送信\",\n        -10.263455390930176\n      ],\n      [\n        \"▁観測\",\n        -10.263607025146484\n      ],\n      [\n        \"▁いれば\",\n        -10.264095306396484\n      ],\n      [\n        \"▁ほ\",\n        -10.264127731323242\n      ],\n      [\n        \"▁ネタ\",\n        -10.264459609985352\n      ],\n      [\n        \"▁込んだ\",\n        -10.265904426574707\n      ],\n      [\n        \"▁資産\",\n        -10.266158103942871\n      ],\n      [\n        \"▁進行\",\n        -10.26626968383789\n      ],\n      [\n        \"▁終わった\",\n        -10.266983985900879\n      ],\n      [\n        \"▁根\",\n        -10.267513275146484\n      ],\n      [\n        \"▁1980\",\n        -10.267542839050293\n      ],\n      [\n        \"▁目指して\",\n        -10.267694473266602\n      ],\n      [\n        \"ED\",\n        -10.268234252929688\n      ],\n      [\n        \"▁診療\",\n        -10.268455505371094\n      ],\n      [\n        \"今年\",\n        -10.268547058105469\n      ],\n      [\n        \"▁手法\",\n        -10.268799781799316\n      ],\n      [\n        \"▁脱\",\n        -10.2689790725708\n      ],\n      [\n        \"伝\",\n        -10.269187927246094\n      ],\n      [\n        \"▁置く\",\n        -10.269268989562988\n      ],\n      [\n        \"ッシュ\",\n        -10.269268989562988\n      ],\n      [\n        \"▁ロゴ\",\n        -10.269367218017578\n      ],\n      [\n        \"▁ゲスト\",\n        -10.269486427307129\n      ],\n      [\n        \"13\",\n        -10.26972484588623\n      ],\n      [\n        \"▁感情\",\n        -10.27202320098877\n      ],\n      [\n        \"▁文書\",\n        -10.27203369140625\n      ],\n      [\n        \"当初\",\n        -10.27252197265625\n      ],\n      [\n        \"▁湾\",\n        -10.272761344909668\n      ],\n      [\n        \"だが\",\n        -10.273442268371582\n      ],\n      [\n        \"▁最初に\",\n        -10.273465156555176\n      ],\n      [\n        \"▁扱い\",\n        -10.27420425415039\n      ],\n      [\n        \"▁エロ\",\n        -10.274316787719727\n      ],\n      [\n        \"▁箱\",\n        -10.27452278137207\n      ],\n      [\n        \"▁高知\",\n        -10.274967193603516\n      ],\n      [\n        \"セン\",\n        -10.275060653686523\n      ],\n      [\n        \"▁急\",\n        -10.275070190429688\n      ],\n      [\n        \"▁オフィス\",\n        -10.27512264251709\n      ],\n      [\n        \"▁進め\",\n        -10.275641441345215\n      ],\n      [\n        \"▁山梨\",\n        -10.27569580078125\n      ],\n      [\n        \"ゾ\",\n        -10.276543617248535\n      ],\n      [\n        \"ジュ\",\n        -10.27712345123291\n      ],\n      [\n        \"▁縁\",\n        -10.277307510375977\n      ],\n      [\n        \"▁スポット\",\n        -10.277511596679688\n      ],\n      [\n        \"歌\",\n        -10.277637481689453\n      ],\n      [\n        \"▁杯\",\n        -10.27868938446045\n      ],\n      [\n        \"陽\",\n        -10.278707504272461\n      ],\n      [\n        \"▁経由\",\n        -10.278886795043945\n      ],\n      [\n        \"▁いえば\",\n        -10.278934478759766\n      ],\n      [\n        \"▁始まった\",\n        -10.279053688049316\n      ],\n      [\n        \"言\",\n        -10.279109001159668\n      ],\n      [\n        \"▁単\",\n        -10.27911376953125\n      ],\n      [\n        \"▁堂\",\n        -10.27929401397705\n      ],\n      [\n        \"▁生きて\",\n        -10.279444694519043\n      ],\n      [\n        \"▁欧\",\n        -10.27973747253418\n      ],\n      [\n        \"▁書く\",\n        -10.279924392700195\n      ],\n      [\n        \"▁姿勢\",\n        -10.279987335205078\n      ],\n      [\n        \"▁事例\",\n        -10.280543327331543\n      ],\n      [\n        \"▁ルー\",\n        -10.280649185180664\n      ],\n      [\n        \"▁オーストラリア\",\n        -10.280738830566406\n      ],\n      [\n        \"▁IT\",\n        -10.28093147277832\n      ],\n      [\n        \"園\",\n        -10.281234741210938\n      ],\n      [\n        \"▁緑\",\n        -10.281266212463379\n      ],\n      [\n        \"▁否定\",\n        -10.281597137451172\n      ],\n      [\n        \"▁食べて\",\n        -10.281678199768066\n      ],\n      [\n        \"▁兄\",\n        -10.282051086425781\n      ],\n      [\n        \"約\",\n        -10.282184600830078\n      ],\n      [\n        \"▁疑問\",\n        -10.282252311706543\n      ],\n      [\n        \"▁江\",\n        -10.282488822937012\n      ],\n      [\n        \"▁無理\",\n        -10.28331470489502\n      ],\n      [\n        \"個人\",\n        -10.283439636230469\n      ],\n      [\n        \"at\",\n        -10.284222602844238\n      ],\n      [\n        \"▁formula\",\n        -10.2847900390625\n      ],\n      [\n        \"▁ゴルフ\",\n        -10.287172317504883\n      ],\n      [\n        \"▁有効\",\n        -10.287229537963867\n      ],\n      [\n        \"▁スマートフォン\",\n        -10.287385940551758\n      ],\n      [\n        \"▁決め\",\n        -10.287618637084961\n      ],\n      [\n        \"▁想像\",\n        -10.28805923461914\n      ],\n      [\n        \"▁政\",\n        -10.289105415344238\n      ],\n      [\n        \"▁伊\",\n        -10.289315223693848\n      ],\n      [\n        \"▁住んで\",\n        -10.289346694946289\n      ],\n      [\n        \"▁災害\",\n        -10.28990650177002\n      ],\n      [\n        \"▁路\",\n        -10.291058540344238\n      ],\n      [\n        \"▁像\",\n        -10.291245460510254\n      ],\n      [\n        \"▁王座\",\n        -10.291836738586426\n      ],\n      [\n        \"▁解消\",\n        -10.292037010192871\n      ],\n      [\n        \"▁史上\",\n        -10.292317390441895\n      ],\n      [\n        \"▁コミック\",\n        -10.292651176452637\n      ],\n      [\n        \"▁犯罪\",\n        -10.292767524719238\n      ],\n      [\n        \"▁¥\",\n        -10.293030738830566\n      ],\n      [\n        \"▁キッチン\",\n        -10.293268203735352\n      ],\n      [\n        \"▁タグ\",\n        -10.293280601501465\n      ],\n      [\n        \"▁41\",\n        -10.293612480163574\n      ],\n      [\n        \"来\",\n        -10.294169425964355\n      ],\n      [\n        \"▁伴う\",\n        -10.29469108581543\n      ],\n      [\n        \"ート\",\n        -10.294713973999023\n      ],\n      [\n        \"▁翻訳\",\n        -10.294779777526855\n      ],\n      [\n        \"▁逮捕\",\n        -10.294806480407715\n      ],\n      [\n        \"▁美しい\",\n        -10.294888496398926\n      ],\n      [\n        \"▁聞く\",\n        -10.296477317810059\n      ],\n      [\n        \"▁教師\",\n        -10.296792030334473\n      ],\n      [\n        \"▁若\",\n        -10.296987533569336\n      ],\n      [\n        \"▁上げる\",\n        -10.297057151794434\n      ],\n      [\n        \"▁いわゆる\",\n        -10.297213554382324\n      ],\n      [\n        \"リス\",\n        -10.297266006469727\n      ],\n      [\n        \"▁課\",\n        -10.298113822937012\n      ],\n      [\n        \"輪\",\n        -10.298396110534668\n      ],\n      [\n        \"県\",\n        -10.298681259155273\n      ],\n      [\n        \"▁くん\",\n        -10.299677848815918\n      ],\n      [\n        \"▁u\",\n        -10.299732208251953\n      ],\n      [\n        \"▁術\",\n        -10.30102825164795\n      ],\n      [\n        \"例\",\n        -10.30107307434082\n      ],\n      [\n        \"▁栄養\",\n        -10.30151653289795\n      ],\n      [\n        \"▁Amazon\",\n        -10.301549911499023\n      ],\n      [\n        \"▁相続\",\n        -10.302424430847168\n      ],\n      [\n        \"▁原子\",\n        -10.302757263183594\n      ],\n      [\n        \"▁当該\",\n        -10.302800178527832\n      ],\n      [\n        \"コー\",\n        -10.303447723388672\n      ],\n      [\n        \"▁全部\",\n        -10.303569793701172\n      ],\n      [\n        \"ひ\",\n        -10.304044723510742\n      ],\n      [\n        \"装\",\n        -10.304274559020996\n      ],\n      [\n        \"▁br\",\n        -10.305057525634766\n      ],\n      [\n        \"▁基づく\",\n        -10.306203842163086\n      ],\n      [\n        \"パン\",\n        -10.306390762329102\n      ],\n      [\n        \"▁カン\",\n        -10.306808471679688\n      ],\n      [\n        \"▁受付\",\n        -10.306927680969238\n      ],\n      [\n        \"骨\",\n        -10.306930541992188\n      ],\n      [\n        \"▁回答\",\n        -10.30696964263916\n      ],\n      [\n        \"▁吉\",\n        -10.307116508483887\n      ],\n      [\n        \"ティー\",\n        -10.307409286499023\n      ],\n      [\n        \"▁メダル\",\n        -10.30815315246582\n      ],\n      [\n        \"▁替え\",\n        -10.308550834655762\n      ],\n      [\n        \"▁優先\",\n        -10.308573722839355\n      ],\n      [\n        \"▁守る\",\n        -10.308721542358398\n      ],\n      [\n        \"人物\",\n        -10.308985710144043\n      ],\n      [\n        \"夜\",\n        -10.309078216552734\n      ],\n      [\n        \"品\",\n        -10.30964183807373\n      ],\n      [\n        \"▁パーク\",\n        -10.309723854064941\n      ],\n      [\n        \"▁展\",\n        -10.310312271118164\n      ],\n      [\n        \"一般\",\n        -10.310426712036133\n      ],\n      [\n        \"▁In\",\n        -10.310674667358398\n      ],\n      [\n        \"れた\",\n        -10.311141967773438\n      ],\n      [\n        \"▁出力\",\n        -10.311250686645508\n      ],\n      [\n        \"介\",\n        -10.311508178710938\n      ],\n      [\n        \"▁働いて\",\n        -10.311566352844238\n      ],\n      [\n        \"▁伝説\",\n        -10.312043190002441\n      ],\n      [\n        \"▁変換\",\n        -10.312213897705078\n      ],\n      [\n        \"▁中継\",\n        -10.3123140335083\n      ],\n      [\n        \"▁応募\",\n        -10.312585830688477\n      ],\n      [\n        \"店\",\n        -10.312658309936523\n      ],\n      [\n        \"▁イオン\",\n        -10.313222885131836\n      ],\n      [\n        \"21\",\n        -10.313742637634277\n      ],\n      [\n        \"il\",\n        -10.314043045043945\n      ],\n      [\n        \"このような\",\n        -10.31427001953125\n      ],\n      [\n        \"▁大手\",\n        -10.314430236816406\n      ],\n      [\n        \"▁考慮\",\n        -10.314496994018555\n      ],\n      [\n        \"▁そのもの\",\n        -10.314847946166992\n      ],\n      [\n        \"▁アフリカ\",\n        -10.315502166748047\n      ],\n      [\n        \"▁歌手\",\n        -10.31650161743164\n      ],\n      [\n        \"▁穴\",\n        -10.316633224487305\n      ],\n      [\n        \"任\",\n        -10.316742897033691\n      ],\n      [\n        \"▁保有\",\n        -10.3167724609375\n      ],\n      [\n        \"▁必要に\",\n        -10.316987991333008\n      ],\n      [\n        \"クラ\",\n        -10.31732177734375\n      ],\n      [\n        \"公\",\n        -10.317361831665039\n      ],\n      [\n        \"▁巻き\",\n        -10.31736946105957\n      ],\n      [\n        \"▁協議\",\n        -10.317549705505371\n      ],\n      [\n        \"▁st\",\n        -10.317668914794922\n      ],\n      [\n        \"▁刊行\",\n        -10.318114280700684\n      ],\n      [\n        \"▁レストラン\",\n        -10.319147109985352\n      ],\n      [\n        \"宗\",\n        -10.319180488586426\n      ],\n      [\n        \"樹\",\n        -10.319537162780762\n      ],\n      [\n        \"▁大切な\",\n        -10.319780349731445\n      ],\n      [\n        \"▁セキュリティ\",\n        -10.31999683380127\n      ],\n      [\n        \"▁合い\",\n        -10.320281982421875\n      ],\n      [\n        \"▁いえ\",\n        -10.320688247680664\n      ],\n      [\n        \"▁まとめて\",\n        -10.320998191833496\n      ],\n      [\n        \"▁かかり\",\n        -10.321187973022461\n      ],\n      [\n        \"▁立て\",\n        -10.321287155151367\n      ],\n      [\n        \"▁言えば\",\n        -10.32142448425293\n      ],\n      [\n        \"▁兄弟\",\n        -10.321900367736816\n      ],\n      [\n        \"|\",\n        -10.322455406188965\n      ],\n      [\n        \"▁気分\",\n        -10.322455406188965\n      ],\n      [\n        \"越\",\n        -10.322491645812988\n      ],\n      [\n        \"▁発信\",\n        -10.322968482971191\n      ],\n      [\n        \"▁再開\",\n        -10.323111534118652\n      ],\n      [\n        \"岡山\",\n        -10.323217391967773\n      ],\n      [\n        \"▁連盟\",\n        -10.323295593261719\n      ],\n      [\n        \"▁令和\",\n        -10.323410987854004\n      ],\n      [\n        \"▁廃\",\n        -10.323676109313965\n      ],\n      [\n        \"▁損害\",\n        -10.323831558227539\n      ],\n      [\n        \"▁場面\",\n        -10.323908805847168\n      ],\n      [\n        \"▁ガイド\",\n        -10.324475288391113\n      ],\n      [\n        \"▁転職\",\n        -10.324549674987793\n      ],\n      [\n        \"▁罪\",\n        -10.324551582336426\n      ],\n      [\n        \"▁予選\",\n        -10.324552536010742\n      ],\n      [\n        \"広\",\n        -10.324559211730957\n      ],\n      [\n        \"▁愛媛\",\n        -10.324742317199707\n      ],\n      [\n        \"▁サーバー\",\n        -10.324773788452148\n      ],\n      [\n        \"▁片\",\n        -10.325254440307617\n      ],\n      [\n        \"▁活性\",\n        -10.325481414794922\n      ],\n      [\n        \"▁拡張\",\n        -10.32558822631836\n      ],\n      [\n        \"▁〈\",\n        -10.32564640045166\n      ],\n      [\n        \"▁国道\",\n        -10.327262878417969\n      ],\n      [\n        \"▁窓\",\n        -10.327431678771973\n      ],\n      [\n        \"▁アカウント\",\n        -10.32778263092041\n      ],\n      [\n        \"澤\",\n        -10.328670501708984\n      ],\n      [\n        \"▁変わって\",\n        -10.328695297241211\n      ],\n      [\n        \"▁療法\",\n        -10.328722953796387\n      ],\n      [\n        \"▁小さい\",\n        -10.328736305236816\n      ],\n      [\n        \"▁プラス\",\n        -10.328839302062988\n      ],\n      [\n        \"▁承認\",\n        -10.329033851623535\n      ],\n      [\n        \"▁かかわら\",\n        -10.32906723022461\n      ],\n      [\n        \"▁ボール\",\n        -10.329224586486816\n      ],\n      [\n        \"▁筋\",\n        -10.329428672790527\n      ],\n      [\n        \"▁当選\",\n        -10.329472541809082\n      ],\n      [\n        \"▁知事\",\n        -10.329477310180664\n      ],\n      [\n        \"▁成果\",\n        -10.329695701599121\n      ],\n      [\n        \"▁すぎ\",\n        -10.329834938049316\n      ],\n      [\n        \"▁たくさんの\",\n        -10.329888343811035\n      ],\n      [\n        \"▁น\",\n        -10.329916000366211\n      ],\n      [\n        \"▁端末\",\n        -10.330236434936523\n      ],\n      [\n        \"▁素晴らしい\",\n        -10.330312728881836\n      ],\n      [\n        \"▁会話\",\n        -10.330910682678223\n      ],\n      [\n        \"▁カテゴリー\",\n        -10.33116340637207\n      ],\n      [\n        \"土\",\n        -10.33172607421875\n      ],\n      [\n        \"▁ならば\",\n        -10.331989288330078\n      ],\n      [\n        \"▁変わり\",\n        -10.332175254821777\n      ],\n      [\n        \"▁老\",\n        -10.332212448120117\n      ],\n      [\n        \"タイ\",\n        -10.332416534423828\n      ],\n      [\n        \"▁主要\",\n        -10.33281421661377\n      ],\n      [\n        \"役\",\n        -10.332989692687988\n      ],\n      [\n        \"▁肩\",\n        -10.333133697509766\n      ],\n      [\n        \"▁ころ\",\n        -10.333293914794922\n      ],\n      [\n        \"90\",\n        -10.33350944519043\n      ],\n      [\n        \"▁午前\",\n        -10.334228515625\n      ],\n      [\n        \"▁滋賀\",\n        -10.3348970413208\n      ],\n      [\n        \"▁悪く\",\n        -10.335927963256836\n      ],\n      [\n        \"▁秀\",\n        -10.336341857910156\n      ],\n      [\n        \"▁富士\",\n        -10.336898803710938\n      ],\n      [\n        \"▁余\",\n        -10.336955070495605\n      ],\n      [\n        \"ード\",\n        -10.33708381652832\n      ],\n      [\n        \"▁補助\",\n        -10.337424278259277\n      ],\n      [\n        \"▁概念\",\n        -10.337969779968262\n      ],\n      [\n        \"▁参戦\",\n        -10.33797836303711\n      ],\n      [\n        \"▁歯科\",\n        -10.338166236877441\n      ],\n      [\n        \"▁祝い\",\n        -10.338294982910156\n      ],\n      [\n        \"*\",\n        -10.338508605957031\n      ],\n      [\n        \"▁合\",\n        -10.338797569274902\n      ],\n      [\n        \"▁デュベティカ\",\n        -10.33934211730957\n      ],\n      [\n        \"▁命令\",\n        -10.339689254760742\n      ],\n      [\n        \"▁ギ\",\n        -10.340006828308105\n      ],\n      [\n        \"▁人材\",\n        -10.340754508972168\n      ],\n      [\n        \"▁つか\",\n        -10.341043472290039\n      ],\n      [\n        \"▁回転\",\n        -10.341477394104004\n      ],\n      [\n        \"▁考えた\",\n        -10.341629028320312\n      ],\n      [\n        \"▁百\",\n        -10.34170150756836\n      ],\n      [\n        \"▁なんか\",\n        -10.341763496398926\n      ],\n      [\n        \"奈\",\n        -10.342241287231445\n      ],\n      [\n        \"ヨ\",\n        -10.343354225158691\n      ],\n      [\n        \"▁以後\",\n        -10.343472480773926\n      ],\n      [\n        \"▁ギフト\",\n        -10.34399700164795\n      ],\n      [\n        \"▁エステ\",\n        -10.34416389465332\n      ],\n      [\n        \"▁我々\",\n        -10.344646453857422\n      ],\n      [\n        \"▁独\",\n        -10.3447904586792\n      ],\n      [\n        \"▁CBD\",\n        -10.345341682434082\n      ],\n      [\n        \"▁描いた\",\n        -10.34559440612793\n      ],\n      [\n        \"▁相場\",\n        -10.345691680908203\n      ],\n      [\n        \"um\",\n        -10.346540451049805\n      ],\n      [\n        \"かつて\",\n        -10.346600532531738\n      ],\n      [\n        \"▁系列\",\n        -10.346840858459473\n      ],\n      [\n        \"古\",\n        -10.347200393676758\n      ],\n      [\n        \"論\",\n        -10.347315788269043\n      ],\n      [\n        \"不\",\n        -10.347707748413086\n      ],\n      [\n        \"▁オフ\",\n        -10.347711563110352\n      ],\n      [\n        \"▁結局\",\n        -10.347859382629395\n      ],\n      [\n        \"▁キャ\",\n        -10.348244667053223\n      ],\n      [\n        \"オー\",\n        -10.348637580871582\n      ],\n      [\n        \"▁武器\",\n        -10.348737716674805\n      ],\n      [\n        \"▁1999\",\n        -10.348862648010254\n      ],\n      [\n        \"▁軸\",\n        -10.349011421203613\n      ],\n      [\n        \"▁スペシャル\",\n        -10.3490571975708\n      ],\n      [\n        \"▁証拠\",\n        -10.349150657653809\n      ],\n      [\n        \"▁THE\",\n        -10.349172592163086\n      ],\n      [\n        \"▁京\",\n        -10.349203109741211\n      ],\n      [\n        \"▁ボディ\",\n        -10.349509239196777\n      ],\n      [\n        \"▁ガラス\",\n        -10.349565505981445\n      ],\n      [\n        \"▁ハン\",\n        -10.349692344665527\n      ],\n      [\n        \"▁隻\",\n        -10.349742889404297\n      ],\n      [\n        \"▁著者\",\n        -10.349776268005371\n      ],\n      [\n        \"▁更に\",\n        -10.349796295166016\n      ],\n      [\n        \"トル\",\n        -10.349839210510254\n      ],\n      [\n        \"球\",\n        -10.350180625915527\n      ],\n      [\n        \"▁現象\",\n        -10.3507080078125\n      ],\n      [\n        \"▁ハー\",\n        -10.350826263427734\n      ],\n      [\n        \"▁64\",\n        -10.351364135742188\n      ],\n      [\n        \"▁執筆\",\n        -10.35138988494873\n      ],\n      [\n        \"▁同盟\",\n        -10.351421356201172\n      ],\n      [\n        \"▁欧州\",\n        -10.351430892944336\n      ],\n      [\n        \"ブラ\",\n        -10.351686477661133\n      ],\n      [\n        \"▁疾患\",\n        -10.3517427444458\n      ],\n      [\n        \"▁有する\",\n        -10.351768493652344\n      ],\n      [\n        \"▁詳しく\",\n        -10.351832389831543\n      ],\n      [\n        \"▁要望\",\n        -10.351848602294922\n      ],\n      [\n        \"▁披露\",\n        -10.351983070373535\n      ],\n      [\n        \"▁始まる\",\n        -10.35221004486084\n      ],\n      [\n        \"▁谷\",\n        -10.352385520935059\n      ],\n      [\n        \"▁マル\",\n        -10.352758407592773\n      ],\n      [\n        \"▁首都\",\n        -10.352895736694336\n      ],\n      [\n        \"ない\",\n        -10.3539400100708\n      ],\n      [\n        \"米\",\n        -10.35404109954834\n      ],\n      [\n        \"▁通過\",\n        -10.354351043701172\n      ],\n      [\n        \"▁危機\",\n        -10.354893684387207\n      ],\n      [\n        \"▁措置\",\n        -10.354979515075684\n      ],\n      [\n        \"▁ボックス\",\n        -10.35595417022705\n      ],\n      [\n        \"▁ブック\",\n        -10.356493949890137\n      ],\n      [\n        \"▁パーツ\",\n        -10.35720443725586\n      ],\n      [\n        \"▁鳥取\",\n        -10.357298851013184\n      ],\n      [\n        \"▁いろいろ\",\n        -10.358075141906738\n      ],\n      [\n        \"河\",\n        -10.358293533325195\n      ],\n      [\n        \"▁がん\",\n        -10.358309745788574\n      ],\n      [\n        \"藤\",\n        -10.358431816101074\n      ],\n      [\n        \"也\",\n        -10.358745574951172\n      ],\n      [\n        \"▁建\",\n        -10.359408378601074\n      ],\n      [\n        \"点\",\n        -10.359424591064453\n      ],\n      [\n        \"▁トン\",\n        -10.359647750854492\n      ],\n      [\n        \"▁セミナー\",\n        -10.35976791381836\n      ],\n      [\n        \"状\",\n        -10.360755920410156\n      ],\n      [\n        \"▁惑星\",\n        -10.360832214355469\n      ],\n      [\n        \"▁竹\",\n        -10.360955238342285\n      ],\n      [\n        \"▁オススメ\",\n        -10.361659049987793\n      ],\n      [\n        \"▁HP\",\n        -10.362462997436523\n      ],\n      [\n        \"▁弊社\",\n        -10.362558364868164\n      ],\n      [\n        \"▁市長\",\n        -10.362619400024414\n      ],\n      [\n        \"▁緊急\",\n        -10.362659454345703\n      ],\n      [\n        \"▁OS\",\n        -10.362911224365234\n      ],\n      [\n        \"▁ドライバー\",\n        -10.363279342651367\n      ],\n      [\n        \"▁経\",\n        -10.36337947845459\n      ],\n      [\n        \"▁結\",\n        -10.36474609375\n      ],\n      [\n        \"▁°\",\n        -10.364830017089844\n      ],\n      [\n        \"▁辞典\",\n        -10.3649263381958\n      ],\n      [\n        \"ルト\",\n        -10.36512279510498\n      ],\n      [\n        \"泉\",\n        -10.365804672241211\n      ],\n      [\n        \"八\",\n        -10.366159439086914\n      ],\n      [\n        \"▁シティ\",\n        -10.3662109375\n      ],\n      [\n        \"▁習慣\",\n        -10.36627197265625\n      ],\n      [\n        \"▁進学\",\n        -10.366511344909668\n      ],\n      [\n        \"▁深い\",\n        -10.367547988891602\n      ],\n      [\n        \"▁翌年\",\n        -10.367928504943848\n      ],\n      [\n        \"▁数字\",\n        -10.36801528930664\n      ],\n      [\n        \"▁チャ\",\n        -10.36807918548584\n      ],\n      [\n        \"▁忘れ\",\n        -10.368093490600586\n      ],\n      [\n        \"▁47\",\n        -10.368891716003418\n      ],\n      [\n        \"▁物理\",\n        -10.369668006896973\n      ],\n      [\n        \"チン\",\n        -10.369876861572266\n      ],\n      [\n        \"進\",\n        -10.369884490966797\n      ],\n      [\n        \"▁合う\",\n        -10.370368003845215\n      ],\n      [\n        \"▁レッスン\",\n        -10.370404243469238\n      ],\n      [\n        \"賀\",\n        -10.370760917663574\n      ],\n      [\n        \"▁文章\",\n        -10.3710355758667\n      ],\n      [\n        \"▁思想\",\n        -10.371237754821777\n      ],\n      [\n        \"▁ライ\",\n        -10.371244430541992\n      ],\n      [\n        \"▁楽しめる\",\n        -10.371539115905762\n      ],\n      [\n        \"▁生み\",\n        -10.372221946716309\n      ],\n      [\n        \"ation\",\n        -10.372426986694336\n      ],\n      [\n        \"▁メジャー\",\n        -10.3726224899292\n      ],\n      [\n        \"曲\",\n        -10.372980117797852\n      ],\n      [\n        \"▁判定\",\n        -10.37314224243164\n      ],\n      [\n        \"▁探偵\",\n        -10.3733491897583\n      ],\n      [\n        \"▁re\",\n        -10.37336540222168\n      ],\n      [\n        \"▁定め\",\n        -10.373544692993164\n      ],\n      [\n        \"▁発達\",\n        -10.373565673828125\n      ],\n      [\n        \"▁雇用\",\n        -10.373750686645508\n      ],\n      [\n        \"▁魔法\",\n        -10.374417304992676\n      ],\n      [\n        \"▁セックス\",\n        -10.375133514404297\n      ],\n      [\n        \"▁進んで\",\n        -10.375678062438965\n      ],\n      [\n        \"夏\",\n        -10.3758544921875\n      ],\n      [\n        \"▁エン\",\n        -10.375908851623535\n      ],\n      [\n        \"▁指名\",\n        -10.376277923583984\n      ],\n      [\n        \"ER\",\n        -10.37660026550293\n      ],\n      [\n        \"▁牛\",\n        -10.376936912536621\n      ],\n      [\n        \"▁志\",\n        -10.377666473388672\n      ],\n      [\n        \"25\",\n        -10.37808895111084\n      ],\n      [\n        \"▁限\",\n        -10.378119468688965\n      ],\n      [\n        \"▁主な\",\n        -10.379281044006348\n      ],\n      [\n        \"▁ティ\",\n        -10.379584312438965\n      ],\n      [\n        \"▁民間\",\n        -10.379637718200684\n      ],\n      [\n        \"▁入社\",\n        -10.379780769348145\n      ],\n      [\n        \"制\",\n        -10.379859924316406\n      ],\n      [\n        \"2004\",\n        -10.3800048828125\n      ],\n      [\n        \"▁詩\",\n        -10.380074501037598\n      ],\n      [\n        \"▁ぞ\",\n        -10.380115509033203\n      ],\n      [\n        \"▁やら\",\n        -10.38046932220459\n      ],\n      [\n        \"▁●\",\n        -10.380616188049316\n      ],\n      [\n        \"▁香川\",\n        -10.380911827087402\n      ],\n      [\n        \"▁在\",\n        -10.381392478942871\n      ],\n      [\n        \"▁生き\",\n        -10.381439208984375\n      ],\n      [\n        \"▁普段\",\n        -10.381511688232422\n      ],\n      [\n        \"都\",\n        -10.381539344787598\n      ],\n      [\n        \"▁あらゆる\",\n        -10.381929397583008\n      ],\n      [\n        \"▁あげ\",\n        -10.382040023803711\n      ],\n      [\n        \"▁始めて\",\n        -10.38241958618164\n      ],\n      [\n        \"▁スピード\",\n        -10.382558822631836\n      ],\n      [\n        \"▁刺激\",\n        -10.382650375366211\n      ],\n      [\n        \"▁概要\",\n        -10.382974624633789\n      ],\n      [\n        \"▁天然\",\n        -10.383219718933105\n      ],\n      [\n        \"▁冊\",\n        -10.384076118469238\n      ],\n      [\n        \"▁例えば\",\n        -10.384346008300781\n      ],\n      [\n        \"▁昇格\",\n        -10.384509086608887\n      ],\n      [\n        \"ウェイ\",\n        -10.384779930114746\n      ],\n      [\n        \"▁ジャンル\",\n        -10.384949684143066\n      ],\n      [\n        \"トリ\",\n        -10.385407447814941\n      ],\n      [\n        \"▁脚本\",\n        -10.386109352111816\n      ],\n      [\n        \"▁同一\",\n        -10.386436462402344\n      ],\n      [\n        \"▁乾燥\",\n        -10.386594772338867\n      ],\n      [\n        \"▁結ぶ\",\n        -10.386606216430664\n      ],\n      [\n        \"▁落ち\",\n        -10.386618614196777\n      ],\n      [\n        \"▁永\",\n        -10.386853218078613\n      ],\n      [\n        \"めて\",\n        -10.386921882629395\n      ],\n      [\n        \"▁タウン\",\n        -10.387154579162598\n      ],\n      [\n        \"▁半島\",\n        -10.387262344360352\n      ],\n      [\n        \"▁面積\",\n        -10.387463569641113\n      ],\n      [\n        \"▁戸\",\n        -10.387630462646484\n      ],\n      [\n        \"ざ\",\n        -10.387742042541504\n      ],\n      [\n        \"▁ID\",\n        -10.387887954711914\n      ],\n      [\n        \"▁パートナー\",\n        -10.388225555419922\n      ],\n      [\n        \"▁パック\",\n        -10.388298034667969\n      ],\n      [\n        \"▁男女\",\n        -10.388802528381348\n      ],\n      [\n        \"ぼ\",\n        -10.388839721679688\n      ],\n      [\n        \"▁雑貨\",\n        -10.388845443725586\n      ],\n      [\n        \"▁商標\",\n        -10.388978004455566\n      ],\n      [\n        \"▁分割\",\n        -10.38909912109375\n      ],\n      [\n        \"森\",\n        -10.390250205993652\n      ],\n      [\n        \"▁テーブル\",\n        -10.390382766723633\n      ],\n      [\n        \"ay\",\n        -10.390890121459961\n      ],\n      [\n        \"▁宿\",\n        -10.391096115112305\n      ],\n      [\n        \"▁サイド\",\n        -10.391164779663086\n      ],\n      [\n        \"▁記者\",\n        -10.391397476196289\n      ],\n      [\n        \"▁進めて\",\n        -10.39148998260498\n      ],\n      [\n        \"▁郵便\",\n        -10.391502380371094\n      ],\n      [\n        \"ヘ\",\n        -10.392293930053711\n      ],\n      [\n        \"▁外部\",\n        -10.392454147338867\n      ],\n      [\n        \"▁ロング\",\n        -10.392610549926758\n      ],\n      [\n        \"▁幸\",\n        -10.392681121826172\n      ],\n      [\n        \"▁いつ\",\n        -10.392873764038086\n      ],\n      [\n        \"▁福\",\n        -10.393143653869629\n      ],\n      [\n        \"▁コンサート\",\n        -10.393157005310059\n      ],\n      [\n        \"▁期限\",\n        -10.39369010925293\n      ],\n      [\n        \"▁語って\",\n        -10.39419174194336\n      ],\n      [\n        \"▁大陸\",\n        -10.394214630126953\n      ],\n      [\n        \"かい\",\n        -10.394264221191406\n      ],\n      [\n        \"19\",\n        -10.394939422607422\n      ],\n      [\n        \"▁開\",\n        -10.395060539245605\n      ],\n      [\n        \"▁取材\",\n        -10.395159721374512\n      ],\n      [\n        \"▁課程\",\n        -10.395255088806152\n      ],\n      [\n        \"▁施行\",\n        -10.395392417907715\n      ],\n      [\n        \"▁Re\",\n        -10.395400047302246\n      ],\n      [\n        \"▁金属\",\n        -10.395685195922852\n      ],\n      [\n        \"略歴\",\n        -10.395817756652832\n      ],\n      [\n        \"話\",\n        -10.395822525024414\n      ],\n      [\n        \"▁両方\",\n        -10.3958740234375\n      ],\n      [\n        \"▁ママ\",\n        -10.396178245544434\n      ],\n      [\n        \"愛\",\n        -10.397112846374512\n      ],\n      [\n        \"▁ジェ\",\n        -10.397401809692383\n      ],\n      [\n        \"▁顧客\",\n        -10.397616386413574\n      ],\n      [\n        \"旧\",\n        -10.39778995513916\n      ],\n      [\n        \"▁ミス\",\n        -10.398008346557617\n      ],\n      [\n        \"▁問わ\",\n        -10.398163795471191\n      ],\n      [\n        \"▁求めて\",\n        -10.398272514343262\n      ],\n      [\n        \"▁居\",\n        -10.398802757263184\n      ],\n      [\n        \"▁表面\",\n        -10.3989839553833\n      ],\n      [\n        \"▁1970\",\n        -10.399073600769043\n      ],\n      [\n        \"▁過程\",\n        -10.399077415466309\n      ],\n      [\n        \"▁統計\",\n        -10.399312019348145\n      ],\n      [\n        \"▁AV\",\n        -10.399459838867188\n      ],\n      [\n        \"まり\",\n        -10.399803161621094\n      ],\n      [\n        \"▁分離\",\n        -10.399940490722656\n      ],\n      [\n        \"▁上位\",\n        -10.39996337890625\n      ],\n      [\n        \"▁母親\",\n        -10.40032958984375\n      ],\n      [\n        \"▁カジノ\",\n        -10.400348663330078\n      ],\n      [\n        \"▁持った\",\n        -10.400863647460938\n      ],\n      [\n        \"▁変える\",\n        -10.400907516479492\n      ],\n      [\n        \"▁地図\",\n        -10.401063919067383\n      ],\n      [\n        \"▁上げて\",\n        -10.401177406311035\n      ],\n      [\n        \"▁基づいて\",\n        -10.401188850402832\n      ],\n      [\n        \"▁ようで\",\n        -10.401477813720703\n      ],\n      [\n        \"ジャー\",\n        -10.401653289794922\n      ],\n      [\n        \"▁指す\",\n        -10.402029991149902\n      ],\n      [\n        \"▁オランダ\",\n        -10.402191162109375\n      ],\n      [\n        \"▁関心\",\n        -10.40241527557373\n      ],\n      [\n        \"調\",\n        -10.402687072753906\n      ],\n      [\n        \"▁楽しく\",\n        -10.402807235717773\n      ],\n      [\n        \"]\",\n        -10.40290355682373\n      ],\n      [\n        \"員\",\n        -10.403618812561035\n      ],\n      [\n        \"▁向かう\",\n        -10.404180526733398\n      ],\n      [\n        \"▁クリア\",\n        -10.404272079467773\n      ],\n      [\n        \"▁同様の\",\n        -10.404342651367188\n      ],\n      [\n        \"▁じ\",\n        -10.404364585876465\n      ],\n      [\n        \"▁もし\",\n        -10.404585838317871\n      ],\n      [\n        \"▁知れ\",\n        -10.404641151428223\n      ],\n      [\n        \"▁安く\",\n        -10.40524673461914\n      ],\n      [\n        \"▁けれども\",\n        -10.405365943908691\n      ],\n      [\n        \"▁就職\",\n        -10.405367851257324\n      ],\n      [\n        \"▁太平洋\",\n        -10.405671119689941\n      ],\n      [\n        \"開\",\n        -10.406060218811035\n      ],\n      [\n        \"▁現状\",\n        -10.406076431274414\n      ],\n      [\n        \"▁51\",\n        -10.406150817871094\n      ],\n      [\n        \"▁鳥\",\n        -10.40654182434082\n      ],\n      [\n        \"▁用いる\",\n        -10.406722068786621\n      ],\n      [\n        \"▁54\",\n        -10.40701961517334\n      ],\n      [\n        \"▁ダム\",\n        -10.407090187072754\n      ],\n      [\n        \"▁いま\",\n        -10.408557891845703\n      ],\n      [\n        \"▁リアル\",\n        -10.408573150634766\n      ],\n      [\n        \"▁クリニック\",\n        -10.408661842346191\n      ],\n      [\n        \"▁ルート\",\n        -10.408803939819336\n      ],\n      [\n        \"連\",\n        -10.40881633758545\n      ],\n      [\n        \"▁球\",\n        -10.408885955810547\n      ],\n      [\n        \"▁発送\",\n        -10.408915519714355\n      ],\n      [\n        \"▁最高の\",\n        -10.40892219543457\n      ],\n      [\n        \"▁かける\",\n        -10.410067558288574\n      ],\n      [\n        \"▁体育\",\n        -10.410075187683105\n      ],\n      [\n        \"▁ブラ\",\n        -10.410375595092773\n      ],\n      [\n        \"▁軌道\",\n        -10.411060333251953\n      ],\n      [\n        \"60\",\n        -10.411382675170898\n      ],\n      [\n        \"▁哲学\",\n        -10.411991119384766\n      ],\n      [\n        \"▁宗\",\n        -10.41267204284668\n      ],\n      [\n        \"▁友\",\n        -10.412779808044434\n      ],\n      [\n        \"▁厚\",\n        -10.412906646728516\n      ],\n      [\n        \"▁把握\",\n        -10.413262367248535\n      ],\n      [\n        \"▁進む\",\n        -10.413434982299805\n      ],\n      [\n        \"だから\",\n        -10.413847923278809\n      ],\n      [\n        \"▁銃\",\n        -10.413938522338867\n      ],\n      [\n        \"ter\",\n        -10.414321899414062\n      ],\n      [\n        \"紀\",\n        -10.414596557617188\n      ],\n      [\n        \"▁(3)\",\n        -10.414834022521973\n      ],\n      [\n        \"大学\",\n        -10.41535758972168\n      ],\n      [\n        \"▁向かって\",\n        -10.415421485900879\n      ],\n      [\n        \"▁ツ\",\n        -10.41596794128418\n      ],\n      [\n        \"▁学院\",\n        -10.416036605834961\n      ],\n      [\n        \"▁現役\",\n        -10.416062355041504\n      ],\n      [\n        \"▁遠\",\n        -10.416236877441406\n      ],\n      [\n        \"24\",\n        -10.417057037353516\n      ],\n      [\n        \"▁聞か\",\n        -10.417810440063477\n      ],\n      [\n        \"▁父親\",\n        -10.417868614196777\n      ],\n      [\n        \"たら\",\n        -10.417909622192383\n      ],\n      [\n        \"▁シン\",\n        -10.41791820526123\n      ],\n      [\n        \"▁浮気\",\n        -10.418021202087402\n      ],\n      [\n        \"▁プレイヤー\",\n        -10.418825149536133\n      ],\n      [\n        \"▁香\",\n        -10.418827056884766\n      ],\n      [\n        \"▁ボード\",\n        -10.418862342834473\n      ],\n      [\n        \"初\",\n        -10.41972827911377\n      ],\n      [\n        \"▁改造\",\n        -10.419764518737793\n      ],\n      [\n        \"▁収納\",\n        -10.420071601867676\n      ],\n      [\n        \"▁逆に\",\n        -10.420195579528809\n      ],\n      [\n        \"▁んだろう\",\n        -10.420354843139648\n      ],\n      [\n        \"声\",\n        -10.420442581176758\n      ],\n      [\n        \"▁最低\",\n        -10.420510292053223\n      ],\n      [\n        \"▁ギター\",\n        -10.420561790466309\n      ],\n      [\n        \"▁解散\",\n        -10.420865058898926\n      ],\n      [\n        \"▁進化\",\n        -10.421073913574219\n      ],\n      [\n        \"▁入手\",\n        -10.42123794555664\n      ],\n      [\n        \"▁龍\",\n        -10.421448707580566\n      ],\n      [\n        \"テレビ\",\n        -10.421660423278809\n      ],\n      [\n        \"ったり\",\n        -10.421821594238281\n      ],\n      [\n        \"▁趣味\",\n        -10.4219388961792\n      ],\n      [\n        \"▁抵抗\",\n        -10.422475814819336\n      ],\n      [\n        \"▁j\",\n        -10.422775268554688\n      ],\n      [\n        \"▁ヴィ\",\n        -10.422904014587402\n      ],\n      [\n        \"j\",\n        -10.42332935333252\n      ],\n      [\n        \"▁取って\",\n        -10.423440933227539\n      ],\n      [\n        \"チャー\",\n        -10.424064636230469\n      ],\n      [\n        \"▁しかし\",\n        -10.42443561553955\n      ],\n      [\n        \"▁グローバル\",\n        -10.424629211425781\n      ],\n      [\n        \"▁いたら\",\n        -10.424633979797363\n      ],\n      [\n        \"▁自信\",\n        -10.424702644348145\n      ],\n      [\n        \"ング\",\n        -10.424796104431152\n      ],\n      [\n        \"表\",\n        -10.424872398376465\n      ],\n      [\n        \"▁日記\",\n        -10.424890518188477\n      ],\n      [\n        \"キン\",\n        -10.425881385803223\n      ],\n      [\n        \"▁発揮\",\n        -10.426017761230469\n      ],\n      [\n        \"▁遺産\",\n        -10.426451683044434\n      ],\n      [\n        \"えて\",\n        -10.427022933959961\n      ],\n      [\n        \"▁手数\",\n        -10.427421569824219\n      ],\n      [\n        \"▁続けた\",\n        -10.427456855773926\n      ],\n      [\n        \"バス\",\n        -10.427654266357422\n      ],\n      [\n        \"▁キャラ\",\n        -10.427778244018555\n      ],\n      [\n        \"▁認知\",\n        -10.429009437561035\n      ],\n      [\n        \"ッカー\",\n        -10.429706573486328\n      ],\n      [\n        \"▁レギュラー\",\n        -10.430030822753906\n      ],\n      [\n        \"大阪\",\n        -10.430656433105469\n      ],\n      [\n        \"▁初心\",\n        -10.430686950683594\n      ],\n      [\n        \"▁楽器\",\n        -10.43118667602539\n      ],\n      [\n        \"▁そ\",\n        -10.431268692016602\n      ],\n      [\n        \"▁指\",\n        -10.431403160095215\n      ],\n      [\n        \"彼女\",\n        -10.432101249694824\n      ],\n      [\n        \"▁確定\",\n        -10.432596206665039\n      ],\n      [\n        \"▁しばらく\",\n        -10.432938575744629\n      ],\n      [\n        \"▁免許\",\n        -10.433759689331055\n      ],\n      [\n        \"▁孫\",\n        -10.433796882629395\n      ],\n      [\n        \"▁Android\",\n        -10.434316635131836\n      ],\n      [\n        \"▁飛び\",\n        -10.434525489807129\n      ],\n      [\n        \"▁ก\",\n        -10.434849739074707\n      ],\n      [\n        \"▁ユ\",\n        -10.435091972351074\n      ],\n      [\n        \"▁1998\",\n        -10.435378074645996\n      ],\n      [\n        \"さて\",\n        -10.435420989990234\n      ],\n      [\n        \"▁渋谷\",\n        -10.435454368591309\n      ],\n      [\n        \"キー\",\n        -10.435776710510254\n      ],\n      [\n        \"▁機種\",\n        -10.436023712158203\n      ],\n      [\n        \"2022\",\n        -10.436248779296875\n      ],\n      [\n        \"▁羽\",\n        -10.436261177062988\n      ],\n      [\n        \"▁解放\",\n        -10.436602592468262\n      ],\n      [\n        \"▁近代\",\n        -10.436779022216797\n      ],\n      [\n        \"▁測定\",\n        -10.436847686767578\n      ],\n      [\n        \"▁乱\",\n        -10.437007904052734\n      ],\n      [\n        \"▁違反\",\n        -10.437294006347656\n      ],\n      [\n        \"▁150\",\n        -10.437515258789062\n      ],\n      [\n        \"▁従事\",\n        -10.437540054321289\n      ],\n      [\n        \"▁感じた\",\n        -10.437638282775879\n      ],\n      [\n        \"▁地位\",\n        -10.437732696533203\n      ],\n      [\n        \"多く\",\n        -10.438329696655273\n      ],\n      [\n        \"▁ドア\",\n        -10.439351081848145\n      ],\n      [\n        \"▁述べた\",\n        -10.439953804016113\n      ],\n      [\n        \"▁焼き\",\n        -10.440441131591797\n      ],\n      [\n        \"科\",\n        -10.44051456451416\n      ],\n      [\n        \"▁霊\",\n        -10.440533638000488\n      ],\n      [\n        \"▁─\",\n        -10.440621376037598\n      ],\n      [\n        \"▁拒否\",\n        -10.440677642822266\n      ],\n      [\n        \"▁深く\",\n        -10.44104290008545\n      ],\n      [\n        \"▁指示\",\n        -10.441056251525879\n      ],\n      [\n        \"▁インチ\",\n        -10.441125869750977\n      ],\n      [\n        \"▁ショッピング\",\n        -10.441317558288574\n      ],\n      [\n        \"▁規約\",\n        -10.441384315490723\n      ],\n      [\n        \"▁結構\",\n        -10.441636085510254\n      ],\n      [\n        \"▁未満\",\n        -10.44164752960205\n      ],\n      [\n        \"▁競走\",\n        -10.441686630249023\n      ],\n      [\n        \"to\",\n        -10.441798210144043\n      ],\n      [\n        \"▁チケット\",\n        -10.441951751708984\n      ],\n      [\n        \"リック\",\n        -10.442530632019043\n      ],\n      [\n        \"さん\",\n        -10.442891120910645\n      ],\n      [\n        \"▁テリー\",\n        -10.442906379699707\n      ],\n      [\n        \"▁笑い\",\n        -10.44308853149414\n      ],\n      [\n        \"▁フィ\",\n        -10.443546295166016\n      ],\n      [\n        \"せる\",\n        -10.443928718566895\n      ],\n      [\n        \"▁用いた\",\n        -10.444358825683594\n      ],\n      [\n        \"▁促進\",\n        -10.444682121276855\n      ],\n      [\n        \"▁相互\",\n        -10.444769859313965\n      ],\n      [\n        \"▁防御\",\n        -10.444964408874512\n      ],\n      [\n        \"▁特典\",\n        -10.445025444030762\n      ],\n      [\n        \"▁保\",\n        -10.445218086242676\n      ],\n      [\n        \"▁コー\",\n        -10.445477485656738\n      ],\n      [\n        \"▁マスター\",\n        -10.44552993774414\n      ],\n      [\n        \"▁正しい\",\n        -10.44602108001709\n      ],\n      [\n        \"▁アクション\",\n        -10.446952819824219\n      ],\n      [\n        \"▁しばしば\",\n        -10.447405815124512\n      ],\n      [\n        \"▁被\",\n        -10.447565078735352\n      ],\n      [\n        \"▁造\",\n        -10.447598457336426\n      ],\n      [\n        \"▁つまり\",\n        -10.448244094848633\n      ],\n      [\n        \"▁声優\",\n        -10.44851303100586\n      ],\n      [\n        \"ミン\",\n        -10.448626518249512\n      ],\n      [\n        \"▁掛け\",\n        -10.449970245361328\n      ],\n      [\n        \"▁コレクション\",\n        -10.450114250183105\n      ],\n      [\n        \"▁遊\",\n        -10.450190544128418\n      ],\n      [\n        \"▁こういう\",\n        -10.450335502624512\n      ],\n      [\n        \"▁開か\",\n        -10.450450897216797\n      ],\n      [\n        \"地理\",\n        -10.450501441955566\n      ],\n      [\n        \"▁まずは\",\n        -10.450749397277832\n      ],\n      [\n        \"▁海岸\",\n        -10.450986862182617\n      ],\n      [\n        \"▁風呂\",\n        -10.451064109802246\n      ],\n      [\n        \"▁弱\",\n        -10.451189994812012\n      ],\n      [\n        \"▁創業\",\n        -10.451395034790039\n      ],\n      [\n        \"バル\",\n        -10.451920509338379\n      ],\n      [\n        \"te\",\n        -10.452178955078125\n      ],\n      [\n        \"▁骨\",\n        -10.452258110046387\n      ],\n      [\n        \"▁St\",\n        -10.453333854675293\n      ],\n      [\n        \"▁’\",\n        -10.453709602355957\n      ],\n      [\n        \"▁理想\",\n        -10.453944206237793\n      ],\n      [\n        \"▁ゼロ\",\n        -10.454582214355469\n      ],\n      [\n        \"▁対立\",\n        -10.454639434814453\n      ],\n      [\n        \"情\",\n        -10.454852104187012\n      ],\n      [\n        \"▁伝える\",\n        -10.454919815063477\n      ],\n      [\n        \"▁面白い\",\n        -10.455239295959473\n      ],\n      [\n        \"ユ\",\n        -10.455470085144043\n      ],\n      [\n        \"▁自由に\",\n        -10.456164360046387\n      ],\n      [\n        \"▁含めて\",\n        -10.45644760131836\n      ],\n      [\n        \"マイ\",\n        -10.456533432006836\n      ],\n      [\n        \"▁通貨\",\n        -10.456686973571777\n      ],\n      [\n        \"草\",\n        -10.456823348999023\n      ],\n      [\n        \"▁仕組み\",\n        -10.45695972442627\n      ],\n      [\n        \"▁強制\",\n        -10.457134246826172\n      ],\n      [\n        \"▁録音\",\n        -10.457173347473145\n      ],\n      [\n        \"株式\",\n        -10.457317352294922\n      ],\n      [\n        \"ディング\",\n        -10.457429885864258\n      ],\n      [\n        \"造\",\n        -10.457488059997559\n      ],\n      [\n        \"リオ\",\n        -10.457799911499023\n      ],\n      [\n        \"▁高級\",\n        -10.457839965820312\n      ],\n      [\n        \"議\",\n        -10.458162307739258\n      ],\n      [\n        \"▁重視\",\n        -10.458274841308594\n      ],\n      [\n        \"▁クラ\",\n        -10.458277702331543\n      ],\n      [\n        \"相\",\n        -10.458537101745605\n      ],\n      [\n        \"▁残る\",\n        -10.458636283874512\n      ],\n      [\n        \"ミー\",\n        -10.45885944366455\n      ],\n      [\n        \"▁箇所\",\n        -10.459257125854492\n      ],\n      [\n        \"▁ブル\",\n        -10.459433555603027\n      ],\n      [\n        \"▁65\",\n        -10.460418701171875\n      ],\n      [\n        \"▁跡\",\n        -10.46047592163086\n      ],\n      [\n        \"アイ\",\n        -10.46049690246582\n      ],\n      [\n        \"▁経過\",\n        -10.460628509521484\n      ],\n      [\n        \"▁沖\",\n        -10.46131706237793\n      ],\n      [\n        \"▁治\",\n        -10.461347579956055\n      ],\n      [\n        \"▁はず\",\n        -10.461402893066406\n      ],\n      [\n        \"▁59\",\n        -10.461772918701172\n      ],\n      [\n        \"▁迎え\",\n        -10.462430000305176\n      ],\n      [\n        \"▁レッド\",\n        -10.462451934814453\n      ],\n      [\n        \"▁優秀\",\n        -10.463645935058594\n      ],\n      [\n        \"▁専攻\",\n        -10.463692665100098\n      ],\n      [\n        \"玉\",\n        -10.464188575744629\n      ],\n      [\n        \"▁マーケティング\",\n        -10.464713096618652\n      ],\n      [\n        \"中国\",\n        -10.465185165405273\n      ],\n      [\n        \"▁負け\",\n        -10.465825080871582\n      ],\n      [\n        \"守\",\n        -10.46628189086914\n      ],\n      [\n        \"▁バン\",\n        -10.466352462768555\n      ],\n      [\n        \"▁払い\",\n        -10.466496467590332\n      ],\n      [\n        \"▁リング\",\n        -10.466511726379395\n      ],\n      [\n        \"工\",\n        -10.466636657714844\n      ],\n      [\n        \"どう\",\n        -10.466691970825195\n      ],\n      [\n        \"▁帰国\",\n        -10.467049598693848\n      ],\n      [\n        \"▁転\",\n        -10.467390060424805\n      ],\n      [\n        \"▁投手\",\n        -10.467473030090332\n      ],\n      [\n        \"レット\",\n        -10.468132972717285\n      ],\n      [\n        \"▁1997\",\n        -10.468169212341309\n      ],\n      [\n        \"▁コミュニティ\",\n        -10.468795776367188\n      ],\n      [\n        \"オン\",\n        -10.469009399414062\n      ],\n      [\n        \"▁在籍\",\n        -10.469585418701172\n      ],\n      [\n        \"▁笑顔\",\n        -10.469808578491211\n      ],\n      [\n        \"▁52\",\n        -10.469841957092285\n      ],\n      [\n        \"ジン\",\n        -10.470102310180664\n      ],\n      [\n        \"▁サウンド\",\n        -10.470108032226562\n      ],\n      [\n        \"▁皮膚\",\n        -10.470166206359863\n      ],\n      [\n        \"▁流行\",\n        -10.470215797424316\n      ],\n      [\n        \"▁純\",\n        -10.470335006713867\n      ],\n      [\n        \"▁寝\",\n        -10.470391273498535\n      ],\n      [\n        \"ge\",\n        -10.470720291137695\n      ],\n      [\n        \"▁洋\",\n        -10.472484588623047\n      ],\n      [\n        \"▁ベッド\",\n        -10.472790718078613\n      ],\n      [\n        \"▁視点\",\n        -10.473199844360352\n      ],\n      [\n        \"▁リン\",\n        -10.4732666015625\n      ],\n      [\n        \"▁マシン\",\n        -10.473544120788574\n      ],\n      [\n        \"▁解釈\",\n        -10.473617553710938\n      ],\n      [\n        \"ion\",\n        -10.473678588867188\n      ],\n      [\n        \"▁パフォーマンス\",\n        -10.47401237487793\n      ],\n      [\n        \"▁代理\",\n        -10.474077224731445\n      ],\n      [\n        \"▁視\",\n        -10.475289344787598\n      ],\n      [\n        \"▁ピュー\",\n        -10.47544002532959\n      ],\n      [\n        \"▁砲\",\n        -10.475794792175293\n      ],\n      [\n        \"今後\",\n        -10.475794792175293\n      ],\n      [\n        \"▁加\",\n        -10.475903511047363\n      ],\n      [\n        \"▁ついた\",\n        -10.476033210754395\n      ],\n      [\n        \"▁リーダー\",\n        -10.476296424865723\n      ],\n      [\n        \"血\",\n        -10.476313591003418\n      ],\n      [\n        \"▁戻って\",\n        -10.47709846496582\n      ],\n      [\n        \"▁変わる\",\n        -10.477215766906738\n      ],\n      [\n        \"走\",\n        -10.477478981018066\n      ],\n      [\n        \"▁取り扱い\",\n        -10.477518081665039\n      ],\n      [\n        \"▁クリ\",\n        -10.478382110595703\n      ],\n      [\n        \"器\",\n        -10.478464126586914\n      ],\n      [\n        \"os\",\n        -10.47860050201416\n      ],\n      [\n        \"▁開幕\",\n        -10.478680610656738\n      ],\n      [\n        \"解\",\n        -10.478680610656738\n      ],\n      [\n        \"▁古代\",\n        -10.479103088378906\n      ],\n      [\n        \"▁アカデミー\",\n        -10.479461669921875\n      ],\n      [\n        \"▁常\",\n        -10.479778289794922\n      ],\n      [\n        \"▁講演\",\n        -10.480802536010742\n      ],\n      [\n        \"▁新幹線\",\n        -10.480935096740723\n      ],\n      [\n        \"▁よかった\",\n        -10.481436729431152\n      ],\n      [\n        \">\",\n        -10.48215103149414\n      ],\n      [\n        \"熱\",\n        -10.482230186462402\n      ],\n      [\n        \"▁引き続き\",\n        -10.482282638549805\n      ],\n      [\n        \"▁香り\",\n        -10.482612609863281\n      ],\n      [\n        \"▁グ\",\n        -10.48310661315918\n      ],\n      [\n        \"華\",\n        -10.483307838439941\n      ],\n      [\n        \"▁財産\",\n        -10.48336410522461\n      ],\n      [\n        \"▁49\",\n        -10.483840942382812\n      ],\n      [\n        \"▁IC\",\n        -10.483899116516113\n      ],\n      [\n        \"id\",\n        -10.484437942504883\n      ],\n      [\n        \"▁グラ\",\n        -10.484756469726562\n      ],\n      [\n        \"▁栽培\",\n        -10.4848051071167\n      ],\n      [\n        \"▁宿泊\",\n        -10.485039710998535\n      ],\n      [\n        \"▁公表\",\n        -10.485075950622559\n      ],\n      [\n        \"▁プレミアム\",\n        -10.485156059265137\n      ],\n      [\n        \"▁75\",\n        -10.485177040100098\n      ],\n      [\n        \"▁該当\",\n        -10.485254287719727\n      ],\n      [\n        \"▁いけ\",\n        -10.48529052734375\n      ],\n      [\n        \"▁厳しい\",\n        -10.48569393157959\n      ],\n      [\n        \"▁特殊\",\n        -10.485925674438477\n      ],\n      [\n        \"▁モン\",\n        -10.486734390258789\n      ],\n      [\n        \"四\",\n        -10.486903190612793\n      ],\n      [\n        \"▁キャンプ\",\n        -10.486910820007324\n      ],\n      [\n        \"▁速\",\n        -10.48708724975586\n      ],\n      [\n        \"▁約束\",\n        -10.487266540527344\n      ],\n      [\n        \"▁一体\",\n        -10.487492561340332\n      ],\n      [\n        \"助\",\n        -10.487527847290039\n      ],\n      [\n        \"ゲーム\",\n        -10.487594604492188\n      ],\n      [\n        \"▁震災\",\n        -10.48786735534668\n      ],\n      [\n        \"▁皆\",\n        -10.487935066223145\n      ],\n      [\n        \"▁通って\",\n        -10.488229751586914\n      ],\n      [\n        \"ネス\",\n        -10.488350868225098\n      ],\n      [\n        \"▁卵\",\n        -10.48845100402832\n      ],\n      [\n        \"▁鈴木\",\n        -10.488458633422852\n      ],\n      [\n        \"▁朝日\",\n        -10.488466262817383\n      ],\n      [\n        \"▁依存\",\n        -10.488618850708008\n      ],\n      [\n        \"▁無く\",\n        -10.488658905029297\n      ],\n      [\n        \"ルド\",\n        -10.489663124084473\n      ],\n      [\n        \"▁職場\",\n        -10.489911079406738\n      ],\n      [\n        \"▁フォーム\",\n        -10.490093231201172\n      ],\n      [\n        \"居\",\n        -10.490172386169434\n      ],\n      [\n        \"清\",\n        -10.490262031555176\n      ],\n      [\n        \"▁by\",\n        -10.490970611572266\n      ],\n      [\n        \"▁一種\",\n        -10.491372108459473\n      ],\n      [\n        \"ro\",\n        -10.491476058959961\n      ],\n      [\n        \"▁決済\",\n        -10.491608619689941\n      ],\n      [\n        \"以前\",\n        -10.491668701171875\n      ],\n      [\n        \"▁パス\",\n        -10.491931915283203\n      ],\n      [\n        \"▁策\",\n        -10.492384910583496\n      ],\n      [\n        \"▁改良\",\n        -10.492807388305664\n      ],\n      [\n        \"ent\",\n        -10.493000984191895\n      ],\n      [\n        \"▁モバイル\",\n        -10.493106842041016\n      ],\n      [\n        \"▁吸収\",\n        -10.493185043334961\n      ],\n      [\n        \"▁もらえる\",\n        -10.493204116821289\n      ],\n      [\n        \"▁善\",\n        -10.49343204498291\n      ],\n      [\n        \"▁1996\",\n        -10.493520736694336\n      ],\n      [\n        \"▁パターン\",\n        -10.49364185333252\n      ],\n      [\n        \"郷\",\n        -10.494190216064453\n      ],\n      [\n        \"▁だって\",\n        -10.494237899780273\n      ],\n      [\n        \"なく\",\n        -10.495024681091309\n      ],\n      [\n        \"▁57\",\n        -10.495511054992676\n      ],\n      [\n        \"▁プロデューサー\",\n        -10.495625495910645\n      ],\n      [\n        \"▁申し込み\",\n        -10.49600601196289\n      ],\n      [\n        \"▁部品\",\n        -10.496329307556152\n      ],\n      [\n        \"▁直前\",\n        -10.496713638305664\n      ],\n      [\n        \"▁電\",\n        -10.496933937072754\n      ],\n      [\n        \"500\",\n        -10.497018814086914\n      ],\n      [\n        \"とう\",\n        -10.497456550598145\n      ],\n      [\n        \"▁後期\",\n        -10.49748706817627\n      ],\n      [\n        \"▁隣\",\n        -10.49764633178711\n      ],\n      [\n        \"▁菓子\",\n        -10.497699737548828\n      ],\n      [\n        \"▁瞬間\",\n        -10.4981050491333\n      ],\n      [\n        \"▁炎\",\n        -10.49817943572998\n      ],\n      [\n        \"▁ソロ\",\n        -10.498929023742676\n      ],\n      [\n        \"▁本体\",\n        -10.498967170715332\n      ],\n      [\n        \"▁アプリケーション\",\n        -10.499181747436523\n      ],\n      [\n        \"職\",\n        -10.499431610107422\n      ],\n      [\n        \"ファー\",\n        -10.499482154846191\n      ],\n      [\n        \"▁大切に\",\n        -10.499865531921387\n      ],\n      [\n        \"▁生成\",\n        -10.499884605407715\n      ],\n      [\n        \"▁マイル\",\n        -10.499968528747559\n      ],\n      [\n        \"▁オプション\",\n        -10.500041007995605\n      ],\n      [\n        \"▁1995\",\n        -10.500049591064453\n      ],\n      [\n        \"▁自社\",\n        -10.500080108642578\n      ],\n      [\n        \"経\",\n        -10.500192642211914\n      ],\n      [\n        \"▁素人\",\n        -10.500240325927734\n      ],\n      [\n        \"▁温度\",\n        -10.500269889831543\n      ],\n      [\n        \"ビル\",\n        -10.500395774841309\n      ],\n      [\n        \"▁執行\",\n        -10.500556945800781\n      ],\n      [\n        \"▁鬼\",\n        -10.500720977783203\n      ],\n      [\n        \"▁そうに\",\n        -10.501009941101074\n      ],\n      [\n        \"▁似て\",\n        -10.501116752624512\n      ],\n      [\n        \"▁わたし\",\n        -10.501299858093262\n      ],\n      [\n        \"▁夫婦\",\n        -10.501328468322754\n      ],\n      [\n        \"▁区域\",\n        -10.501420974731445\n      ],\n      [\n        \"集\",\n        -10.501749992370605\n      ],\n      [\n        \"▁試し\",\n        -10.501789093017578\n      ],\n      [\n        \"▁サー\",\n        -10.501919746398926\n      ],\n      [\n        \"▁雄\",\n        -10.502416610717773\n      ],\n      [\n        \"▁妹\",\n        -10.502914428710938\n      ],\n      [\n        \"▁長官\",\n        -10.502914428710938\n      ],\n      [\n        \"▁楽しんで\",\n        -10.503018379211426\n      ],\n      [\n        \"▁帰って\",\n        -10.503154754638672\n      ],\n      [\n        \"▁マスク\",\n        -10.50358772277832\n      ],\n      [\n        \"▁前半\",\n        -10.50387191772461\n      ],\n      [\n        \"▁ざる\",\n        -10.503875732421875\n      ],\n      [\n        \"▁属する\",\n        -10.504100799560547\n      ],\n      [\n        \"▁想定\",\n        -10.504129409790039\n      ],\n      [\n        \"▁○\",\n        -10.504786491394043\n      ],\n      [\n        \"▁保障\",\n        -10.504828453063965\n      ],\n      [\n        \"ate\",\n        -10.505040168762207\n      ],\n      [\n        \"ンズ\",\n        -10.505292892456055\n      ],\n      [\n        \"帝\",\n        -10.505805015563965\n      ],\n      [\n        \"僕\",\n        -10.505825996398926\n      ],\n      [\n        \"▁わたって\",\n        -10.505959510803223\n      ],\n      [\n        \"ゆ\",\n        -10.506048202514648\n      ],\n      [\n        \"当社\",\n        -10.506733894348145\n      ],\n      [\n        \"▁ロボット\",\n        -10.50677490234375\n      ],\n      [\n        \"▁建造\",\n        -10.506897926330566\n      ],\n      [\n        \"▁池\",\n        -10.50720500946045\n      ],\n      [\n        \"▁チャート\",\n        -10.507625579833984\n      ],\n      [\n        \"▁58\",\n        -10.5077543258667\n      ],\n      [\n        \"▁ง\",\n        -10.5079984664917\n      ],\n      [\n        \"▁集合\",\n        -10.50833797454834\n      ],\n      [\n        \"権\",\n        -10.509449005126953\n      ],\n      [\n        \"▁ようだ\",\n        -10.510111808776855\n      ],\n      [\n        \"▁やっぱり\",\n        -10.510293006896973\n      ],\n      [\n        \"▁田中\",\n        -10.51105785369873\n      ],\n      [\n        \"近\",\n        -10.51118278503418\n      ],\n      [\n        \"▁音声\",\n        -10.511432647705078\n      ],\n      [\n        \"ol\",\n        -10.5119047164917\n      ],\n      [\n        \"▁富\",\n        -10.512160301208496\n      ],\n      [\n        \"▁明日\",\n        -10.512517929077148\n      ],\n      [\n        \"▁タイミング\",\n        -10.512606620788574\n      ],\n      [\n        \"▁迷惑\",\n        -10.51266098022461\n      ],\n      [\n        \"▁半分\",\n        -10.512677192687988\n      ],\n      [\n        \"ティング\",\n        -10.512828826904297\n      ],\n      [\n        \"▁外科\",\n        -10.512837409973145\n      ],\n      [\n        \"▁調\",\n        -10.512894630432129\n      ],\n      [\n        \"▁ソ連\",\n        -10.513236045837402\n      ],\n      [\n        \"管\",\n        -10.513262748718262\n      ],\n      [\n        \"▁スキー\",\n        -10.513324737548828\n      ],\n      [\n        \"▁世帯\",\n        -10.514060020446777\n      ],\n      [\n        \"▁ゆっくり\",\n        -10.514233589172363\n      ],\n      [\n        \"▁すごく\",\n        -10.514322280883789\n      ],\n      [\n        \"▁YouTube\",\n        -10.51452350616455\n      ],\n      [\n        \"明治\",\n        -10.514820098876953\n      ],\n      [\n        \"▁床\",\n        -10.514954566955566\n      ],\n      [\n        \"▁悪化\",\n        -10.515046119689941\n      ],\n      [\n        \"▁サンプル\",\n        -10.515244483947754\n      ],\n      [\n        \"▁ノート\",\n        -10.515714645385742\n      ],\n      [\n        \"▁·\",\n        -10.515891075134277\n      ],\n      [\n        \"親\",\n        -10.515970230102539\n      ],\n      [\n        \"▁th\",\n        -10.515990257263184\n      ],\n      [\n        \"▁起用\",\n        -10.516020774841309\n      ],\n      [\n        \"▁すぎて\",\n        -10.516179084777832\n      ],\n      [\n        \"▁徐々に\",\n        -10.5167236328125\n      ],\n      [\n        \"ーク\",\n        -10.516725540161133\n      ],\n      [\n        \"▁乗って\",\n        -10.51679801940918\n      ],\n      [\n        \"▁テキスト\",\n        -10.51718807220459\n      ],\n      [\n        \"▁教科\",\n        -10.518324851989746\n      ],\n      [\n        \"▁エピソード\",\n        -10.518579483032227\n      ],\n      [\n        \"▁模様\",\n        -10.51868724822998\n      ],\n      [\n        \"▁任命\",\n        -10.518927574157715\n      ],\n      [\n        \"ける\",\n        -10.519067764282227\n      ],\n      [\n        \"沼\",\n        -10.519302368164062\n      ],\n      [\n        \"▁認証\",\n        -10.519386291503906\n      ],\n      [\n        \"ad\",\n        -10.519731521606445\n      ],\n      [\n        \"▁他人\",\n        -10.520163536071777\n      ],\n      [\n        \"官\",\n        -10.520537376403809\n      ],\n      [\n        \"▁都合\",\n        -10.520846366882324\n      ],\n      [\n        \"▁証\",\n        -10.52127456665039\n      ],\n      [\n        \"メント\",\n        -10.52145767211914\n      ],\n      [\n        \"板\",\n        -10.521571159362793\n      ],\n      [\n        \"▁いっぱい\",\n        -10.52171516418457\n      ],\n      [\n        \"▁可能である\",\n        -10.521912574768066\n      ],\n      [\n        \"▁世話\",\n        -10.522029876708984\n      ],\n      [\n        \"端\",\n        -10.522418022155762\n      ],\n      [\n        \"▁信号\",\n        -10.522561073303223\n      ],\n      [\n        \"▁不明\",\n        -10.522672653198242\n      ],\n      [\n        \"▁56\",\n        -10.522693634033203\n      ],\n      [\n        \"▁表明\",\n        -10.522911071777344\n      ],\n      [\n        \"▁矢\",\n        -10.522991180419922\n      ],\n      [\n        \"▁書類\",\n        -10.523468971252441\n      ],\n      [\n        \"▁里\",\n        -10.5238037109375\n      ],\n      [\n        \"▁ユダヤ\",\n        -10.524039268493652\n      ],\n      [\n        \"▁確立\",\n        -10.524553298950195\n      ],\n      [\n        \"▁陸上\",\n        -10.524770736694336\n      ],\n      [\n        \"▁形状\",\n        -10.525358200073242\n      ],\n      [\n        \"▁頑張って\",\n        -10.525382041931152\n      ],\n      [\n        \"▁描く\",\n        -10.525476455688477\n      ],\n      [\n        \"▁島根\",\n        -10.525552749633789\n      ],\n      [\n        \"▁マーケット\",\n        -10.525591850280762\n      ],\n      [\n        \"▁すら\",\n        -10.525641441345215\n      ],\n      [\n        \"鳥\",\n        -10.525818824768066\n      ],\n      [\n        \"22\",\n        -10.526357650756836\n      ],\n      [\n        \"▁健\",\n        -10.526498794555664\n      ],\n      [\n        \"ch\",\n        -10.52660846710205\n      ],\n      [\n        \"▁トレ\",\n        -10.527180671691895\n      ],\n      [\n        \"主な\",\n        -10.527520179748535\n      ],\n      [\n        \"▁西部\",\n        -10.527887344360352\n      ],\n      [\n        \"▁当然\",\n        -10.528342247009277\n      ],\n      [\n        \"▁加盟\",\n        -10.528627395629883\n      ],\n      [\n        \"▁ガンダム\",\n        -10.529075622558594\n      ],\n      [\n        \"▁゚\",\n        -10.529428482055664\n      ],\n      [\n        \"▁エア\",\n        -10.529458045959473\n      ],\n      [\n        \"▁発足\",\n        -10.529510498046875\n      ],\n      [\n        \"▁容量\",\n        -10.52964973449707\n      ],\n      [\n        \"界\",\n        -10.529934883117676\n      ],\n      [\n        \"メン\",\n        -10.53009033203125\n      ],\n      [\n        \"自\",\n        -10.530231475830078\n      ],\n      [\n        \"上げ\",\n        -10.53067684173584\n      ],\n      [\n        \"▁知\",\n        -10.531028747558594\n      ],\n      [\n        \"ir\",\n        -10.5311279296875\n      ],\n      [\n        \"2003\",\n        -10.53179931640625\n      ],\n      [\n        \"▁ナイト\",\n        -10.531908988952637\n      ],\n      [\n        \"▁コストコ\",\n        -10.532073020935059\n      ],\n      [\n        \"▁変わら\",\n        -10.53268051147461\n      ],\n      [\n        \"本塁\",\n        -10.532703399658203\n      ],\n      [\n        \"▁会計\",\n        -10.533059120178223\n      ],\n      [\n        \"▁含め\",\n        -10.533568382263184\n      ],\n      [\n        \"▁ヘッド\",\n        -10.533790588378906\n      ],\n      [\n        \"▁ジュニア\",\n        -10.534116744995117\n      ],\n      [\n        \"▁なお\",\n        -10.53455638885498\n      ],\n      [\n        \"ie\",\n        -10.534564971923828\n      ],\n      [\n        \"▁レシピ\",\n        -10.534653663635254\n      ],\n      [\n        \"▁共\",\n        -10.535125732421875\n      ],\n      [\n        \"▁新人\",\n        -10.535148620605469\n      ],\n      [\n        \"▁結び\",\n        -10.535223960876465\n      ],\n      [\n        \"▁制定\",\n        -10.535242080688477\n      ],\n      [\n        \"as\",\n        -10.535358428955078\n      ],\n      [\n        \"▁酸化\",\n        -10.535815238952637\n      ],\n      [\n        \"能\",\n        -10.536408424377441\n      ],\n      [\n        \"▁ペン\",\n        -10.536640167236328\n      ],\n      [\n        \"▁義務\",\n        -10.536652565002441\n      ],\n      [\n        \"▁特\",\n        -10.536839485168457\n      ],\n      [\n        \"▁イングランド\",\n        -10.53686809539795\n      ],\n      [\n        \"密\",\n        -10.536927223205566\n      ],\n      [\n        \"▁推定\",\n        -10.537759780883789\n      ],\n      [\n        \"▁沿い\",\n        -10.537775993347168\n      ],\n      [\n        \"▁合わせ\",\n        -10.537921905517578\n      ],\n      [\n        \"▁まったく\",\n        -10.53817081451416\n      ],\n      [\n        \"▁適切な\",\n        -10.538528442382812\n      ],\n      [\n        \"▁回数\",\n        -10.538846015930176\n      ],\n      [\n        \"的\",\n        -10.538866996765137\n      ],\n      [\n        \"▁−\",\n        -10.539522171020508\n      ],\n      [\n        \"▁需要\",\n        -10.539636611938477\n      ],\n      [\n        \"▁解\",\n        -10.539780616760254\n      ],\n      [\n        \"▁機体\",\n        -10.539833068847656\n      ],\n      [\n        \"▁使え\",\n        -10.539936065673828\n      ],\n      [\n        \"じゃ\",\n        -10.540026664733887\n      ],\n      [\n        \"▁幕府\",\n        -10.540477752685547\n      ],\n      [\n        \"▁早い\",\n        -10.540525436401367\n      ],\n      [\n        \"▁デバイス\",\n        -10.540824890136719\n      ],\n      [\n        \"▁塗装\",\n        -10.541227340698242\n      ],\n      [\n        \"▁コンセプト\",\n        -10.541257858276367\n      ],\n      [\n        \"▁済み\",\n        -10.541275978088379\n      ],\n      [\n        \"タル\",\n        -10.541396141052246\n      ],\n      [\n        \"▁河\",\n        -10.541488647460938\n      ],\n      [\n        \"▁べく\",\n        -10.541543960571289\n      ],\n      [\n        \"▁旨\",\n        -10.54171085357666\n      ],\n      [\n        \"▁連れて\",\n        -10.542189598083496\n      ],\n      [\n        \"▁教え\",\n        -10.542437553405762\n      ],\n      [\n        \"▁解析\",\n        -10.543166160583496\n      ],\n      [\n        \"▁崩壊\",\n        -10.543343544006348\n      ],\n      [\n        \"▁サイ\",\n        -10.544483184814453\n      ],\n      [\n        \"▁Pro\",\n        -10.544601440429688\n      ],\n      [\n        \"▁左右\",\n        -10.545303344726562\n      ],\n      [\n        \"ON\",\n        -10.545755386352539\n      ],\n      [\n        \"▁皇帝\",\n        -10.545920372009277\n      ],\n      [\n        \"▁輪\",\n        -10.545929908752441\n      ],\n      [\n        \"▁分け\",\n        -10.545965194702148\n      ],\n      [\n        \"▁家具\",\n        -10.546066284179688\n      ],\n      [\n        \"辺\",\n        -10.546396255493164\n      ],\n      [\n        \"▁やや\",\n        -10.54649829864502\n      ],\n      [\n        \"岩\",\n        -10.546558380126953\n      ],\n      [\n        \"▁レポート\",\n        -10.546915054321289\n      ],\n      [\n        \"▁クリーム\",\n        -10.546972274780273\n      ],\n      [\n        \"▁起こる\",\n        -10.547174453735352\n      ],\n      [\n        \"対\",\n        -10.547199249267578\n      ],\n      [\n        \"▁退職\",\n        -10.547263145446777\n      ],\n      [\n        \"▁初め\",\n        -10.547809600830078\n      ],\n      [\n        \"▁ど\",\n        -10.547882080078125\n      ],\n      [\n        \"▁腰\",\n        -10.548171997070312\n      ],\n      [\n        \"すべて\",\n        -10.548444747924805\n      ],\n      [\n        \"▁住む\",\n        -10.549030303955078\n      ],\n      [\n        \"演\",\n        -10.549086570739746\n      ],\n      [\n        \"観\",\n        -10.549123764038086\n      ],\n      [\n        \"▁•\",\n        -10.549249649047852\n      ],\n      [\n        \"▁麻\",\n        -10.549314498901367\n      ],\n      [\n        \"から\",\n        -10.54937744140625\n      ],\n      [\n        \"兵\",\n        -10.549515724182129\n      ],\n      [\n        \"映画\",\n        -10.549629211425781\n      ],\n      [\n        \"▁剣\",\n        -10.55005931854248\n      ],\n      [\n        \"▁配送\",\n        -10.550544738769531\n      ],\n      [\n        \"▁SP\",\n        -10.551517486572266\n      ],\n      [\n        \"▁諸島\",\n        -10.55174446105957\n      ],\n      [\n        \"▁バイ\",\n        -10.55216121673584\n      ],\n      [\n        \"▁劇\",\n        -10.552427291870117\n      ],\n      [\n        \"▁買い物\",\n        -10.5526123046875\n      ],\n      [\n        \"ダイ\",\n        -10.55285930633545\n      ],\n      [\n        \"▁改めて\",\n        -10.55402946472168\n      ],\n      [\n        \"▁袋\",\n        -10.554451942443848\n      ],\n      [\n        \"▁満\",\n        -10.554549217224121\n      ],\n      [\n        \"クト\",\n        -10.55467414855957\n      ],\n      [\n        \"▁見せ\",\n        -10.55472183227539\n      ],\n      [\n        \"▁東海\",\n        -10.554890632629395\n      ],\n      [\n        \"▁なれば\",\n        -10.555063247680664\n      ],\n      [\n        \"▁摂取\",\n        -10.555957794189453\n      ],\n      [\n        \"師\",\n        -10.556365966796875\n      ],\n      [\n        \"▁体重\",\n        -10.556449890136719\n      ],\n      [\n        \"▁換え\",\n        -10.556610107421875\n      ],\n      [\n        \"基本\",\n        -10.556936264038086\n      ],\n      [\n        \"詳細\",\n        -10.557188987731934\n      ],\n      [\n        \"▁筋肉\",\n        -10.557775497436523\n      ],\n      [\n        \"▁衆議院\",\n        -10.55783462524414\n      ],\n      [\n        \"▁マッサージ\",\n        -10.558528900146484\n      ],\n      [\n        \"勢\",\n        -10.558564186096191\n      ],\n      [\n        \"▁前年\",\n        -10.558675765991211\n      ],\n      [\n        \"▁振り\",\n        -10.558724403381348\n      ],\n      [\n        \"▁優れた\",\n        -10.558924674987793\n      ],\n      [\n        \"▁階級\",\n        -10.558975219726562\n      ],\n      [\n        \"▁民主\",\n        -10.5593900680542\n      ],\n      [\n        \"▁ch\",\n        -10.559639930725098\n      ],\n      [\n        \"▁もつ\",\n        -10.559649467468262\n      ],\n      [\n        \"備\",\n        -10.559749603271484\n      ],\n      [\n        \"ut\",\n        -10.559815406799316\n      ],\n      [\n        \"▁第三者\",\n        -10.560361862182617\n      ],\n      [\n        \"▁プロセス\",\n        -10.560379981994629\n      ],\n      [\n        \"▁ビッグ\",\n        -10.560503959655762\n      ],\n      [\n        \"▁移住\",\n        -10.560792922973633\n      ],\n      [\n        \"▁委託\",\n        -10.561125755310059\n      ],\n      [\n        \"▁証券\",\n        -10.561293601989746\n      ],\n      [\n        \"▁守\",\n        -10.56153392791748\n      ],\n      [\n        \"un\",\n        -10.561746597290039\n      ],\n      [\n        \"▁離婚\",\n        -10.562524795532227\n      ],\n      [\n        \"ハン\",\n        -10.562614440917969\n      ],\n      [\n        \"▁対処\",\n        -10.563167572021484\n      ],\n      [\n        \"▁プレ\",\n        -10.563279151916504\n      ],\n      [\n        \"▁そのような\",\n        -10.563922882080078\n      ],\n      [\n        \"ニング\",\n        -10.564064979553223\n      ],\n      [\n        \"▁であろう\",\n        -10.564095497131348\n      ],\n      [\n        \"▁在庫\",\n        -10.564375877380371\n      ],\n      [\n        \"▁120\",\n        -10.564413070678711\n      ],\n      [\n        \"▁きちんと\",\n        -10.564443588256836\n      ],\n      [\n        \"章\",\n        -10.564640998840332\n      ],\n      [\n        \"▁オート\",\n        -10.56477165222168\n      ],\n      [\n        \"ワン\",\n        -10.56511116027832\n      ],\n      [\n        \"ドル\",\n        -10.56520938873291\n      ],\n      [\n        \"▁徳\",\n        -10.565330505371094\n      ],\n      [\n        \"▁書店\",\n        -10.565359115600586\n      ],\n      [\n        \"#\",\n        -10.56538200378418\n      ],\n      [\n        \"▁パッケージ\",\n        -10.5657377243042\n      ],\n      [\n        \"70\",\n        -10.565741539001465\n      ],\n      [\n        \"▁ライター\",\n        -10.565743446350098\n      ],\n      [\n        \"▁誕生日\",\n        -10.566316604614258\n      ],\n      [\n        \"▁仲\",\n        -10.566390991210938\n      ],\n      [\n        \"▁ソース\",\n        -10.566514015197754\n      ],\n      [\n        \"▁提示\",\n        -10.566740989685059\n      ],\n      [\n        \"▁再度\",\n        -10.56678581237793\n      ],\n      [\n        \"▁判明\",\n        -10.56713581085205\n      ],\n      [\n        \"▁残さ\",\n        -10.567358016967773\n      ],\n      [\n        \"ジョ\",\n        -10.56737995147705\n      ],\n      [\n        \"▁職業\",\n        -10.567456245422363\n      ],\n      [\n        \"▁近年\",\n        -10.567686080932617\n      ],\n      [\n        \"こうした\",\n        -10.568107604980469\n      ],\n      [\n        \"▁検証\",\n        -10.568217277526855\n      ],\n      [\n        \"▁エイ\",\n        -10.568648338317871\n      ],\n      [\n        \"▁結合\",\n        -10.568918228149414\n      ],\n      [\n        \"▁数学\",\n        -10.568982124328613\n      ],\n      [\n        \"▁交差\",\n        -10.569039344787598\n      ],\n      [\n        \"▁区別\",\n        -10.56905746459961\n      ],\n      [\n        \"▁プリ\",\n        -10.569073677062988\n      ],\n      [\n        \"27\",\n        -10.569499015808105\n      ],\n      [\n        \"▁尾\",\n        -10.570080757141113\n      ],\n      [\n        \"é\",\n        -10.570541381835938\n      ],\n      [\n        \"▁難\",\n        -10.570733070373535\n      ],\n      [\n        \"▁助け\",\n        -10.570869445800781\n      ],\n      [\n        \"仁\",\n        -10.570876121520996\n      ],\n      [\n        \"▁昼\",\n        -10.5709867477417\n      ],\n      [\n        \"▁川崎\",\n        -10.571017265319824\n      ],\n      [\n        \"▁判決\",\n        -10.57159423828125\n      ],\n      [\n        \"▁人工\",\n        -10.5717134475708\n      ],\n      [\n        \"▁覚えて\",\n        -10.571783065795898\n      ],\n      [\n        \"▁予測\",\n        -10.571840286254883\n      ],\n      [\n        \"▁ケーキ\",\n        -10.571981430053711\n      ],\n      [\n        \"▁要因\",\n        -10.571983337402344\n      ],\n      [\n        \"▁色々\",\n        -10.572383880615234\n      ],\n      [\n        \"▁受講\",\n        -10.572539329528809\n      ],\n      [\n        \"サイ\",\n        -10.572700500488281\n      ],\n      [\n        \"▁たかった\",\n        -10.572758674621582\n      ],\n      [\n        \"IA\",\n        -10.572958946228027\n      ],\n      [\n        \"▁チャレンジ\",\n        -10.573175430297852\n      ],\n      [\n        \"▁有料\",\n        -10.573186874389648\n      ],\n      [\n        \"▁家電\",\n        -10.573331832885742\n      ],\n      [\n        \"▁痛\",\n        -10.573619842529297\n      ],\n      [\n        \"▁占領\",\n        -10.573822975158691\n      ],\n      [\n        \"羽\",\n        -10.574762344360352\n      ],\n      [\n        \"▁民主党\",\n        -10.575051307678223\n      ],\n      [\n        \"▁付属\",\n        -10.575066566467285\n      ],\n      [\n        \"▁トリ\",\n        -10.575173377990723\n      ],\n      [\n        \"▁背\",\n        -10.575396537780762\n      ],\n      [\n        \"雲\",\n        -10.575457572937012\n      ],\n      [\n        \"▁53\",\n        -10.575578689575195\n      ],\n      [\n        \"▁一致\",\n        -10.575647354125977\n      ],\n      [\n        \"▁クロ\",\n        -10.575692176818848\n      ],\n      [\n        \"ine\",\n        -10.575695991516113\n      ],\n      [\n        \"付け\",\n        -10.575743675231934\n      ],\n      [\n        \"▁香港\",\n        -10.575835227966309\n      ],\n      [\n        \"▁端\",\n        -10.576032638549805\n      ],\n      [\n        \"▁待って\",\n        -10.576395988464355\n      ],\n      [\n        \"▁通知\",\n        -10.57645034790039\n      ],\n      [\n        \"▁合成\",\n        -10.576895713806152\n      ],\n      [\n        \"▁wiki\",\n        -10.57724666595459\n      ],\n      [\n        \"▁秘密\",\n        -10.577787399291992\n      ],\n      [\n        \"▁ガン\",\n        -10.577814102172852\n      ],\n      [\n        \"生涯\",\n        -10.577973365783691\n      ],\n      [\n        \"▁衛生\",\n        -10.578251838684082\n      ],\n      [\n        \"妻\",\n        -10.578551292419434\n      ],\n      [\n        \"IC\",\n        -10.579459190368652\n      ],\n      [\n        \"▁有名\",\n        -10.579809188842773\n      ],\n      [\n        \"ヴェ\",\n        -10.579850196838379\n      ],\n      [\n        \"▁走行\",\n        -10.579970359802246\n      ],\n      [\n        \"▁フィルム\",\n        -10.580052375793457\n      ],\n      [\n        \"▁嫌\",\n        -10.580307006835938\n      ],\n      [\n        \"続き\",\n        -10.580391883850098\n      ],\n      [\n        \"▁ごろ\",\n        -10.58046817779541\n      ],\n      [\n        \"▁もらって\",\n        -10.580789566040039\n      ],\n      [\n        \"▁殺\",\n        -10.58079719543457\n      ],\n      [\n        \"臣\",\n        -10.58134937286377\n      ],\n      [\n        \"▁網\",\n        -10.58145809173584\n      ],\n      [\n        \"佐\",\n        -10.581507682800293\n      ],\n      [\n        \"▁泉\",\n        -10.582250595092773\n      ],\n      [\n        \"▁美味しい\",\n        -10.582939147949219\n      ],\n      [\n        \"▁地名\",\n        -10.583200454711914\n      ],\n      [\n        \"▁競争\",\n        -10.583226203918457\n      ],\n      [\n        \"▁ケーブル\",\n        -10.58351993560791\n      ],\n      [\n        \"▁戦後\",\n        -10.583548545837402\n      ],\n      [\n        \"▁素敵な\",\n        -10.583876609802246\n      ],\n      [\n        \"▁話して\",\n        -10.583879470825195\n      ],\n      [\n        \"ラス\",\n        -10.584029197692871\n      ],\n      [\n        \"▁ワーク\",\n        -10.584141731262207\n      ],\n      [\n        \"ディー\",\n        -10.584198951721191\n      ],\n      [\n        \"▁オーバー\",\n        -10.584382057189941\n      ],\n      [\n        \"▁短い\",\n        -10.584405899047852\n      ],\n      [\n        \"▁1994\",\n        -10.584415435791016\n      ],\n      [\n        \"▁保管\",\n        -10.584443092346191\n      ],\n      [\n        \"▁決めた\",\n        -10.58453369140625\n      ],\n      [\n        \"▁ノー\",\n        -10.584651947021484\n      ],\n      [\n        \" \",\n        -10.584900856018066\n      ],\n      [\n        \"▁on\",\n        -10.585041046142578\n      ],\n      [\n        \"イル\",\n        -10.585562705993652\n      ],\n      [\n        \"▁関数\",\n        -10.586151123046875\n      ],\n      [\n        \"価\",\n        -10.58617877960205\n      ],\n      [\n        \"ピー\",\n        -10.586397171020508\n      ],\n      [\n        \"トロ\",\n        -10.586813926696777\n      ],\n      [\n        \"▁貴\",\n        -10.587382316589355\n      ],\n      [\n        \"▁グルメ\",\n        -10.587472915649414\n      ],\n      [\n        \"▁資本\",\n        -10.587594032287598\n      ],\n      [\n        \"▁黄\",\n        -10.587800979614258\n      ],\n      [\n        \"▁普通の\",\n        -10.588330268859863\n      ],\n      [\n        \"▁どんどん\",\n        -10.58836841583252\n      ],\n      [\n        \"▁果たす\",\n        -10.588475227355957\n      ],\n      [\n        \"▁後継\",\n        -10.588634490966797\n      ],\n      [\n        \"▁大使\",\n        -10.589052200317383\n      ],\n      [\n        \"▁ラーメン\",\n        -10.589088439941406\n      ],\n      [\n        \"ステ\",\n        -10.589125633239746\n      ],\n      [\n        \"EN\",\n        -10.589345932006836\n      ],\n      [\n        \"▁投げ\",\n        -10.589885711669922\n      ],\n      [\n        \"▁決して\",\n        -10.59030818939209\n      ],\n      [\n        \"▁保健\",\n        -10.590474128723145\n      ],\n      [\n        \"▁越し\",\n        -10.591001510620117\n      ],\n      [\n        \"▁いろいろな\",\n        -10.591121673583984\n      ],\n      [\n        \"▁自衛\",\n        -10.591279983520508\n      ],\n      [\n        \"▁表す\",\n        -10.591421127319336\n      ],\n      [\n        \"▁貿易\",\n        -10.5917329788208\n      ],\n      [\n        \"▁ソング\",\n        -10.591835975646973\n      ],\n      [\n        \"▁ショート\",\n        -10.592472076416016\n      ],\n      [\n        \"▁各国\",\n        -10.592511177062988\n      ],\n      [\n        \"▁規則\",\n        -10.592884063720703\n      ],\n      [\n        \"めた\",\n        -10.593396186828613\n      ],\n      [\n        \"せん\",\n        -10.593828201293945\n      ],\n      [\n        \"ンド\",\n        -10.593992233276367\n      ],\n      [\n        \"バイ\",\n        -10.594619750976562\n      ],\n      [\n        \"▁大半\",\n        -10.594970703125\n      ],\n      [\n        \"▁PS\",\n        -10.595251083374023\n      ],\n      [\n        \"号\",\n        -10.595405578613281\n      ],\n      [\n        \"▁もらった\",\n        -10.595519065856934\n      ],\n      [\n        \"服\",\n        -10.595538139343262\n      ],\n      [\n        \"▁冠\",\n        -10.595697402954102\n      ],\n      [\n        \"▁対抗\",\n        -10.595916748046875\n      ],\n      [\n        \"▁防\",\n        -10.59593677520752\n      ],\n      [\n        \"▁小型\",\n        -10.59601879119873\n      ],\n      [\n        \"条\",\n        -10.596096992492676\n      ],\n      [\n        \"▁変え\",\n        -10.596299171447754\n      ],\n      [\n        \"▁財団\",\n        -10.596566200256348\n      ],\n      [\n        \"▁Twitter\",\n        -10.597089767456055\n      ],\n      [\n        \"五\",\n        -10.598512649536133\n      ],\n      [\n        \"▁貴族\",\n        -10.598652839660645\n      ],\n      [\n        \"▁Apple\",\n        -10.599042892456055\n      ],\n      [\n        \"▁資源\",\n        -10.599228858947754\n      ],\n      [\n        \"▁1992\",\n        -10.599245071411133\n      ],\n      [\n        \"ナン\",\n        -10.59957218170166\n      ],\n      [\n        \"▁青年\",\n        -10.59961223602295\n      ],\n      [\n        \"▁貨物\",\n        -10.599722862243652\n      ],\n      [\n        \"▁機動\",\n        -10.599834442138672\n      ],\n      [\n        \"▁登板\",\n        -10.60049819946289\n      ],\n      [\n        \"▁頼\",\n        -10.60062026977539\n      ],\n      [\n        \"▁分布\",\n        -10.6009521484375\n      ],\n      [\n        \"▁甘\",\n        -10.60117244720459\n      ],\n      [\n        \"▁上げた\",\n        -10.60145092010498\n      ],\n      [\n        \"▁稼ぎ\",\n        -10.601629257202148\n      ],\n      [\n        \"▁ヨ\",\n        -10.601737976074219\n      ],\n      [\n        \"▁ウィ\",\n        -10.601821899414062\n      ],\n      [\n        \"説\",\n        -10.601866722106934\n      ],\n      [\n        \"読\",\n        -10.60220718383789\n      ],\n      [\n        \"▁上映\",\n        -10.602368354797363\n      ],\n      [\n        \"▁原則\",\n        -10.602415084838867\n      ],\n      [\n        \"▁先端\",\n        -10.602453231811523\n      ],\n      [\n        \"▁宝\",\n        -10.602934837341309\n      ],\n      [\n        \"▁単独\",\n        -10.603597640991211\n      ],\n      [\n        \"▁出来事\",\n        -10.603616714477539\n      ],\n      [\n        \"▁滞在\",\n        -10.603829383850098\n      ],\n      [\n        \"▁恐れ\",\n        -10.604592323303223\n      ],\n      [\n        \"▁署\",\n        -10.604592323303223\n      ],\n      [\n        \"http\",\n        -10.60476303100586\n      ],\n      [\n        \"▁レーベル\",\n        -10.604804992675781\n      ],\n      [\n        \"▁釣り\",\n        -10.605021476745605\n      ],\n      [\n        \"▁1993\",\n        -10.605817794799805\n      ],\n      [\n        \"ハイ\",\n        -10.606110572814941\n      ],\n      [\n        \"▁性質\",\n        -10.60622501373291\n      ],\n      [\n        \"▁ウールリッチ\",\n        -10.606371879577637\n      ],\n      [\n        \"起\",\n        -10.606873512268066\n      ],\n      [\n        \"IN\",\n        -10.606950759887695\n      ],\n      [\n        \"▁SNS\",\n        -10.60710334777832\n      ],\n      [\n        \"▁先輩\",\n        -10.607451438903809\n      ],\n      [\n        \"▁分かる\",\n        -10.608192443847656\n      ],\n      [\n        \"li\",\n        -10.609374046325684\n      ],\n      [\n        \"▁風俗\",\n        -10.60944938659668\n      ],\n      [\n        \"キャ\",\n        -10.609950065612793\n      ],\n      [\n        \"番\",\n        -10.610272407531738\n      ],\n      [\n        \"▁佐藤\",\n        -10.6105318069458\n      ],\n      [\n        \"▁調べて\",\n        -10.610678672790527\n      ],\n      [\n        \"▁可愛い\",\n        -10.610932350158691\n      ],\n      [\n        \"op\",\n        -10.611074447631836\n      ],\n      [\n        \"▁レンズ\",\n        -10.611294746398926\n      ],\n      [\n        \"LE\",\n        -10.611617088317871\n      ],\n      [\n        \"▁不倫\",\n        -10.611639022827148\n      ],\n      [\n        \"▁のであれば\",\n        -10.611771583557129\n      ],\n      [\n        \"マル\",\n        -10.611827850341797\n      ],\n      [\n        \"女性\",\n        -10.611860275268555\n      ],\n      [\n        \"▁別に\",\n        -10.612152099609375\n      ],\n      [\n        \"▁信用\",\n        -10.612218856811523\n      ],\n      [\n        \"▁コントロール\",\n        -10.612421989440918\n      ],\n      [\n        \"st\",\n        -10.612554550170898\n      ],\n      [\n        \"▁チャンス\",\n        -10.61292552947998\n      ],\n      [\n        \"▁観察\",\n        -10.612961769104004\n      ],\n      [\n        \"▁経緯\",\n        -10.613139152526855\n      ],\n      [\n        \"▁戻る\",\n        -10.613171577453613\n      ],\n      [\n        \"▁規格\",\n        -10.613327026367188\n      ],\n      [\n        \"▁減\",\n        -10.613452911376953\n      ],\n      [\n        \"▁取ら\",\n        -10.61364459991455\n      ],\n      [\n        \"▁任務\",\n        -10.613659858703613\n      ],\n      [\n        \"▁風景\",\n        -10.61367130279541\n      ],\n      [\n        \"▁圧倒\",\n        -10.61407470703125\n      ],\n      [\n        \"▁国会\",\n        -10.614187240600586\n      ],\n      [\n        \"▁主題\",\n        -10.61422348022461\n      ],\n      [\n        \"▁次元\",\n        -10.615046501159668\n      ],\n      [\n        \"翌\",\n        -10.61569881439209\n      ],\n      [\n        \"▁ブラジル\",\n        -10.615832328796387\n      ],\n      [\n        \"▁アンド\",\n        -10.616142272949219\n      ],\n      [\n        \"▁ドライブ\",\n        -10.616164207458496\n      ],\n      [\n        \"▁最新の\",\n        -10.616272926330566\n      ],\n      [\n        \"▁殺害\",\n        -10.616365432739258\n      ],\n      [\n        \"▁博\",\n        -10.616374969482422\n      ],\n      [\n        \"▁切れ\",\n        -10.616413116455078\n      ],\n      [\n        \"宝\",\n        -10.616637229919434\n      ],\n      [\n        \"▁歌詞\",\n        -10.617135047912598\n      ],\n      [\n        \"▁止め\",\n        -10.617502212524414\n      ],\n      [\n        \"▁わかって\",\n        -10.618289947509766\n      ],\n      [\n        \"隊\",\n        -10.618578910827637\n      ],\n      [\n        \"▁妊娠\",\n        -10.6188383102417\n      ],\n      [\n        \"▁要\",\n        -10.618898391723633\n      ],\n      [\n        \"▁脂肪\",\n        -10.618997573852539\n      ],\n      [\n        \"▁個別\",\n        -10.619119644165039\n      ],\n      [\n        \"▁塾\",\n        -10.619129180908203\n      ],\n      [\n        \"▁ログイン\",\n        -10.619389533996582\n      ],\n      [\n        \"▁卒\",\n        -10.619565963745117\n      ],\n      [\n        \"▁要請\",\n        -10.619709014892578\n      ],\n      [\n        \"▁燃料\",\n        -10.619897842407227\n      ],\n      [\n        \"▁ダン\",\n        -10.619965553283691\n      ],\n      [\n        \"▁ちゃんと\",\n        -10.620014190673828\n      ],\n      [\n        \"京\",\n        -10.62001895904541\n      ],\n      [\n        \"▁進み\",\n        -10.62021541595459\n      ],\n      [\n        \"グル\",\n        -10.620227813720703\n      ],\n      [\n        \"▁液\",\n        -10.620573043823242\n      ],\n      [\n        \"▁引\",\n        -10.620739936828613\n      ],\n      [\n        \"▁示して\",\n        -10.620859146118164\n      ],\n      [\n        \"▁上がり\",\n        -10.620955467224121\n      ],\n      [\n        \"▁住所\",\n        -10.621474266052246\n      ],\n      [\n        \"紙\",\n        -10.622063636779785\n      ],\n      [\n        \"▁インテリア\",\n        -10.62216854095459\n      ],\n      [\n        \"まる\",\n        -10.62254810333252\n      ],\n      [\n        \"2002\",\n        -10.622735977172852\n      ],\n      [\n        \"▁財政\",\n        -10.623008728027344\n      ],\n      [\n        \"▁地下鉄\",\n        -10.623178482055664\n      ],\n      [\n        \"▁カテゴリ\",\n        -10.623296737670898\n      ],\n      [\n        \"▁立つ\",\n        -10.623451232910156\n      ],\n      [\n        \"▁1960\",\n        -10.624146461486816\n      ],\n      [\n        \"ill\",\n        -10.624335289001465\n      ],\n      [\n        \"▁先発\",\n        -10.624603271484375\n      ],\n      [\n        \"▁プ\",\n        -10.624707221984863\n      ],\n      [\n        \"▁与えた\",\n        -10.62484359741211\n      ],\n      [\n        \"▁賃貸\",\n        -10.625142097473145\n      ],\n      [\n        \"▁解除\",\n        -10.625164031982422\n      ],\n      [\n        \"よく\",\n        -10.625188827514648\n      ],\n      [\n        \"塚\",\n        -10.625561714172363\n      ],\n      [\n        \"ぁ\",\n        -10.627054214477539\n      ],\n      [\n        \"▁シェア\",\n        -10.627095222473145\n      ],\n      [\n        \"▁氷\",\n        -10.627410888671875\n      ],\n      [\n        \"▁中村\",\n        -10.627572059631348\n      ],\n      [\n        \"▁はずです\",\n        -10.6276273727417\n      ],\n      [\n        \"ダン\",\n        -10.627696990966797\n      ],\n      [\n        \"▁あれ\",\n        -10.627836227416992\n      ],\n      [\n        \"けて\",\n        -10.62818431854248\n      ],\n      [\n        \"▁梅\",\n        -10.629030227661133\n      ],\n      [\n        \"▁1991\",\n        -10.629262924194336\n      ],\n      [\n        \"▁隣接\",\n        -10.629264831542969\n      ],\n      [\n        \"85\",\n        -10.629424095153809\n      ],\n      [\n        \"セル\",\n        -10.629737854003906\n      ],\n      [\n        \"▁ポーランド\",\n        -10.62981128692627\n      ],\n      [\n        \"▁納得\",\n        -10.630167961120605\n      ],\n      [\n        \"▁ゴールド\",\n        -10.630306243896484\n      ],\n      [\n        \"▁クロス\",\n        -10.630346298217773\n      ],\n      [\n        \"付\",\n        -10.630382537841797\n      ],\n      [\n        \"通常\",\n        -10.63072681427002\n      ],\n      [\n        \"▁意\",\n        -10.630902290344238\n      ],\n      [\n        \"▁わずか\",\n        -10.631807327270508\n      ],\n      [\n        \"▁合意\",\n        -10.631945610046387\n      ],\n      [\n        \"▁当たる\",\n        -10.631958961486816\n      ],\n      [\n        \"▁放射\",\n        -10.632353782653809\n      ],\n      [\n        \"▁漢\",\n        -10.632711410522461\n      ],\n      [\n        \"▁配布\",\n        -10.633065223693848\n      ],\n      [\n        \"ノー\",\n        -10.633269309997559\n      ],\n      [\n        \"ルー\",\n        -10.633328437805176\n      ],\n      [\n        \"▁感動\",\n        -10.633428573608398\n      ],\n      [\n        \"▁送って\",\n        -10.633527755737305\n      ],\n      [\n        \"▁アリ\",\n        -10.633627891540527\n      ],\n      [\n        \"▁十分\",\n        -10.633696556091309\n      ],\n      [\n        \"▁過\",\n        -10.633720397949219\n      ],\n      [\n        \"▁ゆ\",\n        -10.63477611541748\n      ],\n      [\n        \"▁アダルト\",\n        -10.636573791503906\n      ],\n      [\n        \"▁出産\",\n        -10.636759757995605\n      ],\n      [\n        \"校\",\n        -10.63697338104248\n      ],\n      [\n        \"▁前提\",\n        -10.637993812561035\n      ],\n      [\n        \"▁不可\",\n        -10.638615608215332\n      ],\n      [\n        \"▁アドバイス\",\n        -10.638640403747559\n      ],\n      [\n        \"▁ライセンス\",\n        -10.638670921325684\n      ],\n      [\n        \"▁サブ\",\n        -10.639055252075195\n      ],\n      [\n        \"▁ベビー\",\n        -10.639516830444336\n      ],\n      [\n        \"▁ポリシー\",\n        -10.639532089233398\n      ],\n      [\n        \"幸\",\n        -10.639786720275879\n      ],\n      [\n        \"▁康\",\n        -10.640162467956543\n      ],\n      [\n        \"▁合わせた\",\n        -10.640507698059082\n      ],\n      [\n        \"▁英国\",\n        -10.640867233276367\n      ],\n      [\n        \"▁施術\",\n        -10.64093017578125\n      ],\n      [\n        \"▁鼻\",\n        -10.641643524169922\n      ],\n      [\n        \"▁こうした\",\n        -10.642191886901855\n      ],\n      [\n        \"ri\",\n        -10.64236068725586\n      ],\n      [\n        \"クロ\",\n        -10.642477035522461\n      ],\n      [\n        \"▁起きた\",\n        -10.642826080322266\n      ],\n      [\n        \"▁パーティー\",\n        -10.64297103881836\n      ],\n      [\n        \"▁票\",\n        -10.642973899841309\n      ],\n      [\n        \"▁施工\",\n        -10.643680572509766\n      ],\n      [\n        \"▁迎えた\",\n        -10.643692970275879\n      ],\n      [\n        \"▁市街\",\n        -10.644038200378418\n      ],\n      [\n        \"▁東部\",\n        -10.64405632019043\n      ],\n      [\n        \"▁起動\",\n        -10.644109725952148\n      ],\n      [\n        \"▁ハード\",\n        -10.644306182861328\n      ],\n      [\n        \"▁諸国\",\n        -10.644641876220703\n      ],\n      [\n        \"▁開き\",\n        -10.644731521606445\n      ],\n      [\n        \"関\",\n        -10.645262718200684\n      ],\n      [\n        \"▁居住\",\n        -10.645434379577637\n      ],\n      [\n        \"co\",\n        -10.64546012878418\n      ],\n      [\n        \"▁欄\",\n        -10.645824432373047\n      ],\n      [\n        \"▁1989\",\n        -10.645875930786133\n      ],\n      [\n        \"▁李\",\n        -10.645977973937988\n      ],\n      [\n        \"23\",\n        -10.646096229553223\n      ],\n      [\n        \"▁豊富な\",\n        -10.646284103393555\n      ],\n      [\n        \"▁名義\",\n        -10.646286010742188\n      ],\n      [\n        \"80\",\n        -10.646575927734375\n      ],\n      [\n        \"圧\",\n        -10.646649360656738\n      ],\n      [\n        \"▁防ぐ\",\n        -10.646699905395508\n      ],\n      [\n        \"▁困難\",\n        -10.647612571716309\n      ],\n      [\n        \"▁雅\",\n        -10.647977828979492\n      ],\n      [\n        \"▁フォト\",\n        -10.648547172546387\n      ],\n      [\n        \"▁どうぞ\",\n        -10.648885726928711\n      ],\n      [\n        \"▁命名\",\n        -10.64920711517334\n      ],\n      [\n        \"▁アナ\",\n        -10.64926815032959\n      ],\n      [\n        \"▁兵器\",\n        -10.649847030639648\n      ],\n      [\n        \"▁学術\",\n        -10.650108337402344\n      ],\n      [\n        \"浜\",\n        -10.650506019592285\n      ],\n      [\n        \"▁後ろ\",\n        -10.650775909423828\n      ],\n      [\n        \"▁両親\",\n        -10.650813102722168\n      ],\n      [\n        \"▁ば\",\n        -10.650857925415039\n      ],\n      [\n        \"▁与えて\",\n        -10.651068687438965\n      ],\n      [\n        \"▁掃除\",\n        -10.65124225616455\n      ],\n      [\n        \"▁意図\",\n        -10.651289939880371\n      ],\n      [\n        \"▁{\",\n        -10.65147876739502\n      ],\n      [\n        \"▁トラ\",\n        -10.651638984680176\n      ],\n      [\n        \"▁基づき\",\n        -10.651810646057129\n      ],\n      [\n        \"▁わけ\",\n        -10.65185832977295\n      ],\n      [\n        \"▁削減\",\n        -10.652016639709473\n      ],\n      [\n        \"▁縦\",\n        -10.652219772338867\n      ],\n      [\n        \"OS\",\n        -10.652456283569336\n      ],\n      [\n        \"▁アナウンサー\",\n        -10.65251350402832\n      ],\n      [\n        \"▁話す\",\n        -10.65286922454834\n      ],\n      [\n        \"▁球団\",\n        -10.653066635131836\n      ],\n      [\n        \"▁臨床\",\n        -10.653249740600586\n      ],\n      [\n        \"▁思い出\",\n        -10.653548240661621\n      ],\n      [\n        \"▁放題\",\n        -10.653773307800293\n      ],\n      [\n        \"▁フィールド\",\n        -10.653843879699707\n      ],\n      [\n        \"▁具合\",\n        -10.654168128967285\n      ],\n      [\n        \"26\",\n        -10.654218673706055\n      ],\n      [\n        \"▁若者\",\n        -10.654234886169434\n      ],\n      [\n        \"▁飲食\",\n        -10.654251098632812\n      ],\n      [\n        \"▁分子\",\n        -10.654363632202148\n      ],\n      [\n        \"平成\",\n        -10.654529571533203\n      ],\n      [\n        \"▁手紙\",\n        -10.654577255249023\n      ],\n      [\n        \"▁本物\",\n        -10.654613494873047\n      ],\n      [\n        \"2001\",\n        -10.655438423156738\n      ],\n      [\n        \"▁ディスク\",\n        -10.655677795410156\n      ],\n      [\n        \"▁パンツ\",\n        -10.655719757080078\n      ],\n      [\n        \"▁長男\",\n        -10.655898094177246\n      ],\n      [\n        \"▁竜\",\n        -10.65591049194336\n      ],\n      [\n        \"ィ\",\n        -10.655988693237305\n      ],\n      [\n        \"▁選んで\",\n        -10.656149864196777\n      ],\n      [\n        \"▁まいり\",\n        -10.656558990478516\n      ],\n      [\n        \"▁実感\",\n        -10.656633377075195\n      ],\n      [\n        \"▁受信\",\n        -10.656886100769043\n      ],\n      [\n        \"節\",\n        -10.656898498535156\n      ],\n      [\n        \"▁提携\",\n        -10.657039642333984\n      ],\n      [\n        \"順\",\n        -10.657333374023438\n      ],\n      [\n        \"▁取り組んで\",\n        -10.65803337097168\n      ],\n      [\n        \"▁割引\",\n        -10.658052444458008\n      ],\n      [\n        \"▁増え\",\n        -10.658228874206543\n      ],\n      [\n        \"巻\",\n        -10.658323287963867\n      ],\n      [\n        \"友\",\n        -10.65871524810791\n      ],\n      [\n        \"io\",\n        -10.659010887145996\n      ],\n      [\n        \"▁配\",\n        -10.659646987915039\n      ],\n      [\n        \"▁無し\",\n        -10.65998649597168\n      ],\n      [\n        \"▁そうだ\",\n        -10.660008430480957\n      ],\n      [\n        \"▁靴\",\n        -10.660106658935547\n      ],\n      [\n        \"▁オル\",\n        -10.660253524780273\n      ],\n      [\n        \"柄\",\n        -10.661063194274902\n      ],\n      [\n        \"▁チャット\",\n        -10.661223411560059\n      ],\n      [\n        \"▁中学\",\n        -10.66123104095459\n      ],\n      [\n        \"▁転換\",\n        -10.661295890808105\n      ],\n      [\n        \"ところが\",\n        -10.661410331726074\n      ],\n      [\n        \"あと\",\n        -10.661547660827637\n      ],\n      [\n        \"▁特性\",\n        -10.661654472351074\n      ],\n      [\n        \"▁かね\",\n        -10.66187572479248\n      ],\n      [\n        \"▁囲\",\n        -10.662178039550781\n      ],\n      [\n        \"▁見つけ\",\n        -10.662419319152832\n      ],\n      [\n        \"▁着用\",\n        -10.662579536437988\n      ],\n      [\n        \"▁深夜\",\n        -10.662590026855469\n      ],\n      [\n        \"黒\",\n        -10.662744522094727\n      ],\n      [\n        \"▁腹\",\n        -10.663503646850586\n      ],\n      [\n        \"▁極めて\",\n        -10.66354751586914\n      ],\n      [\n        \"▁or\",\n        -10.663641929626465\n      ],\n      [\n        \"▁撤退\",\n        -10.664080619812012\n      ],\n      [\n        \"▁分解\",\n        -10.664419174194336\n      ],\n      [\n        \"▁関わる\",\n        -10.664423942565918\n      ],\n      [\n        \"all\",\n        -10.66447925567627\n      ],\n      [\n        \"▁あい\",\n        -10.664874076843262\n      ],\n      [\n        \"▁乗車\",\n        -10.664888381958008\n      ],\n      [\n        \"▁同時\",\n        -10.665441513061523\n      ],\n      [\n        \"▁商店\",\n        -10.665451049804688\n      ],\n      [\n        \"▁ビット\",\n        -10.665517807006836\n      ],\n      [\n        \"加\",\n        -10.665749549865723\n      ],\n      [\n        \"▁はっきり\",\n        -10.665983200073242\n      ],\n      [\n        \"▁ピンク\",\n        -10.666080474853516\n      ],\n      [\n        \"▁地点\",\n        -10.666500091552734\n      ],\n      [\n        \"ネル\",\n        -10.666592597961426\n      ],\n      [\n        \"▁近\",\n        -10.6666898727417\n      ],\n      [\n        \"▁保持\",\n        -10.666960716247559\n      ],\n      [\n        \"▁ウォーター\",\n        -10.667308807373047\n      ],\n      [\n        \"もの\",\n        -10.667551040649414\n      ],\n      [\n        \"味\",\n        -10.667752265930176\n      ],\n      [\n        \"▁意思\",\n        -10.667783737182617\n      ],\n      [\n        \"▁ゼミ\",\n        -10.667920112609863\n      ],\n      [\n        \"<\",\n        -10.668095588684082\n      ],\n      [\n        \"▁無視\",\n        -10.668235778808594\n      ],\n      [\n        \"▁即\",\n        -10.66830062866211\n      ],\n      [\n        \"▁幾\",\n        -10.668442726135254\n      ],\n      [\n        \"▁ランク\",\n        -10.668723106384277\n      ],\n      [\n        \"▁師団\",\n        -10.668892860412598\n      ],\n      [\n        \"▁華\",\n        -10.669175148010254\n      ],\n      [\n        \"▁似た\",\n        -10.669609069824219\n      ],\n      [\n        \"▁中間\",\n        -10.66963005065918\n      ],\n      [\n        \"具\",\n        -10.669775009155273\n      ],\n      [\n        \"売\",\n        -10.670099258422852\n      ],\n      [\n        \"▁毎週\",\n        -10.67020320892334\n      ],\n      [\n        \"▁毎\",\n        -10.670204162597656\n      ],\n      [\n        \"▁屋根\",\n        -10.670236587524414\n      ],\n      [\n        \"▁ティー\",\n        -10.67055892944336\n      ],\n      [\n        \"▁行か\",\n        -10.670868873596191\n      ],\n      [\n        \"▁メンテナンス\",\n        -10.671135902404785\n      ],\n      [\n        \"▁リフォーム\",\n        -10.671504020690918\n      ],\n      [\n        \"▁天気\",\n        -10.671528816223145\n      ],\n      [\n        \"▁改称\",\n        -10.672106742858887\n      ],\n      [\n        \"▁信仰\",\n        -10.672271728515625\n      ],\n      [\n        \"▁統治\",\n        -10.672943115234375\n      ],\n      [\n        \"▁歓迎\",\n        -10.672979354858398\n      ],\n      [\n        \"▁ラブ\",\n        -10.673094749450684\n      ],\n      [\n        \"▁先行\",\n        -10.673401832580566\n      ],\n      [\n        \"▁吉田\",\n        -10.673840522766113\n      ],\n      [\n        \"▁見せて\",\n        -10.674284934997559\n      ],\n      [\n        \"▁遺伝子\",\n        -10.674445152282715\n      ],\n      [\n        \"▁マップ\",\n        -10.67463493347168\n      ],\n      [\n        \"▁大幅に\",\n        -10.674697875976562\n      ],\n      [\n        \"▁創造\",\n        -10.674833297729492\n      ],\n      [\n        \"▁いえる\",\n        -10.674960136413574\n      ],\n      [\n        \"▁画家\",\n        -10.675365447998047\n      ],\n      [\n        \"ラム\",\n        -10.675662994384766\n      ],\n      [\n        \"近年\",\n        -10.675780296325684\n      ],\n      [\n        \"▁修\",\n        -10.675862312316895\n      ],\n      [\n        \"0\",\n        -10.676070213317871\n      ],\n      [\n        \"▁生きる\",\n        -10.676130294799805\n      ],\n      [\n        \"遠\",\n        -10.676259994506836\n      ],\n      [\n        \"▁昨年\",\n        -10.67640209197998\n      ],\n      [\n        \"▁菌\",\n        -10.676733016967773\n      ],\n      [\n        \"典\",\n        -10.676803588867188\n      ],\n      [\n        \"▁捜査\",\n        -10.677022933959961\n      ],\n      [\n        \"▁\",\n        -10.677600860595703\n      ],\n      [\n        \"▁紀元\",\n        -10.67774486541748\n      ],\n      [\n        \"▁関わら\",\n        -10.67777156829834\n      ],\n      [\n        \"▁出発\",\n        -10.677976608276367\n      ],\n      [\n        \"▁遺跡\",\n        -10.678329467773438\n      ],\n      [\n        \"トゥ\",\n        -10.678751945495605\n      ],\n      [\n        \"▁脚\",\n        -10.679109573364258\n      ],\n      [\n        \"▁激\",\n        -10.679110527038574\n      ],\n      [\n        \"▁集落\",\n        -10.679387092590332\n      ],\n      [\n        \"▁阪神\",\n        -10.68035888671875\n      ],\n      [\n        \"商品\",\n        -10.68060302734375\n      ],\n      [\n        \"lo\",\n        -10.680620193481445\n      ],\n      [\n        \"▁寄せ\",\n        -10.680861473083496\n      ],\n      [\n        \"▁ブラウザ\",\n        -10.680977821350098\n      ],\n      [\n        \"▁タレント\",\n        -10.681419372558594\n      ],\n      [\n        \"▁合った\",\n        -10.6819486618042\n      ],\n      [\n        \"▁見えて\",\n        -10.681988716125488\n      ],\n      [\n        \"▁入れた\",\n        -10.682061195373535\n      ],\n      [\n        \"▁隆\",\n        -10.682559967041016\n      ],\n      [\n        \"▁側面\",\n        -10.68258285522461\n      ],\n      [\n        \"▁キャンセル\",\n        -10.682631492614746\n      ],\n      [\n        \"▁チェンジ\",\n        -10.682719230651855\n      ],\n      [\n        \"十\",\n        -10.68310832977295\n      ],\n      [\n        \"▁みよう\",\n        -10.683241844177246\n      ],\n      [\n        \"▁借金\",\n        -10.683378219604492\n      ],\n      [\n        \"福\",\n        -10.683464050292969\n      ],\n      [\n        \"▁れたり\",\n        -10.683586120605469\n      ],\n      [\n        \"▁仁\",\n        -10.683978080749512\n      ],\n      [\n        \"▁用途\",\n        -10.684258460998535\n      ],\n      [\n        \"総\",\n        -10.684428215026855\n      ],\n      [\n        \"ハー\",\n        -10.684759140014648\n      ],\n      [\n        \"テル\",\n        -10.684826850891113\n      ],\n      [\n        \"まって\",\n        -10.685060501098633\n      ],\n      [\n        \"▁雲\",\n        -10.68521785736084\n      ],\n      [\n        \"▁爆発\",\n        -10.685356140136719\n      ],\n      [\n        \"▁銀座\",\n        -10.68541431427002\n      ],\n      [\n        \"▁割合\",\n        -10.685826301574707\n      ],\n      [\n        \"▁バル\",\n        -10.685835838317871\n      ],\n      [\n        \"いつも\",\n        -10.686234474182129\n      ],\n      [\n        \"感\",\n        -10.68653392791748\n      ],\n      [\n        \"▁アウト\",\n        -10.687507629394531\n      ],\n      [\n        \"▁想い\",\n        -10.687677383422852\n      ],\n      [\n        \"ag\",\n        -10.687862396240234\n      ],\n      [\n        \"▁管轄\",\n        -10.68789005279541\n      ],\n      [\n        \"▁いたり\",\n        -10.688348770141602\n      ],\n      [\n        \"党\",\n        -10.688633918762207\n      ],\n      [\n        \"▁協定\",\n        -10.689013481140137\n      ],\n      [\n        \"▁余裕\",\n        -10.689081192016602\n      ],\n      [\n        \"▁公立\",\n        -10.68935775756836\n      ],\n      [\n        \"▁なん\",\n        -10.689502716064453\n      ],\n      [\n        \"▁南北\",\n        -10.689728736877441\n      ],\n      [\n        \"運\",\n        -10.689977645874023\n      ],\n      [\n        \"▁基盤\",\n        -10.689995765686035\n      ],\n      [\n        \"▁入団\",\n        -10.690169334411621\n      ],\n      [\n        \"@\",\n        -10.690250396728516\n      ],\n      [\n        \"▁上がって\",\n        -10.690496444702148\n      ],\n      [\n        \"▁掲示板\",\n        -10.69051742553711\n      ],\n      [\n        \"▁ポスト\",\n        -10.690960884094238\n      ],\n      [\n        \"▁財布\",\n        -10.691305160522461\n      ],\n      [\n        \"▁外交\",\n        -10.6913423538208\n      ],\n      [\n        \"▁残して\",\n        -10.6913423538208\n      ],\n      [\n        \"▁AI\",\n        -10.691450119018555\n      ],\n      [\n        \"▁印\",\n        -10.69157886505127\n      ],\n      [\n        \"▁かかって\",\n        -10.691604614257812\n      ],\n      [\n        \"在\",\n        -10.691923141479492\n      ],\n      [\n        \"▁広い\",\n        -10.6920166015625\n      ],\n      [\n        \"▁当たり\",\n        -10.69225788116455\n      ],\n      [\n        \"▁LINE\",\n        -10.692301750183105\n      ],\n      [\n        \"極\",\n        -10.69247055053711\n      ],\n      [\n        \"づ\",\n        -10.6927490234375\n      ],\n      [\n        \"▁返済\",\n        -10.692989349365234\n      ],\n      [\n        \"▁文献\",\n        -10.693366050720215\n      ],\n      [\n        \"▁メイク\",\n        -10.69345760345459\n      ],\n      [\n        \"▁次第\",\n        -10.693553924560547\n      ],\n      [\n        \"▁繰り返し\",\n        -10.693568229675293\n      ],\n      [\n        \"算\",\n        -10.693727493286133\n      ],\n      [\n        \"▁駅前\",\n        -10.69383716583252\n      ],\n      [\n        \"▁姫\",\n        -10.69420051574707\n      ],\n      [\n        \"▁宣伝\",\n        -10.69420051574707\n      ],\n      [\n        \"ry\",\n        -10.694339752197266\n      ],\n      [\n        \"▁ベイ\",\n        -10.694341659545898\n      ],\n      [\n        \"ニン\",\n        -10.694510459899902\n      ],\n      [\n        \"シェ\",\n        -10.694759368896484\n      ],\n      [\n        \"▁集めて\",\n        -10.694802284240723\n      ],\n      [\n        \"▁陸\",\n        -10.694851875305176\n      ],\n      [\n        \"スク\",\n        -10.69485855102539\n      ],\n      [\n        \"▁様に\",\n        -10.695215225219727\n      ],\n      [\n        \"▁きっと\",\n        -10.695563316345215\n      ],\n      [\n        \"▁どうしても\",\n        -10.695597648620605\n      ],\n      [\n        \"▁ビール\",\n        -10.696128845214844\n      ],\n      [\n        \"and\",\n        -10.69620132446289\n      ],\n      [\n        \"▁フレーム\",\n        -10.696235656738281\n      ],\n      [\n        \"▁底\",\n        -10.696452140808105\n      ],\n      [\n        \"▁回収\",\n        -10.696488380432129\n      ],\n      [\n        \"興\",\n        -10.696905136108398\n      ],\n      [\n        \"▁臨時\",\n        -10.697068214416504\n      ],\n      [\n        \"カテゴリー\",\n        -10.697155952453613\n      ],\n      [\n        \"▁たび\",\n        -10.69729232788086\n      ],\n      [\n        \"岸\",\n        -10.697511672973633\n      ],\n      [\n        \"▁許さ\",\n        -10.697827339172363\n      ],\n      [\n        \"▁1988\",\n        -10.698448181152344\n      ],\n      [\n        \"▁もん\",\n        -10.698709487915039\n      ],\n      [\n        \"▁終わる\",\n        -10.698862075805664\n      ],\n      [\n        \"▁不満\",\n        -10.698989868164062\n      ],\n      [\n        \"▁CO\",\n        -10.699289321899414\n      ],\n      [\n        \"類\",\n        -10.699359893798828\n      ],\n      [\n        \"▁語り\",\n        -10.699482917785645\n      ],\n      [\n        \"▁得意\",\n        -10.699516296386719\n      ],\n      [\n        \"▁坂\",\n        -10.700058937072754\n      ],\n      [\n        \"▁カリフォルニア\",\n        -10.700129508972168\n      ],\n      [\n        \"▁バレ\",\n        -10.700430870056152\n      ],\n      [\n        \"乃\",\n        -10.701360702514648\n      ],\n      [\n        \"▁Ch\",\n        -10.701396942138672\n      ],\n      [\n        \"▁通算\",\n        -10.701435089111328\n      ],\n      [\n        \"▁ダイ\",\n        -10.701467514038086\n      ],\n      [\n        \"▁売\",\n        -10.701783180236816\n      ],\n      [\n        \"▁次々\",\n        -10.701801300048828\n      ],\n      [\n        \"▁買収\",\n        -10.70186710357666\n      ],\n      [\n        \"▁十分に\",\n        -10.70212173461914\n      ],\n      [\n        \"▁人類\",\n        -10.702156066894531\n      ],\n      [\n        \"▁z\",\n        -10.702608108520508\n      ],\n      [\n        \"ほ\",\n        -10.702630043029785\n      ],\n      [\n        \"▁プラ\",\n        -10.70311450958252\n      ],\n      [\n        \"デル\",\n        -10.703182220458984\n      ],\n      [\n        \"▁切\",\n        -10.703750610351562\n      ],\n      [\n        \"▁幅広い\",\n        -10.703866004943848\n      ],\n      [\n        \"▁庫\",\n        -10.703989028930664\n      ],\n      [\n        \"▁調理\",\n        -10.704361915588379\n      ],\n      [\n        \"利用\",\n        -10.704384803771973\n      ],\n      [\n        \"このように\",\n        -10.704418182373047\n      ],\n      [\n        \"▁反映\",\n        -10.704577445983887\n      ],\n      [\n        \"図\",\n        -10.704912185668945\n      ],\n      [\n        \"▁なあ\",\n        -10.704941749572754\n      ],\n      [\n        \"▁イー\",\n        -10.705008506774902\n      ],\n      [\n        \"▁占い\",\n        -10.705068588256836\n      ],\n      [\n        \"▁生じる\",\n        -10.705324172973633\n      ],\n      [\n        \"満\",\n        -10.705449104309082\n      ],\n      [\n        \"ション\",\n        -10.706048011779785\n      ],\n      [\n        \"▁フード\",\n        -10.706387519836426\n      ],\n      [\n        \"▁電動\",\n        -10.706525802612305\n      ],\n      [\n        \"好\",\n        -10.707021713256836\n      ],\n      [\n        \"▁締結\",\n        -10.707063674926758\n      ],\n      [\n        \"est\",\n        -10.707228660583496\n      ],\n      [\n        \"99\",\n        -10.707803726196289\n      ],\n      [\n        \"▁上がる\",\n        -10.708578109741211\n      ],\n      [\n        \"▁撮り\",\n        -10.708748817443848\n      ],\n      [\n        \"置\",\n        -10.709005355834961\n      ],\n      [\n        \"▁デザイナー\",\n        -10.70938491821289\n      ],\n      [\n        \"49\",\n        -10.709566116333008\n      ],\n      [\n        \"▁駆逐\",\n        -10.709647178649902\n      ],\n      [\n        \"トー\",\n        -10.709829330444336\n      ],\n      [\n        \"▁ベトナム\",\n        -10.7099609375\n      ],\n      [\n        \"▁開講\",\n        -10.710029602050781\n      ],\n      [\n        \"▁読者\",\n        -10.710100173950195\n      ],\n      [\n        \"▁初回\",\n        -10.710197448730469\n      ],\n      [\n        \"▁松本\",\n        -10.710376739501953\n      ],\n      [\n        \"▁ジャン\",\n        -10.71078872680664\n      ],\n      [\n        \"▁監視\",\n        -10.71123218536377\n      ],\n      [\n        \"百\",\n        -10.711564064025879\n      ],\n      [\n        \"ot\",\n        -10.711671829223633\n      ],\n      [\n        \"▁商\",\n        -10.712349891662598\n      ],\n      [\n        \"▁裕\",\n        -10.712491989135742\n      ],\n      [\n        \"▁PDF\",\n        -10.712738037109375\n      ],\n      [\n        \"▁いつでも\",\n        -10.714420318603516\n      ],\n      [\n        \"▁収容\",\n        -10.714472770690918\n      ],\n      [\n        \"▁表情\",\n        -10.714473724365234\n      ],\n      [\n        \"▁アクセサリー\",\n        -10.71512508392334\n      ],\n      [\n        \"▁決める\",\n        -10.715201377868652\n      ],\n      [\n        \"ボン\",\n        -10.715425491333008\n      ],\n      [\n        \"29\",\n        -10.715761184692383\n      ],\n      [\n        \"同じ\",\n        -10.71596622467041\n      ],\n      [\n        \"▁突然\",\n        -10.7160005569458\n      ],\n      [\n        \"▁採\",\n        -10.716123580932617\n      ],\n      [\n        \"▁姓\",\n        -10.716147422790527\n      ],\n      [\n        \"向\",\n        -10.71689224243164\n      ],\n      [\n        \"▁塔\",\n        -10.717092514038086\n      ],\n      [\n        \"▁作詞\",\n        -10.71718692779541\n      ],\n      [\n        \"団\",\n        -10.717340469360352\n      ],\n      [\n        \"ant\",\n        -10.717635154724121\n      ],\n      [\n        \"▁トンネル\",\n        -10.717796325683594\n      ],\n      [\n        \"▁グレー\",\n        -10.718750953674316\n      ],\n      [\n        \"▁600\",\n        -10.719345092773438\n      ],\n      [\n        \"視\",\n        -10.71964168548584\n      ],\n      [\n        \"▁流通\",\n        -10.719962120056152\n      ],\n      [\n        \"1990\",\n        -10.720258712768555\n      ],\n      [\n        \"▁栄\",\n        -10.720524787902832\n      ],\n      [\n        \"▁配慮\",\n        -10.72075366973877\n      ],\n      [\n        \"▁うる\",\n        -10.720885276794434\n      ],\n      [\n        \"▁is\",\n        -10.721294403076172\n      ],\n      [\n        \"▁扱う\",\n        -10.721309661865234\n      ],\n      [\n        \"▁差別\",\n        -10.72209644317627\n      ],\n      [\n        \"▁翌日\",\n        -10.722190856933594\n      ],\n      [\n        \"▁送る\",\n        -10.722200393676758\n      ],\n      [\n        \"▁無線\",\n        -10.722403526306152\n      ],\n      [\n        \"▁受け入れ\",\n        -10.722496032714844\n      ],\n      [\n        \"▁補\",\n        -10.722650527954102\n      ],\n      [\n        \"ければ\",\n        -10.722972869873047\n      ],\n      [\n        \"▁おかげ\",\n        -10.723441123962402\n      ],\n      [\n        \"▁戦車\",\n        -10.724544525146484\n      ],\n      [\n        \"▁━\",\n        -10.725343704223633\n      ],\n      [\n        \"交\",\n        -10.725500106811523\n      ],\n      [\n        \"▁従って\",\n        -10.725666046142578\n      ],\n      [\n        \"かん\",\n        -10.725988388061523\n      ],\n      [\n        \"急\",\n        -10.726025581359863\n      ],\n      [\n        \"▁率いる\",\n        -10.726204872131348\n      ],\n      [\n        \"▁バラ\",\n        -10.726448059082031\n      ],\n      [\n        \"ra\",\n        -10.72651195526123\n      ],\n      [\n        \"▁パート\",\n        -10.726529121398926\n      ],\n      [\n        \"御\",\n        -10.726615905761719\n      ],\n      [\n        \"ドン\",\n        -10.726641654968262\n      ],\n      [\n        \"▁出現\",\n        -10.726862907409668\n      ],\n      [\n        \"▁タン\",\n        -10.726863861083984\n      ],\n      [\n        \"歩\",\n        -10.726937294006348\n      ],\n      [\n        \"▁精\",\n        -10.72700309753418\n      ],\n      [\n        \"▁疲れ\",\n        -10.727191925048828\n      ],\n      [\n        \"ers\",\n        -10.727717399597168\n      ],\n      [\n        \"六\",\n        -10.727914810180664\n      ],\n      [\n        \"▁付いて\",\n        -10.728038787841797\n      ],\n      [\n        \"▁弘\",\n        -10.728067398071289\n      ],\n      [\n        \"▁新設\",\n        -10.728294372558594\n      ],\n      [\n        \"▁会い\",\n        -10.728347778320312\n      ],\n      [\n        \"▁逃げ\",\n        -10.728479385375977\n      ],\n      [\n        \"取り\",\n        -10.72877025604248\n      ],\n      [\n        \"▁歴任\",\n        -10.728885650634766\n      ],\n      [\n        \"▁ホイール\",\n        -10.729106903076172\n      ],\n      [\n        \"洋\",\n        -10.729284286499023\n      ],\n      [\n        \"ap\",\n        -10.72973918914795\n      ],\n      [\n        \"ケン\",\n        -10.729889869689941\n      ],\n      [\n        \"▁主体\",\n        -10.729907989501953\n      ],\n      [\n        \"▁暴力\",\n        -10.730273246765137\n      ],\n      [\n        \"▁吹き\",\n        -10.730552673339844\n      ],\n      [\n        \"留\",\n        -10.730786323547363\n      ],\n      [\n        \"実は\",\n        -10.731069564819336\n      ],\n      [\n        \"▁植民\",\n        -10.731371879577637\n      ],\n      [\n        \"▁1987\",\n        -10.732577323913574\n      ],\n      [\n        \"しかしながら\",\n        -10.732605934143066\n      ],\n      [\n        \"▁パネル\",\n        -10.732608795166016\n      ],\n      [\n        \"▁好み\",\n        -10.732817649841309\n      ],\n      [\n        \"▁帰り\",\n        -10.732895851135254\n      ],\n      [\n        \"▁工夫\",\n        -10.733030319213867\n      ],\n      [\n        \"▁接種\",\n        -10.733355522155762\n      ],\n      [\n        \"▁投入\",\n        -10.733445167541504\n      ],\n      [\n        \"▁マルチ\",\n        -10.733598709106445\n      ],\n      [\n        \"▁談\",\n        -10.733784675598145\n      ],\n      [\n        \"▁離れた\",\n        -10.733792304992676\n      ],\n      [\n        \"▁汚れ\",\n        -10.734173774719238\n      ],\n      [\n        \"▁気に入り\",\n        -10.734444618225098\n      ],\n      [\n        \"まだ\",\n        -10.734601974487305\n      ],\n      [\n        \"▁示した\",\n        -10.734881401062012\n      ],\n      [\n        \"▁理\",\n        -10.735295295715332\n      ],\n      [\n        \"筋\",\n        -10.735692977905273\n      ],\n      [\n        \"▁変動\",\n        -10.735965728759766\n      ],\n      [\n        \"▁豊かな\",\n        -10.735995292663574\n      ],\n      [\n        \"▁チェーン\",\n        -10.736213684082031\n      ],\n      [\n        \"one\",\n        -10.736610412597656\n      ],\n      [\n        \"▁伝\",\n        -10.73680305480957\n      ],\n      [\n        \"▁グランプリ\",\n        -10.737271308898926\n      ],\n      [\n        \"▁乳\",\n        -10.737570762634277\n      ],\n      [\n        \"▁アス\",\n        -10.737709999084473\n      ],\n      [\n        \"▁鎌倉\",\n        -10.73806381225586\n      ],\n      [\n        \"ee\",\n        -10.738065719604492\n      ],\n      [\n        \"▁変えて\",\n        -10.738358497619629\n      ],\n      [\n        \"▁ファミリー\",\n        -10.738367080688477\n      ],\n      [\n        \"▁学んだ\",\n        -10.738368034362793\n      ],\n      [\n        \"▁徳川\",\n        -10.738482475280762\n      ],\n      [\n        \"しかも\",\n        -10.738748550415039\n      ],\n      [\n        \"▁幸せ\",\n        -10.738773345947266\n      ],\n      [\n        \"▁日時\",\n        -10.7390718460083\n      ],\n      [\n        \"ドゥ\",\n        -10.739137649536133\n      ],\n      [\n        \"▁ダブル\",\n        -10.739543914794922\n      ],\n      [\n        \"▁スウェーデン\",\n        -10.739578247070312\n      ],\n      [\n        \"▁82\",\n        -10.739594459533691\n      ],\n      [\n        \"▁衛星\",\n        -10.739693641662598\n      ],\n      [\n        \"▁ランチ\",\n        -10.739830017089844\n      ],\n      [\n        \"▁カレー\",\n        -10.739934921264648\n      ],\n      [\n        \"▁フロント\",\n        -10.739957809448242\n      ],\n      [\n        \"▁戦士\",\n        -10.740230560302734\n      ],\n      [\n        \"▁めに\",\n        -10.740400314331055\n      ],\n      [\n        \"▁布\",\n        -10.740595817565918\n      ],\n      [\n        \"▁睡眠\",\n        -10.740818977355957\n      ],\n      [\n        \"▁オーストリア\",\n        -10.740860939025879\n      ],\n      [\n        \"▁スタジアム\",\n        -10.740934371948242\n      ],\n      [\n        \"47\",\n        -10.741072654724121\n      ],\n      [\n        \"▁スタンド\",\n        -10.741286277770996\n      ],\n      [\n        \"▁人数\",\n        -10.741925239562988\n      ],\n      [\n        \"▁謎\",\n        -10.7420072555542\n      ],\n      [\n        \"龍\",\n        -10.742512702941895\n      ],\n      [\n        \"▁重量\",\n        -10.742544174194336\n      ],\n      [\n        \"つき\",\n        -10.742650032043457\n      ],\n      [\n        \"35\",\n        -10.74278450012207\n      ],\n      [\n        \"28\",\n        -10.742947578430176\n      ],\n      [\n        \"▁クラシック\",\n        -10.743200302124023\n      ],\n      [\n        \"▁キング\",\n        -10.743509292602539\n      ],\n      [\n        \"▁衝撃\",\n        -10.743876457214355\n      ],\n      [\n        \"では\",\n        -10.743898391723633\n      ],\n      [\n        \"IS\",\n        -10.744841575622559\n      ],\n      [\n        \"▁マッチ\",\n        -10.744956970214844\n      ],\n      [\n        \"▁付けて\",\n        -10.745199203491211\n      ],\n      [\n        \"AL\",\n        -10.74521255493164\n      ],\n      [\n        \"▁砂\",\n        -10.745214462280273\n      ],\n      [\n        \"▁投\",\n        -10.745369911193848\n      ],\n      [\n        \"▁弁\",\n        -10.7454252243042\n      ],\n      [\n        \"▁優\",\n        -10.745903015136719\n      ],\n      [\n        \"過去\",\n        -10.746221542358398\n      ],\n      [\n        \"ッサ\",\n        -10.746478080749512\n      ],\n      [\n        \"▁広場\",\n        -10.747115135192871\n      ],\n      [\n        \"▁農\",\n        -10.7471342086792\n      ],\n      [\n        \"ig\",\n        -10.7474365234375\n      ],\n      [\n        \"▁図る\",\n        -10.747557640075684\n      ],\n      [\n        \"▁復興\",\n        -10.747750282287598\n      ],\n      [\n        \"▁通う\",\n        -10.747791290283203\n      ],\n      [\n        \"まずは\",\n        -10.74783706665039\n      ],\n      [\n        \"▁インター\",\n        -10.747848510742188\n      ],\n      [\n        \"▁試して\",\n        -10.748116493225098\n      ],\n      [\n        \"▁阿\",\n        -10.74820327758789\n      ],\n      [\n        \"北海道\",\n        -10.748265266418457\n      ],\n      [\n        \"▁TBS\",\n        -10.748269081115723\n      ],\n      [\n        \"▁突破\",\n        -10.74870777130127\n      ],\n      [\n        \"▁もらえ\",\n        -10.748785972595215\n      ],\n      [\n        \"▁浜\",\n        -10.749073028564453\n      ],\n      [\n        \"▁俊\",\n        -10.749162673950195\n      ],\n      [\n        \"▁在住\",\n        -10.749631881713867\n      ],\n      [\n        \"▁共産党\",\n        -10.749688148498535\n      ],\n      [\n        \"▁輸出\",\n        -10.75018310546875\n      ],\n      [\n        \"▁パパ\",\n        -10.750210762023926\n      ],\n      [\n        \"▁刑事\",\n        -10.750245094299316\n      ],\n      [\n        \"▁置き\",\n        -10.750259399414062\n      ],\n      [\n        \"▁フェ\",\n        -10.750304222106934\n      ],\n      [\n        \"▁出張\",\n        -10.750323295593262\n      ],\n      [\n        \"豊\",\n        -10.750361442565918\n      ],\n      [\n        \"▁思考\",\n        -10.750575065612793\n      ],\n      [\n        \"▁ナンバー\",\n        -10.750889778137207\n      ],\n      [\n        \"▁激しい\",\n        -10.75124740600586\n      ],\n      [\n        \"▁オン\",\n        -10.751447677612305\n      ],\n      [\n        \"▁恋人\",\n        -10.751620292663574\n      ],\n      [\n        \"収\",\n        -10.751784324645996\n      ],\n      [\n        \"▁稼ぐ\",\n        -10.751981735229492\n      ],\n      [\n        \"▁EX\",\n        -10.751996994018555\n      ],\n      [\n        \"▁オートバックス\",\n        -10.752192497253418\n      ],\n      [\n        \"府\",\n        -10.752724647521973\n      ],\n      [\n        \"100\",\n        -10.752809524536133\n      ],\n      [\n        \"▁特別な\",\n        -10.753090858459473\n      ],\n      [\n        \"▁違って\",\n        -10.753138542175293\n      ],\n      [\n        \"ั\",\n        -10.753378868103027\n      ],\n      [\n        \"衣\",\n        -10.753620147705078\n      ],\n      [\n        \"▁道具\",\n        -10.75365924835205\n      ],\n      [\n        \"称\",\n        -10.753668785095215\n      ],\n      [\n        \"▁だったり\",\n        -10.753694534301758\n      ],\n      [\n        \"型\",\n        -10.753713607788086\n      ],\n      [\n        \"▁ステーション\",\n        -10.7539644241333\n      ],\n      [\n        \"▁250\",\n        -10.754257202148438\n      ],\n      [\n        \"▁メキシコ\",\n        -10.754351615905762\n      ],\n      [\n        \"郡\",\n        -10.75451374053955\n      ],\n      [\n        \"▁取り付け\",\n        -10.754825592041016\n      ],\n      [\n        \"×\",\n        -10.755046844482422\n      ],\n      [\n        \"▁眼\",\n        -10.755205154418945\n      ],\n      [\n        \"▁不正\",\n        -10.755253791809082\n      ],\n      [\n        \"▁智\",\n        -10.755300521850586\n      ],\n      [\n        \"▁柄\",\n        -10.755454063415527\n      ],\n      [\n        \"▁キーワード\",\n        -10.755582809448242\n      ],\n      [\n        \"子供\",\n        -10.755758285522461\n      ],\n      [\n        \"▁緊張\",\n        -10.755980491638184\n      ],\n      [\n        \"▁パー\",\n        -10.756006240844727\n      ],\n      [\n        \"▁閉鎖\",\n        -10.75664234161377\n      ],\n      [\n        \"▁おか\",\n        -10.756956100463867\n      ],\n      [\n        \"▁厚生\",\n        -10.75699234008789\n      ],\n      [\n        \"▁沢山\",\n        -10.75706672668457\n      ],\n      [\n        \"▁デイ\",\n        -10.757244110107422\n      ],\n      [\n        \"▁アップデート\",\n        -10.757377624511719\n      ],\n      [\n        \"ース\",\n        -10.757486343383789\n      ],\n      [\n        \"▁医薬\",\n        -10.757721900939941\n      ],\n      [\n        \"01\",\n        -10.757879257202148\n      ],\n      [\n        \"▁model\",\n        -10.75843334197998\n      ],\n      [\n        \"様\",\n        -10.758508682250977\n      ],\n      [\n        \"▁合流\",\n        -10.758764266967773\n      ],\n      [\n        \"▁人民\",\n        -10.758831024169922\n      ],\n      [\n        \"▁天文\",\n        -10.759284973144531\n      ],\n      [\n        \"▁ございませ\",\n        -10.759328842163086\n      ],\n      [\n        \"▁体調\",\n        -10.759394645690918\n      ],\n      [\n        \"▁戦国\",\n        -10.75968074798584\n      ],\n      [\n        \"製\",\n        -10.760065078735352\n      ],\n      [\n        \"▁観点\",\n        -10.760107040405273\n      ],\n      [\n        \"報\",\n        -10.76013469696045\n      ],\n      [\n        \"ta\",\n        -10.760208129882812\n      ],\n      [\n        \"55\",\n        -10.760512351989746\n      ],\n      [\n        \"▁銅\",\n        -10.76057243347168\n      ],\n      [\n        \"ass\",\n        -10.760766983032227\n      ],\n      [\n        \"▁大和\",\n        -10.760872840881348\n      ],\n      [\n        \"▁雑\",\n        -10.761136054992676\n      ],\n      [\n        \"くて\",\n        -10.761143684387207\n      ],\n      [\n        \"高校\",\n        -10.76126766204834\n      ],\n      [\n        \"▁ビー\",\n        -10.761373519897461\n      ],\n      [\n        \"▁1985\",\n        -10.761563301086426\n      ],\n      [\n        \"▁セフレ\",\n        -10.76168441772461\n      ],\n      [\n        \"然\",\n        -10.762093544006348\n      ],\n      [\n        \"▁蔵\",\n        -10.762140274047852\n      ],\n      [\n        \"▁記さ\",\n        -10.762142181396484\n      ],\n      [\n        \"▁コル\",\n        -10.762563705444336\n      ],\n      [\n        \"▁履歴\",\n        -10.76258373260498\n      ],\n      [\n        \"▁振興\",\n        -10.76262092590332\n      ],\n      [\n        \"プラ\",\n        -10.76267147064209\n      ],\n      [\n        \"▁教員\",\n        -10.763262748718262\n      ],\n      [\n        \"▁伊藤\",\n        -10.76374626159668\n      ],\n      [\n        \"▁引用\",\n        -10.763988494873047\n      ],\n      [\n        \"切\",\n        -10.764281272888184\n      ],\n      [\n        \"▁彩\",\n        -10.764312744140625\n      ],\n      [\n        \"▁かわいい\",\n        -10.764335632324219\n      ],\n      [\n        \"▁渡り\",\n        -10.764396667480469\n      ],\n      [\n        \"▁短期\",\n        -10.764512062072754\n      ],\n      [\n        \"▁見学\",\n        -10.764540672302246\n      ],\n      [\n        \"▁混乱\",\n        -10.765107154846191\n      ],\n      [\n        \"貴\",\n        -10.765271186828613\n      ],\n      [\n        \"▁ホー\",\n        -10.765302658081055\n      ],\n      [\n        \"▁ゆう\",\n        -10.765351295471191\n      ],\n      [\n        \"殺\",\n        -10.76539421081543\n      ],\n      [\n        \"▁1986\",\n        -10.765628814697266\n      ],\n      [\n        \"▁殺人\",\n        -10.766005516052246\n      ],\n      [\n        \"▁ゲ\",\n        -10.766084671020508\n      ],\n      [\n        \"▁モーター\",\n        -10.766255378723145\n      ],\n      [\n        \"グラ\",\n        -10.766271591186523\n      ],\n      [\n        \"▁be\",\n        -10.766335487365723\n      ],\n      [\n        \"▁ニーズ\",\n        -10.766633033752441\n      ],\n      [\n        \"ッと\",\n        -10.766645431518555\n      ],\n      [\n        \"ite\",\n        -10.766961097717285\n      ],\n      [\n        \"▁糸\",\n        -10.76739501953125\n      ],\n      [\n        \"鉄\",\n        -10.767674446105957\n      ],\n      [\n        \"▁ジョージ\",\n        -10.767728805541992\n      ],\n      [\n        \"▁入院\",\n        -10.767756462097168\n      ],\n      [\n        \"▁郷\",\n        -10.767904281616211\n      ],\n      [\n        \"▁地帯\",\n        -10.767909049987793\n      ],\n      [\n        \"ロス\",\n        -10.768365859985352\n      ],\n      [\n        \"▁カラ\",\n        -10.768441200256348\n      ],\n      [\n        \"▁中部\",\n        -10.768596649169922\n      ],\n      [\n        \"▁保守\",\n        -10.768852233886719\n      ],\n      [\n        \"▁エス\",\n        -10.7688570022583\n      ],\n      [\n        \"▁断\",\n        -10.768927574157715\n      ],\n      [\n        \"転\",\n        -10.769081115722656\n      ],\n      [\n        \"納\",\n        -10.769204139709473\n      ],\n      [\n        \"▁ジャンプ\",\n        -10.769572257995605\n      ],\n      [\n        \"▁続いた\",\n        -10.769584655761719\n      ],\n      [\n        \"▁抜き\",\n        -10.769721031188965\n      ],\n      [\n        \"▁電源\",\n        -10.769990921020508\n      ],\n      [\n        \"▁いろんな\",\n        -10.77013874053955\n      ],\n      [\n        \"▁再現\",\n        -10.770313262939453\n      ],\n      [\n        \"▁ユー\",\n        -10.770479202270508\n      ],\n      [\n        \"▁本日\",\n        -10.770576477050781\n      ],\n      [\n        \"▁既存\",\n        -10.770631790161133\n      ],\n      [\n        \"▁張\",\n        -10.770856857299805\n      ],\n      [\n        \"▁組み合わせ\",\n        -10.771065711975098\n      ],\n      [\n        \"▁台風\",\n        -10.771232604980469\n      ],\n      [\n        \"▁WEB\",\n        -10.77126693725586\n      ],\n      [\n        \"▁ライダー\",\n        -10.771324157714844\n      ],\n      [\n        \"▁受\",\n        -10.771442413330078\n      ],\n      [\n        \"▁どういう\",\n        -10.772174835205078\n      ],\n      [\n        \"クル\",\n        -10.772211074829102\n      ],\n      [\n        \"▁乗\",\n        -10.772485733032227\n      ],\n      [\n        \"▁あたって\",\n        -10.773011207580566\n      ],\n      [\n        \"▁戻り\",\n        -10.773011207580566\n      ],\n      [\n        \"▁定める\",\n        -10.773107528686523\n      ],\n      [\n        \"▁順位\",\n        -10.77316665649414\n      ],\n      [\n        \"▁Cookie\",\n        -10.773225784301758\n      ],\n      [\n        \"▁800\",\n        -10.773232460021973\n      ],\n      [\n        \"▁態度\",\n        -10.773699760437012\n      ],\n      [\n        \"▁集め\",\n        -10.774336814880371\n      ],\n      [\n        \"席\",\n        -10.774398803710938\n      ],\n      [\n        \"段\",\n        -10.77443790435791\n      ],\n      [\n        \"▁予備\",\n        -10.774590492248535\n      ],\n      [\n        \"▁確率\",\n        -10.774798393249512\n      ],\n      [\n        \"▁能\",\n        -10.775267601013184\n      ],\n      [\n        \"▁山田\",\n        -10.77576732635498\n      ],\n      [\n        \"放送\",\n        -10.776034355163574\n      ],\n      [\n        \"▁涙\",\n        -10.776413917541504\n      ],\n      [\n        \"最終\",\n        -10.776598930358887\n      ],\n      [\n        \"洲\",\n        -10.776683807373047\n      ],\n      [\n        \"th\",\n        -10.776817321777344\n      ],\n      [\n        \"▁議長\",\n        -10.776972770690918\n      ],\n      [\n        \"▁融合\",\n        -10.776988983154297\n      ],\n      [\n        \"画\",\n        -10.777125358581543\n      ],\n      [\n        \"ゲン\",\n        -10.777262687683105\n      ],\n      [\n        \"▁すごい\",\n        -10.777837753295898\n      ],\n      [\n        \"▁ハワイ\",\n        -10.777915000915527\n      ],\n      [\n        \"ジョン\",\n        -10.778180122375488\n      ],\n      [\n        \"▁なに\",\n        -10.778225898742676\n      ],\n      [\n        \"ニック\",\n        -10.778369903564453\n      ],\n      [\n        \"▁示さ\",\n        -10.778698921203613\n      ],\n      [\n        \"▁62\",\n        -10.778779983520508\n      ],\n      [\n        \"▁なったり\",\n        -10.778813362121582\n      ],\n      [\n        \"▁魔\",\n        -10.779280662536621\n      ],\n      [\n        \"▁軒\",\n        -10.779706954956055\n      ],\n      [\n        \"▁小さく\",\n        -10.779977798461914\n      ],\n      [\n        \"▁児\",\n        -10.780074119567871\n      ],\n      [\n        \"▁仮想\",\n        -10.780279159545898\n      ],\n      [\n        \"▁柳\",\n        -10.780560493469238\n      ],\n      [\n        \"▁語る\",\n        -10.78058910369873\n      ],\n      [\n        \"▁債務\",\n        -10.780740737915039\n      ],\n      [\n        \"秋\",\n        -10.781007766723633\n      ],\n      [\n        \"▁デモ\",\n        -10.781322479248047\n      ],\n      [\n        \"乱\",\n        -10.781332969665527\n      ],\n      [\n        \"射\",\n        -10.781527519226074\n      ],\n      [\n        \"▁できれば\",\n        -10.7816743850708\n      ],\n      [\n        \"▁99\",\n        -10.781684875488281\n      ],\n      [\n        \"33\",\n        -10.78190803527832\n      ],\n      [\n        \"池\",\n        -10.781915664672852\n      ],\n      [\n        \"▁つもり\",\n        -10.782047271728516\n      ],\n      [\n        \"▁ピン\",\n        -10.782574653625488\n      ],\n      [\n        \"▁足り\",\n        -10.782734870910645\n      ],\n      [\n        \"昨日\",\n        -10.782748222351074\n      ],\n      [\n        \"▁流れる\",\n        -10.782894134521484\n      ],\n      [\n        \"▁比べ\",\n        -10.783468246459961\n      ],\n      [\n        \"▁およそ\",\n        -10.783714294433594\n      ],\n      [\n        \"▁そば\",\n        -10.783796310424805\n      ],\n      [\n        \"▁決めて\",\n        -10.783953666687012\n      ],\n      [\n        \"▁消滅\",\n        -10.784235954284668\n      ],\n      [\n        \"◆\",\n        -10.784285545349121\n      ],\n      [\n        \"▁頂いて\",\n        -10.784480094909668\n      ],\n      [\n        \"▁象徴\",\n        -10.7844877243042\n      ],\n      [\n        \"▁気温\",\n        -10.785170555114746\n      ],\n      [\n        \"▁向けた\",\n        -10.785361289978027\n      ],\n      [\n        \"▁構想\",\n        -10.785455703735352\n      ],\n      [\n        \"▁Sh\",\n        -10.785621643066406\n      ],\n      [\n        \"ell\",\n        -10.785684585571289\n      ],\n      [\n        \"▁全身\",\n        -10.785768508911133\n      ],\n      [\n        \"▁訴訟\",\n        -10.786338806152344\n      ],\n      [\n        \"▁ゼ\",\n        -10.78702449798584\n      ],\n      [\n        \"ES\",\n        -10.787266731262207\n      ],\n      [\n        \"MA\",\n        -10.787331581115723\n      ],\n      [\n        \"▁赤ちゃん\",\n        -10.787924766540527\n      ],\n      [\n        \"09\",\n        -10.787935256958008\n      ],\n      [\n        \"▁描き\",\n        -10.78796672821045\n      ],\n      [\n        \"▁単に\",\n        -10.788228988647461\n      ],\n      [\n        \"▁Co\",\n        -10.788381576538086\n      ],\n      [\n        \"▁平日\",\n        -10.788817405700684\n      ],\n      [\n        \"▁◆\",\n        -10.78945541381836\n      ],\n      [\n        \"▁泊\",\n        -10.789634704589844\n      ],\n      [\n        \"栄\",\n        -10.789788246154785\n      ],\n      [\n        \"▁生息\",\n        -10.789949417114258\n      ],\n      [\n        \"▁荒\",\n        -10.790071487426758\n      ],\n      [\n        \"▁所得\",\n        -10.790139198303223\n      ],\n      [\n        \"▁絵画\",\n        -10.79031753540039\n      ],\n      [\n        \"▁観客\",\n        -10.791157722473145\n      ],\n      [\n        \"▁避難\",\n        -10.791314125061035\n      ],\n      [\n        \"IT\",\n        -10.791377067565918\n      ],\n      [\n        \"▁けん\",\n        -10.79145622253418\n      ],\n      [\n        \"ソー\",\n        -10.791916847229004\n      ],\n      [\n        \"▁子育て\",\n        -10.792500495910645\n      ],\n      [\n        \"45\",\n        -10.792696952819824\n      ],\n      [\n        \"▁アニメーション\",\n        -10.792831420898438\n      ],\n      [\n        \"▁推奨\",\n        -10.793065071105957\n      ],\n      [\n        \"▁共演\",\n        -10.793068885803223\n      ],\n      [\n        \"最\",\n        -10.793084144592285\n      ],\n      [\n        \"▁区分\",\n        -10.793282508850098\n      ],\n      [\n        \"乗\",\n        -10.793521881103516\n      ],\n      [\n        \"▁つながる\",\n        -10.793953895568848\n      ],\n      [\n        \"▁忘れて\",\n        -10.794164657592773\n      ],\n      [\n        \"ペン\",\n        -10.794352531433105\n      ],\n      [\n        \"▁教材\",\n        -10.794719696044922\n      ],\n      [\n        \"▁高橋\",\n        -10.794736862182617\n      ],\n      [\n        \"▁複合\",\n        -10.794821739196777\n      ],\n      [\n        \"▁酵素\",\n        -10.794978141784668\n      ],\n      [\n        \"▁終\",\n        -10.795196533203125\n      ],\n      [\n        \"たとえば\",\n        -10.795251846313477\n      ],\n      [\n        \"▁楽し\",\n        -10.795260429382324\n      ],\n      [\n        \"▁実質\",\n        -10.795528411865234\n      ],\n      [\n        \"▁姉\",\n        -10.795628547668457\n      ],\n      [\n        \"▁コーデ\",\n        -10.795669555664062\n      ],\n      [\n        \"▁復習\",\n        -10.795804023742676\n      ],\n      [\n        \"▁改\",\n        -10.796074867248535\n      ],\n      [\n        \"▁デー\",\n        -10.796234130859375\n      ],\n      [\n        \"▁離れて\",\n        -10.796577453613281\n      ],\n      [\n        \"▁format\",\n        -10.797419548034668\n      ],\n      [\n        \"▁必須\",\n        -10.797565460205078\n      ],\n      [\n        \"ul\",\n        -10.797577857971191\n      ],\n      [\n        \"▁接触\",\n        -10.798535346984863\n      ],\n      [\n        \"回\",\n        -10.798542976379395\n      ],\n      [\n        \"▁ハンド\",\n        -10.799071311950684\n      ],\n      [\n        \"age\",\n        -10.799214363098145\n      ],\n      [\n        \"▁アレンジ\",\n        -10.79926586151123\n      ],\n      [\n        \"▁色々な\",\n        -10.799321174621582\n      ],\n      [\n        \"▁気候\",\n        -10.799463272094727\n      ],\n      [\n        \"32\",\n        -10.799541473388672\n      ],\n      [\n        \"▁ns\",\n        -10.799635887145996\n      ],\n      [\n        \"領\",\n        -10.799646377563477\n      ],\n      [\n        \"ッカ\",\n        -10.799870491027832\n      ],\n      [\n        \"▁亀\",\n        -10.800045013427734\n      ],\n      [\n        \"渡\",\n        -10.800149917602539\n      ],\n      [\n        \"▁ポール\",\n        -10.800448417663574\n      ],\n      [\n        \"▁週刊\",\n        -10.800708770751953\n      ],\n      [\n        \"▁多少\",\n        -10.80080795288086\n      ],\n      [\n        \"▁確実に\",\n        -10.8008394241333\n      ],\n      [\n        \"▁扉\",\n        -10.801047325134277\n      ],\n      [\n        \"▁年代\",\n        -10.801304817199707\n      ],\n      [\n        \"▁連隊\",\n        -10.801334381103516\n      ],\n      [\n        \"ive\",\n        -10.801403045654297\n      ],\n      [\n        \"▁ジュ\",\n        -10.80143928527832\n      ],\n      [\n        \"▁仮\",\n        -10.801597595214844\n      ],\n      [\n        \"OL\",\n        -10.801645278930664\n      ],\n      [\n        \"▁コイン\",\n        -10.801656723022461\n      ],\n      [\n        \"▁四国\",\n        -10.801823616027832\n      ],\n      [\n        \"▁後述\",\n        -10.801856994628906\n      ],\n      [\n        \"ッタ\",\n        -10.802078247070312\n      ],\n      [\n        \"▁鍵\",\n        -10.802079200744629\n      ],\n      [\n        \"▁旅客\",\n        -10.802305221557617\n      ],\n      [\n        \"36\",\n        -10.802318572998047\n      ],\n      [\n        \"TA\",\n        -10.802324295043945\n      ],\n      [\n        \"▁長年\",\n        -10.802534103393555\n      ],\n      [\n        \"絵\",\n        -10.80262565612793\n      ],\n      [\n        \"▁出席\",\n        -10.802642822265625\n      ],\n      [\n        \"▁ついに\",\n        -10.802724838256836\n      ],\n      [\n        \"▁歩いて\",\n        -10.802931785583496\n      ],\n      [\n        \"▁庭\",\n        -10.80301284790039\n      ],\n      [\n        \"▁分かって\",\n        -10.803607940673828\n      ],\n      [\n        \"▁白い\",\n        -10.804028511047363\n      ],\n      [\n        \"▁通称\",\n        -10.804475784301758\n      ],\n      [\n        \"髪\",\n        -10.804618835449219\n      ],\n      [\n        \"▁幕\",\n        -10.805013656616211\n      ],\n      [\n        \"▁行事\",\n        -10.805389404296875\n      ],\n      [\n        \"菜\",\n        -10.80550479888916\n      ],\n      [\n        \"▁格\",\n        -10.805623054504395\n      ],\n      [\n        \"31\",\n        -10.806045532226562\n      ],\n      [\n        \"▁潮\",\n        -10.806175231933594\n      ],\n      [\n        \"シス\",\n        -10.80622673034668\n      ],\n      [\n        \"常\",\n        -10.806344985961914\n      ],\n      [\n        \"▁故障\",\n        -10.806684494018555\n      ],\n      [\n        \"▁今度\",\n        -10.806721687316895\n      ],\n      [\n        \"▁1984\",\n        -10.80689525604248\n      ],\n      [\n        \"選\",\n        -10.806903839111328\n      ],\n      [\n        \"▁クラウド\",\n        -10.806916236877441\n      ],\n      [\n        \"組\",\n        -10.806939125061035\n      ],\n      [\n        \"▁応用\",\n        -10.80711841583252\n      ],\n      [\n        \"▁限界\",\n        -10.807272911071777\n      ],\n      [\n        \"▁走り\",\n        -10.807376861572266\n      ],\n      [\n        \"▁略\",\n        -10.808419227600098\n      ],\n      [\n        \"AN\",\n        -10.808430671691895\n      ],\n      [\n        \"酒\",\n        -10.808655738830566\n      ],\n      [\n        \"▁伊勢\",\n        -10.809086799621582\n      ],\n      [\n        \"▁キリスト教\",\n        -10.809090614318848\n      ],\n      [\n        \"材\",\n        -10.809109687805176\n      ],\n      [\n        \"▁プライバシー\",\n        -10.809134483337402\n      ],\n      [\n        \"▁だったら\",\n        -10.809202194213867\n      ],\n      [\n        \"37\",\n        -10.809682846069336\n      ],\n      [\n        \"▁あげる\",\n        -10.809926986694336\n      ],\n      [\n        \"フォ\",\n        -10.809948921203613\n      ],\n      [\n        \"▁スマート\",\n        -10.810383796691895\n      ],\n      [\n        \"▁散\",\n        -10.810428619384766\n      ],\n      [\n        \"▁簡単な\",\n        -10.810673713684082\n      ],\n      [\n        \"▁ワールドカップ\",\n        -10.811036109924316\n      ],\n      [\n        \"域\",\n        -10.812151908874512\n      ],\n      [\n        \"▁内外\",\n        -10.812254905700684\n      ],\n      [\n        \"im\",\n        -10.8123140335083\n      ],\n      [\n        \"▁丁寧に\",\n        -10.812349319458008\n      ],\n      [\n        \"39\",\n        -10.812593460083008\n      ],\n      [\n        \"▁ルイ\",\n        -10.812726020812988\n      ],\n      [\n        \"ブルク\",\n        -10.813285827636719\n      ],\n      [\n        \"50\",\n        -10.813522338867188\n      ],\n      [\n        \"▁ステ\",\n        -10.813758850097656\n      ],\n      [\n        \"▁セル\",\n        -10.813806533813477\n      ],\n      [\n        \"ヴァー\",\n        -10.81380844116211\n      ],\n      [\n        \"▁売上\",\n        -10.813891410827637\n      ],\n      [\n        \"らい\",\n        -10.814453125\n      ],\n      [\n        \"▁婚\",\n        -10.814495086669922\n      ],\n      [\n        \"上記\",\n        -10.81484603881836\n      ],\n      [\n        \"恵\",\n        -10.814936637878418\n      ],\n      [\n        \"▁呼称\",\n        -10.815424919128418\n      ],\n      [\n        \"▁いくら\",\n        -10.815544128417969\n      ],\n      [\n        \"▁関与\",\n        -10.815553665161133\n      ],\n      [\n        \"▁関節\",\n        -10.81557846069336\n      ],\n      [\n        \"▁ワクチン\",\n        -10.815677642822266\n      ],\n      [\n        \"張\",\n        -10.815704345703125\n      ],\n      [\n        \"▁正式に\",\n        -10.815871238708496\n      ],\n      [\n        \"▁走る\",\n        -10.816620826721191\n      ],\n      [\n        \"フランス\",\n        -10.817098617553711\n      ],\n      [\n        \"▁SC\",\n        -10.817144393920898\n      ],\n      [\n        \"▁数多く\",\n        -10.81795597076416\n      ],\n      [\n        \"▁少なくとも\",\n        -10.818013191223145\n      ],\n      [\n        \"▁寺院\",\n        -10.818359375\n      ],\n      [\n        \"▁進める\",\n        -10.818731307983398\n      ],\n      [\n        \"ce\",\n        -10.818768501281738\n      ],\n      [\n        \"▁古墳\",\n        -10.818899154663086\n      ],\n      [\n        \"▁異常\",\n        -10.819171905517578\n      ],\n      [\n        \"▁個性\",\n        -10.819464683532715\n      ],\n      [\n        \"▁様式\",\n        -10.819546699523926\n      ],\n      [\n        \"▁いや\",\n        -10.819726943969727\n      ],\n      [\n        \"▁誘導\",\n        -10.819780349731445\n      ],\n      [\n        \"▁広がり\",\n        -10.820183753967285\n      ],\n      [\n        \"▁迎える\",\n        -10.820320129394531\n      ],\n      [\n        \"格\",\n        -10.820511817932129\n      ],\n      [\n        \"▁呼吸\",\n        -10.82062816619873\n      ],\n      [\n        \"▁フォン\",\n        -10.82076358795166\n      ],\n      [\n        \"▁侵攻\",\n        -10.821016311645508\n      ],\n      [\n        \"昔\",\n        -10.821340560913086\n      ],\n      [\n        \"首\",\n        -10.821795463562012\n      ],\n      [\n        \"▁買った\",\n        -10.821860313415527\n      ],\n      [\n        \"▁63\",\n        -10.82215690612793\n      ],\n      [\n        \"▁アイルランド\",\n        -10.822314262390137\n      ],\n      [\n        \"▁速報\",\n        -10.822342872619629\n      ],\n      [\n        \"▁演劇\",\n        -10.822437286376953\n      ],\n      [\n        \"指\",\n        -10.822614669799805\n      ],\n      [\n        \"▁ファー\",\n        -10.82287883758545\n      ],\n      [\n        \"▁改修\",\n        -10.82295036315918\n      ],\n      [\n        \"▁ディズニー\",\n        -10.823001861572266\n      ],\n      [\n        \"▁´\",\n        -10.823089599609375\n      ],\n      [\n        \"▁権力\",\n        -10.823220252990723\n      ],\n      [\n        \"▁捨て\",\n        -10.82353687286377\n      ],\n      [\n        \"▁ましたら\",\n        -10.82443904876709\n      ],\n      [\n        \"▁棟\",\n        -10.82447338104248\n      ],\n      [\n        \"ーム\",\n        -10.824545860290527\n      ],\n      [\n        \"速\",\n        -10.824579238891602\n      ],\n      [\n        \"1999\",\n        -10.824584007263184\n      ],\n      [\n        \"智\",\n        -10.824638366699219\n      ],\n      [\n        \"▁照明\",\n        -10.824711799621582\n      ],\n      [\n        \"ラル\",\n        -10.824756622314453\n      ],\n      [\n        \"ビア\",\n        -10.82490062713623\n      ],\n      [\n        \"いずれ\",\n        -10.824922561645508\n      ],\n      [\n        \"▁合同\",\n        -10.825075149536133\n      ],\n      [\n        \"▁こだわり\",\n        -10.825103759765625\n      ],\n      [\n        \"病\",\n        -10.825328826904297\n      ],\n      [\n        \"▁過ごす\",\n        -10.825512886047363\n      ],\n      [\n        \"▁ミッション\",\n        -10.825634956359863\n      ],\n      [\n        \"▁抗\",\n        -10.825634956359863\n      ],\n      [\n        \"▁timestamp\",\n        -10.8259859085083\n      ],\n      [\n        \"▁ST\",\n        -10.826066970825195\n      ],\n      [\n        \"氏\",\n        -10.826300621032715\n      ],\n      [\n        \"▁スイス\",\n        -10.8269681930542\n      ],\n      [\n        \"▁祭り\",\n        -10.82728385925293\n      ],\n      [\n        \"▁contributor\",\n        -10.827411651611328\n      ],\n      [\n        \"▁プラットフォーム\",\n        -10.827425956726074\n      ],\n      [\n        \"▁県道\",\n        -10.827682495117188\n      ],\n      [\n        \"▁みなさん\",\n        -10.827780723571777\n      ],\n      [\n        \"▁低く\",\n        -10.827802658081055\n      ],\n      [\n        \"▁ようやく\",\n        -10.827879905700684\n      ],\n      [\n        \"▁姉妹\",\n        -10.827890396118164\n      ],\n      [\n        \"眼\",\n        -10.82791805267334\n      ],\n      [\n        \"▁問\",\n        -10.827959060668945\n      ],\n      [\n        \"▁け\",\n        -10.827972412109375\n      ],\n      [\n        \"▁リニューアル\",\n        -10.828022003173828\n      ],\n      [\n        \"▁61\",\n        -10.82828426361084\n      ],\n      [\n        \"術\",\n        -10.828350067138672\n      ],\n      [\n        \"▁発射\",\n        -10.82849407196045\n      ],\n      [\n        \"▁多様\",\n        -10.829227447509766\n      ],\n      [\n        \"▁不良\",\n        -10.829276084899902\n      ],\n      [\n        \"かし\",\n        -10.829373359680176\n      ],\n      [\n        \"▁報酬\",\n        -10.82961368560791\n      ],\n      [\n        \"▁根拠\",\n        -10.829750061035156\n      ],\n      [\n        \"▁負傷\",\n        -10.82979965209961\n      ],\n      [\n        \"▁残した\",\n        -10.829998016357422\n      ],\n      [\n        \"de\",\n        -10.83002758026123\n      ],\n      [\n        \"▁起きて\",\n        -10.830275535583496\n      ],\n      [\n        \"▁微\",\n        -10.830387115478516\n      ],\n      [\n        \"▁樹\",\n        -10.830570220947266\n      ],\n      [\n        \"こんな\",\n        -10.83072566986084\n      ],\n      [\n        \"▁しょう\",\n        -10.831138610839844\n      ],\n      [\n        \"ケット\",\n        -10.83121395111084\n      ],\n      [\n        \"▁ベルト\",\n        -10.831340789794922\n      ],\n      [\n        \"房\",\n        -10.831342697143555\n      ],\n      [\n        \"▁附属\",\n        -10.831404685974121\n      ],\n      [\n        \"寄\",\n        -10.831457138061523\n      ],\n      [\n        \"▁ジム\",\n        -10.831823348999023\n      ],\n      [\n        \"▁フジテレビ\",\n        -10.831872940063477\n      ],\n      [\n        \"▁譲渡\",\n        -10.832334518432617\n      ],\n      [\n        \"▁訪れた\",\n        -10.832381248474121\n      ],\n      [\n        \"★\",\n        -10.832632064819336\n      ],\n      [\n        \"▁車体\",\n        -10.83291244506836\n      ],\n      [\n        \"▁キャスト\",\n        -10.833102226257324\n      ],\n      [\n        \"像\",\n        -10.833291053771973\n      ],\n      [\n        \"▁タンパク\",\n        -10.833816528320312\n      ],\n      [\n        \"▁デスク\",\n        -10.834477424621582\n      ],\n      [\n        \"▁潜水\",\n        -10.834766387939453\n      ],\n      [\n        \"▁山本\",\n        -10.835043907165527\n      ],\n      [\n        \"▁ギリシャ\",\n        -10.835229873657227\n      ],\n      [\n        \"▁高度\",\n        -10.8352632522583\n      ],\n      [\n        \"▁超えて\",\n        -10.83571720123291\n      ],\n      [\n        \"▁知った\",\n        -10.835893630981445\n      ],\n      [\n        \"▁AC\",\n        -10.836145401000977\n      ],\n      [\n        \"分の\",\n        -10.836165428161621\n      ],\n      [\n        \"▁挙げた\",\n        -10.836207389831543\n      ],\n      [\n        \"04\",\n        -10.836593627929688\n      ],\n      [\n        \"一郎\",\n        -10.836653709411621\n      ],\n      [\n        \"▁援助\",\n        -10.836833000183105\n      ],\n      [\n        \"▁アイデア\",\n        -10.836995124816895\n      ],\n      [\n        \"▁争い\",\n        -10.83773422241211\n      ],\n      [\n        \"▁境\",\n        -10.837740898132324\n      ],\n      [\n        \"▁稲\",\n        -10.837783813476562\n      ],\n      [\n        \"▁過ぎて\",\n        -10.837991714477539\n      ],\n      [\n        \"▁モー\",\n        -10.838376998901367\n      ],\n      [\n        \"っちゃ\",\n        -10.838418006896973\n      ],\n      [\n        \"イト\",\n        -10.8385009765625\n      ],\n      [\n        \"▁グリ\",\n        -10.838544845581055\n      ],\n      [\n        \"▁テニス\",\n        -10.838590621948242\n      ],\n      [\n        \"▁主要な\",\n        -10.838613510131836\n      ],\n      [\n        \"▁初頭\",\n        -10.83899211883545\n      ],\n      [\n        \"▁中小\",\n        -10.839046478271484\n      ],\n      [\n        \"▁ブラウン\",\n        -10.839176177978516\n      ],\n      [\n        \"ティック\",\n        -10.839239120483398\n      ],\n      [\n        \"▁清水\",\n        -10.839578628540039\n      ],\n      [\n        \"▁敷地\",\n        -10.83966064453125\n      ],\n      [\n        \"▁亜\",\n        -10.839688301086426\n      ],\n      [\n        \"▁SS\",\n        -10.839731216430664\n      ],\n      [\n        \"▁動\",\n        -10.83985424041748\n      ],\n      [\n        \"75\",\n        -10.839998245239258\n      ],\n      [\n        \"▁弟子\",\n        -10.840091705322266\n      ],\n      [\n        \"PS\",\n        -10.840103149414062\n      ],\n      [\n        \"▁開通\",\n        -10.840418815612793\n      ],\n      [\n        \"弘\",\n        -10.840458869934082\n      ],\n      [\n        \"▁祝\",\n        -10.840487480163574\n      ],\n      [\n        \"▁Microsoft\",\n        -10.84054946899414\n      ],\n      [\n        \"▁何の\",\n        -10.840794563293457\n      ],\n      [\n        \"▁翼\",\n        -10.841475486755371\n      ],\n      [\n        \"▁85\",\n        -10.841525077819824\n      ],\n      [\n        \"▁อ\",\n        -10.841776847839355\n      ],\n      [\n        \"▁境界\",\n        -10.841863632202148\n      ],\n      [\n        \"▁実用\",\n        -10.842373847961426\n      ],\n      [\n        \"▁コラボ\",\n        -10.84250545501709\n      ],\n      [\n        \"▁甲\",\n        -10.842508316040039\n      ],\n      [\n        \"▁覆\",\n        -10.84304428100586\n      ],\n      [\n        \"▁回避\",\n        -10.843633651733398\n      ],\n      [\n        \"▁過ごし\",\n        -10.843873023986816\n      ],\n      [\n        \"▁編入\",\n        -10.84416675567627\n      ],\n      [\n        \"▁見つける\",\n        -10.844411849975586\n      ],\n      [\n        \"▁攻め\",\n        -10.844840049743652\n      ],\n      [\n        \"AT\",\n        -10.844941139221191\n      ],\n      [\n        \"▁静\",\n        -10.84505558013916\n      ],\n      [\n        \"布\",\n        -10.845056533813477\n      ],\n      [\n        \"スキー\",\n        -10.845314025878906\n      ],\n      [\n        \"▁プロデュース\",\n        -10.845340728759766\n      ],\n      [\n        \"▁クーポン\",\n        -10.845351219177246\n      ],\n      [\n        \"man\",\n        -10.845845222473145\n      ],\n      [\n        \"▁井\",\n        -10.846060752868652\n      ],\n      [\n        \"肉\",\n        -10.846098899841309\n      ],\n      [\n        \"▁ポケット\",\n        -10.846453666687012\n      ],\n      [\n        \"▁皮\",\n        -10.846659660339355\n      ],\n      [\n        \"族\",\n        -10.84666633605957\n      ],\n      [\n        \"▁コア\",\n        -10.847102165222168\n      ],\n      [\n        \"▁アメリカン\",\n        -10.847430229187012\n      ],\n      [\n        \"ーナ\",\n        -10.847577095031738\n      ],\n      [\n        \"▁らしく\",\n        -10.848380088806152\n      ],\n      [\n        \"▁役所\",\n        -10.848381042480469\n      ],\n      [\n        \"▁クリーニング\",\n        -10.848527908325195\n      ],\n      [\n        \"se\",\n        -10.848825454711914\n      ],\n      [\n        \"▁充電\",\n        -10.849115371704102\n      ],\n      [\n        \"1980\",\n        -10.849135398864746\n      ],\n      [\n        \"雨\",\n        -10.849185943603516\n      ],\n      [\n        \"ne\",\n        -10.849625587463379\n      ],\n      [\n        \"▁わたり\",\n        -10.84998607635498\n      ],\n      [\n        \"▁令\",\n        -10.850235939025879\n      ],\n      [\n        \"▁津\",\n        -10.850942611694336\n      ],\n      [\n        \"▁一環\",\n        -10.85106086730957\n      ],\n      [\n        \"▁佐\",\n        -10.851221084594727\n      ],\n      [\n        \"▁借り\",\n        -10.85136890411377\n      ],\n      [\n        \"▁兵士\",\n        -10.851425170898438\n      ],\n      [\n        \"▁リード\",\n        -10.851663589477539\n      ],\n      [\n        \"▁融資\",\n        -10.851808547973633\n      ],\n      [\n        \"▁荷物\",\n        -10.852049827575684\n      ],\n      [\n        \"▁人形\",\n        -10.852344512939453\n      ],\n      [\n        \"▁――\",\n        -10.852381706237793\n      ],\n      [\n        \"▁見解\",\n        -10.852519035339355\n      ],\n      [\n        \"皮\",\n        -10.852618217468262\n      ],\n      [\n        \"▁Me\",\n        -10.852788925170898\n      ],\n      [\n        \"細\",\n        -10.852855682373047\n      ],\n      [\n        \"ボー\",\n        -10.852913856506348\n      ],\n      [\n        \"▁フォー\",\n        -10.853102684020996\n      ],\n      [\n        \"クリ\",\n        -10.853184700012207\n      ],\n      [\n        \"▁興\",\n        -10.8533296585083\n      ],\n      [\n        \"▁ステップ\",\n        -10.85336685180664\n      ],\n      [\n        \"仕事\",\n        -10.854116439819336\n      ],\n      [\n        \"▁政党\",\n        -10.85440731048584\n      ],\n      [\n        \"若\",\n        -10.854902267456055\n      ],\n      [\n        \"▁おそらく\",\n        -10.855191230773926\n      ],\n      [\n        \"▁ミサイル\",\n        -10.855195999145508\n      ],\n      [\n        \"▁東洋\",\n        -10.85539436340332\n      ],\n      [\n        \"マス\",\n        -10.855630874633789\n      ],\n      [\n        \"たい\",\n        -10.855684280395508\n      ],\n      [\n        \"▁飯\",\n        -10.855759620666504\n      ],\n      [\n        \"▁漢字\",\n        -10.855849266052246\n      ],\n      [\n        \"77\",\n        -10.856367111206055\n      ],\n      [\n        \"▁つながり\",\n        -10.856627464294434\n      ],\n      [\n        \"▁全然\",\n        -10.856639862060547\n      ],\n      [\n        \"46\",\n        -10.857027053833008\n      ],\n      [\n        \"▁もっとも\",\n        -10.857086181640625\n      ],\n      [\n        \"88\",\n        -10.857219696044922\n      ],\n      [\n        \"▁むしろ\",\n        -10.857489585876465\n      ],\n      [\n        \"▁傘下\",\n        -10.85755443572998\n      ],\n      [\n        \"▁並んで\",\n        -10.857870101928711\n      ],\n      [\n        \"ワーク\",\n        -10.85792350769043\n      ],\n      [\n        \"▁ポジション\",\n        -10.857933044433594\n      ],\n      [\n        \"▁まさに\",\n        -10.858161926269531\n      ],\n      [\n        \"▁ヴェ\",\n        -10.858308792114258\n      ],\n      [\n        \"▁サイン\",\n        -10.85855770111084\n      ],\n      [\n        \"▁売る\",\n        -10.85859203338623\n      ],\n      [\n        \"英\",\n        -10.858636856079102\n      ],\n      [\n        \"▁便利な\",\n        -10.859158515930176\n      ],\n      [\n        \"34\",\n        -10.859264373779297\n      ],\n      [\n        \"▁定着\",\n        -10.859280586242676\n      ],\n      [\n        \"落\",\n        -10.859404563903809\n      ],\n      [\n        \"壁\",\n        -10.859678268432617\n      ],\n      [\n        \"▁ブレーキ\",\n        -10.859721183776855\n      ],\n      [\n        \"▁紀\",\n        -10.860040664672852\n      ],\n      [\n        \"パス\",\n        -10.860044479370117\n      ],\n      [\n        \"▁立って\",\n        -10.860254287719727\n      ],\n      [\n        \"トレ\",\n        -10.8602933883667\n      ],\n      [\n        \"▁薄\",\n        -10.860366821289062\n      ],\n      [\n        \"▁Mac\",\n        -10.860715866088867\n      ],\n      [\n        \"▁生涯\",\n        -10.860946655273438\n      ],\n      [\n        \"ak\",\n        -10.861135482788086\n      ],\n      [\n        \"▁仏教\",\n        -10.861235618591309\n      ],\n      [\n        \"▁スタッドレス\",\n        -10.861878395080566\n      ],\n      [\n        \"▁パラ\",\n        -10.861987113952637\n      ],\n      [\n        \"▁局長\",\n        -10.862184524536133\n      ],\n      [\n        \"▁マンガ\",\n        -10.862237930297852\n      ],\n      [\n        \"▁消防\",\n        -10.862260818481445\n      ],\n      [\n        \"TV\",\n        -10.86234188079834\n      ],\n      [\n        \"▁衝突\",\n        -10.862611770629883\n      ],\n      [\n        \"▁王者\",\n        -10.862715721130371\n      ],\n      [\n        \"▁トゥ\",\n        -10.86280632019043\n      ],\n      [\n        \"京都\",\n        -10.863123893737793\n      ],\n      [\n        \"86\",\n        -10.863222122192383\n      ],\n      [\n        \"▁生じた\",\n        -10.863591194152832\n      ],\n      [\n        \"▁カタログ\",\n        -10.863673210144043\n      ],\n      [\n        \"弟\",\n        -10.863836288452148\n      ],\n      [\n        \"▁お前\",\n        -10.863978385925293\n      ],\n      [\n        \"▁おお\",\n        -10.864136695861816\n      ],\n      [\n        \"GA\",\n        -10.864545822143555\n      ],\n      [\n        \"▁数値\",\n        -10.864629745483398\n      ],\n      [\n        \"▁飲む\",\n        -10.864645004272461\n      ],\n      [\n        \"▁洗濯\",\n        -10.864734649658203\n      ],\n      [\n        \"▁支部\",\n        -10.864771842956543\n      ],\n      [\n        \"▁ハメ\",\n        -10.86489486694336\n      ],\n      [\n        \"▁パスワード\",\n        -10.86491870880127\n      ],\n      [\n        \"▁循環\",\n        -10.865015029907227\n      ],\n      [\n        \"ノン\",\n        -10.865175247192383\n      ],\n      [\n        \"▁ne\",\n        -10.865182876586914\n      ],\n      [\n        \"▁南西\",\n        -10.865326881408691\n      ],\n      [\n        \"ベン\",\n        -10.865435600280762\n      ],\n      [\n        \"▁離\",\n        -10.865676879882812\n      ],\n      [\n        \"江戸\",\n        -10.865726470947266\n      ],\n      [\n        \"嶋\",\n        -10.865971565246582\n      ],\n      [\n        \"ぬ\",\n        -10.866026878356934\n      ],\n      [\n        \"▁タブレット\",\n        -10.866848945617676\n      ],\n      [\n        \"▁失わ\",\n        -10.866933822631836\n      ],\n      [\n        \"▁河川\",\n        -10.866994857788086\n      ],\n      [\n        \"▁再建\",\n        -10.867133140563965\n      ],\n      [\n        \"▁灯\",\n        -10.867159843444824\n      ],\n      [\n        \"▁茂\",\n        -10.867197036743164\n      ],\n      [\n        \"US\",\n        -10.86724853515625\n      ],\n      [\n        \"ment\",\n        -10.867571830749512\n      ],\n      [\n        \"▁メモ\",\n        -10.867574691772461\n      ],\n      [\n        \"▁フィリピン\",\n        -10.867624282836914\n      ],\n      [\n        \"▁試み\",\n        -10.867773056030273\n      ],\n      [\n        \"▁特許\",\n        -10.867806434631348\n      ],\n      [\n        \"持\",\n        -10.867871284484863\n      ],\n      [\n        \"▁1983\",\n        -10.867951393127441\n      ],\n      [\n        \"▁変わった\",\n        -10.868167877197266\n      ],\n      [\n        \"プレ\",\n        -10.868319511413574\n      ],\n      [\n        \"▁苦\",\n        -10.868467330932617\n      ],\n      [\n        \"歯\",\n        -10.868522644042969\n      ],\n      [\n        \"▁追\",\n        -10.868903160095215\n      ],\n      [\n        \"ub\",\n        -10.869268417358398\n      ],\n      [\n        \"▁陽\",\n        -10.869527816772461\n      ],\n      [\n        \"▁かけた\",\n        -10.86963176727295\n      ],\n      [\n        \"ーラ\",\n        -10.869709014892578\n      ],\n      [\n        \"▁スケジュール\",\n        -10.869715690612793\n      ],\n      [\n        \"▁急行\",\n        -10.8699312210083\n      ],\n      [\n        \"サイト\",\n        -10.870037078857422\n      ],\n      [\n        \"▁防災\",\n        -10.870318412780762\n      ],\n      [\n        \"▁含めた\",\n        -10.870340347290039\n      ],\n      [\n        \"▁演技\",\n        -10.870437622070312\n      ],\n      [\n        \"こんにちは\",\n        -10.870513916015625\n      ],\n      [\n        \"▁半年\",\n        -10.870737075805664\n      ],\n      [\n        \"48\",\n        -10.870755195617676\n      ],\n      [\n        \"リスト\",\n        -10.870811462402344\n      ],\n      [\n        \"▁驚き\",\n        -10.870872497558594\n      ],\n      [\n        \"ID\",\n        -10.87134838104248\n      ],\n      [\n        \"▁起こった\",\n        -10.871546745300293\n      ],\n      [\n        \"▁抑え\",\n        -10.871564865112305\n      ],\n      [\n        \"エイ\",\n        -10.871740341186523\n      ],\n      [\n        \"78\",\n        -10.872169494628906\n      ],\n      [\n        \"▁手伝い\",\n        -10.872354507446289\n      ],\n      [\n        \"▁ラテン\",\n        -10.872464179992676\n      ],\n      [\n        \"宿\",\n        -10.872557640075684\n      ],\n      [\n        \"▁由\",\n        -10.872576713562012\n      ],\n      [\n        \"▁年金\",\n        -10.872879028320312\n      ],\n      [\n        \"▁ジャック\",\n        -10.872980117797852\n      ],\n      [\n        \"▁手順\",\n        -10.872981071472168\n      ],\n      [\n        \"▁合って\",\n        -10.873331069946289\n      ],\n      [\n        \"▁国境\",\n        -10.873489379882812\n      ],\n      [\n        \"跡\",\n        -10.873665809631348\n      ],\n      [\n        \"主に\",\n        -10.874089241027832\n      ],\n      [\n        \"▁プロレス\",\n        -10.874284744262695\n      ],\n      [\n        \"▁まだまだ\",\n        -10.874490737915039\n      ],\n      [\n        \"先日\",\n        -10.874627113342285\n      ],\n      [\n        \"▁あら\",\n        -10.874648094177246\n      ],\n      [\n        \"▁グランド\",\n        -10.874650955200195\n      ],\n      [\n        \"護\",\n        -10.875105857849121\n      ],\n      [\n        \"▁冒険\",\n        -10.875123977661133\n      ],\n      [\n        \"▁楽しみに\",\n        -10.87546443939209\n      ],\n      [\n        \"▁終わって\",\n        -10.87546443939209\n      ],\n      [\n        \"▁喜び\",\n        -10.876097679138184\n      ],\n      [\n        \"▁向き\",\n        -10.876437187194824\n      ],\n      [\n        \"▁なれ\",\n        -10.876448631286621\n      ],\n      [\n        \"▁堀\",\n        -10.87702751159668\n      ],\n      [\n        \"▁孝\",\n        -10.877420425415039\n      ],\n      [\n        \"矢\",\n        -10.877500534057617\n      ],\n      [\n        \"▁1950\",\n        -10.877579689025879\n      ],\n      [\n        \"65\",\n        -10.877811431884766\n      ],\n      [\n        \"全国\",\n        -10.877900123596191\n      ],\n      [\n        \"▁んでしょう\",\n        -10.877958297729492\n      ],\n      [\n        \"▁伯\",\n        -10.878124237060547\n      ],\n      [\n        \"チュ\",\n        -10.878190040588379\n      ],\n      [\n        \"▁つけた\",\n        -10.878490447998047\n      ],\n      [\n        \"変\",\n        -10.878697395324707\n      ],\n      [\n        \"▁ストリート\",\n        -10.878839492797852\n      ],\n      [\n        \"▁マガジン\",\n        -10.878912925720215\n      ],\n      [\n        \"▁テープ\",\n        -10.878924369812012\n      ],\n      [\n        \"無料\",\n        -10.879100799560547\n      ],\n      [\n        \"▁アラ\",\n        -10.879172325134277\n      ],\n      [\n        \"▁来店\",\n        -10.879179000854492\n      ],\n      [\n        \"our\",\n        -10.879197120666504\n      ],\n      [\n        \"将\",\n        -10.879258155822754\n      ],\n      [\n        \"▁簡単\",\n        -10.879963874816895\n      ],\n      [\n        \"▁生地\",\n        -10.88005542755127\n      ],\n      [\n        \"▁まち\",\n        -10.880130767822266\n      ],\n      [\n        \"▁渡\",\n        -10.880749702453613\n      ],\n      [\n        \"▁72\",\n        -10.880783081054688\n      ],\n      [\n        \"代表\",\n        -10.880885124206543\n      ],\n      [\n        \"▁テレ\",\n        -10.881006240844727\n      ],\n      [\n        \"▁噂\",\n        -10.881402015686035\n      ],\n      [\n        \"▁ペース\",\n        -10.881463050842285\n      ],\n      [\n        \"酸\",\n        -10.88162899017334\n      ],\n      [\n        \"▁海上\",\n        -10.8817138671875\n      ],\n      [\n        \"05\",\n        -10.882214546203613\n      ],\n      [\n        \"▁東西\",\n        -10.882291793823242\n      ],\n      [\n        \"▁不要\",\n        -10.882367134094238\n      ],\n      [\n        \"▁エアコン\",\n        -10.882379531860352\n      ],\n      [\n        \"ウィ\",\n        -10.883003234863281\n      ],\n      [\n        \"▁藩主\",\n        -10.883223533630371\n      ],\n      [\n        \"▁実装\",\n        -10.883233070373535\n      ],\n      [\n        \"▁ビュー\",\n        -10.883420944213867\n      ],\n      [\n        \"▁決意\",\n        -10.883529663085938\n      ],\n      [\n        \"▁数々\",\n        -10.883766174316406\n      ],\n      [\n        \"▁修了\",\n        -10.883804321289062\n      ],\n      [\n        \"▁思え\",\n        -10.88386344909668\n      ],\n      [\n        \"84\",\n        -10.884475708007812\n      ],\n      [\n        \"艦\",\n        -10.88483715057373\n      ],\n      [\n        \"▁息\",\n        -10.88503360748291\n      ],\n      [\n        \"▁スキン\",\n        -10.885136604309082\n      ],\n      [\n        \"▁類似\",\n        -10.885190963745117\n      ],\n      [\n        \"▁挿入\",\n        -10.885714530944824\n      ],\n      [\n        \"▁しろ\",\n        -10.885893821716309\n      ],\n      [\n        \"▁描いて\",\n        -10.8865966796875\n      ],\n      [\n        \"▁ウクライナ\",\n        -10.886982917785645\n      ],\n      [\n        \"up\",\n        -10.887101173400879\n      ],\n      [\n        \"本日\",\n        -10.887109756469727\n      ],\n      [\n        \"▁180\",\n        -10.887373924255371\n      ],\n      [\n        \"▁鶴\",\n        -10.887730598449707\n      ],\n      [\n        \"▁`\",\n        -10.88797378540039\n      ],\n      [\n        \"▁クレ\",\n        -10.888189315795898\n      ],\n      [\n        \"▁伊勢丹\",\n        -10.888215065002441\n      ],\n      [\n        \"甲\",\n        -10.888479232788086\n      ],\n      [\n        \"▁1982\",\n        -10.888660430908203\n      ],\n      [\n        \"▁PR\",\n        -10.888731002807617\n      ],\n      [\n        \"▁折\",\n        -10.88880729675293\n      ],\n      [\n        \"▁開く\",\n        -10.888947486877441\n      ],\n      [\n        \"▁デメリット\",\n        -10.889228820800781\n      ],\n      [\n        \"給\",\n        -10.889327049255371\n      ],\n      [\n        \"▁言及\",\n        -10.889598846435547\n      ],\n      [\n        \"素\",\n        -10.88985538482666\n      ],\n      [\n        \"▁開示\",\n        -10.89022159576416\n      ],\n      [\n        \"▁高める\",\n        -10.890497207641602\n      ],\n      [\n        \"犬\",\n        -10.890711784362793\n      ],\n      [\n        \"▁北西\",\n        -10.890727043151855\n      ],\n      [\n        \"▁ウィリアム\",\n        -10.890804290771484\n      ],\n      [\n        \"片\",\n        -10.890810012817383\n      ],\n      [\n        \"▁95\",\n        -10.890863418579102\n      ],\n      [\n        \"▁チェ\",\n        -10.89088249206543\n      ],\n      [\n        \"イギリス\",\n        -10.89088249206543\n      ],\n      [\n        \"▁呼んで\",\n        -10.89091968536377\n      ],\n      [\n        \"▁3000\",\n        -10.89104175567627\n      ],\n      [\n        \"▁半ば\",\n        -10.891271591186523\n      ],\n      [\n        \"そういう\",\n        -10.891427040100098\n      ],\n      [\n        \"▁タッチ\",\n        -10.891545295715332\n      ],\n      [\n        \"▁准教授\",\n        -10.892192840576172\n      ],\n      [\n        \"06\",\n        -10.89240837097168\n      ],\n      [\n        \"▁大賞\",\n        -10.892534255981445\n      ],\n      [\n        \"64\",\n        -10.892694473266602\n      ],\n      [\n        \"▁よし\",\n        -10.892744064331055\n      ],\n      [\n        \"▁プレス\",\n        -10.893136024475098\n      ],\n      [\n        \"▁させて\",\n        -10.893285751342773\n      ],\n      [\n        \"▁次第に\",\n        -10.893506050109863\n      ],\n      [\n        \"配\",\n        -10.893511772155762\n      ],\n      [\n        \"休\",\n        -10.89358901977539\n      ],\n      [\n        \"▁オーナー\",\n        -10.893610000610352\n      ],\n      [\n        \"▁仕方\",\n        -10.893628120422363\n      ],\n      [\n        \"▁優しい\",\n        -10.893856048583984\n      ],\n      [\n        \"刊\",\n        -10.894163131713867\n      ],\n      [\n        \"▁露\",\n        -10.894722938537598\n      ],\n      [\n        \"▁サーバ\",\n        -10.894787788391113\n      ],\n      [\n        \"▁休日\",\n        -10.8948335647583\n      ],\n      [\n        \"ET\",\n        -10.894859313964844\n      ],\n      [\n        \"▁柱\",\n        -10.894939422607422\n      ],\n      [\n        \"青\",\n        -10.894969940185547\n      ],\n      [\n        \"▁アプローチ\",\n        -10.895113945007324\n      ],\n      [\n        \"▁埋め\",\n        -10.895456314086914\n      ],\n      [\n        \"▁ただし\",\n        -10.895459175109863\n      ],\n      [\n        \"▁スイッチ\",\n        -10.895560264587402\n      ],\n      [\n        \"▁明確に\",\n        -10.895963668823242\n      ],\n      [\n        \"▁個体\",\n        -10.896089553833008\n      ],\n      [\n        \"送ら\",\n        -10.896605491638184\n      ],\n      [\n        \"▁北朝鮮\",\n        -10.896717071533203\n      ],\n      [\n        \"ard\",\n        -10.896926879882812\n      ],\n      [\n        \"やま\",\n        -10.897140502929688\n      ],\n      [\n        \"▁べきだ\",\n        -10.897154808044434\n      ],\n      [\n        \"▁増える\",\n        -10.897178649902344\n      ],\n      [\n        \"▁頂く\",\n        -10.897305488586426\n      ],\n      [\n        \"44\",\n        -10.897472381591797\n      ],\n      [\n        \"▁めの\",\n        -10.8975191116333\n      ],\n      [\n        \"▁レディ\",\n        -10.898299217224121\n      ],\n      [\n        \"より\",\n        -10.89868450164795\n      ],\n      [\n        \"▁バラエティ\",\n        -10.899832725524902\n      ],\n      [\n        \"送\",\n        -10.899897575378418\n      ],\n      [\n        \"▁CR\",\n        -10.900067329406738\n      ],\n      [\n        \"▁若干\",\n        -10.900129318237305\n      ],\n      [\n        \"ビン\",\n        -10.900198936462402\n      ],\n      [\n        \"ケー\",\n        -10.900211334228516\n      ],\n      [\n        \"▁工\",\n        -10.900315284729004\n      ],\n      [\n        \"▁代行\",\n        -10.900318145751953\n      ],\n      [\n        \"▁都道府県\",\n        -10.900429725646973\n      ],\n      [\n        \"▁子会社\",\n        -10.900575637817383\n      ],\n      [\n        \"08\",\n        -10.90064525604248\n      ],\n      [\n        \"▁辞書\",\n        -10.900684356689453\n      ],\n      [\n        \"ai\",\n        -10.900707244873047\n      ],\n      [\n        \"ack\",\n        -10.900890350341797\n      ],\n      [\n        \"▁フラ\",\n        -10.9009428024292\n      ],\n      [\n        \"▁エレ\",\n        -10.900986671447754\n      ],\n      [\n        \"▁本拠\",\n        -10.901037216186523\n      ],\n      [\n        \"▁入荷\",\n        -10.901206970214844\n      ],\n      [\n        \"スティ\",\n        -10.901406288146973\n      ],\n      [\n        \"▁描写\",\n        -10.901653289794922\n      ],\n      [\n        \"▁ジャズ\",\n        -10.90184497833252\n      ],\n      [\n        \"▁帰\",\n        -10.902223587036133\n      ],\n      [\n        \"▁収め\",\n        -10.902702331542969\n      ],\n      [\n        \"フル\",\n        -10.902730941772461\n      ],\n      [\n        \"▁with\",\n        -10.903401374816895\n      ],\n      [\n        \"▁CORE\",\n        -10.903548240661621\n      ],\n      [\n        \"末\",\n        -10.903640747070312\n      ],\n      [\n        \"▁公認\",\n        -10.903825759887695\n      ],\n      [\n        \"▁密\",\n        -10.903865814208984\n      ],\n      [\n        \"全て\",\n        -10.904513359069824\n      ],\n      [\n        \"▁プリント\",\n        -10.904550552368164\n      ],\n      [\n        \"▁遺\",\n        -10.904727935791016\n      ],\n      [\n        \"em\",\n        -10.904818534851074\n      ],\n      [\n        \"▁♡\",\n        -10.904866218566895\n      ],\n      [\n        \"ワー\",\n        -10.905102729797363\n      ],\n      [\n        \"▁ダメージ\",\n        -10.905252456665039\n      ],\n      [\n        \"▁↓\",\n        -10.905340194702148\n      ],\n      [\n        \"▁汗\",\n        -10.90549087524414\n      ],\n      [\n        \"▁役員\",\n        -10.905628204345703\n      ],\n      [\n        \"▁小林\",\n        -10.905649185180664\n      ],\n      [\n        \"07\",\n        -10.90567684173584\n      ],\n      [\n        \"▁Al\",\n        -10.905692100524902\n      ],\n      [\n        \"▁チャンピオン\",\n        -10.90581226348877\n      ],\n      [\n        \"▁上野\",\n        -10.905845642089844\n      ],\n      [\n        \"▁退\",\n        -10.905912399291992\n      ],\n      [\n        \"▁実業\",\n        -10.90629768371582\n      ],\n      [\n        \"オス\",\n        -10.906305313110352\n      ],\n      [\n        \"▁キャンパス\",\n        -10.907663345336914\n      ],\n      [\n        \"▁とにかく\",\n        -10.907880783081055\n      ],\n      [\n        \"▁送\",\n        -10.908178329467773\n      ],\n      [\n        \"▁バトル\",\n        -10.908248901367188\n      ],\n      [\n        \"▁選定\",\n        -10.909293174743652\n      ],\n      [\n        \"▁北京\",\n        -10.909351348876953\n      ],\n      [\n        \"▁大切です\",\n        -10.909360885620117\n      ],\n      [\n        \"▁解体\",\n        -10.909403800964355\n      ],\n      [\n        \"▁次に\",\n        -10.90949535369873\n      ],\n      [\n        \"レーション\",\n        -10.909542083740234\n      ],\n      [\n        \"▁空軍\",\n        -10.90955924987793\n      ],\n      [\n        \"▁IP\",\n        -10.909643173217773\n      ],\n      [\n        \"▁審議\",\n        -10.909833908081055\n      ],\n      [\n        \"▁すなわち\",\n        -10.909945487976074\n      ],\n      [\n        \"69\",\n        -10.910168647766113\n      ],\n      [\n        \"▁現金\",\n        -10.910181045532227\n      ],\n      [\n        \"▁口座\",\n        -10.91080379486084\n      ],\n      [\n        \"▁ドレス\",\n        -10.910920143127441\n      ],\n      [\n        \"出す\",\n        -10.910983085632324\n      ],\n      [\n        \"▁貴重な\",\n        -10.911042213439941\n      ],\n      [\n        \"41\",\n        -10.911160469055176\n      ],\n      [\n        \"▁オーディオ\",\n        -10.911203384399414\n      ],\n      [\n        \"ヴォ\",\n        -10.911407470703125\n      ],\n      [\n        \"▁衣装\",\n        -10.911413192749023\n      ],\n      [\n        \"住\",\n        -10.911454200744629\n      ],\n      [\n        \"延\",\n        -10.911587715148926\n      ],\n      [\n        \"▁飲んで\",\n        -10.91175365447998\n      ],\n      [\n        \"03\",\n        -10.911887168884277\n      ],\n      [\n        \"▁カール\",\n        -10.912046432495117\n      ],\n      [\n        \"▁敗れた\",\n        -10.912087440490723\n      ],\n      [\n        \"出し\",\n        -10.912233352661133\n      ],\n      [\n        \"ส\",\n        -10.912367820739746\n      ],\n      [\n        \"▁マネジメント\",\n        -10.912367820739746\n      ],\n      [\n        \"ma\",\n        -10.91275405883789\n      ],\n      [\n        \"▁停車\",\n        -10.913187026977539\n      ],\n      [\n        \"交通\",\n        -10.913352966308594\n      ],\n      [\n        \"51\",\n        -10.914313316345215\n      ],\n      [\n        \"ou\",\n        -10.914480209350586\n      ],\n      [\n        \"RI\",\n        -10.91466236114502\n      ],\n      [\n        \"▁信じ\",\n        -10.914831161499023\n      ],\n      [\n        \"q\",\n        -10.914958000183105\n      ],\n      [\n        \"▁詰め\",\n        -10.914974212646484\n      ],\n      [\n        \"▁カ月\",\n        -10.915030479431152\n      ],\n      [\n        \"あらすじ\",\n        -10.9150972366333\n      ],\n      [\n        \"▁火災\",\n        -10.915226936340332\n      ],\n      [\n        \"▁び\",\n        -10.915623664855957\n      ],\n      [\n        \"▁職人\",\n        -10.91565990447998\n      ],\n      [\n        \"▁残念\",\n        -10.9159517288208\n      ],\n      [\n        \"▁仕\",\n        -10.916037559509277\n      ],\n      [\n        \"▁ガー\",\n        -10.916135787963867\n      ],\n      [\n        \"砲\",\n        -10.916177749633789\n      ],\n      [\n        \"▁会見\",\n        -10.91646671295166\n      ],\n      [\n        \"庭\",\n        -10.91647720336914\n      ],\n      [\n        \"写真\",\n        -10.917375564575195\n      ],\n      [\n        \"▁無かった\",\n        -10.917677879333496\n      ],\n      [\n        \"姫\",\n        -10.917706489562988\n      ],\n      [\n        \"▁申込\",\n        -10.918342590332031\n      ],\n      [\n        \"▁エジプト\",\n        -10.9187650680542\n      ],\n      [\n        \"53\",\n        -10.918862342834473\n      ],\n      [\n        \"ab\",\n        -10.919367790222168\n      ],\n      [\n        \"おう\",\n        -10.919395446777344\n      ],\n      [\n        \"▁西武\",\n        -10.919438362121582\n      ],\n      [\n        \"▁同期\",\n        -10.91978931427002\n      ],\n      [\n        \"▁悩んで\",\n        -10.919836044311523\n      ],\n      [\n        \"▁信じて\",\n        -10.920056343078613\n      ],\n      [\n        \"02\",\n        -10.920075416564941\n      ],\n      [\n        \"▁繊維\",\n        -10.920488357543945\n      ],\n      [\n        \"▁移り\",\n        -10.920580863952637\n      ],\n      [\n        \"▁張り\",\n        -10.920988082885742\n      ],\n      [\n        \"▁昇\",\n        -10.921756744384766\n      ],\n      [\n        \"▁ボランティア\",\n        -10.921969413757324\n      ],\n      [\n        \"▁遅く\",\n        -10.92224407196045\n      ],\n      [\n        \"▁オペラ\",\n        -10.92261028289795\n      ],\n      [\n        \"顔\",\n        -10.922727584838867\n      ],\n      [\n        \"次郎\",\n        -10.923234939575195\n      ],\n      [\n        \"▁苦労\",\n        -10.923256874084473\n      ],\n      [\n        \"▁ラグビー\",\n        -10.923744201660156\n      ],\n      [\n        \"pe\",\n        -10.92390251159668\n      ],\n      [\n        \"▁軽減\",\n        -10.924031257629395\n      ],\n      [\n        \"証\",\n        -10.92416000366211\n      ],\n      [\n        \"▁喜\",\n        -10.92431640625\n      ],\n      [\n        \"▁前回\",\n        -10.924522399902344\n      ],\n      [\n        \"ナイ\",\n        -10.924938201904297\n      ],\n      [\n        \"RO\",\n        -10.925053596496582\n      ],\n      [\n        \"昭和\",\n        -10.925239562988281\n      ],\n      [\n        \"▁サラ\",\n        -10.925392150878906\n      ],\n      [\n        \"▁交代\",\n        -10.925559043884277\n      ],\n      [\n        \"▁現れる\",\n        -10.92572021484375\n      ],\n      [\n        \"人口\",\n        -10.926432609558105\n      ],\n      [\n        \"▁取\",\n        -10.926569938659668\n      ],\n      [\n        \"▁ゲイ\",\n        -10.926887512207031\n      ],\n      [\n        \"▁出荷\",\n        -10.926931381225586\n      ],\n      [\n        \"▁選んだ\",\n        -10.927119255065918\n      ],\n      [\n        \"▁運\",\n        -10.927360534667969\n      ],\n      [\n        \"▁打率\",\n        -10.927536964416504\n      ],\n      [\n        \"関連\",\n        -10.927577018737793\n      ],\n      [\n        \"▁到達\",\n        -10.927590370178223\n      ],\n      [\n        \"▁トルコ\",\n        -10.92798137664795\n      ],\n      [\n        \"▁窓口\",\n        -10.928263664245605\n      ],\n      [\n        \"七\",\n        -10.928461074829102\n      ],\n      [\n        \"《\",\n        -10.92864990234375\n      ],\n      [\n        \"▁au\",\n        -10.929035186767578\n      ],\n      [\n        \"1998\",\n        -10.92908763885498\n      ],\n      [\n        \"▁奴隷\",\n        -10.929203987121582\n      ],\n      [\n        \"▁寒\",\n        -10.929234504699707\n      ],\n      [\n        \"▁ベルリン\",\n        -10.92923641204834\n      ],\n      [\n        \"▁ホルモン\",\n        -10.929259300231934\n      ],\n      [\n        \"▁ポルトガル\",\n        -10.929370880126953\n      ],\n      [\n        \"▁老人\",\n        -10.929443359375\n      ],\n      [\n        \"▁唐\",\n        -10.930023193359375\n      ],\n      [\n        \"▁除き\",\n        -10.930098533630371\n      ],\n      [\n        \"▁面接\",\n        -10.930109977722168\n      ],\n      [\n        \"望\",\n        -10.930587768554688\n      ],\n      [\n        \"▁1972\",\n        -10.930611610412598\n      ],\n      [\n        \"▁北東\",\n        -10.931269645690918\n      ],\n      [\n        \"43\",\n        -10.931435585021973\n      ],\n      [\n        \"▁弁当\",\n        -10.931638717651367\n      ],\n      [\n        \"▁フェア\",\n        -10.931658744812012\n      ],\n      [\n        \"▁奇\",\n        -10.931784629821777\n      ],\n      [\n        \"なので\",\n        -10.932402610778809\n      ],\n      [\n        \"od\",\n        -10.932404518127441\n      ],\n      [\n        \"▁休止\",\n        -10.932570457458496\n      ],\n      [\n        \"▁自殺\",\n        -10.932642936706543\n      ],\n      [\n        \"▁URL\",\n        -10.932646751403809\n      ],\n      [\n        \"67\",\n        -10.932713508605957\n      ],\n      [\n        \"▁大事な\",\n        -10.933155059814453\n      ],\n      [\n        \"▁予告\",\n        -10.933168411254883\n      ],\n      [\n        \"PC\",\n        -10.933265686035156\n      ],\n      [\n        \"わり\",\n        -10.933345794677734\n      ],\n      [\n        \"けん\",\n        -10.933478355407715\n      ],\n      [\n        \"▁積\",\n        -10.93364143371582\n      ],\n      [\n        \"▁末期\",\n        -10.934078216552734\n      ],\n      [\n        \"▁マリア\",\n        -10.93408489227295\n      ],\n      [\n        \"▁模擬\",\n        -10.934181213378906\n      ],\n      [\n        \"▁仮面\",\n        -10.934228897094727\n      ],\n      [\n        \"ide\",\n        -10.934432029724121\n      ],\n      [\n        \"ッター\",\n        -10.93446159362793\n      ],\n      [\n        \"▁ワシントン\",\n        -10.934839248657227\n      ],\n      [\n        \"虫\",\n        -10.934883117675781\n      ],\n      [\n        \"▁紅\",\n        -10.935072898864746\n      ],\n      [\n        \"▁ふた\",\n        -10.935213088989258\n      ],\n      [\n        \"使\",\n        -10.935391426086426\n      ],\n      [\n        \"▁人員\",\n        -10.935441970825195\n      ],\n      [\n        \"▁トー\",\n        -10.935468673706055\n      ],\n      [\n        \"▁法令\",\n        -10.935687065124512\n      ],\n      [\n        \"▁ハル\",\n        -10.935707092285156\n      ],\n      [\n        \"▁タワー\",\n        -10.935722351074219\n      ],\n      [\n        \"▁83\",\n        -10.936131477355957\n      ],\n      [\n        \"▁エンジニア\",\n        -10.936249732971191\n      ],\n      [\n        \"▁任せ\",\n        -10.936534881591797\n      ],\n      [\n        \"▁ブーム\",\n        -10.93661880493164\n      ],\n      [\n        \"CD\",\n        -10.936935424804688\n      ],\n      [\n        \"▁ビタミン\",\n        -10.93721866607666\n      ],\n      [\n        \"▁フレ\",\n        -10.93787670135498\n      ],\n      [\n        \"▁推薦\",\n        -10.937956809997559\n      ],\n      [\n        \"▁出来た\",\n        -10.937957763671875\n      ],\n      [\n        \"▁抑制\",\n        -10.938056945800781\n      ],\n      [\n        \"▁歴代\",\n        -10.938165664672852\n      ],\n      [\n        \"▁抱えて\",\n        -10.938321113586426\n      ],\n      [\n        \"祭\",\n        -10.938362121582031\n      ],\n      [\n        \"▁巨人\",\n        -10.938419342041016\n      ],\n      [\n        \"▁起こり\",\n        -10.938488006591797\n      ],\n      [\n        \"▁語った\",\n        -10.938647270202637\n      ],\n      [\n        \"雪\",\n        -10.938678741455078\n      ],\n      [\n        \"▁真実\",\n        -10.939223289489746\n      ],\n      [\n        \"▁十分な\",\n        -10.940074920654297\n      ],\n      [\n        \"▁81\",\n        -10.940132141113281\n      ],\n      [\n        \"▁手間\",\n        -10.940385818481445\n      ],\n      [\n        \"▁上演\",\n        -10.940589904785156\n      ],\n      [\n        \"▁言\",\n        -10.940631866455078\n      ],\n      [\n        \"ec\",\n        -10.940634727478027\n      ],\n      [\n        \"▁ソウル\",\n        -10.940681457519531\n      ],\n      [\n        \"局\",\n        -10.940847396850586\n      ],\n      [\n        \"▁あまりに\",\n        -10.940959930419922\n      ],\n      [\n        \"メール\",\n        -10.941201210021973\n      ],\n      [\n        \"▁秘\",\n        -10.94152545928955\n      ],\n      [\n        \"▁本当の\",\n        -10.941668510437012\n      ],\n      [\n        \"▁ワイド\",\n        -10.941725730895996\n      ],\n      [\n        \"▁電池\",\n        -10.941914558410645\n      ],\n      [\n        \"▁ゴー\",\n        -10.942625999450684\n      ],\n      [\n        \"茶\",\n        -10.942726135253906\n      ],\n      [\n        \"▁ケイ\",\n        -10.943137168884277\n      ],\n      [\n        \"▁1975\",\n        -10.9434814453125\n      ],\n      [\n        \"▁データベース\",\n        -10.943535804748535\n      ],\n      [\n        \"▁細\",\n        -10.943604469299316\n      ],\n      [\n        \"ブリ\",\n        -10.943766593933105\n      ],\n      [\n        \"▁1979\",\n        -10.943870544433594\n      ],\n      [\n        \"▁頻繁に\",\n        -10.944282531738281\n      ],\n      [\n        \"▁シューズ\",\n        -10.944306373596191\n      ],\n      [\n        \"▁軍人\",\n        -10.944655418395996\n      ],\n      [\n        \"▁みたいです\",\n        -10.944726943969727\n      ],\n      [\n        \"76\",\n        -10.944878578186035\n      ],\n      [\n        \"▁強調\",\n        -10.94497013092041\n      ],\n      [\n        \"症\",\n        -10.945006370544434\n      ],\n      [\n        \"▁リゾート\",\n        -10.945345878601074\n      ],\n      [\n        \"▁そもそも\",\n        -10.945408821105957\n      ],\n      [\n        \"87\",\n        -10.945456504821777\n      ],\n      [\n        \"▁ブリ\",\n        -10.945470809936523\n      ],\n      [\n        \"斎\",\n        -10.945621490478516\n      ],\n      [\n        \"▁反乱\",\n        -10.945813179016113\n      ],\n      [\n        \"▁1981\",\n        -10.946066856384277\n      ],\n      [\n        \"▁ハート\",\n        -10.946754455566406\n      ],\n      [\n        \"end\",\n        -10.946879386901855\n      ],\n      [\n        \"▁検出\",\n        -10.947149276733398\n      ],\n      [\n        \"▁双方\",\n        -10.94752025604248\n      ],\n      [\n        \"▁食べ物\",\n        -10.947649955749512\n      ],\n      [\n        \"MS\",\n        -10.947876930236816\n      ],\n      [\n        \"▁顧問\",\n        -10.948063850402832\n      ],\n      [\n        \"89\",\n        -10.948227882385254\n      ],\n      [\n        \"▁昇進\",\n        -10.948330879211426\n      ],\n      [\n        \"42\",\n        -10.948372840881348\n      ],\n      [\n        \"竹\",\n        -10.948408126831055\n      ],\n      [\n        \"AR\",\n        -10.948775291442871\n      ],\n      [\n        \"▁株主\",\n        -10.949057579040527\n      ],\n      [\n        \"フト\",\n        -10.949397087097168\n      ],\n      [\n        \"▁ゴールデン\",\n        -10.949511528015137\n      ],\n      [\n        \"▁comment\",\n        -10.94961166381836\n      ],\n      [\n        \"▁記入\",\n        -10.950042724609375\n      ],\n      [\n        \"▁売買\",\n        -10.950051307678223\n      ],\n      [\n        \"▁焼\",\n        -10.950251579284668\n      ],\n      [\n        \"▁少しずつ\",\n        -10.95050048828125\n      ],\n      [\n        \"▁最適\",\n        -10.950505256652832\n      ],\n      [\n        \"▁具\",\n        -10.951407432556152\n      ],\n      [\n        \"▁頂け\",\n        -10.951419830322266\n      ],\n      [\n        \"57\",\n        -10.951437950134277\n      ],\n      [\n        \"▁ボー\",\n        -10.951542854309082\n      ],\n      [\n        \"▁All\",\n        -10.951775550842285\n      ],\n      [\n        \"ポン\",\n        -10.951960563659668\n      ],\n      [\n        \"ストン\",\n        -10.952317237854004\n      ],\n      [\n        \"▁Bl\",\n        -10.952325820922852\n      ],\n      [\n        \"▁藤原\",\n        -10.952826499938965\n      ],\n      [\n        \"▁一気に\",\n        -10.95290756225586\n      ],\n      [\n        \"▁単語\",\n        -10.952932357788086\n      ],\n      [\n        \"▁タクシー\",\n        -10.953422546386719\n      ],\n      [\n        \"▁バッテリー\",\n        -10.953479766845703\n      ],\n      [\n        \"▁推測\",\n        -10.953546524047852\n      ],\n      [\n        \"▁見せる\",\n        -10.953763961791992\n      ],\n      [\n        \"クター\",\n        -10.954301834106445\n      ],\n      [\n        \"▁触れ\",\n        -10.954516410827637\n      ],\n      [\n        \"▁デート\",\n        -10.95498275756836\n      ],\n      [\n        \"▁おもちゃ\",\n        -10.955180168151855\n      ],\n      [\n        \"▁警備\",\n        -10.955230712890625\n      ],\n      [\n        \"▁カトリック\",\n        -10.955284118652344\n      ],\n      [\n        \"▁離脱\",\n        -10.955306053161621\n      ],\n      [\n        \"▁金利\",\n        -10.955815315246582\n      ],\n      [\n        \"▁目指し\",\n        -10.95623779296875\n      ],\n      [\n        \"トリー\",\n        -10.956411361694336\n      ],\n      [\n        \"▁ローカル\",\n        -10.9566011428833\n      ],\n      [\n        \"ぜひ\",\n        -10.956642150878906\n      ],\n      [\n        \"帯\",\n        -10.956690788269043\n      ],\n      [\n        \"▁ARMOR\",\n        -10.956986427307129\n      ],\n      [\n        \"▁選択肢\",\n        -10.957051277160645\n      ],\n      [\n        \"▁虫\",\n        -10.957140922546387\n      ],\n      [\n        \"▁調達\",\n        -10.957148551940918\n      ],\n      [\n        \"▁緩和\",\n        -10.957244873046875\n      ],\n      [\n        \"地域\",\n        -10.957402229309082\n      ],\n      [\n        \"湖\",\n        -10.957771301269531\n      ],\n      [\n        \"▁好評\",\n        -10.95823860168457\n      ],\n      [\n        \"▁得な\",\n        -10.95825481414795\n      ],\n      [\n        \"▁死後\",\n        -10.958440780639648\n      ],\n      [\n        \"▁MS\",\n        -10.958694458007812\n      ],\n      [\n        \"入れ\",\n        -10.958853721618652\n      ],\n      [\n        \"38\",\n        -10.958942413330078\n      ],\n      [\n        \"▁倉庫\",\n        -10.958958625793457\n      ],\n      [\n        \"つけ\",\n        -10.959266662597656\n      ],\n      [\n        \"▁選抜\",\n        -10.959342002868652\n      ],\n      [\n        \"▁日程\",\n        -10.959420204162598\n      ],\n      [\n        \"▁離れ\",\n        -10.95955753326416\n      ],\n      [\n        \"▁備えて\",\n        -10.959569931030273\n      ],\n      [\n        \"▁昨日\",\n        -10.959906578063965\n      ],\n      [\n        \"▁一族\",\n        -10.960021018981934\n      ],\n      [\n        \"▁体系\",\n        -10.960031509399414\n      ],\n      [\n        \"▁1945\",\n        -10.960221290588379\n      ],\n      [\n        \"グリ\",\n        -10.96023178100586\n      ],\n      [\n        \"▁金沢\",\n        -10.960897445678711\n      ],\n      [\n        \"▁合わ\",\n        -10.961522102355957\n      ],\n      [\n        \"キング\",\n        -10.96166706085205\n      ],\n      [\n        \"▁ベン\",\n        -10.962382316589355\n      ],\n      [\n        \"▁的である\",\n        -10.962456703186035\n      ],\n      [\n        \"▁侵入\",\n        -10.96290397644043\n      ],\n      [\n        \"織\",\n        -10.96314811706543\n      ],\n      [\n        \"▁前述\",\n        -10.96323013305664\n      ],\n      [\n        \"ドイツ\",\n        -10.963382720947266\n      ],\n      [\n        \"▁GP\",\n        -10.96345329284668\n      ],\n      [\n        \"▁しかも\",\n        -10.963517189025879\n      ],\n      [\n        \"▁ドン\",\n        -10.9635648727417\n      ],\n      [\n        \"▁取れ\",\n        -10.964313507080078\n      ],\n      [\n        \"むら\",\n        -10.96440601348877\n      ],\n      [\n        \"▁モンスター\",\n        -10.964436531066895\n      ],\n      [\n        \"麻\",\n        -10.96485424041748\n      ],\n      [\n        \"リエ\",\n        -10.965044975280762\n      ],\n      [\n        \"▁大部分\",\n        -10.96568489074707\n      ],\n      [\n        \"シング\",\n        -10.966004371643066\n      ],\n      [\n        \"ING\",\n        -10.966407775878906\n      ],\n      [\n        \"▁挙げて\",\n        -10.966598510742188\n      ],\n      [\n        \"▁上下\",\n        -10.966606140136719\n      ],\n      [\n        \"▁犯\",\n        -10.966917037963867\n      ],\n      [\n        \"▁演じる\",\n        -10.967142105102539\n      ],\n      [\n        \"▁ロレックス\",\n        -10.967362403869629\n      ],\n      [\n        \"▁コンビ\",\n        -10.967655181884766\n      ],\n      [\n        \"弁\",\n        -10.967996597290039\n      ],\n      [\n        \"▁それほど\",\n        -10.968774795532227\n      ],\n      [\n        \"聞\",\n        -10.969000816345215\n      ],\n      [\n        \"▁毎月\",\n        -10.96932601928711\n      ],\n      [\n        \"▁上陸\",\n        -10.969353675842285\n      ],\n      [\n        \"オフ\",\n        -10.969466209411621\n      ],\n      [\n        \"▁Inc\",\n        -10.969498634338379\n      ],\n      [\n        \"▁プール\",\n        -10.969584465026855\n      ],\n      [\n        \"81\",\n        -10.969635009765625\n      ],\n      [\n        \"▁影\",\n        -10.96989917755127\n      ],\n      [\n        \"クション\",\n        -10.970236778259277\n      ],\n      [\n        \"かり\",\n        -10.970298767089844\n      ],\n      [\n        \"羅\",\n        -10.970312118530273\n      ],\n      [\n        \"83\",\n        -10.970356941223145\n      ],\n      [\n        \"▁スタ\",\n        -10.970382690429688\n      ],\n      [\n        \"▁著書\",\n        -10.970399856567383\n      ],\n      [\n        \"▁はじめて\",\n        -10.970569610595703\n      ],\n      [\n        \"▁述べ\",\n        -10.970625877380371\n      ],\n      [\n        \"▁ボーナス\",\n        -10.970662117004395\n      ],\n      [\n        \"▁経歴\",\n        -10.970786094665527\n      ],\n      [\n        \"▁起\",\n        -10.970900535583496\n      ],\n      [\n        \"▁入口\",\n        -10.97104549407959\n      ],\n      [\n        \"▁創立\",\n        -10.971214294433594\n      ],\n      [\n        \"▁頂いた\",\n        -10.971372604370117\n      ],\n      [\n        \"温\",\n        -10.971375465393066\n      ],\n      [\n        \"撃\",\n        -10.97144889831543\n      ],\n      [\n        \"▁鹿\",\n        -10.971590995788574\n      ],\n      [\n        \"▁弱い\",\n        -10.971707344055176\n      ],\n      [\n        \"まった\",\n        -10.971903800964355\n      ],\n      [\n        \"盛\",\n        -10.971992492675781\n      ],\n      [\n        \"系\",\n        -10.972014427185059\n      ],\n      [\n        \"▁下り\",\n        -10.972067832946777\n      ],\n      [\n        \"AC\",\n        -10.972183227539062\n      ],\n      [\n        \"▁とり\",\n        -10.972280502319336\n      ],\n      [\n        \"▁歩兵\",\n        -10.972419738769531\n      ],\n      [\n        \"▁恐怖\",\n        -10.972704887390137\n      ],\n      [\n        \"▁寄付\",\n        -10.972734451293945\n      ],\n      [\n        \"▁持続\",\n        -10.973191261291504\n      ],\n      [\n        \"▁役立つ\",\n        -10.973219871520996\n      ],\n      [\n        \"スカ\",\n        -10.97332763671875\n      ],\n      [\n        \"▁キリスト\",\n        -10.973467826843262\n      ],\n      [\n        \"フリー\",\n        -10.973607063293457\n      ],\n      [\n        \"ho\",\n        -10.973830223083496\n      ],\n      [\n        \"▁ม\",\n        -10.973942756652832\n      ],\n      [\n        \"▁犠牲\",\n        -10.974493026733398\n      ],\n      [\n        \"▁耐久\",\n        -10.974596977233887\n      ],\n      [\n        \"▁ジョ\",\n        -10.974749565124512\n      ],\n      [\n        \"▁詐欺\",\n        -10.97480297088623\n      ],\n      [\n        \"賞\",\n        -10.974944114685059\n      ],\n      [\n        \"SE\",\n        -10.975196838378906\n      ],\n      [\n        \"得\",\n        -10.975549697875977\n      ],\n      [\n        \"▁向かい\",\n        -10.975857734680176\n      ],\n      [\n        \"▁1978\",\n        -10.975920677185059\n      ],\n      [\n        \"結果\",\n        -10.975970268249512\n      ],\n      [\n        \"ファン\",\n        -10.976008415222168\n      ],\n      [\n        \"▁連れ\",\n        -10.977215766906738\n      ],\n      [\n        \"▁免疫\",\n        -10.977527618408203\n      ],\n      [\n        \"▁伝えて\",\n        -10.97758960723877\n      ],\n      [\n        \"▁向\",\n        -10.977662086486816\n      ],\n      [\n        \"▁全般\",\n        -10.977724075317383\n      ],\n      [\n        \"ーブ\",\n        -10.977883338928223\n      ],\n      [\n        \"しょう\",\n        -10.977989196777344\n      ],\n      [\n        \"▁出来て\",\n        -10.978134155273438\n      ],\n      [\n        \"▁酸素\",\n        -10.978853225708008\n      ],\n      [\n        \"▁守備\",\n        -10.97901725769043\n      ],\n      [\n        \"▁勝負\",\n        -10.979056358337402\n      ],\n      [\n        \"▁勝手に\",\n        -10.979185104370117\n      ],\n      [\n        \"▁調べ\",\n        -10.97927188873291\n      ],\n      [\n        \"▁ショック\",\n        -10.979497909545898\n      ],\n      [\n        \"▁マイクロ\",\n        -10.98045825958252\n      ],\n      [\n        \"▁メイ\",\n        -10.980826377868652\n      ],\n      [\n        \"▁ピー\",\n        -10.981369972229004\n      ],\n      [\n        \"▁返品\",\n        -10.981528282165527\n      ],\n      [\n        \"▁確かに\",\n        -10.981677055358887\n      ],\n      [\n        \"▁評論\",\n        -10.981705665588379\n      ],\n      [\n        \"メル\",\n        -10.981789588928223\n      ],\n      [\n        \"ドラ\",\n        -10.981922149658203\n      ],\n      [\n        \"▁あらかじめ\",\n        -10.982044219970703\n      ],\n      [\n        \"▁そうで\",\n        -10.98207950592041\n      ],\n      [\n        \"▁・・・\",\n        -10.982455253601074\n      ],\n      [\n        \"▁街道\",\n        -10.982455253601074\n      ],\n      [\n        \"▁ラウンド\",\n        -10.9827241897583\n      ],\n      [\n        \"児\",\n        -10.982807159423828\n      ],\n      [\n        \"ナス\",\n        -10.983048439025879\n      ],\n      [\n        \"▁パーカー\",\n        -10.983146667480469\n      ],\n      [\n        \"▁De\",\n        -10.983182907104492\n      ],\n      [\n        \"らし\",\n        -10.9833345413208\n      ],\n      [\n        \"▁いかがでしょう\",\n        -10.983383178710938\n      ],\n      [\n        \"56\",\n        -10.983518600463867\n      ],\n      [\n        \"▁代替\",\n        -10.983677864074707\n      ],\n      [\n        \"幅\",\n        -10.98372745513916\n      ],\n      [\n        \"交響\",\n        -10.983981132507324\n      ],\n      [\n        \"▁1,000\",\n        -10.984042167663574\n      ],\n      [\n        \"遊\",\n        -10.984081268310547\n      ],\n      [\n        \"AD\",\n        -10.984349250793457\n      ],\n      [\n        \"▁トレード\",\n        -10.984416007995605\n      ],\n      [\n        \"▁尻\",\n        -10.984453201293945\n      ],\n      [\n        \"▁寛\",\n        -10.984729766845703\n      ],\n      [\n        \"▁紫\",\n        -10.985208511352539\n      ],\n      [\n        \"悪\",\n        -10.985234260559082\n      ],\n      [\n        \"ネー\",\n        -10.98532485961914\n      ],\n      [\n        \"▁決まって\",\n        -10.98563003540039\n      ],\n      [\n        \"▁講義\",\n        -10.985630989074707\n      ],\n      [\n        \"▁人事\",\n        -10.985710144042969\n      ],\n      [\n        \"▁早期\",\n        -10.985772132873535\n      ],\n      [\n        \"▁コマンド\",\n        -10.986066818237305\n      ],\n      [\n        \"、\",\n        -10.98630142211914\n      ],\n      [\n        \"▁全面\",\n        -10.986391067504883\n      ],\n      [\n        \"▁コンビニ\",\n        -10.986531257629395\n      ],\n      [\n        \"▁改名\",\n        -10.987541198730469\n      ],\n      [\n        \"赤\",\n        -10.987606048583984\n      ],\n      [\n        \"▁見直し\",\n        -10.987648010253906\n      ],\n      [\n        \"SC\",\n        -10.987717628479004\n      ],\n      [\n        \"建\",\n        -10.98797607421875\n      ],\n      [\n        \"▁テクノロジー\",\n        -10.988290786743164\n      ],\n      [\n        \"▁ドーム\",\n        -10.988332748413086\n      ],\n      [\n        \"▁ドラフト\",\n        -10.988337516784668\n      ],\n      [\n        \"▁魂\",\n        -10.988780975341797\n      ],\n      [\n        \"▁スト\",\n        -10.989167213439941\n      ],\n      [\n        \"▁通勤\",\n        -10.989505767822266\n      ],\n      [\n        \"▁比べる\",\n        -10.98966121673584\n      ],\n      [\n        \"▁赤い\",\n        -10.989717483520508\n      ],\n      [\n        \"1997\",\n        -10.989777565002441\n      ],\n      [\n        \"▁浜松\",\n        -10.989892959594727\n      ],\n      [\n        \"がい\",\n        -10.989982604980469\n      ],\n      [\n        \"▁1973\",\n        -10.990143775939941\n      ],\n      [\n        \"▁SF\",\n        -10.99021053314209\n      ],\n      [\n        \"▁To\",\n        -10.99024486541748\n      ],\n      [\n        \"▁ヒーロー\",\n        -10.990402221679688\n      ],\n      [\n        \"令\",\n        -10.990482330322266\n      ],\n      [\n        \"▁神話\",\n        -10.99071979522705\n      ],\n      [\n        \"▁大丈夫\",\n        -10.990873336791992\n      ],\n      [\n        \"尚\",\n        -10.991044998168945\n      ],\n      [\n        \"▁住まい\",\n        -10.991080284118652\n      ],\n      [\n        \"▁ターミナル\",\n        -10.991118431091309\n      ],\n      [\n        \"確\",\n        -10.991168975830078\n      ],\n      [\n        \"▁著\",\n        -10.991204261779785\n      ],\n      [\n        \"▁なったら\",\n        -10.991382598876953\n      ],\n      [\n        \"ーター\",\n        -10.991393089294434\n      ],\n      [\n        \"▁やす\",\n        -10.991477966308594\n      ],\n      [\n        \"らく\",\n        -10.991801261901855\n      ],\n      [\n        \"▁もともと\",\n        -10.991835594177246\n      ],\n      [\n        \"▁日曜日\",\n        -10.99194049835205\n      ],\n      [\n        \"▁興行\",\n        -10.9922513961792\n      ],\n      [\n        \"ショ\",\n        -10.992523193359375\n      ],\n      [\n        \"強\",\n        -10.9927339553833\n      ],\n      [\n        \"▁かい\",\n        -10.993118286132812\n      ],\n      [\n        \"人間\",\n        -10.993119239807129\n      ],\n      [\n        \"▁待\",\n        -10.99321174621582\n      ],\n      [\n        \"▁小学生\",\n        -10.993375778198242\n      ],\n      [\n        \"▁ガールズ\",\n        -10.993529319763184\n      ],\n      [\n        \"▁畑\",\n        -10.993637084960938\n      ],\n      [\n        \"▁課長\",\n        -10.994311332702637\n      ],\n      [\n        \"▁起源\",\n        -10.994736671447754\n      ],\n      [\n        \"礼\",\n        -10.994937896728516\n      ],\n      [\n        \"☆\",\n        -10.994943618774414\n      ],\n      [\n        \"▁才能\",\n        -10.995105743408203\n      ],\n      [\n        \"を\",\n        -10.99522876739502\n      ],\n      [\n        \"▁嫁\",\n        -10.995299339294434\n      ],\n      [\n        \"刀\",\n        -10.995415687561035\n      ],\n      [\n        \"海外\",\n        -10.995526313781738\n      ],\n      [\n        \"っこ\",\n        -10.995565414428711\n      ],\n      [\n        \"▁html\",\n        -10.995725631713867\n      ],\n      [\n        \"▁目の前\",\n        -10.995757102966309\n      ],\n      [\n        \"ぞ\",\n        -10.995766639709473\n      ],\n      [\n        \"1970\",\n        -10.9957914352417\n      ],\n      [\n        \"▁スク\",\n        -10.996283531188965\n      ],\n      [\n        \"▁怒り\",\n        -10.996524810791016\n      ],\n      [\n        \"男性\",\n        -10.996603965759277\n      ],\n      [\n        \"▁占める\",\n        -10.99722671508789\n      ],\n      [\n        \"▁トーナメント\",\n        -10.997509002685547\n      ],\n      [\n        \"▁滝\",\n        -10.997543334960938\n      ],\n      [\n        \"▁加藤\",\n        -10.997564315795898\n      ],\n      [\n        \"▁古典\",\n        -10.998063087463379\n      ],\n      [\n        \"題\",\n        -10.998260498046875\n      ],\n      [\n        \"▁飛行機\",\n        -10.998345375061035\n      ],\n      [\n        \"▁訪れる\",\n        -10.998424530029297\n      ],\n      [\n        \"ディア\",\n        -10.99852466583252\n      ],\n      [\n        \"▁特急\",\n        -10.998637199401855\n      ],\n      [\n        \"▁La\",\n        -10.998734474182129\n      ],\n      [\n        \"▁きょう\",\n        -10.998770713806152\n      ],\n      [\n        \"▁授与\",\n        -10.998847961425781\n      ],\n      [\n        \"リアン\",\n        -10.999383926391602\n      ],\n      [\n        \"▁養成\",\n        -10.999462127685547\n      ],\n      [\n        \"▁スケート\",\n        -10.999695777893066\n      ],\n      [\n        \"折\",\n        -10.999931335449219\n      ],\n      [\n        \"▁戻った\",\n        -10.999958038330078\n      ],\n      [\n        \"▁宇\",\n        -11.000102043151855\n      ],\n      [\n        \"▁三田\",\n        -11.000256538391113\n      ],\n      [\n        \"▁ちょうど\",\n        -11.000386238098145\n      ],\n      [\n        \"景\",\n        -11.0004301071167\n      ],\n      [\n        \"▁エコ\",\n        -11.000627517700195\n      ],\n      [\n        \"▁財務\",\n        -11.000835418701172\n      ],\n      [\n        \"▁進\",\n        -11.000940322875977\n      ],\n      [\n        \"▁最適な\",\n        -11.001424789428711\n      ],\n      [\n        \"▁失\",\n        -11.001564979553223\n      ],\n      [\n        \"▁なれる\",\n        -11.001623153686523\n      ],\n      [\n        \"▁集めた\",\n        -11.001662254333496\n      ],\n      [\n        \"▁登\",\n        -11.001964569091797\n      ],\n      [\n        \"▁こんなに\",\n        -11.002145767211914\n      ],\n      [\n        \"現\",\n        -11.002159118652344\n      ],\n      [\n        \"▁username\",\n        -11.00234603881836\n      ],\n      [\n        \"▁700\",\n        -11.002542495727539\n      ],\n      [\n        \"▁FM\",\n        -11.002579689025879\n      ],\n      [\n        \"▁偏\",\n        -11.002779006958008\n      ],\n      [\n        \"▁前身\",\n        -11.002901077270508\n      ],\n      [\n        \"▁ダイヤ\",\n        -11.00301456451416\n      ],\n      [\n        \"▁ロサンゼルス\",\n        -11.003028869628906\n      ],\n      [\n        \"フォー\",\n        -11.003610610961914\n      ],\n      [\n        \"ロウ\",\n        -11.003718376159668\n      ],\n      [\n        \"▁脱出\",\n        -11.003817558288574\n      ],\n      [\n        \"乳\",\n        -11.003939628601074\n      ],\n      [\n        \"▁権限\",\n        -11.004446029663086\n      ],\n      [\n        \"▁メトロ\",\n        -11.004499435424805\n      ],\n      [\n        \"▁収益\",\n        -11.005017280578613\n      ],\n      [\n        \"▁メモリ\",\n        -11.005403518676758\n      ],\n      [\n        \"▁加速\",\n        -11.005428314208984\n      ],\n      [\n        \"▁セント\",\n        -11.005657196044922\n      ],\n      [\n        \"▁国鉄\",\n        -11.00574016571045\n      ],\n      [\n        \"95\",\n        -11.005849838256836\n      ],\n      [\n        \"作品\",\n        -11.005950927734375\n      ],\n      [\n        \"▁石油\",\n        -11.005961418151855\n      ],\n      [\n        \"▁装着\",\n        -11.006033897399902\n      ],\n      [\n        \"▁正しく\",\n        -11.00625228881836\n      ],\n      [\n        \"▁1971\",\n        -11.006309509277344\n      ],\n      [\n        \"▁果たして\",\n        -11.006319999694824\n      ],\n      [\n        \"▁ブレ\",\n        -11.006396293640137\n      ],\n      [\n        \"隆\",\n        -11.006633758544922\n      ],\n      [\n        \"UN\",\n        -11.006731986999512\n      ],\n      [\n        \"▁業績\",\n        -11.007095336914062\n      ],\n      [\n        \"▁枝\",\n        -11.007149696350098\n      ],\n      [\n        \"▁新しく\",\n        -11.007491111755371\n      ],\n      [\n        \"▁作者\",\n        -11.007740020751953\n      ],\n      [\n        \"幕\",\n        -11.00778865814209\n      ],\n      [\n        \"詳しく\",\n        -11.007895469665527\n      ],\n      [\n        \"層\",\n        -11.007943153381348\n      ],\n      [\n        \"▁入会\",\n        -11.008013725280762\n      ],\n      [\n        \"フィー\",\n        -11.008218765258789\n      ],\n      [\n        \"創\",\n        -11.008503913879395\n      ],\n      [\n        \"▁避ける\",\n        -11.008626937866211\n      ],\n      [\n        \"▁絶\",\n        -11.009031295776367\n      ],\n      [\n        \"mo\",\n        -11.009072303771973\n      ],\n      [\n        \"▁挨拶\",\n        -11.009414672851562\n      ],\n      [\n        \"▁誤\",\n        -11.009798049926758\n      ],\n      [\n        \"▁人妻\",\n        -11.010337829589844\n      ],\n      [\n        \"NA\",\n        -11.010510444641113\n      ],\n      [\n        \"▁難しく\",\n        -11.010517120361328\n      ],\n      [\n        \"▁デュ\",\n        -11.010526657104492\n      ],\n      [\n        \"▁旦那\",\n        -11.01059341430664\n      ],\n      [\n        \"▁なんと\",\n        -11.010612487792969\n      ],\n      [\n        \"▁モチーフ\",\n        -11.010627746582031\n      ],\n      [\n        \"版\",\n        -11.010713577270508\n      ],\n      [\n        \"客\",\n        -11.010748863220215\n      ],\n      [\n        \"FC\",\n        -11.011324882507324\n      ],\n      [\n        \"73\",\n        -11.011357307434082\n      ],\n      [\n        \"▁世の中\",\n        -11.011737823486328\n      ],\n      [\n        \"▁MB\",\n        -11.011771202087402\n      ],\n      [\n        \"▁USB\",\n        -11.011882781982422\n      ],\n      [\n        \"スケ\",\n        -11.012299537658691\n      ],\n      [\n        \"▁アウトドア\",\n        -11.01235294342041\n      ],\n      [\n        \"▁ガーデン\",\n        -11.0125732421875\n      ],\n      [\n        \"▁pro\",\n        -11.012728691101074\n      ],\n      [\n        \"▁登山\",\n        -11.012937545776367\n      ],\n      [\n        \"▁旗\",\n        -11.013026237487793\n      ],\n      [\n        \"▁サル\",\n        -11.013113975524902\n      ],\n      [\n        \"▁コール\",\n        -11.013205528259277\n      ],\n      [\n        \"1996\",\n        -11.013359069824219\n      ],\n      [\n        \"ist\",\n        -11.013497352600098\n      ],\n      [\n        \"したがって\",\n        -11.013785362243652\n      ],\n      [\n        \"ゴン\",\n        -11.013937950134277\n      ],\n      [\n        \"則\",\n        -11.014019012451172\n      ],\n      [\n        \"▁バカ\",\n        -11.014399528503418\n      ],\n      [\n        \"▁避け\",\n        -11.01447582244873\n      ],\n      [\n        \"▁命じ\",\n        -11.014726638793945\n      ],\n      [\n        \"綱\",\n        -11.014962196350098\n      ],\n      [\n        \"▁推移\",\n        -11.015029907226562\n      ],\n      [\n        \"▁だい\",\n        -11.015303611755371\n      ],\n      [\n        \"▁110\",\n        -11.015586853027344\n      ],\n      [\n        \"▁成人\",\n        -11.015735626220703\n      ],\n      [\n        \"リュ\",\n        -11.015795707702637\n      ],\n      [\n        \"▁音源\",\n        -11.01583194732666\n      ],\n      [\n        \"▁フィギュア\",\n        -11.015913009643555\n      ],\n      [\n        \"▁アンケート\",\n        -11.016115188598633\n      ],\n      [\n        \"▁あげて\",\n        -11.016195297241211\n      ],\n      [\n        \"プル\",\n        -11.0164155960083\n      ],\n      [\n        \"▁まるで\",\n        -11.016429901123047\n      ],\n      [\n        \"▁豆\",\n        -11.016698837280273\n      ],\n      [\n        \"▁1976\",\n        -11.016719818115234\n      ],\n      [\n        \"国際\",\n        -11.016728401184082\n      ],\n      [\n        \"▁録\",\n        -11.016798973083496\n      ],\n      [\n        \"達\",\n        -11.016814231872559\n      ],\n      [\n        \"▁1969\",\n        -11.016940116882324\n      ],\n      [\n        \"両\",\n        -11.01697063446045\n      ],\n      [\n        \"商\",\n        -11.017129898071289\n      ],\n      [\n        \"▁取った\",\n        -11.017169952392578\n      ],\n      [\n        \"▁ご飯\",\n        -11.017295837402344\n      ],\n      [\n        \"▁プロフィール\",\n        -11.01774787902832\n      ],\n      [\n        \"喜\",\n        -11.017760276794434\n      ],\n      [\n        \"▁出品\",\n        -11.01777172088623\n      ],\n      [\n        \"▁ミュージシャン\",\n        -11.017827033996582\n      ],\n      [\n        \"▁池田\",\n        -11.017951011657715\n      ],\n      [\n        \"老\",\n        -11.018054962158203\n      ],\n      [\n        \"▁1974\",\n        -11.01805591583252\n      ],\n      [\n        \"▁嘘\",\n        -11.018352508544922\n      ],\n      [\n        \"▁開いて\",\n        -11.018688201904297\n      ],\n      [\n        \"▁桁\",\n        -11.018738746643066\n      ],\n      [\n        \"▁帝\",\n        -11.019346237182617\n      ],\n      [\n        \"想\",\n        -11.019686698913574\n      ],\n      [\n        \"▁一貫\",\n        -11.019779205322266\n      ],\n      [\n        \"▁軽く\",\n        -11.019843101501465\n      ],\n      [\n        \"返\",\n        -11.019909858703613\n      ],\n      [\n        \"▁通る\",\n        -11.019972801208496\n      ],\n      [\n        \"ear\",\n        -11.020231246948242\n      ],\n      [\n        \"200\",\n        -11.02052116394043\n      ],\n      [\n        \"▁発明\",\n        -11.020759582519531\n      ],\n      [\n        \"兵衛\",\n        -11.020994186401367\n      ],\n      [\n        \"▁ディレクター\",\n        -11.021284103393555\n      ],\n      [\n        \"▁注\",\n        -11.021523475646973\n      ],\n      [\n        \"番組\",\n        -11.021639823913574\n      ],\n      [\n        \"▁現れ\",\n        -11.021652221679688\n      ],\n      [\n        \"▁連結\",\n        -11.021718978881836\n      ],\n      [\n        \"▁沿岸\",\n        -11.02176284790039\n      ],\n      [\n        \"▁懸念\",\n        -11.02193832397461\n      ],\n      [\n        \"ix\",\n        -11.02196216583252\n      ],\n      [\n        \"▁mg\",\n        -11.021990776062012\n      ],\n      [\n        \"いだ\",\n        -11.022368431091309\n      ],\n      [\n        \"▁王子\",\n        -11.022505760192871\n      ],\n      [\n        \"▁地理\",\n        -11.022541999816895\n      ],\n      [\n        \"▁護衛\",\n        -11.022957801818848\n      ],\n      [\n        \"▁国王\",\n        -11.022970199584961\n      ],\n      [\n        \"▁騎士\",\n        -11.02353572845459\n      ],\n      [\n        \"▁86\",\n        -11.023581504821777\n      ],\n      [\n        \"右\",\n        -11.023962020874023\n      ],\n      [\n        \"▁サイクル\",\n        -11.0247163772583\n      ],\n      [\n        \"▁ロケット\",\n        -11.024788856506348\n      ],\n      [\n        \"弾\",\n        -11.024942398071289\n      ],\n      [\n        \"込\",\n        -11.024946212768555\n      ],\n      [\n        \"▁たる\",\n        -11.025118827819824\n      ],\n      [\n        \"▁女王\",\n        -11.025198936462402\n      ],\n      [\n        \"回り\",\n        -11.025246620178223\n      ],\n      [\n        \"▁濃度\",\n        -11.025537490844727\n      ],\n      [\n        \"▁アク\",\n        -11.025781631469727\n      ],\n      [\n        \"▁上部\",\n        -11.02612590789795\n      ],\n      [\n        \"▁膝\",\n        -11.026238441467285\n      ],\n      [\n        \"▁幼稚園\",\n        -11.02627944946289\n      ],\n      [\n        \"▁入門\",\n        -11.026464462280273\n      ],\n      [\n        \"▁元気\",\n        -11.026806831359863\n      ],\n      [\n        \"協\",\n        -11.026895523071289\n      ],\n      [\n        \"▁何らか\",\n        -11.026986122131348\n      ],\n      [\n        \"派\",\n        -11.027054786682129\n      ],\n      [\n        \"▁被災\",\n        -11.027205467224121\n      ],\n      [\n        \"▁込\",\n        -11.027356147766113\n      ],\n      [\n        \"▁イスラエル\",\n        -11.0274658203125\n      ],\n      [\n        \"▁要件\",\n        -11.027482986450195\n      ],\n      [\n        \"▁分けて\",\n        -11.027809143066406\n      ],\n      [\n        \"▁キット\",\n        -11.02786636352539\n      ],\n      [\n        \"▁暗号\",\n        -11.028038024902344\n      ],\n      [\n        \"▁階段\",\n        -11.028202056884766\n      ],\n      [\n        \"戦後\",\n        -11.028289794921875\n      ],\n      [\n        \"▁遠く\",\n        -11.02842903137207\n      ],\n      [\n        \"▁背中\",\n        -11.0285005569458\n      ],\n      [\n        \"忠\",\n        -11.028630256652832\n      ],\n      [\n        \"▁ย\",\n        -11.02885627746582\n      ],\n      [\n        \"フェン\",\n        -11.029019355773926\n      ],\n      [\n        \"▁水素\",\n        -11.029119491577148\n      ],\n      [\n        \"▁クイズ\",\n        -11.029582023620605\n      ],\n      [\n        \"▁題\",\n        -11.029593467712402\n      ],\n      [\n        \"魚\",\n        -11.029619216918945\n      ],\n      [\n        \"ッキー\",\n        -11.029726028442383\n      ],\n      [\n        \"▁思\",\n        -11.029780387878418\n      ],\n      [\n        \"▁近隣\",\n        -11.02982234954834\n      ],\n      [\n        \"決\",\n        -11.0299072265625\n      ],\n      [\n        \"▁自主\",\n        -11.029930114746094\n      ],\n      [\n        \"▁聖書\",\n        -11.030045509338379\n      ],\n      [\n        \"DA\",\n        -11.030837059020996\n      ],\n      [\n        \"ドロ\",\n        -11.03123950958252\n      ],\n      [\n        \"66\",\n        -11.031317710876465\n      ],\n      [\n        \"案\",\n        -11.031465530395508\n      ],\n      [\n        \"しゃ\",\n        -11.031608581542969\n      ],\n      [\n        \"誰\",\n        -11.032184600830078\n      ],\n      [\n        \"AS\",\n        -11.032197952270508\n      ],\n      [\n        \"74\",\n        -11.032272338867188\n      ],\n      [\n        \"▁実力\",\n        -11.032376289367676\n      ],\n      [\n        \"▁やがて\",\n        -11.032698631286621\n      ],\n      [\n        \"▁開放\",\n        -11.03274154663086\n      ],\n      [\n        \"▁ペア\",\n        -11.0327787399292\n      ],\n      [\n        \"▁モール\",\n        -11.032856941223145\n      ],\n      [\n        \"▁泰\",\n        -11.032998085021973\n      ],\n      [\n        \"▁盛り\",\n        -11.0330228805542\n      ],\n      [\n        \"▁1968\",\n        -11.033037185668945\n      ],\n      [\n        \"▁ポリ\",\n        -11.033135414123535\n      ],\n      [\n        \"▁環\",\n        -11.033196449279785\n      ],\n      [\n        \"▁珍しい\",\n        -11.033425331115723\n      ],\n      [\n        \"ゼル\",\n        -11.033438682556152\n      ],\n      [\n        \"▁広がる\",\n        -11.033510208129883\n      ],\n      [\n        \"▁創作\",\n        -11.033513069152832\n      ],\n      [\n        \"▁祖父\",\n        -11.033930778503418\n      ],\n      [\n        \"▁デッキ\",\n        -11.03409481048584\n      ],\n      [\n        \"EL\",\n        -11.034109115600586\n      ],\n      [\n        \"▁IN\",\n        -11.034506797790527\n      ],\n      [\n        \"ガス\",\n        -11.034515380859375\n      ],\n      [\n        \"本当に\",\n        -11.034661293029785\n      ],\n      [\n        \"ありがとう\",\n        -11.034798622131348\n      ],\n      [\n        \"▁放映\",\n        -11.0350923538208\n      ],\n      [\n        \"ホーム\",\n        -11.035476684570312\n      ],\n      [\n        \"兆\",\n        -11.035479545593262\n      ],\n      [\n        \"▁ハンガリー\",\n        -11.035734176635742\n      ],\n      [\n        \"特\",\n        -11.03584098815918\n      ],\n      [\n        \"▁読んだ\",\n        -11.035978317260742\n      ],\n      [\n        \"断\",\n        -11.03653621673584\n      ],\n      [\n        \"art\",\n        -11.036810874938965\n      ],\n      [\n        \"▁そんなに\",\n        -11.03714370727539\n      ],\n      [\n        \"▁クライアント\",\n        -11.037372589111328\n      ],\n      [\n        \"▁当店\",\n        -11.037553787231445\n      ],\n      [\n        \"▁アルコール\",\n        -11.037571907043457\n      ],\n      [\n        \"▁ゆく\",\n        -11.037657737731934\n      ],\n      [\n        \"▁原発\",\n        -11.037721633911133\n      ],\n      [\n        \"ty\",\n        -11.037798881530762\n      ],\n      [\n        \"▁帳\",\n        -11.037877082824707\n      ],\n      [\n        \"▁放\",\n        -11.038139343261719\n      ],\n      [\n        \"▁圧力\",\n        -11.038349151611328\n      ],\n      [\n        \"▁戦隊\",\n        -11.038619041442871\n      ],\n      [\n        \"▁母さん\",\n        -11.03874397277832\n      ],\n      [\n        \"▁国産\",\n        -11.038749694824219\n      ],\n      [\n        \"霊\",\n        -11.03885555267334\n      ],\n      [\n        \"▁元々\",\n        -11.038928031921387\n      ],\n      [\n        \"▁椅子\",\n        -11.039116859436035\n      ],\n      [\n        \"▁しん\",\n        -11.039182662963867\n      ],\n      [\n        \"▁桃\",\n        -11.039312362670898\n      ],\n      [\n        \"▁判\",\n        -11.039416313171387\n      ],\n      [\n        \"▁記号\",\n        -11.03945255279541\n      ],\n      [\n        \"▁住み\",\n        -11.03947639465332\n      ],\n      [\n        \"▁った\",\n        -11.039531707763672\n      ],\n      [\n        \"▁写\",\n        -11.039558410644531\n      ],\n      [\n        \"えた\",\n        -11.03977108001709\n      ],\n      [\n        \"TO\",\n        -11.039836883544922\n      ],\n      [\n        \"▁サークル\",\n        -11.039888381958008\n      ],\n      [\n        \"94\",\n        -11.04001235961914\n      ],\n      [\n        \"▁定番\",\n        -11.040018081665039\n      ],\n      [\n        \"▁一括\",\n        -11.040141105651855\n      ],\n      [\n        \"▁コムーネ\",\n        -11.040295600891113\n      ],\n      [\n        \"▁落\",\n        -11.040541648864746\n      ],\n      [\n        \"▁遠征\",\n        -11.040558815002441\n      ],\n      [\n        \"▁ごく\",\n        -11.040580749511719\n      ],\n      [\n        \"会社\",\n        -11.040711402893066\n      ],\n      [\n        \"82\",\n        -11.040792465209961\n      ],\n      [\n        \"▁マット\",\n        -11.040901184082031\n      ],\n      [\n        \"▁スカート\",\n        -11.041070938110352\n      ],\n      [\n        \"▁見た目\",\n        -11.041219711303711\n      ],\n      [\n        \"▁©\",\n        -11.041242599487305\n      ],\n      [\n        \"習\",\n        -11.041444778442383\n      ],\n      [\n        \"▁正式\",\n        -11.04173755645752\n      ],\n      [\n        \"▁$\",\n        -11.041820526123047\n      ],\n      [\n        \"79\",\n        -11.04189395904541\n      ],\n      [\n        \"▁申込み\",\n        -11.042526245117188\n      ],\n      [\n        \"基\",\n        -11.042533874511719\n      ],\n      [\n        \"ity\",\n        -11.043044090270996\n      ],\n      [\n        \"▁薬剤\",\n        -11.043230056762695\n      ],\n      [\n        \"ph\",\n        -11.043294906616211\n      ],\n      [\n        \"▁武装\",\n        -11.043777465820312\n      ],\n      [\n        \"▁両者\",\n        -11.043987274169922\n      ],\n      [\n        \"▁招待\",\n        -11.04401683807373\n      ],\n      [\n        \"▁近所\",\n        -11.044260025024414\n      ],\n      [\n        \"出さ\",\n        -11.044454574584961\n      ],\n      [\n        \"▁特化\",\n        -11.044527053833008\n      ],\n      [\n        \"▁つくる\",\n        -11.044824600219727\n      ],\n      [\n        \"▁整\",\n        -11.044915199279785\n      ],\n      [\n        \"▁呉\",\n        -11.04520034790039\n      ],\n      [\n        \"枝\",\n        -11.045330047607422\n      ],\n      [\n        \"SP\",\n        -11.04574203491211\n      ],\n      [\n        \"ドー\",\n        -11.045785903930664\n      ],\n      [\n        \"▁1977\",\n        -11.046102523803711\n      ],\n      [\n        \"傷\",\n        -11.0465669631958\n      ],\n      [\n        \"▁失った\",\n        -11.046601295471191\n      ],\n      [\n        \"▁本質\",\n        -11.046746253967285\n      ],\n      [\n        \"▁看板\",\n        -11.04746150970459\n      ],\n      [\n        \"1995\",\n        -11.047529220581055\n      ],\n      [\n        \"▁幹部\",\n        -11.048112869262695\n      ],\n      [\n        \"▁立候補\",\n        -11.048269271850586\n      ],\n      [\n        \"▁安倍\",\n        -11.048270225524902\n      ],\n      [\n        \"▁残す\",\n        -11.04843807220459\n      ],\n      [\n        \"▁賠償\",\n        -11.048562049865723\n      ],\n      [\n        \"▁Yahoo\",\n        -11.048731803894043\n      ],\n      [\n        \"ポジション\",\n        -11.048760414123535\n      ],\n      [\n        \"応\",\n        -11.048909187316895\n      ],\n      [\n        \"▁実家\",\n        -11.049017906188965\n      ],\n      [\n        \"▁血液\",\n        -11.049131393432617\n      ],\n      [\n        \"▁下部\",\n        -11.049291610717773\n      ],\n      [\n        \"▁BS\",\n        -11.049341201782227\n      ],\n      [\n        \"▁起こす\",\n        -11.049383163452148\n      ],\n      [\n        \"ルス\",\n        -11.050003051757812\n      ],\n      [\n        \"▁自民党\",\n        -11.050045013427734\n      ],\n      [\n        \"▁起業\",\n        -11.050055503845215\n      ],\n      [\n        \"結局\",\n        -11.050270080566406\n      ],\n      [\n        \"▁格安\",\n        -11.050293922424316\n      ],\n      [\n        \"ob\",\n        -11.050374984741211\n      ],\n      [\n        \"営\",\n        -11.050705909729004\n      ],\n      [\n        \"▁水準\",\n        -11.051170349121094\n      ],\n      [\n        \"フォード\",\n        -11.051292419433594\n      ],\n      [\n        \"SA\",\n        -11.051392555236816\n      ],\n      [\n        \"▁通行\",\n        -11.051548957824707\n      ],\n      [\n        \"▁ワイ\",\n        -11.05155086517334\n      ],\n      [\n        \"っか\",\n        -11.051786422729492\n      ],\n      [\n        \"っち\",\n        -11.05211353302002\n      ],\n      [\n        \"デス\",\n        -11.05220890045166\n      ],\n      [\n        \"▁戦う\",\n        -11.052796363830566\n      ],\n      [\n        \"▁稼げる\",\n        -11.053032875061035\n      ],\n      [\n        \"▁混\",\n        -11.05321979522705\n      ],\n      [\n        \"▁上手く\",\n        -11.053343772888184\n      ],\n      [\n        \"▁ジャスパー\",\n        -11.05335521697998\n      ],\n      [\n        \"▁美人\",\n        -11.05339527130127\n      ],\n      [\n        \"▁助手\",\n        -11.053520202636719\n      ],\n      [\n        \"▁スコア\",\n        -11.054044723510742\n      ],\n      [\n        \"▁普通に\",\n        -11.054186820983887\n      ],\n      [\n        \"覚\",\n        -11.054303169250488\n      ],\n      [\n        \"▁いただければ\",\n        -11.054401397705078\n      ],\n      [\n        \"▁ิ\",\n        -11.054474830627441\n      ],\n      [\n        \"▁学区\",\n        -11.054524421691895\n      ],\n      [\n        \"▁土曜日\",\n        -11.054828643798828\n      ],\n      [\n        \"▁最小\",\n        -11.055078506469727\n      ],\n      [\n        \"▁ラー\",\n        -11.055147171020508\n      ],\n      [\n        \"62\",\n        -11.055227279663086\n      ],\n      [\n        \"▁たか\",\n        -11.055335998535156\n      ],\n      [\n        \"コム\",\n        -11.055560111999512\n      ],\n      [\n        \"▁支給\",\n        -11.055642127990723\n      ],\n      [\n        \"湯\",\n        -11.055670738220215\n      ],\n      [\n        \"61\",\n        -11.055839538574219\n      ],\n      [\n        \"▁付ける\",\n        -11.05594253540039\n      ],\n      [\n        \"▁コラム\",\n        -11.056034088134766\n      ],\n      [\n        \"▁総理\",\n        -11.056771278381348\n      ],\n      [\n        \"▁気象\",\n        -11.057056427001953\n      ],\n      [\n        \"らん\",\n        -11.057075500488281\n      ],\n      [\n        \"CA\",\n        -11.057093620300293\n      ],\n      [\n        \"▁名付け\",\n        -11.057182312011719\n      ],\n      [\n        \"まあ\",\n        -11.05738353729248\n      ],\n      [\n        \"膜\",\n        -11.057406425476074\n      ],\n      [\n        \"▁紛争\",\n        -11.057573318481445\n      ],\n      [\n        \"陣\",\n        -11.057839393615723\n      ],\n      [\n        \"ープ\",\n        -11.057877540588379\n      ],\n      [\n        \"▁創\",\n        -11.057883262634277\n      ],\n      [\n        \"ガル\",\n        -11.058004379272461\n      ],\n      [\n        \"▁かん\",\n        -11.058189392089844\n      ],\n      [\n        \"▁ショット\",\n        -11.058384895324707\n      ],\n      [\n        \"慶\",\n        -11.058478355407715\n      ],\n      [\n        \"▁5000\",\n        -11.058525085449219\n      ],\n      [\n        \"▁Fi\",\n        -11.059002876281738\n      ],\n      [\n        \"音楽\",\n        -11.059033393859863\n      ],\n      [\n        \"▁教徒\",\n        -11.059074401855469\n      ],\n      [\n        \"▁クル\",\n        -11.059250831604004\n      ],\n      [\n        \"▁電鉄\",\n        -11.059295654296875\n      ],\n      [\n        \"▁軽量\",\n        -11.059388160705566\n      ],\n      [\n        \"72\",\n        -11.05953311920166\n      ],\n      [\n        \"ストーリー\",\n        -11.059825897216797\n      ],\n      [\n        \"▁ヨガ\",\n        -11.059889793395996\n      ],\n      [\n        \"▁おいしい\",\n        -11.060300827026367\n      ],\n      [\n        \"▁ユーロ\",\n        -11.060300827026367\n      ],\n      [\n        \"ow\",\n        -11.060455322265625\n      ],\n      [\n        \"▁くださった\",\n        -11.060616493225098\n      ],\n      [\n        \"▁排除\",\n        -11.060765266418457\n      ],\n      [\n        \"那\",\n        -11.060879707336426\n      ],\n      [\n        \"▁若手\",\n        -11.06100845336914\n      ],\n      [\n        \"チョ\",\n        -11.06100845336914\n      ],\n      [\n        \"▁申告\",\n        -11.061102867126465\n      ],\n      [\n        \"▁総会\",\n        -11.061232566833496\n      ],\n      [\n        \"▁負い\",\n        -11.061270713806152\n      ],\n      [\n        \"▁大変な\",\n        -11.06130599975586\n      ],\n      [\n        \"▁マク\",\n        -11.061416625976562\n      ],\n      [\n        \"▁主流\",\n        -11.06155776977539\n      ],\n      [\n        \"▁医者\",\n        -11.061595916748047\n      ],\n      [\n        \"富\",\n        -11.061710357666016\n      ],\n      [\n        \"▁尚\",\n        -11.061785697937012\n      ],\n      [\n        \"▁水道\",\n        -11.062195777893066\n      ],\n      [\n        \"▁ディスプレイ\",\n        -11.062450408935547\n      ],\n      [\n        \"▁ソビエト\",\n        -11.062519073486328\n      ],\n      [\n        \"願\",\n        -11.062830924987793\n      ],\n      [\n        \"▁落ちて\",\n        -11.062995910644531\n      ],\n      [\n        \"▁ガール\",\n        -11.063065528869629\n      ],\n      [\n        \"▁際して\",\n        -11.063130378723145\n      ],\n      [\n        \"放\",\n        -11.063551902770996\n      ],\n      [\n        \"ゲル\",\n        -11.063753128051758\n      ],\n      [\n        \"▁器具\",\n        -11.063821792602539\n      ],\n      [\n        \"▁Le\",\n        -11.064233779907227\n      ],\n      [\n        \"▁ファースト\",\n        -11.064295768737793\n      ],\n      [\n        \"立ち\",\n        -11.06443977355957\n      ],\n      [\n        \"スコ\",\n        -11.064447402954102\n      ],\n      [\n        \"▁当局\",\n        -11.064480781555176\n      ],\n      [\n        \"▁劉\",\n        -11.064496040344238\n      ],\n      [\n        \"底\",\n        -11.064529418945312\n      ],\n      [\n        \"▁メン\",\n        -11.064628601074219\n      ],\n      [\n        \"▁怖い\",\n        -11.06478500366211\n      ],\n      [\n        \"聖\",\n        -11.064851760864258\n      ],\n      [\n        \"▁88\",\n        -11.06493091583252\n      ],\n      [\n        \"▁スーツ\",\n        -11.065112113952637\n      ],\n      [\n        \"▁有して\",\n        -11.065841674804688\n      ],\n      [\n        \"タス\",\n        -11.06631851196289\n      ],\n      [\n        \"イス\",\n        -11.066521644592285\n      ],\n      [\n        \"▁司法\",\n        -11.066532135009766\n      ],\n      [\n        \"▁ドメイン\",\n        -11.066646575927734\n      ],\n      [\n        \"▁決まった\",\n        -11.066661834716797\n      ],\n      [\n        \"筆\",\n        -11.066668510437012\n      ],\n      [\n        \"▁オーディション\",\n        -11.066893577575684\n      ],\n      [\n        \"▁署名\",\n        -11.06690788269043\n      ],\n      [\n        \"ang\",\n        -11.066995620727539\n      ],\n      [\n        \"▁亡くなった\",\n        -11.067346572875977\n      ],\n      [\n        \"▁国勢\",\n        -11.067806243896484\n      ],\n      [\n        \"▁住\",\n        -11.068164825439453\n      ],\n      [\n        \"▁III\",\n        -11.0681734085083\n      ],\n      [\n        \"結婚\",\n        -11.068242073059082\n      ],\n      [\n        \"▁ポケモン\",\n        -11.068276405334473\n      ],\n      [\n        \"tu\",\n        -11.068326950073242\n      ],\n      [\n        \"▁必ずしも\",\n        -11.068461418151855\n      ],\n      [\n        \"▁ゴム\",\n        -11.068835258483887\n      ],\n      [\n        \"▁社団\",\n        -11.068880081176758\n      ],\n      [\n        \"▁けい\",\n        -11.068946838378906\n      ],\n      [\n        \"▁区画\",\n        -11.06925106048584\n      ],\n      [\n        \"▁เ\",\n        -11.069595336914062\n      ],\n      [\n        \"ock\",\n        -11.069612503051758\n      ],\n      [\n        \"▁矯正\",\n        -11.069653511047363\n      ],\n      [\n        \"▁終えた\",\n        -11.06967544555664\n      ],\n      [\n        \"鋭\",\n        -11.069698333740234\n      ],\n      [\n        \"▁降り\",\n        -11.06994915008545\n      ],\n      [\n        \"破\",\n        -11.070060729980469\n      ],\n      [\n        \"▁文学部\",\n        -11.07007122039795\n      ],\n      [\n        \"▁粉\",\n        -11.070101737976074\n      ],\n      [\n        \"▁別注\",\n        -11.070137977600098\n      ],\n      [\n        \"▁国土\",\n        -11.070302963256836\n      ],\n      [\n        \"ゾン\",\n        -11.070423126220703\n      ],\n      [\n        \"▁テロ\",\n        -11.07060432434082\n      ],\n      [\n        \"▁ゴミ\",\n        -11.070606231689453\n      ],\n      [\n        \"▁チャン\",\n        -11.070982933044434\n      ],\n      [\n        \"▁怪我\",\n        -11.071417808532715\n      ],\n      [\n        \"昨年\",\n        -11.071568489074707\n      ],\n      [\n        \"▁着て\",\n        -11.071708679199219\n      ],\n      [\n        \"毎日\",\n        -11.071955680847168\n      ],\n      [\n        \"▁煮\",\n        -11.071971893310547\n      ],\n      [\n        \"出演\",\n        -11.071975708007812\n      ],\n      [\n        \"▁巨大な\",\n        -11.072062492370605\n      ],\n      [\n        \"ウェ\",\n        -11.072150230407715\n      ],\n      [\n        \"▁戦線\",\n        -11.072433471679688\n      ],\n      [\n        \"98\",\n        -11.072790145874023\n      ],\n      [\n        \"▁ドラッグ\",\n        -11.072835922241211\n      ],\n      [\n        \"▁係\",\n        -11.07299518585205\n      ],\n      [\n        \"iz\",\n        -11.073140144348145\n      ],\n      [\n        \"▁夫人\",\n        -11.073291778564453\n      ],\n      [\n        \"ですが\",\n        -11.07333755493164\n      ],\n      [\n        \"▁青山\",\n        -11.073873519897461\n      ],\n      [\n        \"▁批評\",\n        -11.074097633361816\n      ],\n      [\n        \"▁法案\",\n        -11.074175834655762\n      ],\n      [\n        \"▁敬\",\n        -11.074440002441406\n      ],\n      [\n        \"キシ\",\n        -11.074522972106934\n      ],\n      [\n        \"半\",\n        -11.074543952941895\n      ],\n      [\n        \"▁ポップ\",\n        -11.074898719787598\n      ],\n      [\n        \"▁心臓\",\n        -11.075067520141602\n      ],\n      [\n        \"▁恵\",\n        -11.07523250579834\n      ],\n      [\n        \"▁マラソン\",\n        -11.075268745422363\n      ],\n      [\n        \"なぜ\",\n        -11.075358390808105\n      ],\n      [\n        \"91\",\n        -11.075691223144531\n      ],\n      [\n        \"▁AS\",\n        -11.075732231140137\n      ],\n      [\n        \"▁合戦\",\n        -11.075749397277832\n      ],\n      [\n        \"▁時刻\",\n        -11.075797080993652\n      ],\n      [\n        \"▁中野\",\n        -11.075864791870117\n      ],\n      [\n        \"▁及ぶ\",\n        -11.07597827911377\n      ],\n      [\n        \"▁エラー\",\n        -11.076040267944336\n      ],\n      [\n        \"▁鍋\",\n        -11.076089859008789\n      ],\n      [\n        \"▁助教\",\n        -11.076598167419434\n      ],\n      [\n        \"▁回り\",\n        -11.07663345336914\n      ],\n      [\n        \"ake\",\n        -11.076932907104492\n      ],\n      [\n        \"▁コンテスト\",\n        -11.077188491821289\n      ],\n      [\n        \"▁絵本\",\n        -11.077452659606934\n      ],\n      [\n        \"▁66\",\n        -11.077503204345703\n      ],\n      [\n        \"▁表彰\",\n        -11.077691078186035\n      ],\n      [\n        \"ユー\",\n        -11.077900886535645\n      ],\n      [\n        \"次に\",\n        -11.078507423400879\n      ],\n      [\n        \"▁温\",\n        -11.078642845153809\n      ],\n      [\n        \"ep\",\n        -11.078648567199707\n      ],\n      [\n        \"ンダー\",\n        -11.079046249389648\n      ],\n      [\n        \"▁死ぬ\",\n        -11.079181671142578\n      ],\n      [\n        \"▁韓\",\n        -11.079217910766602\n      ],\n      [\n        \"▁直営\",\n        -11.079387664794922\n      ],\n      [\n        \"▁残\",\n        -11.079469680786133\n      ],\n      [\n        \"na\",\n        -11.07961654663086\n      ],\n      [\n        \"▁読書\",\n        -11.07966423034668\n      ],\n      [\n        \"▁アレ\",\n        -11.080058097839355\n      ],\n      [\n        \"▁近鉄\",\n        -11.08007526397705\n      ],\n      [\n        \"▁芝\",\n        -11.080392837524414\n      ],\n      [\n        \"▁並行\",\n        -11.080413818359375\n      ],\n      [\n        \"▁楽団\",\n        -11.080446243286133\n      ],\n      [\n        \"▁好きで\",\n        -11.080591201782227\n      ],\n      [\n        \"ティア\",\n        -11.080599784851074\n      ],\n      [\n        \"▁消化\",\n        -11.080639839172363\n      ],\n      [\n        \"▁行なって\",\n        -11.080656051635742\n      ],\n      [\n        \"▁飾り\",\n        -11.080862998962402\n      ],\n      [\n        \"▁夕方\",\n        -11.080866813659668\n      ],\n      [\n        \"▁広がって\",\n        -11.080926895141602\n      ],\n      [\n        \"吾\",\n        -11.081127166748047\n      ],\n      [\n        \"▁プレート\",\n        -11.081202507019043\n      ],\n      [\n        \"差\",\n        -11.081226348876953\n      ],\n      [\n        \"▁内側\",\n        -11.08124828338623\n      ],\n      [\n        \"▁させ\",\n        -11.081542015075684\n      ],\n      [\n        \"▁イスラム\",\n        -11.081573486328125\n      ],\n      [\n        \"飯\",\n        -11.082005500793457\n      ],\n      [\n        \"▁市町村\",\n        -11.082060813903809\n      ],\n      [\n        \"▁盛\",\n        -11.082140922546387\n      ],\n      [\n        \"広島\",\n        -11.082172393798828\n      ],\n      [\n        \"▁込め\",\n        -11.082747459411621\n      ],\n      [\n        \"▁プライベート\",\n        -11.083014488220215\n      ],\n      [\n        \"検\",\n        -11.083104133605957\n      ],\n      [\n        \"54\",\n        -11.083202362060547\n      ],\n      [\n        \"59\",\n        -11.083314895629883\n      ],\n      [\n        \"OR\",\n        -11.083517074584961\n      ],\n      [\n        \"▁マリ\",\n        -11.08361530303955\n      ],\n      [\n        \"▁おしゃれ\",\n        -11.083810806274414\n      ],\n      [\n        \"▁オーダー\",\n        -11.083846092224121\n      ],\n      [\n        \"ライト\",\n        -11.083934783935547\n      ],\n      [\n        \"▁ビーチ\",\n        -11.084129333496094\n      ],\n      [\n        \"▁学長\",\n        -11.084161758422852\n      ],\n      [\n        \"▁動向\",\n        -11.084249496459961\n      ],\n      [\n        \"▁軍団\",\n        -11.08426570892334\n      ],\n      [\n        \"▁前日\",\n        -11.08434009552002\n      ],\n      [\n        \"▁複製\",\n        -11.084580421447754\n      ],\n      [\n        \"▁主導\",\n        -11.084660530090332\n      ],\n      [\n        \"▁iPad\",\n        -11.08468246459961\n      ],\n      [\n        \"68\",\n        -11.084763526916504\n      ],\n      [\n        \"▁渡って\",\n        -11.08498764038086\n      ],\n      [\n        \"▁とっても\",\n        -11.085142135620117\n      ],\n      [\n        \"ac\",\n        -11.085286140441895\n      ],\n      [\n        \"▁貞\",\n        -11.08529281616211\n      ],\n      [\n        \"▁フライ\",\n        -11.085450172424316\n      ],\n      [\n        \"▁並ぶ\",\n        -11.085760116577148\n      ],\n      [\n        \"▁テンプレート\",\n        -11.085835456848145\n      ],\n      [\n        \"▁1964\",\n        -11.08585262298584\n      ],\n      [\n        \"最初\",\n        -11.08652400970459\n      ],\n      [\n        \"▁毒\",\n        -11.086679458618164\n      ],\n      [\n        \"▁メル\",\n        -11.086722373962402\n      ],\n      [\n        \"▁水分\",\n        -11.086764335632324\n      ],\n      [\n        \"1994\",\n        -11.087038040161133\n      ],\n      [\n        \"油\",\n        -11.08729076385498\n      ],\n      [\n        \"▁ヘルス\",\n        -11.087697982788086\n      ],\n      [\n        \"▁上海\",\n        -11.087747573852539\n      ],\n      [\n        \"93\",\n        -11.087803840637207\n      ],\n      [\n        \"▁発症\",\n        -11.087879180908203\n      ],\n      [\n        \"▁還元\",\n        -11.088090896606445\n      ],\n      [\n        \"▁走って\",\n        -11.088350296020508\n      ],\n      [\n        \"▁セッション\",\n        -11.08863353729248\n      ],\n      [\n        \"▁理工\",\n        -11.088767051696777\n      ],\n      [\n        \"▁装甲\",\n        -11.089205741882324\n      ],\n      [\n        \"▁⇒\",\n        -11.08920955657959\n      ],\n      [\n        \"▁爪\",\n        -11.089214324951172\n      ],\n      [\n        \"少し\",\n        -11.089457511901855\n      ],\n      [\n        \"▁渡辺\",\n        -11.089751243591309\n      ],\n      [\n        \"▁運命\",\n        -11.0897798538208\n      ],\n      [\n        \"ice\",\n        -11.089838981628418\n      ],\n      [\n        \"ティス\",\n        -11.090261459350586\n      ],\n      [\n        \"▁放置\",\n        -11.090603828430176\n      ],\n      [\n        \"▁突き\",\n        -11.090736389160156\n      ],\n      [\n        \"▁プロダクション\",\n        -11.091106414794922\n      ],\n      [\n        \"▁有り\",\n        -11.091312408447266\n      ],\n      [\n        \"イア\",\n        -11.091367721557617\n      ],\n      [\n        \"ue\",\n        -11.091569900512695\n      ],\n      [\n        \"▁匹\",\n        -11.091644287109375\n      ],\n      [\n        \"▁短縮\",\n        -11.091761589050293\n      ],\n      [\n        \"技\",\n        -11.091959953308105\n      ],\n      [\n        \"尻\",\n        -11.092175483703613\n      ],\n      [\n        \"ニュ\",\n        -11.092461585998535\n      ],\n      [\n        \"▁かた\",\n        -11.093423843383789\n      ],\n      [\n        \"▁返し\",\n        -11.093610763549805\n      ],\n      [\n        \"けた\",\n        -11.093728065490723\n      ],\n      [\n        \"di\",\n        -11.0938138961792\n      ],\n      [\n        \"▁CA\",\n        -11.093859672546387\n      ],\n      [\n        \"▁®\",\n        -11.093890190124512\n      ],\n      [\n        \"▁我慢\",\n        -11.09403133392334\n      ],\n      [\n        \"舞\",\n        -11.094094276428223\n      ],\n      [\n        \"▁わたる\",\n        -11.094162940979004\n      ],\n      [\n        \"▁ロス\",\n        -11.094391822814941\n      ],\n      [\n        \"希\",\n        -11.09455394744873\n      ],\n      [\n        \"冷\",\n        -11.09464168548584\n      ],\n      [\n        \"▁給料\",\n        -11.09481143951416\n      ],\n      [\n        \"▁スクリーン\",\n        -11.094951629638672\n      ],\n      [\n        \"印\",\n        -11.095051765441895\n      ],\n      [\n        \"▁喜んで\",\n        -11.095187187194824\n      ],\n      [\n        \"97\",\n        -11.09547233581543\n      ],\n      [\n        \"▁ユース\",\n        -11.095870018005371\n      ],\n      [\n        \"セイ\",\n        -11.096272468566895\n      ],\n      [\n        \"▁複雑な\",\n        -11.096519470214844\n      ],\n      [\n        \"▁才\",\n        -11.096668243408203\n      ],\n      [\n        \"▁アパート\",\n        -11.09679126739502\n      ],\n      [\n        \"すると\",\n        -11.097010612487793\n      ],\n      [\n        \"ンス\",\n        -11.097041130065918\n      ],\n      [\n        \"▁98\",\n        -11.097092628479004\n      ],\n      [\n        \"▁必要である\",\n        -11.097124099731445\n      ],\n      [\n        \"▁散歩\",\n        -11.097358703613281\n      ],\n      [\n        \"▁人権\",\n        -11.097383499145508\n      ],\n      [\n        \"▁戦艦\",\n        -11.097410202026367\n      ],\n      [\n        \"▁鋼\",\n        -11.097624778747559\n      ],\n      [\n        \"▁笑\",\n        -11.097736358642578\n      ],\n      [\n        \"▁LED\",\n        -11.098053932189941\n      ],\n      [\n        \"/\",\n        -11.098065376281738\n      ],\n      [\n        \"カイ\",\n        -11.098109245300293\n      ],\n      [\n        \"▁筆\",\n        -11.098916053771973\n      ],\n      [\n        \"規\",\n        -11.099028587341309\n      ],\n      [\n        \"参加\",\n        -11.099181175231934\n      ],\n      [\n        \"▁主力\",\n        -11.099242210388184\n      ],\n      [\n        \"▁発掘\",\n        -11.099409103393555\n      ],\n      [\n        \"▁出走\",\n        -11.09941291809082\n      ],\n      [\n        \"打\",\n        -11.099457740783691\n      ],\n      [\n        \"だい\",\n        -11.099767684936523\n      ],\n      [\n        \"ian\",\n        -11.100058555603027\n      ],\n      [\n        \"▁秋冬\",\n        -11.100237846374512\n      ],\n      [\n        \"ance\",\n        -11.100399017333984\n      ],\n      [\n        \"アニメ\",\n        -11.100425720214844\n      ],\n      [\n        \"▁法的\",\n        -11.100502967834473\n      ],\n      [\n        \"▁集まって\",\n        -11.100707054138184\n      ],\n      [\n        \"▁透明\",\n        -11.100869178771973\n      ],\n      [\n        \"家族\",\n        -11.10089111328125\n      ],\n      [\n        \"▁周波\",\n        -11.10090160369873\n      ],\n      [\n        \"▁追求\",\n        -11.101000785827637\n      ],\n      [\n        \"▁違法\",\n        -11.101099967956543\n      ],\n      [\n        \"▁ならでは\",\n        -11.101102828979492\n      ],\n      [\n        \"96\",\n        -11.101173400878906\n      ],\n      [\n        \"▁付き合い\",\n        -11.101234436035156\n      ],\n      [\n        \"▁動く\",\n        -11.101234436035156\n      ],\n      [\n        \"▁陰\",\n        -11.101316452026367\n      ],\n      [\n        \"アウト\",\n        -11.101394653320312\n      ],\n      [\n        \"▁ボル\",\n        -11.101457595825195\n      ],\n      [\n        \"祖\",\n        -11.101478576660156\n      ],\n      [\n        \"▁きれ\",\n        -11.101545333862305\n      ],\n      [\n        \"▁親子\",\n        -11.101781845092773\n      ],\n      [\n        \"▁キス\",\n        -11.10184097290039\n      ],\n      [\n        \"▁折り\",\n        -11.102005958557129\n      ],\n      [\n        \"プリ\",\n        -11.102036476135254\n      ],\n      [\n        \"英語\",\n        -11.10217571258545\n      ],\n      [\n        \"腹\",\n        -11.102363586425781\n      ],\n      [\n        \"▁舞\",\n        -11.102389335632324\n      ],\n      [\n        \"▁アピール\",\n        -11.102832794189453\n      ],\n      [\n        \"▁調子\",\n        -11.103057861328125\n      ],\n      [\n        \"▁トロ\",\n        -11.103147506713867\n      ],\n      [\n        \"▁ガード\",\n        -11.103267669677734\n      ],\n      [\n        \"▁カイ\",\n        -11.103321075439453\n      ],\n      [\n        \"▁別れ\",\n        -11.103549003601074\n      ],\n      [\n        \"それぞれ\",\n        -11.1035737991333\n      ],\n      [\n        \"▁南東\",\n        -11.103690147399902\n      ],\n      [\n        \"示\",\n        -11.103784561157227\n      ],\n      [\n        \"▁ター\",\n        -11.103883743286133\n      ],\n      [\n        \"▁68\",\n        -11.103950500488281\n      ],\n      [\n        \"など\",\n        -11.10399055480957\n      ],\n      [\n        \"季\",\n        -11.104076385498047\n      ],\n      [\n        \"▁ソニー\",\n        -11.104219436645508\n      ],\n      [\n        \"▁大量\",\n        -11.104616165161133\n      ],\n      [\n        \"▁晴\",\n        -11.10486125946045\n      ],\n      [\n        \"▁彼氏\",\n        -11.104965209960938\n      ],\n      [\n        \"▁装飾\",\n        -11.105111122131348\n      ],\n      [\n        \"▁»\",\n        -11.105134963989258\n      ],\n      [\n        \"▁中学生\",\n        -11.105257034301758\n      ],\n      [\n        \"▁上がった\",\n        -11.105278015136719\n      ],\n      [\n        \"▁条例\",\n        -11.105340957641602\n      ],\n      [\n        \"▁容易に\",\n        -11.105552673339844\n      ],\n      [\n        \"▁GB\",\n        -11.10558032989502\n      ],\n      [\n        \"800\",\n        -11.105694770812988\n      ],\n      [\n        \"資\",\n        -11.105831146240234\n      ],\n      [\n        \"▁例外\",\n        -11.105833053588867\n      ],\n      [\n        \"陵\",\n        -11.105915069580078\n      ],\n      [\n        \"▁NO\",\n        -11.10591983795166\n      ],\n      [\n        \"辞\",\n        -11.106090545654297\n      ],\n      [\n        \"▁沿って\",\n        -11.106330871582031\n      ],\n      [\n        \"ほど\",\n        -11.106423377990723\n      ],\n      [\n        \"▁FA\",\n        -11.10644245147705\n      ],\n      [\n        \"▁フジ\",\n        -11.10655403137207\n      ],\n      [\n        \"be\",\n        -11.106629371643066\n      ],\n      [\n        \"▁勢\",\n        -11.106663703918457\n      ],\n      [\n        \"いや\",\n        -11.10671329498291\n      ],\n      [\n        \"▁とる\",\n        -11.106752395629883\n      ],\n      [\n        \"▁正確に\",\n        -11.106781005859375\n      ],\n      [\n        \"TS\",\n        -11.106858253479004\n      ],\n      [\n        \"▁net\",\n        -11.106927871704102\n      ],\n      [\n        \"ba\",\n        -11.106964111328125\n      ],\n      [\n        \"▁歩き\",\n        -11.106999397277832\n      ],\n      [\n        \"▁アレルギー\",\n        -11.107053756713867\n      ],\n      [\n        \"▁幅広く\",\n        -11.107107162475586\n      ],\n      [\n        \"▁入場\",\n        -11.107123374938965\n      ],\n      [\n        \"▁浅\",\n        -11.107258796691895\n      ],\n      [\n        \"▁持\",\n        -11.107319831848145\n      ],\n      [\n        \"柳\",\n        -11.107858657836914\n      ],\n      [\n        \"AP\",\n        -11.108444213867188\n      ],\n      [\n        \"▁冷\",\n        -11.108602523803711\n      ],\n      [\n        \"▁フロー\",\n        -11.109350204467773\n      ],\n      [\n        \"▁武田\",\n        -11.109797477722168\n      ],\n      [\n        \"▁ネイル\",\n        -11.10994815826416\n      ],\n      [\n        \"盤\",\n        -11.10995101928711\n      ],\n      [\n        \"▁流れて\",\n        -11.110055923461914\n      ],\n      [\n        \"▁プログラミング\",\n        -11.110408782958984\n      ],\n      [\n        \"▁少数\",\n        -11.11042308807373\n      ],\n      [\n        \"▁起こした\",\n        -11.110550880432129\n      ],\n      [\n        \"ame\",\n        -11.110610961914062\n      ],\n      [\n        \"▁1967\",\n        -11.11070728302002\n      ],\n      [\n        \"▁そういった\",\n        -11.110983848571777\n      ],\n      [\n        \"▁さくら\",\n        -11.111163139343262\n      ],\n      [\n        \"フォン\",\n        -11.111273765563965\n      ],\n      [\n        \"▁中期\",\n        -11.111297607421875\n      ],\n      [\n        \"▁棒\",\n        -11.111425399780273\n      ],\n      [\n        \"なり\",\n        -11.111522674560547\n      ],\n      [\n        \"息\",\n        -11.111542701721191\n      ],\n      [\n        \"▁会館\",\n        -11.11163330078125\n      ],\n      [\n        \"▁三菱\",\n        -11.111983299255371\n      ],\n      [\n        \"▁強力な\",\n        -11.11213493347168\n      ],\n      [\n        \"▁フリ\",\n        -11.112309455871582\n      ],\n      [\n        \"▁別途\",\n        -11.112464904785156\n      ],\n      [\n        \"▁主婦\",\n        -11.112834930419922\n      ],\n      [\n        \"▁総務\",\n        -11.113561630249023\n      ],\n      [\n        \"▁的です\",\n        -11.11374282836914\n      ],\n      [\n        \"▁廃棄\",\n        -11.113779067993164\n      ],\n      [\n        \"▁井上\",\n        -11.1138334274292\n      ],\n      [\n        \"象\",\n        -11.113846778869629\n      ],\n      [\n        \"っぱ\",\n        -11.113995552062988\n      ],\n      [\n        \"初めて\",\n        -11.114242553710938\n      ],\n      [\n        \"▁ズ\",\n        -11.114282608032227\n      ],\n      [\n        \"▁抗議\",\n        -11.114562034606934\n      ],\n      [\n        \"▁塗り\",\n        -11.114569664001465\n      ],\n      [\n        \"▁勢い\",\n        -11.114603042602539\n      ],\n      [\n        \"▁主人\",\n        -11.115410804748535\n      ],\n      [\n        \"秀\",\n        -11.115706443786621\n      ],\n      [\n        \"リュー\",\n        -11.115970611572266\n      ],\n      [\n        \"▁品種\",\n        -11.11623764038086\n      ],\n      [\n        \"▁リア\",\n        -11.116376876831055\n      ],\n      [\n        \"▁エントリー\",\n        -11.116423606872559\n      ],\n      [\n        \"BC\",\n        -11.116703033447266\n      ],\n      [\n        \"▁補給\",\n        -11.117128372192383\n      ],\n      [\n        \"▁栗\",\n        -11.117151260375977\n      ],\n      [\n        \"▁示唆\",\n        -11.117219924926758\n      ],\n      [\n        \"▁昌\",\n        -11.11746883392334\n      ],\n      [\n        \"▁麺\",\n        -11.117591857910156\n      ],\n      [\n        \"▁イエス\",\n        -11.117795944213867\n      ],\n      [\n        \"MO\",\n        -11.117866516113281\n      ],\n      [\n        \"合い\",\n        -11.11809253692627\n      ],\n      [\n        \"▁詳しい\",\n        -11.118178367614746\n      ],\n      [\n        \"具体\",\n        -11.118199348449707\n      ],\n      [\n        \"▁売れ\",\n        -11.118352890014648\n      ],\n      [\n        \"止め\",\n        -11.118419647216797\n      ],\n      [\n        \"三郎\",\n        -11.119007110595703\n      ],\n      [\n        \"列\",\n        -11.1190824508667\n      ],\n      [\n        \"ome\",\n        -11.119110107421875\n      ],\n      [\n        \"▁森林\",\n        -11.119172096252441\n      ],\n      [\n        \"しょ\",\n        -11.119257926940918\n      ],\n      [\n        \"71\",\n        -11.119617462158203\n      ],\n      [\n        \"左\",\n        -11.12015438079834\n      ],\n      [\n        \"ha\",\n        -11.120207786560059\n      ],\n      [\n        \"▁有機\",\n        -11.120430946350098\n      ],\n      [\n        \"▁チーズ\",\n        -11.1205472946167\n      ],\n      [\n        \"▁報じ\",\n        -11.120573997497559\n      ],\n      [\n        \"▁web\",\n        -11.120657920837402\n      ],\n      [\n        \"▁剛\",\n        -11.121115684509277\n      ],\n      [\n        \"▁与\",\n        -11.121211051940918\n      ],\n      [\n        \"▁ラスト\",\n        -11.121752738952637\n      ],\n      [\n        \"▁this\",\n        -11.122048377990723\n      ],\n      [\n        \"ana\",\n        -11.122050285339355\n      ],\n      [\n        \"飛\",\n        -11.122076988220215\n      ],\n      [\n        \"▁FX\",\n        -11.12213134765625\n      ],\n      [\n        \"▁させる\",\n        -11.122133255004883\n      ],\n      [\n        \"難\",\n        -11.122166633605957\n      ],\n      [\n        \"ッコ\",\n        -11.122610092163086\n      ],\n      [\n        \"▁なんとか\",\n        -11.122729301452637\n      ],\n      [\n        \"カラ\",\n        -11.122769355773926\n      ],\n      [\n        \"畑\",\n        -11.123275756835938\n      ],\n      [\n        \"▁├\",\n        -11.123286247253418\n      ],\n      [\n        \"▁照\",\n        -11.123311996459961\n      ],\n      [\n        \"▁見せた\",\n        -11.123435974121094\n      ],\n      [\n        \"▁襲撃\",\n        -11.123513221740723\n      ],\n      [\n        \"▁子孫\",\n        -11.12381362915039\n      ],\n      [\n        \"▁経路\",\n        -11.123929023742676\n      ],\n      [\n        \"▁助\",\n        -11.123934745788574\n      ],\n      [\n        \"▁ドラゴン\",\n        -11.124420166015625\n      ],\n      [\n        \"ッパー\",\n        -11.124515533447266\n      ],\n      [\n        \"▁収\",\n        -11.124543190002441\n      ],\n      [\n        \"念\",\n        -11.12457275390625\n      ],\n      [\n        \"沿革\",\n        -11.124707221984863\n      ],\n      [\n        \"▁ジョー\",\n        -11.1251802444458\n      ],\n      [\n        \"▁一連の\",\n        -11.125266075134277\n      ],\n      [\n        \"me\",\n        -11.125434875488281\n      ],\n      [\n        \"▁やま\",\n        -11.12545108795166\n      ],\n      [\n        \"▁申し訳\",\n        -11.125783920288086\n      ],\n      [\n        \"▁大学生\",\n        -11.125893592834473\n      ],\n      [\n        \"兄\",\n        -11.12593936920166\n      ],\n      [\n        \"▁学年\",\n        -11.12606143951416\n      ],\n      [\n        \"▁どうして\",\n        -11.126618385314941\n      ],\n      [\n        \"攻\",\n        -11.126638412475586\n      ],\n      [\n        \"▁バスケットボール\",\n        -11.126713752746582\n      ],\n      [\n        \"▁駒\",\n        -11.126848220825195\n      ],\n      [\n        \"ゼン\",\n        -11.126927375793457\n      ],\n      [\n        \"▁ブラン\",\n        -11.127158164978027\n      ],\n      [\n        \"▁大麻\",\n        -11.127251625061035\n      ],\n      [\n        \"札\",\n        -11.127427101135254\n      ],\n      [\n        \"▁評\",\n        -11.127462387084961\n      ],\n      [\n        \"▁軟\",\n        -11.127577781677246\n      ],\n      [\n        \"▁71\",\n        -11.127711296081543\n      ],\n      [\n        \"▁五輪\",\n        -11.127972602844238\n      ],\n      [\n        \"▁阪急\",\n        -11.128043174743652\n      ],\n      [\n        \"九\",\n        -11.1286039352417\n      ],\n      [\n        \"識\",\n        -11.128772735595703\n      ],\n      [\n        \"▁正確\",\n        -11.128798484802246\n      ],\n      [\n        \"der\",\n        -11.128870964050293\n      ],\n      [\n        \"ミング\",\n        -11.128959655761719\n      ],\n      [\n        \"セット\",\n        -11.129008293151855\n      ],\n      [\n        \"▁月刊\",\n        -11.129340171813965\n      ],\n      [\n        \"▁パイロット\",\n        -11.12950611114502\n      ],\n      [\n        \"▁賃金\",\n        -11.12956428527832\n      ],\n      [\n        \"衛\",\n        -11.129830360412598\n      ],\n      [\n        \"▁現れた\",\n        -11.129837989807129\n      ],\n      [\n        \"▁守り\",\n        -11.130082130432129\n      ],\n      [\n        \"▁中世\",\n        -11.130219459533691\n      ],\n      [\n        \"ーション\",\n        -11.130364418029785\n      ],\n      [\n        \"▁76\",\n        -11.130546569824219\n      ],\n      [\n        \"▁養子\",\n        -11.131001472473145\n      ],\n      [\n        \"TE\",\n        -11.1310396194458\n      ],\n      [\n        \"▁東急\",\n        -11.131348609924316\n      ],\n      [\n        \"チーム\",\n        -11.131885528564453\n      ],\n      [\n        \"▁豪\",\n        -11.132061958312988\n      ],\n      [\n        \"▁マネージャー\",\n        -11.132302284240723\n      ],\n      [\n        \"▁SH\",\n        -11.132471084594727\n      ],\n      [\n        \"▁移民\",\n        -11.133110046386719\n      ],\n      [\n        \"養\",\n        -11.133111000061035\n      ],\n      [\n        \"新しい\",\n        -11.133145332336426\n      ],\n      [\n        \"いま\",\n        -11.133363723754883\n      ],\n      [\n        \"敵\",\n        -11.133604049682617\n      ],\n      [\n        \"▁Mar\",\n        -11.133733749389648\n      ],\n      [\n        \"▁輝\",\n        -11.133793830871582\n      ],\n      [\n        \"▁73\",\n        -11.13403606414795\n      ],\n      [\n        \"▁損傷\",\n        -11.134132385253906\n      ],\n      [\n        \"▁発音\",\n        -11.134176254272461\n      ],\n      [\n        \"社会\",\n        -11.134422302246094\n      ],\n      [\n        \"▁非難\",\n        -11.134469985961914\n      ],\n      [\n        \"▁合唱\",\n        -11.13458251953125\n      ],\n      [\n        \"BA\",\n        -11.135089874267578\n      ],\n      [\n        \"▁税込\",\n        -11.1351900100708\n      ],\n      [\n        \"▁問合せ\",\n        -11.13541030883789\n      ],\n      [\n        \"之助\",\n        -11.135482788085938\n      ],\n      [\n        \"▁結んだ\",\n        -11.135632514953613\n      ],\n      [\n        \"▁工作\",\n        -11.135705947875977\n      ],\n      [\n        \"58\",\n        -11.13603401184082\n      ],\n      [\n        \"人気\",\n        -11.136146545410156\n      ],\n      [\n        \"▁グラン\",\n        -11.136216163635254\n      ],\n      [\n        \"デイ\",\n        -11.136244773864746\n      ],\n      [\n        \"▁小物\",\n        -11.136758804321289\n      ],\n      [\n        \"▁礼\",\n        -11.136992454528809\n      ],\n      [\n        \"▁アシスタント\",\n        -11.137032508850098\n      ],\n      [\n        \"殿\",\n        -11.137405395507812\n      ],\n      [\n        \"▁DS\",\n        -11.137604713439941\n      ],\n      [\n        \"▁劇団\",\n        -11.13780689239502\n      ],\n      [\n        \"▁モル\",\n        -11.137829780578613\n      ],\n      [\n        \"専門\",\n        -11.138031005859375\n      ],\n      [\n        \"▁容疑\",\n        -11.138167381286621\n      ],\n      [\n        \"▁放棄\",\n        -11.138410568237305\n      ],\n      [\n        \"▁96\",\n        -11.138447761535645\n      ],\n      [\n        \"▁司会\",\n        -11.138575553894043\n      ],\n      [\n        \"▁暗\",\n        -11.13859748840332\n      ],\n      [\n        \"寿\",\n        -11.138731956481934\n      ],\n      [\n        \"▁69\",\n        -11.138778686523438\n      ],\n      [\n        \"▁1965\",\n        -11.139036178588867\n      ],\n      [\n        \"▁ドラ\",\n        -11.139079093933105\n      ],\n      [\n        \"▁生理\",\n        -11.139296531677246\n      ],\n      [\n        \"▁奴\",\n        -11.139358520507812\n      ],\n      [\n        \"▁いち\",\n        -11.140044212341309\n      ],\n      [\n        \"▁北陸\",\n        -11.14028263092041\n      ],\n      [\n        \"▁炭素\",\n        -11.140326499938965\n      ],\n      [\n        \"▁巡\",\n        -11.140335083007812\n      ],\n      [\n        \"刑\",\n        -11.140398979187012\n      ],\n      [\n        \"▁スポンサー\",\n        -11.140519142150879\n      ],\n      [\n        \"▁回線\",\n        -11.140546798706055\n      ],\n      [\n        \"▁毎回\",\n        -11.140637397766113\n      ],\n      [\n        \"▁月額\",\n        -11.140704154968262\n      ],\n      [\n        \"▁オリ\",\n        -11.14111614227295\n      ],\n      [\n        \"受\",\n        -11.141190528869629\n      ],\n      [\n        \"▁MC\",\n        -11.141395568847656\n      ],\n      [\n        \"糸\",\n        -11.141425132751465\n      ],\n      [\n        \"▁Ma\",\n        -11.14148998260498\n      ],\n      [\n        \"▁排出\",\n        -11.141571998596191\n      ],\n      [\n        \"ちょっと\",\n        -11.141683578491211\n      ],\n      [\n        \"▁ケン\",\n        -11.141769409179688\n      ],\n      [\n        \"普段\",\n        -11.142183303833008\n      ],\n      [\n        \"▁嵐\",\n        -11.14239501953125\n      ],\n      [\n        \"▁大量の\",\n        -11.142732620239258\n      ],\n      [\n        \"▁レコーディング\",\n        -11.142781257629395\n      ],\n      [\n        \"▁ヴァ\",\n        -11.142878532409668\n      ],\n      [\n        \"▁鑑定\",\n        -11.143060684204102\n      ],\n      [\n        \"▁ノウハウ\",\n        -11.143081665039062\n      ],\n      [\n        \"▁神宮\",\n        -11.1432523727417\n      ],\n      [\n        \"▁立地\",\n        -11.143402099609375\n      ],\n      [\n        \"▁you\",\n        -11.143715858459473\n      ],\n      [\n        \"▁支払\",\n        -11.14380931854248\n      ],\n      [\n        \"▁amp\",\n        -11.143832206726074\n      ],\n      [\n        \"▁科目\",\n        -11.143845558166504\n      ],\n      [\n        \"▁黒い\",\n        -11.144144058227539\n      ],\n      [\n        \"芸\",\n        -11.144231796264648\n      ],\n      [\n        \"ポート\",\n        -11.144296646118164\n      ],\n      [\n        \"▁棚\",\n        -11.144603729248047\n      ],\n      [\n        \"▁積み\",\n        -11.144722938537598\n      ],\n      [\n        \"▁小学\",\n        -11.14513111114502\n      ],\n      [\n        \"引\",\n        -11.145294189453125\n      ],\n      [\n        \"da\",\n        -11.14548397064209\n      ],\n      [\n        \"▁縮小\",\n        -11.14553451538086\n      ],\n      [\n        \"▁ホット\",\n        -11.145614624023438\n      ],\n      [\n        \"▁明るい\",\n        -11.146562576293945\n      ],\n      [\n        \"▁辛\",\n        -11.146714210510254\n      ],\n      [\n        \"▁ストーン\",\n        -11.14672565460205\n      ],\n      [\n        \"天皇\",\n        -11.146933555603027\n      ],\n      [\n        \"港\",\n        -11.147161483764648\n      ],\n      [\n        \"▁護\",\n        -11.147305488586426\n      ],\n      [\n        \"ci\",\n        -11.147397994995117\n      ],\n      [\n        \"▁広報\",\n        -11.147400856018066\n      ],\n      [\n        \"▁やった\",\n        -11.147429466247559\n      ],\n      [\n        \"ですから\",\n        -11.147440910339355\n      ],\n      [\n        \"影\",\n        -11.147502899169922\n      ],\n      [\n        \"▁認める\",\n        -11.147582054138184\n      ],\n      [\n        \"▁損失\",\n        -11.147869110107422\n      ],\n      [\n        \"▁夜間\",\n        -11.148197174072266\n      ],\n      [\n        \"▁遅れ\",\n        -11.148233413696289\n      ],\n      [\n        \"▁コンパクト\",\n        -11.149072647094727\n      ],\n      [\n        \"▁ポート\",\n        -11.149174690246582\n      ],\n      [\n        \"▁没\",\n        -11.149200439453125\n      ],\n      [\n        \"▁熟\",\n        -11.149261474609375\n      ],\n      [\n        \"▁順に\",\n        -11.149365425109863\n      ],\n      [\n        \"▁リラックス\",\n        -11.149900436401367\n      ],\n      [\n        \"▁抑える\",\n        -11.150152206420898\n      ],\n      [\n        \"▁伴って\",\n        -11.150172233581543\n      ],\n      [\n        \"切り\",\n        -11.15022087097168\n      ],\n      [\n        \"▁○○\",\n        -11.150519371032715\n      ],\n      [\n        \"▁指輪\",\n        -11.150593757629395\n      ],\n      [\n        \"財\",\n        -11.150599479675293\n      ],\n      [\n        \"▁精度\",\n        -11.150673866271973\n      ],\n      [\n        \"▁ネーム\",\n        -11.150786399841309\n      ],\n      [\n        \"▁カウンター\",\n        -11.150914192199707\n      ],\n      [\n        \"▁Facebook\",\n        -11.151005744934082\n      ],\n      [\n        \"▁過ごして\",\n        -11.151074409484863\n      ],\n      [\n        \"63\",\n        -11.151118278503418\n      ],\n      [\n        \"▁もたらす\",\n        -11.151350975036621\n      ],\n      [\n        \"▁称さ\",\n        -11.151597023010254\n      ],\n      [\n        \"▁創刊\",\n        -11.151901245117188\n      ],\n      [\n        \"▁上司\",\n        -11.152026176452637\n      ],\n      [\n        \"▁講習\",\n        -11.152177810668945\n      ],\n      [\n        \"▁敗北\",\n        -11.152234077453613\n      ],\n      [\n        \"脚\",\n        -11.152958869934082\n      ],\n      [\n        \"▁บ\",\n        -11.153033256530762\n      ],\n      [\n        \"▁論理\",\n        -11.153125762939453\n      ],\n      [\n        \"▁回路\",\n        -11.153398513793945\n      ],\n      [\n        \"▁除去\",\n        -11.15340518951416\n      ],\n      [\n        \"▁エッチ\",\n        -11.153813362121582\n      ],\n      [\n        \"▁ヌ\",\n        -11.153860092163086\n      ],\n      [\n        \"▁取り組む\",\n        -11.153923034667969\n      ],\n      [\n        \"▁脇\",\n        -11.154170036315918\n      ],\n      [\n        \"キュ\",\n        -11.154333114624023\n      ],\n      [\n        \"▁進んだ\",\n        -11.154475212097168\n      ],\n      [\n        \"▁結論\",\n        -11.154512405395508\n      ],\n      [\n        \"▁実態\",\n        -11.154820442199707\n      ],\n      [\n        \"塩\",\n        -11.15517807006836\n      ],\n      [\n        \"コス\",\n        -11.155219078063965\n      ],\n      [\n        \"▁玄関\",\n        -11.155641555786133\n      ],\n      [\n        \"ドリ\",\n        -11.155645370483398\n      ],\n      [\n        \"▁標高\",\n        -11.155689239501953\n      ],\n      [\n        \"以上\",\n        -11.155959129333496\n      ],\n      [\n        \"▁ポン\",\n        -11.156088829040527\n      ],\n      [\n        \"▁マニュアル\",\n        -11.156411170959473\n      ],\n      [\n        \"もと\",\n        -11.15673828125\n      ],\n      [\n        \"君\",\n        -11.156925201416016\n      ],\n      [\n        \"育\",\n        -11.156928062438965\n      ],\n      [\n        \"▁交際\",\n        -11.157575607299805\n      ],\n      [\n        \"▁集まり\",\n        -11.157659530639648\n      ],\n      [\n        \"▁立ち上げ\",\n        -11.157981872558594\n      ],\n      [\n        \"▁JAPAN\",\n        -11.158000946044922\n      ],\n      [\n        \"▁中身\",\n        -11.15807056427002\n      ],\n      [\n        \"▁前期\",\n        -11.158327102661133\n      ],\n      [\n        \"▁楽しめ\",\n        -11.158341407775879\n      ],\n      [\n        \"▁開いた\",\n        -11.158370018005371\n      ],\n      [\n        \"CE\",\n        -11.15842342376709\n      ],\n      [\n        \"ud\",\n        -11.158432960510254\n      ],\n      [\n        \"ヌス\",\n        -11.1586275100708\n      ],\n      [\n        \"▁法務\",\n        -11.158629417419434\n      ],\n      [\n        \"ウル\",\n        -11.158744812011719\n      ],\n      [\n        \"▁綿\",\n        -11.158841133117676\n      ],\n      [\n        \"▁心地\",\n        -11.158891677856445\n      ],\n      [\n        \"▁お互い\",\n        -11.158988952636719\n      ],\n      [\n        \"▁HD\",\n        -11.159071922302246\n      ],\n      [\n        \"1992\",\n        -11.159252166748047\n      ],\n      [\n        \"▁エリ\",\n        -11.159369468688965\n      ],\n      [\n        \"峰\",\n        -11.159462928771973\n      ],\n      [\n        \"▁ウルトラ\",\n        -11.159528732299805\n      ],\n      [\n        \"▁西洋\",\n        -11.159661293029785\n      ],\n      [\n        \"▁侵害\",\n        -11.15968132019043\n      ],\n      [\n        \"▁\",\n        -11.159724235534668\n      ],\n      [\n        \"床\",\n        -11.159926414489746\n      ],\n      [\n        \"300\",\n        -11.159939765930176\n      ],\n      [\n        \"ase\",\n        -11.159961700439453\n      ],\n      [\n        \"▁出馬\",\n        -11.160138130187988\n      ],\n      [\n        \"比\",\n        -11.16025447845459\n      ],\n      [\n        \"▁略称\",\n        -11.160445213317871\n      ],\n      [\n        \"▁延期\",\n        -11.16071891784668\n      ],\n      [\n        \"▁それなり\",\n        -11.161246299743652\n      ],\n      [\n        \"▁激しく\",\n        -11.161355018615723\n      ],\n      [\n        \"▁クッキー\",\n        -11.161578178405762\n      ],\n      [\n        \"告\",\n        -11.161748886108398\n      ],\n      [\n        \"▁ハム\",\n        -11.161771774291992\n      ],\n      [\n        \"▁来場\",\n        -11.161781311035156\n      ],\n      [\n        \"▁証言\",\n        -11.161859512329102\n      ],\n      [\n        \"▁殿\",\n        -11.161876678466797\n      ],\n      [\n        \"▁チップ\",\n        -11.161930084228516\n      ],\n      [\n        \"炎\",\n        -11.161980628967285\n      ],\n      [\n        \"▁土産\",\n        -11.162507057189941\n      ],\n      [\n        \"▁ヒル\",\n        -11.162551879882812\n      ],\n      [\n        \"▁即位\",\n        -11.162883758544922\n      ],\n      [\n        \"▁起きる\",\n        -11.162946701049805\n      ],\n      [\n        \"▁トヨタ\",\n        -11.163063049316406\n      ],\n      [\n        \"▁提唱\",\n        -11.163455963134766\n      ],\n      [\n        \"更に\",\n        -11.163748741149902\n      ],\n      [\n        \"▁返信\",\n        -11.16376781463623\n      ],\n      [\n        \"▁扱わ\",\n        -11.16378116607666\n      ],\n      [\n        \"▁フェイス\",\n        -11.163896560668945\n      ],\n      [\n        \"▁最中\",\n        -11.163958549499512\n      ],\n      [\n        \"▁いこう\",\n        -11.164285659790039\n      ],\n      [\n        \"▁タンク\",\n        -11.164800643920898\n      ],\n      [\n        \"▁前作\",\n        -11.164837837219238\n      ],\n      [\n        \"最初の\",\n        -11.165199279785156\n      ],\n      [\n        \"便\",\n        -11.165217399597168\n      ],\n      [\n        \"▁挙げる\",\n        -11.16525936126709\n      ],\n      [\n        \"たる\",\n        -11.165267944335938\n      ],\n      [\n        \"▁誠\",\n        -11.165288925170898\n      ],\n      [\n        \"▁往復\",\n        -11.165369987487793\n      ],\n      [\n        \"▁ステークス\",\n        -11.165371894836426\n      ],\n      [\n        \"▁001\",\n        -11.165592193603516\n      ],\n      [\n        \"per\",\n        -11.166014671325684\n      ],\n      [\n        \"ェ\",\n        -11.166340827941895\n      ],\n      [\n        \"バラ\",\n        -11.166842460632324\n      ],\n      [\n        \"▁シンガポール\",\n        -11.167031288146973\n      ],\n      [\n        \"▁育て\",\n        -11.16710376739502\n      ],\n      [\n        \"リカ\",\n        -11.167280197143555\n      ],\n      [\n        \"▁編曲\",\n        -11.167304992675781\n      ],\n      [\n        \"▁セブン\",\n        -11.167372703552246\n      ],\n      [\n        \"▁頻度\",\n        -11.167413711547852\n      ],\n      [\n        \"ex\",\n        -11.167454719543457\n      ],\n      [\n        \"▁知的\",\n        -11.167464256286621\n      ],\n      [\n        \"収録\",\n        -11.167593955993652\n      ],\n      [\n        \"カリ\",\n        -11.167817115783691\n      ],\n      [\n        \"ーニ\",\n        -11.167837142944336\n      ],\n      [\n        \"▁増えた\",\n        -11.167881965637207\n      ],\n      [\n        \"▁AD\",\n        -11.167928695678711\n      ],\n      [\n        \"▁向いて\",\n        -11.168006896972656\n      ],\n      [\n        \"▁OFF\",\n        -11.168107986450195\n      ],\n      [\n        \"▁異なって\",\n        -11.16812515258789\n      ],\n      [\n        \"▁恵ま\",\n        -11.168168067932129\n      ],\n      [\n        \"▁マイク\",\n        -11.168325424194336\n      ],\n      [\n        \"▁面倒\",\n        -11.16850471496582\n      ],\n      [\n        \"▁エンド\",\n        -11.168529510498047\n      ],\n      [\n        \"▁誇る\",\n        -11.168784141540527\n      ],\n      [\n        \"400\",\n        -11.168827056884766\n      ],\n      [\n        \"▁ギャラリー\",\n        -11.168951988220215\n      ],\n      [\n        \"▁いらっしゃる\",\n        -11.1690092086792\n      ],\n      [\n        \"▁ボーカル\",\n        -11.169267654418945\n      ],\n      [\n        \"▁ヒト\",\n        -11.169368743896484\n      ],\n      [\n        \"▁暗殺\",\n        -11.169442176818848\n      ],\n      [\n        \"▁領土\",\n        -11.169553756713867\n      ],\n      [\n        \"▁ダメ\",\n        -11.169644355773926\n      ],\n      [\n        \"▁見つけて\",\n        -11.16970157623291\n      ],\n      [\n        \"▁腸\",\n        -11.16972541809082\n      ],\n      [\n        \"▁ドリンク\",\n        -11.169740676879883\n      ],\n      [\n        \"ッティ\",\n        -11.16980266571045\n      ],\n      [\n        \"学校\",\n        -11.169866561889648\n      ],\n      [\n        \"▁parenti\",\n        -11.170047760009766\n      ],\n      [\n        \"縁\",\n        -11.170379638671875\n      ],\n      [\n        \"シーズン\",\n        -11.17052936553955\n      ],\n      [\n        \"舎\",\n        -11.170757293701172\n      ],\n      [\n        \"▁寮\",\n        -11.170844078063965\n      ],\n      [\n        \"▁闇\",\n        -11.170909881591797\n      ],\n      [\n        \"▁スパイ\",\n        -11.171137809753418\n      ],\n      [\n        \"▁開拓\",\n        -11.171435356140137\n      ],\n      [\n        \"1993\",\n        -11.171619415283203\n      ],\n      [\n        \"修\",\n        -11.171769142150879\n      ],\n      [\n        \"未\",\n        -11.171880722045898\n      ],\n      [\n        \"▁逆転\",\n        -11.171996116638184\n      ],\n      [\n        \"▁モニター\",\n        -11.17211627960205\n      ],\n      [\n        \"▁習得\",\n        -11.172202110290527\n      ],\n      [\n        \"▁カラオケ\",\n        -11.172212600708008\n      ],\n      [\n        \"▁売って\",\n        -11.17227554321289\n      ],\n      [\n        \"▁分かれて\",\n        -11.172292709350586\n      ],\n      [\n        \"▁内科\",\n        -11.172699928283691\n      ],\n      [\n        \"▁理念\",\n        -11.172710418701172\n      ],\n      [\n        \"▁入居\",\n        -11.172730445861816\n      ],\n      [\n        \"積\",\n        -11.173418998718262\n      ],\n      [\n        \"▁もち\",\n        -11.173659324645996\n      ],\n      [\n        \"▁予\",\n        -11.174084663391113\n      ],\n      [\n        \"▁国連\",\n        -11.174090385437012\n      ],\n      [\n        \"▁フォロー\",\n        -11.174162864685059\n      ],\n      [\n        \"バーグ\",\n        -11.174300193786621\n      ],\n      [\n        \"▁割り\",\n        -11.174359321594238\n      ],\n      [\n        \"▁コマ\",\n        -11.17453384399414\n      ],\n      [\n        \"ヴァン\",\n        -11.17460823059082\n      ],\n      [\n        \"っぽ\",\n        -11.174657821655273\n      ],\n      [\n        \"づけ\",\n        -11.174695014953613\n      ],\n      [\n        \"▁習\",\n        -11.174846649169922\n      ],\n      [\n        \"▁160\",\n        -11.175012588500977\n      ],\n      [\n        \"レル\",\n        -11.175114631652832\n      ],\n      [\n        \"福岡\",\n        -11.175183296203613\n      ],\n      [\n        \"▁出会う\",\n        -11.175212860107422\n      ],\n      [\n        \"▁エース\",\n        -11.175410270690918\n      ],\n      [\n        \"▁トランス\",\n        -11.17553424835205\n      ],\n      [\n        \"訳\",\n        -11.176227569580078\n      ],\n      [\n        \"退\",\n        -11.176260948181152\n      ],\n      [\n        \"ザン\",\n        -11.176604270935059\n      ],\n      [\n        \"▁本当\",\n        -11.176633834838867\n      ],\n      [\n        \"IM\",\n        -11.176642417907715\n      ],\n      [\n        \"益\",\n        -11.17667293548584\n      ],\n      [\n        \"▁根本\",\n        -11.176709175109863\n      ],\n      [\n        \"▁ビジョン\",\n        -11.176787376403809\n      ],\n      [\n        \"▁銀河\",\n        -11.176854133605957\n      ],\n      [\n        \"銀\",\n        -11.177013397216797\n      ],\n      [\n        \"緒\",\n        -11.17747974395752\n      ],\n      [\n        \"▁追放\",\n        -11.177504539489746\n      ],\n      [\n        \"▁分裂\",\n        -11.177695274353027\n      ],\n      [\n        \"PA\",\n        -11.177823066711426\n      ],\n      [\n        \"▁世間\",\n        -11.17786979675293\n      ],\n      [\n        \"▁アイコン\",\n        -11.177946090698242\n      ],\n      [\n        \"▁クール\",\n        -11.177960395812988\n      ],\n      [\n        \"結\",\n        -11.178236961364746\n      ],\n      [\n        \"▁任\",\n        -11.178281784057617\n      ],\n      [\n        \"▁暦\",\n        -11.178520202636719\n      ],\n      [\n        \"▁双\",\n        -11.17859172821045\n      ],\n      [\n        \"▁一般に\",\n        -11.178689002990723\n      ],\n      [\n        \"▁密度\",\n        -11.178766250610352\n      ],\n      [\n        \"▁支店\",\n        -11.17885684967041\n      ],\n      [\n        \"▁菊\",\n        -11.178945541381836\n      ],\n      [\n        \"▁伸び\",\n        -11.179327011108398\n      ],\n      [\n        \"税\",\n        -11.179327011108398\n      ],\n      [\n        \"シャー\",\n        -11.1793851852417\n      ],\n      [\n        \"▁寝て\",\n        -11.179398536682129\n      ],\n      [\n        \"子ども\",\n        -11.179431915283203\n      ],\n      [\n        \"▁禁じ\",\n        -11.179495811462402\n      ],\n      [\n        \"▁休業\",\n        -11.17971134185791\n      ],\n      [\n        \"▁代謝\",\n        -11.179896354675293\n      ],\n      [\n        \"▁1966\",\n        -11.180038452148438\n      ],\n      [\n        \"▁彫刻\",\n        -11.180233001708984\n      ],\n      [\n        \"▁Tr\",\n        -11.180266380310059\n      ],\n      [\n        \"▁多様な\",\n        -11.18028450012207\n      ],\n      [\n        \"▁同僚\",\n        -11.180371284484863\n      ],\n      [\n        \"▁欠かせ\",\n        -11.18038558959961\n      ],\n      [\n        \"▁101\",\n        -11.1806058883667\n      ],\n      [\n        \"▁独占\",\n        -11.180792808532715\n      ],\n      [\n        \"▁勇\",\n        -11.180814743041992\n      ],\n      [\n        \"▁オープニング\",\n        -11.180863380432129\n      ],\n      [\n        \"魔\",\n        -11.181120872497559\n      ],\n      [\n        \"▁教える\",\n        -11.181143760681152\n      ],\n      [\n        \"▁疑い\",\n        -11.181478500366211\n      ],\n      [\n        \"▁果たし\",\n        -11.181641578674316\n      ],\n      [\n        \"▁悩ま\",\n        -11.181647300720215\n      ],\n      [\n        \"共\",\n        -11.181796073913574\n      ],\n      [\n        \"▁350\",\n        -11.182013511657715\n      ],\n      [\n        \"▁ベルギー\",\n        -11.18209457397461\n      ],\n      [\n        \"om\",\n        -11.182267189025879\n      ],\n      [\n        \"▁比率\",\n        -11.182297706604004\n      ],\n      [\n        \"▁モンゴル\",\n        -11.182564735412598\n      ],\n      [\n        \"▁現存\",\n        -11.182600975036621\n      ],\n      [\n        \"▁破\",\n        -11.18280029296875\n      ],\n      [\n        \"▁屋敷\",\n        -11.182907104492188\n      ],\n      [\n        \"▁飼育\",\n        -11.182942390441895\n      ],\n      [\n        \"▁フォ\",\n        -11.182976722717285\n      ],\n      [\n        \"▁中華人民共和国\",\n        -11.183018684387207\n      ],\n      [\n        \"▁題材\",\n        -11.183428764343262\n      ],\n      [\n        \"▁本名\",\n        -11.1835298538208\n      ],\n      [\n        \"▁修復\",\n        -11.184103012084961\n      ],\n      [\n        \"▁説得\",\n        -11.18416690826416\n      ],\n      [\n        \"▁働ける\",\n        -11.184188842773438\n      ],\n      [\n        \"▁嘉\",\n        -11.184316635131836\n      ],\n      [\n        \"▁起き\",\n        -11.184513092041016\n      ],\n      [\n        \"▁汚染\",\n        -11.184640884399414\n      ],\n      [\n        \"▁夕\",\n        -11.184725761413574\n      ],\n      [\n        \"▁バイオ\",\n        -11.184893608093262\n      ],\n      [\n        \"▁出店\",\n        -11.184952735900879\n      ],\n      [\n        \"▁カリ\",\n        -11.184967994689941\n      ],\n      [\n        \"▁慶\",\n        -11.185022354125977\n      ],\n      [\n        \"▁見方\",\n        -11.185129165649414\n      ],\n      [\n        \"▁芸人\",\n        -11.185478210449219\n      ],\n      [\n        \"▁いかなる\",\n        -11.185693740844727\n      ],\n      [\n        \"▁戦死\",\n        -11.185722351074219\n      ],\n      [\n        \"▁検定\",\n        -11.185839653015137\n      ],\n      [\n        \"▁シナリオ\",\n        -11.185930252075195\n      ],\n      [\n        \"▁シフト\",\n        -11.186119079589844\n      ],\n      [\n        \"▁演じた\",\n        -11.186344146728516\n      ],\n      [\n        \"▁短編\",\n        -11.186500549316406\n      ],\n      [\n        \"▁発着\",\n        -11.18667221069336\n      ],\n      [\n        \"▁にくく\",\n        -11.186734199523926\n      ],\n      [\n        \"▁そのうち\",\n        -11.18686294555664\n      ],\n      [\n        \"▁近郊\",\n        -11.18740463256836\n      ],\n      [\n        \"▁ω\",\n        -11.187483787536621\n      ],\n      [\n        \"▁辞任\",\n        -11.187500953674316\n      ],\n      [\n        \"▁原理\",\n        -11.187870025634766\n      ],\n      [\n        \"▁分岐\",\n        -11.18794059753418\n      ],\n      [\n        \"▁差し\",\n        -11.187965393066406\n      ],\n      [\n        \"▁求めた\",\n        -11.188152313232422\n      ],\n      [\n        \"▁完全な\",\n        -11.18833065032959\n      ],\n      [\n        \"▁トレンド\",\n        -11.188982963562012\n      ],\n      [\n        \"▁辛い\",\n        -11.189040184020996\n      ],\n      [\n        \"設\",\n        -11.189064025878906\n      ],\n      [\n        \"▁US\",\n        -11.189116477966309\n      ],\n      [\n        \"▁浩\",\n        -11.189573287963867\n      ],\n      [\n        \"▁DE\",\n        -11.189831733703613\n      ],\n      [\n        \"ストラ\",\n        -11.189837455749512\n      ],\n      [\n        \"▁92\",\n        -11.189860343933105\n      ],\n      [\n        \"円\",\n        -11.189926147460938\n      ],\n      [\n        \"▁英雄\",\n        -11.190080642700195\n      ],\n      [\n        \"▁刻\",\n        -11.190104484558105\n      ],\n      [\n        \"韓国\",\n        -11.190227508544922\n      ],\n      [\n        \"son\",\n        -11.19031047821045\n      ],\n      [\n        \"奥\",\n        -11.190366744995117\n      ],\n      [\n        \"堀\",\n        -11.190507888793945\n      ],\n      [\n        \"▁コスメ\",\n        -11.190641403198242\n      ],\n      [\n        \"▁皆さま\",\n        -11.19083023071289\n      ],\n      [\n        \"▁郊外\",\n        -11.191027641296387\n      ],\n      [\n        \"▁耐え\",\n        -11.191130638122559\n      ],\n      [\n        \"▁便利です\",\n        -11.191193580627441\n      ],\n      [\n        \"▁プロモーション\",\n        -11.191213607788086\n      ],\n      [\n        \"▁関わり\",\n        -11.191244125366211\n      ],\n      [\n        \"▁反発\",\n        -11.191386222839355\n      ],\n      [\n        \"▁お腹\",\n        -11.19150447845459\n      ],\n      [\n        \"1991\",\n        -11.191524505615234\n      ],\n      [\n        \"ーゼ\",\n        -11.191598892211914\n      ],\n      [\n        \"▁検\",\n        -11.191773414611816\n      ],\n      [\n        \"▁クラフト\",\n        -11.191802024841309\n      ],\n      [\n        \":\",\n        -11.19196605682373\n      ],\n      [\n        \"▁超えた\",\n        -11.192171096801758\n      ],\n      [\n        \"▁モスクワ\",\n        -11.192272186279297\n      ],\n      [\n        \"▁更\",\n        -11.192636489868164\n      ],\n      [\n        \"▁すずかけ\",\n        -11.19270133972168\n      ],\n      [\n        \"ゃ\",\n        -11.192959785461426\n      ],\n      [\n        \"▁テン\",\n        -11.193077087402344\n      ],\n      [\n        \"▁マイナー\",\n        -11.19308090209961\n      ],\n      [\n        \"▁合理\",\n        -11.193203926086426\n      ],\n      [\n        \"ワイ\",\n        -11.193534851074219\n      ],\n      [\n        \"▁配合\",\n        -11.193808555603027\n      ],\n      [\n        \"ダル\",\n        -11.193887710571289\n      ],\n      [\n        \"▁覚え\",\n        -11.193995475769043\n      ],\n      [\n        \"▁損\",\n        -11.19400405883789\n      ],\n      [\n        \"▁無効\",\n        -11.194177627563477\n      ],\n      [\n        \"▁柔道\",\n        -11.194196701049805\n      ],\n      [\n        \"時間\",\n        -11.1942138671875\n      ],\n      [\n        \"▁生まれて\",\n        -11.194589614868164\n      ],\n      [\n        \"▁ด\",\n        -11.194689750671387\n      ],\n      [\n        \"▁係る\",\n        -11.194785118103027\n      ],\n      [\n        \"▁日曜\",\n        -11.194862365722656\n      ],\n      [\n        \"AI\",\n        -11.194865226745605\n      ],\n      [\n        \"▁仲介\",\n        -11.194987297058105\n      ],\n      [\n        \"注\",\n        -11.195239067077637\n      ],\n      [\n        \"▁ソーシャル\",\n        -11.195320129394531\n      ],\n      [\n        \"▁身長\",\n        -11.195496559143066\n      ],\n      [\n        \"▁マウス\",\n        -11.195672035217285\n      ],\n      [\n        \"▁行なわ\",\n        -11.195698738098145\n      ],\n      [\n        \"▁シェ\",\n        -11.195731163024902\n      ],\n      [\n        \"ブログ\",\n        -11.196207046508789\n      ],\n      [\n        \"▁禁\",\n        -11.19627857208252\n      ],\n      [\n        \"特徴\",\n        -11.196404457092285\n      ],\n      [\n        \"▁踏み\",\n        -11.196565628051758\n      ],\n      [\n        \"いち\",\n        -11.196579933166504\n      ],\n      [\n        \"ウェア\",\n        -11.1965970993042\n      ],\n      [\n        \"▁打撃\",\n        -11.197020530700684\n      ],\n      [\n        \"▁鳴\",\n        -11.197056770324707\n      ],\n      [\n        \"こうして\",\n        -11.197328567504883\n      ],\n      [\n        \"▁独特の\",\n        -11.197381019592285\n      ],\n      [\n        \"▁伯爵\",\n        -11.197382926940918\n      ],\n      [\n        \"▁浦\",\n        -11.19739818572998\n      ],\n      [\n        \"▁ロバート\",\n        -11.197425842285156\n      ],\n      [\n        \"▁ボン\",\n        -11.197456359863281\n      ],\n      [\n        \"▁延\",\n        -11.19747543334961\n      ],\n      [\n        \"▁コンピューター\",\n        -11.197554588317871\n      ],\n      [\n        \"以後\",\n        -11.197802543640137\n      ],\n      [\n        \"トップ\",\n        -11.198040008544922\n      ],\n      [\n        \"▁そうした\",\n        -11.198110580444336\n      ],\n      [\n        \"複数\",\n        -11.198209762573242\n      ],\n      [\n        \"▁称号\",\n        -11.198751449584961\n      ],\n      [\n        \"▁築\",\n        -11.198899269104004\n      ],\n      [\n        \"▁北九州\",\n        -11.19892406463623\n      ],\n      [\n        \"アス\",\n        -11.198967933654785\n      ],\n      [\n        \"つく\",\n        -11.199387550354004\n      ],\n      [\n        \"▁\",\n        -11.199543952941895\n      ],\n      [\n        \"▁スー\",\n        -11.200328826904297\n      ],\n      [\n        \"▁コメディ\",\n        -11.20036792755127\n      ],\n      [\n        \"カス\",\n        -11.200494766235352\n      ],\n      [\n        \"▁丘\",\n        -11.200531959533691\n      ],\n      [\n        \"▁オレンジ\",\n        -11.20058536529541\n      ],\n      [\n        \"▁77\",\n        -11.200611114501953\n      ],\n      [\n        \"▁有効に\",\n        -11.200738906860352\n      ],\n      [\n        \"一部\",\n        -11.201127052307129\n      ],\n      [\n        \"IX\",\n        -11.201128005981445\n      ],\n      [\n        \"▁大字\",\n        -11.201635360717773\n      ],\n      [\n        \"▁中山\",\n        -11.201746940612793\n      ],\n      [\n        \"_\",\n        -11.201926231384277\n      ],\n      [\n        \"▁ドラム\",\n        -11.201957702636719\n      ],\n      [\n        \"▁スイーツ\",\n        -11.20251750946045\n      ],\n      [\n        \"▁アド\",\n        -11.202539443969727\n      ],\n      [\n        \"▁駆動\",\n        -11.202783584594727\n      ],\n      [\n        \"▁寄り\",\n        -11.203055381774902\n      ],\n      [\n        \"1960\",\n        -11.203094482421875\n      ],\n      [\n        \"▁医科\",\n        -11.203174591064453\n      ],\n      [\n        \"▁残った\",\n        -11.203251838684082\n      ],\n      [\n        \"▁訪れ\",\n        -11.203529357910156\n      ],\n      [\n        \"▁いかに\",\n        -11.203561782836914\n      ],\n      [\n        \"▁後方\",\n        -11.203773498535156\n      ],\n      [\n        \"▁悪魔\",\n        -11.203858375549316\n      ],\n      [\n        \"▁予め\",\n        -11.20390796661377\n      ],\n      [\n        \"▁カレンダー\",\n        -11.2039155960083\n      ],\n      [\n        \"▁原料\",\n        -11.20406723022461\n      ],\n      [\n        \"フィン\",\n        -11.204084396362305\n      ],\n      [\n        \"ファイ\",\n        -11.20411491394043\n      ],\n      [\n        \"▁67\",\n        -11.204312324523926\n      ],\n      [\n        \"▁まさ\",\n        -11.204334259033203\n      ],\n      [\n        \"are\",\n        -11.204570770263672\n      ],\n      [\n        \"▁同日\",\n        -11.204879760742188\n      ],\n      [\n        \"▁こども\",\n        -11.205089569091797\n      ],\n      [\n        \"▁景\",\n        -11.205164909362793\n      ],\n      [\n        \"▁公務\",\n        -11.205227851867676\n      ],\n      [\n        \"当たり\",\n        -11.205292701721191\n      ],\n      [\n        \"ti\",\n        -11.20530891418457\n      ],\n      [\n        \"冬\",\n        -11.205323219299316\n      ],\n      [\n        \"▁日経\",\n        -11.20544147491455\n      ],\n      [\n        \"▁直線\",\n        -11.205628395080566\n      ],\n      [\n        \"柱\",\n        -11.205765724182129\n      ],\n      [\n        \"▁突\",\n        -11.205798149108887\n      ],\n      [\n        \"▁革\",\n        -11.205862045288086\n      ],\n      [\n        \"▁84\",\n        -11.205920219421387\n      ],\n      [\n        \"▁装\",\n        -11.206134796142578\n      ],\n      [\n        \"▁ばかりの\",\n        -11.206146240234375\n      ],\n      [\n        \"▁部位\",\n        -11.206292152404785\n      ],\n      [\n        \"▁手続\",\n        -11.206348419189453\n      ],\n      [\n        \"CH\",\n        -11.206485748291016\n      ],\n      [\n        \"▁妙\",\n        -11.206552505493164\n      ],\n      [\n        \"▁稼働\",\n        -11.206623077392578\n      ],\n      [\n        \"周\",\n        -11.207000732421875\n      ],\n      [\n        \"▁在学\",\n        -11.207255363464355\n      ],\n      [\n        \"600\",\n        -11.20737361907959\n      ],\n      [\n        \"▁正月\",\n        -11.207691192626953\n      ],\n      [\n        \"▁出会った\",\n        -11.207839012145996\n      ],\n      [\n        \"▁会う\",\n        -11.20788860321045\n      ],\n      [\n        \"▁満たす\",\n        -11.207967758178711\n      ],\n      [\n        \"▁あわせて\",\n        -11.208076477050781\n      ],\n      [\n        \"▁熟女\",\n        -11.208452224731445\n      ],\n      [\n        \"▁せよ\",\n        -11.208707809448242\n      ],\n      [\n        \"▁付与\",\n        -11.208971977233887\n      ],\n      [\n        \"▁黄色\",\n        -11.209065437316895\n      ],\n      [\n        \"▁上級\",\n        -11.209426879882812\n      ],\n      [\n        \"▁爆撃\",\n        -11.20968246459961\n      ],\n      [\n        \"▁奪わ\",\n        -11.20999526977539\n      ],\n      [\n        \"▁マス\",\n        -11.210065841674805\n      ],\n      [\n        \"焼\",\n        -11.210171699523926\n      ],\n      [\n        \"▁偽\",\n        -11.210179328918457\n      ],\n      [\n        \"ウム\",\n        -11.210210800170898\n      ],\n      [\n        \"▁金曜日\",\n        -11.210319519042969\n      ],\n      [\n        \"▁SM\",\n        -11.210561752319336\n      ],\n      [\n        \"▁分間\",\n        -11.210888862609863\n      ],\n      [\n        \"▁アイス\",\n        -11.211010932922363\n      ],\n      [\n        \"▁上限\",\n        -11.211106300354004\n      ],\n      [\n        \"▁報\",\n        -11.211133003234863\n      ],\n      [\n        \"▁フェスティバル\",\n        -11.211409568786621\n      ],\n      [\n        \"▁着物\",\n        -11.211430549621582\n      ],\n      [\n        \"▁ナビ\",\n        -11.211495399475098\n      ],\n      [\n        \"内容\",\n        -11.21160888671875\n      ],\n      [\n        \"▁正面\",\n        -11.211615562438965\n      ],\n      [\n        \"鹿\",\n        -11.21182918548584\n      ],\n      [\n        \"液\",\n        -11.211929321289062\n      ],\n      [\n        \"▁バレエ\",\n        -11.212075233459473\n      ],\n      [\n        \"▁なさい\",\n        -11.2120943069458\n      ],\n      [\n        \"▁見積もり\",\n        -11.2121000289917\n      ],\n      [\n        \"▁不思議な\",\n        -11.212179183959961\n      ],\n      [\n        \"ea\",\n        -11.212262153625488\n      ],\n      [\n        \"▁功績\",\n        -11.212418556213379\n      ],\n      [\n        \"現代\",\n        -11.212424278259277\n      ],\n      [\n        \"▁参\",\n        -11.212726593017578\n      ],\n      [\n        \"▁狂\",\n        -11.212760925292969\n      ],\n      [\n        \"ton\",\n        -11.212775230407715\n      ],\n      [\n        \"▁一員\",\n        -11.212797164916992\n      ],\n      [\n        \"ァ\",\n        -11.212809562683105\n      ],\n      [\n        \"ast\",\n        -11.212967872619629\n      ],\n      [\n        \"▁一家\",\n        -11.213105201721191\n      ],\n      [\n        \"▁示し\",\n        -11.2131986618042\n      ],\n      [\n        \"▁電波\",\n        -11.213287353515625\n      ],\n      [\n        \"▁出資\",\n        -11.213458061218262\n      ],\n      [\n        \"▁重要です\",\n        -11.213509559631348\n      ],\n      [\n        \"ウン\",\n        -11.213539123535156\n      ],\n      [\n        \"▁SA\",\n        -11.213555335998535\n      ],\n      [\n        \"▁抽出\",\n        -11.21360969543457\n      ],\n      [\n        \"▁見つけた\",\n        -11.213801383972168\n      ],\n      [\n        \"▁海洋\",\n        -11.213980674743652\n      ],\n      [\n        \"モー\",\n        -11.214181900024414\n      ],\n      [\n        \"▁1963\",\n        -11.214247703552246\n      ],\n      [\n        \"ネン\",\n        -11.21495532989502\n      ],\n      [\n        \"▁運び\",\n        -11.21500301361084\n      ],\n      [\n        \"▁増やす\",\n        -11.215011596679688\n      ],\n      [\n        \"▁先頭\",\n        -11.215456008911133\n      ],\n      [\n        \"▁Vol\",\n        -11.215618133544922\n      ],\n      [\n        \"がら\",\n        -11.215831756591797\n      ],\n      [\n        \"ink\",\n        -11.215975761413574\n      ],\n      [\n        \"▁一旦\",\n        -11.216080665588379\n      ],\n      [\n        \"書き\",\n        -11.216251373291016\n      ],\n      [\n        \"▁休\",\n        -11.216267585754395\n      ],\n      [\n        \"】\",\n        -11.216268539428711\n      ],\n      [\n        \"▁次男\",\n        -11.216370582580566\n      ],\n      [\n        \"ツァ\",\n        -11.216644287109375\n      ],\n      [\n        \"▁text\",\n        -11.2166748046875\n      ],\n      [\n        \"▁ぼ\",\n        -11.216713905334473\n      ],\n      [\n        \"▁移\",\n        -11.21690845489502\n      ],\n      [\n        \"ムス\",\n        -11.217013359069824\n      ],\n      [\n        \"▁me\",\n        -11.217039108276367\n      ],\n      [\n        \"ok\",\n        -11.217190742492676\n      ],\n      [\n        \"og\",\n        -11.217573165893555\n      ],\n      [\n        \"au\",\n        -11.21762466430664\n      ],\n      [\n        \"▁フロ\",\n        -11.217656135559082\n      ],\n      [\n        \"徒\",\n        -11.217942237854004\n      ],\n      [\n        \"▁選考\",\n        -11.217957496643066\n      ],\n      [\n        \"▁リズム\",\n        -11.21813678741455\n      ],\n      [\n        \"▁住居\",\n        -11.21821117401123\n      ],\n      [\n        \"漢\",\n        -11.218411445617676\n      ],\n      [\n        \"▁横断\",\n        -11.218633651733398\n      ],\n      [\n        \"▁法則\",\n        -11.218692779541016\n      ],\n      [\n        \"▁問い\",\n        -11.218805313110352\n      ],\n      [\n        \"▁フィルタ\",\n        -11.219124794006348\n      ],\n      [\n        \"▁工具\",\n        -11.219237327575684\n      ],\n      [\n        \"▁議席\",\n        -11.219292640686035\n      ],\n      [\n        \"▁給与\",\n        -11.219608306884766\n      ],\n      [\n        \"▁フー\",\n        -11.219627380371094\n      ],\n      [\n        \"初期\",\n        -11.219770431518555\n      ],\n      [\n        \"▁三井\",\n        -11.21984577178955\n      ],\n      [\n        \"▁包囲\",\n        -11.220176696777344\n      ],\n      [\n        \"gi\",\n        -11.220251083374023\n      ],\n      [\n        \"▁ml\",\n        -11.220259666442871\n      ],\n      [\n        \"▁松山\",\n        -11.220343589782715\n      ],\n      [\n        \"しん\",\n        -11.220752716064453\n      ],\n      [\n        \"▁八幡\",\n        -11.22105884552002\n      ],\n      [\n        \"▁ゾーン\",\n        -11.221070289611816\n      ],\n      [\n        \"暦\",\n        -11.221115112304688\n      ],\n      [\n        \"▁満載\",\n        -11.221386909484863\n      ],\n      [\n        \"▁何でも\",\n        -11.221582412719727\n      ],\n      [\n        \"獄\",\n        -11.221647262573242\n      ],\n      [\n        \"la\",\n        -11.222034454345703\n      ],\n      [\n        \"農\",\n        -11.222223281860352\n      ],\n      [\n        \"▁特任\",\n        -11.222309112548828\n      ],\n      [\n        \"ひと\",\n        -11.222819328308105\n      ],\n      [\n        \"▁〕\",\n        -11.222848892211914\n      ],\n      [\n        \"▁CS\",\n        -11.222954750061035\n      ],\n      [\n        \"▁胃\",\n        -11.223010063171387\n      ],\n      [\n        \"▁懐\",\n        -11.223217010498047\n      ],\n      [\n        \"▁至った\",\n        -11.22325611114502\n      ],\n      [\n        \"早\",\n        -11.223502159118652\n      ],\n      [\n        \"▁ボート\",\n        -11.223770141601562\n      ],\n      [\n        \"▁撤去\",\n        -11.223875999450684\n      ],\n      [\n        \"▁天使\",\n        -11.224125862121582\n      ],\n      [\n        \"▁猛\",\n        -11.22416877746582\n      ],\n      [\n        \"▁美し\",\n        -11.224244117736816\n      ],\n      [\n        \"▁本店\",\n        -11.224471092224121\n      ],\n      [\n        \"▁ポンド\",\n        -11.224569320678711\n      ],\n      [\n        \"▁とりあえず\",\n        -11.22480297088623\n      ],\n      [\n        \"▁たて\",\n        -11.224831581115723\n      ],\n      [\n        \"散\",\n        -11.22500991821289\n      ],\n      [\n        \"▁本館\",\n        -11.225018501281738\n      ],\n      [\n        \"▁誠に\",\n        -11.22510051727295\n      ],\n      [\n        \"等\",\n        -11.225411415100098\n      ],\n      [\n        \"▁退団\",\n        -11.225586891174316\n      ],\n      [\n        \"▁勇気\",\n        -11.2256498336792\n      ],\n      [\n        \"▁帰還\",\n        -11.225695610046387\n      ],\n      [\n        \"▁なきゃ\",\n        -11.225712776184082\n      ],\n      [\n        \"須\",\n        -11.225713729858398\n      ],\n      [\n        \"▁制服\",\n        -11.225786209106445\n      ],\n      [\n        \"▁ログ\",\n        -11.225963592529297\n      ],\n      [\n        \"▁相撲\",\n        -11.22646713256836\n      ],\n      [\n        \"▁手帳\",\n        -11.22648811340332\n      ],\n      [\n        \"▁なかったり\",\n        -11.226493835449219\n      ],\n      [\n        \"▁EC\",\n        -11.226553916931152\n      ],\n      [\n        \"▁集める\",\n        -11.226598739624023\n      ],\n      [\n        \"▁策定\",\n        -11.226823806762695\n      ],\n      [\n        \"▁Go\",\n        -11.227035522460938\n      ],\n      [\n        \"ish\",\n        -11.227214813232422\n      ],\n      [\n        \"▁巨大\",\n        -11.227228164672852\n      ],\n      [\n        \"▁おいた\",\n        -11.227672576904297\n      ],\n      [\n        \"▁畳\",\n        -11.22768783569336\n      ],\n      [\n        \"do\",\n        -11.227696418762207\n      ],\n      [\n        \"せば\",\n        -11.227723121643066\n      ],\n      [\n        \"▁思ったら\",\n        -11.227728843688965\n      ],\n      [\n        \"▁ノン\",\n        -11.227776527404785\n      ],\n      [\n        \"▁血管\",\n        -11.22780990600586\n      ],\n      [\n        \"リウス\",\n        -11.227967262268066\n      ],\n      [\n        \"▁幻\",\n        -11.228130340576172\n      ],\n      [\n        \"▁池袋\",\n        -11.228519439697266\n      ],\n      [\n        \"▁仕掛け\",\n        -11.22854232788086\n      ],\n      [\n        \"▁ミラー\",\n        -11.22866153717041\n      ],\n      [\n        \"▁ポスター\",\n        -11.228771209716797\n      ],\n      [\n        \"▁ダイヤモンド\",\n        -11.228797912597656\n      ],\n      [\n        \"▁SE\",\n        -11.228976249694824\n      ],\n      [\n        \"▁参謀\",\n        -11.229023933410645\n      ],\n      [\n        \"MP\",\n        -11.229247093200684\n      ],\n      [\n        \"▁監査\",\n        -11.22945785522461\n      ],\n      [\n        \"▁みたら\",\n        -11.229522705078125\n      ],\n      [\n        \"エー\",\n        -11.22955322265625\n      ],\n      [\n        \"▁杉\",\n        -11.229666709899902\n      ],\n      [\n        \"▁マッチング\",\n        -11.22990894317627\n      ],\n      [\n        \"プス\",\n        -11.230198860168457\n      ],\n      [\n        \"率\",\n        -11.230542182922363\n      ],\n      [\n        \"▁74\",\n        -11.230666160583496\n      ],\n      [\n        \"▁エンディング\",\n        -11.230681419372559\n      ],\n      [\n        \"▁桂\",\n        -11.231000900268555\n      ],\n      [\n        \"▁キャッシュ\",\n        -11.231082916259766\n      ],\n      [\n        \"▁家臣\",\n        -11.231096267700195\n      ],\n      [\n        \"▁苦手\",\n        -11.231209754943848\n      ],\n      [\n        \"▁130\",\n        -11.23137092590332\n      ],\n      [\n        \"▁先日\",\n        -11.231552124023438\n      ],\n      [\n        \"▁解約\",\n        -11.231616020202637\n      ],\n      [\n        \"▁早稲田\",\n        -11.231773376464844\n      ],\n      [\n        \"封\",\n        -11.232115745544434\n      ],\n      [\n        \"▁倶楽部\",\n        -11.232126235961914\n      ],\n      [\n        \"▁ギリシア\",\n        -11.232259750366211\n      ],\n      [\n        \"▁個々\",\n        -11.232283592224121\n      ],\n      [\n        \"▁取れる\",\n        -11.232376098632812\n      ],\n      [\n        \"改\",\n        -11.232882499694824\n      ],\n      [\n        \"▁将\",\n        -11.23306941986084\n      ],\n      [\n        \"▁ヘル\",\n        -11.233222961425781\n      ],\n      [\n        \"▁歩く\",\n        -11.23326587677002\n      ],\n      [\n        \"lu\",\n        -11.23328971862793\n      ],\n      [\n        \"でしょう\",\n        -11.233379364013672\n      ],\n      [\n        \"述\",\n        -11.23355484008789\n      ],\n      [\n        \"▁全力\",\n        -11.233559608459473\n      ],\n      [\n        \"昌\",\n        -11.233674049377441\n      ],\n      [\n        \"▁警戒\",\n        -11.233686447143555\n      ],\n      [\n        \"▁ぶ\",\n        -11.234336853027344\n      ],\n      [\n        \"▁コツ\",\n        -11.234634399414062\n      ],\n      [\n        \"▁たった\",\n        -11.234636306762695\n      ],\n      [\n        \"▁天井\",\n        -11.235045433044434\n      ],\n      [\n        \"▁不可能\",\n        -11.23505973815918\n      ],\n      [\n        \"活\",\n        -11.235250473022461\n      ],\n      [\n        \"▁帰る\",\n        -11.23530387878418\n      ],\n      [\n        \"NO\",\n        -11.235361099243164\n      ],\n      [\n        \"▁抜け\",\n        -11.235487937927246\n      ],\n      [\n        \"確かに\",\n        -11.235490798950195\n      ],\n      [\n        \"▁体力\",\n        -11.235560417175293\n      ],\n      [\n        \"さい\",\n        -11.235630989074707\n      ],\n      [\n        \"▁◎\",\n        -11.235743522644043\n      ],\n      [\n        \"ンダ\",\n        -11.235747337341309\n      ],\n      [\n        \"▁バンク\",\n        -11.23588752746582\n      ],\n      [\n        \"▁コンクリート\",\n        -11.236221313476562\n      ],\n      [\n        \"潮\",\n        -11.236342430114746\n      ],\n      [\n        \"▁まあ\",\n        -11.236371994018555\n      ],\n      [\n        \"▁守護\",\n        -11.23653793334961\n      ],\n      [\n        \"前回\",\n        -11.236562728881836\n      ],\n      [\n        \"▁レーザー\",\n        -11.236647605895996\n      ],\n      [\n        \"ミル\",\n        -11.236659049987793\n      ],\n      [\n        \"▁Cloud\",\n        -11.236994743347168\n      ],\n      [\n        \"▁文明\",\n        -11.237068176269531\n      ],\n      [\n        \"▁向かった\",\n        -11.237112998962402\n      ],\n      [\n        \"ST\",\n        -11.237277030944824\n      ],\n      [\n        \"ヘン\",\n        -11.237327575683594\n      ],\n      [\n        \"▁各社\",\n        -11.237600326538086\n      ],\n      [\n        \"no\",\n        -11.238073348999023\n      ],\n      [\n        \"▁育児\",\n        -11.238214492797852\n      ],\n      [\n        \"▁エー\",\n        -11.238280296325684\n      ],\n      [\n        \"▁行列\",\n        -11.238319396972656\n      ],\n      [\n        \"▁中断\",\n        -11.238435745239258\n      ],\n      [\n        \"▁1930\",\n        -11.238449096679688\n      ],\n      [\n        \"経済\",\n        -11.23845100402832\n      ],\n      [\n        \"▁狭い\",\n        -11.23851203918457\n      ],\n      [\n        \"▁安打\",\n        -11.238861083984375\n      ],\n      [\n        \"▁貸し\",\n        -11.238959312438965\n      ],\n      [\n        \"▁Japan\",\n        -11.239032745361328\n      ],\n      [\n        \"▁フットボール\",\n        -11.239059448242188\n      ],\n      [\n        \"▁シルバー\",\n        -11.23917293548584\n      ],\n      [\n        \"▁入店\",\n        -11.239304542541504\n      ],\n      [\n        \"ッグ\",\n        -11.239697456359863\n      ],\n      [\n        \"▁ぐ\",\n        -11.239899635314941\n      ],\n      [\n        \"▁絞り\",\n        -11.240012168884277\n      ],\n      [\n        \"▁鑑賞\",\n        -11.240092277526855\n      ],\n      [\n        \"▁インドネシア\",\n        -11.240131378173828\n      ],\n      [\n        \"▁歌う\",\n        -11.240140914916992\n      ],\n      [\n        \"▁オレ\",\n        -11.240174293518066\n      ],\n      [\n        \"スタン\",\n        -11.240320205688477\n      ],\n      [\n        \"▁多摩\",\n        -11.240367889404297\n      ],\n      [\n        \"▁しちゃ\",\n        -11.240691184997559\n      ],\n      [\n        \"▁犯人\",\n        -11.241055488586426\n      ],\n      [\n        \"桜\",\n        -11.241060256958008\n      ],\n      [\n        \"打ち\",\n        -11.24126148223877\n      ],\n      [\n        \"▁at\",\n        -11.241436004638672\n      ],\n      [\n        \"逆に\",\n        -11.241822242736816\n      ],\n      [\n        \"▁KO\",\n        -11.241862297058105\n      ],\n      [\n        \"参\",\n        -11.242090225219727\n      ],\n      [\n        \"程\",\n        -11.242210388183594\n      ],\n      [\n        \"研究\",\n        -11.24228572845459\n      ],\n      [\n        \"▁備え\",\n        -11.242288589477539\n      ],\n      [\n        \"▁備えた\",\n        -11.242377281188965\n      ],\n      [\n        \"絶\",\n        -11.242466926574707\n      ],\n      [\n        \"▁乗る\",\n        -11.242714881896973\n      ],\n      [\n        \"単\",\n        -11.242754936218262\n      ],\n      [\n        \"▁ゆる\",\n        -11.242931365966797\n      ],\n      [\n        \"▁艇\",\n        -11.24294662475586\n      ],\n      [\n        \"▁オス\",\n        -11.243124961853027\n      ],\n      [\n        \"▁あくまで\",\n        -11.243182182312012\n      ],\n      [\n        \"▁革新\",\n        -11.243363380432129\n      ],\n      [\n        \"EC\",\n        -11.243454933166504\n      ],\n      [\n        \"ナル\",\n        -11.243977546691895\n      ],\n      [\n        \"ギー\",\n        -11.24406909942627\n      ],\n      [\n        \"▁乾\",\n        -11.244237899780273\n      ],\n      [\n        \"IL\",\n        -11.244477272033691\n      ],\n      [\n        \"イヤー\",\n        -11.244477272033691\n      ],\n      [\n        \"▁1940\",\n        -11.244491577148438\n      ],\n      [\n        \"▁伝わる\",\n        -11.244529724121094\n      ],\n      [\n        \"名前\",\n        -11.244568824768066\n      ],\n      [\n        \"▁1962\",\n        -11.244820594787598\n      ],\n      [\n        \"▁佐野\",\n        -11.244834899902344\n      ],\n      [\n        \"▁デンマーク\",\n        -11.244900703430176\n      ],\n      [\n        \"純\",\n        -11.244982719421387\n      ],\n      [\n        \"▁在宅\",\n        -11.245399475097656\n      ],\n      [\n        \"限\",\n        -11.245400428771973\n      ],\n      [\n        \"▁上場\",\n        -11.245686531066895\n      ],\n      [\n        \"▁急に\",\n        -11.245704650878906\n      ],\n      [\n        \"▁操縦\",\n        -11.245715141296387\n      ],\n      [\n        \"ik\",\n        -11.245816230773926\n      ],\n      [\n        \"がって\",\n        -11.245918273925781\n      ],\n      [\n        \"▁短く\",\n        -11.246016502380371\n      ],\n      [\n        \"▁次回\",\n        -11.246051788330078\n      ],\n      [\n        \"垣\",\n        -11.246227264404297\n      ],\n      [\n        \"▁仙\",\n        -11.246236801147461\n      ],\n      [\n        \"デー\",\n        -11.246309280395508\n      ],\n      [\n        \"▁重い\",\n        -11.246440887451172\n      ],\n      [\n        \"CO\",\n        -11.246448516845703\n      ],\n      [\n        \"▁担う\",\n        -11.246684074401855\n      ],\n      [\n        \"▁有限\",\n        -11.247037887573242\n      ],\n      [\n        \"▁難易\",\n        -11.247217178344727\n      ],\n      [\n        \"▁接\",\n        -11.247334480285645\n      ],\n      [\n        \"▁ヘンリー\",\n        -11.247335433959961\n      ],\n      [\n        \"▁ミュージカル\",\n        -11.247382164001465\n      ],\n      [\n        \"aw\",\n        -11.247476577758789\n      ],\n      [\n        \"▁900\",\n        -11.247579574584961\n      ],\n      [\n        \"ko\",\n        -11.247763633728027\n      ],\n      [\n        \"籍\",\n        -11.247976303100586\n      ],\n      [\n        \"▁セイ\",\n        -11.248002052307129\n      ],\n      [\n        \"▁急速に\",\n        -11.248037338256836\n      ],\n      [\n        \"▁フィンペシア\",\n        -11.248135566711426\n      ],\n      [\n        \"▁伝承\",\n        -11.248485565185547\n      ],\n      [\n        \"▁接する\",\n        -11.248791694641113\n      ],\n      [\n        \"oc\",\n        -11.249051094055176\n      ],\n      [\n        \"せて\",\n        -11.249105453491211\n      ],\n      [\n        \"▁高額\",\n        -11.249112129211426\n      ],\n      [\n        \"ロイド\",\n        -11.249114036560059\n      ],\n      [\n        \"▁たら\",\n        -11.249322891235352\n      ],\n      [\n        \"1989\",\n        -11.249374389648438\n      ],\n      [\n        \"▁コスプレ\",\n        -11.249948501586914\n      ],\n      [\n        \"ケル\",\n        -11.250091552734375\n      ],\n      [\n        \"▁ランド\",\n        -11.250596046447754\n      ],\n      [\n        \"善\",\n        -11.250617027282715\n      ],\n      [\n        \"▁ว\",\n        -11.250669479370117\n      ],\n      [\n        \"▁意外\",\n        -11.250680923461914\n      ],\n      [\n        \"▁全域\",\n        -11.250824928283691\n      ],\n      [\n        \"▁愛称\",\n        -11.251016616821289\n      ],\n      [\n        \"▁プレミア\",\n        -11.251076698303223\n      ],\n      [\n        \"▁収穫\",\n        -11.25110149383545\n      ],\n      [\n        \"▁有力\",\n        -11.251140594482422\n      ],\n      [\n        \"竜\",\n        -11.2511625289917\n      ],\n      [\n        \"▁梅田\",\n        -11.251296997070312\n      ],\n      [\n        \"▁進歩\",\n        -11.251446723937988\n      ],\n      [\n        \"▁適応\",\n        -11.251476287841797\n      ],\n      [\n        \"▁フロア\",\n        -11.251943588256836\n      ],\n      [\n        \"区\",\n        -11.252069473266602\n      ],\n      [\n        \"▁行こう\",\n        -11.252338409423828\n      ],\n      [\n        \"▁続編\",\n        -11.252455711364746\n      ],\n      [\n        \"BS\",\n        -11.2524995803833\n      ],\n      [\n        \"▁平野\",\n        -11.25258731842041\n      ],\n      [\n        \"▁ふく\",\n        -11.252616882324219\n      ],\n      [\n        \"▁誘\",\n        -11.252748489379883\n      ],\n      [\n        \"▁法学部\",\n        -11.252803802490234\n      ],\n      [\n        \"週\",\n        -11.252894401550293\n      ],\n      [\n        \"▁ども\",\n        -11.25333309173584\n      ],\n      [\n        \"▁cc\",\n        -11.253402709960938\n      ],\n      [\n        \"▁アマチュア\",\n        -11.253475189208984\n      ],\n      [\n        \"▁暮らして\",\n        -11.253478050231934\n      ],\n      [\n        \"最後に\",\n        -11.253661155700684\n      ],\n      [\n        \"▁天狼\",\n        -11.253742218017578\n      ],\n      [\n        \"▁加えた\",\n        -11.253935813903809\n      ],\n      [\n        \"ind\",\n        -11.254014015197754\n      ],\n      [\n        \"▁目安\",\n        -11.254447937011719\n      ],\n      [\n        \"▁78\",\n        -11.254745483398438\n      ],\n      [\n        \"▁支え\",\n        -11.254773139953613\n      ],\n      [\n        \"▁切り替え\",\n        -11.254932403564453\n      ],\n      [\n        \"▁座席\",\n        -11.254966735839844\n      ],\n      [\n        \"▁除いて\",\n        -11.255037307739258\n      ],\n      [\n        \"深\",\n        -11.255048751831055\n      ],\n      [\n        \"せい\",\n        -11.255049705505371\n      ],\n      [\n        \"ゴー\",\n        -11.255139350891113\n      ],\n      [\n        \"ほか\",\n        -11.255217552185059\n      ],\n      [\n        \"▁エキス\",\n        -11.255247116088867\n      ],\n      [\n        \"ip\",\n        -11.255331993103027\n      ],\n      [\n        \"皆さん\",\n        -11.25544261932373\n      ],\n      [\n        \"▁重ね\",\n        -11.255448341369629\n      ],\n      [\n        \"博\",\n        -11.255576133728027\n      ],\n      [\n        \"源\",\n        -11.255914688110352\n      ],\n      [\n        \"そのような\",\n        -11.256083488464355\n      ],\n      [\n        \"▁修士\",\n        -11.25613784790039\n      ],\n      [\n        \"払\",\n        -11.257147789001465\n      ],\n      [\n        \"▁Do\",\n        -11.257286071777344\n      ],\n      [\n        \"▁来年\",\n        -11.25741958618164\n      ],\n      [\n        \"▁ロイヤル\",\n        -11.258052825927734\n      ],\n      [\n        \"▁浸透\",\n        -11.258254051208496\n      ],\n      [\n        \"▁手作り\",\n        -11.258710861206055\n      ],\n      [\n        \"▁みな\",\n        -11.258792877197266\n      ],\n      [\n        \"▁やつ\",\n        -11.258828163146973\n      ],\n      [\n        \"▁やめ\",\n        -11.258941650390625\n      ],\n      [\n        \"▁接近\",\n        -11.258966445922852\n      ],\n      [\n        \"▁移植\",\n        -11.259222030639648\n      ],\n      [\n        \"▁87\",\n        -11.259382247924805\n      ],\n      [\n        \"▁肝\",\n        -11.259420394897461\n      ],\n      [\n        \"要\",\n        -11.259456634521484\n      ],\n      [\n        \"▁居る\",\n        -11.259811401367188\n      ],\n      [\n        \"発売\",\n        -11.259900093078613\n      ],\n      [\n        \"▁ならびに\",\n        -11.260130882263184\n      ],\n      [\n        \"メイ\",\n        -11.260397911071777\n      ],\n      [\n        \"▁祐\",\n        -11.260808944702148\n      ],\n      [\n        \"▁ドゥ\",\n        -11.260902404785156\n      ],\n      [\n        \"ค\",\n        -11.261274337768555\n      ],\n      [\n        \"▁載せて\",\n        -11.26130485534668\n      ],\n      [\n        \"▁スコットランド\",\n        -11.261385917663574\n      ],\n      [\n        \"▁死んだ\",\n        -11.261457443237305\n      ],\n      [\n        \"▁巨乳\",\n        -11.261474609375\n      ],\n      [\n        \"▁まい\",\n        -11.261727333068848\n      ],\n      [\n        \"モア\",\n        -11.261749267578125\n      ],\n      [\n        \"▁下位\",\n        -11.261821746826172\n      ],\n      [\n        \"▁シャー\",\n        -11.261859893798828\n      ],\n      [\n        \"▁中華\",\n        -11.262081146240234\n      ],\n      [\n        \"▁殆ど\",\n        -11.262604713439941\n      ],\n      [\n        \"▁巨\",\n        -11.262617111206055\n      ],\n      [\n        \"▁工程\",\n        -11.26262378692627\n      ],\n      [\n        \"▁FIFA\",\n        -11.262657165527344\n      ],\n      [\n        \"▁あったり\",\n        -11.262701034545898\n      ],\n      [\n        \"軽\",\n        -11.262955665588379\n      ],\n      [\n        \"▁豚\",\n        -11.262988090515137\n      ],\n      [\n        \"▁打点\",\n        -11.263078689575195\n      ],\n      [\n        \"ax\",\n        -11.263195037841797\n      ],\n      [\n        \"▁91\",\n        -11.263448715209961\n      ],\n      [\n        \"oo\",\n        -11.263533592224121\n      ],\n      [\n        \"監\",\n        -11.263717651367188\n      ],\n      [\n        \"▁思える\",\n        -11.263888359069824\n      ],\n      [\n        \"▁タオル\",\n        -11.263899803161621\n      ],\n      [\n        \"act\",\n        -11.263998985290527\n      ],\n      [\n        \"▁NTT\",\n        -11.264097213745117\n      ],\n      [\n        \"▁実務\",\n        -11.264100074768066\n      ],\n      [\n        \"▁山脈\",\n        -11.264420509338379\n      ],\n      [\n        \"▁特殊な\",\n        -11.264425277709961\n      ],\n      [\n        \"▁twitter\",\n        -11.264473915100098\n      ],\n      [\n        \"▁ますます\",\n        -11.264618873596191\n      ],\n      [\n        \"▁私立\",\n        -11.264720916748047\n      ],\n      [\n        \"▁収めた\",\n        -11.26483154296875\n      ],\n      [\n        \"カナダ\",\n        -11.26485538482666\n      ],\n      [\n        \"▁届く\",\n        -11.265081405639648\n      ],\n      [\n        \"▁ドキュメンタリー\",\n        -11.26514720916748\n      ],\n      [\n        \"額\",\n        -11.265345573425293\n      ],\n      [\n        \"▁御殿場\",\n        -11.265351295471191\n      ],\n      [\n        \"▁大量に\",\n        -11.265464782714844\n      ],\n      [\n        \"▁1944\",\n        -11.265643119812012\n      ],\n      [\n        \"▁連覇\",\n        -11.26579475402832\n      ],\n      [\n        \"▁GT\",\n        -11.265849113464355\n      ],\n      [\n        \"▁食べた\",\n        -11.265873908996582\n      ],\n      [\n        \"評\",\n        -11.26598834991455\n      ],\n      [\n        \"毎年\",\n        -11.266079902648926\n      ],\n      [\n        \"EM\",\n        -11.266161918640137\n      ],\n      [\n        \"▁ライバル\",\n        -11.266172409057617\n      ],\n      [\n        \"穂\",\n        -11.266519546508789\n      ],\n      [\n        \"▁代金\",\n        -11.266678810119629\n      ],\n      [\n        \"▁適合\",\n        -11.266899108886719\n      ],\n      [\n        \"▁破産\",\n        -11.26701831817627\n      ],\n      [\n        \"OT\",\n        -11.267744064331055\n      ],\n      [\n        \"▁2105\",\n        -11.267763137817383\n      ],\n      [\n        \"照\",\n        -11.267827033996582\n      ],\n      [\n        \"▁工房\",\n        -11.268389701843262\n      ],\n      [\n        \"▁不思議\",\n        -11.268714904785156\n      ],\n      [\n        \"▁位置づけ\",\n        -11.26874828338623\n      ],\n      [\n        \"▁スカイ\",\n        -11.268959999084473\n      ],\n      [\n        \"ニス\",\n        -11.268978118896484\n      ],\n      [\n        \"静\",\n        -11.268986701965332\n      ],\n      [\n        \"▁飲料\",\n        -11.269424438476562\n      ],\n      [\n        \"TC\",\n        -11.269737243652344\n      ],\n      [\n        \"▁キャップ\",\n        -11.269845008850098\n      ],\n      [\n        \"▁肉体\",\n        -11.270078659057617\n      ],\n      [\n        \"▁グラス\",\n        -11.270241737365723\n      ],\n      [\n        \"▁興奮\",\n        -11.270402908325195\n      ],\n      [\n        \"▁ヒロイン\",\n        -11.270572662353516\n      ],\n      [\n        \"▁ワークショップ\",\n        -11.271191596984863\n      ],\n      [\n        \"ブロ\",\n        -11.271398544311523\n      ],\n      [\n        \"▁どころ\",\n        -11.271469116210938\n      ],\n      [\n        \"▁α\",\n        -11.271585464477539\n      ],\n      [\n        \"▁シャンプー\",\n        -11.271614074707031\n      ],\n      [\n        \"▁決まり\",\n        -11.27176570892334\n      ],\n      [\n        \"わら\",\n        -11.27195930480957\n      ],\n      [\n        \"そもそも\",\n        -11.272123336791992\n      ],\n      [\n        \"▁ジー\",\n        -11.272140502929688\n      ],\n      [\n        \"▁平安\",\n        -11.272259712219238\n      ],\n      [\n        \"▁岸\",\n        -11.272381782531738\n      ],\n      [\n        \"練\",\n        -11.272435188293457\n      ],\n      [\n        \"掛け\",\n        -11.272520065307617\n      ],\n      [\n        \"▁ターゲット\",\n        -11.272575378417969\n      ],\n      [\n        \"朗\",\n        -11.272650718688965\n      ],\n      [\n        \"▁マイナス\",\n        -11.272732734680176\n      ],\n      [\n        \"IP\",\n        -11.272847175598145\n      ],\n      [\n        \"▁細菌\",\n        -11.27291488647461\n      ],\n      [\n        \"▁困って\",\n        -11.273083686828613\n      ],\n      [\n        \"▁蒸気\",\n        -11.273523330688477\n      ],\n      [\n        \"▁合わせる\",\n        -11.27354907989502\n      ],\n      [\n        \"▁案件\",\n        -11.273616790771484\n      ],\n      [\n        \"▁シカゴ\",\n        -11.273687362670898\n      ],\n      [\n        \"▁刀\",\n        -11.273740768432617\n      ],\n      [\n        \"▁救急\",\n        -11.27379035949707\n      ],\n      [\n        \"▁順次\",\n        -11.273843765258789\n      ],\n      [\n        \"▁DC\",\n        -11.273872375488281\n      ],\n      [\n        \"▁キーボード\",\n        -11.274683952331543\n      ],\n      [\n        \"▁ユニフォーム\",\n        -11.274991035461426\n      ],\n      [\n        \"▁マッ\",\n        -11.275094032287598\n      ],\n      [\n        \"ラント\",\n        -11.27512264251709\n      ],\n      [\n        \"▁スープ\",\n        -11.275162696838379\n      ],\n      [\n        \"▁手入れ\",\n        -11.275177955627441\n      ],\n      [\n        \"ライブ\",\n        -11.275201797485352\n      ],\n      [\n        \"▁食料\",\n        -11.275623321533203\n      ],\n      [\n        \"▁景色\",\n        -11.275762557983398\n      ],\n      [\n        \"▁認可\",\n        -11.275777816772461\n      ],\n      [\n        \"▁1961\",\n        -11.275794982910156\n      ],\n      [\n        \"▁重複\",\n        -11.275826454162598\n      ],\n      [\n        \"▁やっと\",\n        -11.275858879089355\n      ],\n      [\n        \"▁耐\",\n        -11.275898933410645\n      ],\n      [\n        \"▁いらっしゃい\",\n        -11.27592945098877\n      ],\n      [\n        \"▁幸いです\",\n        -11.2762451171875\n      ],\n      [\n        \"▁爆\",\n        -11.276602745056152\n      ],\n      [\n        \"▁大好きな\",\n        -11.276663780212402\n      ],\n      [\n        \"▁飛\",\n        -11.276810646057129\n      ],\n      [\n        \"▁JavaScript\",\n        -11.276909828186035\n      ],\n      [\n        \"▁体操\",\n        -11.277043342590332\n      ],\n      [\n        \"▁余り\",\n        -11.277127265930176\n      ],\n      [\n        \"▁ナショナル\",\n        -11.277338027954102\n      ],\n      [\n        \"▁渡る\",\n        -11.277543067932129\n      ],\n      [\n        \"▁大切\",\n        -11.27762508392334\n      ],\n      [\n        \"▁打ち上げ\",\n        -11.277668952941895\n      ],\n      [\n        \"▁国防\",\n        -11.277881622314453\n      ],\n      [\n        \"▁抽選\",\n        -11.27797794342041\n      ],\n      [\n        \"▁丈\",\n        -11.278057098388672\n      ],\n      [\n        \"▁射\",\n        -11.278114318847656\n      ],\n      [\n        \"▁次いで\",\n        -11.278565406799316\n      ],\n      [\n        \"▁補佐\",\n        -11.278757095336914\n      ],\n      [\n        \"▁店頭\",\n        -11.279202461242676\n      ],\n      [\n        \"▁外務\",\n        -11.27959156036377\n      ],\n      [\n        \"ヨン\",\n        -11.279623985290527\n      ],\n      [\n        \"▁好きに\",\n        -11.279654502868652\n      ],\n      [\n        \"▁青春\",\n        -11.279888153076172\n      ],\n      [\n        \"▁Con\",\n        -11.279980659484863\n      ],\n      [\n        \"▁ッ\",\n        -11.280354499816895\n      ],\n      [\n        \"▁ミックス\",\n        -11.280548095703125\n      ],\n      [\n        \"▁宝塚\",\n        -11.280661582946777\n      ],\n      [\n        \"▁ボクシング\",\n        -11.280920028686523\n      ],\n      [\n        \"▁ユーザ\",\n        -11.28122615814209\n      ],\n      [\n        \"▁待つ\",\n        -11.281233787536621\n      ],\n      [\n        \"▁違った\",\n        -11.281254768371582\n      ],\n      [\n        \"▁繋がり\",\n        -11.281336784362793\n      ],\n      [\n        \"▁総督\",\n        -11.281474113464355\n      ],\n      [\n        \"▁en\",\n        -11.281479835510254\n      ],\n      [\n        \"▁マイケル\",\n        -11.28150463104248\n      ],\n      [\n        \"ick\",\n        -11.281606674194336\n      ],\n      [\n        \"▁芸\",\n        -11.281659126281738\n      ],\n      [\n        \"▁意向\",\n        -11.281700134277344\n      ],\n      [\n        \"▁嬢\",\n        -11.281729698181152\n      ],\n      [\n        \"▁申し\",\n        -11.281790733337402\n      ],\n      [\n        \"裏\",\n        -11.281928062438965\n      ],\n      [\n        \"▁New\",\n        -11.281965255737305\n      ],\n      [\n        \"もっと\",\n        -11.282133102416992\n      ],\n      [\n        \"▁書記\",\n        -11.282193183898926\n      ],\n      [\n        \"▁舌\",\n        -11.282842636108398\n      ],\n      [\n        \"▁爆弾\",\n        -11.28307819366455\n      ],\n      [\n        \"EE\",\n        -11.283158302307129\n      ],\n      [\n        \"▁ロン\",\n        -11.283211708068848\n      ],\n      [\n        \"▁まとめた\",\n        -11.283272743225098\n      ],\n      [\n        \"▁高松\",\n        -11.283331871032715\n      ],\n      [\n        \"ore\",\n        -11.283463478088379\n      ],\n      [\n        \"▁上り\",\n        -11.283501625061035\n      ],\n      [\n        \"解説\",\n        -11.28369140625\n      ],\n      [\n        \"▁つくり\",\n        -11.283721923828125\n      ],\n      [\n        \"▁ぎ\",\n        -11.283731460571289\n      ],\n      [\n        \"▁焦点\",\n        -11.28388500213623\n      ],\n      [\n        \"▁IS\",\n        -11.283968925476074\n      ],\n      [\n        \"▁ダー\",\n        -11.284089088439941\n      ],\n      [\n        \"eb\",\n        -11.284568786621094\n      ],\n      [\n        \"▁がっこう\",\n        -11.284932136535645\n      ],\n      [\n        \"ノール\",\n        -11.285111427307129\n      ],\n      [\n        \"PO\",\n        -11.285292625427246\n      ],\n      [\n        \"▁圧縮\",\n        -11.285412788391113\n      ],\n      [\n        \"リル\",\n        -11.285451889038086\n      ],\n      [\n        \"▁ハリ\",\n        -11.285489082336426\n      ],\n      [\n        \"▁米軍\",\n        -11.285542488098145\n      ],\n      [\n        \"▁カレッジ\",\n        -11.285561561584473\n      ],\n      [\n        \"▁数十\",\n        -11.285627365112305\n      ],\n      [\n        \"▁繁殖\",\n        -11.285639762878418\n      ],\n      [\n        \"▁支える\",\n        -11.285662651062012\n      ],\n      [\n        \"▁徹\",\n        -11.285795211791992\n      ],\n      [\n        \"▁植え\",\n        -11.285859107971191\n      ],\n      [\n        \"▁いら\",\n        -11.285993576049805\n      ],\n      [\n        \"▁1500\",\n        -11.286091804504395\n      ],\n      [\n        \"▁英和\",\n        -11.2862548828125\n      ],\n      [\n        \"▁死刑\",\n        -11.286296844482422\n      ],\n      [\n        \"計\",\n        -11.286333084106445\n      ],\n      [\n        \"▁ファイナル\",\n        -11.286640167236328\n      ],\n      [\n        \"離\",\n        -11.286742210388184\n      ],\n      [\n        \"▁サクラ\",\n        -11.286763191223145\n      ],\n      [\n        \"ダム\",\n        -11.28679370880127\n      ],\n      [\n        \"port\",\n        -11.286931037902832\n      ],\n      [\n        \"▁厳選\",\n        -11.287022590637207\n      ],\n      [\n        \"ミリ\",\n        -11.287076950073242\n      ],\n      [\n        \"▁ソリューション\",\n        -11.287224769592285\n      ],\n      [\n        \"▁いける\",\n        -11.287371635437012\n      ],\n      [\n        \"▁かかった\",\n        -11.287436485290527\n      ],\n      [\n        \"グロ\",\n        -11.287613868713379\n      ],\n      [\n        \"同時に\",\n        -11.287853240966797\n      ],\n      [\n        \"緑\",\n        -11.287870407104492\n      ],\n      [\n        \"弥\",\n        -11.288129806518555\n      ],\n      [\n        \"ドール\",\n        -11.288151741027832\n      ],\n      [\n        \"▁ガソリン\",\n        -11.288230895996094\n      ],\n      [\n        \"▁直し\",\n        -11.288379669189453\n      ],\n      [\n        \"▁正確な\",\n        -11.288471221923828\n      ],\n      [\n        \"▁味方\",\n        -11.288495063781738\n      ],\n      [\n        \"Windows\",\n        -11.288564682006836\n      ],\n      [\n        \"刻\",\n        -11.288748741149902\n      ],\n      [\n        \"▁レー\",\n        -11.288933753967285\n      ],\n      [\n        \"FA\",\n        -11.289209365844727\n      ],\n      [\n        \"▁告白\",\n        -11.289220809936523\n      ],\n      [\n        \"▁承\",\n        -11.28924560546875\n      ],\n      [\n        \"▁任意\",\n        -11.289246559143066\n      ],\n      [\n        \"菌\",\n        -11.289517402648926\n      ],\n      [\n        \"ボール\",\n        -11.28984546661377\n      ],\n      [\n        \"▁1947\",\n        -11.290120124816895\n      ],\n      [\n        \"▁同人\",\n        -11.29040241241455\n      ],\n      [\n        \"▁単行本\",\n        -11.290416717529297\n      ],\n      [\n        \"載\",\n        -11.290417671203613\n      ],\n      [\n        \"我\",\n        -11.29042911529541\n      ],\n      [\n        \"▁生じ\",\n        -11.290626525878906\n      ],\n      [\n        \"▁テクニック\",\n        -11.290882110595703\n      ],\n      [\n        \"▁起こし\",\n        -11.291028022766113\n      ],\n      [\n        \"▁庭園\",\n        -11.29121208190918\n      ],\n      [\n        \"▁ひろ\",\n        -11.291349411010742\n      ],\n      [\n        \"▁我\",\n        -11.291487693786621\n      ],\n      [\n        \"フラ\",\n        -11.29153060913086\n      ],\n      [\n        \"アップ\",\n        -11.291593551635742\n      ],\n      [\n        \"▁ブロ\",\n        -11.291765213012695\n      ],\n      [\n        \"ニュー\",\n        -11.292007446289062\n      ],\n      [\n        \"mon\",\n        -11.292061805725098\n      ],\n      [\n        \"▁知り合い\",\n        -11.292067527770996\n      ],\n      [\n        \"ビス\",\n        -11.29208755493164\n      ],\n      [\n        \"▁わかった\",\n        -11.292509078979492\n      ],\n      [\n        \"▁寿命\",\n        -11.292519569396973\n      ],\n      [\n        \"▁インディアン\",\n        -11.2927827835083\n      ],\n      [\n        \"▁済\",\n        -11.292967796325684\n      ],\n      [\n        \"録\",\n        -11.293025016784668\n      ],\n      [\n        \"▁快\",\n        -11.293118476867676\n      ],\n      [\n        \"▁角度\",\n        -11.293231964111328\n      ],\n      [\n        \"合わせ\",\n        -11.29355239868164\n      ],\n      [\n        \"▁トム\",\n        -11.293598175048828\n      ],\n      [\n        \"▁下旬\",\n        -11.293724060058594\n      ],\n      [\n        \"▁勝手\",\n        -11.29378890991211\n      ],\n      [\n        \"▁っぽい\",\n        -11.293951034545898\n      ],\n      [\n        \"▁360\",\n        -11.294014930725098\n      ],\n      [\n        \"▁TO\",\n        -11.294288635253906\n      ],\n      [\n        \"▁ワンピース\",\n        -11.294392585754395\n      ],\n      [\n        \"▁調べる\",\n        -11.29446029663086\n      ],\n      [\n        \"JR\",\n        -11.294605255126953\n      ],\n      [\n        \"▁ねぇ\",\n        -11.294770240783691\n      ],\n      [\n        \"▁祈り\",\n        -11.294943809509277\n      ],\n      [\n        \"▁最多\",\n        -11.2949857711792\n      ],\n      [\n        \"ディン\",\n        -11.294997215270996\n      ],\n      [\n        \"鉄道\",\n        -11.29521369934082\n      ],\n      [\n        \"陸\",\n        -11.295223236083984\n      ],\n      [\n        \"▁決断\",\n        -11.295476913452148\n      ],\n      [\n        \"▁LIVE\",\n        -11.29582691192627\n      ],\n      [\n        \"情報\",\n        -11.296005249023438\n      ],\n      [\n        \"費\",\n        -11.296088218688965\n      ],\n      [\n        \"▁仕上げ\",\n        -11.296207427978516\n      ],\n      [\n        \"弊社\",\n        -11.29634952545166\n      ],\n      [\n        \"▁婦\",\n        -11.296360969543457\n      ],\n      [\n        \"▁97\",\n        -11.296770095825195\n      ],\n      [\n        \"ッキ\",\n        -11.296857833862305\n      ],\n      [\n        \"▁分散\",\n        -11.296947479248047\n      ],\n      [\n        \"▁粒子\",\n        -11.297127723693848\n      ],\n      [\n        \"▁アブ\",\n        -11.297157287597656\n      ],\n      [\n        \"除\",\n        -11.297207832336426\n      ],\n      [\n        \"▁総額\",\n        -11.29725170135498\n      ],\n      [\n        \"▁堅\",\n        -11.29730224609375\n      ],\n      [\n        \"▁ネコ\",\n        -11.297503471374512\n      ],\n      [\n        \"▁技能\",\n        -11.297677993774414\n      ],\n      [\n        \"ぜ\",\n        -11.297921180725098\n      ],\n      [\n        \"▁89\",\n        -11.297971725463867\n      ],\n      [\n        \"▁イラン\",\n        -11.298125267028809\n      ],\n      [\n        \"▁カップル\",\n        -11.298150062561035\n      ],\n      [\n        \"牧\",\n        -11.298233985900879\n      ],\n      [\n        \"▁士官\",\n        -11.29824447631836\n      ],\n      [\n        \"▁Li\",\n        -11.29825496673584\n      ],\n      [\n        \"壇\",\n        -11.298280715942383\n      ],\n      [\n        \"▁ユナイテッド\",\n        -11.29831600189209\n      ],\n      [\n        \"▁線路\",\n        -11.298318862915039\n      ],\n      [\n        \"▁暮らす\",\n        -11.298410415649414\n      ],\n      [\n        \"▁考察\",\n        -11.29841423034668\n      ],\n      [\n        \"CC\",\n        -11.298589706420898\n      ],\n      [\n        \"▁食い\",\n        -11.298762321472168\n      ],\n      [\n        \"▁vol\",\n        -11.298856735229492\n      ],\n      [\n        \"朽\",\n        -11.298887252807617\n      ],\n      [\n        \"▁再編\",\n        -11.298913955688477\n      ],\n      [\n        \"▁突入\",\n        -11.299188613891602\n      ],\n      [\n        \"▁国籍\",\n        -11.299202919006348\n      ],\n      [\n        \"▁高原\",\n        -11.299298286437988\n      ],\n      [\n        \"▁みたいに\",\n        -11.299325942993164\n      ],\n      [\n        \"▁学位\",\n        -11.299346923828125\n      ],\n      [\n        \"ピン\",\n        -11.2994384765625\n      ],\n      [\n        \"▁玩具\",\n        -11.299887657165527\n      ],\n      [\n        \"▁有無\",\n        -11.299917221069336\n      ],\n      [\n        \"▁だから\",\n        -11.299946784973145\n      ],\n      [\n        \"身長\",\n        -11.300012588500977\n      ],\n      [\n        \"▁木村\",\n        -11.300768852233887\n      ],\n      [\n        \"▁東映\",\n        -11.30079460144043\n      ],\n      [\n        \"IG\",\n        -11.300891876220703\n      ],\n      [\n        \"▁外観\",\n        -11.301066398620605\n      ],\n      [\n        \"▁タッグ\",\n        -11.301154136657715\n      ],\n      [\n        \"▁SAP\",\n        -11.301335334777832\n      ],\n      [\n        \"▁センチ\",\n        -11.301375389099121\n      ],\n      [\n        \"学生\",\n        -11.301417350769043\n      ],\n      [\n        \"▁官僚\",\n        -11.301420211791992\n      ],\n      [\n        \"▁ぼく\",\n        -11.301631927490234\n      ],\n      [\n        \"次の\",\n        -11.301726341247559\n      ],\n      [\n        \"▁al\",\n        -11.301850318908691\n      ],\n      [\n        \"▁芳\",\n        -11.301894187927246\n      ],\n      [\n        \"▁洗浄\",\n        -11.301990509033203\n      ],\n      [\n        \"▁総称\",\n        -11.302053451538086\n      ],\n      [\n        \"▁玄\",\n        -11.302461624145508\n      ],\n      [\n        \"▁page\",\n        -11.302515983581543\n      ],\n      [\n        \"▁行方\",\n        -11.303047180175781\n      ],\n      [\n        \"▁敗退\",\n        -11.303085327148438\n      ],\n      [\n        \"▁岡\",\n        -11.303178787231445\n      ],\n      [\n        \"▁保つ\",\n        -11.303236961364746\n      ],\n      [\n        \"▁なるべく\",\n        -11.303563117980957\n      ],\n      [\n        \"▁Part\",\n        -11.303777694702148\n      ],\n      [\n        \"ru\",\n        -11.304069519042969\n      ],\n      [\n        \"▁行け\",\n        -11.304222106933594\n      ],\n      [\n        \"▁故郷\",\n        -11.304357528686523\n      ],\n      [\n        \"▁いきなり\",\n        -11.30491828918457\n      ],\n      [\n        \"▁愛さ\",\n        -11.30508041381836\n      ],\n      [\n        \"航\",\n        -11.305302619934082\n      ],\n      [\n        \"儀\",\n        -11.305495262145996\n      ],\n      [\n        \"シティ\",\n        -11.305512428283691\n      ],\n      [\n        \"▁終戦\",\n        -11.305622100830078\n      ],\n      [\n        \"▁所蔵\",\n        -11.305856704711914\n      ],\n      [\n        \"▁JA\",\n        -11.305899620056152\n      ],\n      [\n        \"医\",\n        -11.305985450744629\n      ],\n      [\n        \"▁自立\",\n        -11.306144714355469\n      ],\n      [\n        \"▁堺\",\n        -11.306192398071289\n      ],\n      [\n        \"AND\",\n        -11.306414604187012\n      ],\n      [\n        \"▁何とか\",\n        -11.306486129760742\n      ],\n      [\n        \"▁レジ\",\n        -11.306621551513672\n      ],\n      [\n        \"▁グラフィック\",\n        -11.306836128234863\n      ],\n      [\n        \"IO\",\n        -11.307095527648926\n      ],\n      [\n        \"▁放出\",\n        -11.307404518127441\n      ],\n      [\n        \"▁うた\",\n        -11.307448387145996\n      ],\n      [\n        \"▁トライ\",\n        -11.307499885559082\n      ],\n      [\n        \"▁インターナショナル\",\n        -11.30754566192627\n      ],\n      [\n        \"夢\",\n        -11.307846069335938\n      ],\n      [\n        \"▁葬儀\",\n        -11.308137893676758\n      ],\n      [\n        \"▁アンテナ\",\n        -11.308441162109375\n      ],\n      [\n        \"しま\",\n        -11.308603286743164\n      ],\n      [\n        \"▁DJ\",\n        -11.308707237243652\n      ],\n      [\n        \"▁既\",\n        -11.308737754821777\n      ],\n      [\n        \"▁応え\",\n        -11.30875301361084\n      ],\n      [\n        \"▁アメ\",\n        -11.309354782104492\n      ],\n      [\n        \"▁安全な\",\n        -11.309407234191895\n      ],\n      [\n        \"▁医学部\",\n        -11.309588432312012\n      ],\n      [\n        \"▁陳\",\n        -11.30986499786377\n      ],\n      [\n        \"▁アカ\",\n        -11.310028076171875\n      ],\n      [\n        \"但し\",\n        -11.310086250305176\n      ],\n      [\n        \"▁当主\",\n        -11.31013298034668\n      ],\n      [\n        \"▁かな\",\n        -11.310138702392578\n      ],\n      [\n        \"▁ご存知\",\n        -11.310379981994629\n      ],\n      [\n        \"▁先進\",\n        -11.310418128967285\n      ],\n      [\n        \"▁帽子\",\n        -11.310962677001953\n      ],\n      [\n        \"戻\",\n        -11.311052322387695\n      ],\n      [\n        \"行政\",\n        -11.311589241027832\n      ],\n      [\n        \"▁主任\",\n        -11.311767578125\n      ],\n      [\n        \"▁欠\",\n        -11.311864852905273\n      ],\n      [\n        \"▁蓄積\",\n        -11.311922073364258\n      ],\n      [\n        \"じょう\",\n        -11.311980247497559\n      ],\n      [\n        \"▁アム\",\n        -11.312039375305176\n      ],\n      [\n        \"▁なされて\",\n        -11.312122344970703\n      ],\n      [\n        \"とも\",\n        -11.312238693237305\n      ],\n      [\n        \"▁碑\",\n        -11.312407493591309\n      ],\n      [\n        \"▁故\",\n        -11.31273365020752\n      ],\n      [\n        \"▁文部\",\n        -11.31301212310791\n      ],\n      [\n        \"肌\",\n        -11.313202857971191\n      ],\n      [\n        \"▁書庫\",\n        -11.313239097595215\n      ],\n      [\n        \"▁ヴァン\",\n        -11.313272476196289\n      ],\n      [\n        \"襲\",\n        -11.313379287719727\n      ],\n      [\n        \"▁何より\",\n        -11.313382148742676\n      ],\n      [\n        \"▁集まる\",\n        -11.313563346862793\n      ],\n      [\n        \"▁スロット\",\n        -11.314101219177246\n      ],\n      [\n        \"処\",\n        -11.31472396850586\n      ],\n      [\n        \"剤\",\n        -11.315237998962402\n      ],\n      [\n        \"少\",\n        -11.315398216247559\n      ],\n      [\n        \"▁頭部\",\n        -11.315695762634277\n      ],\n      [\n        \"▁昭\",\n        -11.315751075744629\n      ],\n      [\n        \"▁細かい\",\n        -11.315861701965332\n      ],\n      [\n        \"▁花火\",\n        -11.316194534301758\n      ],\n      [\n        \"▁探\",\n        -11.316282272338867\n      ],\n      [\n        \"▁SIM\",\n        -11.316341400146484\n      ],\n      [\n        \"▁宅配\",\n        -11.316400527954102\n      ],\n      [\n        \"ベルク\",\n        -11.316495895385742\n      ],\n      [\n        \"▁併用\",\n        -11.316551208496094\n      ],\n      [\n        \"▁疲労\",\n        -11.316612243652344\n      ],\n      [\n        \"帰\",\n        -11.316834449768066\n      ],\n      [\n        \"猫\",\n        -11.31686019897461\n      ],\n      [\n        \"▁成田\",\n        -11.31719970703125\n      ],\n      [\n        \"支\",\n        -11.317277908325195\n      ],\n      [\n        \"▁アロマ\",\n        -11.317320823669434\n      ],\n      [\n        \"su\",\n        -11.317543983459473\n      ],\n      [\n        \"▁並び\",\n        -11.317753791809082\n      ],\n      [\n        \"以降\",\n        -11.317882537841797\n      ],\n      [\n        \"▁博多\",\n        -11.317896842956543\n      ],\n      [\n        \"輔\",\n        -11.317995071411133\n      ],\n      [\n        \"▁意志\",\n        -11.31810188293457\n      ],\n      [\n        \"ジャン\",\n        -11.318110466003418\n      ],\n      [\n        \"▁フォーラム\",\n        -11.31820297241211\n      ],\n      [\n        \"▁パイ\",\n        -11.318342208862305\n      ],\n      [\n        \"▁調節\",\n        -11.318655014038086\n      ],\n      [\n        \"▁フィンランド\",\n        -11.318816184997559\n      ],\n      [\n        \"▁決議\",\n        -11.318818092346191\n      ],\n      [\n        \"ka\",\n        -11.318833351135254\n      ],\n      [\n        \"▁水産\",\n        -11.31889533996582\n      ],\n      [\n        \"▁頂ける\",\n        -11.318912506103516\n      ],\n      [\n        \"▁ヶ\",\n        -11.319084167480469\n      ],\n      [\n        \"▁節約\",\n        -11.31908893585205\n      ],\n      [\n        \"▁農家\",\n        -11.31924819946289\n      ],\n      [\n        \"▁便利\",\n        -11.319329261779785\n      ],\n      [\n        \"▁ボス\",\n        -11.319360733032227\n      ],\n      [\n        \"▁生存\",\n        -11.319422721862793\n      ],\n      [\n        \"▁勃発\",\n        -11.319476127624512\n      ],\n      [\n        \"▁三浦\",\n        -11.319478988647461\n      ],\n      [\n        \"▁潜\",\n        -11.319513320922852\n      ],\n      [\n        \"▁フォーク\",\n        -11.319624900817871\n      ],\n      [\n        \"ank\",\n        -11.319929122924805\n      ],\n      [\n        \"▁過ぎる\",\n        -11.32000732421875\n      ],\n      [\n        \"▁冷蔵\",\n        -11.320249557495117\n      ],\n      [\n        \"▁降\",\n        -11.320304870605469\n      ],\n      [\n        \"▁93\",\n        -11.320372581481934\n      ],\n      [\n        \"▁軍隊\",\n        -11.32071304321289\n      ],\n      [\n        \"ホン\",\n        -11.320754051208496\n      ],\n      [\n        \"▁拘束\",\n        -11.321037292480469\n      ],\n      [\n        \"▁信長\",\n        -11.321213722229004\n      ],\n      [\n        \"▁動員\",\n        -11.321520805358887\n      ],\n      [\n        \"反\",\n        -11.321623802185059\n      ],\n      [\n        \"ain\",\n        -11.321639060974121\n      ],\n      [\n        \"▁属して\",\n        -11.321866989135742\n      ],\n      [\n        \"本名\",\n        -11.321883201599121\n      ],\n      [\n        \"▁込めて\",\n        -11.322010040283203\n      ],\n      [\n        \"▁次ぐ\",\n        -11.322237014770508\n      ],\n      [\n        \"▁コント\",\n        -11.322306632995605\n      ],\n      [\n        \"クラブ\",\n        -11.322640419006348\n      ],\n      [\n        \"▁叙\",\n        -11.32275104522705\n      ],\n      [\n        \"▁authorHTMLs\",\n        -11.322979927062988\n      ],\n      [\n        \"▁入ら\",\n        -11.322979927062988\n      ],\n      [\n        \"短\",\n        -11.323067665100098\n      ],\n      [\n        \"あの\",\n        -11.323079109191895\n      ],\n      [\n        \"WA\",\n        -11.323182106018066\n      ],\n      [\n        \"ハイム\",\n        -11.323321342468262\n      ],\n      [\n        \"▁連勝\",\n        -11.323417663574219\n      ],\n      [\n        \"▁継いだ\",\n        -11.323527336120605\n      ],\n      [\n        \"タウン\",\n        -11.32354736328125\n      ],\n      [\n        \"1988\",\n        -11.323575973510742\n      ],\n      [\n        \"詞\",\n        -11.323689460754395\n      ],\n      [\n        \"▁休憩\",\n        -11.323814392089844\n      ],\n      [\n        \"▁互いに\",\n        -11.324016571044922\n      ],\n      [\n        \"やか\",\n        -11.324422836303711\n      ],\n      [\n        \"▁大名\",\n        -11.32446002960205\n      ],\n      [\n        \"ぃ\",\n        -11.324494361877441\n      ],\n      [\n        \"▁MP\",\n        -11.324695587158203\n      ],\n      [\n        \"▁スタンダード\",\n        -11.324750900268555\n      ],\n      [\n        \"▁味わい\",\n        -11.324915885925293\n      ],\n      [\n        \"キュー\",\n        -11.324922561645508\n      ],\n      [\n        \"イド\",\n        -11.324983596801758\n      ],\n      [\n        \"▁遊ぶ\",\n        -11.325037002563477\n      ],\n      [\n        \"▁新築\",\n        -11.325129508972168\n      ],\n      [\n        \"▁交付\",\n        -11.325149536132812\n      ],\n      [\n        \"able\",\n        -11.325203895568848\n      ],\n      [\n        \"ox\",\n        -11.325486183166504\n      ],\n      [\n        \"▁百貨店\",\n        -11.325570106506348\n      ],\n      [\n        \"▁キン\",\n        -11.325583457946777\n      ],\n      [\n        \"▁除\",\n        -11.325689315795898\n      ],\n      [\n        \"ッフル\",\n        -11.3258056640625\n      ],\n      [\n        \"▁拝\",\n        -11.325831413269043\n      ],\n      [\n        \"▁配列\",\n        -11.326038360595703\n      ],\n      [\n        \"▁ウェア\",\n        -11.326160430908203\n      ],\n      [\n        \"▁MA\",\n        -11.326275825500488\n      ],\n      [\n        \"背\",\n        -11.326314926147461\n      ],\n      [\n        \"とはいえ\",\n        -11.326410293579102\n      ],\n      [\n        \"▁存続\",\n        -11.326502799987793\n      ],\n      [\n        \"▁寿司\",\n        -11.32674503326416\n      ],\n      [\n        \"▁試作\",\n        -11.327055931091309\n      ],\n      [\n        \"▁危険な\",\n        -11.327293395996094\n      ],\n      [\n        \"▁1948\",\n        -11.327387809753418\n      ],\n      [\n        \"▁破り\",\n        -11.32739543914795\n      ],\n      [\n        \"▁あん\",\n        -11.327529907226562\n      ],\n      [\n        \"▁ムー\",\n        -11.327543258666992\n      ],\n      [\n        \"▁1920\",\n        -11.327582359313965\n      ],\n      [\n        \"アメリカ合衆国\",\n        -11.327858924865723\n      ],\n      [\n        \"▁緩\",\n        -11.32808780670166\n      ],\n      [\n        \"▁黄金\",\n        -11.32812213897705\n      ],\n      [\n        \"▁錦\",\n        -11.328158378601074\n      ],\n      [\n        \"▁近畿\",\n        -11.328286170959473\n      ],\n      [\n        \"▁ロール\",\n        -11.328404426574707\n      ],\n      [\n        \"▁スパ\",\n        -11.32848834991455\n      ],\n      [\n        \"▁町村\",\n        -11.32853889465332\n      ],\n      [\n        \"▁残し\",\n        -11.328838348388672\n      ],\n      [\n        \"牛\",\n        -11.328849792480469\n      ],\n      [\n        \"▁忙しい\",\n        -11.328902244567871\n      ],\n      [\n        \"引き\",\n        -11.328910827636719\n      ],\n      [\n        \"▁添加\",\n        -11.328949928283691\n      ],\n      [\n        \"シル\",\n        -11.329257011413574\n      ],\n      [\n        \"ary\",\n        -11.329421043395996\n      ],\n      [\n        \"▁DNA\",\n        -11.329533576965332\n      ],\n      [\n        \"▁認めて\",\n        -11.329578399658203\n      ],\n      [\n        \"▁とう\",\n        -11.329686164855957\n      ],\n      [\n        \"▁鎮\",\n        -11.329758644104004\n      ],\n      [\n        \"▁人種\",\n        -11.329920768737793\n      ],\n      [\n        \"問\",\n        -11.32992935180664\n      ],\n      [\n        \"▁BOX\",\n        -11.330159187316895\n      ],\n      [\n        \"▁球場\",\n        -11.3302001953125\n      ],\n      [\n        \"▁至って\",\n        -11.330440521240234\n      ],\n      [\n        \"▁立体\",\n        -11.330622673034668\n      ],\n      [\n        \"▁告知\",\n        -11.331110954284668\n      ],\n      [\n        \"▁ジェイ\",\n        -11.331257820129395\n      ],\n      [\n        \"▁奉\",\n        -11.331339836120605\n      ],\n      [\n        \"策\",\n        -11.331355094909668\n      ],\n      [\n        \"▁ねば\",\n        -11.331840515136719\n      ],\n      [\n        \"▁語ら\",\n        -11.332123756408691\n      ],\n      [\n        \"▁UP\",\n        -11.332139015197754\n      ],\n      [\n        \"▁グレード\",\n        -11.33217716217041\n      ],\n      [\n        \"▁脱退\",\n        -11.332234382629395\n      ],\n      [\n        \"▁相性\",\n        -11.332528114318848\n      ],\n      [\n        \"▁ゾ\",\n        -11.332658767700195\n      ],\n      [\n        \"▁たっぷり\",\n        -11.33279037475586\n      ],\n      [\n        \"▁施さ\",\n        -11.332793235778809\n      ],\n      [\n        \"滅\",\n        -11.3330717086792\n      ],\n      [\n        \"ウッド\",\n        -11.333094596862793\n      ],\n      [\n        \"▁修行\",\n        -11.333176612854004\n      ],\n      [\n        \"▁ジェームズ\",\n        -11.33334732055664\n      ],\n      [\n        \"▁支払う\",\n        -11.333456993103027\n      ],\n      [\n        \"ヘル\",\n        -11.333547592163086\n      ],\n      [\n        \"▁⌒\",\n        -11.333578109741211\n      ],\n      [\n        \"▁つい\",\n        -11.333673477172852\n      ],\n      [\n        \"▁地形\",\n        -11.333802223205566\n      ],\n      [\n        \"▁明るく\",\n        -11.334163665771484\n      ],\n      [\n        \"鶴\",\n        -11.334168434143066\n      ],\n      [\n        \"▁辺\",\n        -11.3341703414917\n      ],\n      [\n        \"インターネット\",\n        -11.334217071533203\n      ],\n      [\n        \"▁常識\",\n        -11.334247589111328\n      ],\n      [\n        \"▁部下\",\n        -11.334378242492676\n      ],\n      [\n        \"▁宅\",\n        -11.334542274475098\n      ],\n      [\n        \"▁オーケストラ\",\n        -11.33460807800293\n      ],\n      [\n        \"▁々\",\n        -11.334628105163574\n      ],\n      [\n        \"研\",\n        -11.334662437438965\n      ],\n      [\n        \"▁補償\",\n        -11.33471393585205\n      ],\n      [\n        \"▁刑\",\n        -11.334797859191895\n      ],\n      [\n        \"▁後悔\",\n        -11.334817886352539\n      ],\n      [\n        \"リズム\",\n        -11.334906578063965\n      ],\n      [\n        \"▁ダーク\",\n        -11.33495807647705\n      ],\n      [\n        \"▁雷\",\n        -11.335000991821289\n      ],\n      [\n        \"▁必要だ\",\n        -11.335108757019043\n      ],\n      [\n        \"▁組んで\",\n        -11.335290908813477\n      ],\n      [\n        \"▁強度\",\n        -11.335309982299805\n      ],\n      [\n        \"▁即日\",\n        -11.335700988769531\n      ],\n      [\n        \"責\",\n        -11.335832595825195\n      ],\n      [\n        \"彩\",\n        -11.33587646484375\n      ],\n      [\n        \"▁周期\",\n        -11.33598804473877\n      ],\n      [\n        \"▁おけば\",\n        -11.336408615112305\n      ],\n      [\n        \"▁カウンセリング\",\n        -11.336487770080566\n      ],\n      [\n        \"▁ヤング\",\n        -11.336663246154785\n      ],\n      [\n        \"▁降伏\",\n        -11.336690902709961\n      ],\n      [\n        \"▁1959\",\n        -11.336730003356934\n      ],\n      [\n        \"▁切って\",\n        -11.336753845214844\n      ],\n      [\n        \"▁アナログ\",\n        -11.33679485321045\n      ],\n      [\n        \"▁講談\",\n        -11.337383270263672\n      ],\n      [\n        \"▁出勤\",\n        -11.337565422058105\n      ],\n      [\n        \"▁ねん\",\n        -11.337756156921387\n      ],\n      [\n        \"かさ\",\n        -11.338033676147461\n      ],\n      [\n        \"▁岳\",\n        -11.338044166564941\n      ],\n      [\n        \"▁大いに\",\n        -11.338086128234863\n      ],\n      [\n        \"▁応じた\",\n        -11.338287353515625\n      ],\n      [\n        \"▁参議院\",\n        -11.338577270507812\n      ],\n      [\n        \"▁王朝\",\n        -11.338894844055176\n      ],\n      [\n        \"まら\",\n        -11.338943481445312\n      ],\n      [\n        \"▁増大\",\n        -11.338996887207031\n      ],\n      [\n        \"▁iOS\",\n        -11.339112281799316\n      ],\n      [\n        \"▁減らす\",\n        -11.339767456054688\n      ],\n      [\n        \"▁ロケ\",\n        -11.339889526367188\n      ],\n      [\n        \"シャン\",\n        -11.340130805969238\n      ],\n      [\n        \"▁1958\",\n        -11.340242385864258\n      ],\n      [\n        \"▁運輸\",\n        -11.340256690979004\n      ],\n      [\n        \"文字\",\n        -11.340328216552734\n      ],\n      [\n        \"かわ\",\n        -11.340685844421387\n      ],\n      [\n        \"▁後者\",\n        -11.34079360961914\n      ],\n      [\n        \"▁望む\",\n        -11.3408784866333\n      ],\n      [\n        \"▁振動\",\n        -11.340943336486816\n      ],\n      [\n        \"▁たくて\",\n        -11.34118938446045\n      ],\n      [\n        \"▁混合\",\n        -11.341242790222168\n      ],\n      [\n        \"▁一帯\",\n        -11.34124755859375\n      ],\n      [\n        \"▁イラク\",\n        -11.341700553894043\n      ],\n      [\n        \"▁びっくり\",\n        -11.341850280761719\n      ],\n      [\n        \"▁キック\",\n        -11.341869354248047\n      ],\n      [\n        \"▁甘い\",\n        -11.3423490524292\n      ],\n      [\n        \"OD\",\n        -11.342363357543945\n      ],\n      [\n        \"▁火山\",\n        -11.342516899108887\n      ],\n      [\n        \"▁詩人\",\n        -11.34262466430664\n      ],\n      [\n        \"外部\",\n        -11.342817306518555\n      ],\n      [\n        \"▁コレ\",\n        -11.342824935913086\n      ],\n      [\n        \"▁マラ\",\n        -11.342828750610352\n      ],\n      [\n        \"隣接\",\n        -11.342851638793945\n      ],\n      [\n        \"▁ソー\",\n        -11.343031883239746\n      ],\n      [\n        \"▁超え\",\n        -11.343215942382812\n      ],\n      [\n        \"境\",\n        -11.343518257141113\n      ],\n      [\n        \"▁変形\",\n        -11.34424114227295\n      ],\n      [\n        \"▁オリジナルの\",\n        -11.344524383544922\n      ],\n      [\n        \"▁1949\",\n        -11.344529151916504\n      ],\n      [\n        \"▁年収\",\n        -11.344820976257324\n      ],\n      [\n        \"▁裸\",\n        -11.34487247467041\n      ],\n      [\n        \"▁神様\",\n        -11.344989776611328\n      ],\n      [\n        \"▁税金\",\n        -11.344990730285645\n      ],\n      [\n        \"▁前線\",\n        -11.345267295837402\n      ],\n      [\n        \"▁RE\",\n        -11.345398902893066\n      ],\n      [\n        \"▁時々\",\n        -11.345398902893066\n      ],\n      [\n        \"▁方言\",\n        -11.345568656921387\n      ],\n      [\n        \"▁大宮\",\n        -11.345573425292969\n      ],\n      [\n        \"▁振る\",\n        -11.345877647399902\n      ],\n      [\n        \"▁1946\",\n        -11.3458833694458\n      ],\n      [\n        \"▁援\",\n        -11.346023559570312\n      ],\n      [\n        \"▁食材\",\n        -11.346176147460938\n      ],\n      [\n        \"▁賢\",\n        -11.346182823181152\n      ],\n      [\n        \"▁参入\",\n        -11.346189498901367\n      ],\n      [\n        \"▁師事\",\n        -11.346353530883789\n      ],\n      [\n        \"▁自然に\",\n        -11.346444129943848\n      ],\n      [\n        \"▁さいたま\",\n        -11.346555709838867\n      ],\n      [\n        \"輝\",\n        -11.346749305725098\n      ],\n      [\n        \"なし\",\n        -11.346778869628906\n      ],\n      [\n        \"▁通学\",\n        -11.346781730651855\n      ],\n      [\n        \"▁処刑\",\n        -11.346783638000488\n      ],\n      [\n        \"▁ごう\",\n        -11.347029685974121\n      ],\n      [\n        \"神奈川\",\n        -11.34721851348877\n      ],\n      [\n        \"▁ストップ\",\n        -11.34731388092041\n      ],\n      [\n        \"▁配備\",\n        -11.347322463989258\n      ],\n      [\n        \"元々\",\n        -11.347428321838379\n      ],\n      [\n        \"▁デル\",\n        -11.347893714904785\n      ],\n      [\n        \"▁朱\",\n        -11.348068237304688\n      ],\n      [\n        \"イー\",\n        -11.348094940185547\n      ],\n      [\n        \"米国\",\n        -11.348116874694824\n      ],\n      [\n        \"▁チョコレート\",\n        -11.348447799682617\n      ],\n      [\n        \"ロック\",\n        -11.348575592041016\n      ],\n      [\n        \"▁ウル\",\n        -11.348711967468262\n      ],\n      [\n        \"▁炉\",\n        -11.348762512207031\n      ],\n      [\n        \"▁ウィーン\",\n        -11.348930358886719\n      ],\n      [\n        \"▁マネー\",\n        -11.349210739135742\n      ],\n      [\n        \"▁一時的に\",\n        -11.349344253540039\n      ],\n      [\n        \"▁原題\",\n        -11.349353790283203\n      ],\n      [\n        \"茂\",\n        -11.349411010742188\n      ],\n      [\n        \"▁十字\",\n        -11.349639892578125\n      ],\n      [\n        \"▁荘\",\n        -11.349878311157227\n      ],\n      [\n        \"とても\",\n        -11.350150108337402\n      ],\n      [\n        \"▁Be\",\n        -11.350240707397461\n      ],\n      [\n        \"厚\",\n        -11.350362777709961\n      ],\n      [\n        \"ey\",\n        -11.350406646728516\n      ],\n      [\n        \"▁織田\",\n        -11.350552558898926\n      ],\n      [\n        \"▁​\",\n        -11.350791931152344\n      ],\n      [\n        \"▁An\",\n        -11.350905418395996\n      ],\n      [\n        \"▁太田\",\n        -11.351000785827637\n      ],\n      [\n        \"脇\",\n        -11.351354598999023\n      ],\n      [\n        \"▁糖\",\n        -11.351433753967285\n      ],\n      [\n        \"▁ドクター\",\n        -11.351466178894043\n      ],\n      [\n        \"▁厳しく\",\n        -11.351561546325684\n      ],\n      [\n        \"うち\",\n        -11.351628303527832\n      ],\n      [\n        \"ペット\",\n        -11.351853370666504\n      ],\n      [\n        \"▁薬物\",\n        -11.351940155029297\n      ],\n      [\n        \"▁mi\",\n        -11.351956367492676\n      ],\n      [\n        \"▁表紙\",\n        -11.352012634277344\n      ],\n      [\n        \"▁回って\",\n        -11.35215950012207\n      ],\n      [\n        \"▁施策\",\n        -11.352235794067383\n      ],\n      [\n        \"椎\",\n        -11.352279663085938\n      ],\n      [\n        \"▁140\",\n        -11.35239315032959\n      ],\n      [\n        \"▁CG\",\n        -11.35241413116455\n      ],\n      [\n        \"▁触れる\",\n        -11.3524751663208\n      ],\n      [\n        \"袋\",\n        -11.352651596069336\n      ],\n      [\n        \"▁エージェント\",\n        -11.353012084960938\n      ],\n      [\n        \"▁置き換え\",\n        -11.35302734375\n      ],\n      [\n        \"▁宣\",\n        -11.353174209594727\n      ],\n      [\n        \"ーヌ\",\n        -11.353299140930176\n      ],\n      [\n        \"▁派生\",\n        -11.353357315063477\n      ],\n      [\n        \"俺\",\n        -11.353384017944336\n      ],\n      [\n        \"異\",\n        -11.353407859802246\n      ],\n      [\n        \"イベント\",\n        -11.353802680969238\n      ],\n      [\n        \"超\",\n        -11.353889465332031\n      ],\n      [\n        \"▁工芸\",\n        -11.353912353515625\n      ],\n      [\n        \"▁禍\",\n        -11.353997230529785\n      ],\n      [\n        \"▁日付\",\n        -11.354031562805176\n      ],\n      [\n        \"▁減って\",\n        -11.354117393493652\n      ],\n      [\n        \"▁BL\",\n        -11.354287147521973\n      ],\n      [\n        \"いい\",\n        -11.354822158813477\n      ],\n      [\n        \"▁質量\",\n        -11.355236053466797\n      ],\n      [\n        \"▁航海\",\n        -11.355384826660156\n      ],\n      [\n        \"ug\",\n        -11.355619430541992\n      ],\n      [\n        \"娘\",\n        -11.355775833129883\n      ],\n      [\n        \"皆様\",\n        -11.355876922607422\n      ],\n      [\n        \"▁戦力\",\n        -11.356178283691406\n      ],\n      [\n        \"使用\",\n        -11.356258392333984\n      ],\n      [\n        \"過\",\n        -11.356328010559082\n      ],\n      [\n        \"▁TR\",\n        -11.35645580291748\n      ],\n      [\n        \"AM\",\n        -11.356547355651855\n      ],\n      [\n        \"ぼう\",\n        -11.356629371643066\n      ],\n      [\n        \"▁踊り\",\n        -11.356727600097656\n      ],\n      [\n        \"700\",\n        -11.356792449951172\n      ],\n      [\n        \"▁東海道\",\n        -11.356890678405762\n      ],\n      [\n        \"強い\",\n        -11.356956481933594\n      ],\n      [\n        \"▁アウター\",\n        -11.357093811035156\n      ],\n      [\n        \"中央\",\n        -11.357128143310547\n      ],\n      [\n        \"▁1955\",\n        -11.357226371765137\n      ],\n      [\n        \"▁併設\",\n        -11.357275009155273\n      ],\n      [\n        \"▁集会\",\n        -11.357596397399902\n      ],\n      [\n        \"▁脅威\",\n        -11.357720375061035\n      ],\n      [\n        \"▁ちゅう\",\n        -11.358174324035645\n      ],\n      [\n        \"▁シンプルな\",\n        -11.358179092407227\n      ],\n      [\n        \"▁漁\",\n        -11.35832691192627\n      ],\n      [\n        \"▁武将\",\n        -11.358410835266113\n      ],\n      [\n        \"▁代わって\",\n        -11.358453750610352\n      ],\n      [\n        \"▁見れば\",\n        -11.358464241027832\n      ],\n      [\n        \"▁寿\",\n        -11.3588228225708\n      ],\n      [\n        \"▁ray\",\n        -11.359000205993652\n      ],\n      [\n        \"右衛門\",\n        -11.359084129333496\n      ],\n      [\n        \"態\",\n        -11.359150886535645\n      ],\n      [\n        \"▁アクティブ\",\n        -11.359396934509277\n      ],\n      [\n        \"▁要する\",\n        -11.359589576721191\n      ],\n      [\n        \"添\",\n        -11.359638214111328\n      ],\n      [\n        \"▁ぜ\",\n        -11.359756469726562\n      ],\n      [\n        \"テス\",\n        -11.359969139099121\n      ],\n      [\n        \"▁予報\",\n        -11.360020637512207\n      ],\n      [\n        \"▁外側\",\n        -11.360222816467285\n      ],\n      [\n        \"▁完結\",\n        -11.360563278198242\n      ],\n      [\n        \"▁スピーカー\",\n        -11.36075496673584\n      ],\n      [\n        \"ys\",\n        -11.36102294921875\n      ],\n      [\n        \"▁維新\",\n        -11.361058235168457\n      ],\n      [\n        \"▁ニー\",\n        -11.361201286315918\n      ],\n      [\n        \"▁痛い\",\n        -11.36130428314209\n      ],\n      [\n        \"▁土曜\",\n        -11.361458778381348\n      ],\n      [\n        \"▁大好き\",\n        -11.361858367919922\n      ],\n      [\n        \"▁正義\",\n        -11.361873626708984\n      ],\n      [\n        \"出して\",\n        -11.361889839172363\n      ],\n      [\n        \"▁保全\",\n        -11.362051963806152\n      ],\n      [\n        \"▁否\",\n        -11.362258911132812\n      ],\n      [\n        \"▁ウェイ\",\n        -11.362319946289062\n      ],\n      [\n        \"▁重ねて\",\n        -11.362327575683594\n      ],\n      [\n        \"警\",\n        -11.362360954284668\n      ],\n      [\n        \"なる\",\n        -11.362467765808105\n      ],\n      [\n        \"▁頑張り\",\n        -11.362488746643066\n      ],\n      [\n        \"▁衆\",\n        -11.362492561340332\n      ],\n      [\n        \"アナ\",\n        -11.362637519836426\n      ],\n      [\n        \"ぇ\",\n        -11.362712860107422\n      ],\n      [\n        \"▁バックアップ\",\n        -11.362859725952148\n      ],\n      [\n        \"評議\",\n        -11.362960815429688\n      ],\n      [\n        \"▁アンダー\",\n        -11.363035202026367\n      ],\n      [\n        \"▁復元\",\n        -11.363086700439453\n      ],\n      [\n        \"▁峠\",\n        -11.363121032714844\n      ],\n      [\n        \"▁教養\",\n        -11.363147735595703\n      ],\n      [\n        \"▁独自\",\n        -11.36318302154541\n      ],\n      [\n        \"▁展望\",\n        -11.363189697265625\n      ],\n      [\n        \"果\",\n        -11.363245010375977\n      ],\n      [\n        \"功\",\n        -11.36369800567627\n      ],\n      [\n        \"句\",\n        -11.363713264465332\n      ],\n      [\n        \"▁1956\",\n        -11.363763809204102\n      ],\n      [\n        \"▁隠し\",\n        -11.36382007598877\n      ],\n      [\n        \"▁給\",\n        -11.363970756530762\n      ],\n      [\n        \"杉\",\n        -11.36409854888916\n      ],\n      [\n        \"▁蓮\",\n        -11.364133834838867\n      ],\n      [\n        \"IE\",\n        -11.364386558532715\n      ],\n      [\n        \"▁コミックス\",\n        -11.364822387695312\n      ],\n      [\n        \"▁死んで\",\n        -11.364840507507324\n      ],\n      [\n        \"▁やり取り\",\n        -11.364850997924805\n      ],\n      [\n        \"▁パーセント\",\n        -11.364934921264648\n      ],\n      [\n        \"▁ドライ\",\n        -11.365094184875488\n      ],\n      [\n        \"▁たま\",\n        -11.365121841430664\n      ],\n      [\n        \"▁Th\",\n        -11.365242958068848\n      ],\n      [\n        \"▁達した\",\n        -11.365259170532227\n      ],\n      [\n        \"▁錠\",\n        -11.365274429321289\n      ],\n      [\n        \"▁読売\",\n        -11.365394592285156\n      ],\n      [\n        \"投稿\",\n        -11.365428924560547\n      ],\n      [\n        \"▁身分\",\n        -11.365547180175781\n      ],\n      [\n        \"タイトル\",\n        -11.365589141845703\n      ],\n      [\n        \"▁ジェット\",\n        -11.365608215332031\n      ],\n      [\n        \"▁関わって\",\n        -11.365958213806152\n      ],\n      [\n        \"▁間違って\",\n        -11.366086959838867\n      ],\n      [\n        \"▁VR\",\n        -11.36613655090332\n      ],\n      [\n        \"▁送った\",\n        -11.36618423461914\n      ],\n      [\n        \"1987\",\n        -11.366327285766602\n      ],\n      [\n        \"坊\",\n        -11.366374969482422\n      ],\n      [\n        \"▁パーソナリティ\",\n        -11.366392135620117\n      ],\n      [\n        \"▁指数\",\n        -11.366482734680176\n      ],\n      [\n        \"タリ\",\n        -11.366554260253906\n      ],\n      [\n        \"▁歌い\",\n        -11.366826057434082\n      ],\n      [\n        \"▁復\",\n        -11.366987228393555\n      ],\n      [\n        \"▁綾\",\n        -11.367074966430664\n      ],\n      [\n        \"▁発注\",\n        -11.367340087890625\n      ],\n      [\n        \"監督\",\n        -11.367361068725586\n      ],\n      [\n        \"▁驚く\",\n        -11.367505073547363\n      ],\n      [\n        \"▁スカ\",\n        -11.367520332336426\n      ],\n      [\n        \";\",\n        -11.367546081542969\n      ],\n      [\n        \"▁サム\",\n        -11.367730140686035\n      ],\n      [\n        \"▁癌\",\n        -11.367758750915527\n      ],\n      [\n        \"翌年\",\n        -11.368062973022461\n      ],\n      [\n        \"教育\",\n        -11.368088722229004\n      ],\n      [\n        \"▁安全に\",\n        -11.368107795715332\n      ],\n      [\n        \"▁造り\",\n        -11.368128776550293\n      ],\n      [\n        \"ng\",\n        -11.368326187133789\n      ],\n      [\n        \"▁リクエスト\",\n        -11.36856746673584\n      ],\n      [\n        \"▁薄い\",\n        -11.36866569519043\n      ],\n      [\n        \"千葉\",\n        -11.36867618560791\n      ],\n      [\n        \"▁メタ\",\n        -11.368746757507324\n      ],\n      [\n        \"▁コラボレーション\",\n        -11.369024276733398\n      ],\n      [\n        \"▁軽い\",\n        -11.369091033935547\n      ],\n      [\n        \"▁無人\",\n        -11.369128227233887\n      ],\n      [\n        \"▁ランプ\",\n        -11.36913013458252\n      ],\n      [\n        \"RA\",\n        -11.36916446685791\n      ],\n      [\n        \"▁続\",\n        -11.369226455688477\n      ],\n      [\n        \"▁ヒント\",\n        -11.369351387023926\n      ],\n      [\n        \"▁面白\",\n        -11.369452476501465\n      ],\n      [\n        \"▁ファンタジー\",\n        -11.369495391845703\n      ],\n      [\n        \"▁敏\",\n        -11.36989688873291\n      ],\n      [\n        \"再\",\n        -11.369994163513184\n      ],\n      [\n        \"▁遊んで\",\n        -11.370100975036621\n      ],\n      [\n        \"▁走\",\n        -11.370369911193848\n      ],\n      [\n        \"▁休暇\",\n        -11.37048053741455\n      ],\n      [\n        \"▁岡田\",\n        -11.370655059814453\n      ],\n      [\n        \"▁一生\",\n        -11.370814323425293\n      ],\n      [\n        \"▁正直\",\n        -11.370885848999023\n      ],\n      [\n        \"▁相対\",\n        -11.370927810668945\n      ],\n      [\n        \"▁キャッチ\",\n        -11.371609687805176\n      ],\n      [\n        \"▁サプリメント\",\n        -11.37176513671875\n      ],\n      [\n        \"存\",\n        -11.37182903289795\n      ],\n      [\n        \"▁高まり\",\n        -11.371981620788574\n      ],\n      [\n        \"▁sh\",\n        -11.372234344482422\n      ],\n      [\n        \"▁旅館\",\n        -11.372458457946777\n      ],\n      [\n        \"▁食堂\",\n        -11.37263298034668\n      ],\n      [\n        \"▁カロリー\",\n        -11.372726440429688\n      ],\n      [\n        \"▁小児\",\n        -11.372759819030762\n      ],\n      [\n        \"▁発想\",\n        -11.372878074645996\n      ],\n      [\n        \"▁ノルウェー\",\n        -11.372900009155273\n      ],\n      [\n        \"▁大事に\",\n        -11.373027801513672\n      ],\n      [\n        \"▁簡易\",\n        -11.373116493225098\n      ],\n      [\n        \"▁明け\",\n        -11.373148918151855\n      ],\n      [\n        \"ロール\",\n        -11.373161315917969\n      ],\n      [\n        \"康\",\n        -11.373333930969238\n      ],\n      [\n        \"▁スムーズに\",\n        -11.373434066772461\n      ],\n      [\n        \"sh\",\n        -11.373534202575684\n      ],\n      [\n        \"▁利点\",\n        -11.373557090759277\n      ],\n      [\n        \"▁社名\",\n        -11.373580932617188\n      ],\n      [\n        \"▁通話\",\n        -11.373645782470703\n      ],\n      [\n        \"▁インフラ\",\n        -11.373826026916504\n      ],\n      [\n        \"▁たとえば\",\n        -11.374016761779785\n      ],\n      [\n        \"▁タバコ\",\n        -11.374128341674805\n      ],\n      [\n        \"▁1943\",\n        -11.374295234680176\n      ],\n      [\n        \"▁なんで\",\n        -11.374680519104004\n      ],\n      [\n        \"▁登記\",\n        -11.374687194824219\n      ],\n      [\n        \"▁含み\",\n        -11.37474250793457\n      ],\n      [\n        \"アラ\",\n        -11.37476921081543\n      ],\n      [\n        \"▁優しく\",\n        -11.374796867370605\n      ],\n      [\n        \"▁コンクール\",\n        -11.374865531921387\n      ],\n      [\n        \"▁市販\",\n        -11.374872207641602\n      ],\n      [\n        \"▁店員\",\n        -11.374967575073242\n      ],\n      [\n        \"▁転送\",\n        -11.374981880187988\n      ],\n      [\n        \"▁一層\",\n        -11.375066757202148\n      ],\n      [\n        \"[[\",\n        -11.375114440917969\n      ],\n      [\n        \"UR\",\n        -11.375125885009766\n      ],\n      [\n        \"復\",\n        -11.375174522399902\n      ],\n      [\n        \"▁フランク\",\n        -11.375175476074219\n      ],\n      [\n        \"▁辺り\",\n        -11.375176429748535\n      ],\n      [\n        \"▁僧\",\n        -11.3751859664917\n      ],\n      [\n        \"▁捉え\",\n        -11.375356674194336\n      ],\n      [\n        \"ure\",\n        -11.375386238098145\n      ],\n      [\n        \"名古屋\",\n        -11.375422477722168\n      ],\n      [\n        \"かな\",\n        -11.375495910644531\n      ],\n      [\n        \"▁当たって\",\n        -11.375606536865234\n      ],\n      [\n        \"▁任じ\",\n        -11.375614166259766\n      ],\n      [\n        \"▁no\",\n        -11.375897407531738\n      ],\n      [\n        \"どんな\",\n        -11.375904083251953\n      ],\n      [\n        \"▁順番\",\n        -11.375988960266113\n      ],\n      [\n        \"▁拓\",\n        -11.376008033752441\n      ],\n      [\n        \"ージ\",\n        -11.37602710723877\n      ],\n      [\n        \"▁立てて\",\n        -11.37603759765625\n      ],\n      [\n        \"▁営\",\n        -11.376338958740234\n      ],\n      [\n        \"カード\",\n        -11.37636947631836\n      ],\n      [\n        \"もり\",\n        -11.376874923706055\n      ],\n      [\n        \"▁CH\",\n        -11.376956939697266\n      ],\n      [\n        \"ong\",\n        -11.377039909362793\n      ],\n      [\n        \"ピア\",\n        -11.37723159790039\n      ],\n      [\n        \"▁1941\",\n        -11.377279281616211\n      ],\n      [\n        \"▁79\",\n        -11.377466201782227\n      ],\n      [\n        \"▁法学\",\n        -11.377822875976562\n      ],\n      [\n        \"▁教皇\",\n        -11.377859115600586\n      ],\n      [\n        \"群\",\n        -11.377963066101074\n      ],\n      [\n        \"▁快適な\",\n        -11.378113746643066\n      ],\n      [\n        \"▁金銭\",\n        -11.378114700317383\n      ],\n      [\n        \"仙\",\n        -11.37812328338623\n      ],\n      [\n        \"防\",\n        -11.378327369689941\n      ],\n      [\n        \"▁THR\",\n        -11.378715515136719\n      ],\n      [\n        \"▁大橋\",\n        -11.378751754760742\n      ],\n      [\n        \"▁チャールズ\",\n        -11.378766059875488\n      ],\n      [\n        \"ib\",\n        -11.379109382629395\n      ],\n      [\n        \"▁フィナステリ\",\n        -11.379110336303711\n      ],\n      [\n        \"▁歌って\",\n        -11.379213333129883\n      ],\n      [\n        \"▁ないし\",\n        -11.379425048828125\n      ],\n      [\n        \"シカ\",\n        -11.379566192626953\n      ],\n      [\n        \"▁キャッシング\",\n        -11.379781723022461\n      ],\n      [\n        \"豆\",\n        -11.379894256591797\n      ],\n      [\n        \"しかった\",\n        -11.3799467086792\n      ],\n      [\n        \"▁シミュレーション\",\n        -11.380035400390625\n      ],\n      [\n        \"ペル\",\n        -11.380061149597168\n      ],\n      [\n        \"ウィン\",\n        -11.380120277404785\n      ],\n      [\n        \"▁地獄\",\n        -11.380319595336914\n      ],\n      [\n        \"▁まつり\",\n        -11.380362510681152\n      ],\n      [\n        \"▁外出\",\n        -11.38058853149414\n      ],\n      [\n        \"▁分かった\",\n        -11.380825996398926\n      ],\n      [\n        \"▁大隊\",\n        -11.380863189697266\n      ],\n      [\n        \"ビット\",\n        -11.38097858428955\n      ],\n      [\n        \"▁腐\",\n        -11.381110191345215\n      ],\n      [\n        \"▁実習\",\n        -11.381326675415039\n      ],\n      [\n        \"▁変遷\",\n        -11.38154411315918\n      ],\n      [\n        \"▁死者\",\n        -11.381573677062988\n      ],\n      [\n        \"ga\",\n        -11.381750106811523\n      ],\n      [\n        \"▁ドコモ\",\n        -11.381848335266113\n      ],\n      [\n        \"▁センサー\",\n        -11.381864547729492\n      ],\n      [\n        \"▁ブー\",\n        -11.381866455078125\n      ],\n      [\n        \"▁泣き\",\n        -11.381948471069336\n      ],\n      [\n        \"従来\",\n        -11.381952285766602\n      ],\n      [\n        \"▁引っ越し\",\n        -11.38197135925293\n      ],\n      [\n        \"iv\",\n        -11.382162094116211\n      ],\n      [\n        \"▁Music\",\n        -11.38217830657959\n      ],\n      [\n        \"▁ディー\",\n        -11.382359504699707\n      ],\n      [\n        \"▁応\",\n        -11.382466316223145\n      ],\n      [\n        \"文化\",\n        -11.382533073425293\n      ],\n      [\n        \"ツィ\",\n        -11.382761001586914\n      ],\n      [\n        \"▁破損\",\n        -11.38283634185791\n      ],\n      [\n        \"▁動かす\",\n        -11.382902145385742\n      ],\n      [\n        \"▁アルミ\",\n        -11.382905006408691\n      ],\n      [\n        \"オール\",\n        -11.382916450500488\n      ],\n      [\n        \"▁ワークス\",\n        -11.383146286010742\n      ],\n      [\n        \"ke\",\n        -11.383462905883789\n      ],\n      [\n        \"▁1942\",\n        -11.383649826049805\n      ],\n      [\n        \"▁跡地\",\n        -11.38370418548584\n      ],\n      [\n        \"▁本番\",\n        -11.383882522583008\n      ],\n      [\n        \"▁一言\",\n        -11.383973121643066\n      ],\n      [\n        \"どこ\",\n        -11.384206771850586\n      ],\n      [\n        \"▁当地\",\n        -11.384252548217773\n      ],\n      [\n        \"▁改め\",\n        -11.384307861328125\n      ],\n      [\n        \"▁リサーチ\",\n        -11.384371757507324\n      ],\n      [\n        \"斗\",\n        -11.384398460388184\n      ],\n      [\n        \"オリ\",\n        -11.384517669677734\n      ],\n      [\n        \"▁従い\",\n        -11.384676933288574\n      ],\n      [\n        \"▁幸せに\",\n        -11.384804725646973\n      ],\n      [\n        \"▁保安\",\n        -11.384843826293945\n      ],\n      [\n        \"▁付いた\",\n        -11.384897232055664\n      ],\n      [\n        \"▁ハーフ\",\n        -11.385117530822754\n      ],\n      [\n        \"ヶ\",\n        -11.385180473327637\n      ],\n      [\n        \"▁〔\",\n        -11.385435104370117\n      ],\n      [\n        \"▁マックス\",\n        -11.385468482971191\n      ],\n      [\n        \"▁血圧\",\n        -11.385557174682617\n      ],\n      [\n        \"▁負荷\",\n        -11.385584831237793\n      ],\n      [\n        \"▁反射\",\n        -11.385669708251953\n      ],\n      [\n        \"▁フラワー\",\n        -11.385709762573242\n      ],\n      [\n        \"▁AT\",\n        -11.385724067687988\n      ],\n      [\n        \"▁宜しく\",\n        -11.385740280151367\n      ],\n      [\n        \"▁少将\",\n        -11.385747909545898\n      ],\n      [\n        \"どちら\",\n        -11.385842323303223\n      ],\n      [\n        \"▁北米\",\n        -11.385897636413574\n      ],\n      [\n        \"▁Store\",\n        -11.386024475097656\n      ],\n      [\n        \"▁ゆき\",\n        -11.386122703552246\n      ],\n      [\n        \"▁余儀な\",\n        -11.386151313781738\n      ],\n      [\n        \"▁審\",\n        -11.386201858520508\n      ],\n      [\n        \"▁切る\",\n        -11.386321067810059\n      ],\n      [\n        \"▁功\",\n        -11.386373519897461\n      ],\n      [\n        \"ミュ\",\n        -11.38637924194336\n      ],\n      [\n        \"▁SD\",\n        -11.386445999145508\n      ],\n      [\n        \"趣味\",\n        -11.386474609375\n      ],\n      [\n        \"テック\",\n        -11.386545181274414\n      ],\n      [\n        \"ケイ\",\n        -11.386573791503906\n      ],\n      [\n        \"▁For\",\n        -11.3866605758667\n      ],\n      [\n        \"▁動か\",\n        -11.38677978515625\n      ],\n      [\n        \"▁コンサルティング\",\n        -11.386935234069824\n      ],\n      [\n        \"▁GO\",\n        -11.387088775634766\n      ],\n      [\n        \"▁あて\",\n        -11.3871431350708\n      ],\n      [\n        \"▁パル\",\n        -11.387340545654297\n      ],\n      [\n        \"▁車種\",\n        -11.387614250183105\n      ],\n      [\n        \"▁学問\",\n        -11.387870788574219\n      ],\n      [\n        \"▁退任\",\n        -11.387969017028809\n      ],\n      [\n        \"▁1952\",\n        -11.388185501098633\n      ],\n      [\n        \"▁症候\",\n        -11.388313293457031\n      ],\n      [\n        \"▁団地\",\n        -11.388446807861328\n      ],\n      [\n        \"▁ストレート\",\n        -11.388608932495117\n      ],\n      [\n        \"裁\",\n        -11.388666152954102\n      ],\n      [\n        \"▁メタル\",\n        -11.38874340057373\n      ],\n      [\n        \"▁優れて\",\n        -11.388877868652344\n      ],\n      [\n        \"▁テキサス\",\n        -11.389604568481445\n      ],\n      [\n        \"▁浮\",\n        -11.389726638793945\n      ],\n      [\n        \"▁数え\",\n        -11.389790534973145\n      ],\n      [\n        \"ウェル\",\n        -11.389854431152344\n      ],\n      [\n        \"試合\",\n        -11.389942169189453\n      ],\n      [\n        \"▁そちら\",\n        -11.390044212341309\n      ],\n      [\n        \"▁思わず\",\n        -11.390047073364258\n      ],\n      [\n        \"▁セルフ\",\n        -11.390227317810059\n      ],\n      [\n        \"粉\",\n        -11.390572547912598\n      ],\n      [\n        \"▁ウェ\",\n        -11.390772819519043\n      ],\n      [\n        \"エス\",\n        -11.390857696533203\n      ],\n      [\n        \"▁義塾\",\n        -11.39102840423584\n      ],\n      [\n        \"▁たまに\",\n        -11.391061782836914\n      ],\n      [\n        \"▁巣\",\n        -11.39116382598877\n      ],\n      [\n        \"LO\",\n        -11.391298294067383\n      ],\n      [\n        \"▁覚悟\",\n        -11.391361236572266\n      ],\n      [\n        \"▁構え\",\n        -11.391495704650879\n      ],\n      [\n        \"▁着手\",\n        -11.391719818115234\n      ],\n      [\n        \"ポー\",\n        -11.391880989074707\n      ],\n      [\n        \"まい\",\n        -11.392142295837402\n      ],\n      [\n        \"公式\",\n        -11.392251968383789\n      ],\n      [\n        \"横\",\n        -11.392486572265625\n      ],\n      [\n        \"▁高山\",\n        -11.392518997192383\n      ],\n      [\n        \"▁計測\",\n        -11.392745971679688\n      ],\n      [\n        \"▁ごはん\",\n        -11.392804145812988\n      ],\n      [\n        \"▁調教\",\n        -11.392866134643555\n      ],\n      [\n        \"▁佳\",\n        -11.392877578735352\n      ],\n      [\n        \"▁シリア\",\n        -11.392888069152832\n      ],\n      [\n        \"テーション\",\n        -11.392898559570312\n      ],\n      [\n        \"▁騒動\",\n        -11.392924308776855\n      ],\n      [\n        \"▁糖尿\",\n        -11.392956733703613\n      ],\n      [\n        \"▁幸福\",\n        -11.39303970336914\n      ],\n      [\n        \"▁取り入れ\",\n        -11.39321231842041\n      ],\n      [\n        \"▁グレイ\",\n        -11.39331340789795\n      ],\n      [\n        \"▁許諾\",\n        -11.393343925476074\n      ],\n      [\n        \"▁神学\",\n        -11.393364906311035\n      ],\n      [\n        \"▁さすが\",\n        -11.393399238586426\n      ],\n      [\n        \"もともと\",\n        -11.39380168914795\n      ],\n      [\n        \"▁指標\",\n        -11.39383316040039\n      ],\n      [\n        \"▁全長\",\n        -11.394052505493164\n      ],\n      [\n        \"▁狙い\",\n        -11.39407730102539\n      ],\n      [\n        \"▁対決\",\n        -11.394083976745605\n      ],\n      [\n        \"▁直径\",\n        -11.394116401672363\n      ],\n      [\n        \"bo\",\n        -11.39417552947998\n      ],\n      [\n        \"▁獣\",\n        -11.394224166870117\n      ],\n      [\n        \"▁班\",\n        -11.394392967224121\n      ],\n      [\n        \"▁助成\",\n        -11.394437789916992\n      ],\n      [\n        \"▁騎乗\",\n        -11.394556045532227\n      ],\n      [\n        \"▁ニュージーランド\",\n        -11.394590377807617\n      ],\n      [\n        \"▁自然の\",\n        -11.3945951461792\n      ],\n      [\n        \"▁使\",\n        -11.39501953125\n      ],\n      [\n        \"▁前方\",\n        -11.395659446716309\n      ],\n      [\n        \"ロード\",\n        -11.396112442016602\n      ],\n      [\n        \"▁うどん\",\n        -11.396172523498535\n      ],\n      [\n        \"向き\",\n        -11.396605491638184\n      ],\n      [\n        \"▁カナダグース\",\n        -11.396750450134277\n      ],\n      [\n        \"▁ニッポン\",\n        -11.39693832397461\n      ],\n      [\n        \"ner\",\n        -11.397146224975586\n      ],\n      [\n        \"サル\",\n        -11.397250175476074\n      ],\n      [\n        \"ten\",\n        -11.39733600616455\n      ],\n      [\n        \"▁制覇\",\n        -11.397369384765625\n      ],\n      [\n        \"RP\",\n        -11.397405624389648\n      ],\n      [\n        \"庫\",\n        -11.397489547729492\n      ],\n      [\n        \"▁ねえ\",\n        -11.397672653198242\n      ],\n      [\n        \"▁株価\",\n        -11.397697448730469\n      ],\n      [\n        \"KO\",\n        -11.39783763885498\n      ],\n      [\n        \"塔\",\n        -11.3978853225708\n      ],\n      [\n        \"トス\",\n        -11.397918701171875\n      ],\n      [\n        \"▁所長\",\n        -11.398212432861328\n      ],\n      [\n        \"▁話した\",\n        -11.398279190063477\n      ],\n      [\n        \"▁市営\",\n        -11.398282051086426\n      ],\n      [\n        \"▁宇都宮\",\n        -11.398306846618652\n      ],\n      [\n        \"▁返事\",\n        -11.398462295532227\n      ],\n      [\n        \"▁いつか\",\n        -11.398660659790039\n      ],\n      [\n        \"▁年始\",\n        -11.398733139038086\n      ],\n      [\n        \"▁結んで\",\n        -11.398909568786621\n      ],\n      [\n        \"リオン\",\n        -11.398958206176758\n      ],\n      [\n        \"▁bit\",\n        -11.399029731750488\n      ],\n      [\n        \"ca\",\n        -11.399153709411621\n      ],\n      [\n        \"▁あげた\",\n        -11.399530410766602\n      ],\n      [\n        \"▁起こして\",\n        -11.399611473083496\n      ],\n      [\n        \"▁商人\",\n        -11.399667739868164\n      ],\n      [\n        \"▁変身\",\n        -11.399801254272461\n      ],\n      [\n        \"貞\",\n        -11.40023422241211\n      ],\n      [\n        \"▁瀬戸\",\n        -11.400350570678711\n      ],\n      [\n        \"みんな\",\n        -11.400351524353027\n      ],\n      [\n        \"なか\",\n        -11.400411605834961\n      ],\n      [\n        \"▁SO\",\n        -11.40064525604248\n      ],\n      [\n        \"▁慣れて\",\n        -11.400846481323242\n      ],\n      [\n        \"▁始まって\",\n        -11.400975227355957\n      ],\n      [\n        \"▁Wi\",\n        -11.401020050048828\n      ],\n      [\n        \"▁遭遇\",\n        -11.4010648727417\n      ],\n      [\n        \"▁グル\",\n        -11.401191711425781\n      ],\n      [\n        \"tor\",\n        -11.401289939880371\n      ],\n      [\n        \"▁東方\",\n        -11.401378631591797\n      ],\n      [\n        \"▁流出\",\n        -11.401449203491211\n      ],\n      [\n        \"▁訴え\",\n        -11.401565551757812\n      ],\n      [\n        \"day\",\n        -11.401707649230957\n      ],\n      [\n        \"▁アルゼンチン\",\n        -11.40173625946045\n      ],\n      [\n        \"1986\",\n        -11.401762008666992\n      ],\n      [\n        \"▁水着\",\n        -11.401846885681152\n      ],\n      [\n        \"▁ローズ\",\n        -11.401937484741211\n      ],\n      [\n        \"▁硬\",\n        -11.401998519897461\n      ],\n      [\n        \"▁竣工\",\n        -11.40201473236084\n      ],\n      [\n        \"▁校長\",\n        -11.402057647705078\n      ],\n      [\n        \"▁ニット\",\n        -11.402103424072266\n      ],\n      [\n        \"▁マジ\",\n        -11.402178764343262\n      ],\n      [\n        \"▁秘書\",\n        -11.402276992797852\n      ],\n      [\n        \"パラ\",\n        -11.402348518371582\n      ],\n      [\n        \"いで\",\n        -11.402623176574707\n      ],\n      [\n        \"▁校舎\",\n        -11.402649879455566\n      ],\n      [\n        \"▁弓\",\n        -11.402664184570312\n      ],\n      [\n        \"▁意欲\",\n        -11.402665138244629\n      ],\n      [\n        \"▁マスコミ\",\n        -11.40276050567627\n      ],\n      [\n        \"ノス\",\n        -11.402934074401855\n      ],\n      [\n        \"▁マリー\",\n        -11.402961730957031\n      ],\n      [\n        \"▁田舎\",\n        -11.403072357177734\n      ],\n      [\n        \"ヨー\",\n        -11.403209686279297\n      ],\n      [\n        \"▁行使\",\n        -11.403544425964355\n      ],\n      [\n        \"値\",\n        -11.40357494354248\n      ],\n      [\n        \"すなわち\",\n        -11.403916358947754\n      ],\n      [\n        \"▁小倉\",\n        -11.404197692871094\n      ],\n      [\n        \"丘\",\n        -11.404438972473145\n      ],\n      [\n        \"▁識別\",\n        -11.404500007629395\n      ],\n      [\n        \"▁将棋\",\n        -11.404692649841309\n      ],\n      [\n        \"▁本土\",\n        -11.404706001281738\n      ],\n      [\n        \"▁信託\",\n        -11.404953002929688\n      ],\n      [\n        \"▁じょう\",\n        -11.405210494995117\n      ],\n      [\n        \"▁NA\",\n        -11.405220985412598\n      ],\n      [\n        \"当日\",\n        -11.405266761779785\n      ],\n      [\n        \"▁上流\",\n        -11.40537166595459\n      ],\n      [\n        \"▁シェル\",\n        -11.405394554138184\n      ],\n      [\n        \"▁建立\",\n        -11.405462265014648\n      ],\n      [\n        \"▁元気に\",\n        -11.405537605285645\n      ],\n      [\n        \"▁こなし\",\n        -11.405577659606934\n      ],\n      [\n        \"▁太郎\",\n        -11.406081199645996\n      ],\n      [\n        \"▁困難な\",\n        -11.406103134155273\n      ],\n      [\n        \"ni\",\n        -11.40626049041748\n      ],\n      [\n        \"▁運航\",\n        -11.406319618225098\n      ],\n      [\n        \"▁ラベル\",\n        -11.40637493133545\n      ],\n      [\n        \"▁ハンドル\",\n        -11.406388282775879\n      ],\n      [\n        \"ホー\",\n        -11.406521797180176\n      ],\n      [\n        \"▁助教授\",\n        -11.40673542022705\n      ],\n      [\n        \"ロシア\",\n        -11.406820297241211\n      ],\n      [\n        \"▁投与\",\n        -11.406901359558105\n      ],\n      [\n        \"▁エクスプレス\",\n        -11.407047271728516\n      ],\n      [\n        \"▁古くから\",\n        -11.407060623168945\n      ],\n      [\n        \"あい\",\n        -11.40736198425293\n      ],\n      [\n        \"▁プレーヤー\",\n        -11.407722473144531\n      ],\n      [\n        \"▁載って\",\n        -11.40794849395752\n      ],\n      [\n        \"▁カンパニー\",\n        -11.408126831054688\n      ],\n      [\n        \"シオ\",\n        -11.408188819885254\n      ],\n      [\n        \"▁クー\",\n        -11.408294677734375\n      ],\n      [\n        \"▁困り\",\n        -11.408424377441406\n      ],\n      [\n        \"ブン\",\n        -11.408482551574707\n      ],\n      [\n        \"▁シール\",\n        -11.408538818359375\n      ],\n      [\n        \"▁ラップ\",\n        -11.408620834350586\n      ],\n      [\n        \"▁清掃\",\n        -11.408727645874023\n      ],\n      [\n        \"▁内蔵\",\n        -11.408771514892578\n      ],\n      [\n        \"ミア\",\n        -11.408785820007324\n      ],\n      [\n        \"▁うれしい\",\n        -11.408795356750488\n      ],\n      [\n        \"さま\",\n        -11.40926456451416\n      ],\n      [\n        \"▁村上\",\n        -11.409411430358887\n      ],\n      [\n        \"▁がちな\",\n        -11.40942096710205\n      ],\n      [\n        \"▁マグ\",\n        -11.40942668914795\n      ],\n      [\n        \"ヤー\",\n        -11.409429550170898\n      ],\n      [\n        \"オンライン\",\n        -11.409444808959961\n      ],\n      [\n        \"▁1954\",\n        -11.409529685974121\n      ],\n      [\n        \"LS\",\n        -11.409579277038574\n      ],\n      [\n        \"▁んで\",\n        -11.41018009185791\n      ],\n      [\n        \"んじ\",\n        -11.41019058227539\n      ],\n      [\n        \"vi\",\n        -11.410204887390137\n      ],\n      [\n        \"▁憧れ\",\n        -11.410218238830566\n      ],\n      [\n        \"▁動いて\",\n        -11.410261154174805\n      ],\n      [\n        \"▁主役\",\n        -11.41037368774414\n      ],\n      [\n        \"▁互換\",\n        -11.410659790039062\n      ],\n      [\n        \"キア\",\n        -11.410689353942871\n      ],\n      [\n        \"央\",\n        -11.410744667053223\n      ],\n      [\n        \"地元\",\n        -11.410895347595215\n      ],\n      [\n        \"▁Mo\",\n        -11.411443710327148\n      ],\n      [\n        \"▁失点\",\n        -11.411662101745605\n      ],\n      [\n        \"つか\",\n        -11.411676406860352\n      ],\n      [\n        \"▁敏感\",\n        -11.41174602508545\n      ],\n      [\n        \"▁足利\",\n        -11.411750793457031\n      ],\n      [\n        \"街\",\n        -11.411890983581543\n      ],\n      [\n        \"▁Ver\",\n        -11.411928176879883\n      ],\n      [\n        \"▁翔\",\n        -11.41198444366455\n      ],\n      [\n        \"▁甲斐\",\n        -11.41209888458252\n      ],\n      [\n        \"▁熊\",\n        -11.412135124206543\n      ],\n      [\n        \"▁さらなる\",\n        -11.41220474243164\n      ],\n      [\n        \"▁過ごした\",\n        -11.412378311157227\n      ],\n      [\n        \"▁商工\",\n        -11.41249942779541\n      ],\n      [\n        \"▁冒頭\",\n        -11.412616729736328\n      ],\n      [\n        \"▁付けた\",\n        -11.412681579589844\n      ],\n      [\n        \"ail\",\n        -11.4127197265625\n      ],\n      [\n        \"▁ハッピー\",\n        -11.412813186645508\n      ],\n      [\n        \"▁平方\",\n        -11.412860870361328\n      ],\n      [\n        \"NN\",\n        -11.4130220413208\n      ],\n      [\n        \"▁ああ\",\n        -11.413052558898926\n      ],\n      [\n        \"頼\",\n        -11.413110733032227\n      ],\n      [\n        \"登場\",\n        -11.413420677185059\n      ],\n      [\n        \"統\",\n        -11.413704872131348\n      ],\n      [\n        \"ran\",\n        -11.41370964050293\n      ],\n      [\n        \"▁甲子園\",\n        -11.413908958435059\n      ],\n      [\n        \"▁ファイ\",\n        -11.414006233215332\n      ],\n      [\n        \"▁ベンチ\",\n        -11.414016723632812\n      ],\n      [\n        \"▁処方\",\n        -11.414082527160645\n      ],\n      [\n        \"▁誤解\",\n        -11.414111137390137\n      ],\n      [\n        \"料\",\n        -11.414300918579102\n      ],\n      [\n        \"▁橋本\",\n        -11.414326667785645\n      ],\n      [\n        \"▁CPU\",\n        -11.41440486907959\n      ],\n      [\n        \"▁黒人\",\n        -11.4144926071167\n      ],\n      [\n        \"▁分泌\",\n        -11.414684295654297\n      ],\n      [\n        \"伊\",\n        -11.414831161499023\n      ],\n      [\n        \"▁聖堂\",\n        -11.414849281311035\n      ],\n      [\n        \"▁念\",\n        -11.414867401123047\n      ],\n      [\n        \"▁コンサルタント\",\n        -11.414924621582031\n      ],\n      [\n        \"▁家事\",\n        -11.415096282958984\n      ],\n      [\n        \"割\",\n        -11.415202140808105\n      ],\n      [\n        \"泊\",\n        -11.41528606414795\n      ],\n      [\n        \"▁発覚\",\n        -11.415397644042969\n      ],\n      [\n        \"▁美しく\",\n        -11.41555404663086\n      ],\n      [\n        \"▁ホールディングス\",\n        -11.415566444396973\n      ],\n      [\n        \"ジア\",\n        -11.415828704833984\n      ],\n      [\n        \"価格\",\n        -11.415919303894043\n      ],\n      [\n        \"▁射撃\",\n        -11.41617488861084\n      ],\n      [\n        \"▁カスタム\",\n        -11.4163236618042\n      ],\n      [\n        \"参考\",\n        -11.41636848449707\n      ],\n      [\n        \"▁旭\",\n        -11.416481971740723\n      ],\n      [\n        \"▁Car\",\n        -11.416759490966797\n      ],\n      [\n        \"gu\",\n        -11.417009353637695\n      ],\n      [\n        \"本書\",\n        -11.417030334472656\n      ],\n      [\n        \"企業\",\n        -11.417064666748047\n      ],\n      [\n        \"▁落語\",\n        -11.417299270629883\n      ],\n      [\n        \"判\",\n        -11.417342185974121\n      ],\n      [\n        \"▁返す\",\n        -11.417496681213379\n      ],\n      [\n        \"▁大気\",\n        -11.417645454406738\n      ],\n      [\n        \"▁修道院\",\n        -11.41768741607666\n      ],\n      [\n        \"容\",\n        -11.417750358581543\n      ],\n      [\n        \"▁保湿\",\n        -11.417784690856934\n      ],\n      [\n        \"剣\",\n        -11.417859077453613\n      ],\n      [\n        \"▁学んで\",\n        -11.418168067932129\n      ],\n      [\n        \"▁ワード\",\n        -11.418313026428223\n      ],\n      [\n        \"▁課税\",\n        -11.41839599609375\n      ],\n      [\n        \"▁単なる\",\n        -11.41882038116455\n      ],\n      [\n        \"▁やってきた\",\n        -11.418837547302246\n      ],\n      [\n        \"SS\",\n        -11.418901443481445\n      ],\n      [\n        \"▁—\",\n        -11.419100761413574\n      ],\n      [\n        \"▁1957\",\n        -11.419105529785156\n      ],\n      [\n        \"1985\",\n        -11.419282913208008\n      ],\n      [\n        \"▁司教\",\n        -11.41952133178711\n      ],\n      [\n        \"孝\",\n        -11.419660568237305\n      ],\n      [\n        \"▁ホル\",\n        -11.419896125793457\n      ],\n      [\n        \"やはり\",\n        -11.420040130615234\n      ],\n      [\n        \"▁謝罪\",\n        -11.42007827758789\n      ],\n      [\n        \"概\",\n        -11.420127868652344\n      ],\n      [\n        \"自然\",\n        -11.420376777648926\n      ],\n      [\n        \"▁覚\",\n        -11.420547485351562\n      ],\n      [\n        \"▁ペーパー\",\n        -11.420555114746094\n      ],\n      [\n        \"▁考案\",\n        -11.420562744140625\n      ],\n      [\n        \"まぁ\",\n        -11.420564651489258\n      ],\n      [\n        \"▁配達\",\n        -11.420698165893555\n      ],\n      [\n        \"▁抱き\",\n        -11.420763969421387\n      ],\n      [\n        \"▁滑\",\n        -11.420876502990723\n      ],\n      [\n        \"▁捕虜\",\n        -11.420933723449707\n      ],\n      [\n        \"増\",\n        -11.420968055725098\n      ],\n      [\n        \"▁皿\",\n        -11.420990943908691\n      ],\n      [\n        \"▁news\",\n        -11.42126178741455\n      ],\n      [\n        \"▁債権\",\n        -11.421361923217773\n      ],\n      [\n        \"ーバー\",\n        -11.421370506286621\n      ],\n      [\n        \"Copyright\",\n        -11.421630859375\n      ],\n      [\n        \"▁警告\",\n        -11.421899795532227\n      ],\n      [\n        \"▁Mi\",\n        -11.421966552734375\n      ],\n      [\n        \"▁ブース\",\n        -11.421993255615234\n      ],\n      [\n        \"▁尽力\",\n        -11.422223091125488\n      ],\n      [\n        \"▁経費\",\n        -11.422259330749512\n      ],\n      [\n        \"相手\",\n        -11.42244815826416\n      ],\n      [\n        \"▁珍しく\",\n        -11.422464370727539\n      ],\n      [\n        \"▁任期\",\n        -11.422500610351562\n      ],\n      [\n        \"▁届か\",\n        -11.422502517700195\n      ],\n      [\n        \"▁改訂\",\n        -11.422605514526367\n      ],\n      [\n        \"▁虎\",\n        -11.422914505004883\n      ],\n      [\n        \"▁an\",\n        -11.422989845275879\n      ],\n      [\n        \"▁空き\",\n        -11.423002243041992\n      ],\n      [\n        \"▁ウェブサイト\",\n        -11.423276901245117\n      ],\n      [\n        \"▁ノース\",\n        -11.423323631286621\n      ],\n      [\n        \"▁綱\",\n        -11.423823356628418\n      ],\n      [\n        \"痛\",\n        -11.42383098602295\n      ],\n      [\n        \"▁決算\",\n        -11.423860549926758\n      ],\n      [\n        \"▁媒体\",\n        -11.424056053161621\n      ],\n      [\n        \"シップ\",\n        -11.424215316772461\n      ],\n      [\n        \"▁バレーボール\",\n        -11.424388885498047\n      ],\n      [\n        \"▁借りて\",\n        -11.424407005310059\n      ],\n      [\n        \"ムシ\",\n        -11.424615859985352\n      ],\n      [\n        \"▁篇\",\n        -11.424661636352539\n      ],\n      [\n        \"▁美女\",\n        -11.424755096435547\n      ],\n      [\n        \"▁JP\",\n        -11.424763679504395\n      ],\n      [\n        \"▁TOP\",\n        -11.424906730651855\n      ],\n      [\n        \"パル\",\n        -11.424994468688965\n      ],\n      [\n        \"▁満た\",\n        -11.42509651184082\n      ],\n      [\n        \"DI\",\n        -11.425337791442871\n      ],\n      [\n        \"残\",\n        -11.425359725952148\n      ],\n      [\n        \"▁嫌い\",\n        -11.425457000732422\n      ],\n      [\n        \"▁猿\",\n        -11.425786018371582\n      ],\n      [\n        \"▁菅\",\n        -11.425838470458984\n      ],\n      [\n        \"▁天候\",\n        -11.425918579101562\n      ],\n      [\n        \"遺\",\n        -11.425969123840332\n      ],\n      [\n        \"▁賞金\",\n        -11.426149368286133\n      ],\n      [\n        \"▁一瞬\",\n        -11.426199913024902\n      ],\n      [\n        \"▁受け付けて\",\n        -11.426210403442383\n      ],\n      [\n        \"▁紅葉\",\n        -11.426407814025879\n      ],\n      [\n        \"▁グロ\",\n        -11.426443099975586\n      ],\n      [\n        \"▁化合\",\n        -11.426451683044434\n      ],\n      [\n        \"▁届き\",\n        -11.426674842834473\n      ],\n      [\n        \"かく\",\n        -11.42678451538086\n      ],\n      [\n        \"▁遺体\",\n        -11.42680835723877\n      ],\n      [\n        \"チー\",\n        -11.426889419555664\n      ],\n      [\n        \"▁試\",\n        -11.427038192749023\n      ],\n      [\n        \"▁EU\",\n        -11.427284240722656\n      ],\n      [\n        \"▁ライティング\",\n        -11.427324295043945\n      ],\n      [\n        \"▁露出\",\n        -11.427332878112793\n      ],\n      [\n        \"▁養\",\n        -11.427504539489746\n      ],\n      [\n        \"▁ドリーム\",\n        -11.427597999572754\n      ],\n      [\n        \"宇\",\n        -11.427606582641602\n      ],\n      [\n        \"HO\",\n        -11.427706718444824\n      ],\n      [\n        \"▁管理人\",\n        -11.42780590057373\n      ],\n      [\n        \"やかな\",\n        -11.427858352661133\n      ],\n      [\n        \"▁哲\",\n        -11.428213119506836\n      ],\n      [\n        \"▁ちょう\",\n        -11.428243637084961\n      ],\n      [\n        \"▁せん\",\n        -11.428533554077148\n      ],\n      [\n        \"かけ\",\n        -11.428570747375488\n      ],\n      [\n        \"▁寄\",\n        -11.428680419921875\n      ],\n      [\n        \"為\",\n        -11.428802490234375\n      ],\n      [\n        \"ちゃん\",\n        -11.42880630493164\n      ],\n      [\n        \"ron\",\n        -11.428850173950195\n      ],\n      [\n        \"▁トランプ\",\n        -11.428956031799316\n      ],\n      [\n        \"▁祖\",\n        -11.428980827331543\n      ],\n      [\n        \"▁駆け\",\n        -11.429244041442871\n      ],\n      [\n        \"ロイ\",\n        -11.429426193237305\n      ],\n      [\n        \"際\",\n        -11.43009090423584\n      ],\n      [\n        \"止\",\n        -11.430196762084961\n      ],\n      [\n        \"▁針\",\n        -11.430215835571289\n      ],\n      [\n        \"▁手当\",\n        -11.430243492126465\n      ],\n      [\n        \"▁反省\",\n        -11.430634498596191\n      ],\n      [\n        \"▁あき\",\n        -11.43064022064209\n      ],\n      [\n        \"▁入賞\",\n        -11.43065357208252\n      ],\n      [\n        \"eg\",\n        -11.431154251098633\n      ],\n      [\n        \"肢\",\n        -11.431157112121582\n      ],\n      [\n        \"▁敗れ\",\n        -11.431477546691895\n      ],\n      [\n        \"▁盗\",\n        -11.431571960449219\n      ],\n      [\n        \"ごと\",\n        -11.431624412536621\n      ],\n      [\n        \"▁給付\",\n        -11.431774139404297\n      ],\n      [\n        \"チュー\",\n        -11.43195915222168\n      ],\n      [\n        \"▁一緒\",\n        -11.431960105895996\n      ],\n      [\n        \"▁十二\",\n        -11.432129859924316\n      ],\n      [\n        \"bi\",\n        -11.43230152130127\n      ],\n      [\n        \"▁重点\",\n        -11.432514190673828\n      ],\n      [\n        \"▁意義\",\n        -11.432515144348145\n      ],\n      [\n        \"訴\",\n        -11.43276309967041\n      ],\n      [\n        \"▁寄与\",\n        -11.432791709899902\n      ],\n      [\n        \"▁キュー\",\n        -11.432984352111816\n      ],\n      [\n        \"ジング\",\n        -11.433313369750977\n      ],\n      [\n        \"▁か所\",\n        -11.433780670166016\n      ],\n      [\n        \"▁▽\",\n        -11.433856964111328\n      ],\n      [\n        \"開発\",\n        -11.43387222290039\n      ],\n      [\n        \"▁琉球\",\n        -11.434035301208496\n      ],\n      [\n        \"▁AM\",\n        -11.434144020080566\n      ],\n      [\n        \"▁遅い\",\n        -11.434365272521973\n      ],\n      [\n        \"▁沢\",\n        -11.434431076049805\n      ],\n      [\n        \"▁述べる\",\n        -11.434621810913086\n      ],\n      [\n        \"CM\",\n        -11.434635162353516\n      ],\n      [\n        \"▁シアター\",\n        -11.43475341796875\n      ],\n      [\n        \"▁マジック\",\n        -11.434804916381836\n      ],\n      [\n        \"▁機材\",\n        -11.435257911682129\n      ],\n      [\n        \"▁宮殿\",\n        -11.435345649719238\n      ],\n      [\n        \"▁立った\",\n        -11.435406684875488\n      ],\n      [\n        \"▁水戸\",\n        -11.435466766357422\n      ],\n      [\n        \"▁カジュアル\",\n        -11.435511589050293\n      ],\n      [\n        \"劇\",\n        -11.435565948486328\n      ],\n      [\n        \"▁キム\",\n        -11.435860633850098\n      ],\n      [\n        \"▁国語\",\n        -11.436031341552734\n      ],\n      [\n        \"▁演説\",\n        -11.436077117919922\n      ],\n      [\n        \"▁1953\",\n        -11.43608283996582\n      ],\n      [\n        \"▁優秀な\",\n        -11.436412811279297\n      ],\n      [\n        \"▁ラインナップ\",\n        -11.436626434326172\n      ],\n      [\n        \"▁่\",\n        -11.43703842163086\n      ],\n      [\n        \"▁DM\",\n        -11.437117576599121\n      ],\n      [\n        \"▁れたら\",\n        -11.437348365783691\n      ],\n      [\n        \"▁はずだ\",\n        -11.437518119812012\n      ],\n      [\n        \"▁占めて\",\n        -11.437616348266602\n      ],\n      [\n        \"ブレ\",\n        -11.43772029876709\n      ],\n      [\n        \"▁フラン\",\n        -11.437865257263184\n      ],\n      [\n        \"▁nd\",\n        -11.43795108795166\n      ],\n      [\n        \"▁アクア\",\n        -11.438090324401855\n      ],\n      [\n        \"紅\",\n        -11.43809986114502\n      ],\n      [\n        \"▁癒し\",\n        -11.438152313232422\n      ],\n      [\n        \"▁北条\",\n        -11.438213348388672\n      ],\n      [\n        \"▁達する\",\n        -11.438379287719727\n      ],\n      [\n        \"▁笠\",\n        -11.438909530639648\n      ],\n      [\n        \"▁模型\",\n        -11.439062118530273\n      ],\n      [\n        \"▁MO\",\n        -11.439079284667969\n      ],\n      [\n        \"クタ\",\n        -11.439090728759766\n      ],\n      [\n        \"鬼\",\n        -11.439191818237305\n      ],\n      [\n        \"ージュ\",\n        -11.439208984375\n      ],\n      [\n        \"▁ウッド\",\n        -11.439270973205566\n      ],\n      [\n        \"ヤン\",\n        -11.439602851867676\n      ],\n      [\n        \"▁供\",\n        -11.43962574005127\n      ],\n      [\n        \"▁なき\",\n        -11.439651489257812\n      ],\n      [\n        \"▁1951\",\n        -11.439674377441406\n      ],\n      [\n        \"▁品川\",\n        -11.439762115478516\n      ],\n      [\n        \"SD\",\n        -11.439799308776855\n      ],\n      [\n        \"▁バリ\",\n        -11.439959526062012\n      ],\n      [\n        \"▁パーティ\",\n        -11.44002628326416\n      ],\n      [\n        \"chi\",\n        -11.440102577209473\n      ],\n      [\n        \"▁締め\",\n        -11.4401216506958\n      ],\n      [\n        \"▁比例\",\n        -11.440225601196289\n      ],\n      [\n        \"サイド\",\n        -11.440265655517578\n      ],\n      [\n        \"▁すっかり\",\n        -11.440350532531738\n      ],\n      [\n        \"▁都心\",\n        -11.44054126739502\n      ],\n      [\n        \"▁ウォッチ\",\n        -11.440665245056152\n      ],\n      [\n        \"▁司\",\n        -11.440696716308594\n      ],\n      [\n        \"イラ\",\n        -11.440711975097656\n      ],\n      [\n        \"入り\",\n        -11.440834999084473\n      ],\n      [\n        \"▁造船\",\n        -11.44091510772705\n      ],\n      [\n        \"▁あや\",\n        -11.440948486328125\n      ],\n      [\n        \"診\",\n        -11.441038131713867\n      ],\n      [\n        \"▁安値\",\n        -11.441104888916016\n      ],\n      [\n        \"▁並びに\",\n        -11.441181182861328\n      ],\n      [\n        \"▁天体\",\n        -11.441197395324707\n      ],\n      [\n        \"▁医院\",\n        -11.44131851196289\n      ],\n      [\n        \"▁気づき\",\n        -11.441596031188965\n      ],\n      [\n        \"▁倫理\",\n        -11.44163990020752\n      ],\n      [\n        \"▁ココ\",\n        -11.441650390625\n      ],\n      [\n        \"▁押\",\n        -11.44190788269043\n      ],\n      [\n        \"text\",\n        -11.442010879516602\n      ],\n      [\n        \"▁函館\",\n        -11.442079544067383\n      ],\n      [\n        \"愛知\",\n        -11.442183494567871\n      ],\n      [\n        \"▁ゲー\",\n        -11.442276000976562\n      ],\n      [\n        \"▁駅舎\",\n        -11.442293167114258\n      ],\n      [\n        \"▁豊田\",\n        -11.44231128692627\n      ],\n      [\n        \"▁沈\",\n        -11.442403793334961\n      ],\n      [\n        \"▁通い\",\n        -11.442472457885742\n      ],\n      [\n        \"▁返金\",\n        -11.442887306213379\n      ],\n      [\n        \"前作\",\n        -11.442916870117188\n      ],\n      [\n        \"なぜなら\",\n        -11.442956924438477\n      ],\n      [\n        \"▁佐々木\",\n        -11.443012237548828\n      ],\n      [\n        \"▁申し出\",\n        -11.443160057067871\n      ],\n      [\n        \"▁療養\",\n        -11.4431791305542\n      ],\n      [\n        \"▁液晶\",\n        -11.443519592285156\n      ],\n      [\n        \"バック\",\n        -11.443760871887207\n      ],\n      [\n        \"迫\",\n        -11.444022178649902\n      ],\n      [\n        \"おい\",\n        -11.444300651550293\n      ],\n      [\n        \"▁上回る\",\n        -11.444390296936035\n      ],\n      [\n        \"ロフ\",\n        -11.44440746307373\n      ],\n      [\n        \"▁服用\",\n        -11.444425582885742\n      ],\n      [\n        \"▁則\",\n        -11.44460678100586\n      ],\n      [\n        \"ニカ\",\n        -11.444851875305176\n      ],\n      [\n        \"▁東南\",\n        -11.445070266723633\n      ],\n      [\n        \"▁無事\",\n        -11.445085525512695\n      ],\n      [\n        \"▁牧\",\n        -11.445094108581543\n      ],\n      [\n        \"▁พ\",\n        -11.445107460021973\n      ],\n      [\n        \"らす\",\n        -11.445133209228516\n      ],\n      [\n        \"▁ナチュラル\",\n        -11.445391654968262\n      ],\n      [\n        \"▁乗客\",\n        -11.445413589477539\n      ],\n      [\n        \"▁中旬\",\n        -11.445494651794434\n      ],\n      [\n        \"▁こういった\",\n        -11.445549964904785\n      ],\n      [\n        \"▁賛成\",\n        -11.445822715759277\n      ],\n      [\n        \"▁参り\",\n        -11.446430206298828\n      ],\n      [\n        \"▁液体\",\n        -11.446699142456055\n      ],\n      [\n        \"▁長編\",\n        -11.446784019470215\n      ],\n      [\n        \"チョウ\",\n        -11.446939468383789\n      ],\n      [\n        \"▁役立ち\",\n        -11.446961402893066\n      ],\n      [\n        \"かに\",\n        -11.446975708007812\n      ],\n      [\n        \"▁リサイクル\",\n        -11.446981430053711\n      ],\n      [\n        \"▁協同\",\n        -11.447006225585938\n      ],\n      [\n        \"ータ\",\n        -11.44720458984375\n      ],\n      [\n        \"丁\",\n        -11.4472074508667\n      ],\n      [\n        \"▁‐\",\n        -11.447208404541016\n      ],\n      [\n        \"▁停\",\n        -11.447216987609863\n      ],\n      [\n        \"▁漏れ\",\n        -11.447308540344238\n      ],\n      [\n        \"▁コーポレーション\",\n        -11.447415351867676\n      ],\n      [\n        \"▁受け取る\",\n        -11.447484970092773\n      ],\n      [\n        \"▁メイド\",\n        -11.447514533996582\n      ],\n      [\n        \"▁庁舎\",\n        -11.447668075561523\n      ],\n      [\n        \"▁審判\",\n        -11.44820785522461\n      ],\n      [\n        \"▁もはや\",\n        -11.44833755493164\n      ],\n      [\n        \"▁大衆\",\n        -11.448416709899902\n      ],\n      [\n        \"▁様な\",\n        -11.448420524597168\n      ],\n      [\n        \"▁ex\",\n        -11.448577880859375\n      ],\n      [\n        \"▁起こって\",\n        -11.448860168457031\n      ],\n      [\n        \"▁ウエスト\",\n        -11.448873519897461\n      ],\n      [\n        \"▁土木\",\n        -11.448884010314941\n      ],\n      [\n        \"▁肺\",\n        -11.448892593383789\n      ],\n      [\n        \"▁山陽\",\n        -11.448934555053711\n      ],\n      [\n        \"▁モジュール\",\n        -11.44899845123291\n      ],\n      [\n        \"▁膜\",\n        -11.449227333068848\n      ],\n      [\n        \"▁サンタ\",\n        -11.449287414550781\n      ],\n      [\n        \"▁Chrome\",\n        -11.44943904876709\n      ],\n      [\n        \"▁ニキビ\",\n        -11.449625968933105\n      ],\n      [\n        \"▁違和感\",\n        -11.44963550567627\n      ],\n      [\n        \"略\",\n        -11.449637413024902\n      ],\n      [\n        \"獣\",\n        -11.4496431350708\n      ],\n      [\n        \"▁立てる\",\n        -11.449738502502441\n      ],\n      [\n        \"▁移管\",\n        -11.449780464172363\n      ],\n      [\n        \"ME\",\n        -11.4498291015625\n      ],\n      [\n        \"ニャ\",\n        -11.449831008911133\n      ],\n      [\n        \"▁直通\",\n        -11.45028018951416\n      ],\n      [\n        \"▁視覚\",\n        -11.450508117675781\n      ],\n      [\n        \"▁見つかり\",\n        -11.45064640045166\n      ],\n      [\n        \"害\",\n        -11.4507417678833\n      ],\n      [\n        \"著\",\n        -11.450758934020996\n      ],\n      [\n        \"▁プラスチック\",\n        -11.451098442077637\n      ],\n      [\n        \"▁ガル\",\n        -11.451252937316895\n      ],\n      [\n        \"▁侍\",\n        -11.451258659362793\n      ],\n      [\n        \"▁確信\",\n        -11.451297760009766\n      ],\n      [\n        \"▁冷凍\",\n        -11.451411247253418\n      ],\n      [\n        \"▁ダービー\",\n        -11.451414108276367\n      ],\n      [\n        \"▁当事\",\n        -11.451472282409668\n      ],\n      [\n        \"1950\",\n        -11.451741218566895\n      ],\n      [\n        \"▁ギャル\",\n        -11.451803207397461\n      ],\n      [\n        \"汗\",\n        -11.451813697814941\n      ],\n      [\n        \"ave\",\n        -11.452014923095703\n      ],\n      [\n        \"▁ピーク\",\n        -11.45220947265625\n      ],\n      [\n        \"孫\",\n        -11.452329635620117\n      ],\n      [\n        \"▁シネマ\",\n        -11.453264236450195\n      ],\n      [\n        \"▁菜\",\n        -11.453361511230469\n      ],\n      [\n        \"í\",\n        -11.453373908996582\n      ],\n      [\n        \"▁ミル\",\n        -11.45347785949707\n      ],\n      [\n        \"▁ざ\",\n        -11.453484535217285\n      ],\n      [\n        \"▁入試\",\n        -11.45351791381836\n      ],\n      [\n        \"▁知人\",\n        -11.453642845153809\n      ],\n      [\n        \"▁php\",\n        -11.453686714172363\n      ],\n      [\n        \"▁リチャード\",\n        -11.453810691833496\n      ],\n      [\n        \"ood\",\n        -11.454063415527344\n      ],\n      [\n        \"▁しゃ\",\n        -11.454265594482422\n      ],\n      [\n        \"▁ポー\",\n        -11.454301834106445\n      ],\n      [\n        \"ya\",\n        -11.454330444335938\n      ],\n      [\n        \"▁船団\",\n        -11.454333305358887\n      ],\n      [\n        \"▁ボストン\",\n        -11.45440673828125\n      ],\n      [\n        \"がる\",\n        -11.454422950744629\n      ],\n      [\n        \"▁94\",\n        -11.454550743103027\n      ],\n      [\n        \"▁業種\",\n        -11.454789161682129\n      ],\n      [\n        \"▁家康\",\n        -11.45483684539795\n      ],\n      [\n        \"ial\",\n        -11.454984664916992\n      ],\n      [\n        \"▁スカウト\",\n        -11.455307960510254\n      ],\n      [\n        \"▁DIY\",\n        -11.455398559570312\n      ],\n      [\n        \"LA\",\n        -11.455414772033691\n      ],\n      [\n        \"ヒル\",\n        -11.455448150634766\n      ],\n      [\n        \"▁スケール\",\n        -11.455466270446777\n      ],\n      [\n        \"▁ゲート\",\n        -11.455656051635742\n      ],\n      [\n        \"▁アフィリエイト\",\n        -11.455798149108887\n      ],\n      [\n        \"▁史料\",\n        -11.455809593200684\n      ],\n      [\n        \"▁トレーナー\",\n        -11.455867767333984\n      ],\n      [\n        \"シャル\",\n        -11.456049919128418\n      ],\n      [\n        \"リンク\",\n        -11.456182479858398\n      ],\n      [\n        \"往\",\n        -11.456298828125\n      ],\n      [\n        \"▁淳\",\n        -11.45647144317627\n      ],\n      [\n        \"淵\",\n        -11.456689834594727\n      ],\n      [\n        \"▁巡洋艦\",\n        -11.456969261169434\n      ],\n      [\n        \"レート\",\n        -11.457054138183594\n      ],\n      [\n        \"▁サプリ\",\n        -11.457119941711426\n      ],\n      [\n        \"あれ\",\n        -11.457216262817383\n      ],\n      [\n        \"▁My\",\n        -11.457260131835938\n      ],\n      [\n        \"▁瀬\",\n        -11.45732307434082\n      ],\n      [\n        \"▁詳細な\",\n        -11.457378387451172\n      ],\n      [\n        \"▁上京\",\n        -11.457599639892578\n      ],\n      [\n        \"▁迎えて\",\n        -11.45761489868164\n      ],\n      [\n        \"▁制約\",\n        -11.457680702209473\n      ],\n      [\n        \"▁なんだか\",\n        -11.457730293273926\n      ],\n      [\n        \"▁零\",\n        -11.457731246948242\n      ],\n      [\n        \"▁目撃\",\n        -11.457771301269531\n      ],\n      [\n        \"▁混雑\",\n        -11.45815658569336\n      ],\n      [\n        \"▁キャスター\",\n        -11.458158493041992\n      ],\n      [\n        \"▁終盤\",\n        -11.458169937133789\n      ],\n      [\n        \"TI\",\n        -11.45844554901123\n      ],\n      [\n        \"臭\",\n        -11.45846176147461\n      ],\n      [\n        \"▁グラウンド\",\n        -11.458486557006836\n      ],\n      [\n        \"▁ED\",\n        -11.458505630493164\n      ],\n      [\n        \"▁奇跡\",\n        -11.458564758300781\n      ],\n      [\n        \"▁You\",\n        -11.458586692810059\n      ],\n      [\n        \"ローズ\",\n        -11.458626747131348\n      ],\n      [\n        \"▁実況\",\n        -11.458650588989258\n      ],\n      [\n        \"▁楽に\",\n        -11.458725929260254\n      ],\n      [\n        \"▁アマ\",\n        -11.458745002746582\n      ],\n      [\n        \"▁墓地\",\n        -11.45888614654541\n      ],\n      [\n        \"▁所持\",\n        -11.45889949798584\n      ],\n      [\n        \"▁奏者\",\n        -11.458915710449219\n      ],\n      [\n        \"▁ペイ\",\n        -11.458982467651367\n      ],\n      [\n        \"▁出展\",\n        -11.459233283996582\n      ],\n      [\n        \"▁邦\",\n        -11.459407806396484\n      ],\n      [\n        \"▁越\",\n        -11.45947265625\n      ],\n      [\n        \"DS\",\n        -11.459754943847656\n      ],\n      [\n        \"優\",\n        -11.45977783203125\n      ],\n      [\n        \"▁三島\",\n        -11.459870338439941\n      ],\n      [\n        \"闘\",\n        -11.459988594055176\n      ],\n      [\n        \"▁せよう\",\n        -11.460412979125977\n      ],\n      [\n        \"▁割り当て\",\n        -11.460441589355469\n      ],\n      [\n        \"▁奈\",\n        -11.46078872680664\n      ],\n      [\n        \"▁このまま\",\n        -11.460790634155273\n      ],\n      [\n        \"▁知能\",\n        -11.460836410522461\n      ],\n      [\n        \"▁グラフ\",\n        -11.460893630981445\n      ],\n      [\n        \"▁繰り返す\",\n        -11.460953712463379\n      ],\n      [\n        \"じん\",\n        -11.46104907989502\n      ],\n      [\n        \"思\",\n        -11.461212158203125\n      ],\n      [\n        \"▁降格\",\n        -11.461296081542969\n      ],\n      [\n        \"▁千代田\",\n        -11.46136474609375\n      ],\n      [\n        \"タナ\",\n        -11.461578369140625\n      ],\n      [\n        \"▁整形\",\n        -11.461579322814941\n      ],\n      [\n        \"▁ウィーク\",\n        -11.461581230163574\n      ],\n      [\n        \"▁天国\",\n        -11.461612701416016\n      ],\n      [\n        \"▁種目\",\n        -11.461699485778809\n      ],\n      [\n        \"▁呼んだ\",\n        -11.461830139160156\n      ],\n      [\n        \"▁ボトル\",\n        -11.461868286132812\n      ],\n      [\n        \"▁q\",\n        -11.461981773376465\n      ],\n      [\n        \"▁ゲット\",\n        -11.462117195129395\n      ],\n      [\n        \"▁任意の\",\n        -11.462244033813477\n      ],\n      [\n        \"ef\",\n        -11.462371826171875\n      ],\n      [\n        \"▁歩行\",\n        -11.462430000305176\n      ],\n      [\n        \"▁打者\",\n        -11.462525367736816\n      ],\n      [\n        \"▁Live\",\n        -11.462661743164062\n      ],\n      [\n        \"air\",\n        -11.462756156921387\n      ],\n      [\n        \"ッパ\",\n        -11.462839126586914\n      ],\n      [\n        \"▁セミ\",\n        -11.463003158569336\n      ],\n      [\n        \"▁ノミネート\",\n        -11.463067054748535\n      ],\n      [\n        \"▁尿\",\n        -11.4631986618042\n      ],\n      [\n        \"穴\",\n        -11.463567733764648\n      ],\n      [\n        \"▁権威\",\n        -11.463578224182129\n      ],\n      [\n        \"▁量産\",\n        -11.463608741760254\n      ],\n      [\n        \"▁尊\",\n        -11.4636869430542\n      ],\n      [\n        \"藩\",\n        -11.463729858398438\n      ],\n      [\n        \"ラク\",\n        -11.464103698730469\n      ],\n      [\n        \"▁大島\",\n        -11.464130401611328\n      ],\n      [\n        \"▁累計\",\n        -11.464133262634277\n      ],\n      [\n        \"謀\",\n        -11.464160919189453\n      ],\n      [\n        \"▁中島\",\n        -11.464249610900879\n      ],\n      [\n        \"▁じっくり\",\n        -11.464323043823242\n      ],\n      [\n        \"▁One\",\n        -11.464350700378418\n      ],\n      [\n        \"ブス\",\n        -11.46439266204834\n      ],\n      [\n        \"▁狭\",\n        -11.464537620544434\n      ],\n      [\n        \"▁終結\",\n        -11.464553833007812\n      ],\n      [\n        \"▁市川\",\n        -11.464561462402344\n      ],\n      [\n        \"▁二十\",\n        -11.464842796325684\n      ],\n      [\n        \"▁フルーツ\",\n        -11.465165138244629\n      ],\n      [\n        \"▁AR\",\n        -11.465228080749512\n      ],\n      [\n        \"▁クリス\",\n        -11.465394020080566\n      ],\n      [\n        \"ティン\",\n        -11.465470314025879\n      ],\n      [\n        \"▁柏\",\n        -11.465490341186523\n      ],\n      [\n        \"1984\",\n        -11.465599060058594\n      ],\n      [\n        \"▁改定\",\n        -11.465816497802734\n      ],\n      [\n        \"▁閉\",\n        -11.465902328491211\n      ],\n      [\n        \"▁フィード\",\n        -11.46605396270752\n      ],\n      [\n        \"ence\",\n        -11.466092109680176\n      ],\n      [\n        \"▁堪能\",\n        -11.466439247131348\n      ],\n      [\n        \"バンド\",\n        -11.466501235961914\n      ],\n      [\n        \"▁可能で\",\n        -11.466618537902832\n      ],\n      [\n        \"▁ムービー\",\n        -11.466890335083008\n      ],\n      [\n        \"▁情勢\",\n        -11.467082977294922\n      ],\n      [\n        \"コール\",\n        -11.467276573181152\n      ],\n      [\n        \"ガイ\",\n        -11.467399597167969\n      ],\n      [\n        \"▁シミ\",\n        -11.467421531677246\n      ],\n      [\n        \"1945\",\n        -11.46764850616455\n      ],\n      [\n        \"▁不詳\",\n        -11.467669486999512\n      ],\n      [\n        \"▁添付\",\n        -11.467734336853027\n      ],\n      [\n        \"▁阻止\",\n        -11.467851638793945\n      ],\n      [\n        \"▁農民\",\n        -11.467941284179688\n      ],\n      [\n        \"▁関し\",\n        -11.468282699584961\n      ],\n      [\n        \"▁併せて\",\n        -11.468292236328125\n      ],\n      [\n        \"▁チラシ\",\n        -11.468317985534668\n      ],\n      [\n        \"リーナ\",\n        -11.46835708618164\n      ],\n      [\n        \"▁パイプ\",\n        -11.468361854553223\n      ],\n      [\n        \"▁ニコニコ\",\n        -11.468416213989258\n      ],\n      [\n        \"▁崩れ\",\n        -11.469244003295898\n      ],\n      [\n        \"やがて\",\n        -11.469470977783203\n      ],\n      [\n        \"▁みなさ\",\n        -11.46951961517334\n      ],\n      [\n        \"▁ガラ\",\n        -11.470105171203613\n      ],\n      [\n        \"▁メガ\",\n        -11.470157623291016\n      ],\n      [\n        \"▁暫定\",\n        -11.470161437988281\n      ],\n      [\n        \"好きな\",\n        -11.470191955566406\n      ],\n      [\n        \"▁柔軟\",\n        -11.47024154663086\n      ],\n      [\n        \"▁スタンプ\",\n        -11.470470428466797\n      ],\n      [\n        \"▁架空\",\n        -11.470500946044922\n      ],\n      [\n        \"▁帰宅\",\n        -11.470519065856934\n      ],\n      [\n        \"▁ヴァル\",\n        -11.470697402954102\n      ],\n      [\n        \"▁新品\",\n        -11.470747947692871\n      ],\n      [\n        \"▁適\",\n        -11.47080135345459\n      ],\n      [\n        \"爆\",\n        -11.470983505249023\n      ],\n      [\n        \"がり\",\n        -11.471024513244629\n      ],\n      [\n        \"▁Certified\",\n        -11.47106647491455\n      ],\n      [\n        \"沖縄\",\n        -11.47169017791748\n      ],\n      [\n        \"▁タップ\",\n        -11.471949577331543\n      ],\n      [\n        \"▁コロンビア\",\n        -11.472163200378418\n      ],\n      [\n        \"▁みれば\",\n        -11.472254753112793\n      ],\n      [\n        \"▁共感\",\n        -11.47242546081543\n      ],\n      [\n        \"▁臭い\",\n        -11.472522735595703\n      ],\n      [\n        \"▁願って\",\n        -11.472553253173828\n      ],\n      [\n        \"ost\",\n        -11.472565650939941\n      ],\n      [\n        \"ハウス\",\n        -11.472916603088379\n      ],\n      [\n        \"ens\",\n        -11.473211288452148\n      ],\n      [\n        \"購入\",\n        -11.47329330444336\n      ],\n      [\n        \"▁タイル\",\n        -11.473367691040039\n      ],\n      [\n        \"▁仰\",\n        -11.473402976989746\n      ],\n      [\n        \"▁間隔\",\n        -11.473611831665039\n      ],\n      [\n        \"▁洋服\",\n        -11.47368335723877\n      ],\n      [\n        \"医療\",\n        -11.4736909866333\n      ],\n      [\n        \"▁隊員\",\n        -11.473724365234375\n      ],\n      [\n        \"▁貧困\",\n        -11.473841667175293\n      ],\n      [\n        \"▁復旧\",\n        -11.474045753479004\n      ],\n      [\n        \"▁べ\",\n        -11.47431755065918\n      ],\n      [\n        \"▁期生\",\n        -11.474517822265625\n      ],\n      [\n        \"コック\",\n        -11.474666595458984\n      ],\n      [\n        \"du\",\n        -11.475152015686035\n      ],\n      [\n        \"投\",\n        -11.475371360778809\n      ],\n      [\n        \"低\",\n        -11.47545337677002\n      ],\n      [\n        \"▁共産\",\n        -11.475732803344727\n      ],\n      [\n        \"▁レンジ\",\n        -11.475865364074707\n      ],\n      [\n        \"曜\",\n        -11.476044654846191\n      ],\n      [\n        \"▁伝達\",\n        -11.476546287536621\n      ],\n      [\n        \"SI\",\n        -11.476606369018555\n      ],\n      [\n        \"▁グレ\",\n        -11.476688385009766\n      ],\n      [\n        \"インド\",\n        -11.476792335510254\n      ],\n      [\n        \"▁取扱い\",\n        -11.477203369140625\n      ],\n      [\n        \"▁メガネ\",\n        -11.477378845214844\n      ],\n      [\n        \"▁あさ\",\n        -11.47740364074707\n      ],\n      [\n        \"▁con\",\n        -11.477578163146973\n      ],\n      [\n        \"データ\",\n        -11.47779655456543\n      ],\n      [\n        \"ヴェン\",\n        -11.477855682373047\n      ],\n      [\n        \"▁総裁\",\n        -11.478009223937988\n      ],\n      [\n        \"レース\",\n        -11.478068351745605\n      ],\n      [\n        \"▁闘争\",\n        -11.478221893310547\n      ],\n      [\n        \"ve\",\n        -11.478261947631836\n      ],\n      [\n        \"▁転載\",\n        -11.478480339050293\n      ],\n      [\n        \"▁診察\",\n        -11.478503227233887\n      ],\n      [\n        \"CS\",\n        -11.478791236877441\n      ],\n      [\n        \"▁偽物\",\n        -11.479058265686035\n      ],\n      [\n        \"▁カ国\",\n        -11.479063034057617\n      ],\n      [\n        \"▁ミルク\",\n        -11.47907829284668\n      ],\n      [\n        \"▁置いた\",\n        -11.47911262512207\n      ],\n      [\n        \"▁つながって\",\n        -11.479130744934082\n      ],\n      [\n        \"▁薬局\",\n        -11.479218482971191\n      ],\n      [\n        \"▁南海\",\n        -11.479378700256348\n      ],\n      [\n        \"▁無償\",\n        -11.479581832885742\n      ],\n      [\n        \"したり\",\n        -11.480059623718262\n      ],\n      [\n        \"童\",\n        -11.480059623718262\n      ],\n      [\n        \"▁努めて\",\n        -11.480165481567383\n      ],\n      [\n        \"▁点検\",\n        -11.480207443237305\n      ],\n      [\n        \"▁守って\",\n        -11.480239868164062\n      ],\n      [\n        \"▁レス\",\n        -11.480240821838379\n      ],\n      [\n        \"▁衰退\",\n        -11.480271339416504\n      ],\n      [\n        \"▁解答\",\n        -11.480290412902832\n      ],\n      [\n        \"▁エクス\",\n        -11.480306625366211\n      ],\n      [\n        \"ヴィン\",\n        -11.48052978515625\n      ],\n      [\n        \"▁遠い\",\n        -11.481033325195312\n      ],\n      [\n        \"尊\",\n        -11.481078147888184\n      ],\n      [\n        \"▁前田\",\n        -11.481324195861816\n      ],\n      [\n        \"▁ぽ\",\n        -11.48138427734375\n      ],\n      [\n        \"▁共通の\",\n        -11.481447219848633\n      ],\n      [\n        \"▁綺麗な\",\n        -11.481457710266113\n      ],\n      [\n        \"梨\",\n        -11.481464385986328\n      ],\n      [\n        \"旗\",\n        -11.481518745422363\n      ],\n      [\n        \"腫\",\n        -11.48160457611084\n      ],\n      [\n        \"▁リビング\",\n        -11.481660842895508\n      ],\n      [\n        \"▁現行\",\n        -11.482017517089844\n      ],\n      [\n        \"▁伝えた\",\n        -11.482028007507324\n      ],\n      [\n        \"▁船舶\",\n        -11.482056617736816\n      ],\n      [\n        \"覧\",\n        -11.482129096984863\n      ],\n      [\n        \"▁colspa\",\n        -11.482279777526855\n      ],\n      [\n        \"▁僅か\",\n        -11.482285499572754\n      ],\n      [\n        \"▁断り\",\n        -11.482483863830566\n      ],\n      [\n        \"▁インク\",\n        -11.482489585876465\n      ],\n      [\n        \"▁返還\",\n        -11.482617378234863\n      ],\n      [\n        \"稿\",\n        -11.482710838317871\n      ],\n      [\n        \"▁伝わって\",\n        -11.483076095581055\n      ],\n      [\n        \"▁横須賀\",\n        -11.483160972595215\n      ],\n      [\n        \"▁視野\",\n        -11.483186721801758\n      ],\n      [\n        \"ies\",\n        -11.483219146728516\n      ],\n      [\n        \"▁なくなり\",\n        -11.483315467834473\n      ],\n      [\n        \"談\",\n        -11.48334789276123\n      ],\n      [\n        \"イング\",\n        -11.48349380493164\n      ],\n      [\n        \"▁大将\",\n        -11.483663558959961\n      ],\n      [\n        \"▁云\",\n        -11.48367691040039\n      ],\n      [\n        \"▁炎症\",\n        -11.483692169189453\n      ],\n      [\n        \"ki\",\n        -11.48383903503418\n      ],\n      [\n        \"▁撮\",\n        -11.483891487121582\n      ],\n      [\n        \"脳\",\n        -11.48390007019043\n      ],\n      [\n        \"▁DAY\",\n        -11.483925819396973\n      ],\n      [\n        \"▁悠\",\n        -11.484456062316895\n      ],\n      [\n        \"▁三振\",\n        -11.484466552734375\n      ],\n      [\n        \"▁苦手な\",\n        -11.484557151794434\n      ],\n      [\n        \"▁家督\",\n        -11.484755516052246\n      ],\n      [\n        \"▁フォント\",\n        -11.484807968139648\n      ],\n      [\n        \"▁観音\",\n        -11.485495567321777\n      ],\n      [\n        \"新型\",\n        -11.485552787780762\n      ],\n      [\n        \"▁大佐\",\n        -11.485576629638672\n      ],\n      [\n        \"▁渡し\",\n        -11.485630989074707\n      ],\n      [\n        \"▁後任\",\n        -11.485651016235352\n      ],\n      [\n        \"▁武士\",\n        -11.485671043395996\n      ],\n      [\n        \"▁風邪\",\n        -11.485941886901855\n      ],\n      [\n        \"▁観て\",\n        -11.486027717590332\n      ],\n      [\n        \"拠\",\n        -11.486174583435059\n      ],\n      [\n        \"▁配属\",\n        -11.486248016357422\n      ],\n      [\n        \"ワール\",\n        -11.486307144165039\n      ],\n      [\n        \"▁副業\",\n        -11.486492156982422\n      ],\n      [\n        \"ナイト\",\n        -11.486586570739746\n      ],\n      [\n        \"トロン\",\n        -11.486597061157227\n      ],\n      [\n        \"イタリア\",\n        -11.486602783203125\n      ],\n      [\n        \"▁ウォー\",\n        -11.486795425415039\n      ],\n      [\n        \"ei\",\n        -11.486860275268555\n      ],\n      [\n        \"ぶり\",\n        -11.486964225769043\n      ],\n      [\n        \"▁加える\",\n        -11.487502098083496\n      ],\n      [\n        \"非\",\n        -11.487549781799316\n      ],\n      [\n        \"▁景観\",\n        -11.487639427185059\n      ],\n      [\n        \"▁ネオ\",\n        -11.487810134887695\n      ],\n      [\n        \"▁対話\",\n        -11.487839698791504\n      ],\n      [\n        \"享年\",\n        -11.488120079040527\n      ],\n      [\n        \"▁会談\",\n        -11.488165855407715\n      ],\n      [\n        \"明日\",\n        -11.48826789855957\n      ],\n      [\n        \"▁ミラノ\",\n        -11.488316535949707\n      ],\n      [\n        \"▁インデックス\",\n        -11.488697052001953\n      ],\n      [\n        \"▁実証\",\n        -11.489055633544922\n      ],\n      [\n        \"▁落ちる\",\n        -11.489289283752441\n      ],\n      [\n        \"持ち\",\n        -11.489357948303223\n      ],\n      [\n        \"▁アリーナ\",\n        -11.489428520202637\n      ],\n      [\n        \"階\",\n        -11.489495277404785\n      ],\n      [\n        \"▁定員\",\n        -11.489553451538086\n      ],\n      [\n        \"▁伊豆\",\n        -11.489577293395996\n      ],\n      [\n        \"▁押す\",\n        -11.489845275878906\n      ],\n      [\n        \"▁日光\",\n        -11.4898681640625\n      ],\n      [\n        \"▁沙\",\n        -11.489912033081055\n      ],\n      [\n        \"▁アラブ\",\n        -11.490135192871094\n      ],\n      [\n        \"婚\",\n        -11.490299224853516\n      ],\n      [\n        \"▁アドバイザー\",\n        -11.490367889404297\n      ],\n      [\n        \"▁芝居\",\n        -11.49046802520752\n      ],\n      [\n        \"なん\",\n        -11.490561485290527\n      ],\n      [\n        \"▁典型\",\n        -11.490589141845703\n      ],\n      [\n        \"▁国務\",\n        -11.491047859191895\n      ],\n      [\n        \"▁当て\",\n        -11.491326332092285\n      ],\n      [\n        \"リヤ\",\n        -11.491527557373047\n      ],\n      [\n        \"ちょう\",\n        -11.491802215576172\n      ],\n      [\n        \"▁勘\",\n        -11.491880416870117\n      ],\n      [\n        \"▁ボリューム\",\n        -11.491984367370605\n      ],\n      [\n        \"▁小野\",\n        -11.49262523651123\n      ],\n      [\n        \"▁バイパス\",\n        -11.49272632598877\n      ],\n      [\n        \"fe\",\n        -11.49284839630127\n      ],\n      [\n        \"皇\",\n        -11.492979049682617\n      ],\n      [\n        \"▁銭\",\n        -11.493147850036621\n      ],\n      [\n        \"▁属性\",\n        -11.493273735046387\n      ],\n      [\n        \"1983\",\n        -11.493413925170898\n      ],\n      [\n        \"▁レーダー\",\n        -11.493571281433105\n      ],\n      [\n        \"▁消えて\",\n        -11.493758201599121\n      ],\n      [\n        \"▁有効な\",\n        -11.4938325881958\n      ],\n      [\n        \"▁出典\",\n        -11.494004249572754\n      ],\n      [\n        \"▁蘭\",\n        -11.49400806427002\n      ],\n      [\n        \"ポイント\",\n        -11.494121551513672\n      ],\n      [\n        \"▁メイト\",\n        -11.49436092376709\n      ],\n      [\n        \"▁介入\",\n        -11.494404792785645\n      ],\n      [\n        \"ヴェル\",\n        -11.49445629119873\n      ],\n      [\n        \"▁シャワー\",\n        -11.494697570800781\n      ],\n      [\n        \"出した\",\n        -11.494721412658691\n      ],\n      [\n        \"えん\",\n        -11.494854927062988\n      ],\n      [\n        \"▁付加\",\n        -11.49496841430664\n      ],\n      [\n        \"▁ユニ\",\n        -11.494991302490234\n      ],\n      [\n        \"▁メー\",\n        -11.495055198669434\n      ],\n      [\n        \"宅\",\n        -11.495085716247559\n      ],\n      [\n        \"吹\",\n        -11.495285034179688\n      ],\n      [\n        \"▁聴いて\",\n        -11.49545955657959\n      ],\n      [\n        \"▁運賃\",\n        -11.495465278625488\n      ],\n      [\n        \"キャスト\",\n        -11.495552062988281\n      ],\n      [\n        \"▁なされた\",\n        -11.495631217956543\n      ],\n      [\n        \"▁岡崎\",\n        -11.495656967163086\n      ],\n      [\n        \"yn\",\n        -11.495689392089844\n      ],\n      [\n        \"MI\",\n        -11.495716094970703\n      ],\n      [\n        \"▁出口\",\n        -11.49575138092041\n      ],\n      [\n        \"▁敗戦\",\n        -11.495770454406738\n      ],\n      [\n        \"▁吉野\",\n        -11.49606704711914\n      ],\n      [\n        \"哉\",\n        -11.496081352233887\n      ],\n      [\n        \"▁大勢\",\n        -11.496500015258789\n      ],\n      [\n        \"審\",\n        -11.496522903442383\n      ],\n      [\n        \"land\",\n        -11.496573448181152\n      ],\n      [\n        \"ord\",\n        -11.49658203125\n      ],\n      [\n        \"▁密着\",\n        -11.496692657470703\n      ],\n      [\n        \"▁塁\",\n        -11.496767044067383\n      ],\n      [\n        \"仲\",\n        -11.496803283691406\n      ],\n      [\n        \"▁引く\",\n        -11.496807098388672\n      ],\n      [\n        \"▁中川\",\n        -11.4970121383667\n      ],\n      [\n        \"ov\",\n        -11.497051239013672\n      ],\n      [\n        \"▁ラリー\",\n        -11.497076034545898\n      ],\n      [\n        \"▁セン\",\n        -11.497106552124023\n      ],\n      [\n        \"▁デス\",\n        -11.497183799743652\n      ],\n      [\n        \"▁介して\",\n        -11.4974946975708\n      ],\n      [\n        \"▁戦術\",\n        -11.497584342956543\n      ],\n      [\n        \"▁見えた\",\n        -11.497678756713867\n      ],\n      [\n        \"糖\",\n        -11.49769401550293\n      ],\n      [\n        \"▁ピーター\",\n        -11.497828483581543\n      ],\n      [\n        \"▁ウィンドウ\",\n        -11.497928619384766\n      ],\n      [\n        \"箱\",\n        -11.497980117797852\n      ],\n      [\n        \"▁手元\",\n        -11.498202323913574\n      ],\n      [\n        \"▁容器\",\n        -11.49820327758789\n      ],\n      [\n        \"おり\",\n        -11.49832534790039\n      ],\n      [\n        \"▁呼びかけ\",\n        -11.498434066772461\n      ],\n      [\n        \"▁ล\",\n        -11.498531341552734\n      ],\n      [\n        \"▁アリス\",\n        -11.498641014099121\n      ],\n      [\n        \"▁จ\",\n        -11.498677253723145\n      ],\n      [\n        \"陰\",\n        -11.498687744140625\n      ],\n      [\n        \"▁ヘビー\",\n        -11.498696327209473\n      ],\n      [\n        \"▁ナン\",\n        -11.498711585998535\n      ],\n      [\n        \"tic\",\n        -11.499102592468262\n      ],\n      [\n        \"▁空襲\",\n        -11.49936580657959\n      ],\n      [\n        \"▁君主\",\n        -11.499385833740234\n      ],\n      [\n        \"▁ヘイ\",\n        -11.499399185180664\n      ],\n      [\n        \"▁体型\",\n        -11.499505043029785\n      ],\n      [\n        \"▁誤り\",\n        -11.499509811401367\n      ],\n      [\n        \"▁っ\",\n        -11.499588012695312\n      ],\n      [\n        \"▁鉱山\",\n        -11.499661445617676\n      ],\n      [\n        \"精\",\n        -11.499702453613281\n      ],\n      [\n        \"▁演\",\n        -11.499871253967285\n      ],\n      [\n        \"▁納税\",\n        -11.499937057495117\n      ],\n      [\n        \"▁大野\",\n        -11.50009536743164\n      ],\n      [\n        \"▁フォード\",\n        -11.500123977661133\n      ],\n      [\n        \"▁ちょっとした\",\n        -11.500279426574707\n      ],\n      [\n        \"▁連動\",\n        -11.500300407409668\n      ],\n      [\n        \"▁自覚\",\n        -11.500326156616211\n      ],\n      [\n        \"登\",\n        -11.500509262084961\n      ],\n      [\n        \"▁RPG\",\n        -11.500545501708984\n      ],\n      [\n        \"▁偶然\",\n        -11.500731468200684\n      ],\n      [\n        \"▁物資\",\n        -11.500919342041016\n      ],\n      [\n        \"▁ヘルプ\",\n        -11.501097679138184\n      ],\n      [\n        \"▁ヤード\",\n        -11.50147819519043\n      ],\n      [\n        \"▁隠\",\n        -11.501652717590332\n      ],\n      [\n        \"▁白人\",\n        -11.501699447631836\n      ],\n      [\n        \"はじめ\",\n        -11.50170612335205\n      ],\n      [\n        \"▁閉店\",\n        -11.501709938049316\n      ],\n      [\n        \"ber\",\n        -11.501736640930176\n      ],\n      [\n        \"ラブ\",\n        -11.50179386138916\n      ],\n      [\n        \"▁フォルダ\",\n        -11.502446174621582\n      ],\n      [\n        \"▁埋葬\",\n        -11.502496719360352\n      ],\n      [\n        \"▁解雇\",\n        -11.502616882324219\n      ],\n      [\n        \"免\",\n        -11.502649307250977\n      ],\n      [\n        \"▁尊重\",\n        -11.502655982971191\n      ],\n      [\n        \"▁フォーマット\",\n        -11.502673149108887\n      ],\n      [\n        \"▁喪失\",\n        -11.502730369567871\n      ],\n      [\n        \"▁技法\",\n        -11.503057479858398\n      ],\n      [\n        \"▁経って\",\n        -11.503079414367676\n      ],\n      [\n        \"▁図鑑\",\n        -11.503606796264648\n      ],\n      [\n        \"すぐ\",\n        -11.503633499145508\n      ],\n      [\n        \"▁卿\",\n        -11.503634452819824\n      ],\n      [\n        \"▁ラム\",\n        -11.503689765930176\n      ],\n      [\n        \"▁座って\",\n        -11.503877639770508\n      ],\n      [\n        \"▁含んで\",\n        -11.503984451293945\n      ],\n      [\n        \"▁ドー\",\n        -11.504005432128906\n      ],\n      [\n        \"▁歌劇\",\n        -11.504059791564941\n      ],\n      [\n        \"▁スミス\",\n        -11.504076957702637\n      ],\n      [\n        \"扱って\",\n        -11.504130363464355\n      ],\n      [\n        \"▁高め\",\n        -11.504143714904785\n      ],\n      [\n        \"▁はずの\",\n        -11.504301071166992\n      ],\n      [\n        \"bl\",\n        -11.504463195800781\n      ],\n      [\n        \"▁かわ\",\n        -11.504656791687012\n      ],\n      [\n        \"▁まつ\",\n        -11.50483226776123\n      ],\n      [\n        \"属\",\n        -11.504870414733887\n      ],\n      [\n        \"▁落とし\",\n        -11.504887580871582\n      ],\n      [\n        \"▁OF\",\n        -11.504904747009277\n      ],\n      [\n        \"▁ハンター\",\n        -11.504961013793945\n      ],\n      [\n        \"▁負\",\n        -11.504977226257324\n      ],\n      [\n        \"▁ターン\",\n        -11.505025863647461\n      ],\n      [\n        \"▁認めた\",\n        -11.50502872467041\n      ],\n      [\n        \"▁北方\",\n        -11.50521469116211\n      ],\n      [\n        \"▁接して\",\n        -11.505226135253906\n      ],\n      [\n        \"▁高度な\",\n        -11.505352020263672\n      ],\n      [\n        \"▁缶\",\n        -11.505404472351074\n      ],\n      [\n        \"▁首位\",\n        -11.5056734085083\n      ],\n      [\n        \"災\",\n        -11.505751609802246\n      ],\n      [\n        \"▁ツイン\",\n        -11.505813598632812\n      ],\n      [\n        \"▁最強\",\n        -11.505826950073242\n      ],\n      [\n        \"トレー\",\n        -11.505943298339844\n      ],\n      [\n        \"▁厳\",\n        -11.506060600280762\n      ],\n      [\n        \"FF\",\n        -11.506107330322266\n      ],\n      [\n        \"▁試しに\",\n        -11.506125450134277\n      ],\n      [\n        \"じて\",\n        -11.506433486938477\n      ],\n      [\n        \"従\",\n        -11.506464004516602\n      ],\n      [\n        \"▁入金\",\n        -11.506699562072754\n      ],\n      [\n        \"▁飽き\",\n        -11.506880760192871\n      ],\n      [\n        \"ズム\",\n        -11.506932258605957\n      ],\n      [\n        \"砂\",\n        -11.507036209106445\n      ],\n      [\n        \"▁銘柄\",\n        -11.507072448730469\n      ],\n      [\n        \"▁繰り返して\",\n        -11.507253646850586\n      ],\n      [\n        \"▁奉仕\",\n        -11.507593154907227\n      ],\n      [\n        \"▁焦\",\n        -11.507759094238281\n      ],\n      [\n        \"▁GR\",\n        -11.507903099060059\n      ],\n      [\n        \"▁要塞\",\n        -11.507950782775879\n      ],\n      [\n        \"▁MI\",\n        -11.50800895690918\n      ],\n      [\n        \"▁Play\",\n        -11.508352279663086\n      ],\n      [\n        \"▁でしょ\",\n        -11.508479118347168\n      ],\n      [\n        \"通り\",\n        -11.508501052856445\n      ],\n      [\n        \"腕\",\n        -11.508988380432129\n      ],\n      [\n        \"▁阻害\",\n        -11.509172439575195\n      ],\n      [\n        \"▁Ad\",\n        -11.50930118560791\n      ],\n      [\n        \"▁受容\",\n        -11.509661674499512\n      ],\n      [\n        \"▁サマー\",\n        -11.50969123840332\n      ],\n      [\n        \"▁ラッシュ\",\n        -11.509803771972656\n      ],\n      [\n        \"▁坪\",\n        -11.509835243225098\n      ],\n      [\n        \"▁省略\",\n        -11.509923934936523\n      ],\n      [\n        \"▁記念日\",\n        -11.510469436645508\n      ],\n      [\n        \"ust\",\n        -11.510659217834473\n      ],\n      [\n        \"▁スタン\",\n        -11.51078987121582\n      ],\n      [\n        \"▁笑って\",\n        -11.5109281539917\n      ],\n      [\n        \"▁170\",\n        -11.511195182800293\n      ],\n      [\n        \"▁亮\",\n        -11.511321067810059\n      ],\n      [\n        \"▁伸\",\n        -11.511388778686523\n      ],\n      [\n        \"事業\",\n        -11.511474609375\n      ],\n      [\n        \"▁ソフトバンク\",\n        -11.51154613494873\n      ],\n      [\n        \"▁初日\",\n        -11.511724472045898\n      ],\n      [\n        \"▁祝日\",\n        -11.511725425720215\n      ],\n      [\n        \"ina\",\n        -11.512048721313477\n      ],\n      [\n        \"▁このように\",\n        -11.512269020080566\n      ],\n      [\n        \"▁︎\",\n        -11.512386322021484\n      ],\n      [\n        \"▁荷\",\n        -11.512503623962402\n      ],\n      [\n        \"▁こんにちは\",\n        -11.512657165527344\n      ],\n      [\n        \"廃\",\n        -11.512738227844238\n      ],\n      [\n        \"▁荒れ\",\n        -11.512880325317383\n      ],\n      [\n        \"▁騎兵\",\n        -11.512948036193848\n      ],\n      [\n        \"▁実に\",\n        -11.512980461120605\n      ],\n      [\n        \"mi\",\n        -11.513055801391602\n      ],\n      [\n        \"▁益\",\n        -11.513261795043945\n      ],\n      [\n        \"▁インスタ\",\n        -11.51341438293457\n      ],\n      [\n        \"チャン\",\n        -11.513460159301758\n      ],\n      [\n        \"▁revision\",\n        -11.513535499572754\n      ],\n      [\n        \"▁1939\",\n        -11.513721466064453\n      ],\n      [\n        \"▁Ar\",\n        -11.513758659362793\n      ],\n      [\n        \"▁小売\",\n        -11.513937950134277\n      ],\n      [\n        \"候\",\n        -11.514021873474121\n      ],\n      [\n        \"▁庄\",\n        -11.51413631439209\n      ],\n      [\n        \"ッジ\",\n        -11.514163970947266\n      ],\n      [\n        \"リウム\",\n        -11.514749526977539\n      ],\n      [\n        \"▁キャバ\",\n        -11.514764785766602\n      ],\n      [\n        \"▁撮って\",\n        -11.515030860900879\n      ],\n      [\n        \"立た\",\n        -11.515159606933594\n      ],\n      [\n        \"▁果て\",\n        -11.51516342163086\n      ],\n      [\n        \"▁粗\",\n        -11.515830993652344\n      ],\n      [\n        \"▁奏\",\n        -11.515836715698242\n      ],\n      [\n        \"▁マナー\",\n        -11.516169548034668\n      ],\n      [\n        \"▁広域\",\n        -11.516225814819336\n      ],\n      [\n        \"▁空母\",\n        -11.516263961791992\n      ],\n      [\n        \"▁ほんの\",\n        -11.516271591186523\n      ],\n      [\n        \"▁情熱\",\n        -11.516389846801758\n      ],\n      [\n        \"▁処\",\n        -11.516435623168945\n      ],\n      [\n        \"烈\",\n        -11.516469955444336\n      ],\n      [\n        \"▁失い\",\n        -11.516655921936035\n      ],\n      [\n        \"net\",\n        -11.516688346862793\n      ],\n      [\n        \"磁\",\n        -11.51704216003418\n      ],\n      [\n        \"荷\",\n        -11.517106056213379\n      ],\n      [\n        \"▁今では\",\n        -11.51777458190918\n      ],\n      [\n        \"▁振\",\n        -11.51781940460205\n      ],\n      [\n        \"▁句\",\n        -11.517874717712402\n      ],\n      [\n        \"哀\",\n        -11.517900466918945\n      ],\n      [\n        \"▁砂糖\",\n        -11.518102645874023\n      ],\n      [\n        \"pa\",\n        -11.518278121948242\n      ],\n      [\n        \"姓\",\n        -11.518324851989746\n      ],\n      [\n        \"▁基金\",\n        -11.518567085266113\n      ],\n      [\n        \"▁1200\",\n        -11.518847465515137\n      ],\n      [\n        \"▁上田\",\n        -11.518889427185059\n      ],\n      [\n        \"▁海賊\",\n        -11.518915176391602\n      ],\n      [\n        \"si\",\n        -11.519067764282227\n      ],\n      [\n        \"エロ\",\n        -11.519244194030762\n      ],\n      [\n        \"▁イノベーション\",\n        -11.519267082214355\n      ],\n      [\n        \"▁不能\",\n        -11.519529342651367\n      ],\n      [\n        \"▁台車\",\n        -11.519549369812012\n      ],\n      [\n        \"▁押して\",\n        -11.519669532775879\n      ],\n      [\n        \"▁小川\",\n        -11.51969051361084\n      ],\n      [\n        \"▁ジャーナリスト\",\n        -11.519742012023926\n      ],\n      [\n        \"▁詳細に\",\n        -11.519784927368164\n      ],\n      [\n        \"▁手軽に\",\n        -11.519861221313477\n      ],\n      [\n        \"レク\",\n        -11.520003318786621\n      ],\n      [\n        \"横浜\",\n        -11.520184516906738\n      ],\n      [\n        \"RE\",\n        -11.520360946655273\n      ],\n      [\n        \"震\",\n        -11.520512580871582\n      ],\n      [\n        \"▁交\",\n        -11.520538330078125\n      ],\n      [\n        \"架\",\n        -11.520777702331543\n      ],\n      [\n        \"▁夫妻\",\n        -11.520879745483398\n      ],\n      [\n        \"▁ノベル\",\n        -11.521023750305176\n      ],\n      [\n        \"労\",\n        -11.521047592163086\n      ],\n      [\n        \"▁ミー\",\n        -11.521065711975098\n      ],\n      [\n        \"▁NPO\",\n        -11.521130561828613\n      ],\n      [\n        \"オル\",\n        -11.521225929260254\n      ],\n      [\n        \"^\",\n        -11.521415710449219\n      ],\n      [\n        \"▁▼\",\n        -11.521488189697266\n      ],\n      [\n        \"様々な\",\n        -11.522185325622559\n      ],\n      [\n        \"▁あえて\",\n        -11.522257804870605\n      ],\n      [\n        \"▁ヵ月\",\n        -11.522357940673828\n      ],\n      [\n        \"▁レン\",\n        -11.522859573364258\n      ],\n      [\n        \"▁皇\",\n        -11.523118019104004\n      ],\n      [\n        \"▁青い\",\n        -11.523214340209961\n      ],\n      [\n        \"▁変数\",\n        -11.52328109741211\n      ],\n      [\n        \"▁スリー\",\n        -11.523397445678711\n      ],\n      [\n        \"グレ\",\n        -11.52340030670166\n      ],\n      [\n        \"▁天才\",\n        -11.523494720458984\n      ],\n      [\n        \"▁永久\",\n        -11.523499488830566\n      ],\n      [\n        \"ルン\",\n        -11.523547172546387\n      ],\n      [\n        \"▁べきで\",\n        -11.52377986907959\n      ],\n      [\n        \"▁何故\",\n        -11.523786544799805\n      ],\n      [\n        \"▁App\",\n        -11.523823738098145\n      ],\n      [\n        \"眠\",\n        -11.523935317993164\n      ],\n      [\n        \"▁排\",\n        -11.52418327331543\n      ],\n      [\n        \"▁戦場\",\n        -11.524581909179688\n      ],\n      [\n        \"可\",\n        -11.524584770202637\n      ],\n      [\n        \"▁屋外\",\n        -11.524787902832031\n      ],\n      [\n        \"▁牽引\",\n        -11.524861335754395\n      ],\n      [\n        \"▁随時\",\n        -11.525100708007812\n      ],\n      [\n        \"▁競輪\",\n        -11.525365829467773\n      ],\n      [\n        \"▁目立つ\",\n        -11.525591850280762\n      ],\n      [\n        \"雑\",\n        -11.525697708129883\n      ],\n      [\n        \"▁揃って\",\n        -11.5256986618042\n      ],\n      [\n        \"▁フィルター\",\n        -11.525870323181152\n      ],\n      [\n        \"齢\",\n        -11.525877952575684\n      ],\n      [\n        \"▁方程式\",\n        -11.525936126708984\n      ],\n      [\n        \"▁喫煙\",\n        -11.525996208190918\n      ],\n      [\n        \"▁ようである\",\n        -11.526054382324219\n      ],\n      [\n        \"▁防水\",\n        -11.526139259338379\n      ],\n      [\n        \"▁薄く\",\n        -11.526161193847656\n      ],\n      [\n        \"▁居酒屋\",\n        -11.526473999023438\n      ],\n      [\n        \"▁非常\",\n        -11.526585578918457\n      ],\n      [\n        \"埼玉\",\n        -11.526708602905273\n      ],\n      [\n        \"▁尋ね\",\n        -11.526886940002441\n      ],\n      [\n        \"▁TOKYO\",\n        -11.526897430419922\n      ],\n      [\n        \"▁全額\",\n        -11.526933670043945\n      ],\n      [\n        \"バーン\",\n        -11.527088165283203\n      ],\n      [\n        \"▁年次\",\n        -11.527206420898438\n      ],\n      [\n        \"▁ございましたら\",\n        -11.527339935302734\n      ],\n      [\n        \"▁商売\",\n        -11.527783393859863\n      ],\n      [\n        \"▁ディーゼル\",\n        -11.527809143066406\n      ],\n      [\n        \"▁Ro\",\n        -11.528017044067383\n      ],\n      [\n        \"▁扇\",\n        -11.528024673461914\n      ],\n      [\n        \"▁指し\",\n        -11.528312683105469\n      ],\n      [\n        \"▁シニア\",\n        -11.52834701538086\n      ],\n      [\n        \"ual\",\n        -11.52840518951416\n      ],\n      [\n        \"á\",\n        -11.528609275817871\n      ],\n      [\n        \"▁訂正\",\n        -11.528748512268066\n      ],\n      [\n        \"▁冷え\",\n        -11.528870582580566\n      ],\n      [\n        \"▁マリオ\",\n        -11.52890682220459\n      ],\n      [\n        \"▁誇り\",\n        -11.528926849365234\n      ],\n      [\n        \"▁コンテナ\",\n        -11.529008865356445\n      ],\n      [\n        \"評価\",\n        -11.529083251953125\n      ],\n      [\n        \"▁ป\",\n        -11.52934455871582\n      ],\n      [\n        \"▁妨害\",\n        -11.529348373413086\n      ],\n      [\n        \"▁シル\",\n        -11.529417991638184\n      ],\n      [\n        \"▁たとえ\",\n        -11.53002643585205\n      ],\n      [\n        \"▁△\",\n        -11.530097007751465\n      ],\n      [\n        \"▁職務\",\n        -11.530147552490234\n      ],\n      [\n        \"▁山岳\",\n        -11.530197143554688\n      ],\n      [\n        \"▁検察\",\n        -11.530319213867188\n      ],\n      [\n        \"黄\",\n        -11.5304594039917\n      ],\n      [\n        \"▁小松\",\n        -11.53066349029541\n      ],\n      [\n        \"▁亡命\",\n        -11.530688285827637\n      ],\n      [\n        \"▁受注\",\n        -11.5306978225708\n      ],\n      [\n        \"▁月曜日\",\n        -11.530721664428711\n      ],\n      [\n        \"▁客員\",\n        -11.530769348144531\n      ],\n      [\n        \"▁レール\",\n        -11.530786514282227\n      ],\n      [\n        \"▁木材\",\n        -11.531097412109375\n      ],\n      [\n        \"▁粒\",\n        -11.53114128112793\n      ],\n      [\n        \"▁臨\",\n        -11.531335830688477\n      ],\n      [\n        \"亭\",\n        -11.531404495239258\n      ],\n      [\n        \"▁営利\",\n        -11.531732559204102\n      ],\n      [\n        \"ah\",\n        -11.531778335571289\n      ],\n      [\n        \"▁ホンダ\",\n        -11.531821250915527\n      ],\n      [\n        \"▁搭乗\",\n        -11.531868934631348\n      ],\n      [\n        \"バッハ\",\n        -11.5319242477417\n      ],\n      [\n        \"換\",\n        -11.53197193145752\n      ],\n      [\n        \"▁視線\",\n        -11.53201961517334\n      ],\n      [\n        \"▁げ\",\n        -11.53203010559082\n      ],\n      [\n        \"▁ラク\",\n        -11.532071113586426\n      ],\n      [\n        \"寒\",\n        -11.532150268554688\n      ],\n      [\n        \"▁繋がる\",\n        -11.532289505004883\n      ],\n      [\n        \"▁東大\",\n        -11.532371520996094\n      ],\n      [\n        \"▁フェラ\",\n        -11.532586097717285\n      ],\n      [\n        \"▁決\",\n        -11.532779693603516\n      ],\n      [\n        \"▁並\",\n        -11.53281021118164\n      ],\n      [\n        \"▁競合\",\n        -11.532831192016602\n      ],\n      [\n        \"▁ミドル\",\n        -11.532892227172852\n      ],\n      [\n        \"▁ウィン\",\n        -11.533068656921387\n      ],\n      [\n        \"▁化石\",\n        -11.533198356628418\n      ],\n      [\n        \"▁クライ\",\n        -11.533312797546387\n      ],\n      [\n        \"▁枕\",\n        -11.533651351928711\n      ],\n      [\n        \"▁ヤン\",\n        -11.533812522888184\n      ],\n      [\n        \"レオ\",\n        -11.53397274017334\n      ],\n      [\n        \"▁福音\",\n        -11.534271240234375\n      ],\n      [\n        \"ながら\",\n        -11.534271240234375\n      ],\n      [\n        \"▁帰属\",\n        -11.534295082092285\n      ],\n      [\n        \"▁無断\",\n        -11.53432846069336\n      ],\n      [\n        \"▁キュ\",\n        -11.534372329711914\n      ],\n      [\n        \"ath\",\n        -11.534440040588379\n      ],\n      [\n        \"脈\",\n        -11.534574508666992\n      ],\n      [\n        \"こういう\",\n        -11.534626960754395\n      ],\n      [\n        \"▁ルイス\",\n        -11.53482723236084\n      ],\n      [\n        \"▁幸せな\",\n        -11.534914016723633\n      ],\n      [\n        \"幹\",\n        -11.534940719604492\n      ],\n      [\n        \"ポリス\",\n        -11.535076141357422\n      ],\n      [\n        \"▁借りる\",\n        -11.535205841064453\n      ],\n      [\n        \"臼\",\n        -11.535602569580078\n      ],\n      [\n        \"ight\",\n        -11.53561782836914\n      ],\n      [\n        \"クレ\",\n        -11.535758972167969\n      ],\n      [\n        \"▁征服\",\n        -11.536404609680176\n      ],\n      [\n        \"ari\",\n        -11.536468505859375\n      ],\n      [\n        \"▁寒い\",\n        -11.536624908447266\n      ],\n      [\n        \"▁海水\",\n        -11.53664493560791\n      ],\n      [\n        \"▁嫌な\",\n        -11.536652565002441\n      ],\n      [\n        \"▁引き起こす\",\n        -11.536674499511719\n      ],\n      [\n        \"サム\",\n        -11.536972999572754\n      ],\n      [\n        \"▁男の子\",\n        -11.537053108215332\n      ],\n      [\n        \"II\",\n        -11.537186622619629\n      ],\n      [\n        \"▁ME\",\n        -11.537556648254395\n      ],\n      [\n        \"ピュ\",\n        -11.537750244140625\n      ],\n      [\n        \"▁再会\",\n        -11.53787612915039\n      ],\n      [\n        \"▁125\",\n        -11.538320541381836\n      ],\n      [\n        \"1982\",\n        -11.538400650024414\n      ],\n      [\n        \"▁本気で\",\n        -11.538468360900879\n      ],\n      [\n        \"▁適した\",\n        -11.538553237915039\n      ],\n      [\n        \"▁ツー\",\n        -11.538615226745605\n      ],\n      [\n        \"▁生態\",\n        -11.53887939453125\n      ],\n      [\n        \"▁通じ\",\n        -11.538923263549805\n      ],\n      [\n        \"go\",\n        -11.53895092010498\n      ],\n      [\n        \"ts\",\n        -11.539010047912598\n      ],\n      [\n        \"ストロ\",\n        -11.539131164550781\n      ],\n      [\n        \"▁ギア\",\n        -11.539398193359375\n      ],\n      [\n        \"▁Cl\",\n        -11.539471626281738\n      ],\n      [\n        \"▁シンボル\",\n        -11.539501190185547\n      ],\n      [\n        \"▁山崎\",\n        -11.539619445800781\n      ],\n      [\n        \"グループ\",\n        -11.539734840393066\n      ],\n      [\n        \"ヤマ\",\n        -11.539894104003906\n      ],\n      [\n        \"▁遠慮\",\n        -11.539907455444336\n      ],\n      [\n        \"▁中将\",\n        -11.540020942687988\n      ],\n      [\n        \"▁ha\",\n        -11.540223121643066\n      ],\n      [\n        \"がた\",\n        -11.540266036987305\n      ],\n      [\n        \"▁慢性\",\n        -11.540319442749023\n      ],\n      [\n        \"▁MF\",\n        -11.540613174438477\n      ],\n      [\n        \"▁須\",\n        -11.540787696838379\n      ],\n      [\n        \"▁育\",\n        -11.540902137756348\n      ],\n      [\n        \"▁転向\",\n        -11.540990829467773\n      ],\n      [\n        \"BO\",\n        -11.541297912597656\n      ],\n      [\n        \"▁煙\",\n        -11.541495323181152\n      ],\n      [\n        \"▁炭\",\n        -11.541499137878418\n      ],\n      [\n        \"▁見つか\",\n        -11.541543006896973\n      ],\n      [\n        \"▁訪れて\",\n        -11.541550636291504\n      ],\n      [\n        \"▁担って\",\n        -11.541637420654297\n      ],\n      [\n        \"▁エンタテインメント\",\n        -11.541714668273926\n      ],\n      [\n        \"ビング\",\n        -11.541733741760254\n      ],\n      [\n        \"▁from\",\n        -11.54184341430664\n      ],\n      [\n        \"ほとんど\",\n        -11.54188346862793\n      ],\n      [\n        \"▁腫瘍\",\n        -11.542017936706543\n      ],\n      [\n        \"▁語学\",\n        -11.542044639587402\n      ],\n      [\n        \"▁レザー\",\n        -11.542129516601562\n      ],\n      [\n        \"▁漁業\",\n        -11.542232513427734\n      ],\n      [\n        \"認\",\n        -11.542322158813477\n      ],\n      [\n        \"▁染め\",\n        -11.542414665222168\n      ],\n      [\n        \"▁Su\",\n        -11.542444229125977\n      ],\n      [\n        \"▁責め\",\n        -11.542562484741211\n      ],\n      [\n        \"▁なくなって\",\n        -11.542707443237305\n      ],\n      [\n        \"▁丁\",\n        -11.542737007141113\n      ],\n      [\n        \"▁体質\",\n        -11.54275894165039\n      ],\n      [\n        \"▁抱いて\",\n        -11.542869567871094\n      ],\n      [\n        \"GO\",\n        -11.542879104614258\n      ],\n      [\n        \"▁シンプル\",\n        -11.54300308227539\n      ],\n      [\n        \"現役\",\n        -11.543410301208496\n      ],\n      [\n        \"▁奪\",\n        -11.543670654296875\n      ],\n      [\n        \"▁論争\",\n        -11.54376220703125\n      ],\n      [\n        \"▁招き\",\n        -11.54385757446289\n      ],\n      [\n        \"▁儀式\",\n        -11.543864250183105\n      ],\n      [\n        \"▁ホスト\",\n        -11.54387092590332\n      ],\n      [\n        \"▁補正\",\n        -11.543872833251953\n      ],\n      [\n        \"hi\",\n        -11.543951034545898\n      ],\n      [\n        \"▁読ま\",\n        -11.544011116027832\n      ],\n      [\n        \"▁1937\",\n        -11.54419994354248\n      ],\n      [\n        \"▁圧\",\n        -11.544358253479004\n      ],\n      [\n        \"▁配給\",\n        -11.54449462890625\n      ],\n      [\n        \"ボル\",\n        -11.544677734375\n      ],\n      [\n        \"▁原稿\",\n        -11.544694900512695\n      ],\n      [\n        \"▁いじめ\",\n        -11.54478645324707\n      ],\n      [\n        \"っきり\",\n        -11.545027732849121\n      ],\n      [\n        \"余\",\n        -11.545058250427246\n      ],\n      [\n        \"▁行える\",\n        -11.545069694519043\n      ],\n      [\n        \"▁受け取り\",\n        -11.545154571533203\n      ],\n      [\n        \"ーレ\",\n        -11.545161247253418\n      ],\n      [\n        \"講\",\n        -11.545281410217285\n      ],\n      [\n        \"▁劣\",\n        -11.545616149902344\n      ],\n      [\n        \"▁深刻な\",\n        -11.545848846435547\n      ],\n      [\n        \"ハラ\",\n        -11.54586124420166\n      ],\n      [\n        \"▁ISO\",\n        -11.546037673950195\n      ],\n      [\n        \"▁天神\",\n        -11.546126365661621\n      ],\n      [\n        \"▁承諾\",\n        -11.546219825744629\n      ],\n      [\n        \"▁シャン\",\n        -11.546418190002441\n      ],\n      [\n        \"〇\",\n        -11.546483993530273\n      ],\n      [\n        \"▁UEFA\",\n        -11.54650592803955\n      ],\n      [\n        \"▁氏名\",\n        -11.546714782714844\n      ],\n      [\n        \"▁電圧\",\n        -11.547322273254395\n      ],\n      [\n        \"over\",\n        -11.547503471374512\n      ],\n      [\n        \"宣\",\n        -11.547539710998535\n      ],\n      [\n        \"アリ\",\n        -11.547703742980957\n      ],\n      [\n        \"OO\",\n        -11.5477876663208\n      ],\n      [\n        \"テー\",\n        -11.547795295715332\n      ],\n      [\n        \"▁知恵\",\n        -11.547859191894531\n      ],\n      [\n        \"▁マレーシア\",\n        -11.547948837280273\n      ],\n      [\n        \"▁特有の\",\n        -11.548108100891113\n      ],\n      [\n        \"!\",\n        -11.548381805419922\n      ],\n      [\n        \"OC\",\n        -11.548510551452637\n      ],\n      [\n        \"奏\",\n        -11.548550605773926\n      ],\n      [\n        \"▁セカンド\",\n        -11.54858112335205\n      ],\n      [\n        \"▁公益\",\n        -11.54861831665039\n      ],\n      [\n        \"▁勲章\",\n        -11.548792839050293\n      ],\n      [\n        \"▁処置\",\n        -11.54904842376709\n      ],\n      [\n        \"▁情\",\n        -11.54915714263916\n      ],\n      [\n        \"▁弥\",\n        -11.549205780029297\n      ],\n      [\n        \"▁鎖\",\n        -11.549327850341797\n      ],\n      [\n        \"▁ツイッター\",\n        -11.54953670501709\n      ],\n      [\n        \"▁割れ\",\n        -11.54969310760498\n      ],\n      [\n        \"▁追跡\",\n        -11.549796104431152\n      ],\n      [\n        \"▁動機\",\n        -11.549909591674805\n      ],\n      [\n        \"▁拘\",\n        -11.549922943115234\n      ],\n      [\n        \"岐\",\n        -11.549934387207031\n      ],\n      [\n        \"▁万全\",\n        -11.549962997436523\n      ],\n      [\n        \"▁入浴\",\n        -11.549978256225586\n      ],\n      [\n        \"セント\",\n        -11.550076484680176\n      ],\n      [\n        \"▁se\",\n        -11.550126075744629\n      ],\n      [\n        \"途\",\n        -11.550166130065918\n      ],\n      [\n        \"▁開館\",\n        -11.550322532653809\n      ],\n      [\n        \"炭\",\n        -11.550369262695312\n      ],\n      [\n        \"▁ゆえ\",\n        -11.55056095123291\n      ],\n      [\n        \"検索\",\n        -11.550562858581543\n      ],\n      [\n        \"▁取り扱う\",\n        -11.550677299499512\n      ],\n      [\n        \"立て\",\n        -11.550714492797852\n      ],\n      [\n        \"▁完備\",\n        -11.550764083862305\n      ],\n      [\n        \"▁あったら\",\n        -11.550867080688477\n      ],\n      [\n        \"▁Sa\",\n        -11.551190376281738\n      ],\n      [\n        \"▁洗面\",\n        -11.55128002166748\n      ],\n      [\n        \"だん\",\n        -11.55152702331543\n      ],\n      [\n        \"こと\",\n        -11.551536560058594\n      ],\n      [\n        \"▁ことだ\",\n        -11.551679611206055\n      ],\n      [\n        \"▁綺麗に\",\n        -11.551692008972168\n      ],\n      [\n        \"ニコ\",\n        -11.55179500579834\n      ],\n      [\n        \"▁絶滅\",\n        -11.551801681518555\n      ],\n      [\n        \"就\",\n        -11.551892280578613\n      ],\n      [\n        \"わる\",\n        -11.55194091796875\n      ],\n      [\n        \"▁自作\",\n        -11.551994323730469\n      ],\n      [\n        \"▁貫\",\n        -11.552048683166504\n      ],\n      [\n        \"▁宏\",\n        -11.552136421203613\n      ],\n      [\n        \"OM\",\n        -11.552311897277832\n      ],\n      [\n        \"デュ\",\n        -11.552470207214355\n      ],\n      [\n        \"▁くださる\",\n        -11.552491188049316\n      ],\n      [\n        \"▁駆使\",\n        -11.55252456665039\n      ],\n      [\n        \"▁センス\",\n        -11.552730560302734\n      ],\n      [\n        \"刺\",\n        -11.552825927734375\n      ],\n      [\n        \"▁1936\",\n        -11.552940368652344\n      ],\n      [\n        \"呂\",\n        -11.552943229675293\n      ],\n      [\n        \"▁読\",\n        -11.553034782409668\n      ],\n      [\n        \"▁ヴェル\",\n        -11.553435325622559\n      ],\n      [\n        \"▁外壁\",\n        -11.553540229797363\n      ],\n      [\n        \"ごろ\",\n        -11.553841590881348\n      ],\n      [\n        \"厳\",\n        -11.553910255432129\n      ],\n      [\n        \"▁ギャ\",\n        -11.553942680358887\n      ],\n      [\n        \"▁騎手\",\n        -11.554055213928223\n      ],\n      [\n        \"▁Di\",\n        -11.554186820983887\n      ],\n      [\n        \"▁気づいた\",\n        -11.55423641204834\n      ],\n      [\n        \"▁2,000\",\n        -11.554327964782715\n      ],\n      [\n        \"動画\",\n        -11.554511070251465\n      ],\n      [\n        \"腸\",\n        -11.55480670928955\n      ],\n      [\n        \"▁主宰\",\n        -11.554828643798828\n      ],\n      [\n        \"▁服装\",\n        -11.554876327514648\n      ],\n      [\n        \"▁住友\",\n        -11.554951667785645\n      ],\n      [\n        \"▁改装\",\n        -11.555045127868652\n      ],\n      [\n        \"障\",\n        -11.555219650268555\n      ],\n      [\n        \"▁出土\",\n        -11.555362701416016\n      ],\n      [\n        \"核\",\n        -11.555381774902344\n      ],\n      [\n        \"▁研\",\n        -11.555407524108887\n      ],\n      [\n        \"挙\",\n        -11.555560111999512\n      ],\n      [\n        \"みなさん\",\n        -11.555630683898926\n      ],\n      [\n        \"▁コーディネート\",\n        -11.55565071105957\n      ],\n      [\n        \"沙\",\n        -11.555861473083496\n      ],\n      [\n        \"▁明確な\",\n        -11.556219100952148\n      ],\n      [\n        \"▁World\",\n        -11.556333541870117\n      ],\n      [\n        \"▁高まって\",\n        -11.556527137756348\n      ],\n      [\n        \"▁喫茶\",\n        -11.556574821472168\n      ],\n      [\n        \"▁完\",\n        -11.556774139404297\n      ],\n      [\n        \"ルク\",\n        -11.556790351867676\n      ],\n      [\n        \"▁対照\",\n        -11.556865692138672\n      ],\n      [\n        \"▁仕上がり\",\n        -11.556896209716797\n      ],\n      [\n        \"▁拳\",\n        -11.557093620300293\n      ],\n      [\n        \"固\",\n        -11.557123184204102\n      ],\n      [\n        \"▁頭痛\",\n        -11.557260513305664\n      ],\n      [\n        \"▁町名\",\n        -11.557506561279297\n      ],\n      [\n        \"軸\",\n        -11.557526588439941\n      ],\n      [\n        \"阿\",\n        -11.557558059692383\n      ],\n      [\n        \"▁不調\",\n        -11.557581901550293\n      ],\n      [\n        \"▁支\",\n        -11.557791709899902\n      ],\n      [\n        \"ボウ\",\n        -11.557847023010254\n      ],\n      [\n        \"▁湘南\",\n        -11.557868957519531\n      ],\n      [\n        \"▁レア\",\n        -11.558034896850586\n      ],\n      [\n        \"▁答えて\",\n        -11.55804443359375\n      ],\n      [\n        \"▁魔女\",\n        -11.55809211730957\n      ],\n      [\n        \"▁中毒\",\n        -11.558412551879883\n      ],\n      [\n        \"メンバー\",\n        -11.558427810668945\n      ],\n      [\n        \"▁受診\",\n        -11.558448791503906\n      ],\n      [\n        \"▁不明である\",\n        -11.558582305908203\n      ],\n      [\n        \"▁魚雷\",\n        -11.558640480041504\n      ],\n      [\n        \"▁晩\",\n        -11.55876636505127\n      ],\n      [\n        \"▁1938\",\n        -11.558841705322266\n      ],\n      [\n        \"▁又\",\n        -11.558841705322266\n      ],\n      [\n        \"モス\",\n        -11.559161186218262\n      ],\n      [\n        \"▁矛盾\",\n        -11.559165954589844\n      ],\n      [\n        \"▁育てる\",\n        -11.55916976928711\n      ],\n      [\n        \"▁巡り\",\n        -11.559405326843262\n      ],\n      [\n        \"是非\",\n        -11.559425354003906\n      ],\n      [\n        \"▁圭\",\n        -11.559439659118652\n      ],\n      [\n        \"▁役者\",\n        -11.559490203857422\n      ],\n      [\n        \"▁レオ\",\n        -11.55959415435791\n      ],\n      [\n        \"▁時給\",\n        -11.559657096862793\n      ],\n      [\n        \"ポリ\",\n        -11.559671401977539\n      ],\n      [\n        \"▁少\",\n        -11.559736251831055\n      ],\n      [\n        \"替え\",\n        -11.559747695922852\n      ],\n      [\n        \"▁イエロー\",\n        -11.559782981872559\n      ],\n      [\n        \"▁ヤマ\",\n        -11.559840202331543\n      ],\n      [\n        \"▁インパクト\",\n        -11.559844970703125\n      ],\n      [\n        \"▁結晶\",\n        -11.56010627746582\n      ],\n      [\n        \"▁Com\",\n        -11.560153007507324\n      ],\n      [\n        \"▁ジン\",\n        -11.560352325439453\n      ],\n      [\n        \"▁快適に\",\n        -11.560362815856934\n      ],\n      [\n        \"憲\",\n        -11.560385704040527\n      ],\n      [\n        \"犯\",\n        -11.560454368591309\n      ],\n      [\n        \"補\",\n        -11.560554504394531\n      ],\n      [\n        \"▁定年\",\n        -11.560721397399902\n      ],\n      [\n        \"▁流域\",\n        -11.560895919799805\n      ],\n      [\n        \"本来\",\n        -11.561036109924316\n      ],\n      [\n        \"▁貸\",\n        -11.561302185058594\n      ],\n      [\n        \"初回\",\n        -11.561418533325195\n      ],\n      [\n        \"ort\",\n        -11.561542510986328\n      ],\n      [\n        \"▁希\",\n        -11.56159782409668\n      ],\n      [\n        \"▁成年\",\n        -11.561631202697754\n      ],\n      [\n        \"▁山地\",\n        -11.561671257019043\n      ],\n      [\n        \"▁不安に\",\n        -11.561849594116211\n      ],\n      [\n        \"▁変えた\",\n        -11.561914443969727\n      ],\n      [\n        \"ew\",\n        -11.562054634094238\n      ],\n      [\n        \"▁シュー\",\n        -11.56208324432373\n      ],\n      [\n        \"▁寄附\",\n        -11.562138557434082\n      ],\n      [\n        \"▁虚\",\n        -11.562272071838379\n      ],\n      [\n        \"▁5,000\",\n        -11.562386512756348\n      ],\n      [\n        \"▁みつ\",\n        -11.562727928161621\n      ],\n      [\n        \"準\",\n        -11.56277084350586\n      ],\n      [\n        \"失\",\n        -11.563116073608398\n      ],\n      [\n        \"▁追わ\",\n        -11.563188552856445\n      ],\n      [\n        \"▁愛情\",\n        -11.563214302062988\n      ],\n      [\n        \"▁メス\",\n        -11.56343936920166\n      ],\n      [\n        \"ny\",\n        -11.56363296508789\n      ],\n      [\n        \"▁勘違い\",\n        -11.56369400024414\n      ],\n      [\n        \"▁溝\",\n        -11.564163208007812\n      ],\n      [\n        \"▁婦人\",\n        -11.564228057861328\n      ],\n      [\n        \"テール\",\n        -11.564266204833984\n      ],\n      [\n        \"▁歌舞伎\",\n        -11.564608573913574\n      ],\n      [\n        \"▁涼\",\n        -11.564642906188965\n      ],\n      [\n        \"▁酔\",\n        -11.564774513244629\n      ],\n      [\n        \"▁暑い\",\n        -11.564875602722168\n      ],\n      [\n        \"▁誘い\",\n        -11.565125465393066\n      ],\n      [\n        \"▁do\",\n        -11.565268516540527\n      ],\n      [\n        \"▁セルビア\",\n        -11.565314292907715\n      ],\n      [\n        \"▁文芸\",\n        -11.565388679504395\n      ],\n      [\n        \"▁チョ\",\n        -11.56601619720459\n      ],\n      [\n        \"▁救助\",\n        -11.566064834594727\n      ],\n      [\n        \"▁正解\",\n        -11.566121101379395\n      ],\n      [\n        \"没\",\n        -11.5662841796875\n      ],\n      [\n        \"編\",\n        -11.56634521484375\n      ],\n      [\n        \"ネイ\",\n        -11.566422462463379\n      ],\n      [\n        \"▁諦め\",\n        -11.566437721252441\n      ],\n      [\n        \"▁3,000\",\n        -11.566505432128906\n      ],\n      [\n        \"▁集密\",\n        -11.566506385803223\n      ],\n      [\n        \"ベー\",\n        -11.56655216217041\n      ],\n      [\n        \"▁乗り入れ\",\n        -11.566644668579102\n      ],\n      [\n        \"▁原則として\",\n        -11.566715240478516\n      ],\n      [\n        \"▁おっぱい\",\n        -11.566970825195312\n      ],\n      [\n        \"▁Lo\",\n        -11.567032814025879\n      ],\n      [\n        \"▁趣旨\",\n        -11.56741714477539\n      ],\n      [\n        \"ium\",\n        -11.567506790161133\n      ],\n      [\n        \"▁洗い\",\n        -11.567662239074707\n      ],\n      [\n        \"▁聴く\",\n        -11.567803382873535\n      ],\n      [\n        \"▁歌唱\",\n        -11.567948341369629\n      ],\n      [\n        \"▁牡馬\",\n        -11.567975044250488\n      ],\n      [\n        \"▁ホラー\",\n        -11.568001747131348\n      ],\n      [\n        \"▁複\",\n        -11.568106651306152\n      ],\n      [\n        \"za\",\n        -11.568130493164062\n      ],\n      [\n        \"▁直面\",\n        -11.568251609802246\n      ],\n      [\n        \"▁ガイドライン\",\n        -11.568258285522461\n      ],\n      [\n        \"▁やめて\",\n        -11.568379402160645\n      ],\n      [\n        \"▁適切に\",\n        -11.568633079528809\n      ],\n      [\n        \"▁チョコ\",\n        -11.569042205810547\n      ],\n      [\n        \"▁醤油\",\n        -11.569222450256348\n      ],\n      [\n        \"▁陥落\",\n        -11.569222450256348\n      ],\n      [\n        \"▁組み立て\",\n        -11.569510459899902\n      ],\n      [\n        \"勤\",\n        -11.569581031799316\n      ],\n      [\n        \"ヒー\",\n        -11.56961441040039\n      ],\n      [\n        \"▁外来\",\n        -11.569644927978516\n      ],\n      [\n        \"1979\",\n        -11.569684028625488\n      ],\n      [\n        \"▁使えば\",\n        -11.569869995117188\n      ],\n      [\n        \"▁まる\",\n        -11.570510864257812\n      ],\n      [\n        \"▁越えて\",\n        -11.570560455322266\n      ],\n      [\n        \"▁細かく\",\n        -11.570809364318848\n      ],\n      [\n        \"▁名乗る\",\n        -11.571096420288086\n      ],\n      [\n        \"▁がちです\",\n        -11.571125030517578\n      ],\n      [\n        \"1972\",\n        -11.571202278137207\n      ],\n      [\n        \"▁エンターテインメント\",\n        -11.571346282958984\n      ],\n      [\n        \"テリア\",\n        -11.571630477905273\n      ],\n      [\n        \"▁オスマン\",\n        -11.5717134475708\n      ],\n      [\n        \"▁入札\",\n        -11.571821212768555\n      ],\n      [\n        \"▁愛用\",\n        -11.57199478149414\n      ],\n      [\n        \"dy\",\n        -11.572011947631836\n      ],\n      [\n        \"▁戻す\",\n        -11.572025299072266\n      ],\n      [\n        \"▁排水\",\n        -11.57229232788086\n      ],\n      [\n        \"▁幼児\",\n        -11.572421073913574\n      ],\n      [\n        \"ルズ\",\n        -11.572540283203125\n      ],\n      [\n        \"▁種子\",\n        -11.572575569152832\n      ],\n      [\n        \"▁ゆったり\",\n        -11.572985649108887\n      ],\n      [\n        \"▁カム\",\n        -11.573020935058594\n      ],\n      [\n        \"メイン\",\n        -11.573119163513184\n      ],\n      [\n        \"▁出せ\",\n        -11.573238372802734\n      ],\n      [\n        \"▁食器\",\n        -11.573366165161133\n      ],\n      [\n        \"▁アマゾン\",\n        -11.57353401184082\n      ],\n      [\n        \"苑\",\n        -11.573599815368652\n      ],\n      [\n        \"▁恩\",\n        -11.573614120483398\n      ],\n      [\n        \"▁グラム\",\n        -11.573660850524902\n      ],\n      [\n        \"▁終わら\",\n        -11.573784828186035\n      ],\n      [\n        \"HA\",\n        -11.5737943649292\n      ],\n      [\n        \"▁克\",\n        -11.574190139770508\n      ],\n      [\n        \"▁縮\",\n        -11.574241638183594\n      ],\n      [\n        \"▁スプリング\",\n        -11.574352264404297\n      ],\n      [\n        \"スパ\",\n        -11.57451343536377\n      ],\n      [\n        \"▁見通し\",\n        -11.574616432189941\n      ],\n      [\n        \"▁行ったり\",\n        -11.574620246887207\n      ],\n      [\n        \"▁倉\",\n        -11.57478141784668\n      ],\n      [\n        \"▁四季\",\n        -11.574896812438965\n      ],\n      [\n        \"▁松平\",\n        -11.575023651123047\n      ],\n      [\n        \"▁わざわざ\",\n        -11.575102806091309\n      ],\n      [\n        \"▁伊達\",\n        -11.575163841247559\n      ],\n      [\n        \"▁タスク\",\n        -11.575169563293457\n      ],\n      [\n        \"▁ヴァイ\",\n        -11.575169563293457\n      ],\n      [\n        \"▁赤字\",\n        -11.575226783752441\n      ],\n      [\n        \"▁旅団\",\n        -11.575323104858398\n      ],\n      [\n        \"当店\",\n        -11.575345039367676\n      ],\n      [\n        \"すけ\",\n        -11.575379371643066\n      ],\n      [\n        \"▁目黒\",\n        -11.575485229492188\n      ],\n      [\n        \"バリ\",\n        -11.575528144836426\n      ],\n      [\n        \"▁トル\",\n        -11.57565975189209\n      ],\n      [\n        \"▁失う\",\n        -11.57568359375\n      ],\n      [\n        \"▁はるかに\",\n        -11.575811386108398\n      ],\n      [\n        \"▁オブジェクト\",\n        -11.575927734375\n      ],\n      [\n        \"▁砦\",\n        -11.576189994812012\n      ],\n      [\n        \"▁プロペシア\",\n        -11.576212882995605\n      ],\n      [\n        \"然と\",\n        -11.576263427734375\n      ],\n      [\n        \"▁名所\",\n        -11.576374053955078\n      ],\n      [\n        \"続いて\",\n        -11.576461791992188\n      ],\n      [\n        \"ライン\",\n        -11.576507568359375\n      ],\n      [\n        \"▁ミュー\",\n        -11.576713562011719\n      ],\n      [\n        \"与\",\n        -11.57701587677002\n      ],\n      [\n        \"▁カウント\",\n        -11.57707405090332\n      ],\n      [\n        \"▁部族\",\n        -11.577223777770996\n      ],\n      [\n        \"▁ふうに\",\n        -11.577259063720703\n      ],\n      [\n        \"▁至ら\",\n        -11.577476501464844\n      ],\n      [\n        \"▁対面\",\n        -11.577526092529297\n      ],\n      [\n        \"▁加熱\",\n        -11.577576637268066\n      ],\n      [\n        \"▁測\",\n        -11.577601432800293\n      ],\n      [\n        \"スタッフ\",\n        -11.577781677246094\n      ],\n      [\n        \"▁演習\",\n        -11.578076362609863\n      ],\n      [\n        \"▁ショ\",\n        -11.578207015991211\n      ],\n      [\n        \"▁撃\",\n        -11.578226089477539\n      ],\n      [\n        \"▁控え\",\n        -11.578418731689453\n      ],\n      [\n        \"ギン\",\n        -11.578436851501465\n      ],\n      [\n        \"▁女神\",\n        -11.57854175567627\n      ],\n      [\n        \"▁NEWS\",\n        -11.578622817993164\n      ],\n      [\n        \"▁答えた\",\n        -11.578639030456543\n      ],\n      [\n        \"▁父さん\",\n        -11.578715324401855\n      ],\n      [\n        \"▁加算\",\n        -11.579071998596191\n      ],\n      [\n        \"▁送付\",\n        -11.579302787780762\n      ],\n      [\n        \"▁引越\",\n        -11.5794038772583\n      ],\n      [\n        \"ple\",\n        -11.579546928405762\n      ],\n      [\n        \"▁プル\",\n        -11.579778671264648\n      ],\n      [\n        \"施設\",\n        -11.579876899719238\n      ],\n      [\n        \"1981\",\n        -11.579887390136719\n      ],\n      [\n        \"展覧\",\n        -11.5799560546875\n      ],\n      [\n        \"ドルフ\",\n        -11.579972267150879\n      ],\n      [\n        \"▁過剰\",\n        -11.58004093170166\n      ],\n      [\n        \"▁カスタマイズ\",\n        -11.580327033996582\n      ],\n      [\n        \"▁付く\",\n        -11.580347061157227\n      ],\n      [\n        \"▁無限\",\n        -11.580353736877441\n      ],\n      [\n        \"sc\",\n        -11.580512046813965\n      ],\n      [\n        \"▁旬\",\n        -11.581007957458496\n      ],\n      [\n        \"▁ホビー\",\n        -11.581050872802734\n      ],\n      [\n        \"▁ふるさと\",\n        -11.58105754852295\n      ],\n      [\n        \"いつ\",\n        -11.581058502197266\n      ],\n      [\n        \"わたし\",\n        -11.581155776977539\n      ],\n      [\n        \"▁海峡\",\n        -11.581384658813477\n      ],\n      [\n        \"どの\",\n        -11.581411361694336\n      ],\n      [\n        \"▁愛する\",\n        -11.581536293029785\n      ],\n      [\n        \"▁カス\",\n        -11.581689834594727\n      ],\n      [\n        \"Google\",\n        -11.581818580627441\n      ],\n      [\n        \"▁落選\",\n        -11.582067489624023\n      ],\n      [\n        \"▁画質\",\n        -11.582341194152832\n      ],\n      [\n        \"▁暑\",\n        -11.582357406616211\n      ],\n      [\n        \"▁抱える\",\n        -11.58236312866211\n      ],\n      [\n        \"▁運搬\",\n        -11.582478523254395\n      ],\n      [\n        \"▁レーシング\",\n        -11.582688331604004\n      ],\n      [\n        \"▁見かけ\",\n        -11.582715034484863\n      ],\n      [\n        \"▁常時\",\n        -11.582738876342773\n      ],\n      [\n        \"」\",\n        -11.582863807678223\n      ],\n      [\n        \"▁録画\",\n        -11.583144187927246\n      ],\n      [\n        \"sp\",\n        -11.58326530456543\n      ],\n      [\n        \"▁前面\",\n        -11.5833158493042\n      ],\n      [\n        \"券\",\n        -11.58335018157959\n      ],\n      [\n        \"▁勇者\",\n        -11.583436965942383\n      ],\n      [\n        \"▁ラウンジ\",\n        -11.583494186401367\n      ],\n      [\n        \"▁コンタクト\",\n        -11.583820343017578\n      ],\n      [\n        \"サラ\",\n        -11.584065437316895\n      ],\n      [\n        \"▁回る\",\n        -11.584142684936523\n      ],\n      [\n        \"▁昆虫\",\n        -11.584309577941895\n      ],\n      [\n        \"露\",\n        -11.58471393585205\n      ],\n      [\n        \"スポーツ\",\n        -11.584715843200684\n      ],\n      [\n        \"▁斎藤\",\n        -11.584869384765625\n      ],\n      [\n        \"▁リース\",\n        -11.5849027633667\n      ],\n      [\n        \"▁津波\",\n        -11.58497142791748\n      ],\n      [\n        \"▁NG\",\n        -11.585017204284668\n      ],\n      [\n        \"▁バリエーション\",\n        -11.585076332092285\n      ],\n      [\n        \"コメント\",\n        -11.585161209106445\n      ],\n      [\n        \"▁声明\",\n        -11.585165023803711\n      ],\n      [\n        \"▁奉行\",\n        -11.585264205932617\n      ],\n      [\n        \"▁PV\",\n        -11.58543586730957\n      ],\n      [\n        \"▁べきである\",\n        -11.585627555847168\n      ],\n      [\n        \"▁ドッグ\",\n        -11.585638046264648\n      ],\n      [\n        \"▁温暖\",\n        -11.585711479187012\n      ],\n      [\n        \"▁真っ\",\n        -11.585835456848145\n      ],\n      [\n        \"▁内装\",\n        -11.585895538330078\n      ],\n      [\n        \"▁LAN\",\n        -11.58592700958252\n      ],\n      [\n        \"▁ノイズ\",\n        -11.586008071899414\n      ],\n      [\n        \"▁地面\",\n        -11.586389541625977\n      ],\n      [\n        \"貧\",\n        -11.58640193939209\n      ],\n      [\n        \"▁典\",\n        -11.586405754089355\n      ],\n      [\n        \"RC\",\n        -11.586463928222656\n      ],\n      [\n        \"▁失って\",\n        -11.586564064025879\n      ],\n      [\n        \"フレ\",\n        -11.586583137512207\n      ],\n      [\n        \"▁スラ\",\n        -11.586676597595215\n      ],\n      [\n        \"▁as\",\n        -11.586771011352539\n      ],\n      [\n        \"▁Vi\",\n        -11.586929321289062\n      ],\n      [\n        \"▁運ぶ\",\n        -11.58709716796875\n      ],\n      [\n        \"▁レイアウト\",\n        -11.587228775024414\n      ],\n      [\n        \"▁遅れて\",\n        -11.58743953704834\n      ],\n      [\n        \"▁羊\",\n        -11.587566375732422\n      ],\n      [\n        \"▁ローラー\",\n        -11.587627410888672\n      ],\n      [\n        \"▁Qu\",\n        -11.587657928466797\n      ],\n      [\n        \"▁心から\",\n        -11.587693214416504\n      ],\n      [\n        \"▁フィット\",\n        -11.587725639343262\n      ],\n      [\n        \"▁無事に\",\n        -11.587794303894043\n      ],\n      [\n        \"▁過ぎた\",\n        -11.588093757629395\n      ],\n      [\n        \"▁餌\",\n        -11.588205337524414\n      ],\n      [\n        \"▁表して\",\n        -11.588295936584473\n      ],\n      [\n        \"▁統制\",\n        -11.588393211364746\n      ],\n      [\n        \"▁英会話\",\n        -11.588393211364746\n      ],\n      [\n        \"▁Life\",\n        -11.588444709777832\n      ],\n      [\n        \"▁スペック\",\n        -11.588470458984375\n      ],\n      [\n        \"▁ジェル\",\n        -11.5887451171875\n      ],\n      [\n        \"▁進展\",\n        -11.588831901550293\n      ],\n      [\n        \"▁運送\",\n        -11.588980674743652\n      ],\n      [\n        \"コフ\",\n        -11.589017868041992\n      ],\n      [\n        \"▁求\",\n        -11.589406967163086\n      ],\n      [\n        \"▁遺伝\",\n        -11.589544296264648\n      ],\n      [\n        \"▁Love\",\n        -11.58974838256836\n      ],\n      [\n        \"ull\",\n        -11.589756965637207\n      ],\n      [\n        \"弱\",\n        -11.589827537536621\n      ],\n      [\n        \"▁いけば\",\n        -11.589845657348633\n      ],\n      [\n        \"▁路面\",\n        -11.589845657348633\n      ],\n      [\n        \"僚\",\n        -11.589845657348633\n      ],\n      [\n        \"▁格闘\",\n        -11.589970588684082\n      ],\n      [\n        \"▁エク\",\n        -11.590082168579102\n      ],\n      [\n        \"▁遣\",\n        -11.590106010437012\n      ],\n      [\n        \"▁目線\",\n        -11.590171813964844\n      ],\n      [\n        \"▁野生\",\n        -11.590180397033691\n      ],\n      [\n        \"▁男爵\",\n        -11.59030818939209\n      ],\n      [\n        \"▁閉じ\",\n        -11.590472221374512\n      ],\n      [\n        \"ブー\",\n        -11.590961456298828\n      ],\n      [\n        \"▁待機\",\n        -11.591633796691895\n      ],\n      [\n        \"▁工学部\",\n        -11.591641426086426\n      ],\n      [\n        \"▁好きです\",\n        -11.592142105102539\n      ],\n      [\n        \"▁アラビア\",\n        -11.592329978942871\n      ],\n      [\n        \"▁浸\",\n        -11.592561721801758\n      ],\n      [\n        \"▁灰\",\n        -11.592596054077148\n      ],\n      [\n        \"カム\",\n        -11.592772483825684\n      ],\n      [\n        \"▁土壌\",\n        -11.592784881591797\n      ],\n      [\n        \"▁優位\",\n        -11.592839241027832\n      ],\n      [\n        \"唱\",\n        -11.593040466308594\n      ],\n      [\n        \"▁トロント\",\n        -11.593091011047363\n      ],\n      [\n        \"▁ウィル\",\n        -11.593119621276855\n      ],\n      [\n        \"紋\",\n        -11.593307495117188\n      ],\n      [\n        \"▁王位\",\n        -11.593378067016602\n      ],\n      [\n        \"▁専\",\n        -11.593771934509277\n      ],\n      [\n        \"ソウ\",\n        -11.593823432922363\n      ],\n      [\n        \"▁加わった\",\n        -11.593907356262207\n      ],\n      [\n        \"▁支障\",\n        -11.594058990478516\n      ],\n      [\n        \"試\",\n        -11.59416675567627\n      ],\n      [\n        \"▁廃車\",\n        -11.594374656677246\n      ],\n      [\n        \"he\",\n        -11.594916343688965\n      ],\n      [\n        \"ator\",\n        -11.594944953918457\n      ],\n      [\n        \"5000\",\n        -11.595099449157715\n      ],\n      [\n        \"以\",\n        -11.59521198272705\n      ],\n      [\n        \"▁肖像\",\n        -11.595328330993652\n      ],\n      [\n        \"pan\",\n        -11.595443725585938\n      ],\n      [\n        \"邦\",\n        -11.595616340637207\n      ],\n      [\n        \"TER\",\n        -11.595792770385742\n      ],\n      [\n        \"▁触れて\",\n        -11.595938682556152\n      ],\n      [\n        \"ッテ\",\n        -11.596099853515625\n      ],\n      [\n        \"▁著名な\",\n        -11.596456527709961\n      ],\n      [\n        \"uc\",\n        -11.596552848815918\n      ],\n      [\n        \"▁後輩\",\n        -11.596638679504395\n      ],\n      [\n        \"▁クエスト\",\n        -11.596673011779785\n      ],\n      [\n        \"▁燃焼\",\n        -11.596811294555664\n      ],\n      [\n        \"▁田村\",\n        -11.596988677978516\n      ],\n      [\n        \"▁だろ\",\n        -11.597010612487793\n      ],\n      [\n        \"▁デカ\",\n        -11.597184181213379\n      ],\n      [\n        \"▁ヤマト\",\n        -11.597250938415527\n      ],\n      [\n        \"▁スレ\",\n        -11.597257614135742\n      ],\n      [\n        \"下記\",\n        -11.59749698638916\n      ],\n      [\n        \"▁奨励\",\n        -11.597572326660156\n      ],\n      [\n        \"▁チェコ\",\n        -11.597757339477539\n      ],\n      [\n        \"▁無駄\",\n        -11.597962379455566\n      ],\n      [\n        \"ロット\",\n        -11.598231315612793\n      ],\n      [\n        \"カラー\",\n        -11.598313331604004\n      ],\n      [\n        \"▁産地\",\n        -11.598404884338379\n      ],\n      [\n        \"▁繰り広げ\",\n        -11.598530769348145\n      ],\n      [\n        \"▁國\",\n        -11.598575592041016\n      ],\n      [\n        \"▁セーブ\",\n        -11.598638534545898\n      ],\n      [\n        \"▁クリエイティブ\",\n        -11.59872817993164\n      ],\n      [\n        \"RT\",\n        -11.599089622497559\n      ],\n      [\n        \"▁カナ\",\n        -11.599321365356445\n      ],\n      [\n        \"▁小屋\",\n        -11.599323272705078\n      ],\n      [\n        \"▁vs\",\n        -11.599716186523438\n      ],\n      [\n        \"▁沿線\",\n        -11.599825859069824\n      ],\n      [\n        \"▁惜し\",\n        -11.59986686706543\n      ],\n      [\n        \"▁買\",\n        -11.599933624267578\n      ],\n      [\n        \"▁かから\",\n        -11.600000381469727\n      ],\n      [\n        \"▁物流\",\n        -11.600076675415039\n      ],\n      [\n        \"▁角形\",\n        -11.600375175476074\n      ],\n      [\n        \"old\",\n        -11.60042667388916\n      ],\n      [\n        \"洗\",\n        -11.600589752197266\n      ],\n      [\n        \"▁木造\",\n        -11.600717544555664\n      ],\n      [\n        \"リーグ\",\n        -11.601142883300781\n      ],\n      [\n        \"引退\",\n        -11.601163864135742\n      ],\n      [\n        \"▁なくなった\",\n        -11.601166725158691\n      ],\n      [\n        \"OP\",\n        -11.601225852966309\n      ],\n      [\n        \"▁薩摩\",\n        -11.601238250732422\n      ],\n      [\n        \"sa\",\n        -11.601289749145508\n      ],\n      [\n        \"▁寝る\",\n        -11.60151481628418\n      ],\n      [\n        \"▁馬鹿\",\n        -11.60155963897705\n      ],\n      [\n        \"▁構内\",\n        -11.601689338684082\n      ],\n      [\n        \"▁技師\",\n        -11.601725578308105\n      ],\n      [\n        \"▁まさか\",\n        -11.601844787597656\n      ],\n      [\n        \"▁ビジュアル\",\n        -11.601884841918945\n      ],\n      [\n        \"▁客観\",\n        -11.60193157196045\n      ],\n      [\n        \"▁克服\",\n        -11.601972579956055\n      ],\n      [\n        \"▁やろう\",\n        -11.602822303771973\n      ],\n      [\n        \"▁快速\",\n        -11.602877616882324\n      ],\n      [\n        \"▁磯\",\n        -11.602906227111816\n      ],\n      [\n        \"▁妖怪\",\n        -11.602916717529297\n      ],\n      [\n        \"▁つれて\",\n        -11.603096961975098\n      ],\n      [\n        \"▁正体\",\n        -11.603216171264648\n      ],\n      [\n        \"▁断念\",\n        -11.60352897644043\n      ],\n      [\n        \"▁聴き\",\n        -11.603869438171387\n      ],\n      [\n        \"所属\",\n        -11.603875160217285\n      ],\n      [\n        \"ミス\",\n        -11.603896141052246\n      ],\n      [\n        \"▁性別\",\n        -11.603907585144043\n      ],\n      [\n        \"▁食物\",\n        -11.603957176208496\n      ],\n      [\n        \"▁レート\",\n        -11.604058265686035\n      ],\n      [\n        \"▁専属\",\n        -11.604215621948242\n      ],\n      [\n        \"▁山下\",\n        -11.604316711425781\n      ],\n      [\n        \"記事\",\n        -11.604403495788574\n      ],\n      [\n        \"▁専念\",\n        -11.604414939880371\n      ],\n      [\n        \"ずる\",\n        -11.604642868041992\n      ],\n      [\n        \"▁防犯\",\n        -11.604748725891113\n      ],\n      [\n        \"▁オナニー\",\n        -11.605206489562988\n      ],\n      [\n        \"かる\",\n        -11.605267524719238\n      ],\n      [\n        \"ベルト\",\n        -11.60543441772461\n      ],\n      [\n        \"▁育ち\",\n        -11.605673789978027\n      ],\n      [\n        \"それでは\",\n        -11.605711936950684\n      ],\n      [\n        \"▁我が\",\n        -11.605754852294922\n      ],\n      [\n        \"▁葬\",\n        -11.60579776763916\n      ],\n      [\n        \"▁妄想\",\n        -11.605887413024902\n      ],\n      [\n        \"▁瞳\",\n        -11.606099128723145\n      ],\n      [\n        \"窓\",\n        -11.606138229370117\n      ],\n      [\n        \"▁舟\",\n        -11.606207847595215\n      ],\n      [\n        \"会員\",\n        -11.606226921081543\n      ],\n      [\n        \"▁潤\",\n        -11.60636043548584\n      ],\n      [\n        \"▁困る\",\n        -11.606472969055176\n      ],\n      [\n        \"▁アシスト\",\n        -11.606602668762207\n      ],\n      [\n        \"ったら\",\n        -11.607001304626465\n      ],\n      [\n        \"▁初期に\",\n        -11.607379913330078\n      ],\n      [\n        \"▁溶け\",\n        -11.60739517211914\n      ],\n      [\n        \"EA\",\n        -11.607659339904785\n      ],\n      [\n        \"\\\\\",\n        -11.607918739318848\n      ],\n      [\n        \"ose\",\n        -11.608015060424805\n      ],\n      [\n        \"▁汚\",\n        -11.608076095581055\n      ],\n      [\n        \"▁幼\",\n        -11.608345031738281\n      ],\n      [\n        \"出典\",\n        -11.608540534973145\n      ],\n      [\n        \"▁潜在\",\n        -11.60863971710205\n      ],\n      [\n        \"りつ\",\n        -11.608688354492188\n      ],\n      [\n        \"▁大丈夫です\",\n        -11.60892391204834\n      ],\n      [\n        \"▁害\",\n        -11.608997344970703\n      ],\n      [\n        \"▁ハイブリッド\",\n        -11.60899829864502\n      ],\n      [\n        \"▁見込み\",\n        -11.609015464782715\n      ],\n      [\n        \"接\",\n        -11.60901927947998\n      ],\n      [\n        \"閉\",\n        -11.609079360961914\n      ],\n      [\n        \"lin\",\n        -11.609274864196777\n      ],\n      [\n        \"麗\",\n        -11.609503746032715\n      ],\n      [\n        \"いく\",\n        -11.609583854675293\n      ],\n      [\n        \"▁手前\",\n        -11.60958480834961\n      ],\n      [\n        \"▁利便\",\n        -11.609644889831543\n      ],\n      [\n        \"▁資材\",\n        -11.609724044799805\n      ],\n      [\n        \"▁用紙\",\n        -11.609745025634766\n      ],\n      [\n        \"況\",\n        -11.609819412231445\n      ],\n      [\n        \"▁365\",\n        -11.609914779663086\n      ],\n      [\n        \"ヴィル\",\n        -11.609990119934082\n      ],\n      [\n        \"▁釣\",\n        -11.610042572021484\n      ],\n      [\n        \"▁執\",\n        -11.61020565032959\n      ],\n      [\n        \"ナム\",\n        -11.610608100891113\n      ],\n      [\n        \"▁authorTXTs\",\n        -11.610623359680176\n      ],\n      [\n        \"▁こっち\",\n        -11.610846519470215\n      ],\n      [\n        \"▁シュート\",\n        -11.610926628112793\n      ],\n      [\n        \"切れ\",\n        -11.61095905303955\n      ],\n      [\n        \"っく\",\n        -11.611175537109375\n      ],\n      [\n        \"1975\",\n        -11.611188888549805\n      ],\n      [\n        \"▁AP\",\n        -11.611224174499512\n      ],\n      [\n        \"▁武道\",\n        -11.611261367797852\n      ],\n      [\n        \"トリア\",\n        -11.611307144165039\n      ],\n      [\n        \"1978\",\n        -11.611333847045898\n      ],\n      [\n        \"▁邸\",\n        -11.61135482788086\n      ],\n      [\n        \"▁職種\",\n        -11.61136245727539\n      ],\n      [\n        \"▁支えて\",\n        -11.611371040344238\n      ],\n      [\n        \"▁その場で\",\n        -11.61166763305664\n      ],\n      [\n        \"▁トマト\",\n        -11.61192512512207\n      ],\n      [\n        \"▁熱い\",\n        -11.612165451049805\n      ],\n      [\n        \"▁おめでとう\",\n        -11.61228084564209\n      ],\n      [\n        \"ade\",\n        -11.61233139038086\n      ],\n      [\n        \"▁ディーラー\",\n        -11.612371444702148\n      ],\n      [\n        \"リャ\",\n        -11.612378120422363\n      ],\n      [\n        \"▁カート\",\n        -11.612462043762207\n      ],\n      [\n        \"Web\",\n        -11.61270809173584\n      ],\n      [\n        \"▁劣化\",\n        -11.612751960754395\n      ],\n      [\n        \"▁源氏\",\n        -11.6128511428833\n      ],\n      [\n        \"消\",\n        -11.612909317016602\n      ],\n      [\n        \"ign\",\n        -11.612924575805664\n      ],\n      [\n        \"ich\",\n        -11.613052368164062\n      ],\n      [\n        \"メディア\",\n        -11.61316204071045\n      ],\n      [\n        \"▁ハロウィン\",\n        -11.613227844238281\n      ],\n      [\n        \"テイ\",\n        -11.613422393798828\n      ],\n      [\n        \"タール\",\n        -11.613430976867676\n      ],\n      [\n        \"諸\",\n        -11.613775253295898\n      ],\n      [\n        \"▁sp\",\n        -11.613795280456543\n      ],\n      [\n        \"尼\",\n        -11.613814353942871\n      ],\n      [\n        \"▁クルー\",\n        -11.613917350769043\n      ],\n      [\n        \"ウォー\",\n        -11.613986015319824\n      ],\n      [\n        \"▁気圧\",\n        -11.613998413085938\n      ],\n      [\n        \"エフ\",\n        -11.614108085632324\n      ],\n      [\n        \"シック\",\n        -11.614330291748047\n      ],\n      [\n        \"▁東武\",\n        -11.61447811126709\n      ],\n      [\n        \"ウト\",\n        -11.614480972290039\n      ],\n      [\n        \"卒業\",\n        -11.614484786987305\n      ],\n      [\n        \"RM\",\n        -11.614537239074707\n      ],\n      [\n        \"▁倒産\",\n        -11.614622116088867\n      ],\n      [\n        \"ツェ\",\n        -11.614795684814453\n      ],\n      [\n        \"▁件数\",\n        -11.61488151550293\n      ],\n      [\n        \"登録\",\n        -11.614887237548828\n      ],\n      [\n        \"▁邪魔\",\n        -11.614934921264648\n      ],\n      [\n        \"▁てい\",\n        -11.615018844604492\n      ],\n      [\n        \"▁花粉\",\n        -11.61508560180664\n      ],\n      [\n        \"▁掲げる\",\n        -11.615267753601074\n      ],\n      [\n        \"▁舎\",\n        -11.61536979675293\n      ],\n      [\n        \"▁立た\",\n        -11.615442276000977\n      ],\n      [\n        \"釈\",\n        -11.615585327148438\n      ],\n      [\n        \"▁上院\",\n        -11.615764617919922\n      ],\n      [\n        \"▁セールス\",\n        -11.615821838378906\n      ],\n      [\n        \"▁応じ\",\n        -11.615944862365723\n      ],\n      [\n        \"▁Se\",\n        -11.61599063873291\n      ],\n      [\n        \"▁ボーイ\",\n        -11.615996360778809\n      ],\n      [\n        \"▁行なう\",\n        -11.616036415100098\n      ],\n      [\n        \"▁渋\",\n        -11.616225242614746\n      ],\n      [\n        \"▁編纂\",\n        -11.616304397583008\n      ],\n      [\n        \"▁おかしい\",\n        -11.616338729858398\n      ],\n      [\n        \"貨\",\n        -11.616361618041992\n      ],\n      [\n        \"▁鶏\",\n        -11.616459846496582\n      ],\n      [\n        \"▁正式な\",\n        -11.616493225097656\n      ],\n      [\n        \"▁ツイート\",\n        -11.616720199584961\n      ],\n      [\n        \"▁ウェスト\",\n        -11.617181777954102\n      ],\n      [\n        \"▁蘇\",\n        -11.617551803588867\n      ],\n      [\n        \"飲\",\n        -11.617613792419434\n      ],\n      [\n        \"▁あくまでも\",\n        -11.61772346496582\n      ],\n      [\n        \"▁レジャー\",\n        -11.617733001708984\n      ],\n      [\n        \"▁樹脂\",\n        -11.617745399475098\n      ],\n      [\n        \"▁講\",\n        -11.61777114868164\n      ],\n      [\n        \"▁わが\",\n        -11.617907524108887\n      ],\n      [\n        \"▁上手に\",\n        -11.61792278289795\n      ],\n      [\n        \"模\",\n        -11.617939949035645\n      ],\n      [\n        \"▁どうも\",\n        -11.618009567260742\n      ],\n      [\n        \"スマホ\",\n        -11.618021965026855\n      ],\n      [\n        \"az\",\n        -11.618042945861816\n      ],\n      [\n        \"株\",\n        -11.618328094482422\n      ],\n      [\n        \"▁止める\",\n        -11.618340492248535\n      ],\n      [\n        \"▁TE\",\n        -11.618600845336914\n      ],\n      [\n        \"旅\",\n        -11.618803024291992\n      ],\n      [\n        \"▁及ぼす\",\n        -11.619375228881836\n      ],\n      [\n        \"▁セレクト\",\n        -11.619396209716797\n      ],\n      [\n        \"▁駐\",\n        -11.61945629119873\n      ],\n      [\n        \"ヴィー\",\n        -11.619596481323242\n      ],\n      [\n        \"▁因子\",\n        -11.61961841583252\n      ],\n      [\n        \"▁キル\",\n        -11.619680404663086\n      ],\n      [\n        \"▁中核\",\n        -11.61999225616455\n      ],\n      [\n        \"指定\",\n        -11.620144844055176\n      ],\n      [\n        \"▁治安\",\n        -11.62015438079834\n      ],\n      [\n        \"▁助言\",\n        -11.620285987854004\n      ],\n      [\n        \"▁郷土\",\n        -11.620306015014648\n      ],\n      [\n        \"▁スペ\",\n        -11.620356559753418\n      ],\n      [\n        \"OW\",\n        -11.62044906616211\n      ],\n      [\n        \"閣\",\n        -11.620536804199219\n      ],\n      [\n        \"▁ギャンブル\",\n        -11.620599746704102\n      ],\n      [\n        \"▁発動\",\n        -11.620601654052734\n      ],\n      [\n        \"▁酒造\",\n        -11.620654106140137\n      ],\n      [\n        \"▁日中\",\n        -11.620800018310547\n      ],\n      [\n        \"因\",\n        -11.620806694030762\n      ],\n      [\n        \"▁置\",\n        -11.620888710021973\n      ],\n      [\n        \"▁力学\",\n        -11.620967864990234\n      ],\n      [\n        \"腰\",\n        -11.62109088897705\n      ],\n      [\n        \"▁うつ\",\n        -11.621321678161621\n      ],\n      [\n        \"▁払って\",\n        -11.621350288391113\n      ],\n      [\n        \"▁きれいに\",\n        -11.621493339538574\n      ],\n      [\n        \"フィールド\",\n        -11.621532440185547\n      ],\n      [\n        \"リク\",\n        -11.621807098388672\n      ],\n      [\n        \"▁逃亡\",\n        -11.621808052062988\n      ],\n      [\n        \"▁転用\",\n        -11.621981620788574\n      ],\n      [\n        \"▁サンド\",\n        -11.621987342834473\n      ],\n      [\n        \"▁めぐる\",\n        -11.62207317352295\n      ],\n      [\n        \"長野\",\n        -11.622116088867188\n      ],\n      [\n        \"▁カーテン\",\n        -11.62219524383545\n      ],\n      [\n        \"▁PA\",\n        -11.622456550598145\n      ],\n      [\n        \"▁ピット\",\n        -11.622642517089844\n      ],\n      [\n        \"▁220\",\n        -11.623035430908203\n      ],\n      [\n        \"嶺\",\n        -11.623252868652344\n      ],\n      [\n        \"クー\",\n        -11.62389087677002\n      ],\n      [\n        \"▁ベリー\",\n        -11.623895645141602\n      ],\n      [\n        \"EX\",\n        -11.624113082885742\n      ],\n      [\n        \"▁プラグイン\",\n        -11.624149322509766\n      ],\n      [\n        \"丹\",\n        -11.624153137207031\n      ],\n      [\n        \"▁通路\",\n        -11.624451637268066\n      ],\n      [\n        \"▁ニコ\",\n        -11.624584197998047\n      ],\n      [\n        \"▁フェス\",\n        -11.624919891357422\n      ],\n      [\n        \"くり\",\n        -11.624919891357422\n      ],\n      [\n        \"しき\",\n        -11.62492847442627\n      ],\n      [\n        \"▁引き上げ\",\n        -11.625086784362793\n      ],\n      [\n        \"▁知名度\",\n        -11.625099182128906\n      ],\n      [\n        \"▁常勤\",\n        -11.625326156616211\n      ],\n      [\n        \"900\",\n        -11.625426292419434\n      ],\n      [\n        \"▁HTML\",\n        -11.62551498413086\n      ],\n      [\n        \"▁かわい\",\n        -11.62564468383789\n      ],\n      [\n        \"▁しょ\",\n        -11.625658988952637\n      ],\n      [\n        \"1973\",\n        -11.625661849975586\n      ],\n      [\n        \"▁エド\",\n        -11.625666618347168\n      ],\n      [\n        \"▁自慢\",\n        -11.625733375549316\n      ],\n      [\n        \"ica\",\n        -11.62576675415039\n      ],\n      [\n        \"▁シナ\",\n        -11.625853538513184\n      ],\n      [\n        \"▁乙\",\n        -11.625893592834473\n      ],\n      [\n        \"▁ブレイク\",\n        -11.625944137573242\n      ],\n      [\n        \"▁べきです\",\n        -11.62613296508789\n      ],\n      [\n        \"自身\",\n        -11.626147270202637\n      ],\n      [\n        \"bu\",\n        -11.626152038574219\n      ],\n      [\n        \"▁パブ\",\n        -11.626222610473633\n      ],\n      [\n        \"ぐる\",\n        -11.626273155212402\n      ],\n      [\n        \"▁流し\",\n        -11.626283645629883\n      ],\n      [\n        \"▁新田\",\n        -11.626365661621094\n      ],\n      [\n        \"▁Instagram\",\n        -11.626897811889648\n      ],\n      [\n        \"ワールド\",\n        -11.626937866210938\n      ],\n      [\n        \"▁閣\",\n        -11.627145767211914\n      ],\n      [\n        \"▁入り口\",\n        -11.62732982635498\n      ],\n      [\n        \"たく\",\n        -11.627406120300293\n      ],\n      [\n        \"▁金曜\",\n        -11.627425193786621\n      ],\n      [\n        \"▁浅草\",\n        -11.627459526062012\n      ],\n      [\n        \"▁先ほど\",\n        -11.627791404724121\n      ],\n      [\n        \"▁加わ\",\n        -11.628179550170898\n      ],\n      [\n        \"▁飾った\",\n        -11.628262519836426\n      ],\n      [\n        \"▁ウー\",\n        -11.628278732299805\n      ],\n      [\n        \"刈\",\n        -11.628463745117188\n      ],\n      [\n        \"BI\",\n        -11.628744125366211\n      ],\n      [\n        \"▁航路\",\n        -11.6290922164917\n      ],\n      [\n        \"げる\",\n        -11.629170417785645\n      ],\n      [\n        \"▁会って\",\n        -11.629319190979004\n      ],\n      [\n        \"▁古く\",\n        -11.629475593566895\n      ],\n      [\n        \"▁探検\",\n        -11.629549980163574\n      ],\n      [\n        \"▁浦和\",\n        -11.629853248596191\n      ],\n      [\n        \"▁取り扱って\",\n        -11.629887580871582\n      ],\n      [\n        \"▁継が\",\n        -11.630146026611328\n      ],\n      [\n        \"レッド\",\n        -11.63079833984375\n      ],\n      [\n        \"▁Na\",\n        -11.630888938903809\n      ],\n      [\n        \"▁泥\",\n        -11.631368637084961\n      ],\n      [\n        \"▁DX\",\n        -11.631815910339355\n      ],\n      [\n        \"▁桐\",\n        -11.631893157958984\n      ],\n      [\n        \"▁サイバー\",\n        -11.63206672668457\n      ],\n      [\n        \"どり\",\n        -11.632163047790527\n      ],\n      [\n        \"▁殺し\",\n        -11.632181167602539\n      ],\n      [\n        \"▁なろう\",\n        -11.632187843322754\n      ],\n      [\n        \"▁朝食\",\n        -11.63249397277832\n      ],\n      [\n        \"▁戦時\",\n        -11.632501602172852\n      ],\n      [\n        \"▁実在\",\n        -11.632502555847168\n      ],\n      [\n        \"NK\",\n        -11.63256549835205\n      ],\n      [\n        \"▁クッション\",\n        -11.632619857788086\n      ],\n      [\n        \"▁せっかく\",\n        -11.632644653320312\n      ],\n      [\n        \"ーノ\",\n        -11.632649421691895\n      ],\n      [\n        \"ッソ\",\n        -11.632655143737793\n      ],\n      [\n        \"▁空中\",\n        -11.63265609741211\n      ],\n      [\n        \"▁ウェル\",\n        -11.63270092010498\n      ],\n      [\n        \"▁豊富に\",\n        -11.632713317871094\n      ],\n      [\n        \"▁Pr\",\n        -11.632742881774902\n      ],\n      [\n        \"▁済む\",\n        -11.632783889770508\n      ],\n      [\n        \"▁サンフランシスコ\",\n        -11.632829666137695\n      ],\n      [\n        \"MC\",\n        -11.632863998413086\n      ],\n      [\n        \"ほん\",\n        -11.632983207702637\n      ],\n      [\n        \"▁国有\",\n        -11.632993698120117\n      ],\n      [\n        \"考\",\n        -11.63304615020752\n      ],\n      [\n        \"️\",\n        -11.633244514465332\n      ],\n      [\n        \"ker\",\n        -11.633352279663086\n      ],\n      [\n        \"▁幹事\",\n        -11.633706092834473\n      ],\n      [\n        \"▁匂い\",\n        -11.633780479431152\n      ],\n      [\n        \"國\",\n        -11.633871078491211\n      ],\n      [\n        \"携帯\",\n        -11.634023666381836\n      ],\n      [\n        \"▁曲線\",\n        -11.634029388427734\n      ],\n      [\n        \"販\",\n        -11.634214401245117\n      ],\n      [\n        \"九州\",\n        -11.634286880493164\n      ],\n      [\n        \"▁フッド\",\n        -11.634481430053711\n      ],\n      [\n        \"▁敷\",\n        -11.634536743164062\n      ],\n      [\n        \"▁片付け\",\n        -11.634565353393555\n      ],\n      [\n        \"級\",\n        -11.634587287902832\n      ],\n      [\n        \"▁ハリウッド\",\n        -11.63459587097168\n      ],\n      [\n        \"毒\",\n        -11.63471794128418\n      ],\n      [\n        \"▁スライド\",\n        -11.634856224060059\n      ],\n      [\n        \"リコ\",\n        -11.634963035583496\n      ],\n      [\n        \"▁吸\",\n        -11.634969711303711\n      ],\n      [\n        \"▁泡\",\n        -11.635416984558105\n      ],\n      [\n        \"▁採択\",\n        -11.635453224182129\n      ],\n      [\n        \"▁最古\",\n        -11.635472297668457\n      ],\n      [\n        \"▁Fr\",\n        -11.63577651977539\n      ],\n      [\n        \"倒\",\n        -11.635905265808105\n      ],\n      [\n        \"▁筆頭\",\n        -11.635953903198242\n      ],\n      [\n        \"▁運んで\",\n        -11.63597297668457\n      ],\n      [\n        \"▁ブーツ\",\n        -11.636110305786133\n      ],\n      [\n        \"システム\",\n        -11.636308670043945\n      ],\n      [\n        \"▁宮廷\",\n        -11.636333465576172\n      ],\n      [\n        \"ッシ\",\n        -11.636470794677734\n      ],\n      [\n        \"仏\",\n        -11.636687278747559\n      ],\n      [\n        \"條\",\n        -11.637179374694824\n      ],\n      [\n        \"▁後退\",\n        -11.637369155883789\n      ],\n      [\n        \"▁絞\",\n        -11.637555122375488\n      ],\n      [\n        \"▁Adobe\",\n        -11.63770866394043\n      ],\n      [\n        \"▁包括\",\n        -11.637985229492188\n      ],\n      [\n        \"▁果\",\n        -11.638140678405762\n      ],\n      [\n        \"▁南アフリカ\",\n        -11.638157844543457\n      ],\n      [\n        \"らしい\",\n        -11.638289451599121\n      ],\n      [\n        \"▁預け\",\n        -11.639055252075195\n      ],\n      [\n        \"ニエ\",\n        -11.639167785644531\n      ],\n      [\n        \"――\",\n        -11.639203071594238\n      ],\n      [\n        \"ps\",\n        -11.639389991760254\n      ],\n      [\n        \"なら\",\n        -11.63941764831543\n      ],\n      [\n        \"▁開け\",\n        -11.63951301574707\n      ],\n      [\n        \"▁多々\",\n        -11.639514923095703\n      ],\n      [\n        \"int\",\n        -11.639562606811523\n      ],\n      [\n        \"ッセ\",\n        -11.639640808105469\n      ],\n      [\n        \"葬\",\n        -11.639938354492188\n      ],\n      [\n        \"▁ブルース\",\n        -11.639999389648438\n      ],\n      [\n        \"OE\",\n        -11.64003849029541\n      ],\n      [\n        \"ベラ\",\n        -11.640188217163086\n      ],\n      [\n        \"▁1933\",\n        -11.640388488769531\n      ],\n      [\n        \"▁この頃\",\n        -11.640400886535645\n      ],\n      [\n        \"▁メソッド\",\n        -11.640658378601074\n      ],\n      [\n        \"岳\",\n        -11.640802383422852\n      ],\n      [\n        \"▁たた\",\n        -11.640910148620605\n      ],\n      [\n        \"▁カタ\",\n        -11.640913009643555\n      ],\n      [\n        \"▁気づか\",\n        -11.640921592712402\n      ],\n      [\n        \"▁洪水\",\n        -11.6410493850708\n      ],\n      [\n        \"▁小山\",\n        -11.641073226928711\n      ],\n      [\n        \"▁晴れ\",\n        -11.641242980957031\n      ],\n      [\n        \"St\",\n        -11.641642570495605\n      ],\n      [\n        \"左衛門\",\n        -11.641864776611328\n      ],\n      [\n        \"デザイン\",\n        -11.642037391662598\n      ],\n      [\n        \"▁わか\",\n        -11.642361640930176\n      ],\n      [\n        \"禄\",\n        -11.64236831665039\n      ],\n      [\n        \"▁単純な\",\n        -11.642376899719238\n      ],\n      [\n        \"▁限度\",\n        -11.642491340637207\n      ],\n      [\n        \"▁開けて\",\n        -11.64252758026123\n      ],\n      [\n        \"▁クロー\",\n        -11.64268684387207\n      ],\n      [\n        \"▁ジュエリー\",\n        -11.64273738861084\n      ],\n      [\n        \"▁モーニング\",\n        -11.642788887023926\n      ],\n      [\n        \"▁作れる\",\n        -11.642850875854492\n      ],\n      [\n        \"▁道徳\",\n        -11.642995834350586\n      ],\n      [\n        \"▁Gu\",\n        -11.643203735351562\n      ],\n      [\n        \"分け\",\n        -11.643401145935059\n      ],\n      [\n        \"▁初演\",\n        -11.643404960632324\n      ],\n      [\n        \"▁盛んに\",\n        -11.643476486206055\n      ],\n      [\n        \"▁濃い\",\n        -11.643725395202637\n      ],\n      [\n        \"通称\",\n        -11.643800735473633\n      ],\n      [\n        \"shi\",\n        -11.643810272216797\n      ],\n      [\n        \"▁トレー\",\n        -11.643904685974121\n      ],\n      [\n        \"違い\",\n        -11.643940925598145\n      ],\n      [\n        \"▁演じて\",\n        -11.644256591796875\n      ],\n      [\n        \"▁侵略\",\n        -11.644355773925781\n      ],\n      [\n        \"▁ナチス\",\n        -11.64437198638916\n      ],\n      [\n        \"▁崇\",\n        -11.644424438476562\n      ],\n      [\n        \"健康\",\n        -11.644549369812012\n      ],\n      [\n        \"付か\",\n        -11.644645690917969\n      ],\n      [\n        \"最高\",\n        -11.644665718078613\n      ],\n      [\n        \"▁ダル\",\n        -11.64537239074707\n      ],\n      [\n        \"▁和田\",\n        -11.64542293548584\n      ],\n      [\n        \"寧\",\n        -11.645605087280273\n      ],\n      [\n        \"▁パチンコ\",\n        -11.645720481872559\n      ],\n      [\n        \"歴\",\n        -11.645768165588379\n      ],\n      [\n        \"▁シロ\",\n        -11.645967483520508\n      ],\n      [\n        \"▁番地\",\n        -11.645986557006836\n      ],\n      [\n        \"▁ストレッチ\",\n        -11.646193504333496\n      ],\n      [\n        \"0000\",\n        -11.646230697631836\n      ],\n      [\n        \"冠\",\n        -11.646320343017578\n      ],\n      [\n        \"▁真剣に\",\n        -11.646437644958496\n      ],\n      [\n        \"パイ\",\n        -11.646590232849121\n      ],\n      [\n        \"▁毛利\",\n        -11.646720886230469\n      ],\n      [\n        \"▁Linux\",\n        -11.646759033203125\n      ],\n      [\n        \"▁ポンプ\",\n        -11.646831512451172\n      ],\n      [\n        \"1971\",\n        -11.647040367126465\n      ],\n      [\n        \"pi\",\n        -11.647136688232422\n      ],\n      [\n        \"▁吸い\",\n        -11.647177696228027\n      ],\n      [\n        \"ポル\",\n        -11.647258758544922\n      ],\n      [\n        \"▁1934\",\n        -11.647375106811523\n      ],\n      [\n        \"▁SEX\",\n        -11.647404670715332\n      ],\n      [\n        \"▁隔\",\n        -11.64752197265625\n      ],\n      [\n        \"▁重大な\",\n        -11.647645950317383\n      ],\n      [\n        \"▁難民\",\n        -11.647650718688965\n      ],\n      [\n        \"▁109\",\n        -11.647753715515137\n      ],\n      [\n        \"ire\",\n        -11.647757530212402\n      ],\n      [\n        \"▁預金\",\n        -11.647854804992676\n      ],\n      [\n        \"▁蛇\",\n        -11.647961616516113\n      ],\n      [\n        \"▁風味\",\n        -11.647964477539062\n      ],\n      [\n        \"▁袖\",\n        -11.648265838623047\n      ],\n      [\n        \"▁詰\",\n        -11.64869499206543\n      ],\n      [\n        \"▁ハマ\",\n        -11.648776054382324\n      ],\n      [\n        \"▁股\",\n        -11.648911476135254\n      ],\n      [\n        \"▁一面\",\n        -11.64893913269043\n      ],\n      [\n        \"んこ\",\n        -11.64930534362793\n      ],\n      [\n        \"ger\",\n        -11.649312973022461\n      ],\n      [\n        \"▁リモート\",\n        -11.649321556091309\n      ],\n      [\n        \"▁——\",\n        -11.64952278137207\n      ],\n      [\n        \"宴\",\n        -11.649542808532715\n      ],\n      [\n        \"▁エドワード\",\n        -11.649617195129395\n      ],\n      [\n        \"▁偉\",\n        -11.649670600891113\n      ],\n      [\n        \"▁車線\",\n        -11.649951934814453\n      ],\n      [\n        \"シマ\",\n        -11.649993896484375\n      ],\n      [\n        \"蓮\",\n        -11.650125503540039\n      ],\n      [\n        \"▁生じて\",\n        -11.650128364562988\n      ],\n      [\n        \"▁響\",\n        -11.650152206420898\n      ],\n      [\n        \"えば\",\n        -11.650388717651367\n      ],\n      [\n        \"▁成し\",\n        -11.650419235229492\n      ],\n      [\n        \"がわ\",\n        -11.650668144226074\n      ],\n      [\n        \"▁スタイリスト\",\n        -11.650700569152832\n      ],\n      [\n        \"▁us\",\n        -11.650821685791016\n      ],\n      [\n        \"▁Br\",\n        -11.650871276855469\n      ],\n      [\n        \"▁オフィシャル\",\n        -11.65109920501709\n      ],\n      [\n        \"▁ワクワク\",\n        -11.651111602783203\n      ],\n      [\n        \"▁1935\",\n        -11.651288986206055\n      ],\n      [\n        \"▁BO\",\n        -11.651420593261719\n      ],\n      [\n        \"▁オメガ\",\n        -11.651508331298828\n      ],\n      [\n        \"1976\",\n        -11.651809692382812\n      ],\n      [\n        \"NE\",\n        -11.652166366577148\n      ],\n      [\n        \"トゥー\",\n        -11.652442932128906\n      ],\n      [\n        \"▁ユニバーサル\",\n        -11.652478218078613\n      ],\n      [\n        \"もっとも\",\n        -11.652570724487305\n      ],\n      [\n        \"耳\",\n        -11.652785301208496\n      ],\n      [\n        \"▁電化\",\n        -11.652863502502441\n      ],\n      [\n        \"▁インナー\",\n        -11.652959823608398\n      ],\n      [\n        \"▁兼任\",\n        -11.653206825256348\n      ],\n      [\n        \"▁慶應\",\n        -11.653336524963379\n      ],\n      [\n        \"▁農林\",\n        -11.653369903564453\n      ],\n      [\n        \"▁水平\",\n        -11.653371810913086\n      ],\n      [\n        \"▁贈ら\",\n        -11.653511047363281\n      ],\n      [\n        \"▁牧場\",\n        -11.653716087341309\n      ],\n      [\n        \"シュー\",\n        -11.653820991516113\n      ],\n      [\n        \"▁物事\",\n        -11.654051780700684\n      ],\n      [\n        \"▁背後\",\n        -11.654123306274414\n      ],\n      [\n        \"▁早朝\",\n        -11.654312133789062\n      ],\n      [\n        \"UM\",\n        -11.65434455871582\n      ],\n      [\n        \"▁痩せ\",\n        -11.654397964477539\n      ],\n      [\n        \"▁イェ\",\n        -11.654656410217285\n      ],\n      [\n        \"▁pdf\",\n        -11.654683113098145\n      ],\n      [\n        \"▁外見\",\n        -11.654803276062012\n      ],\n      [\n        \"▁触\",\n        -11.655025482177734\n      ],\n      [\n        \"▁バリア\",\n        -11.655099868774414\n      ],\n      [\n        \"ばし\",\n        -11.655285835266113\n      ],\n      [\n        \"PI\",\n        -11.655294418334961\n      ],\n      [\n        \"▁1932\",\n        -11.655311584472656\n      ],\n      [\n        \"▁師範\",\n        -11.6554536819458\n      ],\n      [\n        \"▁踏まえ\",\n        -11.656288146972656\n      ],\n      [\n        \"▁楽譜\",\n        -11.656295776367188\n      ],\n      [\n        \"▁GI\",\n        -11.656323432922363\n      ],\n      [\n        \"▁開店\",\n        -11.656377792358398\n      ],\n      [\n        \"▁Air\",\n        -11.656618118286133\n      ],\n      [\n        \"EP\",\n        -11.656838417053223\n      ],\n      [\n        \"ビック\",\n        -11.656853675842285\n      ],\n      [\n        \"Amazon\",\n        -11.65689754486084\n      ],\n      [\n        \"▁オークション\",\n        -11.65699291229248\n      ],\n      [\n        \"タム\",\n        -11.65703010559082\n      ],\n      [\n        \"▁ファンド\",\n        -11.657444953918457\n      ],\n      [\n        \"▁改札\",\n        -11.65776252746582\n      ],\n      [\n        \"のち\",\n        -11.657984733581543\n      ],\n      [\n        \"▁PlayStation\",\n        -11.657995223999023\n      ],\n      [\n        \"▁従う\",\n        -11.658028602600098\n      ],\n      [\n        \"▁人格\",\n        -11.658303260803223\n      ],\n      [\n        \"紀元\",\n        -11.658553123474121\n      ],\n      [\n        \"▁近江\",\n        -11.658592224121094\n      ],\n      [\n        \"▁長女\",\n        -11.658644676208496\n      ],\n      [\n        \"中華民国\",\n        -11.658714294433594\n      ],\n      [\n        \"▁臭\",\n        -11.658732414245605\n      ],\n      [\n        \"腺\",\n        -11.658848762512207\n      ],\n      [\n        \"▁野村\",\n        -11.658927917480469\n      ],\n      [\n        \"▁ありがたい\",\n        -11.658987045288086\n      ],\n      [\n        \"▁残留\",\n        -11.659025192260742\n      ],\n      [\n        \"終\",\n        -11.659027099609375\n      ],\n      [\n        \"▁ガイ\",\n        -11.659079551696777\n      ],\n      [\n        \"▁独自に\",\n        -11.659191131591797\n      ],\n      [\n        \"亜\",\n        -11.65932559967041\n      ],\n      [\n        \"▁BR\",\n        -11.65936279296875\n      ],\n      [\n        \"▁稼いで\",\n        -11.659468650817871\n      ],\n      [\n        \"▁濃\",\n        -11.6595458984375\n      ],\n      [\n        \"▁いよいよ\",\n        -11.659564018249512\n      ],\n      [\n        \"▁ラック\",\n        -11.659570693969727\n      ],\n      [\n        \"▁気筒\",\n        -11.65968132019043\n      ],\n      [\n        \"▁可愛\",\n        -11.659956932067871\n      ],\n      [\n        \"▁エレベーター\",\n        -11.659957885742188\n      ],\n      [\n        \"▁みや\",\n        -11.660174369812012\n      ],\n      [\n        \"▁出血\",\n        -11.660178184509277\n      ],\n      [\n        \"▁会合\",\n        -11.660199165344238\n      ],\n      [\n        \"▁ON\",\n        -11.660276412963867\n      ],\n      [\n        \"▁プリンス\",\n        -11.660305976867676\n      ],\n      [\n        \"▁催\",\n        -11.660451889038086\n      ],\n      [\n        \"▁晋\",\n        -11.66075325012207\n      ],\n      [\n        \"▁冷却\",\n        -11.660770416259766\n      ],\n      [\n        \"▁VS\",\n        -11.660778045654297\n      ],\n      [\n        \"ミール\",\n        -11.66081428527832\n      ],\n      [\n        \"▁パーソナル\",\n        -11.660919189453125\n      ],\n      [\n        \"▁継ぎ\",\n        -11.661062240600586\n      ],\n      [\n        \"▁変異\",\n        -11.661288261413574\n      ],\n      [\n        \"▁開校\",\n        -11.661805152893066\n      ],\n      [\n        \"スーパー\",\n        -11.661993026733398\n      ],\n      [\n        \"ぽ\",\n        -11.66207504272461\n      ],\n      [\n        \"▁五十\",\n        -11.66243839263916\n      ],\n      [\n        \"▁広げて\",\n        -11.662590026855469\n      ],\n      [\n        \"▁まん\",\n        -11.662642478942871\n      ],\n      [\n        \"▁格好\",\n        -11.662799835205078\n      ],\n      [\n        \"であれば\",\n        -11.662949562072754\n      ],\n      [\n        \"▁210\",\n        -11.663190841674805\n      ],\n      [\n        \"▁快適\",\n        -11.663298606872559\n      ],\n      [\n        \"▁京王\",\n        -11.663333892822266\n      ],\n      [\n        \"▁ふと\",\n        -11.663397789001465\n      ],\n      [\n        \"▁System\",\n        -11.663444519042969\n      ],\n      [\n        \"▁落下\",\n        -11.663481712341309\n      ],\n      [\n        \"▁どっち\",\n        -11.663521766662598\n      ],\n      [\n        \"▁公社\",\n        -11.663553237915039\n      ],\n      [\n        \"イロ\",\n        -11.663615226745605\n      ],\n      [\n        \"ONE\",\n        -11.663640022277832\n      ],\n      [\n        \"▁札\",\n        -11.663945198059082\n      ],\n      [\n        \"▁石井\",\n        -11.663999557495117\n      ],\n      [\n        \"▁are\",\n        -11.664102554321289\n      ],\n      [\n        \"▁フロリダ\",\n        -11.664185523986816\n      ],\n      [\n        \"ヨーロッパ\",\n        -11.66434097290039\n      ],\n      [\n        \"ess\",\n        -11.66441535949707\n      ],\n      [\n        \"▁綴\",\n        -11.664454460144043\n      ],\n      [\n        \"鳳\",\n        -11.664461135864258\n      ],\n      [\n        \"▁忍\",\n        -11.664615631103516\n      ],\n      [\n        \"下げ\",\n        -11.664728164672852\n      ],\n      [\n        \"植\",\n        -11.664795875549316\n      ],\n      [\n        \"1974\",\n        -11.664860725402832\n      ],\n      [\n        \"咲\",\n        -11.664922714233398\n      ],\n      [\n        \"ult\",\n        -11.66502857208252\n      ],\n      [\n        \"梅\",\n        -11.665101051330566\n      ],\n      [\n        \"▁道場\",\n        -11.665132522583008\n      ],\n      [\n        \"▁光景\",\n        -11.665193557739258\n      ],\n      [\n        \"▁起点\",\n        -11.665279388427734\n      ],\n      [\n        \"りん\",\n        -11.665366172790527\n      ],\n      [\n        \"▁インフルエンザ\",\n        -11.665419578552246\n      ],\n      [\n        \"▁キャプテン\",\n        -11.665422439575195\n      ],\n      [\n        \"▁院長\",\n        -11.665584564208984\n      ],\n      [\n        \"▁神田\",\n        -11.665599822998047\n      ],\n      [\n        \"▁為替\",\n        -11.66585636138916\n      ],\n      [\n        \"ical\",\n        -11.66598129272461\n      ],\n      [\n        \"サービス\",\n        -11.665987968444824\n      ],\n      [\n        \"TP\",\n        -11.666155815124512\n      ],\n      [\n        \"▁ラッセル\",\n        -11.666418075561523\n      ],\n      [\n        \"づく\",\n        -11.666481971740723\n      ],\n      [\n        \"▁貝\",\n        -11.666486740112305\n      ],\n      [\n        \"▁ネック\",\n        -11.666496276855469\n      ],\n      [\n        \"▁公的\",\n        -11.666536331176758\n      ],\n      [\n        \"▁答える\",\n        -11.666654586791992\n      ],\n      [\n        \"▁武蔵\",\n        -11.66700267791748\n      ],\n      [\n        \"ピング\",\n        -11.667009353637695\n      ],\n      [\n        \"▁応答\",\n        -11.667014122009277\n      ],\n      [\n        \"▁通報\",\n        -11.667070388793945\n      ],\n      [\n        \"ケース\",\n        -11.667240142822266\n      ],\n      [\n        \"▁絆\",\n        -11.667651176452637\n      ],\n      [\n        \"▁落とす\",\n        -11.667691230773926\n      ],\n      [\n        \"▁リボン\",\n        -11.667729377746582\n      ],\n      [\n        \"▁据え\",\n        -11.667791366577148\n      ],\n      [\n        \"▁味噌\",\n        -11.667829513549805\n      ],\n      [\n        \"AY\",\n        -11.668023109436035\n      ],\n      [\n        \"ノフ\",\n        -11.668185234069824\n      ],\n      [\n        \"▁礼拝\",\n        -11.668248176574707\n      ],\n      [\n        \"▁内戦\",\n        -11.668299674987793\n      ],\n      [\n        \"疑\",\n        -11.668420791625977\n      ],\n      [\n        \"▁癖\",\n        -11.668645858764648\n      ],\n      [\n        \"▁起訴\",\n        -11.668815612792969\n      ],\n      [\n        \"晴\",\n        -11.668927192687988\n      ],\n      [\n        \"▁トータル\",\n        -11.669055938720703\n      ],\n      [\n        \"▁ボブ\",\n        -11.669058799743652\n      ],\n      [\n        \"▁八王子\",\n        -11.669201850891113\n      ],\n      [\n        \"▁総長\",\n        -11.66930103302002\n      ],\n      [\n        \"リティ\",\n        -11.669303894042969\n      ],\n      [\n        \"嗣\",\n        -11.669344902038574\n      ],\n      [\n        \"▁伸びて\",\n        -11.669438362121582\n      ],\n      [\n        \"▁基づいた\",\n        -11.669690132141113\n      ],\n      [\n        \"▁排気\",\n        -11.670069694519043\n      ],\n      [\n        \"▁捜索\",\n        -11.670104026794434\n      ],\n      [\n        \"ヒト\",\n        -11.670127868652344\n      ],\n      [\n        \"▁果実\",\n        -11.670231819152832\n      ],\n      [\n        \"yo\",\n        -11.670352935791016\n      ],\n      [\n        \"▁LP\",\n        -11.670378684997559\n      ],\n      [\n        \"▁トーマス\",\n        -11.670442581176758\n      ],\n      [\n        \"▁アウ\",\n        -11.67052173614502\n      ],\n      [\n        \"▁幹\",\n        -11.670527458190918\n      ],\n      [\n        \"ビュ\",\n        -11.670538902282715\n      ],\n      [\n        \"▁瑞\",\n        -11.670610427856445\n      ],\n      [\n        \"▁唇\",\n        -11.670620918273926\n      ],\n      [\n        \"▁進路\",\n        -11.670744895935059\n      ],\n      [\n        \"払い\",\n        -11.670910835266113\n      ],\n      [\n        \"▁落ち着いた\",\n        -11.671097755432129\n      ],\n      [\n        \"▁掛\",\n        -11.671236038208008\n      ],\n      [\n        \"▁プロイセン\",\n        -11.671302795410156\n      ],\n      [\n        \"▁スピ\",\n        -11.671353340148926\n      ],\n      [\n        \"▁税理士\",\n        -11.671551704406738\n      ],\n      [\n        \"最も\",\n        -11.671560287475586\n      ],\n      [\n        \"ユーザー\",\n        -11.671656608581543\n      ],\n      [\n        \"パリ\",\n        -11.67173957824707\n      ],\n      [\n        \"▁疎\",\n        -11.671781539916992\n      ],\n      [\n        \"▁暴\",\n        -11.671783447265625\n      ],\n      [\n        \"▁拡散\",\n        -11.671831130981445\n      ],\n      [\n        \"ans\",\n        -11.672109603881836\n      ],\n      [\n        \"がき\",\n        -11.672195434570312\n      ],\n      [\n        \"▁介\",\n        -11.6723051071167\n      ],\n      [\n        \"▁瓦\",\n        -11.672451972961426\n      ],\n      [\n        \"▁監修\",\n        -11.672452926635742\n      ],\n      [\n        \"CP\",\n        -11.67250919342041\n      ],\n      [\n        \"ホテル\",\n        -11.672554016113281\n      ],\n      [\n        \"卒\",\n        -11.672605514526367\n      ],\n      [\n        \"if\",\n        -11.672647476196289\n      ],\n      [\n        \"▁サンデー\",\n        -11.6728515625\n      ],\n      [\n        \"▁ABC\",\n        -11.672871589660645\n      ],\n      [\n        \"▁救済\",\n        -11.672874450683594\n      ],\n      [\n        \"▁辻\",\n        -11.67293643951416\n      ],\n      [\n        \"富士\",\n        -11.672961235046387\n      ],\n      [\n        \"▁低迷\",\n        -11.67301082611084\n      ],\n      [\n        \"▁ミッド\",\n        -11.673091888427734\n      ],\n      [\n        \"▁なくなる\",\n        -11.673443794250488\n      ],\n      [\n        \"▁取り入れて\",\n        -11.673479080200195\n      ],\n      [\n        \"▁木製\",\n        -11.67365550994873\n      ],\n      [\n        \"ビュー\",\n        -11.674084663391113\n      ],\n      [\n        \"惑\",\n        -11.674145698547363\n      ],\n      [\n        \"▁フェル\",\n        -11.674229621887207\n      ],\n      [\n        \"▁掲げ\",\n        -11.674328804016113\n      ],\n      [\n        \"▁福山\",\n        -11.674753189086914\n      ],\n      [\n        \"...\",\n        -11.674910545349121\n      ],\n      [\n        \"▁アサ\",\n        -11.674965858459473\n      ],\n      [\n        \"dd\",\n        -11.675037384033203\n      ],\n      [\n        \"▁孤独\",\n        -11.67508602142334\n      ],\n      [\n        \"▁切断\",\n        -11.675267219543457\n      ],\n      [\n        \"ッキング\",\n        -11.675286293029785\n      ],\n      [\n        \"プト\",\n        -11.675375938415527\n      ],\n      [\n        \"ash\",\n        -11.675518035888672\n      ],\n      [\n        \"リーズ\",\n        -11.675564765930176\n      ],\n      [\n        \"▁紐\",\n        -11.675617218017578\n      ],\n      [\n        \"にも\",\n        -11.675642967224121\n      ],\n      [\n        \"▁北区\",\n        -11.67566967010498\n      ],\n      [\n        \"がった\",\n        -11.675910949707031\n      ],\n      [\n        \"▁考古\",\n        -11.676007270812988\n      ],\n      [\n        \"迷\",\n        -11.676115036010742\n      ],\n      [\n        \"ゲー\",\n        -11.676398277282715\n      ],\n      [\n        \"▁植\",\n        -11.676405906677246\n      ],\n      [\n        \"▁CC\",\n        -11.67650318145752\n      ],\n      [\n        \"▁明記\",\n        -11.676734924316406\n      ],\n      [\n        \"▁BGM\",\n        -11.676750183105469\n      ],\n      [\n        \"テラ\",\n        -11.676774978637695\n      ],\n      [\n        \"▁ac\",\n        -11.676836967468262\n      ],\n      [\n        \"▁最強の\",\n        -11.67725944519043\n      ],\n      [\n        \"▁づらい\",\n        -11.677308082580566\n      ],\n      [\n        \"RS\",\n        -11.677526473999023\n      ],\n      [\n        \"▁解明\",\n        -11.677632331848145\n      ],\n      [\n        \"サウルス\",\n        -11.677658081054688\n      ],\n      [\n        \"▁当たり前\",\n        -11.677749633789062\n      ],\n      [\n        \"▁箱根\",\n        -11.677827835083008\n      ],\n      [\n        \"▁序\",\n        -11.677896499633789\n      ],\n      [\n        \"▁あつ\",\n        -11.677948951721191\n      ],\n      [\n        \"▁遺言\",\n        -11.678077697753906\n      ],\n      [\n        \"▁フィート\",\n        -11.678094863891602\n      ],\n      [\n        \"▁講じ\",\n        -11.678308486938477\n      ],\n      [\n        \"漫画\",\n        -11.67835807800293\n      ],\n      [\n        \"▁大坂\",\n        -11.67836856842041\n      ],\n      [\n        \"▁譲\",\n        -11.678462982177734\n      ],\n      [\n        \"AST\",\n        -11.678815841674805\n      ],\n      [\n        \"適\",\n        -11.678823471069336\n      ],\n      [\n        \"▁記して\",\n        -11.679001808166504\n      ],\n      [\n        \"▁文句\",\n        -11.67904281616211\n      ],\n      [\n        \"▁刑務所\",\n        -11.679255485534668\n      ],\n      [\n        \"▁会った\",\n        -11.67927360534668\n      ],\n      [\n        \"衝\",\n        -11.679300308227539\n      ],\n      [\n        \"▁なんとなく\",\n        -11.679320335388184\n      ],\n      [\n        \"VA\",\n        -11.679616928100586\n      ],\n      [\n        \"▁携わる\",\n        -11.67995834350586\n      ],\n      [\n        \"虎\",\n        -11.679963111877441\n      ],\n      [\n        \"▁後日\",\n        -11.680011749267578\n      ],\n      [\n        \"▁肯定\",\n        -11.680091857910156\n      ],\n      [\n        \"だろう\",\n        -11.680291175842285\n      ],\n      [\n        \"▁クオリティ\",\n        -11.680302619934082\n      ],\n      [\n        \"▁グラビア\",\n        -11.680619239807129\n      ],\n      [\n        \"?\",\n        -11.68066120147705\n      ],\n      [\n        \"▁景気\",\n        -11.680795669555664\n      ],\n      [\n        \"俊\",\n        -11.680798530578613\n      ],\n      [\n        \"とにかく\",\n        -11.681086540222168\n      ],\n      [\n        \"静岡\",\n        -11.681305885314941\n      ],\n      [\n        \"▁ちゃ\",\n        -11.681601524353027\n      ],\n      [\n        \"そのほか\",\n        -11.68166446685791\n      ],\n      [\n        \"▁定数\",\n        -11.681741714477539\n      ],\n      [\n        \"▁di\",\n        -11.681828498840332\n      ],\n      [\n        \"ディス\",\n        -11.681939125061035\n      ],\n      [\n        \"▁管区\",\n        -11.682242393493652\n      ],\n      [\n        \"1968\",\n        -11.682353973388672\n      ],\n      [\n        \"よって\",\n        -11.682376861572266\n      ],\n      [\n        \"iPhone\",\n        -11.682421684265137\n      ],\n      [\n        \"▁固有\",\n        -11.682433128356934\n      ],\n      [\n        \"エール\",\n        -11.682490348815918\n      ],\n      [\n        \"▁至\",\n        -11.682497024536133\n      ],\n      [\n        \"嘉\",\n        -11.682650566101074\n      ],\n      [\n        \"▁下着\",\n        -11.682662010192871\n      ],\n      [\n        \"レム\",\n        -11.683034896850586\n      ],\n      [\n        \"▁巡る\",\n        -11.683064460754395\n      ],\n      [\n        \"▁野田\",\n        -11.683431625366211\n      ],\n      [\n        \"▁大地\",\n        -11.683574676513672\n      ],\n      [\n        \"▁一応\",\n        -11.68371295928955\n      ],\n      [\n        \"▁アフター\",\n        -11.683734893798828\n      ],\n      [\n        \"▁ベー\",\n        -11.683744430541992\n      ],\n      [\n        \"▁模索\",\n        -11.683793067932129\n      ],\n      [\n        \"モノ\",\n        -11.684267044067383\n      ],\n      [\n        \"▁プレーオフ\",\n        -11.68429946899414\n      ],\n      [\n        \"▁ランニング\",\n        -11.684350967407227\n      ],\n      [\n        \"罪\",\n        -11.684369087219238\n      ],\n      [\n        \"▁Art\",\n        -11.6845064163208\n      ],\n      [\n        \"▁OL\",\n        -11.684615135192871\n      ],\n      [\n        \"▁適して\",\n        -11.684673309326172\n      ],\n      [\n        \"▁水上\",\n        -11.684798240661621\n      ],\n      [\n        \"▁上杉\",\n        -11.684879302978516\n      ],\n      [\n        \"問題\",\n        -11.684983253479004\n      ],\n      [\n        \"▁番手\",\n        -11.685160636901855\n      ],\n      [\n        \"▁聴\",\n        -11.685245513916016\n      ],\n      [\n        \"タグ\",\n        -11.685308456420898\n      ],\n      [\n        \"耶\",\n        -11.685332298278809\n      ],\n      [\n        \"故\",\n        -11.685343742370605\n      ],\n      [\n        \"mer\",\n        -11.685399055480957\n      ],\n      [\n        \"▁房\",\n        -11.685402870178223\n      ],\n      [\n        \"▁骨折\",\n        -11.68546199798584\n      ],\n      [\n        \"ヌー\",\n        -11.685465812683105\n      ],\n      [\n        \"▁机\",\n        -11.685572624206543\n      ],\n      [\n        \"▁残業\",\n        -11.685616493225098\n      ],\n      [\n        \"▁衣\",\n        -11.685746192932129\n      ],\n      [\n        \"▁AKB\",\n        -11.685829162597656\n      ],\n      [\n        \"▁見なさ\",\n        -11.685837745666504\n      ],\n      [\n        \"ino\",\n        -11.68593978881836\n      ],\n      [\n        \"政治\",\n        -11.686055183410645\n      ],\n      [\n        \"▁チベット\",\n        -11.686134338378906\n      ],\n      [\n        \"▁坂本\",\n        -11.686188697814941\n      ],\n      [\n        \"▁アニ\",\n        -11.686455726623535\n      ],\n      [\n        \"▁自然な\",\n        -11.68654727935791\n      ],\n      [\n        \"▁手配\",\n        -11.686573028564453\n      ],\n      [\n        \"承\",\n        -11.686579704284668\n      ],\n      [\n        \"兵庫\",\n        -11.68662166595459\n      ],\n      [\n        \"▁単純\",\n        -11.686666488647461\n      ],\n      [\n        \"▁組み合わせた\",\n        -11.686983108520508\n      ],\n      [\n        \"▁鈴\",\n        -11.68699836730957\n      ],\n      [\n        \"1977\",\n        -11.687061309814453\n      ],\n      [\n        \"▁山頂\",\n        -11.687104225158691\n      ],\n      [\n        \"▁乱れ\",\n        -11.68712329864502\n      ],\n      [\n        \"▁ハードウェア\",\n        -11.687126159667969\n      ],\n      [\n        \"バート\",\n        -11.687174797058105\n      ],\n      [\n        \"av\",\n        -11.687291145324707\n      ],\n      [\n        \"▁出生\",\n        -11.68748664855957\n      ],\n      [\n        \"▁もたらした\",\n        -11.68751049041748\n      ],\n      [\n        \"▁幼少\",\n        -11.687539100646973\n      ],\n      [\n        \"▁it\",\n        -11.687544822692871\n      ],\n      [\n        \"lus\",\n        -11.687843322753906\n      ],\n      [\n        \"po\",\n        -11.687895774841309\n      ],\n      [\n        \"▁沢山の\",\n        -11.687957763671875\n      ],\n      [\n        \"▁空手\",\n        -11.687980651855469\n      ],\n      [\n        \"▁親友\",\n        -11.688066482543945\n      ],\n      [\n        \"▁好きだ\",\n        -11.688079833984375\n      ],\n      [\n        \"副\",\n        -11.688143730163574\n      ],\n      [\n        \"初代\",\n        -11.688164710998535\n      ],\n      [\n        \"▁なー\",\n        -11.688212394714355\n      ],\n      [\n        \"sy\",\n        -11.68862247467041\n      ],\n      [\n        \"▁調和\",\n        -11.688679695129395\n      ],\n      [\n        \"レックス\",\n        -11.688923835754395\n      ],\n      [\n        \"▁ブラシ\",\n        -11.689298629760742\n      ],\n      [\n        \"▁クイーン\",\n        -11.689315795898438\n      ],\n      [\n        \"han\",\n        -11.689509391784668\n      ],\n      [\n        \"▁届いた\",\n        -11.689532279968262\n      ],\n      [\n        \"当然\",\n        -11.68954849243164\n      ],\n      [\n        \"▁ふる\",\n        -11.689569473266602\n      ],\n      [\n        \"▁楽しかった\",\n        -11.689620971679688\n      ],\n      [\n        \"鎮\",\n        -11.689641952514648\n      ],\n      [\n        \"洞\",\n        -11.689648628234863\n      ],\n      [\n        \"▁切った\",\n        -11.68986701965332\n      ],\n      [\n        \"▁土佐\",\n        -11.689896583557129\n      ],\n      [\n        \"ブルー\",\n        -11.689912796020508\n      ],\n      [\n        \"Book\",\n        -11.690123558044434\n      ],\n      [\n        \"湿\",\n        -11.690131187438965\n      ],\n      [\n        \"▁出向\",\n        -11.690168380737305\n      ],\n      [\n        \"▁ヒュー\",\n        -11.69023323059082\n      ],\n      [\n        \"▁組み合わせて\",\n        -11.690293312072754\n      ],\n      [\n        \"▁幼い\",\n        -11.690566062927246\n      ],\n      [\n        \"▁app\",\n        -11.690775871276855\n      ],\n      [\n        \"▁姉さん\",\n        -11.690815925598145\n      ],\n      [\n        \"▁450\",\n        -11.690824508666992\n      ],\n      [\n        \"一番\",\n        -11.690832138061523\n      ],\n      [\n        \"▁DF\",\n        -11.690999984741211\n      ],\n      [\n        \"電子\",\n        -11.691019058227539\n      ],\n      [\n        \"▁海戦\",\n        -11.691023826599121\n      ],\n      [\n        \"▁やりとり\",\n        -11.691027641296387\n      ],\n      [\n        \"▁一生懸命\",\n        -11.691094398498535\n      ],\n      [\n        \"▁清潔\",\n        -11.69112491607666\n      ],\n      [\n        \"▁グッド\",\n        -11.691128730773926\n      ],\n      [\n        \"庁\",\n        -11.69115161895752\n      ],\n      [\n        \"▁ソル\",\n        -11.69120979309082\n      ],\n      [\n        \"構\",\n        -11.691367149353027\n      ],\n      [\n        \"▁プラザ\",\n        -11.691624641418457\n      ],\n      [\n        \"▁ベクトル\",\n        -11.69166088104248\n      ],\n      [\n        \"▁宛\",\n        -11.691804885864258\n      ],\n      [\n        \"きょう\",\n        -11.692086219787598\n      ],\n      [\n        \"▁領主\",\n        -11.69212818145752\n      ],\n      [\n        \"伯\",\n        -11.692243576049805\n      ],\n      [\n        \"▁満了\",\n        -11.69224739074707\n      ],\n      [\n        \"▁イカ\",\n        -11.692255020141602\n      ],\n      [\n        \"by\",\n        -11.692306518554688\n      ],\n      [\n        \"▁シード\",\n        -11.692375183105469\n      ],\n      [\n        \"▁オリコン\",\n        -11.692434310913086\n      ],\n      [\n        \"▁整え\",\n        -11.692535400390625\n      ],\n      [\n        \"加えて\",\n        -11.692558288574219\n      ],\n      [\n        \"▁多分\",\n        -11.692612648010254\n      ],\n      [\n        \"log\",\n        -11.692626953125\n      ],\n      [\n        \"▁動脈\",\n        -11.692672729492188\n      ],\n      [\n        \"▁▲\",\n        -11.692869186401367\n      ],\n      [\n        \"胞\",\n        -11.693111419677734\n      ],\n      [\n        \"▁IBM\",\n        -11.693166732788086\n      ],\n      [\n        \"▁ボク\",\n        -11.693465232849121\n      ],\n      [\n        \"▁傍\",\n        -11.6935396194458\n      ],\n      [\n        \"▁達し\",\n        -11.693866729736328\n      ],\n      [\n        \"▁ワイルド\",\n        -11.694183349609375\n      ],\n      [\n        \"own\",\n        -11.69426441192627\n      ],\n      [\n        \"▁ナンパ\",\n        -11.694565773010254\n      ],\n      [\n        \"▁ブリッジ\",\n        -11.694693565368652\n      ],\n      [\n        \"マール\",\n        -11.694744110107422\n      ],\n      [\n        \"▁ドロップ\",\n        -11.694921493530273\n      ],\n      [\n        \"▁腰痛\",\n        -11.695014953613281\n      ],\n      [\n        \"ata\",\n        -11.695295333862305\n      ],\n      [\n        \"▁バス停\",\n        -11.695422172546387\n      ],\n      [\n        \"▁仲良く\",\n        -11.695700645446777\n      ],\n      [\n        \"背景\",\n        -11.695706367492676\n      ],\n      [\n        \"▁体感\",\n        -11.695718765258789\n      ],\n      [\n        \"SH\",\n        -11.695819854736328\n      ],\n      [\n        \"▁芽\",\n        -11.695917129516602\n      ],\n      [\n        \"ZA\",\n        -11.696003913879395\n      ],\n      [\n        \"▁屈\",\n        -11.696188926696777\n      ],\n      [\n        \"▁効\",\n        -11.69650650024414\n      ],\n      [\n        \"ous\",\n        -11.69662857055664\n      ],\n      [\n        \"▁なんでも\",\n        -11.696721076965332\n      ],\n      [\n        \"▁集まった\",\n        -11.696792602539062\n      ],\n      [\n        \"写\",\n        -11.696795463562012\n      ],\n      [\n        \"世帯\",\n        -11.6968355178833\n      ],\n      [\n        \"▁心身\",\n        -11.696952819824219\n      ],\n      [\n        \"▁斉\",\n        -11.696986198425293\n      ],\n      [\n        \"▁遂行\",\n        -11.69703483581543\n      ],\n      [\n        \"▁なかったら\",\n        -11.697129249572754\n      ],\n      [\n        \"▁終えて\",\n        -11.6972074508667\n      ],\n      [\n        \"1969\",\n        -11.697269439697266\n      ],\n      [\n        \"▁摂\",\n        -11.697278022766113\n      ],\n      [\n        \"▁店長\",\n        -11.69728946685791\n      ],\n      [\n        \"抜け\",\n        -11.697698593139648\n      ],\n      [\n        \"▁襲わ\",\n        -11.697888374328613\n      ],\n      [\n        \"▁熱帯\",\n        -11.698073387145996\n      ],\n      [\n        \"ama\",\n        -11.698112487792969\n      ],\n      [\n        \"▁台詞\",\n        -11.698168754577637\n      ],\n      [\n        \"▁稽古\",\n        -11.698311805725098\n      ],\n      [\n        \"AB\",\n        -11.698479652404785\n      ],\n      [\n        \"▁望んで\",\n        -11.698500633239746\n      ],\n      [\n        \"▁明らか\",\n        -11.69876766204834\n      ],\n      [\n        \"▁固め\",\n        -11.6988525390625\n      ],\n      [\n        \"▁英文\",\n        -11.698954582214355\n      ],\n      [\n        \"エラ\",\n        -11.698987007141113\n      ],\n      [\n        \"▁1928\",\n        -11.699042320251465\n      ],\n      [\n        \"ほう\",\n        -11.699563980102539\n      ],\n      [\n        \"▁シェー\",\n        -11.699862480163574\n      ],\n      [\n        \"▁世田谷\",\n        -11.699875831604004\n      ],\n      [\n        \"▁ひどい\",\n        -11.700326919555664\n      ],\n      [\n        \"▁同じで\",\n        -11.700453758239746\n      ],\n      [\n        \"▁ドキュメント\",\n        -11.700728416442871\n      ],\n      [\n        \"▁担保\",\n        -11.700825691223145\n      ],\n      [\n        \"▁なっちゃ\",\n        -11.700843811035156\n      ],\n      [\n        \"▁尺\",\n        -11.700995445251465\n      ],\n      [\n        \"▁CEO\",\n        -11.701087951660156\n      ],\n      [\n        \"▁しま\",\n        -11.70115852355957\n      ],\n      [\n        \"▁我が家\",\n        -11.701247215270996\n      ],\n      [\n        \"▁税務\",\n        -11.701311111450195\n      ],\n      [\n        \"▁間接\",\n        -11.701443672180176\n      ],\n      [\n        \"チェン\",\n        -11.701655387878418\n      ],\n      [\n        \"▁甲板\",\n        -11.701717376708984\n      ],\n      [\n        \"▁◇\",\n        -11.701735496520996\n      ],\n      [\n        \"▁異性\",\n        -11.701750755310059\n      ],\n      [\n        \"▁ベンチャー\",\n        -11.702077865600586\n      ],\n      [\n        \"▁ビン\",\n        -11.702123641967773\n      ],\n      [\n        \"▁鷹\",\n        -11.70213508605957\n      ],\n      [\n        \"▁音響\",\n        -11.702343940734863\n      ],\n      [\n        \"▁MLB\",\n        -11.702350616455078\n      ],\n      [\n        \"▁定めた\",\n        -11.702475547790527\n      ],\n      [\n        \"キス\",\n        -11.70254898071289\n      ],\n      [\n        \"栗\",\n        -11.702696800231934\n      ],\n      [\n        \"▁勝つ\",\n        -11.702779769897461\n      ],\n      [\n        \"▁徴収\",\n        -11.70323371887207\n      ],\n      [\n        \"ホル\",\n        -11.703314781188965\n      ],\n      [\n        \"▁だらけ\",\n        -11.703316688537598\n      ],\n      [\n        \"▁立川\",\n        -11.703354835510254\n      ],\n      [\n        \"▁庶民\",\n        -11.703935623168945\n      ],\n      [\n        \"EG\",\n        -11.704042434692383\n      ],\n      [\n        \"▁LOVE\",\n        -11.704145431518555\n      ],\n      [\n        \"▁三角\",\n        -11.704338073730469\n      ],\n      [\n        \"▁謝\",\n        -11.70444393157959\n      ],\n      [\n        \"▁叩き\",\n        -11.704506874084473\n      ],\n      [\n        \"▁1931\",\n        -11.70451545715332\n      ],\n      [\n        \"恋\",\n        -11.704560279846191\n      ],\n      [\n        \"▁直す\",\n        -11.704607963562012\n      ],\n      [\n        \"▁ステンレス\",\n        -11.704721450805664\n      ],\n      [\n        \"▁数量\",\n        -11.704977035522461\n      ],\n      [\n        \"▁眼鏡\",\n        -11.70502758026123\n      ],\n      [\n        \"▁傍ら\",\n        -11.70507526397705\n      ],\n      [\n        \"yl\",\n        -11.705225944519043\n      ],\n      [\n        \"▁レグノ\",\n        -11.7055082321167\n      ],\n      [\n        \"▁中隊\",\n        -11.70563793182373\n      ],\n      [\n        \"tr\",\n        -11.705667495727539\n      ],\n      [\n        \"YO\",\n        -11.705697059631348\n      ],\n      [\n        \"▁仮説\",\n        -11.705711364746094\n      ],\n      [\n        \"▁ろ\",\n        -11.705979347229004\n      ],\n      [\n        \"▁宝石\",\n        -11.706052780151367\n      ],\n      [\n        \"▁史跡\",\n        -11.706083297729492\n      ],\n      [\n        \"▁参画\",\n        -11.706185340881348\n      ],\n      [\n        \"▁民俗\",\n        -11.706257820129395\n      ],\n      [\n        \"▁借入\",\n        -11.706306457519531\n      ],\n      [\n        \"シリ\",\n        -11.70633316040039\n      ],\n      [\n        \"▁お伺い\",\n        -11.706365585327148\n      ],\n      [\n        \"▁再発\",\n        -11.706414222717285\n      ],\n      [\n        \"導\",\n        -11.706526756286621\n      ],\n      [\n        \"撮影\",\n        -11.706669807434082\n      ],\n      [\n        \"電話\",\n        -11.706718444824219\n      ],\n      [\n        \"In\",\n        -11.706801414489746\n      ],\n      [\n        \"▁観戦\",\n        -11.70700740814209\n      ],\n      [\n        \"▁戦前\",\n        -11.707096099853516\n      ],\n      [\n        \"▁称して\",\n        -11.707158088684082\n      ],\n      [\n        \"▁不便\",\n        -11.707183837890625\n      ],\n      [\n        \"view\",\n        -11.707202911376953\n      ],\n      [\n        \"▁タイムズ\",\n        -11.707262992858887\n      ],\n      [\n        \"▁育毛\",\n        -11.70728588104248\n      ],\n      [\n        \"▁Rayong\",\n        -11.707296371459961\n      ],\n      [\n        \"仕\",\n        -11.707380294799805\n      ],\n      [\n        \"▁近づいて\",\n        -11.707557678222656\n      ],\n      [\n        \"VE\",\n        -11.707588195800781\n      ],\n      [\n        \"▁固\",\n        -11.707588195800781\n      ],\n      [\n        \"ii\",\n        -11.70760726928711\n      ],\n      [\n        \"▁アーカイブ\",\n        -11.7076416015625\n      ],\n      [\n        \"▁β\",\n        -11.70767593383789\n      ],\n      [\n        \"▁魔術\",\n        -11.70784854888916\n      ],\n      [\n        \"▁プライム\",\n        -11.707855224609375\n      ],\n      [\n        \"▁働\",\n        -11.707866668701172\n      ],\n      [\n        \"▁POP\",\n        -11.707937240600586\n      ],\n      [\n        \"▁..\",\n        -11.708242416381836\n      ],\n      [\n        \"▁ルーマニア\",\n        -11.708246231079102\n      ],\n      [\n        \"▁鹿島\",\n        -11.708272933959961\n      ],\n      [\n        \"GE\",\n        -11.70848274230957\n      ],\n      [\n        \"▁アフ\",\n        -11.708547592163086\n      ],\n      [\n        \"SU\",\n        -11.708649635314941\n      ],\n      [\n        \"▁統括\",\n        -11.708733558654785\n      ],\n      [\n        \"▁加賀\",\n        -11.708765029907227\n      ],\n      [\n        \"▁慣れ\",\n        -11.708795547485352\n      ],\n      [\n        \"柔\",\n        -11.708800315856934\n      ],\n      [\n        \"査\",\n        -11.708873748779297\n      ],\n      [\n        \"アド\",\n        -11.708930015563965\n      ],\n      [\n        \"▁エリザベス\",\n        -11.708930969238281\n      ],\n      [\n        \"▁得に\",\n        -11.709107398986816\n      ],\n      [\n        \"▁Sp\",\n        -11.709161758422852\n      ],\n      [\n        \"ike\",\n        -11.70920181274414\n      ],\n      [\n        \"▁目覚め\",\n        -11.709623336791992\n      ],\n      [\n        \"スキ\",\n        -11.709625244140625\n      ],\n      [\n        \"▁映\",\n        -11.70979118347168\n      ],\n      [\n        \"▁公衆\",\n        -11.709911346435547\n      ],\n      [\n        \"▁複雑\",\n        -11.70997142791748\n      ],\n      [\n        \"激\",\n        -11.710136413574219\n      ],\n      [\n        \"▁まわり\",\n        -11.710307121276855\n      ],\n      [\n        \"浪\",\n        -11.710359573364258\n      ],\n      [\n        \"最初に\",\n        -11.710518836975098\n      ],\n      [\n        \"▁雇\",\n        -11.710564613342285\n      ],\n      [\n        \"▁狙って\",\n        -11.710590362548828\n      ],\n      [\n        \"▁境内\",\n        -11.710638046264648\n      ],\n      [\n        \"さく\",\n        -11.710859298706055\n      ],\n      [\n        \"ドリー\",\n        -11.711077690124512\n      ],\n      [\n        \"▁ヨー\",\n        -11.711112022399902\n      ],\n      [\n        \"▁アイランド\",\n        -11.711162567138672\n      ],\n      [\n        \"▁リソース\",\n        -11.71143627166748\n      ],\n      [\n        \"主人公\",\n        -11.71158504486084\n      ],\n      [\n        \"▁志望\",\n        -11.71174430847168\n      ],\n      [\n        \"▁人文\",\n        -11.711922645568848\n      ],\n      [\n        \"コイ\",\n        -11.711965560913086\n      ],\n      [\n        \"▁後藤\",\n        -11.71203899383545\n      ],\n      [\n        \"振\",\n        -11.712455749511719\n      ],\n      [\n        \"EI\",\n        -11.712604522705078\n      ],\n      [\n        \"▁公爵\",\n        -11.712631225585938\n      ],\n      [\n        \"奇\",\n        -11.712873458862305\n      ],\n      [\n        \"▁ベージュ\",\n        -11.71291732788086\n      ],\n      [\n        \"▁FF\",\n        -11.712991714477539\n      ],\n      [\n        \"ディオ\",\n        -11.712997436523438\n      ],\n      [\n        \"ギャ\",\n        -11.713068962097168\n      ],\n      [\n        \"▁WiFi\",\n        -11.713187217712402\n      ],\n      [\n        \"▁斬\",\n        -11.7132568359375\n      ],\n      [\n        \"▁しまえば\",\n        -11.713269233703613\n      ],\n      [\n        \"▁1929\",\n        -11.713310241699219\n      ],\n      [\n        \"▁所定\",\n        -11.713508605957031\n      ],\n      [\n        \"▁返して\",\n        -11.713508605957031\n      ],\n      [\n        \"▁驚いた\",\n        -11.713528633117676\n      ],\n      [\n        \"ound\",\n        -11.713656425476074\n      ],\n      [\n        \"▁あんな\",\n        -11.713666915893555\n      ],\n      [\n        \"RU\",\n        -11.713750839233398\n      ],\n      [\n        \"築\",\n        -11.713788986206055\n      ],\n      [\n        \"▁注射\",\n        -11.71387767791748\n      ],\n      [\n        \"▁愛して\",\n        -11.713883399963379\n      ],\n      [\n        \"▁官房\",\n        -11.714021682739258\n      ],\n      [\n        \"▁ぱ\",\n        -11.714070320129395\n      ],\n      [\n        \"▁クルマ\",\n        -11.714138984680176\n      ],\n      [\n        \"▁秦\",\n        -11.71425724029541\n      ],\n      [\n        \"▁蓋\",\n        -11.714286804199219\n      ],\n      [\n        \"▁東宝\",\n        -11.714588165283203\n      ],\n      [\n        \"▁ちなんで\",\n        -11.714774131774902\n      ],\n      [\n        \"父親\",\n        -11.714859962463379\n      ],\n      [\n        \"▁停留所\",\n        -11.71491813659668\n      ],\n      [\n        \"▁SL\",\n        -11.714987754821777\n      ],\n      [\n        \"▁虐待\",\n        -11.714990615844727\n      ],\n      [\n        \"▁アキ\",\n        -11.715079307556152\n      ],\n      [\n        \"▁乗った\",\n        -11.715577125549316\n      ],\n      [\n        \"▁少々\",\n        -11.715636253356934\n      ],\n      [\n        \"▁内務\",\n        -11.715678215026855\n      ],\n      [\n        \"前述\",\n        -11.715744972229004\n      ],\n      [\n        \"々しい\",\n        -11.7162504196167\n      ],\n      [\n        \"扱\",\n        -11.71630859375\n      ],\n      [\n        \"▁CL\",\n        -11.716325759887695\n      ],\n      [\n        \"▁討\",\n        -11.716395378112793\n      ],\n      [\n        \"▁遅延\",\n        -11.716449737548828\n      ],\n      [\n        \"ミニ\",\n        -11.716535568237305\n      ],\n      [\n        \"整\",\n        -11.716586112976074\n      ],\n      [\n        \"▁親王\",\n        -11.716638565063477\n      ],\n      [\n        \"▁東芝\",\n        -11.716700553894043\n      ],\n      [\n        \"▁公募\",\n        -11.716750144958496\n      ],\n      [\n        \"▁製薬\",\n        -11.716878890991211\n      ],\n      [\n        \"^)\",\n        -11.717002868652344\n      ],\n      [\n        \"とり\",\n        -11.717048645019531\n      ],\n      [\n        \"▁平面\",\n        -11.717294692993164\n      ],\n      [\n        \"▁セイコー\",\n        -11.717429161071777\n      ],\n      [\n        \"シリーズ\",\n        -11.717513084411621\n      ],\n      [\n        \"ニュース\",\n        -11.717820167541504\n      ],\n      [\n        \"▁着陸\",\n        -11.717907905578613\n      ],\n      [\n        \"店舗\",\n        -11.717947006225586\n      ],\n      [\n        \"原作\",\n        -11.718125343322754\n      ],\n      [\n        \"▁合法\",\n        -11.718267440795898\n      ],\n      [\n        \"▁リレー\",\n        -11.718341827392578\n      ],\n      [\n        \"▁フィン\",\n        -11.718354225158691\n      ],\n      [\n        \"すでに\",\n        -11.718360900878906\n      ],\n      [\n        \"ベイ\",\n        -11.7184419631958\n      ],\n      [\n        \"▁喜ば\",\n        -11.718478202819824\n      ],\n      [\n        \"▁NBA\",\n        -11.71848201751709\n      ],\n      [\n        \"▁壁紙\",\n        -11.718588829040527\n      ],\n      [\n        \"▁下流\",\n        -11.718902587890625\n      ],\n      [\n        \"▁命じた\",\n        -11.718990325927734\n      ],\n      [\n        \"▁消\",\n        -11.719006538391113\n      ],\n      [\n        \"▁mo\",\n        -11.719491004943848\n      ],\n      [\n        \"吐\",\n        -11.71954345703125\n      ],\n      [\n        \"▁タル\",\n        -11.719558715820312\n      ],\n      [\n        \"а\",\n        -11.719764709472656\n      ],\n      [\n        \"▁重要である\",\n        -11.719765663146973\n      ],\n      [\n        \"えき\",\n        -11.719789505004883\n      ],\n      [\n        \"▁簿\",\n        -11.719958305358887\n      ],\n      [\n        \"さき\",\n        -11.720001220703125\n      ],\n      [\n        \"▁重力\",\n        -11.72021198272705\n      ],\n      [\n        \"▁育った\",\n        -11.720368385314941\n      ],\n      [\n        \"▁なす\",\n        -11.720377922058105\n      ],\n      [\n        \"▁標的\",\n        -11.720518112182617\n      ],\n      [\n        \"▁フィリップ\",\n        -11.720560073852539\n      ],\n      [\n        \"▁契機\",\n        -11.720563888549805\n      ],\n      [\n        \"▁フラッシュ\",\n        -11.720569610595703\n      ],\n      [\n        \"▁捕らえ\",\n        -11.720715522766113\n      ],\n      [\n        \"思い\",\n        -11.72075080871582\n      ],\n      [\n        \"▁出雲\",\n        -11.720778465270996\n      ],\n      [\n        \"▁Jo\",\n        -11.720845222473145\n      ],\n      [\n        \"▁満州\",\n        -11.720932960510254\n      ],\n      [\n        \"▁繋がって\",\n        -11.721006393432617\n      ],\n      [\n        \"▁目指した\",\n        -11.721162796020508\n      ],\n      [\n        \"▁日野\",\n        -11.721473693847656\n      ],\n      [\n        \"▁緑色\",\n        -11.721595764160156\n      ],\n      [\n        \"▁標\",\n        -11.721674919128418\n      ],\n      [\n        \"▁バルセロナ\",\n        -11.72174072265625\n      ],\n      [\n        \"しばらく\",\n        -11.72179126739502\n      ],\n      [\n        \"▁身近な\",\n        -11.721943855285645\n      ],\n      [\n        \"血液型\",\n        -11.722023010253906\n      ],\n      [\n        \"荘\",\n        -11.722064971923828\n      ],\n      [\n        \"▁叔父\",\n        -11.722162246704102\n      ],\n      [\n        \"▁ポーズ\",\n        -11.72226619720459\n      ],\n      [\n        \"舞台\",\n        -11.72234058380127\n      ],\n      [\n        \"サス\",\n        -11.722393035888672\n      ],\n      [\n        \"ぶん\",\n        -11.722575187683105\n      ],\n      [\n        \"▁適正\",\n        -11.722589492797852\n      ],\n      [\n        \"▁弦\",\n        -11.722631454467773\n      ],\n      [\n        \"▁流さ\",\n        -11.722908020019531\n      ],\n      [\n        \"▁ライブラリ\",\n        -11.722930908203125\n      ],\n      [\n        \"▁電磁\",\n        -11.722996711730957\n      ],\n      [\n        \"▁PukiWiki\",\n        -11.723034858703613\n      ],\n      [\n        \"この際\",\n        -11.723122596740723\n      ],\n      [\n        \"▁間もなく\",\n        -11.723161697387695\n      ],\n      [\n        \"▁ミン\",\n        -11.723344802856445\n      ],\n      [\n        \"▁贈り物\",\n        -11.723367691040039\n      ],\n      [\n        \"債\",\n        -11.723579406738281\n      ],\n      [\n        \"▁逸\",\n        -11.72367000579834\n      ],\n      [\n        \"sion\",\n        -11.723748207092285\n      ],\n      [\n        \"▁クリエイター\",\n        -11.723804473876953\n      ],\n      [\n        \"泰\",\n        -11.723919868469238\n      ],\n      [\n        \"▁探索\",\n        -11.724064826965332\n      ],\n      [\n        \"▁運河\",\n        -11.72463607788086\n      ],\n      [\n        \"▁他者\",\n        -11.724640846252441\n      ],\n      [\n        \"斑\",\n        -11.724928855895996\n      ],\n      [\n        \"滝\",\n        -11.72509479522705\n      ],\n      [\n        \"▁賭け\",\n        -11.725259780883789\n      ],\n      [\n        \"熊\",\n        -11.725275993347168\n      ],\n      [\n        \"▁環状\",\n        -11.7252836227417\n      ],\n      [\n        \"▁褐色\",\n        -11.725366592407227\n      ],\n      [\n        \"▁ストック\",\n        -11.72538948059082\n      ],\n      [\n        \"▁働いた\",\n        -11.72539234161377\n      ],\n      [\n        \"▁公正\",\n        -11.725408554077148\n      ],\n      [\n        \"▁飛んで\",\n        -11.725442886352539\n      ],\n      [\n        \"▁リトル\",\n        -11.725457191467285\n      ],\n      [\n        \"▁狩り\",\n        -11.725890159606934\n      ],\n      [\n        \"▁浮上\",\n        -11.725957870483398\n      ],\n      [\n        \"▁豪華\",\n        -11.726005554199219\n      ],\n      [\n        \"五郎\",\n        -11.726152420043945\n      ],\n      [\n        \"▁スナック\",\n        -11.726163864135742\n      ],\n      [\n        \"バード\",\n        -11.726451873779297\n      ],\n      [\n        \"▁ONE\",\n        -11.726455688476562\n      ],\n      [\n        \"▁Man\",\n        -11.726683616638184\n      ],\n      [\n        \"▁We\",\n        -11.72671127319336\n      ],\n      [\n        \"▁ロッテ\",\n        -11.726943969726562\n      ],\n      [\n        \"▁迷って\",\n        -11.726975440979004\n      ],\n      [\n        \"ale\",\n        -11.727029800415039\n      ],\n      [\n        \"▁SI\",\n        -11.727240562438965\n      ],\n      [\n        \"▁きり\",\n        -11.727275848388672\n      ],\n      [\n        \"▁ヘン\",\n        -11.727588653564453\n      ],\n      [\n        \"▁前進\",\n        -11.727588653564453\n      ],\n      [\n        \"▁抜いて\",\n        -11.727696418762207\n      ],\n      [\n        \"▼\",\n        -11.727821350097656\n      ],\n      [\n        \"▁退社\",\n        -11.72787094116211\n      ],\n      [\n        \"テッド\",\n        -11.727959632873535\n      ],\n      [\n        \"巣\",\n        -11.728020668029785\n      ],\n      [\n        \"▁救援\",\n        -11.728073120117188\n      ],\n      [\n        \"▁衛\",\n        -11.728263854980469\n      ],\n      [\n        \"けい\",\n        -11.728461265563965\n      ],\n      [\n        \"TR\",\n        -11.728641510009766\n      ],\n      [\n        \"▁バイエルン\",\n        -11.728731155395508\n      ],\n      [\n        \"tion\",\n        -11.728893280029297\n      ],\n      [\n        \"▁別名\",\n        -11.728925704956055\n      ],\n      [\n        \"▁艶\",\n        -11.729008674621582\n      ],\n      [\n        \"熟\",\n        -11.729016304016113\n      ],\n      [\n        \"▁暇\",\n        -11.72921085357666\n      ],\n      [\n        \"古代\",\n        -11.729259490966797\n      ],\n      [\n        \"▁ウィルス\",\n        -11.729290962219238\n      ],\n      [\n        \"▁石炭\",\n        -11.729668617248535\n      ],\n      [\n        \"サイズ\",\n        -11.729679107666016\n      ],\n      [\n        \"笠\",\n        -11.729736328125\n      ],\n      [\n        \"▁ヴァイオリン\",\n        -11.729799270629883\n      ],\n      [\n        \"^_^\",\n        -11.72989559173584\n      ],\n      [\n        \"▁控除\",\n        -11.729971885681152\n      ],\n      [\n        \"▁たん\",\n        -11.730027198791504\n      ],\n      [\n        \"▁飯田\",\n        -11.730182647705078\n      ],\n      [\n        \"▁スロー\",\n        -11.7304105758667\n      ],\n      [\n        \"▁爵位\",\n        -11.730411529541016\n      ],\n      [\n        \"▁稀\",\n        -11.730714797973633\n      ],\n      [\n        \"▁ちょ\",\n        -11.730838775634766\n      ],\n      [\n        \"▁っと\",\n        -11.731120109558105\n      ],\n      [\n        \"ソル\",\n        -11.73114013671875\n      ],\n      [\n        \"▁天正\",\n        -11.731173515319824\n      ],\n      [\n        \"▁暗い\",\n        -11.731406211853027\n      ],\n      [\n        \"▁買わ\",\n        -11.731466293334961\n      ],\n      [\n        \"5,000\",\n        -11.731467247009277\n      ],\n      [\n        \"キャン\",\n        -11.731549263000488\n      ],\n      [\n        \"▁使命\",\n        -11.731645584106445\n      ],\n      [\n        \"▁大西洋\",\n        -11.731993675231934\n      ],\n      [\n        \"▁包ま\",\n        -11.731999397277832\n      ],\n      [\n        \"▁電流\",\n        -11.732177734375\n      ],\n      [\n        \"賢\",\n        -11.732528686523438\n      ],\n      [\n        \"▁県民\",\n        -11.732532501220703\n      ],\n      [\n        \"▁支払わ\",\n        -11.732641220092773\n      ],\n      [\n        \"▁不十分\",\n        -11.732686996459961\n      ],\n      [\n        \"▁喧嘩\",\n        -11.732686996459961\n      ],\n      [\n        \"▁ヶ所\",\n        -11.732854843139648\n      ],\n      [\n        \"▁不在\",\n        -11.733016967773438\n      ],\n      [\n        \"敬\",\n        -11.73302936553955\n      ],\n      [\n        \"グマ\",\n        -11.733113288879395\n      ],\n      [\n        \"違\",\n        -11.733123779296875\n      ],\n      [\n        \"dr\",\n        -11.733206748962402\n      ],\n      [\n        \"尿\",\n        -11.73330020904541\n      ],\n      [\n        \"▁イス\",\n        -11.73343276977539\n      ],\n      [\n        \"▁昼間\",\n        -11.733516693115234\n      ],\n      [\n        \"ALL\",\n        -11.733556747436523\n      ],\n      [\n        \"▁備える\",\n        -11.73377799987793\n      ],\n      [\n        \"▁諏訪\",\n        -11.733938217163086\n      ],\n      [\n        \"選択\",\n        -11.733962059020996\n      ],\n      [\n        \"▁褒め\",\n        -11.733975410461426\n      ],\n      [\n        \"▁凄い\",\n        -11.733981132507324\n      ],\n      [\n        \"ach\",\n        -11.734086036682129\n      ],\n      [\n        \"▁耕\",\n        -11.73410701751709\n      ],\n      [\n        \"▁ふり\",\n        -11.734138488769531\n      ],\n      [\n        \"tro\",\n        -11.734325408935547\n      ],\n      [\n        \"▁初戦\",\n        -11.73434829711914\n      ],\n      [\n        \"▁吹\",\n        -11.734349250793457\n      ],\n      [\n        \"▁水泳\",\n        -11.734376907348633\n      ],\n      [\n        \"แ\",\n        -11.73437786102295\n      ],\n      [\n        \"▁引き出し\",\n        -11.734580993652344\n      ],\n      [\n        \"▁長岡\",\n        -11.734737396240234\n      ],\n      [\n        \"▁著しく\",\n        -11.734823226928711\n      ],\n      [\n        \"▁称する\",\n        -11.734894752502441\n      ],\n      [\n        \"▁しまったり\",\n        -11.734981536865234\n      ],\n      [\n        \"▁受け止め\",\n        -11.734981536865234\n      ],\n      [\n        \"▁不幸\",\n        -11.735098838806152\n      ],\n      [\n        \"▁ライヴ\",\n        -11.735371589660645\n      ],\n      [\n        \"way\",\n        -11.73547077178955\n      ],\n      [\n        \"▁たまたま\",\n        -11.735763549804688\n      ],\n      [\n        \"aka\",\n        -11.735857963562012\n      ],\n      [\n        \"▁ターボ\",\n        -11.735944747924805\n      ],\n      [\n        \"▁浪\",\n        -11.736114501953125\n      ],\n      [\n        \"卵\",\n        -11.736272811889648\n      ],\n      [\n        \"▁Office\",\n        -11.736371994018555\n      ],\n      [\n        \"▁AAA\",\n        -11.736401557922363\n      ],\n      [\n        \"▁チリ\",\n        -11.736592292785645\n      ],\n      [\n        \"▁尊敬\",\n        -11.73659896850586\n      ],\n      [\n        \"▁途上\",\n        -11.736738204956055\n      ],\n      [\n        \"les\",\n        -11.73681640625\n      ],\n      [\n        \"▁カーブ\",\n        -11.736832618713379\n      ],\n      [\n        \"▁幻想\",\n        -11.736837387084961\n      ],\n      [\n        \"▁野外\",\n        -11.736881256103516\n      ],\n      [\n        \"▁定理\",\n        -11.736970901489258\n      ],\n      [\n        \"ティブ\",\n        -11.737058639526367\n      ],\n      [\n        \"継\",\n        -11.737067222595215\n      ],\n      [\n        \"▁去\",\n        -11.737160682678223\n      ],\n      [\n        \"af\",\n        -11.737479209899902\n      ],\n      [\n        \"▁受け入れる\",\n        -11.737519264221191\n      ],\n      [\n        \"察\",\n        -11.738001823425293\n      ],\n      [\n        \"スティック\",\n        -11.73814582824707\n      ],\n      [\n        \"▁図り\",\n        -11.738149642944336\n      ],\n      [\n        \"▁わけだ\",\n        -11.738207817077637\n      ],\n      [\n        \"▁親族\",\n        -11.73824405670166\n      ],\n      [\n        \"アム\",\n        -11.738402366638184\n      ],\n      [\n        \"▁嬉しく\",\n        -11.738418579101562\n      ],\n      [\n        \"▁茎\",\n        -11.739232063293457\n      ],\n      [\n        \"▁究極\",\n        -11.739469528198242\n      ],\n      [\n        \"展\",\n        -11.739604949951172\n      ],\n      [\n        \"▁課金\",\n        -11.739778518676758\n      ],\n      [\n        \"▁バレンタイン\",\n        -11.739795684814453\n      ],\n      [\n        \"貫\",\n        -11.7400484085083\n      ],\n      [\n        \"▁取り寄せ\",\n        -11.740239143371582\n      ],\n      [\n        \"▁リメイク\",\n        -11.740409851074219\n      ],\n      [\n        \"▁アンチ\",\n        -11.74042797088623\n      ],\n      [\n        \"▁和解\",\n        -11.740459442138672\n      ],\n      [\n        \"▁そろそろ\",\n        -11.740673065185547\n      ],\n      [\n        \"替\",\n        -11.740882873535156\n      ],\n      [\n        \"SM\",\n        -11.74130630493164\n      ],\n      [\n        \"▁麦\",\n        -11.741390228271484\n      ],\n      [\n        \"▁促す\",\n        -11.741394996643066\n      ],\n      [\n        \"CL\",\n        -11.741753578186035\n      ],\n      [\n        \"ターズ\",\n        -11.741771697998047\n      ],\n      [\n        \"ics\",\n        -11.741926193237305\n      ],\n      [\n        \"=\",\n        -11.74205493927002\n      ],\n      [\n        \"▁アルゴリズム\",\n        -11.742283821105957\n      ],\n      [\n        \"▁覚える\",\n        -11.74239730834961\n      ],\n      [\n        \"幡\",\n        -11.742405891418457\n      ],\n      [\n        \"▁105\",\n        -11.742510795593262\n      ],\n      [\n        \"▁ジョンソン\",\n        -11.74281120300293\n      ],\n      [\n        \"▁変な\",\n        -11.742835998535156\n      ],\n      [\n        \"▁覚醒\",\n        -11.742879867553711\n      ],\n      [\n        \"▁降順\",\n        -11.742988586425781\n      ],\n      [\n        \"▁勧誘\",\n        -11.743026733398438\n      ],\n      [\n        \"▁スクリプト\",\n        -11.7431001663208\n      ],\n      [\n        \"▁度々\",\n        -11.743169784545898\n      ],\n      [\n        \"▁偵察\",\n        -11.74339771270752\n      ],\n      [\n        \"▁春日\",\n        -11.743427276611328\n      ],\n      [\n        \"ja\",\n        -11.743483543395996\n      ],\n      [\n        \"▁渋滞\",\n        -11.743621826171875\n      ],\n      [\n        \"▁振込\",\n        -11.743638038635254\n      ],\n      [\n        \"▁のだった\",\n        -11.743684768676758\n      ],\n      [\n        \"▁決戦\",\n        -11.743772506713867\n      ],\n      [\n        \"▁(^^)\",\n        -11.743846893310547\n      ],\n      [\n        \"▁艦長\",\n        -11.743931770324707\n      ],\n      [\n        \"▁演じ\",\n        -11.744094848632812\n      ],\n      [\n        \"PE\",\n        -11.744344711303711\n      ],\n      [\n        \"▁揚げ\",\n        -11.744453430175781\n      ],\n      [\n        \"▁精力\",\n        -11.744539260864258\n      ],\n      [\n        \"▁汁\",\n        -11.744715690612793\n      ],\n      [\n        \"由\",\n        -11.74472427368164\n      ],\n      [\n        \"ダウン\",\n        -11.744874000549316\n      ],\n      [\n        \"▁いざ\",\n        -11.744918823242188\n      ],\n      [\n        \"▁文法\",\n        -11.745475769042969\n      ],\n      [\n        \"▁ピッタリ\",\n        -11.745478630065918\n      ],\n      [\n        \"▁日産\",\n        -11.745552062988281\n      ],\n      [\n        \"▁デイリー\",\n        -11.74558162689209\n      ],\n      [\n        \"ier\",\n        -11.745681762695312\n      ],\n      [\n        \"▁盛期\",\n        -11.745720863342285\n      ],\n      [\n        \"▁丘陵\",\n        -11.745877265930176\n      ],\n      [\n        \"済\",\n        -11.745930671691895\n      ],\n      [\n        \"鏡\",\n        -11.746027946472168\n      ],\n      [\n        \"授\",\n        -11.746261596679688\n      ],\n      [\n        \"▁大田\",\n        -11.746354103088379\n      ],\n      [\n        \"▁新曲\",\n        -11.746381759643555\n      ],\n      [\n        \"▁姫路\",\n        -11.746426582336426\n      ],\n      [\n        \"→\",\n        -11.74664306640625\n      ],\n      [\n        \"gen\",\n        -11.746726036071777\n      ],\n      [\n        \"▁真理\",\n        -11.74679946899414\n      ],\n      [\n        \"▁欲\",\n        -11.746869087219238\n      ],\n      [\n        \"フェル\",\n        -11.746971130371094\n      ],\n      [\n        \"▁欠点\",\n        -11.74716567993164\n      ],\n      [\n        \"▁てん\",\n        -11.747479438781738\n      ],\n      [\n        \"デビュー\",\n        -11.747513771057129\n      ],\n      [\n        \"鑑\",\n        -11.747547149658203\n      ],\n      [\n        \"掲載\",\n        -11.7476224899292\n      ],\n      [\n        \"▁リンパ\",\n        -11.748025894165039\n      ],\n      [\n        \"ero\",\n        -11.74804973602295\n      ],\n      [\n        \"▁馬場\",\n        -11.748147964477539\n      ],\n      [\n        \"快\",\n        -11.748183250427246\n      ],\n      [\n        \"独\",\n        -11.74821662902832\n      ],\n      [\n        \"▁永遠\",\n        -11.748363494873047\n      ],\n      [\n        \"▁蒼\",\n        -11.748458862304688\n      ],\n      [\n        \"▁小田原\",\n        -11.748639106750488\n      ],\n      [\n        \"氷\",\n        -11.748727798461914\n      ],\n      [\n        \"▁スキ\",\n        -11.748779296875\n      ],\n      [\n        \"▁不安定\",\n        -11.748807907104492\n      ],\n      [\n        \"▁でしたら\",\n        -11.748924255371094\n      ],\n      [\n        \"▁種別\",\n        -11.749025344848633\n      ],\n      [\n        \"▁上旬\",\n        -11.749098777770996\n      ],\n      [\n        \"о\",\n        -11.749131202697754\n      ],\n      [\n        \"▁含める\",\n        -11.749157905578613\n      ],\n      [\n        \"たん\",\n        -11.749160766601562\n      ],\n      [\n        \"▁飲ま\",\n        -11.749432563781738\n      ],\n      [\n        \"▁ドリ\",\n        -11.749449729919434\n      ],\n      [\n        \"aku\",\n        -11.74975299835205\n      ],\n      [\n        \"▁μ\",\n        -11.749861717224121\n      ],\n      [\n        \"スリー\",\n        -11.750073432922363\n      ],\n      [\n        \"▁冬季\",\n        -11.750139236450195\n      ],\n      [\n        \"▁ハーブ\",\n        -11.750420570373535\n      ],\n      [\n        \"▁梁\",\n        -11.7508544921875\n      ],\n      [\n        \"▁両立\",\n        -11.750855445861816\n      ],\n      [\n        \"▁月曜\",\n        -11.750923156738281\n      ],\n      [\n        \"▁京成\",\n        -11.750934600830078\n      ],\n      [\n        \"そうした\",\n        -11.751009941101074\n      ],\n      [\n        \"▁2108\",\n        -11.751032829284668\n      ],\n      [\n        \"昭\",\n        -11.75109577178955\n      ],\n      [\n        \"▁輝く\",\n        -11.751104354858398\n      ],\n      [\n        \"欲\",\n        -11.751274108886719\n      ],\n      [\n        \"▁滅亡\",\n        -11.751379013061523\n      ],\n      [\n        \"ara\",\n        -11.751513481140137\n      ],\n      [\n        \"▁接客\",\n        -11.751551628112793\n      ],\n      [\n        \"▁水中\",\n        -11.751635551452637\n      ],\n      [\n        \"▁補強\",\n        -11.751797676086426\n      ],\n      [\n        \"▁MAX\",\n        -11.751832962036133\n      ],\n      [\n        \"かす\",\n        -11.752156257629395\n      ],\n      [\n        \"付き\",\n        -11.752176284790039\n      ],\n      [\n        \"薄\",\n        -11.752264022827148\n      ],\n      [\n        \"▁紫外線\",\n        -11.752266883850098\n      ],\n      [\n        \"▁セリフ\",\n        -11.75246810913086\n      ],\n      [\n        \"大人\",\n        -11.752496719360352\n      ],\n      [\n        \"▁フェリー\",\n        -11.752547264099121\n      ],\n      [\n        \"▁バグ\",\n        -11.752569198608398\n      ],\n      [\n        \"▁沼\",\n        -11.752715110778809\n      ],\n      [\n        \"▁白色\",\n        -11.75302505493164\n      ],\n      [\n        \"▁従軍\",\n        -11.753263473510742\n      ],\n      [\n        \"ペラ\",\n        -11.753339767456055\n      ],\n      [\n        \"▁自由な\",\n        -11.753347396850586\n      ],\n      [\n        \"we\",\n        -11.753570556640625\n      ],\n      [\n        \"▁信者\",\n        -11.753583908081055\n      ],\n      [\n        \"▁アナル\",\n        -11.753866195678711\n      ],\n      [\n        \"▁膨ら\",\n        -11.753999710083008\n      ],\n      [\n        \"▁ห\",\n        -11.754110336303711\n      ],\n      [\n        \"PH\",\n        -11.754146575927734\n      ],\n      [\n        \"▁撮る\",\n        -11.754252433776855\n      ],\n      [\n        \"▁Mon\",\n        -11.754316329956055\n      ],\n      [\n        \"▁移った\",\n        -11.754411697387695\n      ],\n      [\n        \"▁早速\",\n        -11.754427909851074\n      ],\n      [\n        \"▁ダンサー\",\n        -11.754691123962402\n      ],\n      [\n        \"▁ガリ\",\n        -11.754800796508789\n      ],\n      [\n        \"▁繁栄\",\n        -11.754842758178711\n      ],\n      [\n        \"▁平等\",\n        -11.754875183105469\n      ],\n      [\n        \"▁〒\",\n        -11.755023002624512\n      ],\n      [\n        \"ところで\",\n        -11.755069732666016\n      ],\n      [\n        \"▁之\",\n        -11.755107879638672\n      ],\n      [\n        \"tal\",\n        -11.755127906799316\n      ],\n      [\n        \"▁建国\",\n        -11.755192756652832\n      ],\n      [\n        \"▁天下\",\n        -11.75526237487793\n      ],\n      [\n        \"▁マルクス\",\n        -11.75532341003418\n      ],\n      [\n        \"▁うん\",\n        -11.755475044250488\n      ],\n      [\n        \"▁学名\",\n        -11.755483627319336\n      ],\n      [\n        \"▁Un\",\n        -11.755550384521484\n      ],\n      [\n        \"胎\",\n        -11.755576133728027\n      ],\n      [\n        \"▁EP\",\n        -11.755581855773926\n      ],\n      [\n        \"▁トリートメント\",\n        -11.755651473999023\n      ],\n      [\n        \"▁だんだん\",\n        -11.755727767944336\n      ],\n      [\n        \"▁山中\",\n        -11.755765914916992\n      ],\n      [\n        \"丈\",\n        -11.755767822265625\n      ],\n      [\n        \"▁決まる\",\n        -11.755880355834961\n      ],\n      [\n        \"衆\",\n        -11.755884170532227\n      ],\n      [\n        \"▁競\",\n        -11.755949974060059\n      ],\n      [\n        \"▁色んな\",\n        -11.75602912902832\n      ],\n      [\n        \"▁CP\",\n        -11.756040573120117\n      ],\n      [\n        \"ウイ\",\n        -11.756155967712402\n      ],\n      [\n        \"▁ぷ\",\n        -11.756254196166992\n      ],\n      [\n        \"▁救う\",\n        -11.756301879882812\n      ],\n      [\n        \"▁直ちに\",\n        -11.756404876708984\n      ],\n      [\n        \"▁ジャーナル\",\n        -11.756492614746094\n      ],\n      [\n        \"▁オファー\",\n        -11.756651878356934\n      ],\n      [\n        \"▁藤井\",\n        -11.756766319274902\n      ],\n      [\n        \"lan\",\n        -11.756778717041016\n      ],\n      [\n        \"▁本文\",\n        -11.756787300109863\n      ],\n      [\n        \"▁コットン\",\n        -11.756818771362305\n      ],\n      [\n        \"煙\",\n        -11.757068634033203\n      ],\n      [\n        \"蒲\",\n        -11.757157325744629\n      ],\n      [\n        \"▁協\",\n        -11.757187843322754\n      ],\n      [\n        \"▁果物\",\n        -11.757216453552246\n      ],\n      [\n        \"▁ぽっちゃり\",\n        -11.757430076599121\n      ],\n      [\n        \"▁個室\",\n        -11.757589340209961\n      ],\n      [\n        \"▁概ね\",\n        -11.757609367370605\n      ],\n      [\n        \"▁cbd\",\n        -11.757759094238281\n      ],\n      [\n        \"▁ジャクソン\",\n        -11.75836181640625\n      ],\n      [\n        \"▁ブドウ\",\n        -11.758400917053223\n      ],\n      [\n        \"▁テル\",\n        -11.75845718383789\n      ],\n      [\n        \"▁併\",\n        -11.758683204650879\n      ],\n      [\n        \"▁LA\",\n        -11.75877571105957\n      ],\n      [\n        \"▁サラダ\",\n        -11.758780479431152\n      ],\n      [\n        \"1964\",\n        -11.758810043334961\n      ],\n      [\n        \"▁教職\",\n        -11.758830070495605\n      ],\n      [\n        \"アク\",\n        -11.759032249450684\n      ],\n      [\n        \"プラス\",\n        -11.759088516235352\n      ],\n      [\n        \"▁琴\",\n        -11.759211540222168\n      ],\n      [\n        \"▁自律\",\n        -11.759410858154297\n      ],\n      [\n        \"▁だし\",\n        -11.759471893310547\n      ],\n      [\n        \"名称\",\n        -11.75955867767334\n      ],\n      [\n        \"▁盗塁\",\n        -11.759578704833984\n      ],\n      [\n        \"途中\",\n        -11.759827613830566\n      ],\n      [\n        \"str\",\n        -11.759903907775879\n      ],\n      [\n        \"珠\",\n        -11.760151863098145\n      ],\n      [\n        \"▁1900\",\n        -11.760233879089355\n      ],\n      [\n        \"▁眺め\",\n        -11.760272979736328\n      ],\n      [\n        \"▁南方\",\n        -11.760395050048828\n      ],\n      [\n        \"▁附\",\n        -11.760415077209473\n      ],\n      [\n        \"寝\",\n        -11.760597229003906\n      ],\n      [\n        \"▁標本\",\n        -11.760673522949219\n      ],\n      [\n        \"▁打つ\",\n        -11.760761260986328\n      ],\n      [\n        \"律\",\n        -11.76085376739502\n      ],\n      [\n        \"▁伺い\",\n        -11.760854721069336\n      ],\n      [\n        \"▁高崎\",\n        -11.760903358459473\n      ],\n      [\n        \"▁反論\",\n        -11.760986328125\n      ],\n      [\n        \"▁ウォ\",\n        -11.761102676391602\n      ],\n      [\n        \"▁レスラー\",\n        -11.761220932006836\n      ],\n      [\n        \"▁秀吉\",\n        -11.76123332977295\n      ],\n      [\n        \"▁久しぶりに\",\n        -11.761408805847168\n      ],\n      [\n        \"ニューヨーク\",\n        -11.761551856994629\n      ],\n      [\n        \"▁駐屯\",\n        -11.761611938476562\n      ],\n      [\n        \"▁去った\",\n        -11.761722564697266\n      ],\n      [\n        \"ひろ\",\n        -11.761727333068848\n      ],\n      [\n        \"▁Core\",\n        -11.76188850402832\n      ],\n      [\n        \"▁プロローグ\",\n        -11.761895179748535\n      ],\n      [\n        \"▁梱\",\n        -11.761980056762695\n      ],\n      [\n        \"▁ゲル\",\n        -11.76203727722168\n      ],\n      [\n        \"▁出入り\",\n        -11.76207447052002\n      ],\n      [\n        \"sk\",\n        -11.762261390686035\n      ],\n      [\n        \"▁エッセイ\",\n        -11.762297630310059\n      ],\n      [\n        \"▁引き継\",\n        -11.76234245300293\n      ],\n      [\n        \"抱\",\n        -11.76235294342041\n      ],\n      [\n        \"▁今月\",\n        -11.76236343383789\n      ],\n      [\n        \"貢\",\n        -11.76244068145752\n      ],\n      [\n        \"▁不全\",\n        -11.76248836517334\n      ],\n      [\n        \"▁BE\",\n        -11.762507438659668\n      ],\n      [\n        \"▁引き受け\",\n        -11.762697219848633\n      ],\n      [\n        \"▁わけに\",\n        -11.762702941894531\n      ],\n      [\n        \"ヴィア\",\n        -11.762927055358887\n      ],\n      [\n        \"Lock\",\n        -11.763002395629883\n      ],\n      [\n        \"▁あっ\",\n        -11.76301383972168\n      ],\n      [\n        \"幌\",\n        -11.763023376464844\n      ],\n      [\n        \"▁隙間\",\n        -11.763093948364258\n      ],\n      [\n        \"専\",\n        -11.763203620910645\n      ],\n      [\n        \"DO\",\n        -11.763283729553223\n      ],\n      [\n        \"▁那覇\",\n        -11.76342487335205\n      ],\n      [\n        \"▁発酵\",\n        -11.763513565063477\n      ],\n      [\n        \"ise\",\n        -11.763586044311523\n      ],\n      [\n        \"▁ランダム\",\n        -11.763800621032715\n      ],\n      [\n        \"AV\",\n        -11.763832092285156\n      ],\n      [\n        \"▁カルチャー\",\n        -11.763910293579102\n      ],\n      [\n        \"モンド\",\n        -11.763959884643555\n      ],\n      [\n        \"▁最短\",\n        -11.763986587524414\n      ],\n      [\n        \"▁可能だ\",\n        -11.764059066772461\n      ],\n      [\n        \"▁再婚\",\n        -11.764241218566895\n      ],\n      [\n        \"▁高層\",\n        -11.764253616333008\n      ],\n      [\n        \"▁望遠\",\n        -11.764423370361328\n      ],\n      [\n        \"▁∀\",\n        -11.764450073242188\n      ],\n      [\n        \"▁怖\",\n        -11.764469146728516\n      ],\n      [\n        \"▁羅\",\n        -11.764516830444336\n      ],\n      [\n        \"▁迫\",\n        -11.764564514160156\n      ],\n      [\n        \"1944\",\n        -11.764601707458496\n      ],\n      [\n        \"▁喉\",\n        -11.764649391174316\n      ],\n      [\n        \"▁長島\",\n        -11.764745712280273\n      ],\n      [\n        \"▁其\",\n        -11.765095710754395\n      ],\n      [\n        \"▁一同\",\n        -11.765481948852539\n      ],\n      [\n        \"▁荒川\",\n        -11.765546798706055\n      ],\n      [\n        \"▁4000\",\n        -11.765645980834961\n      ],\n      [\n        \"セス\",\n        -11.765654563903809\n      ],\n      [\n        \"▁ネイビー\",\n        -11.765746116638184\n      ],\n      [\n        \"▁運ば\",\n        -11.76587200164795\n      ],\n      [\n        \"▁マッケンジー\",\n        -11.765928268432617\n      ],\n      [\n        \"CI\",\n        -11.765992164611816\n      ],\n      [\n        \"▁動力\",\n        -11.766168594360352\n      ],\n      [\n        \"▁並べ\",\n        -11.766240119934082\n      ],\n      [\n        \"▁重ねる\",\n        -11.766280174255371\n      ],\n      [\n        \"▁辞職\",\n        -11.766559600830078\n      ],\n      [\n        \"▁見つかる\",\n        -11.766668319702148\n      ],\n      [\n        \"▁ヒトラー\",\n        -11.766743659973145\n      ],\n      [\n        \"duct\",\n        -11.766828536987305\n      ],\n      [\n        \"▁盛岡\",\n        -11.766947746276855\n      ],\n      [\n        \"自由\",\n        -11.767178535461426\n      ],\n      [\n        \"▁バター\",\n        -11.767243385314941\n      ],\n      [\n        \"▁遂げた\",\n        -11.767440795898438\n      ],\n      [\n        \"▁戻\",\n        -11.76744270324707\n      ],\n      [\n        \"▁ラグ\",\n        -11.767579078674316\n      ],\n      [\n        \"▁大蔵\",\n        -11.767748832702637\n      ],\n      [\n        \"わって\",\n        -11.767777442932129\n      ],\n      [\n        \"▁モチベーション\",\n        -11.76798152923584\n      ],\n      [\n        \"▁モリ\",\n        -11.76805305480957\n      ],\n      [\n        \"ぞう\",\n        -11.768186569213867\n      ],\n      [\n        \"▁死に\",\n        -11.768221855163574\n      ],\n      [\n        \"▁最上\",\n        -11.768372535705566\n      ],\n      [\n        \"▁抜く\",\n        -11.768484115600586\n      ],\n      [\n        \"っき\",\n        -11.76854419708252\n      ],\n      [\n        \"だからこそ\",\n        -11.768590927124023\n      ],\n      [\n        \"▁在位\",\n        -11.76859188079834\n      ],\n      [\n        \"ds\",\n        -11.768613815307617\n      ],\n      [\n        \"▁パッド\",\n        -11.768754959106445\n      ],\n      [\n        \"売り\",\n        -11.768765449523926\n      ],\n      [\n        \"▁アーム\",\n        -11.768853187561035\n      ],\n      [\n        \"ท\",\n        -11.76897144317627\n      ],\n      [\n        \"▁調べた\",\n        -11.768983840942383\n      ],\n      [\n        \"▁著名\",\n        -11.769278526306152\n      ],\n      [\n        \"▁アクセント\",\n        -11.769370079040527\n      ],\n      [\n        \"GI\",\n        -11.769384384155273\n      ],\n      [\n        \"▁挙\",\n        -11.76942253112793\n      ],\n      [\n        \"▁雌\",\n        -11.769423484802246\n      ],\n      [\n        \"▁1924\",\n        -11.769500732421875\n      ],\n      [\n        \"不動産\",\n        -11.769513130187988\n      ],\n      [\n        \"ビリティ\",\n        -11.769598007202148\n      ],\n      [\n        \"▁満点\",\n        -11.769612312316895\n      ],\n      [\n        \"アプリ\",\n        -11.769686698913574\n      ],\n      [\n        \"▁戦った\",\n        -11.769718170166016\n      ],\n      [\n        \"▁ヘンプ\",\n        -11.76972770690918\n      ],\n      [\n        \"ベリ\",\n        -11.769814491271973\n      ],\n      [\n        \"▁中東\",\n        -11.769816398620605\n      ],\n      [\n        \"宏\",\n        -11.769824981689453\n      ],\n      [\n        \"▁同行\",\n        -11.769993782043457\n      ],\n      [\n        \"▁あか\",\n        -11.770069122314453\n      ],\n      [\n        \"▁信濃\",\n        -11.770160675048828\n      ],\n      [\n        \"▁西区\",\n        -11.770185470581055\n      ],\n      [\n        \"▁恒星\",\n        -11.770230293273926\n      ],\n      [\n        \"新潟\",\n        -11.770337104797363\n      ],\n      [\n        \"▁ボルト\",\n        -11.770340919494629\n      ],\n      [\n        \"郵便\",\n        -11.770362854003906\n      ],\n      [\n        \"▁PL\",\n        -11.770462989807129\n      ],\n      [\n        \"▁ジョーンズ\",\n        -11.770546913146973\n      ],\n      [\n        \"hu\",\n        -11.770590782165527\n      ],\n      [\n        \"▁低減\",\n        -11.770635604858398\n      ],\n      [\n        \"クサ\",\n        -11.770641326904297\n      ],\n      [\n        \"▁1925\",\n        -11.770661354064941\n      ],\n      [\n        \"▁阿部\",\n        -11.770930290222168\n      ],\n      [\n        \"りゃ\",\n        -11.770992279052734\n      ],\n      [\n        \"▁船橋\",\n        -11.771215438842773\n      ],\n      [\n        \"▁Bo\",\n        -11.771462440490723\n      ],\n      [\n        \"しか\",\n        -11.771546363830566\n      ],\n      [\n        \"▁リッチ\",\n        -11.771682739257812\n      ],\n      [\n        \"▁鞍\",\n        -11.771928787231445\n      ],\n      [\n        \"▁BA\",\n        -11.771953582763672\n      ],\n      [\n        \"▁梨\",\n        -11.772132873535156\n      ],\n      [\n        \"▁落ちた\",\n        -11.772148132324219\n      ],\n      [\n        \"▁指して\",\n        -11.77226734161377\n      ],\n      [\n        \"▁率い\",\n        -11.772342681884766\n      ],\n      [\n        \"▁改編\",\n        -11.772431373596191\n      ],\n      [\n        \"▁GM\",\n        -11.772541999816895\n      ],\n      [\n        \"▁ループ\",\n        -11.772552490234375\n      ],\n      [\n        \"▁避けて\",\n        -11.772683143615723\n      ],\n      [\n        \"生活\",\n        -11.772871971130371\n      ],\n      [\n        \"▁未経験\",\n        -11.773155212402344\n      ],\n      [\n        \"けば\",\n        -11.77315616607666\n      ],\n      [\n        \"▁出撃\",\n        -11.773348808288574\n      ],\n      [\n        \"怒\",\n        -11.773412704467773\n      ],\n      [\n        \"ami\",\n        -11.773598670959473\n      ],\n      [\n        \"▁止\",\n        -11.773614883422852\n      ],\n      [\n        \"▁Rights\",\n        -11.773706436157227\n      ],\n      [\n        \"▁啓\",\n        -11.773792266845703\n      ],\n      [\n        \"▁刃\",\n        -11.773894309997559\n      ],\n      [\n        \"▁あらすじ\",\n        -11.774068832397461\n      ],\n      [\n        \"▁増強\",\n        -11.77410888671875\n      ],\n      [\n        \"▁ヘリコプター\",\n        -11.774166107177734\n      ],\n      [\n        \"▁丹\",\n        -11.774206161499023\n      ],\n      [\n        \"▁虹\",\n        -11.774274826049805\n      ],\n      [\n        \"▁バブル\",\n        -11.774320602416992\n      ],\n      [\n        \"▁操\",\n        -11.774397850036621\n      ],\n      [\n        \"提\",\n        -11.774408340454102\n      ],\n      [\n        \"▁今週\",\n        -11.774500846862793\n      ],\n      [\n        \"▁樹立\",\n        -11.77454948425293\n      ],\n      [\n        \"▁取り入れた\",\n        -11.774645805358887\n      ],\n      [\n        \"▁とくに\",\n        -11.774662971496582\n      ],\n      [\n        \"▁混ぜ\",\n        -11.77471923828125\n      ],\n      [\n        \"▁破綻\",\n        -11.774856567382812\n      ],\n      [\n        \"かって\",\n        -11.774856567382812\n      ],\n      [\n        \"威\",\n        -11.774979591369629\n      ],\n      [\n        \"▁警視\",\n        -11.77508544921875\n      ],\n      [\n        \"▁悩む\",\n        -11.775086402893066\n      ],\n      [\n        \"従って\",\n        -11.775164604187012\n      ],\n      [\n        \"▁役職\",\n        -11.775252342224121\n      ],\n      [\n        \"妙\",\n        -11.775311470031738\n      ],\n      [\n        \"ぐり\",\n        -11.77540397644043\n      ],\n      [\n        \"譜\",\n        -11.775456428527832\n      ],\n      [\n        \"▁異動\",\n        -11.77563190460205\n      ],\n      [\n        \"use\",\n        -11.775744438171387\n      ],\n      [\n        \"チル\",\n        -11.775829315185547\n      ],\n      [\n        \"▁友好\",\n        -11.77593994140625\n      ],\n      [\n        \"▁イケメン\",\n        -11.776183128356934\n      ],\n      [\n        \"ARD\",\n        -11.776240348815918\n      ],\n      [\n        \"▁婚約\",\n        -11.776248931884766\n      ],\n      [\n        \"▁メロディ\",\n        -11.776310920715332\n      ],\n      [\n        \"oy\",\n        -11.776400566101074\n      ],\n      [\n        \"▁相違\",\n        -11.776447296142578\n      ],\n      [\n        \"▁継ぐ\",\n        -11.776514053344727\n      ],\n      [\n        \"▁民衆\",\n        -11.776515007019043\n      ],\n      [\n        \"▁悲劇\",\n        -11.776552200317383\n      ],\n      [\n        \"プレイ\",\n        -11.776605606079102\n      ],\n      [\n        \"1967\",\n        -11.776618957519531\n      ],\n      [\n        \"▁慎重に\",\n        -11.776725769042969\n      ],\n      [\n        \"アルバム\",\n        -11.776738166809082\n      ],\n      [\n        \"▁渡さ\",\n        -11.777012825012207\n      ],\n      [\n        \"ドウ\",\n        -11.777175903320312\n      ],\n      [\n        \"▁川口\",\n        -11.777289390563965\n      ],\n      [\n        \"▁サイエンス\",\n        -11.777323722839355\n      ],\n      [\n        \"▁ムーン\",\n        -11.777331352233887\n      ],\n      [\n        \"▁日頃\",\n        -11.777460098266602\n      ],\n      [\n        \"▁アドベンチャー\",\n        -11.777463912963867\n      ],\n      [\n        \"▁バレー\",\n        -11.777559280395508\n      ],\n      [\n        \"ラマ\",\n        -11.777624130249023\n      ],\n      [\n        \"▁考えれば\",\n        -11.777691841125488\n      ],\n      [\n        \"軌\",\n        -11.777708053588867\n      ],\n      [\n        \"ต\",\n        -11.777848243713379\n      ],\n      [\n        \"▁フリードリヒ\",\n        -11.777859687805176\n      ],\n      [\n        \"パソコン\",\n        -11.778079986572266\n      ],\n      [\n        \"ver\",\n        -11.778347969055176\n      ],\n      [\n        \"▁どおり\",\n        -11.778575897216797\n      ],\n      [\n        \"▁受章\",\n        -11.778688430786133\n      ],\n      [\n        \"▁数百\",\n        -11.778841018676758\n      ],\n      [\n        \"コロナ\",\n        -11.779012680053711\n      ],\n      [\n        \"▁API\",\n        -11.77904987335205\n      ],\n      [\n        \"▁木更津\",\n        -11.77907943725586\n      ],\n      [\n        \"塁\",\n        -11.77918815612793\n      ],\n      [\n        \"▁神聖\",\n        -11.779226303100586\n      ],\n      [\n        \"▁石垣\",\n        -11.77927303314209\n      ],\n      [\n        \"rea\",\n        -11.779332160949707\n      ],\n      [\n        \"▁充分\",\n        -11.779873847961426\n      ],\n      [\n        \"▁ジャー\",\n        -11.779953956604004\n      ],\n      [\n        \"▁勅\",\n        -11.779958724975586\n      ],\n      [\n        \"▁フェイ\",\n        -11.780125617980957\n      ],\n      [\n        \"▁中退\",\n        -11.780146598815918\n      ],\n      [\n        \"▁ディア\",\n        -11.780153274536133\n      ],\n      [\n        \"様な\",\n        -11.780698776245117\n      ],\n      [\n        \"▁マウント\",\n        -11.780713081359863\n      ],\n      [\n        \"▁タブ\",\n        -11.780808448791504\n      ],\n      [\n        \"クシ\",\n        -11.780815124511719\n      ],\n      [\n        \"▁守ら\",\n        -11.780837059020996\n      ],\n      [\n        \"▁アダム\",\n        -11.780867576599121\n      ],\n      [\n        \"▁細川\",\n        -11.780921936035156\n      ],\n      [\n        \"▁テラス\",\n        -11.78105640411377\n      ],\n      [\n        \"ミヤ\",\n        -11.781092643737793\n      ],\n      [\n        \"▁トライアル\",\n        -11.78114128112793\n      ],\n      [\n        \"▁含有\",\n        -11.78125286102295\n      ],\n      [\n        \"▁ほん\",\n        -11.781367301940918\n      ],\n      [\n        \"▁敷設\",\n        -11.78140640258789\n      ],\n      [\n        \"ウエア\",\n        -11.781656265258789\n      ],\n      [\n        \"▁名作\",\n        -11.781895637512207\n      ],\n      [\n        \"件\",\n        -11.782062530517578\n      ],\n      [\n        \"▁不振\",\n        -11.782392501831055\n      ],\n      [\n        \"▁部署\",\n        -11.782966613769531\n      ],\n      [\n        \"AG\",\n        -11.783052444458008\n      ],\n      [\n        \"▁挟んで\",\n        -11.783166885375977\n      ],\n      [\n        \"▁ja\",\n        -11.78317642211914\n      ],\n      [\n        \"掛\",\n        -11.783275604248047\n      ],\n      [\n        \"▁201\",\n        -11.783341407775879\n      ],\n      [\n        \"ita\",\n        -11.783604621887207\n      ],\n      [\n        \"ere\",\n        -11.783638954162598\n      ],\n      [\n        \"▁師匠\",\n        -11.784013748168945\n      ],\n      [\n        \"営業\",\n        -11.784148216247559\n      ],\n      [\n        \"▁高温\",\n        -11.784271240234375\n      ],\n      [\n        \"荒\",\n        -11.7843599319458\n      ],\n      [\n        \"▁朝廷\",\n        -11.784476280212402\n      ],\n      [\n        \"ベスト\",\n        -11.784525871276855\n      ],\n      [\n        \"▁アッ\",\n        -11.784774780273438\n      ],\n      [\n        \"▁頂点\",\n        -11.784814834594727\n      ],\n      [\n        \"▁リュック\",\n        -11.78482723236084\n      ],\n      [\n        \"▁ad\",\n        -11.785024642944336\n      ],\n      [\n        \"▁交易\",\n        -11.785030364990234\n      ],\n      [\n        \"モント\",\n        -11.78508472442627\n      ],\n      [\n        \"▁1923\",\n        -11.785120964050293\n      ],\n      [\n        \"▁漂\",\n        -11.785224914550781\n      ],\n      [\n        \"福島\",\n        -11.785478591918945\n      ],\n      [\n        \"▁パズル\",\n        -11.78554630279541\n      ],\n      [\n        \"▁イースト\",\n        -11.785747528076172\n      ],\n      [\n        \"▁農村\",\n        -11.785833358764648\n      ],\n      [\n        \"▁対称\",\n        -11.785863876342773\n      ],\n      [\n        \"▁左翼\",\n        -11.785871505737305\n      ],\n      [\n        \"▁整体\",\n        -11.785917282104492\n      ],\n      [\n        \"▁プロセッサ\",\n        -11.78603744506836\n      ],\n      [\n        \"NI\",\n        -11.786109924316406\n      ],\n      [\n        \"イザー\",\n        -11.786112785339355\n      ],\n      [\n        \"▁サポーター\",\n        -11.786147117614746\n      ],\n      [\n        \"▁多彩な\",\n        -11.786184310913086\n      ],\n      [\n        \"バリー\",\n        -11.786198616027832\n      ],\n      [\n        \"▁イル\",\n        -11.786213874816895\n      ],\n      [\n        \"▁奪い\",\n        -11.786446571350098\n      ],\n      [\n        \"va\",\n        -11.786505699157715\n      ],\n      [\n        \"▁孔\",\n        -11.786620140075684\n      ],\n      [\n        \"▁プロフェッショナル\",\n        -11.786649703979492\n      ],\n      [\n        \"1940\",\n        -11.786657333374023\n      ],\n      [\n        \"▁角川\",\n        -11.786809921264648\n      ],\n      [\n        \"ドア\",\n        -11.786821365356445\n      ],\n      [\n        \"▁輩出\",\n        -11.787116050720215\n      ],\n      [\n        \"▁高かった\",\n        -11.787174224853516\n      ],\n      [\n        \"▁おじさん\",\n        -11.787271499633789\n      ],\n      [\n        \"▁コト\",\n        -11.787278175354004\n      ],\n      [\n        \"ボス\",\n        -11.787393569946289\n      ],\n      [\n        \"鮮\",\n        -11.78757381439209\n      ],\n      [\n        \"モンクレール\",\n        -11.787737846374512\n      ],\n      [\n        \"▁多大な\",\n        -11.787741661071777\n      ],\n      [\n        \"▁掛けて\",\n        -11.787857055664062\n      ],\n      [\n        \"vo\",\n        -11.787972450256348\n      ],\n      [\n        \"▁闘\",\n        -11.7880220413208\n      ],\n      [\n        \"▁間違え\",\n        -11.788057327270508\n      ],\n      [\n        \"女子\",\n        -11.788080215454102\n      ],\n      [\n        \"▁藤田\",\n        -11.788195610046387\n      ],\n      [\n        \"▁導\",\n        -11.788445472717285\n      ],\n      [\n        \"▁単一\",\n        -11.789499282836914\n      ],\n      [\n        \"▁水曜日\",\n        -11.78974437713623\n      ],\n      [\n        \"▁恐竜\",\n        -11.789999961853027\n      ],\n      [\n        \"▁如\",\n        -11.79002857208252\n      ],\n      [\n        \"▁算出\",\n        -11.790225982666016\n      ],\n      [\n        \"▁大体\",\n        -11.790291786193848\n      ],\n      [\n        \"▁某\",\n        -11.790337562561035\n      ],\n      [\n        \"▁赴任\",\n        -11.790379524230957\n      ],\n      [\n        \"▁On\",\n        -11.790449142456055\n      ],\n      [\n        \"▁フレーズ\",\n        -11.79046630859375\n      ],\n      [\n        \"ミック\",\n        -11.790594100952148\n      ],\n      [\n        \"▁行ける\",\n        -11.790600776672363\n      ],\n      [\n        \"▁怠\",\n        -11.790847778320312\n      ],\n      [\n        \"▁FAX\",\n        -11.791279792785645\n      ],\n      [\n        \"▁発祥\",\n        -11.791288375854492\n      ],\n      [\n        \"▁視察\",\n        -11.791577339172363\n      ],\n      [\n        \"▁牝馬\",\n        -11.791703224182129\n      ],\n      [\n        \"▁持参\",\n        -11.791884422302246\n      ],\n      [\n        \"▁支出\",\n        -11.792160987854004\n      ],\n      [\n        \"▁有し\",\n        -11.79256534576416\n      ],\n      [\n        \"▁珍\",\n        -11.792587280273438\n      ],\n      [\n        \"▁膨大な\",\n        -11.792619705200195\n      ],\n      [\n        \"▁Free\",\n        -11.792694091796875\n      ],\n      [\n        \"▁And\",\n        -11.792724609375\n      ],\n      [\n        \"▁助ける\",\n        -11.792767524719238\n      ],\n      [\n        \"▁面白く\",\n        -11.79280948638916\n      ],\n      [\n        \"騎\",\n        -11.793021202087402\n      ],\n      [\n        \"▁奥さん\",\n        -11.793205261230469\n      ],\n      [\n        \"▁ジュース\",\n        -11.79322624206543\n      ],\n      [\n        \"▁ジェネリック\",\n        -11.793341636657715\n      ],\n      [\n        \"▁ボイス\",\n        -11.793469429016113\n      ],\n      [\n        \"▁できたら\",\n        -11.793562889099121\n      ],\n      [\n        \"あまり\",\n        -11.793604850769043\n      ],\n      [\n        \"▁エピローグ\",\n        -11.793733596801758\n      ],\n      [\n        \"▁アール\",\n        -11.793734550476074\n      ],\n      [\n        \"▁昇順\",\n        -11.793787956237793\n      ],\n      [\n        \"ツキ\",\n        -11.793869972229004\n      ],\n      [\n        \"▁サラリーマン\",\n        -11.793927192687988\n      ],\n      [\n        \"ACE\",\n        -11.794029235839844\n      ],\n      [\n        \"▁驚\",\n        -11.794059753417969\n      ],\n      [\n        \"▁豊かに\",\n        -11.79418659210205\n      ],\n      [\n        \"▁アルファ\",\n        -11.794320106506348\n      ],\n      [\n        \"▁おそれ\",\n        -11.794321060180664\n      ],\n      [\n        \"▁狙う\",\n        -11.794525146484375\n      ],\n      [\n        \"▁つくば\",\n        -11.794665336608887\n      ],\n      [\n        \"▁1919\",\n        -11.794716835021973\n      ],\n      [\n        \"▁野党\",\n        -11.794822692871094\n      ],\n      [\n        \"よし\",\n        -11.794878005981445\n      ],\n      [\n        \"▁終点\",\n        -11.794912338256836\n      ],\n      [\n        \"囲\",\n        -11.795012474060059\n      ],\n      [\n        \"▁患\",\n        -11.795199394226074\n      ],\n      [\n        \"ホール\",\n        -11.795251846313477\n      ],\n      [\n        \"ji\",\n        -11.795472145080566\n      ],\n      [\n        \"fl\",\n        -11.795539855957031\n      ],\n      [\n        \"▁聞け\",\n        -11.795586585998535\n      ],\n      [\n        \"▁禅\",\n        -11.795621871948242\n      ],\n      [\n        \"▁レイン\",\n        -11.795671463012695\n      ],\n      [\n        \"ーダ\",\n        -11.795823097229004\n      ],\n      [\n        \"▁実写\",\n        -11.79592227935791\n      ],\n      [\n        \"澄\",\n        -11.796156883239746\n      ],\n      [\n        \"▁乃木坂\",\n        -11.796167373657227\n      ],\n      [\n        \"▁あっという間\",\n        -11.796222686767578\n      ],\n      [\n        \"▁招\",\n        -11.79640007019043\n      ],\n      [\n        \"▁向こう\",\n        -11.79647159576416\n      ],\n      [\n        \"▁入国\",\n        -11.796615600585938\n      ],\n      [\n        \"hat\",\n        -11.796670913696289\n      ],\n      [\n        \"▁正当\",\n        -11.796716690063477\n      ],\n      [\n        \"ッサー\",\n        -11.796743392944336\n      ],\n      [\n        \"▁広大な\",\n        -11.796939849853516\n      ],\n      [\n        \"雀\",\n        -11.797069549560547\n      ],\n      [\n        \"▁隅\",\n        -11.797130584716797\n      ],\n      [\n        \"NS\",\n        -11.797203063964844\n      ],\n      [\n        \"▁港湾\",\n        -11.797204971313477\n      ],\n      [\n        \"▁DO\",\n        -11.797240257263184\n      ],\n      [\n        \"▁干渉\",\n        -11.797256469726562\n      ],\n      [\n        \"▁虐殺\",\n        -11.797330856323242\n      ],\n      [\n        \"▁乗降\",\n        -11.797351837158203\n      ],\n      [\n        \"▁買える\",\n        -11.797370910644531\n      ],\n      [\n        \"健\",\n        -11.797391891479492\n      ],\n      [\n        \"▁調味料\",\n        -11.79780101776123\n      ],\n      [\n        \"▁ヶ月間\",\n        -11.797894477844238\n      ],\n      [\n        \"▁解任\",\n        -11.798232078552246\n      ],\n      [\n        \"▁気に入って\",\n        -11.798338890075684\n      ],\n      [\n        \"▁選べる\",\n        -11.798355102539062\n      ],\n      [\n        \"▁高架\",\n        -11.798377990722656\n      ],\n      [\n        \"▁砂漠\",\n        -11.798434257507324\n      ],\n      [\n        \"▁番線\",\n        -11.798521041870117\n      ],\n      [\n        \"▁増やして\",\n        -11.798705101013184\n      ],\n      [\n        \"▁多岐\",\n        -11.798778533935547\n      ],\n      [\n        \"▁揺れ\",\n        -11.798927307128906\n      ],\n      [\n        \"▁ピック\",\n        -11.799068450927734\n      ],\n      [\n        \"▁自家\",\n        -11.799177169799805\n      ],\n      [\n        \"YA\",\n        -11.799249649047852\n      ],\n      [\n        \"UT\",\n        -11.799651145935059\n      ],\n      [\n        \"▁1918\",\n        -11.79974365234375\n      ],\n      [\n        \"▁招集\",\n        -11.79979133605957\n      ],\n      [\n        \"▁1927\",\n        -11.79979419708252\n      ],\n      [\n        \"▁単純に\",\n        -11.799861907958984\n      ],\n      [\n        \"化学\",\n        -11.799861907958984\n      ],\n      [\n        \"ベリー\",\n        -11.799898147583008\n      ],\n      [\n        \"▁威\",\n        -11.799956321716309\n      ],\n      [\n        \"ネーション\",\n        -11.800095558166504\n      ],\n      [\n        \"抜\",\n        -11.800116539001465\n      ],\n      [\n        \"事務\",\n        -11.800216674804688\n      ],\n      [\n        \"曹\",\n        -11.800374984741211\n      ],\n      [\n        \"▁ロマン\",\n        -11.800434112548828\n      ],\n      [\n        \"▁デニム\",\n        -11.800592422485352\n      ],\n      [\n        \"ムズ\",\n        -11.800697326660156\n      ],\n      [\n        \"▁裁\",\n        -11.800711631774902\n      ],\n      [\n        \"敷\",\n        -11.800838470458984\n      ],\n      [\n        \"もん\",\n        -11.80111312866211\n      ],\n      [\n        \"▁優良\",\n        -11.801255226135254\n      ],\n      [\n        \"▁リュ\",\n        -11.80125617980957\n      ],\n      [\n        \"LI\",\n        -11.801265716552734\n      ],\n      [\n        \"▁告げ\",\n        -11.801294326782227\n      ],\n      [\n        \"▁セントラル\",\n        -11.801301956176758\n      ],\n      [\n        \"den\",\n        -11.801316261291504\n      ],\n      [\n        \"ぷ\",\n        -11.801785469055176\n      ],\n      [\n        \"▁きれいな\",\n        -11.801824569702148\n      ],\n      [\n        \"自動車\",\n        -11.801858901977539\n      ],\n      [\n        \"▁布団\",\n        -11.801891326904297\n      ],\n      [\n        \"▁セレ\",\n        -11.802106857299805\n      ],\n      [\n        \"▁✨\",\n        -11.802186012268066\n      ],\n      [\n        \"大きな\",\n        -11.802312850952148\n      ],\n      [\n        \"▁Dr\",\n        -11.802351951599121\n      ],\n      [\n        \"▁近藤\",\n        -11.802464485168457\n      ],\n      [\n        \"▁併合\",\n        -11.80251693725586\n      ],\n      [\n        \"▁属し\",\n        -11.802556037902832\n      ],\n      [\n        \"▁揚\",\n        -11.802563667297363\n      ],\n      [\n        \"▁He\",\n        -11.802593231201172\n      ],\n      [\n        \"▁募\",\n        -11.802599906921387\n      ],\n      [\n        \"答\",\n        -11.80269718170166\n      ],\n      [\n        \"▁美味しく\",\n        -11.802735328674316\n      ],\n      [\n        \"▁クリスチャン\",\n        -11.802767753601074\n      ],\n      [\n        \"▁起因\",\n        -11.80285358428955\n      ],\n      [\n        \"▁岬\",\n        -11.8031587600708\n      ],\n      [\n        \"▁舐め\",\n        -11.803231239318848\n      ],\n      [\n        \"▁真似\",\n        -11.803323745727539\n      ],\n      [\n        \"▁まとめる\",\n        -11.803420066833496\n      ],\n      [\n        \"画像\",\n        -11.803810119628906\n      ],\n      [\n        \"▁Power\",\n        -11.803852081298828\n      ],\n      [\n        \"▁ベア\",\n        -11.803953170776367\n      ],\n      [\n        \"▁デン\",\n        -11.803974151611328\n      ],\n      [\n        \"oll\",\n        -11.804204940795898\n      ],\n      [\n        \"▁MV\",\n        -11.80435562133789\n      ],\n      [\n        \"com\",\n        -11.804438591003418\n      ],\n      [\n        \"▁仕方ない\",\n        -11.804490089416504\n      ],\n      [\n        \"▁漬け\",\n        -11.804583549499512\n      ],\n      [\n        \"▁ひら\",\n        -11.804659843444824\n      ],\n      [\n        \"欠\",\n        -11.804680824279785\n      ],\n      [\n        \"▁スキャン\",\n        -11.804694175720215\n      ],\n      [\n        \"▁負う\",\n        -11.804769515991211\n      ],\n      [\n        \"婦\",\n        -11.804888725280762\n      ],\n      [\n        \"▁州立\",\n        -11.8049955368042\n      ],\n      [\n        \"デリ\",\n        -11.8050537109375\n      ],\n      [\n        \"魂\",\n        -11.805070877075195\n      ],\n      [\n        \"LC\",\n        -11.8051176071167\n      ],\n      [\n        \"▁会津\",\n        -11.80521297454834\n      ],\n      [\n        \"row\",\n        -11.805380821228027\n      ],\n      [\n        \"▁ミク\",\n        -11.805412292480469\n      ],\n      [\n        \"かれ\",\n        -11.805595397949219\n      ],\n      [\n        \"▁笹\",\n        -11.805764198303223\n      ],\n      [\n        \"会場\",\n        -11.805822372436523\n      ],\n      [\n        \"▁顕\",\n        -11.805879592895508\n      ],\n      [\n        \"▁115\",\n        -11.80592155456543\n      ],\n      [\n        \"▁ピア\",\n        -11.805974960327148\n      ],\n      [\n        \"▁アース\",\n        -11.806144714355469\n      ],\n      [\n        \"おそらく\",\n        -11.806145668029785\n      ],\n      [\n        \"▁つれ\",\n        -11.806434631347656\n      ],\n      [\n        \"▁すぎた\",\n        -11.806530952453613\n      ],\n      [\n        \"とりあえず\",\n        -11.806625366210938\n      ],\n      [\n        \"▁除外\",\n        -11.80663776397705\n      ],\n      [\n        \"フィル\",\n        -11.806676864624023\n      ],\n      [\n        \"▁相次いで\",\n        -11.806720733642578\n      ],\n      [\n        \"▁勧告\",\n        -11.806939125061035\n      ],\n      [\n        \"▁様々\",\n        -11.806990623474121\n      ],\n      [\n        \"▁嬉しかった\",\n        -11.807028770446777\n      ],\n      [\n        \"▁ハリケーン\",\n        -11.80717658996582\n      ],\n      [\n        \"伸\",\n        -11.807282447814941\n      ],\n      [\n        \"▁Si\",\n        -11.807377815246582\n      ],\n      [\n        \"▁傘\",\n        -11.807387351989746\n      ],\n      [\n        \"NC\",\n        -11.807503700256348\n      ],\n      [\n        \"▁オーガニック\",\n        -11.807595252990723\n      ],\n      [\n        \"▁海域\",\n        -11.807609558105469\n      ],\n      [\n        \"▁祀\",\n        -11.80763053894043\n      ],\n      [\n        \"▁ライオン\",\n        -11.807851791381836\n      ],\n      [\n        \"▁あお\",\n        -11.807941436767578\n      ],\n      [\n        \"▁遠隔\",\n        -11.807979583740234\n      ],\n      [\n        \"ext\",\n        -11.808052062988281\n      ],\n      [\n        \"▁1911\",\n        -11.80809497833252\n      ],\n      [\n        \"▁Black\",\n        -11.8081693649292\n      ],\n      [\n        \"▁ブルガリア\",\n        -11.808198928833008\n      ],\n      [\n        \"▁007\",\n        -11.808215141296387\n      ],\n      [\n        \"▁在任\",\n        -11.80826473236084\n      ],\n      [\n        \"ラジオ\",\n        -11.808387756347656\n      ],\n      [\n        \"▁アンサンブル\",\n        -11.808523178100586\n      ],\n      [\n        \"▁シルエット\",\n        -11.808530807495117\n      ],\n      [\n        \"地方\",\n        -11.808636665344238\n      ],\n      [\n        \"▁町田\",\n        -11.808828353881836\n      ],\n      [\n        \"ä\",\n        -11.808918952941895\n      ],\n      [\n        \"▁就\",\n        -11.809012413024902\n      ],\n      [\n        \"▁こなす\",\n        -11.809159278869629\n      ],\n      [\n        \"▁志向\",\n        -11.809171676635742\n      ],\n      [\n        \"▁高まる\",\n        -11.80925178527832\n      ],\n      [\n        \"▁集計\",\n        -11.809280395507812\n      ],\n      [\n        \"▁ストラ\",\n        -11.809391021728516\n      ],\n      [\n        \"▁チュ\",\n        -11.809439659118652\n      ],\n      [\n        \"▁大谷\",\n        -11.80961799621582\n      ],\n      [\n        \"▁頼り\",\n        -11.809699058532715\n      ],\n      [\n        \"コル\",\n        -11.809797286987305\n      ],\n      [\n        \"▁後部\",\n        -11.809922218322754\n      ],\n      [\n        \"▁だいたい\",\n        -11.809932708740234\n      ],\n      [\n        \"キョ\",\n        -11.810154914855957\n      ],\n      [\n        \"BB\",\n        -11.810458183288574\n      ],\n      [\n        \"▁導き\",\n        -11.810532569885254\n      ],\n      [\n        \"▁殿堂\",\n        -11.810821533203125\n      ],\n      [\n        \"へ\",\n        -11.810929298400879\n      ],\n      [\n        \"▁ビームス\",\n        -11.810970306396484\n      ],\n      [\n        \"▁慎\",\n        -11.810972213745117\n      ],\n      [\n        \"▁河口\",\n        -11.811018943786621\n      ],\n      [\n        \"▁いつまでも\",\n        -11.811339378356934\n      ],\n      [\n        \"▁列島\",\n        -11.811454772949219\n      ],\n      [\n        \"▁この世\",\n        -11.811609268188477\n      ],\n      [\n        \"▁朝日新聞\",\n        -11.811683654785156\n      ],\n      [\n        \"▁馴染み\",\n        -11.811697959899902\n      ],\n      [\n        \"狼\",\n        -11.811720848083496\n      ],\n      [\n        \"▁府中\",\n        -11.81178092956543\n      ],\n      [\n        \"▁テー\",\n        -11.811908721923828\n      ],\n      [\n        \"▁頭皮\",\n        -11.811919212341309\n      ],\n      [\n        \"▁現れて\",\n        -11.811942100524902\n      ],\n      [\n        \"▁はずな\",\n        -11.8120756149292\n      ],\n      [\n        \"▁Internet\",\n        -11.812348365783691\n      ],\n      [\n        \"▁ロイ\",\n        -11.81241512298584\n      ],\n      [\n        \"▁沈没\",\n        -11.812507629394531\n      ],\n      [\n        \"DR\",\n        -11.812524795532227\n      ],\n      [\n        \"▁縛り\",\n        -11.812860488891602\n      ],\n      [\n        \"▁your\",\n        -11.812919616699219\n      ],\n      [\n        \"min\",\n        -11.813063621520996\n      ],\n      [\n        \"▁空いて\",\n        -11.813156127929688\n      ],\n      [\n        \"クロス\",\n        -11.813222885131836\n      ],\n      [\n        \"▁支流\",\n        -11.813294410705566\n      ],\n      [\n        \"▁テント\",\n        -11.813586235046387\n      ],\n      [\n        \"▁独身\",\n        -11.813589096069336\n      ],\n      [\n        \"販売\",\n        -11.814094543457031\n      ],\n      [\n        \"降\",\n        -11.814148902893066\n      ],\n      [\n        \"▁染色\",\n        -11.8143892288208\n      ],\n      [\n        \"だけど\",\n        -11.814471244812012\n      ],\n      [\n        \"▁白石\",\n        -11.814915657043457\n      ],\n      [\n        \"▁アミノ酸\",\n        -11.81496810913086\n      ],\n      [\n        \"伏\",\n        -11.815048217773438\n      ],\n      [\n        \"▁Inter\",\n        -11.81506061553955\n      ],\n      [\n        \"▁マリン\",\n        -11.815193176269531\n      ],\n      [\n        \"▁焼失\",\n        -11.815625190734863\n      ],\n      [\n        \"▁力士\",\n        -11.815637588500977\n      ],\n      [\n        \"▁格納\",\n        -11.81566047668457\n      ],\n      [\n        \"▁月間\",\n        -11.815818786621094\n      ],\n      [\n        \"ぐら\",\n        -11.815876960754395\n      ],\n      [\n        \"ンガ\",\n        -11.815969467163086\n      ],\n      [\n        \"▁将校\",\n        -11.816044807434082\n      ],\n      [\n        \"▁大型の\",\n        -11.816184043884277\n      ],\n      [\n        \"▁パンク\",\n        -11.816368103027344\n      ],\n      [\n        \"▁的だ\",\n        -11.816628456115723\n      ],\n      [\n        \"▁絶望\",\n        -11.816679954528809\n      ],\n      [\n        \"コード\",\n        -11.816734313964844\n      ],\n      [\n        \"▁スポ\",\n        -11.816800117492676\n      ],\n      [\n        \"ler\",\n        -11.816818237304688\n      ],\n      [\n        \"翼\",\n        -11.816835403442383\n      ],\n      [\n        \"頂\",\n        -11.816970825195312\n      ],\n      [\n        \"▁離島\",\n        -11.817052841186523\n      ],\n      [\n        \"▁迅速に\",\n        -11.817286491394043\n      ],\n      [\n        \"▁導く\",\n        -11.817349433898926\n      ],\n      [\n        \"ble\",\n        -11.81735897064209\n      ],\n      [\n        \"▁新書\",\n        -11.817439079284668\n      ],\n      [\n        \"so\",\n        -11.817521095275879\n      ],\n      [\n        \"ICE\",\n        -11.817553520202637\n      ],\n      [\n        \"▁換気\",\n        -11.817680358886719\n      ],\n      [\n        \"了\",\n        -11.81774616241455\n      ],\n      [\n        \"チカ\",\n        -11.817811965942383\n      ],\n      [\n        \"▁飲んだ\",\n        -11.817859649658203\n      ],\n      [\n        \"▁甲府\",\n        -11.817896842956543\n      ],\n      [\n        \"▁抜擢\",\n        -11.818160057067871\n      ],\n      [\n        \"▁ラボ\",\n        -11.818262100219727\n      ],\n      [\n        \"▁だれ\",\n        -11.818313598632812\n      ],\n      [\n        \"▁大山\",\n        -11.81864070892334\n      ],\n      [\n        \"ゥ\",\n        -11.81866455078125\n      ],\n      [\n        \"▁武蔵野\",\n        -11.818754196166992\n      ],\n      [\n        \"▁Reserved\",\n        -11.819040298461914\n      ],\n      [\n        \"▁遵守\",\n        -11.819120407104492\n      ],\n      [\n        \"▁ハウ\",\n        -11.819129943847656\n      ],\n      [\n        \"▁マドリード\",\n        -11.819280624389648\n      ],\n      [\n        \"UD\",\n        -11.819347381591797\n      ],\n      [\n        \"▁解禁\",\n        -11.819387435913086\n      ],\n      [\n        \"▁グロー\",\n        -11.819398880004883\n      ],\n      [\n        \"ev\",\n        -11.819404602050781\n      ],\n      [\n        \"下院\",\n        -11.819554328918457\n      ],\n      [\n        \"▁ミネラル\",\n        -11.819601058959961\n      ],\n      [\n        \"▁立法\",\n        -11.819601058959961\n      ],\n      [\n        \"box\",\n        -11.819785118103027\n      ],\n      [\n        \"レンス\",\n        -11.819787979125977\n      ],\n      [\n        \"▁春夏\",\n        -11.819948196411133\n      ],\n      [\n        \"ung\",\n        -11.819995880126953\n      ],\n      [\n        \"▁読め\",\n        -11.820040702819824\n      ],\n      [\n        \"▁セクシー\",\n        -11.820045471191406\n      ],\n      [\n        \"▁演算\",\n        -11.820115089416504\n      ],\n      [\n        \"許\",\n        -11.820158004760742\n      ],\n      [\n        \"▁気味\",\n        -11.820528030395508\n      ],\n      [\n        \"ris\",\n        -11.820544242858887\n      ],\n      [\n        \"ナード\",\n        -11.820597648620605\n      ],\n      [\n        \"さら\",\n        -11.820643424987793\n      ],\n      [\n        \"▁祖母\",\n        -11.82070255279541\n      ],\n      [\n        \"▁フラット\",\n        -11.820985794067383\n      ],\n      [\n        \"染\",\n        -11.82101058959961\n      ],\n      [\n        \"▁季\",\n        -11.821064949035645\n      ],\n      [\n        \"1965\",\n        -11.821072578430176\n      ],\n      [\n        \"▁心がけて\",\n        -11.821403503417969\n      ],\n      [\n        \"ぉ\",\n        -11.821526527404785\n      ],\n      [\n        \"▁始\",\n        -11.821930885314941\n      ],\n      [\n        \"▁イヤー\",\n        -11.822021484375\n      ],\n      [\n        \"▁多発\",\n        -11.822141647338867\n      ],\n      [\n        \"禁\",\n        -11.822149276733398\n      ],\n      [\n        \"▁噴火\",\n        -11.822272300720215\n      ],\n      [\n        \"▁クリップ\",\n        -11.82239055633545\n      ],\n      [\n        \"戒\",\n        -11.822591781616211\n      ],\n      [\n        \"▁三十\",\n        -11.822673797607422\n      ],\n      [\n        \"▁ススメ\",\n        -11.822732925415039\n      ],\n      [\n        \"でん\",\n        -11.822859764099121\n      ],\n      [\n        \"最大\",\n        -11.82294750213623\n      ],\n      [\n        \"▁日立\",\n        -11.823042869567871\n      ],\n      [\n        \"▁毛穴\",\n        -11.823125839233398\n      ],\n      [\n        \"▁急増\",\n        -11.823185920715332\n      ],\n      [\n        \"待\",\n        -11.823537826538086\n      ],\n      [\n        \"太字\",\n        -11.823843002319336\n      ],\n      [\n        \"▁福田\",\n        -11.823911666870117\n      ],\n      [\n        \"▁松田\",\n        -11.823993682861328\n      ],\n      [\n        \"oot\",\n        -11.824102401733398\n      ],\n      [\n        \"▁少なかった\",\n        -11.824180603027344\n      ],\n      [\n        \"先生\",\n        -11.824243545532227\n      ],\n      [\n        \"▁けっこう\",\n        -11.824273109436035\n      ],\n      [\n        \"▁おう\",\n        -11.824341773986816\n      ],\n      [\n        \"form\",\n        -11.824386596679688\n      ],\n      [\n        \"路線\",\n        -11.82448959350586\n      ],\n      [\n        \"▁困難に\",\n        -11.824551582336426\n      ],\n      [\n        \"▁メカニズム\",\n        -11.824586868286133\n      ],\n      [\n        \"▁コーティング\",\n        -11.824934959411621\n      ],\n      [\n        \"▁org\",\n        -11.824956893920898\n      ],\n      [\n        \"▁始動\",\n        -11.825043678283691\n      ],\n      [\n        \"▁預かり\",\n        -11.825065612792969\n      ],\n      [\n        \"▁ジョージア\",\n        -11.825178146362305\n      ],\n      [\n        \"▁飛ぶ\",\n        -11.82525634765625\n      ],\n      [\n        \"▁ポルノ\",\n        -11.825411796569824\n      ],\n      [\n        \"▁格差\",\n        -11.825511932373047\n      ],\n      [\n        \"aki\",\n        -11.825592041015625\n      ],\n      [\n        \"▁IV\",\n        -11.82563591003418\n      ],\n      [\n        \"▁熊野\",\n        -11.825641632080078\n      ],\n      [\n        \"out\",\n        -11.825654029846191\n      ],\n      [\n        \"▁減り\",\n        -11.82582950592041\n      ],\n      [\n        \"▁アナウンス\",\n        -11.825952529907227\n      ],\n      [\n        \"▁薄毛\",\n        -11.826006889343262\n      ],\n      [\n        \"ギア\",\n        -11.8261137008667\n      ],\n      [\n        \"▁格闘技\",\n        -11.826133728027344\n      ],\n      [\n        \"▁買え\",\n        -11.826169967651367\n      ],\n      [\n        \"▁Ta\",\n        -11.826192855834961\n      ],\n      [\n        \"チック\",\n        -11.826363563537598\n      ],\n      [\n        \"▁回し\",\n        -11.826400756835938\n      ],\n      [\n        \"▁that\",\n        -11.826458930969238\n      ],\n      [\n        \"▁待遇\",\n        -11.826530456542969\n      ],\n      [\n        \"生育\",\n        -11.826571464538574\n      ],\n      [\n        \"▁理学\",\n        -11.826672554016113\n      ],\n      [\n        \"▁美濃\",\n        -11.826789855957031\n      ],\n      [\n        \"▁ストレージ\",\n        -11.8268404006958\n      ],\n      [\n        \"▁急ぎ\",\n        -11.826894760131836\n      ],\n      [\n        \"▁城主\",\n        -11.826930046081543\n      ],\n      [\n        \"▁速い\",\n        -11.827032089233398\n      ],\n      [\n        \"▁瓶\",\n        -11.8270902633667\n      ],\n      [\n        \"ぎょう\",\n        -11.82723331451416\n      ],\n      [\n        \"▁王立\",\n        -11.827404975891113\n      ],\n      [\n        \"▁トラベル\",\n        -11.82742691040039\n      ],\n      [\n        \"ond\",\n        -11.827545166015625\n      ],\n      [\n        \"▁ミュンヘン\",\n        -11.827570915222168\n      ],\n      [\n        \"▁首脳\",\n        -11.827631950378418\n      ],\n      [\n        \"▁PPV\",\n        -11.827706336975098\n      ],\n      [\n        \"この後\",\n        -11.82784652709961\n      ],\n      [\n        \"▁山城\",\n        -11.827853202819824\n      ],\n      [\n        \"▁怪獣\",\n        -11.82797908782959\n      ],\n      [\n        \"グラム\",\n        -11.828145027160645\n      ],\n      [\n        \"CON\",\n        -11.82826042175293\n      ],\n      [\n        \"▁遮\",\n        -11.82833194732666\n      ],\n      [\n        \"▁誇\",\n        -11.82834529876709\n      ],\n      [\n        \"▁1926\",\n        -11.82838249206543\n      ],\n      [\n        \"▁砲撃\",\n        -11.828442573547363\n      ],\n      [\n        \"1966\",\n        -11.828654289245605\n      ],\n      [\n        \"▁甥\",\n        -11.828768730163574\n      ],\n      [\n        \"なんと\",\n        -11.828813552856445\n      ],\n      [\n        \"ポール\",\n        -11.82884693145752\n      ],\n      [\n        \"▁地中海\",\n        -11.82894229888916\n      ],\n      [\n        \"▁プリンター\",\n        -11.829018592834473\n      ],\n      [\n        \"▁ひな\",\n        -11.829020500183105\n      ],\n      [\n        \"才\",\n        -11.82904052734375\n      ],\n      [\n        \"▁匿名\",\n        -11.829103469848633\n      ],\n      [\n        \"▁大韓民国\",\n        -11.82917594909668\n      ],\n      [\n        \"▁コチラ\",\n        -11.829266548156738\n      ],\n      [\n        \"▁醸造\",\n        -11.829345703125\n      ],\n      [\n        \"▁通訳\",\n        -11.829371452331543\n      ],\n      [\n        \"▁奇妙な\",\n        -11.829426765441895\n      ],\n      [\n        \"▁塚\",\n        -11.829668998718262\n      ],\n      [\n        \"プライ\",\n        -11.829773902893066\n      ],\n      [\n        \"▁サーキット\",\n        -11.829913139343262\n      ],\n      [\n        \"▁牧師\",\n        -11.830032348632812\n      ],\n      [\n        \"▁NEXT\",\n        -11.830080032348633\n      ],\n      [\n        \"▁仮に\",\n        -11.830116271972656\n      ],\n      [\n        \"▁撃破\",\n        -11.830175399780273\n      ],\n      [\n        \"▁FW\",\n        -11.83024787902832\n      ],\n      [\n        \"上がり\",\n        -11.830333709716797\n      ],\n      [\n        \"ガール\",\n        -11.830360412597656\n      ],\n      [\n        \"▁たびたび\",\n        -11.830479621887207\n      ],\n      [\n        \"ディーン\",\n        -11.830533981323242\n      ],\n      [\n        \"▁れれば\",\n        -11.83065414428711\n      ],\n      [\n        \"隠\",\n        -11.830916404724121\n      ],\n      [\n        \"▁いふ\",\n        -11.830965995788574\n      ],\n      [\n        \"▁モダン\",\n        -11.830988883972168\n      ],\n      [\n        \"銀行\",\n        -11.831035614013672\n      ],\n      [\n        \"▁ダンジョン\",\n        -11.831037521362305\n      ],\n      [\n        \"▁推理\",\n        -11.831258773803711\n      ],\n      [\n        \"良い\",\n        -11.831303596496582\n      ],\n      [\n        \"▁リハビリ\",\n        -11.831521987915039\n      ],\n      [\n        \"銭\",\n        -11.831600189208984\n      ],\n      [\n        \"▁死体\",\n        -11.831887245178223\n      ],\n      [\n        \"▁苦しみ\",\n        -11.831939697265625\n      ],\n      [\n        \"vel\",\n        -11.831982612609863\n      ],\n      [\n        \"▁ナポレオン\",\n        -11.83201789855957\n      ],\n      [\n        \"スピ\",\n        -11.832048416137695\n      ],\n      [\n        \"▁垂直\",\n        -11.832212448120117\n      ],\n      [\n        \"▁素晴らし\",\n        -11.8324556350708\n      ],\n      [\n        \"▁哨戒\",\n        -11.832507133483887\n      ],\n      [\n        \"▁落として\",\n        -11.832534790039062\n      ],\n      [\n        \"DC\",\n        -11.832581520080566\n      ],\n      [\n        \"▁トイ\",\n        -11.832828521728516\n      ],\n      [\n        \"んど\",\n        -11.832836151123047\n      ],\n      [\n        \"▁大事\",\n        -11.83309555053711\n      ],\n      [\n        \"▁不明な\",\n        -11.833110809326172\n      ],\n      [\n        \"▁欲求\",\n        -11.833244323730469\n      ],\n      [\n        \"▁順調に\",\n        -11.833337783813477\n      ],\n      [\n        \"索\",\n        -11.833440780639648\n      ],\n      [\n        \"▁クロアチア\",\n        -11.83346939086914\n      ],\n      [\n        \"▁討ち\",\n        -11.83363151550293\n      ],\n      [\n        \"▁秩序\",\n        -11.83364486694336\n      ],\n      [\n        \"▁1922\",\n        -11.833671569824219\n      ],\n      [\n        \"特別\",\n        -11.833755493164062\n      ],\n      [\n        \"FT\",\n        -11.833876609802246\n      ],\n      [\n        \"▁スムーズ\",\n        -11.83407211303711\n      ],\n      [\n        \"▁平行\",\n        -11.834181785583496\n      ],\n      [\n        \"▁高田\",\n        -11.834193229675293\n      ],\n      [\n        \"▁農場\",\n        -11.834228515625\n      ],\n      [\n        \"▁立憲\",\n        -11.834263801574707\n      ],\n      [\n        \"▁修道\",\n        -11.834485054016113\n      ],\n      [\n        \"▁撮った\",\n        -11.834495544433594\n      ],\n      [\n        \"序\",\n        -11.834659576416016\n      ],\n      [\n        \"▁カントリー\",\n        -11.834782600402832\n      ],\n      [\n        \"▁CIA\",\n        -11.834795951843262\n      ],\n      [\n        \"1941\",\n        -11.835076332092285\n      ],\n      [\n        \"▁ねー\",\n        -11.835139274597168\n      ],\n      [\n        \"▁マニア\",\n        -11.835150718688965\n      ],\n      [\n        \"▁Ex\",\n        -11.835250854492188\n      ],\n      [\n        \"こういった\",\n        -11.8352689743042\n      ],\n      [\n        \"▁リップ\",\n        -11.83539867401123\n      ],\n      [\n        \"▁篠\",\n        -11.835463523864746\n      ],\n      [\n        \"▁楽章\",\n        -11.835824012756348\n      ],\n      [\n        \"▁室町\",\n        -11.83582878112793\n      ],\n      [\n        \"▁くら\",\n        -11.835917472839355\n      ],\n      [\n        \"▁童貞\",\n        -11.835923194885254\n      ],\n      [\n        \"ギュ\",\n        -11.836081504821777\n      ],\n      [\n        \"ω\",\n        -11.836169242858887\n      ],\n      [\n        \"sta\",\n        -11.836235046386719\n      ],\n      [\n        \"包\",\n        -11.836243629455566\n      ],\n      [\n        \"ree\",\n        -11.836296081542969\n      ],\n      [\n        \"▁ar\",\n        -11.83636474609375\n      ],\n      [\n        \"▁老舗\",\n        -11.836419105529785\n      ],\n      [\n        \"▁共和党\",\n        -11.836488723754883\n      ],\n      [\n        \"著者\",\n        -11.8364896774292\n      ],\n      [\n        \"▁窯\",\n        -11.836664199829102\n      ],\n      [\n        \"▁申\",\n        -11.836804389953613\n      ],\n      [\n        \"▁多用\",\n        -11.836848258972168\n      ],\n      [\n        \"フラン\",\n        -11.836977005004883\n      ],\n      [\n        \"▁水域\",\n        -11.836982727050781\n      ],\n      [\n        \"肥\",\n        -11.836996078491211\n      ],\n      [\n        \"自宅\",\n        -11.837026596069336\n      ],\n      [\n        \"▁確か\",\n        -11.837044715881348\n      ],\n      [\n        \"▁Ca\",\n        -11.837096214294434\n      ],\n      [\n        \"▁添え\",\n        -11.837226867675781\n      ],\n      [\n        \"▁アラン\",\n        -11.837363243103027\n      ],\n      [\n        \"▁常務\",\n        -11.837370872497559\n      ],\n      [\n        \"▁歩道\",\n        -11.837576866149902\n      ],\n      [\n        \"▁牛乳\",\n        -11.837626457214355\n      ],\n      [\n        \"▁良好\",\n        -11.837628364562988\n      ],\n      [\n        \"ater\",\n        -11.83763599395752\n      ],\n      [\n        \"▁物体\",\n        -11.837682723999023\n      ],\n      [\n        \"▁正常\",\n        -11.837784767150879\n      ],\n      [\n        \"▁チン\",\n        -11.83791446685791\n      ],\n      [\n        \"ライズ\",\n        -11.83798885345459\n      ],\n      [\n        \"本人\",\n        -11.838147163391113\n      ],\n      [\n        \"まれ\",\n        -11.838647842407227\n      ],\n      [\n        \"▁日焼け\",\n        -11.83869743347168\n      ],\n      [\n        \"BL\",\n        -11.838846206665039\n      ],\n      [\n        \"▁レモン\",\n        -11.838903427124023\n      ],\n      [\n        \"▁レトロ\",\n        -11.838973045349121\n      ],\n      [\n        \"▁したがって\",\n        -11.839088439941406\n      ],\n      [\n        \"▁尾張\",\n        -11.839422225952148\n      ],\n      [\n        \"▁困った\",\n        -11.83944034576416\n      ],\n      [\n        \"▁獲\",\n        -11.839454650878906\n      ],\n      [\n        \"▁熱心\",\n        -11.839605331420898\n      ],\n      [\n        \"MG\",\n        -11.83977222442627\n      ],\n      [\n        \"▁もも\",\n        -11.839924812316895\n      ],\n      [\n        \"ノキ\",\n        -11.839930534362793\n      ],\n      [\n        \"▁抗争\",\n        -11.83993911743164\n      ],\n      [\n        \"▁明石\",\n        -11.840078353881836\n      ],\n      [\n        \"ッチャー\",\n        -11.840270042419434\n      ],\n      [\n        \"▁TM\",\n        -11.840557098388672\n      ],\n      [\n        \"▁量子\",\n        -11.840576171875\n      ],\n      [\n        \"▁好意\",\n        -11.840630531311035\n      ],\n      [\n        \"▁払う\",\n        -11.840743064880371\n      ],\n      [\n        \"▁かみ\",\n        -11.84083366394043\n      ],\n      [\n        \"▁フィル\",\n        -11.840895652770996\n      ],\n      [\n        \"▁依然\",\n        -11.841062545776367\n      ],\n      [\n        \"▁ミステリー\",\n        -11.841187477111816\n      ],\n      [\n        \"側\",\n        -11.841337203979492\n      ],\n      [\n        \"▁CF\",\n        -11.841349601745605\n      ],\n      [\n        \"▁クリスタル\",\n        -11.841353416442871\n      ],\n      [\n        \"▁増して\",\n        -11.841357231140137\n      ],\n      [\n        \"▁不定期\",\n        -11.841431617736816\n      ],\n      [\n        \"ダウンロード\",\n        -11.841450691223145\n      ],\n      [\n        \"ct\",\n        -11.84155559539795\n      ],\n      [\n        \"▁Xbox\",\n        -11.841594696044922\n      ],\n      [\n        \"Categor\",\n        -11.841609001159668\n      ],\n      [\n        \"ize\",\n        -11.841611862182617\n      ],\n      [\n        \"楽天\",\n        -11.841632843017578\n      ],\n      [\n        \"▁啓発\",\n        -11.841859817504883\n      ],\n      [\n        \"▁大塚\",\n        -11.842293739318848\n      ],\n      [\n        \"▁クリーン\",\n        -11.842458724975586\n      ],\n      [\n        \"▁壊滅\",\n        -11.842469215393066\n      ],\n      [\n        \"ニョ\",\n        -11.842520713806152\n      ],\n      [\n        \"づき\",\n        -11.842586517333984\n      ],\n      [\n        \"浄\",\n        -11.842632293701172\n      ],\n      [\n        \"▁槍\",\n        -11.84278678894043\n      ],\n      [\n        \"▁グレート\",\n        -11.842796325683594\n      ],\n      [\n        \"▁思い出し\",\n        -11.842950820922852\n      ],\n      [\n        \"ower\",\n        -11.842968940734863\n      ],\n      [\n        \"がん\",\n        -11.843133926391602\n      ],\n      [\n        \"LD\",\n        -11.843138694763184\n      ],\n      [\n        \"▁かき\",\n        -11.843220710754395\n      ],\n      [\n        \"ブラン\",\n        -11.84323787689209\n      ],\n      [\n        \"▁濡れ\",\n        -11.843326568603516\n      ],\n      [\n        \"戯\",\n        -11.843363761901855\n      ],\n      [\n        \"▁都立\",\n        -11.843371391296387\n      ],\n      [\n        \"凶\",\n        -11.843855857849121\n      ],\n      [\n        \"▁サンダー\",\n        -11.843976020812988\n      ],\n      [\n        \"▁復讐\",\n        -11.844267845153809\n      ],\n      [\n        \"▁禁煙\",\n        -11.844364166259766\n      ],\n      [\n        \"▁カプセル\",\n        -11.844595909118652\n      ],\n      [\n        \"▁付き合って\",\n        -11.844817161560059\n      ],\n      [\n        \"▁名詞\",\n        -11.84500789642334\n      ],\n      [\n        \"▁銘\",\n        -11.845030784606934\n      ],\n      [\n        \"ッケ\",\n        -11.845040321350098\n      ],\n      [\n        \"▁終え\",\n        -11.845108032226562\n      ],\n      [\n        \"▁どんなに\",\n        -11.845182418823242\n      ],\n      [\n        \"▁親しま\",\n        -11.845216751098633\n      ],\n      [\n        \"▁流入\",\n        -11.845232963562012\n      ],\n      [\n        \"▁スマ\",\n        -11.845235824584961\n      ],\n      [\n        \"▁口径\",\n        -11.845358848571777\n      ],\n      [\n        \"ブランド\",\n        -11.845430374145508\n      ],\n      [\n        \"▁お互いに\",\n        -11.845682144165039\n      ],\n      [\n        \"▁ver\",\n        -11.845800399780273\n      ],\n      [\n        \"地球\",\n        -11.845833778381348\n      ],\n      [\n        \"▁つなぐ\",\n        -11.845915794372559\n      ],\n      [\n        \"1930\",\n        -11.846270561218262\n      ],\n      [\n        \"▁積み重ね\",\n        -11.846405029296875\n      ],\n      [\n        \"▁ドミ\",\n        -11.846471786499023\n      ],\n      [\n        \"若い\",\n        -11.846532821655273\n      ],\n      [\n        \"狭\",\n        -11.846609115600586\n      ],\n      [\n        \"NHK\",\n        -11.8466796875\n      ],\n      [\n        \"▁興味深い\",\n        -11.846684455871582\n      ],\n      [\n        \"▁敗れて\",\n        -11.846816062927246\n      ],\n      [\n        \"▁メディカル\",\n        -11.846850395202637\n      ],\n      [\n        \"VI\",\n        -11.846942901611328\n      ],\n      [\n        \"▁キューバ\",\n        -11.847012519836426\n      ],\n      [\n        \"▁健康に\",\n        -11.847124099731445\n      ],\n      [\n        \"テク\",\n        -11.847155570983887\n      ],\n      [\n        \"スペイン\",\n        -11.847282409667969\n      ],\n      [\n        \"訓\",\n        -11.847439765930176\n      ],\n      [\n        \"cr\",\n        -11.847563743591309\n      ],\n      [\n        \"▁疑惑\",\n        -11.847566604614258\n      ],\n      [\n        \"予\",\n        -11.847651481628418\n      ],\n      [\n        \"▁迫る\",\n        -11.847681999206543\n      ],\n      [\n        \"▁抜\",\n        -11.84769058227539\n      ],\n      [\n        \"随\",\n        -11.847738265991211\n      ],\n      [\n        \"▁Studio\",\n        -11.84782886505127\n      ],\n      [\n        \"ショー\",\n        -11.847837448120117\n      ],\n      [\n        \"▁火力\",\n        -11.847882270812988\n      ],\n      [\n        \"▁オーク\",\n        -11.84790325164795\n      ],\n      [\n        \"▁容\",\n        -11.848011016845703\n      ],\n      [\n        \"▁包装\",\n        -11.84808349609375\n      ],\n      [\n        \"▁精密\",\n        -11.848134994506836\n      ],\n      [\n        \"モリ\",\n        -11.848278999328613\n      ],\n      [\n        \"人生\",\n        -11.848457336425781\n      ],\n      [\n        \"抜き\",\n        -11.84852123260498\n      ],\n      [\n        \"阪\",\n        -11.848593711853027\n      ],\n      [\n        \"▁my\",\n        -11.848861694335938\n      ],\n      [\n        \"▁創建\",\n        -11.848869323730469\n      ],\n      [\n        \"▁恭\",\n        -11.848955154418945\n      ],\n      [\n        \"▁指針\",\n        -11.849068641662598\n      ],\n      [\n        \"▁大井\",\n        -11.849117279052734\n      ],\n      [\n        \"▁免除\",\n        -11.849136352539062\n      ],\n      [\n        \"網\",\n        -11.849316596984863\n      ],\n      [\n        \"▁葵\",\n        -11.849345207214355\n      ],\n      [\n        \"▁傾斜\",\n        -11.849457740783691\n      ],\n      [\n        \"▁峰\",\n        -11.849492073059082\n      ],\n      [\n        \"政府\",\n        -11.849555015563965\n      ],\n      [\n        \"▁ミュ\",\n        -11.849564552307129\n      ],\n      [\n        \"▁ウン\",\n        -11.84958267211914\n      ],\n      [\n        \"▁労\",\n        -11.849605560302734\n      ],\n      [\n        \"▁ロリ\",\n        -11.849855422973633\n      ],\n      [\n        \"▁納め\",\n        -11.849963188171387\n      ],\n      [\n        \"チア\",\n        -11.849963188171387\n      ],\n      [\n        \"▁記した\",\n        -11.849992752075195\n      ],\n      [\n        \"▁先住\",\n        -11.850056648254395\n      ],\n      [\n        \"▁キャン\",\n        -11.850076675415039\n      ],\n      [\n        \"▁ゆかり\",\n        -11.850079536437988\n      ],\n      [\n        \"▁たって\",\n        -11.850127220153809\n      ],\n      [\n        \"▁狼\",\n        -11.850332260131836\n      ],\n      [\n        \"▁救出\",\n        -11.850468635559082\n      ],\n      [\n        \"所在\",\n        -11.850594520568848\n      ],\n      [\n        \"▁作動\",\n        -11.850954055786133\n      ],\n      [\n        \"▁ショウ\",\n        -11.8510160446167\n      ],\n      [\n        \"▁たぶん\",\n        -11.851097106933594\n      ],\n      [\n        \"▁家屋\",\n        -11.851381301879883\n      ],\n      [\n        \"pl\",\n        -11.851462364196777\n      ],\n      [\n        \"▁青木\",\n        -11.851619720458984\n      ],\n      [\n        \"▁冷たい\",\n        -11.851644515991211\n      ],\n      [\n        \"そういった\",\n        -11.851819038391113\n      ],\n      [\n        \"▁住人\",\n        -11.851851463317871\n      ],\n      [\n        \"▁スニーカー\",\n        -11.851853370666504\n      ],\n      [\n        \"▁119\",\n        -11.852239608764648\n      ],\n      [\n        \"▁輝き\",\n        -11.852543830871582\n      ],\n      [\n        \"▁CI\",\n        -11.852566719055176\n      ],\n      [\n        \"▁和泉\",\n        -11.853087425231934\n      ],\n      [\n        \"生き\",\n        -11.853124618530273\n      ],\n      [\n        \"新聞\",\n        -11.853172302246094\n      ],\n      [\n        \"▁ヘリ\",\n        -11.85330581665039\n      ],\n      [\n        \"っくり\",\n        -11.85344409942627\n      ],\n      [\n        \"ning\",\n        -11.85356616973877\n      ],\n      [\n        \"▁新生\",\n        -11.853598594665527\n      ],\n      [\n        \"▁仕入れ\",\n        -11.853641510009766\n      ],\n      [\n        \"ff\",\n        -11.85383415222168\n      ],\n      [\n        \"▁頁\",\n        -11.853952407836914\n      ],\n      [\n        \"製作\",\n        -11.85395336151123\n      ],\n      [\n        \"▁素直に\",\n        -11.854007720947266\n      ],\n      [\n        \"▁オリーブ\",\n        -11.854043960571289\n      ],\n      [\n        \"▁抽\",\n        -11.85413646697998\n      ],\n      [\n        \"▁重く\",\n        -11.854185104370117\n      ],\n      [\n        \"▁ベテラン\",\n        -11.854339599609375\n      ],\n      [\n        \"▁書房\",\n        -11.854381561279297\n      ],\n      [\n        \"▁延伸\",\n        -11.854436874389648\n      ],\n      [\n        \"映\",\n        -11.854593276977539\n      ],\n      [\n        \"ちょ\",\n        -11.854595184326172\n      ],\n      [\n        \"すみ\",\n        -11.854806900024414\n      ],\n      [\n        \"アント\",\n        -11.854842185974121\n      ],\n      [\n        \"Read\",\n        -11.854952812194824\n      ],\n      [\n        \"生い立ち\",\n        -11.855009078979492\n      ],\n      [\n        \"▁フィー\",\n        -11.855034828186035\n      ],\n      [\n        \"▁パーマ\",\n        -11.85531234741211\n      ],\n      [\n        \"▁カメラマン\",\n        -11.855368614196777\n      ],\n      [\n        \"▁編み\",\n        -11.855429649353027\n      ],\n      [\n        \"▁嘆\",\n        -11.855449676513672\n      ],\n      [\n        \"▁とらえ\",\n        -11.85550308227539\n      ],\n      [\n        \"標\",\n        -11.855602264404297\n      ],\n      [\n        \"▁パンフレット\",\n        -11.855668067932129\n      ],\n      [\n        \"▁羽田\",\n        -11.855917930603027\n      ],\n      [\n        \"▁ca\",\n        -11.855987548828125\n      ],\n      [\n        \"▁ダイレクト\",\n        -11.856082916259766\n      ],\n      [\n        \"rin\",\n        -11.856143951416016\n      ],\n      [\n        \"自己\",\n        -11.85635757446289\n      ],\n      [\n        \"ori\",\n        -11.856404304504395\n      ],\n      [\n        \"▁鐘\",\n        -11.856743812561035\n      ],\n      [\n        \"▁大事です\",\n        -11.856804847717285\n      ],\n      [\n        \"▁入れ替え\",\n        -11.856868743896484\n      ],\n      [\n        \"pt\",\n        -11.856927871704102\n      ],\n      [\n        \"▁貯金\",\n        -11.857378959655762\n      ],\n      [\n        \"▁降下\",\n        -11.857418060302734\n      ],\n      [\n        \"▁郵送\",\n        -11.857580184936523\n      ],\n      [\n        \"▁AA\",\n        -11.857867240905762\n      ],\n      [\n        \"セー\",\n        -11.857980728149414\n      ],\n      [\n        \"▁速やかに\",\n        -11.858022689819336\n      ],\n      [\n        \"▁阪\",\n        -11.858270645141602\n      ],\n      [\n        \"▁消え\",\n        -11.85832691192627\n      ],\n      [\n        \"▁Or\",\n        -11.85854434967041\n      ],\n      [\n        \"▁ウイ\",\n        -11.858610153198242\n      ],\n      [\n        \"▁客室\",\n        -11.858755111694336\n      ],\n      [\n        \"▁思えば\",\n        -11.858882904052734\n      ],\n      [\n        \"▁おかしく\",\n        -11.8589506149292\n      ],\n      [\n        \"▁神殿\",\n        -11.858965873718262\n      ],\n      [\n        \"▁なつ\",\n        -11.859100341796875\n      ],\n      [\n        \"▁la\",\n        -11.859245300292969\n      ],\n      [\n        \"▁ダブルス\",\n        -11.859336853027344\n      ],\n      [\n        \"▁洗練\",\n        -11.859509468078613\n      ],\n      [\n        \"▁推\",\n        -11.859779357910156\n      ],\n      [\n        \"▁差異\",\n        -11.85987663269043\n      ],\n      [\n        \"リアス\",\n        -11.859879493713379\n      ],\n      [\n        \"やっぱり\",\n        -11.860028266906738\n      ],\n      [\n        \"績\",\n        -11.860052108764648\n      ],\n      [\n        \"▁去年\",\n        -11.860111236572266\n      ],\n      [\n        \"ern\",\n        -11.860161781311035\n      ],\n      [\n        \"塵\",\n        -11.860331535339355\n      ],\n      [\n        \"▁沿った\",\n        -11.860607147216797\n      ],\n      [\n        \"▁111\",\n        -11.860740661621094\n      ],\n      [\n        \"▁育てて\",\n        -11.860880851745605\n      ],\n      [\n        \"▁かく\",\n        -11.860901832580566\n      ],\n      [\n        \"賛\",\n        -11.860955238342285\n      ],\n      [\n        \"朝鮮\",\n        -11.860980987548828\n      ],\n      [\n        \"▁天保\",\n        -11.861031532287598\n      ],\n      [\n        \"オリジナル\",\n        -11.861136436462402\n      ],\n      [\n        \"レア\",\n        -11.861449241638184\n      ],\n      [\n        \"年齢\",\n        -11.861661911010742\n      ],\n      [\n        \"▁手掛けた\",\n        -11.861751556396484\n      ],\n      [\n        \"▁多額\",\n        -11.86182975769043\n      ],\n      [\n        \"▁貨幣\",\n        -11.861835479736328\n      ],\n      [\n        \"始\",\n        -11.861879348754883\n      ],\n      [\n        \"充\",\n        -11.862038612365723\n      ],\n      [\n        \"▁籠\",\n        -11.862261772155762\n      ],\n      [\n        \"ช\",\n        -11.862504005432129\n      ],\n      [\n        \"▁運転手\",\n        -11.862527847290039\n      ],\n      [\n        \"敏\",\n        -11.86263656616211\n      ],\n      [\n        \"▁家賃\",\n        -11.862813949584961\n      ],\n      [\n        \"▁だいぶ\",\n        -11.862831115722656\n      ],\n      [\n        \"▁どん\",\n        -11.862906455993652\n      ],\n      [\n        \"▁くま\",\n        -11.862920761108398\n      ],\n      [\n        \"▁ヤンキース\",\n        -11.862945556640625\n      ],\n      [\n        \"▁黙\",\n        -11.86297607421875\n      ],\n      [\n        \"▁つる\",\n        -11.863100051879883\n      ],\n      [\n        \"▁オイ\",\n        -11.863401412963867\n      ],\n      [\n        \"NP\",\n        -11.863551139831543\n      ],\n      [\n        \"ole\",\n        -11.863603591918945\n      ],\n      [\n        \"▁抜群\",\n        -11.863703727722168\n      ],\n      [\n        \"マリ\",\n        -11.863771438598633\n      ],\n      [\n        \"▁燃え\",\n        -11.8638277053833\n      ],\n      [\n        \"Re\",\n        -11.863922119140625\n      ],\n      [\n        \"▁安田\",\n        -11.863993644714355\n      ],\n      [\n        \"▁色彩\",\n        -11.864121437072754\n      ],\n      [\n        \"ラート\",\n        -11.864152908325195\n      ],\n      [\n        \"▁パッ\",\n        -11.864160537719727\n      ],\n      [\n        \"選手\",\n        -11.864202499389648\n      ],\n      [\n        \"▁掘り\",\n        -11.864411354064941\n      ],\n      [\n        \"chan\",\n        -11.864506721496582\n      ],\n      [\n        \"▁奨学\",\n        -11.86451530456543\n      ],\n      [\n        \"▁飲み物\",\n        -11.864666938781738\n      ],\n      [\n        \"▁出願\",\n        -11.86468505859375\n      ],\n      [\n        \"▁飾る\",\n        -11.864693641662598\n      ],\n      [\n        \"僧\",\n        -11.864770889282227\n      ],\n      [\n        \"中学\",\n        -11.864836692810059\n      ],\n      [\n        \"筑\",\n        -11.864840507507324\n      ],\n      [\n        \"▁安心です\",\n        -11.864863395690918\n      ],\n      [\n        \"▁巡って\",\n        -11.864864349365234\n      ],\n      [\n        \"▁半数\",\n        -11.864871978759766\n      ],\n      [\n        \"▁楊\",\n        -11.865070343017578\n      ],\n      [\n        \"▁宋\",\n        -11.865135192871094\n      ],\n      [\n        \"ジェン\",\n        -11.865300178527832\n      ],\n      [\n        \"▁PRO\",\n        -11.865331649780273\n      ],\n      [\n        \"カール\",\n        -11.865338325500488\n      ],\n      [\n        \"▁SEO\",\n        -11.865711212158203\n      ],\n      [\n        \"▁旭川\",\n        -11.86571216583252\n      ],\n      [\n        \"ルカ\",\n        -11.86598014831543\n      ],\n      [\n        \"▁まし\",\n        -11.865998268127441\n      ],\n      [\n        \"豪\",\n        -11.866018295288086\n      ],\n      [\n        \"▁まつわる\",\n        -11.86603832244873\n      ],\n      [\n        \"LL\",\n        -11.866262435913086\n      ],\n      [\n        \"▁ナイフ\",\n        -11.866353034973145\n      ],\n      [\n        \"▁倒れ\",\n        -11.866433143615723\n      ],\n      [\n        \"▁西宮\",\n        -11.866451263427734\n      ],\n      [\n        \"▁継\",\n        -11.866572380065918\n      ],\n      [\n        \"▁価\",\n        -11.866602897644043\n      ],\n      [\n        \"焼き\",\n        -11.866610527038574\n      ],\n      [\n        \"▁中盤\",\n        -11.866671562194824\n      ],\n      [\n        \"▁カニ\",\n        -11.866683959960938\n      ],\n      [\n        \"イチ\",\n        -11.86673355102539\n      ],\n      [\n        \"▁香水\",\n        -11.866989135742188\n      ],\n      [\n        \"げん\",\n        -11.867009162902832\n      ],\n      [\n        \"▁みち\",\n        -11.867109298706055\n      ],\n      [\n        \"▁採取\",\n        -11.867146492004395\n      ],\n      [\n        \"▁光学\",\n        -11.867252349853516\n      ],\n      [\n        \"突\",\n        -11.867444038391113\n      ],\n      [\n        \"濃\",\n        -11.867481231689453\n      ],\n      [\n        \"▁くださって\",\n        -11.867566108703613\n      ],\n      [\n        \"ELL\",\n        -11.86760139465332\n      ],\n      [\n        \"▁クマ\",\n        -11.867660522460938\n      ],\n      [\n        \"ュ\",\n        -11.867753982543945\n      ],\n      [\n        \"ローン\",\n        -11.867799758911133\n      ],\n      [\n        \"なみ\",\n        -11.868011474609375\n      ],\n      [\n        \"笛\",\n        -11.868124961853027\n      ],\n      [\n        \"▁ツリー\",\n        -11.868302345275879\n      ],\n      [\n        \"▁ドット\",\n        -11.868305206298828\n      ],\n      [\n        \"▁ソックス\",\n        -11.868355751037598\n      ],\n      [\n        \"▁留\",\n        -11.868395805358887\n      ],\n      [\n        \"▁捕手\",\n        -11.868398666381836\n      ],\n      [\n        \"▁下ろし\",\n        -11.86841869354248\n      ],\n      [\n        \"▁あま\",\n        -11.868426322937012\n      ],\n      [\n        \"々と\",\n        -11.868581771850586\n      ],\n      [\n        \"▁捨てて\",\n        -11.868644714355469\n      ],\n      [\n        \"▁象\",\n        -11.868672370910645\n      ],\n      [\n        \"ハム\",\n        -11.868739128112793\n      ],\n      [\n        \"ミズ\",\n        -11.869120597839355\n      ],\n      [\n        \"損\",\n        -11.869132995605469\n      ],\n      [\n        \"位置\",\n        -11.86925220489502\n      ],\n      [\n        \"▁命中\",\n        -11.869281768798828\n      ],\n      [\n        \"▁おも\",\n        -11.869379997253418\n      ],\n      [\n        \"ペー\",\n        -11.869483947753906\n      ],\n      [\n        \"▁165\",\n        -11.86963176727295\n      ],\n      [\n        \"まし\",\n        -11.869653701782227\n      ],\n      [\n        \"▁見つかった\",\n        -11.86976146697998\n      ],\n      [\n        \"▁タイガース\",\n        -11.869824409484863\n      ],\n      [\n        \"▁TA\",\n        -11.870083808898926\n      ],\n      [\n        \"▁おもしろ\",\n        -11.870379447937012\n      ],\n      [\n        \"▁生き物\",\n        -11.870423316955566\n      ],\n      [\n        \"▁引越し\",\n        -11.870866775512695\n      ],\n      [\n        \"▁見出し\",\n        -11.870869636535645\n      ],\n      [\n        \"▁レコーダー\",\n        -11.870904922485352\n      ],\n      [\n        \"▁チャンピオンズ\",\n        -11.870925903320312\n      ],\n      [\n        \"▁取り戻す\",\n        -11.870989799499512\n      ],\n      [\n        \"▁WA\",\n        -11.871004104614258\n      ],\n      [\n        \"▁Designer\",\n        -11.871220588684082\n      ],\n      [\n        \"雷\",\n        -11.871407508850098\n      ],\n      [\n        \"▁パスポート\",\n        -11.871469497680664\n      ],\n      [\n        \"▁ギタリスト\",\n        -11.871496200561523\n      ],\n      [\n        \"▁RO\",\n        -11.871759414672852\n      ],\n      [\n        \"▁とった\",\n        -11.871858596801758\n      ],\n      [\n        \"▁依\",\n        -11.87211799621582\n      ],\n      [\n        \"▁懲役\",\n        -11.872171401977539\n      ],\n      [\n        \"▁大幅な\",\n        -11.872177124023438\n      ],\n      [\n        \"▁ピッチ\",\n        -11.872514724731445\n      ],\n      [\n        \"▁紋章\",\n        -11.872532844543457\n      ],\n      [\n        \"▁博覧\",\n        -11.872798919677734\n      ],\n      [\n        \"▁霧\",\n        -11.87295150756836\n      ],\n      [\n        \"▁ウール\",\n        -11.873130798339844\n      ],\n      [\n        \"▁□\",\n        -11.87317180633545\n      ],\n      [\n        \"▁干\",\n        -11.8735933303833\n      ],\n      [\n        \"▁マクロ\",\n        -11.873652458190918\n      ],\n      [\n        \"▁海兵\",\n        -11.873679161071777\n      ],\n      [\n        \"ぼり\",\n        -11.873682975769043\n      ],\n      [\n        \"▁地質\",\n        -11.87377643585205\n      ],\n      [\n        \"▁みなさま\",\n        -11.873811721801758\n      ],\n      [\n        \"レディ\",\n        -11.873849868774414\n      ],\n      [\n        \"又\",\n        -11.874011039733887\n      ],\n      [\n        \"▁発現\",\n        -11.87411117553711\n      ],\n      [\n        \"十九\",\n        -11.874119758605957\n      ],\n      [\n        \"sch\",\n        -11.87421703338623\n      ],\n      [\n        \"▁努め\",\n        -11.874292373657227\n      ],\n      [\n        \"ベール\",\n        -11.874337196350098\n      ],\n      [\n        \"▁伴\",\n        -11.874480247497559\n      ],\n      [\n        \"▁ネイ\",\n        -11.874496459960938\n      ],\n      [\n        \"きり\",\n        -11.87453556060791\n      ],\n      [\n        \"▁枚数\",\n        -11.874685287475586\n      ],\n      [\n        \"▁条項\",\n        -11.874762535095215\n      ],\n      [\n        \"公園\",\n        -11.87476634979248\n      ],\n      [\n        \"HE\",\n        -11.875300407409668\n      ],\n      [\n        \"最後の\",\n        -11.875375747680664\n      ],\n      [\n        \"▁あちこち\",\n        -11.875386238098145\n      ],\n      [\n        \"▁チャージ\",\n        -11.87552261352539\n      ],\n      [\n        \"▁オオ\",\n        -11.875598907470703\n      ],\n      [\n        \"負\",\n        -11.875628471374512\n      ],\n      [\n        \"▁大津\",\n        -11.875692367553711\n      ],\n      [\n        \"駄\",\n        -11.875753402709961\n      ],\n      [\n        \"治療\",\n        -11.875905990600586\n      ],\n      [\n        \"被\",\n        -11.875921249389648\n      ],\n      [\n        \"▁反撃\",\n        -11.875936508178711\n      ],\n      [\n        \"▁1600\",\n        -11.876042366027832\n      ],\n      [\n        \"▁Gr\",\n        -11.87624454498291\n      ],\n      [\n        \"奈良\",\n        -11.876432418823242\n      ],\n      [\n        \"ACK\",\n        -11.876474380493164\n      ],\n      [\n        \"▁太鼓\",\n        -11.87660026550293\n      ],\n      [\n        \"▁河内\",\n        -11.876646995544434\n      ],\n      [\n        \"稲\",\n        -11.876692771911621\n      ],\n      [\n        \"▁シドニー\",\n        -11.876744270324707\n      ],\n      [\n        \"▁名簿\",\n        -11.876980781555176\n      ],\n      [\n        \"▁速く\",\n        -11.877004623413086\n      ],\n      [\n        \"▁バーチャル\",\n        -11.877082824707031\n      ],\n      [\n        \"▁転生\",\n        -11.877119064331055\n      ],\n      [\n        \"▁サウス\",\n        -11.877248764038086\n      ],\n      [\n        \"▁クレイ\",\n        -11.877419471740723\n      ],\n      [\n        \"▁乙女\",\n        -11.877459526062012\n      ],\n      [\n        \"▁ラッピング\",\n        -11.877500534057617\n      ],\n      [\n        \"プリン\",\n        -11.877544403076172\n      ],\n      [\n        \"▁解像度\",\n        -11.877931594848633\n      ],\n      [\n        \"▁750\",\n        -11.877948760986328\n      ],\n      [\n        \"▁Open\",\n        -11.878021240234375\n      ],\n      [\n        \"▁持て\",\n        -11.878059387207031\n      ],\n      [\n        \"▁集約\",\n        -11.87809944152832\n      ],\n      [\n        \"▁通し\",\n        -11.878161430358887\n      ],\n      [\n        \"ハルト\",\n        -11.878189086914062\n      ],\n      [\n        \"ドラマ\",\n        -11.87831974029541\n      ],\n      [\n        \"測\",\n        -11.87833309173584\n      ],\n      [\n        \"▁Win\",\n        -11.878399848937988\n      ],\n      [\n        \"▁位置付け\",\n        -11.878419876098633\n      ],\n      [\n        \"レーター\",\n        -11.878482818603516\n      ],\n      [\n        \"▁凄く\",\n        -11.878555297851562\n      ],\n      [\n        \"▁響き\",\n        -11.878594398498535\n      ],\n      [\n        \"おか\",\n        -11.878843307495117\n      ],\n      [\n        \"▁川越\",\n        -11.87928581237793\n      ],\n      [\n        \"1963\",\n        -11.879375457763672\n      ],\n      [\n        \"▁痛く\",\n        -11.879491806030273\n      ],\n      [\n        \"▁無関係\",\n        -11.87978458404541\n      ],\n      [\n        \"▁エアロ\",\n        -11.87983226776123\n      ],\n      [\n        \"▁アーツ\",\n        -11.879964828491211\n      ],\n      [\n        \"▁エンターテイメント\",\n        -11.879973411560059\n      ],\n      [\n        \"▁倒す\",\n        -11.879984855651855\n      ],\n      [\n        \"▁築いた\",\n        -11.880029678344727\n      ],\n      [\n        \"▁淡路\",\n        -11.880266189575195\n      ],\n      [\n        \"▁ラウ\",\n        -11.880290031433105\n      ],\n      [\n        \"▁up\",\n        -11.880446434020996\n      ],\n      [\n        \"▁有数\",\n        -11.880516052246094\n      ],\n      [\n        \"▁皇后\",\n        -11.88054370880127\n      ],\n      [\n        \"▁難波\",\n        -11.880556106567383\n      ],\n      [\n        \"▁航行\",\n        -11.880560874938965\n      ],\n      [\n        \"ついて\",\n        -11.88060188293457\n      ],\n      [\n        \"▁律\",\n        -11.880657196044922\n      ],\n      [\n        \"▁符号\",\n        -11.880667686462402\n      ],\n      [\n        \"▁イキ\",\n        -11.880799293518066\n      ],\n      [\n        \"リナ\",\n        -11.880875587463379\n      ],\n      [\n        \"▁Java\",\n        -11.880928993225098\n      ],\n      [\n        \"▁詠\",\n        -11.880935668945312\n      ],\n      [\n        \"1942\",\n        -11.881093978881836\n      ],\n      [\n        \"▁真珠\",\n        -11.881121635437012\n      ],\n      [\n        \"酷\",\n        -11.881125450134277\n      ],\n      [\n        \"ロジー\",\n        -11.88129997253418\n      ],\n      [\n        \"事故\",\n        -11.881482124328613\n      ],\n      [\n        \"▁ジョブ\",\n        -11.881508827209473\n      ],\n      [\n        \"オラ\",\n        -11.881608963012695\n      ],\n      [\n        \"革\",\n        -11.881669044494629\n      ],\n      [\n        \"▁特色\",\n        -11.88178539276123\n      ],\n      [\n        \"▁ハリー\",\n        -11.881803512573242\n      ],\n      [\n        \"▁汎用\",\n        -11.882018089294434\n      ],\n      [\n        \"▁くじ\",\n        -11.882122039794922\n      ],\n      [\n        \"▁日報\",\n        -11.88232707977295\n      ],\n      [\n        \"▁法廷\",\n        -11.8823881149292\n      ],\n      [\n        \"▁咲\",\n        -11.88265609741211\n      ],\n      [\n        \"邸\",\n        -11.88278579711914\n      ],\n      [\n        \"レント\",\n        -11.882802963256836\n      ],\n      [\n        \"▁シャープ\",\n        -11.882827758789062\n      ],\n      [\n        \"▁悲\",\n        -11.882852554321289\n      ],\n      [\n        \"てい\",\n        -11.883112907409668\n      ],\n      [\n        \"▁贈る\",\n        -11.883258819580078\n      ],\n      [\n        \"▁Project\",\n        -11.8834810256958\n      ],\n      [\n        \"▁妃\",\n        -11.883503913879395\n      ],\n      [\n        \"▁掲げて\",\n        -11.88365650177002\n      ],\n      [\n        \"▁当然の\",\n        -11.883735656738281\n      ],\n      [\n        \"▁Star\",\n        -11.883793830871582\n      ],\n      [\n        \"続\",\n        -11.883796691894531\n      ],\n      [\n        \"ッズ\",\n        -11.883879661560059\n      ],\n      [\n        \"ッポ\",\n        -11.883959770202637\n      ],\n      [\n        \"トゥス\",\n        -11.883966445922852\n      ],\n      [\n        \"▁新興\",\n        -11.88397216796875\n      ],\n      [\n        \"次回\",\n        -11.884008407592773\n      ],\n      [\n        \"▁SU\",\n        -11.884034156799316\n      ],\n      [\n        \"oto\",\n        -11.884110450744629\n      ],\n      [\n        \"▁献\",\n        -11.884145736694336\n      ],\n      [\n        \"▁魔王\",\n        -11.884265899658203\n      ],\n      [\n        \"爵\",\n        -11.884385108947754\n      ],\n      [\n        \"▁司馬\",\n        -11.884407043457031\n      ],\n      [\n        \"▁栄養素\",\n        -11.8845853805542\n      ],\n      [\n        \"▁1921\",\n        -11.884597778320312\n      ],\n      [\n        \"きっと\",\n        -11.884788513183594\n      ],\n      [\n        \"▁スル\",\n        -11.884855270385742\n      ],\n      [\n        \"▁グローブ\",\n        -11.884963035583496\n      ],\n      [\n        \"▁有る\",\n        -11.884973526000977\n      ],\n      [\n        \"▁隠さ\",\n        -11.885049819946289\n      ],\n      [\n        \"マーク\",\n        -11.885074615478516\n      ],\n      [\n        \"▁日数\",\n        -11.885225296020508\n      ],\n      [\n        \"▁新鮮な\",\n        -11.885273933410645\n      ],\n      [\n        \"tra\",\n        -11.88542652130127\n      ],\n      [\n        \"▁勤\",\n        -11.88554859161377\n      ],\n      [\n        \"プレー\",\n        -11.885555267333984\n      ],\n      [\n        \"amp\",\n        -11.885809898376465\n      ],\n      [\n        \"▁スッキリ\",\n        -11.885950088500977\n      ],\n      [\n        \"▁釈放\",\n        -11.886035919189453\n      ],\n      [\n        \"▁サッ\",\n        -11.886127471923828\n      ],\n      [\n        \"▁世論\",\n        -11.886231422424316\n      ],\n      [\n        \"mail\",\n        -11.8862886428833\n      ],\n      [\n        \"▁眉\",\n        -11.886290550231934\n      ],\n      [\n        \"▁手掛ける\",\n        -11.886378288269043\n      ],\n      [\n        \"▁恒例\",\n        -11.886495590209961\n      ],\n      [\n        \"▁好ま\",\n        -11.886628150939941\n      ],\n      [\n        \"踏\",\n        -11.886777877807617\n      ],\n      [\n        \"▁DI\",\n        -11.886859893798828\n      ],\n      [\n        \"▁見逃し\",\n        -11.886895179748535\n      ],\n      [\n        \"▁促し\",\n        -11.887024879455566\n      ],\n      [\n        \"ザル\",\n        -11.887025833129883\n      ],\n      [\n        \"寛\",\n        -11.8871431350708\n      ],\n      [\n        \"▁あふれる\",\n        -11.88714599609375\n      ],\n      [\n        \"▁必要で\",\n        -11.887310028076172\n      ],\n      [\n        \"ms\",\n        -11.887459754943848\n      ],\n      [\n        \"ワル\",\n        -11.887533187866211\n      ],\n      [\n        \"▁不動\",\n        -11.887701988220215\n      ],\n      [\n        \"▁ひどく\",\n        -11.887773513793945\n      ],\n      [\n        \"▁望ましい\",\n        -11.887789726257324\n      ],\n      [\n        \"▁みたり\",\n        -11.88780403137207\n      ],\n      [\n        \"▁芦\",\n        -11.887836456298828\n      ],\n      [\n        \"▁遺族\",\n        -11.887974739074707\n      ],\n      [\n        \"▁ピザ\",\n        -11.888007164001465\n      ],\n      [\n        \"▁助けて\",\n        -11.888121604919434\n      ],\n      [\n        \"▁特例\",\n        -11.888137817382812\n      ],\n      [\n        \"▁大豆\",\n        -11.888221740722656\n      ],\n      [\n        \"ダス\",\n        -11.888349533081055\n      ],\n      [\n        \"▁偉大な\",\n        -11.888608932495117\n      ],\n      [\n        \"▁落ち着いて\",\n        -11.88878059387207\n      ],\n      [\n        \"▁洗\",\n        -11.888810157775879\n      ],\n      [\n        \"▁ケー\",\n        -11.888884544372559\n      ],\n      [\n        \"▁親戚\",\n        -11.889071464538574\n      ],\n      [\n        \"▁Pa\",\n        -11.889204978942871\n      ],\n      [\n        \"ぅ\",\n        -11.889209747314453\n      ],\n      [\n        \"▁飼い主\",\n        -11.889591217041016\n      ],\n      [\n        \"▁三河\",\n        -11.88963794708252\n      ],\n      [\n        \"飾\",\n        -11.889857292175293\n      ],\n      [\n        \"▁紅白\",\n        -11.88985824584961\n      ],\n      [\n        \"▁本数\",\n        -11.88997745513916\n      ],\n      [\n        \"込み\",\n        -11.889978408813477\n      ],\n      [\n        \"ARA\",\n        -11.889988899230957\n      ],\n      [\n        \"▁アパレル\",\n        -11.890250205993652\n      ],\n      [\n        \"▁取組\",\n        -11.890253067016602\n      ],\n      [\n        \"▁豊橋\",\n        -11.890279769897461\n      ],\n      [\n        \"が丘\",\n        -11.890429496765137\n      ],\n      [\n        \"▁チャンピオンシップ\",\n        -11.890615463256836\n      ],\n      [\n        \"享\",\n        -11.890707015991211\n      ],\n      [\n        \"▁ポータル\",\n        -11.89071273803711\n      ],\n      [\n        \"▁静かに\",\n        -11.890788078308105\n      ],\n      [\n        \"並み\",\n        -11.89086627960205\n      ],\n      [\n        \"▁シャトル\",\n        -11.890960693359375\n      ],\n      [\n        \"▁可決\",\n        -11.891046524047852\n      ],\n      [\n        \"▁コム\",\n        -11.89113712310791\n      ],\n      [\n        \"▁薫\",\n        -11.89133358001709\n      ],\n      [\n        \"RY\",\n        -11.891345024108887\n      ],\n      [\n        \"▁El\",\n        -11.891556739807129\n      ],\n      [\n        \"▁セラ\",\n        -11.891876220703125\n      ],\n      [\n        \"▁1910\",\n        -11.891918182373047\n      ],\n      [\n        \"シングル\",\n        -11.891924858093262\n      ],\n      [\n        \"red\",\n        -11.891947746276855\n      ],\n      [\n        \"▁刺\",\n        -11.891997337341309\n      ],\n      [\n        \"▁藤沢\",\n        -11.892026901245117\n      ],\n      [\n        \"▁晩年\",\n        -11.892036437988281\n      ],\n      [\n        \"▁吹奏\",\n        -11.892060279846191\n      ],\n      [\n        \"▁楽しみです\",\n        -11.892091751098633\n      ],\n      [\n        \"ワード\",\n        -11.892218589782715\n      ],\n      [\n        \"溝\",\n        -11.892417907714844\n      ],\n      [\n        \"▁当たり前の\",\n        -11.892460823059082\n      ],\n      [\n        \"▁打ち合わせ\",\n        -11.892803192138672\n      ],\n      [\n        \"▁ブルガリ\",\n        -11.892949104309082\n      ],\n      [\n        \"完全\",\n        -11.893092155456543\n      ],\n      [\n        \"▁右手\",\n        -11.893223762512207\n      ],\n      [\n        \"▁擁護\",\n        -11.893342971801758\n      ],\n      [\n        \"▁開ける\",\n        -11.893348693847656\n      ],\n      [\n        \"▁少な\",\n        -11.89340591430664\n      ],\n      [\n        \"▁自国\",\n        -11.893502235412598\n      ],\n      [\n        \"▁疑\",\n        -11.893514633178711\n      ],\n      [\n        \"▁一見\",\n        -11.893536567687988\n      ],\n      [\n        \"▁半導体\",\n        -11.893601417541504\n      ],\n      [\n        \"▁sm\",\n        -11.894152641296387\n      ],\n      [\n        \"▁抑えて\",\n        -11.894289016723633\n      ],\n      [\n        \"ランス\",\n        -11.894319534301758\n      ],\n      [\n        \"IB\",\n        -11.894525527954102\n      ],\n      [\n        \"▁とある\",\n        -11.894554138183594\n      ],\n      [\n        \"芽\",\n        -11.894632339477539\n      ],\n      [\n        \"シブ\",\n        -11.8947172164917\n      ],\n      [\n        \"▁らし\",\n        -11.894737243652344\n      ],\n      [\n        \"航空\",\n        -11.894850730895996\n      ],\n      [\n        \"▁入植\",\n        -11.894891738891602\n      ],\n      [\n        \"追\",\n        -11.89493465423584\n      ],\n      [\n        \"▁滑走\",\n        -11.894942283630371\n      ],\n      [\n        \"▁抱え\",\n        -11.894966125488281\n      ],\n      [\n        \"▁試行\",\n        -11.894972801208496\n      ],\n      [\n        \"▁流用\",\n        -11.895281791687012\n      ],\n      [\n        \"1943\",\n        -11.895370483398438\n      ],\n      [\n        \"詩\",\n        -11.895493507385254\n      ],\n      [\n        \"▁答弁\",\n        -11.895502090454102\n      ],\n      [\n        \"▁絶賛\",\n        -11.895605087280273\n      ],\n      [\n        \"ッシング\",\n        -11.895615577697754\n      ],\n      [\n        \"病院\",\n        -11.895623207092285\n      ],\n      [\n        \"トウ\",\n        -11.895744323730469\n      ],\n      [\n        \"▁骨格\",\n        -11.895760536193848\n      ],\n      [\n        \"届\",\n        -11.895797729492188\n      ],\n      [\n        \"▁not\",\n        -11.896004676818848\n      ],\n      [\n        \"残念\",\n        -11.89601993560791\n      ],\n      [\n        \"▁あけ\",\n        -11.896020889282227\n      ],\n      [\n        \"CK\",\n        -11.896034240722656\n      ],\n      [\n        \"党員\",\n        -11.896163940429688\n      ],\n      [\n        \"▁見分け\",\n        -11.89619255065918\n      ],\n      [\n        \"▁悟\",\n        -11.896337509155273\n      ],\n      [\n        \"▁コロ\",\n        -11.896478652954102\n      ],\n      [\n        \"秋田\",\n        -11.896479606628418\n      ],\n      [\n        \"ERS\",\n        -11.89665699005127\n      ],\n      [\n        \"▁憲\",\n        -11.896809577941895\n      ],\n      [\n        \"▁レター\",\n        -11.8968505859375\n      ],\n      [\n        \"▁台頭\",\n        -11.896929740905762\n      ],\n      [\n        \"己\",\n        -11.89696216583252\n      ],\n      [\n        \"▁こうして\",\n        -11.89700698852539\n      ],\n      [\n        \"▁妥当\",\n        -11.897140502929688\n      ],\n      [\n        \"▁キリ\",\n        -11.897181510925293\n      ],\n      [\n        \"▁織\",\n        -11.897287368774414\n      ],\n      [\n        \"▁仮定\",\n        -11.897313117980957\n      ],\n      [\n        \"▁辰\",\n        -11.89731502532959\n      ],\n      [\n        \"▁直結\",\n        -11.897636413574219\n      ],\n      [\n        \"▁慶長\",\n        -11.897658348083496\n      ],\n      [\n        \"▁作れ\",\n        -11.897796630859375\n      ],\n      [\n        \"礁\",\n        -11.897823333740234\n      ],\n      [\n        \"▁ふさわしい\",\n        -11.897839546203613\n      ],\n      [\n        \"ツォ\",\n        -11.897852897644043\n      ],\n      [\n        \"上述\",\n        -11.897867202758789\n      ],\n      [\n        \"▁単体\",\n        -11.897964477539062\n      ],\n      [\n        \"▁藍\",\n        -11.898058891296387\n      ],\n      [\n        \"▁気づいて\",\n        -11.898384094238281\n      ],\n      [\n        \"▁字幕\",\n        -11.898650169372559\n      ],\n      [\n        \"▁造形\",\n        -11.898681640625\n      ],\n      [\n        \"▁止めて\",\n        -11.8988618850708\n      ],\n      [\n        \"▁商用\",\n        -11.89906120300293\n      ],\n      [\n        \"▁公民\",\n        -11.899177551269531\n      ],\n      [\n        \"▁Ne\",\n        -11.899336814880371\n      ],\n      [\n        \"ヴァル\",\n        -11.899406433105469\n      ],\n      [\n        \"▁ボウル\",\n        -11.899417877197266\n      ],\n      [\n        \"ico\",\n        -11.89957332611084\n      ],\n      [\n        \"▁チュー\",\n        -11.899761199951172\n      ],\n      [\n        \"試験\",\n        -11.89993953704834\n      ],\n      [\n        \"▁カワ\",\n        -11.899945259094238\n      ],\n      [\n        \"▁集積\",\n        -11.900083541870117\n      ],\n      [\n        \"▁乗務\",\n        -11.90012264251709\n      ],\n      [\n        \"▁盗撮\",\n        -11.900187492370605\n      ],\n      [\n        \"▁ブロー\",\n        -11.90047836303711\n      ],\n      [\n        \"▁家系\",\n        -11.900484085083008\n      ],\n      [\n        \"ダラ\",\n        -11.900489807128906\n      ],\n      [\n        \"▁じゅう\",\n        -11.9005765914917\n      ],\n      [\n        \"050\",\n        -11.90066146850586\n      ],\n      [\n        \"▁チェア\",\n        -11.901004791259766\n      ],\n      [\n        \"台湾\",\n        -11.901022911071777\n      ],\n      [\n        \"▁追って\",\n        -11.901054382324219\n      ],\n      [\n        \"qu\",\n        -11.9011812210083\n      ],\n      [\n        \"▁家計\",\n        -11.901288986206055\n      ],\n      [\n        \"her\",\n        -11.901326179504395\n      ],\n      [\n        \"▁整える\",\n        -11.90151596069336\n      ],\n      [\n        \"▁スクエア\",\n        -11.901588439941406\n      ],\n      [\n        \"▁凝\",\n        -11.901695251464844\n      ],\n      [\n        \"www\",\n        -11.901849746704102\n      ],\n      [\n        \"ガラ\",\n        -11.901856422424316\n      ],\n      [\n        \"▁越え\",\n        -11.901926040649414\n      ],\n      [\n        \"ile\",\n        -11.902092933654785\n      ],\n      [\n        \"▁作画\",\n        -11.902121543884277\n      ],\n      [\n        \"ゴス\",\n        -11.902169227600098\n      ],\n      [\n        \"▁純正\",\n        -11.90237808227539\n      ],\n      [\n        \"外国\",\n        -11.902423858642578\n      ],\n      [\n        \"▁あいだ\",\n        -11.902578353881836\n      ],\n      [\n        \"▁通った\",\n        -11.90295124053955\n      ],\n      [\n        \"▁納\",\n        -11.903011322021484\n      ],\n      [\n        \"▁離れる\",\n        -11.903292655944824\n      ],\n      [\n        \"▁乳首\",\n        -11.903465270996094\n      ],\n      [\n        \"▁美味し\",\n        -11.903558731079102\n      ],\n      [\n        \"▁剥\",\n        -11.903575897216797\n      ],\n      [\n        \"▁踏まえて\",\n        -11.90369701385498\n      ],\n      [\n        \"れん\",\n        -11.903937339782715\n      ],\n      [\n        \"▁金庫\",\n        -11.903952598571777\n      ],\n      [\n        \"PR\",\n        -11.904041290283203\n      ],\n      [\n        \"JI\",\n        -11.904220581054688\n      ],\n      [\n        \"じゅ\",\n        -11.904335021972656\n      ],\n      [\n        \"▁木曜日\",\n        -11.90444278717041\n      ],\n      [\n        \"立つ\",\n        -11.904596328735352\n      ],\n      [\n        \"▁折れ\",\n        -11.904745101928711\n      ],\n      [\n        \"▁農学\",\n        -11.904830932617188\n      ],\n      [\n        \"脱\",\n        -11.905036926269531\n      ],\n      [\n        \"掃\",\n        -11.905157089233398\n      ],\n      [\n        \"▁ハナ\",\n        -11.905303001403809\n      ],\n      [\n        \"▁本国\",\n        -11.905312538146973\n      ],\n      [\n        \"▁焼肉\",\n        -11.905458450317383\n      ],\n      [\n        \"カメラ\",\n        -11.905552864074707\n      ],\n      [\n        \"▁ぴったり\",\n        -11.905632019042969\n      ],\n      [\n        \"▁惹か\",\n        -11.90564250946045\n      ],\n      [\n        \"全体\",\n        -11.905661582946777\n      ],\n      [\n        \"▁農地\",\n        -11.90579605102539\n      ],\n      [\n        \"▁抜ける\",\n        -11.905957221984863\n      ],\n      [\n        \"ビオ\",\n        -11.906026840209961\n      ],\n      [\n        \"▁園芸\",\n        -11.906054496765137\n      ],\n      [\n        \"▁孤立\",\n        -11.906106948852539\n      ],\n      [\n        \"▁図って\",\n        -11.906139373779297\n      ],\n      [\n        \"ings\",\n        -11.906285285949707\n      ],\n      [\n        \"▁民事\",\n        -11.90654468536377\n      ],\n      [\n        \"ッセル\",\n        -11.906548500061035\n      ],\n      [\n        \"▁ピース\",\n        -11.906574249267578\n      ],\n      [\n        \"▁相模原\",\n        -11.906610488891602\n      ],\n      [\n        \"▁妥\",\n        -11.906641960144043\n      ],\n      [\n        \"胸\",\n        -11.906789779663086\n      ],\n      [\n        \"▁OP\",\n        -11.906939506530762\n      ],\n      [\n        \"▁部員\",\n        -11.907051086425781\n      ],\n      [\n        \"▁社会党\",\n        -11.907052040100098\n      ],\n      [\n        \"▁1914\",\n        -11.907380104064941\n      ],\n      [\n        \"警察\",\n        -11.90742015838623\n      ],\n      [\n        \"▁貴方\",\n        -11.907439231872559\n      ],\n      [\n        \"▁市議\",\n        -11.907705307006836\n      ],\n      [\n        \"▁えき\",\n        -11.907803535461426\n      ],\n      [\n        \"ミナ\",\n        -11.907817840576172\n      ],\n      [\n        \"▁筆者\",\n        -11.90802001953125\n      ],\n      [\n        \"▁小さ\",\n        -11.90804386138916\n      ],\n      [\n        \"▁多くて\",\n        -11.908332824707031\n      ],\n      [\n        \"▁240\",\n        -11.908380508422852\n      ],\n      [\n        \"▁筑波\",\n        -11.908468246459961\n      ],\n      [\n        \"▁まぁ\",\n        -11.908479690551758\n      ],\n      [\n        \"▁去る\",\n        -11.908793449401855\n      ],\n      [\n        \"▁iTunes\",\n        -11.908817291259766\n      ],\n      [\n        \"ster\",\n        -11.909052848815918\n      ],\n      [\n        \"▁104\",\n        -11.909075736999512\n      ],\n      [\n        \"ボリ\",\n        -11.909097671508789\n      ],\n      [\n        \"▁(^\",\n        -11.909110069274902\n      ],\n      [\n        \"躍\",\n        -11.909292221069336\n      ],\n      [\n        \"▁1909\",\n        -11.909402847290039\n      ],\n      [\n        \"▁コメ\",\n        -11.909451484680176\n      ],\n      [\n        \"▁特撮\",\n        -11.909533500671387\n      ],\n      [\n        \"▁ATM\",\n        -11.909581184387207\n      ],\n      [\n        \"▁加わる\",\n        -11.909830093383789\n      ],\n      [\n        \"▁快感\",\n        -11.909914016723633\n      ],\n      [\n        \"▁変態\",\n        -11.909932136535645\n      ],\n      [\n        \"▁分ける\",\n        -11.909993171691895\n      ],\n      [\n        \"▁ref\",\n        -11.910035133361816\n      ],\n      [\n        \"▁明示\",\n        -11.910168647766113\n      ],\n      [\n        \"DVD\",\n        -11.910297393798828\n      ],\n      [\n        \"▁ユニークな\",\n        -11.910357475280762\n      ],\n      [\n        \"▁長谷川\",\n        -11.910492897033691\n      ],\n      [\n        \"▁細い\",\n        -11.91054630279541\n      ],\n      [\n        \"▁アップル\",\n        -11.910689353942871\n      ],\n      [\n        \"契約\",\n        -11.91086196899414\n      ],\n      [\n        \"▁ごみ\",\n        -11.910931587219238\n      ],\n      [\n        \"▁圧迫\",\n        -11.911116600036621\n      ],\n      [\n        \"▁安芸\",\n        -11.911242485046387\n      ],\n      [\n        \"続く\",\n        -11.911247253417969\n      ],\n      [\n        \"▁打って\",\n        -11.911346435546875\n      ],\n      [\n        \"▁10,000\",\n        -11.911456108093262\n      ],\n      [\n        \"▁生きた\",\n        -11.911559104919434\n      ],\n      [\n        \"▁眠\",\n        -11.91156005859375\n      ],\n      [\n        \"▁たけ\",\n        -11.911650657653809\n      ],\n      [\n        \"ガリ\",\n        -11.911674499511719\n      ],\n      [\n        \"▁リバー\",\n        -11.911971092224121\n      ],\n      [\n        \"▁福袋\",\n        -11.912120819091797\n      ],\n      [\n        \"▁PM\",\n        -11.91250991821289\n      ],\n      [\n        \"fa\",\n        -11.912638664245605\n      ],\n      [\n        \"託\",\n        -11.912663459777832\n      ],\n      [\n        \"▁ma\",\n        -11.912700653076172\n      ],\n      [\n        \"イヤ\",\n        -11.912755012512207\n      ],\n      [\n        \"▁奪取\",\n        -11.912910461425781\n      ],\n      [\n        \"▁ドラえもん\",\n        -11.912945747375488\n      ],\n      [\n        \"▁作ろう\",\n        -11.913007736206055\n      ],\n      [\n        \"ピオ\",\n        -11.913337707519531\n      ],\n      [\n        \"▁点数\",\n        -11.913516998291016\n      ],\n      [\n        \"▁VI\",\n        -11.913695335388184\n      ],\n      [\n        \"ゾー\",\n        -11.913737297058105\n      ],\n      [\n        \"▁ひたすら\",\n        -11.913738250732422\n      ],\n      [\n        \"観光\",\n        -11.91388988494873\n      ],\n      [\n        \"1962\",\n        -11.913909912109375\n      ],\n      [\n        \"▁就労\",\n        -11.913926124572754\n      ],\n      [\n        \"▁沿\",\n        -11.914148330688477\n      ],\n      [\n        \"▁指令\",\n        -11.914164543151855\n      ],\n      [\n        \"テア\",\n        -11.914203643798828\n      ],\n      [\n        \"▁スプレー\",\n        -11.914234161376953\n      ],\n      [\n        \"▁教区\",\n        -11.914271354675293\n      ],\n      [\n        \"▁ステッカー\",\n        -11.914353370666504\n      ],\n      [\n        \"▁標識\",\n        -11.914637565612793\n      ],\n      [\n        \"▁中立\",\n        -11.914695739746094\n      ],\n      [\n        \"▁日本橋\",\n        -11.914695739746094\n      ],\n      [\n        \"よろしく\",\n        -11.914756774902344\n      ],\n      [\n        \"プトン\",\n        -11.914803504943848\n      ],\n      [\n        \"▁シャル\",\n        -11.914824485778809\n      ],\n      [\n        \"▁数千\",\n        -11.914883613586426\n      ],\n      [\n        \"ミオ\",\n        -11.914897918701172\n      ],\n      [\n        \"ライフ\",\n        -11.914973258972168\n      ],\n      [\n        \"それにしても\",\n        -11.91514778137207\n      ],\n      [\n        \"▁配偶\",\n        -11.915255546569824\n      ],\n      [\n        \"▁ジャニーズ\",\n        -11.915299415588379\n      ],\n      [\n        \"▁ゴジラ\",\n        -11.915325164794922\n      ],\n      [\n        \"▁繁\",\n        -11.915343284606934\n      ],\n      [\n        \"▁リトアニア\",\n        -11.915380477905273\n      ],\n      [\n        \"▁傑作\",\n        -11.91550064086914\n      ],\n      [\n        \"▁コク\",\n        -11.915724754333496\n      ],\n      [\n        \"予約\",\n        -11.91585922241211\n      ],\n      [\n        \"亀\",\n        -11.916269302368164\n      ],\n      [\n        \"GS\",\n        -11.916316986083984\n      ],\n      [\n        \"▁討伐\",\n        -11.916387557983398\n      ],\n      [\n        \"▁BD\",\n        -11.916393280029297\n      ],\n      [\n        \"ボード\",\n        -11.916406631469727\n      ],\n      [\n        \"▁ES\",\n        -11.916481971740723\n      ],\n      [\n        \"▁ビックリ\",\n        -11.916516304016113\n      ],\n      [\n        \"▁越える\",\n        -11.916563987731934\n      ],\n      [\n        \"▁的中\",\n        -11.916587829589844\n      ],\n      [\n        \"▁騙\",\n        -11.916604042053223\n      ],\n      [\n        \"1920\",\n        -11.916844367980957\n      ],\n      [\n        \"モト\",\n        -11.916864395141602\n      ],\n      [\n        \"▁PD\",\n        -11.916877746582031\n      ],\n      [\n        \"▁高めて\",\n        -11.916905403137207\n      ],\n      [\n        \"▁去って\",\n        -11.917095184326172\n      ],\n      [\n        \"▁つらい\",\n        -11.917234420776367\n      ],\n      [\n        \"▁救い\",\n        -11.917289733886719\n      ],\n      [\n        \"▁読める\",\n        -11.917309761047363\n      ],\n      [\n        \"ルイ\",\n        -11.917315483093262\n      ],\n      [\n        \"▁広げる\",\n        -11.91738510131836\n      ],\n      [\n        \"▁処女\",\n        -11.917511940002441\n      ],\n      [\n        \"▁陣営\",\n        -11.917531967163086\n      ],\n      [\n        \"▁同じです\",\n        -11.917571067810059\n      ],\n      [\n        \"▁パール\",\n        -11.917691230773926\n      ],\n      [\n        \"▁せたり\",\n        -11.917728424072266\n      ],\n      [\n        \"▁大尉\",\n        -11.917787551879883\n      ],\n      [\n        \"▁年賀\",\n        -11.9177885055542\n      ],\n      [\n        \"庄\",\n        -11.91779613494873\n      ],\n      [\n        \"▁飾\",\n        -11.91793441772461\n      ],\n      [\n        \"▁ふじ\",\n        -11.918191909790039\n      ],\n      [\n        \"▁着る\",\n        -11.91843318939209\n      ],\n      [\n        \"▁判事\",\n        -11.918475151062012\n      ],\n      [\n        \"コレ\",\n        -11.918492317199707\n      ],\n      [\n        \"▁イスラーム\",\n        -11.918681144714355\n      ],\n      [\n        \"▁篤\",\n        -11.918863296508789\n      ],\n      [\n        \"▁投じ\",\n        -11.918919563293457\n      ],\n      [\n        \"▁新年\",\n        -11.919120788574219\n      ],\n      [\n        \"▁1912\",\n        -11.919193267822266\n      ],\n      [\n        \"▁プロダクト\",\n        -11.919212341308594\n      ],\n      [\n        \"▁火曜日\",\n        -11.919282913208008\n      ],\n      [\n        \"▁ダッシュ\",\n        -11.91930103302002\n      ],\n      [\n        \"▁急遽\",\n        -11.919302940368652\n      ],\n      [\n        \"▁成熟\",\n        -11.919351577758789\n      ],\n      [\n        \"▁逃れ\",\n        -11.919363021850586\n      ],\n      [\n        \"っぴ\",\n        -11.919365882873535\n      ],\n      [\n        \"婆\",\n        -11.919478416442871\n      ],\n      [\n        \"▁捕獲\",\n        -11.91948127746582\n      ],\n      [\n        \"▁民営\",\n        -11.91950511932373\n      ],\n      [\n        \"舟\",\n        -11.919570922851562\n      ],\n      [\n        \"ild\",\n        -11.919621467590332\n      ],\n      [\n        \"山口\",\n        -11.919657707214355\n      ],\n      [\n        \"▁バスト\",\n        -11.919713020324707\n      ],\n      [\n        \"助かり\",\n        -11.91981315612793\n      ],\n      [\n        \"DE\",\n        -11.919819831848145\n      ],\n      [\n        \"▁伊東\",\n        -11.919867515563965\n      ],\n      [\n        \"▁前者\",\n        -11.920058250427246\n      ],\n      [\n        \"▁名刺\",\n        -11.920275688171387\n      ],\n      [\n        \"▁京阪\",\n        -11.920319557189941\n      ],\n      [\n        \"▁赤色\",\n        -11.92033576965332\n      ],\n      [\n        \"▁娯楽\",\n        -11.920541763305664\n      ],\n      [\n        \"▁顎\",\n        -11.92073917388916\n      ],\n      [\n        \"▁進撃\",\n        -11.92076301574707\n      ],\n      [\n        \"▁分配\",\n        -11.920974731445312\n      ],\n      [\n        \"暮\",\n        -11.92104721069336\n      ],\n      [\n        \"▁一郎\",\n        -11.921248435974121\n      ],\n      [\n        \"Android\",\n        -11.921265602111816\n      ],\n      [\n        \"▁ライナー\",\n        -11.92173957824707\n      ],\n      [\n        \"▁Ju\",\n        -11.921921730041504\n      ],\n      [\n        \"奨\",\n        -11.921953201293945\n      ],\n      [\n        \"▁AL\",\n        -11.92210578918457\n      ],\n      [\n        \"略称\",\n        -11.922106742858887\n      ],\n      [\n        \"▁筆記\",\n        -11.92214298248291\n      ],\n      [\n        \"▁炭酸\",\n        -11.922432899475098\n      ],\n      [\n        \"▁プチ\",\n        -11.922483444213867\n      ],\n      [\n        \"▁ラジ\",\n        -11.922507286071777\n      ],\n      [\n        \"▁ラフ\",\n        -11.922595977783203\n      ],\n      [\n        \"▁倉敷\",\n        -11.922602653503418\n      ],\n      [\n        \"まえ\",\n        -11.92269229888916\n      ],\n      [\n        \"▁基調\",\n        -11.922707557678223\n      ],\n      [\n        \"▁領地\",\n        -11.92283821105957\n      ],\n      [\n        \"返し\",\n        -11.922884941101074\n      ],\n      [\n        \"▁杏\",\n        -11.922887802124023\n      ],\n      [\n        \"▁取付\",\n        -11.922913551330566\n      ],\n      [\n        \"▁フリーランス\",\n        -11.923018455505371\n      ],\n      [\n        \"▁願\",\n        -11.92304515838623\n      ],\n      [\n        \"あん\",\n        -11.923063278198242\n      ],\n      [\n        \"▁次官\",\n        -11.923163414001465\n      ],\n      [\n        \"▁固く\",\n        -11.923202514648438\n      ],\n      [\n        \"▁わずかに\",\n        -11.92321491241455\n      ],\n      [\n        \"▁レスリング\",\n        -11.923425674438477\n      ],\n      [\n        \"▁熱中\",\n        -11.923550605773926\n      ],\n      [\n        \"res\",\n        -11.923689842224121\n      ],\n      [\n        \"ヴェー\",\n        -11.923722267150879\n      ],\n      [\n        \"▁利息\",\n        -11.923738479614258\n      ],\n      [\n        \"▁後世\",\n        -11.923798561096191\n      ],\n      [\n        \"▁解剖\",\n        -11.923830032348633\n      ],\n      [\n        \"▁プリンセス\",\n        -11.923834800720215\n      ],\n      [\n        \"▁壮\",\n        -11.923957824707031\n      ],\n      [\n        \"▁NEW\",\n        -11.92414665222168\n      ],\n      [\n        \"▁辞め\",\n        -11.924375534057617\n      ],\n      [\n        \"▁梱包\",\n        -11.924458503723145\n      ],\n      [\n        \"▁斜面\",\n        -11.924602508544922\n      ],\n      [\n        \"▁噛み\",\n        -11.924661636352539\n      ],\n      [\n        \"▁夕食\",\n        -11.924748420715332\n      ],\n      [\n        \"▁三男\",\n        -11.92478084564209\n      ],\n      [\n        \"980\",\n        -11.92485237121582\n      ],\n      [\n        \"熊本\",\n        -11.924899101257324\n      ],\n      [\n        \"▁NI\",\n        -11.925008773803711\n      ],\n      [\n        \"▁ビューティー\",\n        -11.925287246704102\n      ],\n      [\n        \"▁賛同\",\n        -11.925431251525879\n      ],\n      [\n        \"▁やさしい\",\n        -11.925436019897461\n      ],\n      [\n        \"▁松竹\",\n        -11.925454139709473\n      ],\n      [\n        \"▁反響\",\n        -11.925491333007812\n      ],\n      [\n        \"▁まり\",\n        -11.925585746765137\n      ],\n      [\n        \"▁すっきり\",\n        -11.925618171691895\n      ],\n      [\n        \"唐\",\n        -11.9256591796875\n      ],\n      [\n        \"▁ゲージ\",\n        -11.925753593444824\n      ],\n      [\n        \"大会\",\n        -11.925768852233887\n      ],\n      [\n        \"減\",\n        -11.925795555114746\n      ],\n      [\n        \"▁進ま\",\n        -11.925924301147461\n      ],\n      [\n        \"▁洞窟\",\n        -11.926054954528809\n      ],\n      [\n        \"CHI\",\n        -11.926125526428223\n      ],\n      [\n        \"▁Day\",\n        -11.926247596740723\n      ],\n      [\n        \"▁洗顔\",\n        -11.926313400268555\n      ],\n      [\n        \"ジョー\",\n        -11.926465034484863\n      ],\n      [\n        \"▁blog\",\n        -11.92662239074707\n      ],\n      [\n        \"ラウ\",\n        -11.92662525177002\n      ],\n      [\n        \"ora\",\n        -11.92667007446289\n      ],\n      [\n        \"キャラクター\",\n        -11.92674732208252\n      ],\n      [\n        \"ーネ\",\n        -11.926751136779785\n      ],\n      [\n        \"ney\",\n        -11.92678451538086\n      ],\n      [\n        \"▁メーター\",\n        -11.926839828491211\n      ],\n      [\n        \"▁定めて\",\n        -11.92685317993164\n      ],\n      [\n        \"▁パナソニック\",\n        -11.9268798828125\n      ],\n      [\n        \"▁悲しい\",\n        -11.926883697509766\n      ],\n      [\n        \"▁じゃあ\",\n        -11.926974296569824\n      ],\n      [\n        \"▁引いて\",\n        -11.927225112915039\n      ],\n      [\n        \"▁増殖\",\n        -11.92741870880127\n      ],\n      [\n        \"▁so\",\n        -11.927427291870117\n      ],\n      [\n        \"。\",\n        -11.927454948425293\n      ],\n      [\n        \"AGE\",\n        -11.927563667297363\n      ],\n      [\n        \"▁品揃え\",\n        -11.927570343017578\n      ],\n      [\n        \"▁順序\",\n        -11.927661895751953\n      ],\n      [\n        \"▁同居\",\n        -11.927669525146484\n      ],\n      [\n        \"htt\",\n        -11.92769718170166\n      ],\n      [\n        \"▁AB\",\n        -11.927720069885254\n      ],\n      [\n        \"▁Str\",\n        -11.927774429321289\n      ],\n      [\n        \"IF\",\n        -11.927785873413086\n      ],\n      [\n        \"▁消し\",\n        -11.927800178527832\n      ],\n      [\n        \"▁下がって\",\n        -11.927844047546387\n      ],\n      [\n        \"▁アズ\",\n        -11.927922248840332\n      ],\n      [\n        \"▁眠り\",\n        -11.927968978881836\n      ],\n      [\n        \"▁障がい\",\n        -11.928016662597656\n      ],\n      [\n        \"▁封じ\",\n        -11.928112983703613\n      ],\n      [\n        \"▁探査\",\n        -11.928210258483887\n      ],\n      [\n        \"hy\",\n        -11.928211212158203\n      ],\n      [\n        \"ベック\",\n        -11.928372383117676\n      ],\n      [\n        \"ting\",\n        -11.928399085998535\n      ],\n      [\n        \"▁見舞わ\",\n        -11.928462982177734\n      ],\n      [\n        \"▁ニンテンドー\",\n        -11.928511619567871\n      ],\n      [\n        \"愛称\",\n        -11.928546905517578\n      ],\n      [\n        \"塾\",\n        -11.92856216430664\n      ],\n      [\n        \"▁近づく\",\n        -11.928757667541504\n      ],\n      [\n        \"▁気配\",\n        -11.928894996643066\n      ],\n      [\n        \"▁幕末\",\n        -11.928987503051758\n      ],\n      [\n        \"und\",\n        -11.929101943969727\n      ],\n      [\n        \"▁島津\",\n        -11.9295015335083\n      ],\n      [\n        \"▁フック\",\n        -11.929540634155273\n      ],\n      [\n        \"▁goo\",\n        -11.929583549499512\n      ],\n      [\n        \"摩\",\n        -11.929601669311523\n      ],\n      [\n        \"▁ギャップ\",\n        -11.929605484008789\n      ],\n      [\n        \"▁一人ひとり\",\n        -11.929643630981445\n      ],\n      [\n        \"▁PK\",\n        -11.929658889770508\n      ],\n      [\n        \"▁はじめた\",\n        -11.929664611816406\n      ],\n      [\n        \"▁アバ\",\n        -11.929758071899414\n      ],\n      [\n        \"▁LO\",\n        -11.929841041564941\n      ],\n      [\n        \"まん\",\n        -11.929848670959473\n      ],\n      [\n        \"▁豊富\",\n        -11.929862022399902\n      ],\n      [\n        \"▁しゅ\",\n        -11.929936408996582\n      ],\n      [\n        \"▁包\",\n        -11.929937362670898\n      ],\n      [\n        \"▁胡\",\n        -11.929973602294922\n      ],\n      [\n        \"▁簡単で\",\n        -11.930002212524414\n      ],\n      [\n        \"▁AN\",\n        -11.930086135864258\n      ],\n      [\n        \"▁立てた\",\n        -11.93014907836914\n      ],\n      [\n        \"▁インターフェイス\",\n        -11.930174827575684\n      ],\n      [\n        \"▁リーガ\",\n        -11.930407524108887\n      ],\n      [\n        \"KU\",\n        -11.930431365966797\n      ],\n      [\n        \"▁保ち\",\n        -11.930529594421387\n      ],\n      [\n        \"▁のんびり\",\n        -11.930609703063965\n      ],\n      [\n        \"せっかく\",\n        -11.930615425109863\n      ],\n      [\n        \"▁ブライ\",\n        -11.93072509765625\n      ],\n      [\n        \"頃\",\n        -11.930767059326172\n      ],\n      [\n        \"nu\",\n        -11.93082332611084\n      ],\n      [\n        \"ッラ\",\n        -11.930859565734863\n      ],\n      [\n        \"▁達して\",\n        -11.930904388427734\n      ],\n      [\n        \"▁卓球\",\n        -11.931087493896484\n      ],\n      [\n        \"マラ\",\n        -11.931124687194824\n      ],\n      [\n        \"▁お礼\",\n        -11.93115234375\n      ],\n      [\n        \"▁ヲ\",\n        -11.93117904663086\n      ],\n      [\n        \"▁OB\",\n        -11.931299209594727\n      ],\n      [\n        \"che\",\n        -11.931374549865723\n      ],\n      [\n        \"ook\",\n        -11.931952476501465\n      ],\n      [\n        \"▁変革\",\n        -11.931991577148438\n      ],\n      [\n        \"代わり\",\n        -11.932100296020508\n      ],\n      [\n        \"▁高値\",\n        -11.9323148727417\n      ],\n      [\n        \"▁食糧\",\n        -11.932372093200684\n      ],\n      [\n        \"▁103\",\n        -11.932451248168945\n      ],\n      [\n        \"▁くり\",\n        -11.932515144348145\n      ],\n      [\n        \"anc\",\n        -11.932737350463867\n      ],\n      [\n        \"▁ハット\",\n        -11.932756423950195\n      ],\n      [\n        \"墓\",\n        -11.932768821716309\n      ],\n      [\n        \"ペイ\",\n        -11.932825088500977\n      ],\n      [\n        \"籠\",\n        -11.933112144470215\n      ],\n      [\n        \"▁ファーム\",\n        -11.933258056640625\n      ],\n      [\n        \"▁征\",\n        -11.933281898498535\n      ],\n      [\n        \"一般に\",\n        -11.93331241607666\n      ],\n      [\n        \"ハル\",\n        -11.933314323425293\n      ],\n      [\n        \"▁仕立て\",\n        -11.933326721191406\n      ],\n      [\n        \"▁滑り\",\n        -11.933343887329102\n      ],\n      [\n        \"▁降板\",\n        -11.933439254760742\n      ],\n      [\n        \"▁似\",\n        -11.933455467224121\n      ],\n      [\n        \"1961\",\n        -11.93356704711914\n      ],\n      [\n        \"▁小泉\",\n        -11.933574676513672\n      ],\n      [\n        \"▁脆弱\",\n        -11.933659553527832\n      ],\n      [\n        \"ゆう\",\n        -11.933795928955078\n      ],\n      [\n        \"▁終える\",\n        -11.933956146240234\n      ],\n      [\n        \"落ち\",\n        -11.934065818786621\n      ],\n      [\n        \"▁John\",\n        -11.934112548828125\n      ],\n      [\n        \"▁必見\",\n        -11.934440612792969\n      ],\n      [\n        \"▁貼り\",\n        -11.934442520141602\n      ],\n      [\n        \"▁トゥー\",\n        -11.93455696105957\n      ],\n      [\n        \"▁デリヘル\",\n        -11.934557914733887\n      ],\n      [\n        \"▁便秘\",\n        -11.93460750579834\n      ],\n      [\n        \"▁参拝\",\n        -11.93465518951416\n      ],\n      [\n        \"▁髪型\",\n        -11.93468952178955\n      ],\n      [\n        \"▁1917\",\n        -11.934691429138184\n      ],\n      [\n        \"▁マイクロソフト\",\n        -11.93478775024414\n      ],\n      [\n        \"▁切手\",\n        -11.934840202331543\n      ],\n      [\n        \"▁ムダ\",\n        -11.934864044189453\n      ],\n      [\n        \"▁承知\",\n        -11.93490982055664\n      ],\n      [\n        \"▁鉱物\",\n        -11.93502140045166\n      ],\n      [\n        \"LP\",\n        -11.935210227966309\n      ],\n      [\n        \"ek\",\n        -11.935307502746582\n      ],\n      [\n        \"▁疲れて\",\n        -11.935354232788086\n      ],\n      [\n        \"▁本田\",\n        -11.935479164123535\n      ],\n      [\n        \"DK\",\n        -11.935503005981445\n      ],\n      [\n        \"▁子宮\",\n        -11.935593605041504\n      ],\n      [\n        \"▁追う\",\n        -11.935620307922363\n      ],\n      [\n        \"來\",\n        -11.935637474060059\n      ],\n      [\n        \"▁都会\",\n        -11.935708045959473\n      ],\n      [\n        \"移\",\n        -11.935734748840332\n      ],\n      [\n        \"▁衰え\",\n        -11.935747146606445\n      ],\n      [\n        \"▁教諭\",\n        -11.935750007629395\n      ],\n      [\n        \"▁ディープ\",\n        -11.935821533203125\n      ],\n      [\n        \"ory\",\n        -11.935999870300293\n      ],\n      [\n        \"▁ビート\",\n        -11.936004638671875\n      ],\n      [\n        \"じる\",\n        -11.936140060424805\n      ],\n      [\n        \"▁退会\",\n        -11.936169624328613\n      ],\n      [\n        \"コウ\",\n        -11.936324119567871\n      ],\n      [\n        \"径\",\n        -11.936529159545898\n      ],\n      [\n        \"▁創出\",\n        -11.936545372009277\n      ],\n      [\n        \"▁エム\",\n        -11.936603546142578\n      ],\n      [\n        \"▁苦しい\",\n        -11.936646461486816\n      ],\n      [\n        \"パウ\",\n        -11.936891555786133\n      ],\n      [\n        \"▁dis\",\n        -11.936902046203613\n      ],\n      [\n        \"泣\",\n        -11.936992645263672\n      ],\n      [\n        \"▁抱く\",\n        -11.937081336975098\n      ],\n      [\n        \"▁シングルス\",\n        -11.937095642089844\n      ],\n      [\n        \"▁小田急\",\n        -11.937366485595703\n      ],\n      [\n        \"▁交わ\",\n        -11.937378883361816\n      ],\n      [\n        \"serv\",\n        -11.937414169311523\n      ],\n      [\n        \"ツー\",\n        -11.93743896484375\n      ],\n      [\n        \"都市\",\n        -11.937565803527832\n      ],\n      [\n        \"膳\",\n        -11.937620162963867\n      ],\n      [\n        \"束\",\n        -11.937655448913574\n      ],\n      [\n        \"▁染\",\n        -11.9376802444458\n      ],\n      [\n        \"建築\",\n        -11.937731742858887\n      ],\n      [\n        \"スル\",\n        -11.93779468536377\n      ],\n      [\n        \"▁元素\",\n        -11.937845230102539\n      ],\n      [\n        \"▁LI\",\n        -11.937910079956055\n      ],\n      [\n        \"▁悲しみ\",\n        -11.938079833984375\n      ],\n      [\n        \"▁支社\",\n        -11.93813419342041\n      ],\n      [\n        \"▁配当\",\n        -11.938185691833496\n      ],\n      [\n        \"▁謳\",\n        -11.938294410705566\n      ],\n      [\n        \"▁曲目\",\n        -11.938447952270508\n      ],\n      [\n        \"そのうち\",\n        -11.938526153564453\n      ],\n      [\n        \"▁ディナー\",\n        -11.938647270202637\n      ],\n      [\n        \"▁un\",\n        -11.938691139221191\n      ],\n      [\n        \"▁Switch\",\n        -11.938796997070312\n      ],\n      [\n        \"ンツ\",\n        -11.938898086547852\n      ],\n      [\n        \"ツァー\",\n        -11.938966751098633\n      ],\n      [\n        \"▁ハードル\",\n        -11.938971519470215\n      ],\n      [\n        \"▁松井\",\n        -11.938972473144531\n      ],\n      [\n        \"抄\",\n        -11.938973426818848\n      ],\n      [\n        \"▁告発\",\n        -11.939064979553223\n      ],\n      [\n        \"▁深刻\",\n        -11.939148902893066\n      ],\n      [\n        \"カレ\",\n        -11.939297676086426\n      ],\n      [\n        \"▁moncler\",\n        -11.939515113830566\n      ],\n      [\n        \"▁フレンチ\",\n        -11.939606666564941\n      ],\n      [\n        \"▁頬\",\n        -11.939702987670898\n      ],\n      [\n        \"ロア\",\n        -11.939775466918945\n      ],\n      [\n        \"ESS\",\n        -11.939857482910156\n      ],\n      [\n        \"▁ロボ\",\n        -11.939878463745117\n      ],\n      [\n        \"▁寄生\",\n        -11.940011024475098\n      ],\n      [\n        \"▁提言\",\n        -11.940057754516602\n      ],\n      [\n        \"▁エビ\",\n        -11.940176010131836\n      ],\n      [\n        \"▁バージニア\",\n        -11.940217018127441\n      ],\n      [\n        \"▁まもなく\",\n        -11.940333366394043\n      ],\n      [\n        \"▁ダイニング\",\n        -11.940600395202637\n      ],\n      [\n        \"ニル\",\n        -11.94063663482666\n      ],\n      [\n        \"▁分かれ\",\n        -11.940644264221191\n      ],\n      [\n        \"▁改変\",\n        -11.940659523010254\n      ],\n      [\n        \"▁ワー\",\n        -11.940884590148926\n      ],\n      [\n        \"▁受け入れて\",\n        -11.940959930419922\n      ],\n      [\n        \"▁ナトリウム\",\n        -11.940961837768555\n      ],\n      [\n        \"▁ヴォ\",\n        -11.940999984741211\n      ],\n      [\n        \"▁集英社\",\n        -11.941052436828613\n      ],\n      [\n        \"▁耐震\",\n        -11.941071510314941\n      ],\n      [\n        \"▁ぴ\",\n        -11.941084861755371\n      ],\n      [\n        \"eed\",\n        -11.941174507141113\n      ],\n      [\n        \"▁登校\",\n        -11.941205024719238\n      ],\n      [\n        \"ren\",\n        -11.941229820251465\n      ],\n      [\n        \"▁組む\",\n        -11.941238403320312\n      ],\n      [\n        \"▁戦って\",\n        -11.941304206848145\n      ],\n      [\n        \"タキ\",\n        -11.941481590270996\n      ],\n      [\n        \"食べ\",\n        -11.941546440124512\n      ],\n      [\n        \"▁受け取った\",\n        -11.941673278808594\n      ],\n      [\n        \"▁歌った\",\n        -11.94178295135498\n      ],\n      [\n        \"▁伸びる\",\n        -11.941944122314453\n      ],\n      [\n        \"ろい\",\n        -11.942047119140625\n      ],\n      [\n        \"▁式典\",\n        -11.9420747756958\n      ],\n      [\n        \"周辺\",\n        -11.942106246948242\n      ],\n      [\n        \"▁好調\",\n        -11.942255973815918\n      ],\n      [\n        \"▁かたち\",\n        -11.942317008972168\n      ],\n      [\n        \"ENT\",\n        -11.94243335723877\n      ],\n      [\n        \"▁明る\",\n        -11.942557334899902\n      ],\n      [\n        \"エンド\",\n        -11.942639350891113\n      ],\n      [\n        \"ser\",\n        -11.942766189575195\n      ],\n      [\n        \"▁振り返って\",\n        -11.942774772644043\n      ],\n      [\n        \"▁触媒\",\n        -11.942778587341309\n      ],\n      [\n        \"▁苗\",\n        -11.942839622497559\n      ],\n      [\n        \"じま\",\n        -11.943013191223145\n      ],\n      [\n        \"辛\",\n        -11.9432954788208\n      ],\n      [\n        \"呼\",\n        -11.943326950073242\n      ],\n      [\n        \"同日\",\n        -11.94334888458252\n      ],\n      [\n        \"▁カスタマー\",\n        -11.943498611450195\n      ],\n      [\n        \"製品\",\n        -11.943692207336426\n      ],\n      [\n        \"▁紛失\",\n        -11.943771362304688\n      ],\n      [\n        \"落とさ\",\n        -11.943801879882812\n      ],\n      [\n        \"▁磁気\",\n        -11.943862915039062\n      ],\n      [\n        \"当て\",\n        -11.944086074829102\n      ],\n      [\n        \"小学校\",\n        -11.94413948059082\n      ],\n      [\n        \"▁終日\",\n        -11.944191932678223\n      ],\n      [\n        \"特定\",\n        -11.944201469421387\n      ],\n      [\n        \"▁手がけた\",\n        -11.944320678710938\n      ],\n      [\n        \"AZ\",\n        -11.944341659545898\n      ],\n      [\n        \"▁邪\",\n        -11.944353103637695\n      ],\n      [\n        \"▁Ka\",\n        -11.944485664367676\n      ],\n      [\n        \"ついた\",\n        -11.944514274597168\n      ],\n      [\n        \"逆\",\n        -11.94457721710205\n      ],\n      [\n        \"▁夏季\",\n        -11.944693565368652\n      ],\n      [\n        \"▁ワンマン\",\n        -11.944840431213379\n      ],\n      [\n        \"▁測量\",\n        -11.945021629333496\n      ],\n      [\n        \"暗\",\n        -11.945225715637207\n      ],\n      [\n        \"チュア\",\n        -11.945262908935547\n      ],\n      [\n        \"▁拒絶\",\n        -11.94531536102295\n      ],\n      [\n        \"▁TKO\",\n        -11.945352554321289\n      ],\n      [\n        \"▁とりわけ\",\n        -11.945375442504883\n      ],\n      [\n        \"出会い\",\n        -11.9456205368042\n      ],\n      [\n        \"▁補修\",\n        -11.94572639465332\n      ],\n      [\n        \"▁tr\",\n        -11.945740699768066\n      ],\n      [\n        \"▁鎮圧\",\n        -11.945813179016113\n      ],\n      [\n        \"▁司法書士\",\n        -11.945843696594238\n      ],\n      [\n        \"▁好む\",\n        -11.945880889892578\n      ],\n      [\n        \"▁いったん\",\n        -11.945958137512207\n      ],\n      [\n        \"▁インディ\",\n        -11.945972442626953\n      ],\n      [\n        \"道路\",\n        -11.946024894714355\n      ],\n      [\n        \"▁ソープ\",\n        -11.946296691894531\n      ],\n      [\n        \"▁kW\",\n        -11.946345329284668\n      ],\n      [\n        \"▁出題\",\n        -11.946428298950195\n      ],\n      [\n        \"▁リフト\",\n        -11.946430206298828\n      ],\n      [\n        \"▁増やし\",\n        -11.946464538574219\n      ],\n      [\n        \"▁救\",\n        -11.946900367736816\n      ],\n      [\n        \"▁石原\",\n        -11.946982383728027\n      ],\n      [\n        \"▁紋\",\n        -11.947028160095215\n      ],\n      [\n        \"▁108\",\n        -11.947136878967285\n      ],\n      [\n        \"▁メモリー\",\n        -11.947251319885254\n      ],\n      [\n        \"▁EV\",\n        -11.947458267211914\n      ],\n      [\n        \"▁一流\",\n        -11.947511672973633\n      ],\n      [\n        \"▁きゅう\",\n        -11.94753646850586\n      ],\n      [\n        \"▁凍結\",\n        -11.947602272033691\n      ],\n      [\n        \"巨\",\n        -11.94775390625\n      ],\n      [\n        \"セロ\",\n        -11.94782543182373\n      ],\n      [\n        \"公開\",\n        -11.947884559631348\n      ],\n      [\n        \"似\",\n        -11.947991371154785\n      ],\n      [\n        \"lic\",\n        -11.94814395904541\n      ],\n      [\n        \"▁必然\",\n        -11.948149681091309\n      ],\n      [\n        \"▁高価\",\n        -11.948383331298828\n      ],\n      [\n        \"遣\",\n        -11.948522567749023\n      ],\n      [\n        \"梁\",\n        -11.948704719543457\n      ],\n      [\n        \"▁ダニエル\",\n        -11.948715209960938\n      ],\n      [\n        \"▁カルティエ\",\n        -11.94880485534668\n      ],\n      [\n        \"蓋\",\n        -11.948830604553223\n      ],\n      [\n        \"▁集結\",\n        -11.948851585388184\n      ],\n      [\n        \"▁鈍\",\n        -11.948892593383789\n      ],\n      [\n        \"▁一人一人\",\n        -11.949048042297363\n      ],\n      [\n        \"なんて\",\n        -11.949102401733398\n      ],\n      [\n        \"がく\",\n        -11.949248313903809\n      ],\n      [\n        \"▁Ra\",\n        -11.949254989624023\n      ],\n      [\n        \"▁麻酔\",\n        -11.949338912963867\n      ],\n      [\n        \"どころ\",\n        -11.949641227722168\n      ],\n      [\n        \"▁UC\",\n        -11.950033187866211\n      ],\n      [\n        \"▁マザー\",\n        -11.9501314163208\n      ],\n      [\n        \"▁手がける\",\n        -11.950215339660645\n      ],\n      [\n        \"▁放つ\",\n        -11.950220108032227\n      ],\n      [\n        \"▁つくら\",\n        -11.950315475463867\n      ],\n      [\n        \"住宅\",\n        -11.950334548950195\n      ],\n      [\n        \"▁消毒\",\n        -11.95042896270752\n      ],\n      [\n        \"▁準拠\",\n        -11.95050048828125\n      ],\n      [\n        \"▁クルーズ\",\n        -11.950607299804688\n      ],\n      [\n        \"▁ジオ\",\n        -11.950677871704102\n      ],\n      [\n        \"▁パスタ\",\n        -11.950730323791504\n      ],\n      [\n        \"ムラ\",\n        -11.950740814208984\n      ],\n      [\n        \"浅\",\n        -11.950898170471191\n      ],\n      [\n        \"▁ガチャ\",\n        -11.950945854187012\n      ],\n      [\n        \"▁発作\",\n        -11.951101303100586\n      ],\n      [\n        \"▁恒\",\n        -11.951118469238281\n      ],\n      [\n        \"▁Bluetooth\",\n        -11.951313018798828\n      ],\n      [\n        \"▁占\",\n        -11.951329231262207\n      ],\n      [\n        \"▁観る\",\n        -11.951377868652344\n      ],\n      [\n        \"磨\",\n        -11.951460838317871\n      ],\n      [\n        \"▁活かし\",\n        -11.951590538024902\n      ],\n      [\n        \"▁携わって\",\n        -11.95161247253418\n      ],\n      [\n        \"▁教官\",\n        -11.951622009277344\n      ],\n      [\n        \"▁被った\",\n        -11.951781272888184\n      ],\n      [\n        \"▁内陸\",\n        -11.951817512512207\n      ],\n      [\n        \"即\",\n        -11.95185661315918\n      ],\n      [\n        \"蘭\",\n        -11.952012062072754\n      ],\n      [\n        \"▁両手\",\n        -11.952033996582031\n      ],\n      [\n        \"▁磨き\",\n        -11.952054977416992\n      ],\n      [\n        \"▁乗せて\",\n        -11.952101707458496\n      ],\n      [\n        \"▁農薬\",\n        -11.952184677124023\n      ],\n      [\n        \"▁柴\",\n        -11.952216148376465\n      ],\n      [\n        \"玄\",\n        -11.952251434326172\n      ],\n      [\n        \"▁急性\",\n        -11.952388763427734\n      ],\n      [\n        \"▁叶\",\n        -11.952408790588379\n      ],\n      [\n        \"フー\",\n        -11.95248031616211\n      ],\n      [\n        \"あり\",\n        -11.95251750946045\n      ],\n      [\n        \"ace\",\n        -11.952738761901855\n      ],\n      [\n        \"▁キャバクラ\",\n        -11.952754020690918\n      ],\n      [\n        \"▁ナノ\",\n        -11.952827453613281\n      ],\n      [\n        \"▁麗\",\n        -11.952914237976074\n      ],\n      [\n        \"▁辞退\",\n        -11.95299243927002\n      ],\n      [\n        \"佳\",\n        -11.95315170288086\n      ],\n      [\n        \"塞\",\n        -11.953239440917969\n      ],\n      [\n        \"▁消耗\",\n        -11.953346252441406\n      ],\n      [\n        \"▁プラチナ\",\n        -11.953351020812988\n      ],\n      [\n        \"百万\",\n        -11.953392028808594\n      ],\n      [\n        \"▁近衛\",\n        -11.953397750854492\n      ],\n      [\n        \"▁あきらめ\",\n        -11.953542709350586\n      ],\n      [\n        \"ste\",\n        -11.953584671020508\n      ],\n      [\n        \"ゼー\",\n        -11.953662872314453\n      ],\n      [\n        \"▁合宿\",\n        -11.953716278076172\n      ],\n      [\n        \"▁盛り上がり\",\n        -11.953912734985352\n      ],\n      [\n        \"▁一角\",\n        -11.953923225402832\n      ],\n      [\n        \"ナミ\",\n        -11.953930854797363\n      ],\n      [\n        \"▁パンチ\",\n        -11.954017639160156\n      ],\n      [\n        \"▁寄贈\",\n        -11.954174041748047\n      ],\n      [\n        \"Pro\",\n        -11.954268455505371\n      ],\n      [\n        \"▁ろう\",\n        -11.954270362854004\n      ],\n      [\n        \"▁幾何\",\n        -11.954521179199219\n      ],\n      [\n        \"ae\",\n        -11.95458984375\n      ],\n      [\n        \"▁スコット\",\n        -11.954862594604492\n      ],\n      [\n        \"▁墜落\",\n        -11.954995155334473\n      ],\n      [\n        \"▁漢方\",\n        -11.955093383789062\n      ],\n      [\n        \"▁坊\",\n        -11.955245018005371\n      ],\n      [\n        \"▁å\",\n        -11.955336570739746\n      ],\n      [\n        \"low\",\n        -11.955535888671875\n      ],\n      [\n        \"▁DA\",\n        -11.955588340759277\n      ],\n      [\n        \"▁その分\",\n        -11.95560073852539\n      ],\n      [\n        \"▁見かける\",\n        -11.9557523727417\n      ],\n      [\n        \"▁ラブラドール\",\n        -11.95582103729248\n      ],\n      [\n        \"▁危惧\",\n        -11.95582103729248\n      ],\n      [\n        \"▁用地\",\n        -11.955829620361328\n      ],\n      [\n        \"▁杜\",\n        -11.955878257751465\n      ],\n      [\n        \"▁端子\",\n        -11.955982208251953\n      ],\n      [\n        \"▁行なった\",\n        -11.95620346069336\n      ],\n      [\n        \"▁こま\",\n        -11.956287384033203\n      ],\n      [\n        \"長年\",\n        -11.956308364868164\n      ],\n      [\n        \"干\",\n        -11.95638656616211\n      ],\n      [\n        \"事件\",\n        -11.956392288208008\n      ],\n      [\n        \"▁na\",\n        -11.956741333007812\n      ],\n      [\n        \"▁ドライバ\",\n        -11.956827163696289\n      ],\n      [\n        \"▁下げる\",\n        -11.95688533782959\n      ],\n      [\n        \"▁浴室\",\n        -11.957059860229492\n      ],\n      [\n        \"ならば\",\n        -11.957066535949707\n      ],\n      [\n        \"▁暖かい\",\n        -11.957178115844727\n      ],\n      [\n        \"▁動詞\",\n        -11.957329750061035\n      ],\n      [\n        \"eo\",\n        -11.957331657409668\n      ],\n      [\n        \"▁MT\",\n        -11.95736026763916\n      ],\n      [\n        \"▁上手\",\n        -11.957467079162598\n      ],\n      [\n        \"神戸\",\n        -11.957478523254395\n      ],\n      [\n        \"▁記す\",\n        -11.957778930664062\n      ],\n      [\n        \"▁樹木\",\n        -11.957789421081543\n      ],\n      [\n        \"ンゲン\",\n        -11.957871437072754\n      ],\n      [\n        \"▁階層\",\n        -11.957886695861816\n      ],\n      [\n        \"▁落とした\",\n        -11.957930564880371\n      ],\n      [\n        \"▁つくって\",\n        -11.958069801330566\n      ],\n      [\n        \"▁XP\",\n        -11.958155632019043\n      ],\n      [\n        \"▁幹線\",\n        -11.95852279663086\n      ],\n      [\n        \"誉\",\n        -11.958528518676758\n      ],\n      [\n        \"cu\",\n        -11.958534240722656\n      ],\n      [\n        \"▁網羅\",\n        -11.958741188049316\n      ],\n      [\n        \"やかに\",\n        -11.958783149719238\n      ],\n      [\n        \"▁絶え\",\n        -11.958793640136719\n      ],\n      [\n        \"▁弱く\",\n        -11.958797454833984\n      ],\n      [\n        \"▁衣類\",\n        -11.958887100219727\n      ],\n      [\n        \"▁Sc\",\n        -11.959085464477539\n      ],\n      [\n        \"▁相模\",\n        -11.959141731262207\n      ],\n      [\n        \"play\",\n        -11.959217071533203\n      ],\n      [\n        \"▁蛍光\",\n        -11.959317207336426\n      ],\n      [\n        \"如\",\n        -11.959345817565918\n      ],\n      [\n        \"▁ねこ\",\n        -11.959592819213867\n      ],\n      [\n        \"▁陰謀\",\n        -11.95961856842041\n      ],\n      [\n        \"▁ヤマハ\",\n        -11.959731101989746\n      ],\n      [\n        \"▁称した\",\n        -11.9597806930542\n      ],\n      [\n        \"▁マイン\",\n        -11.959972381591797\n      ],\n      [\n        \"▁烏\",\n        -11.96003532409668\n      ],\n      [\n        \"▁メアリー\",\n        -11.960062026977539\n      ],\n      [\n        \"まち\",\n        -11.960088729858398\n      ],\n      [\n        \"▁車検\",\n        -11.960212707519531\n      ],\n      [\n        \"渓\",\n        -11.960237503051758\n      ],\n      [\n        \"▁バナナ\",\n        -11.960245132446289\n      ],\n      [\n        \"▁いったい\",\n        -11.960480690002441\n      ],\n      [\n        \"▁欠け\",\n        -11.960492134094238\n      ],\n      [\n        \"▁止まら\",\n        -11.960530281066895\n      ],\n      [\n        \"▁ファクトリー\",\n        -11.96060848236084\n      ],\n      [\n        \"まつ\",\n        -11.960654258728027\n      ],\n      [\n        \"テロ\",\n        -11.960790634155273\n      ],\n      [\n        \"▁イイ\",\n        -11.96085262298584\n      ],\n      [\n        \"▁生体\",\n        -11.960886001586914\n      ],\n      [\n        \"▁萩\",\n        -11.96097469329834\n      ],\n      [\n        \"▁ノーベル\",\n        -11.961026191711426\n      ],\n      [\n        \"Microsoft\",\n        -11.961047172546387\n      ],\n      [\n        \"▁le\",\n        -11.961078643798828\n      ],\n      [\n        \"▁理科\",\n        -11.96117115020752\n      ],\n      [\n        \"▁失業\",\n        -11.96117877960205\n      ],\n      [\n        \"▁苦痛\",\n        -11.96119499206543\n      ],\n      [\n        \"ッシャー\",\n        -11.961217880249023\n      ],\n      [\n        \"▁ドローン\",\n        -11.961406707763672\n      ],\n      [\n        \"▁メンタル\",\n        -11.961465835571289\n      ],\n      [\n        \"HOME\",\n        -11.961475372314453\n      ],\n      [\n        \"▁あんまり\",\n        -11.961496353149414\n      ],\n      [\n        \"描\",\n        -11.961589813232422\n      ],\n      [\n        \"▁すず\",\n        -11.961702346801758\n      ],\n      [\n        \"▁体温\",\n        -11.961796760559082\n      ],\n      [\n        \"▁CB\",\n        -11.961886405944824\n      ],\n      [\n        \"▁廻\",\n        -11.96200942993164\n      ],\n      [\n        \"▁成り\",\n        -11.96201229095459\n      ],\n      [\n        \"▁ユニオン\",\n        -11.962064743041992\n      ],\n      [\n        \"▁仕え\",\n        -11.962066650390625\n      ],\n      [\n        \"▁餅\",\n        -11.962089538574219\n      ],\n      [\n        \"▁ウォール\",\n        -11.962128639221191\n      ],\n      [\n        \"シェル\",\n        -11.962374687194824\n      ],\n      [\n        \"▁補充\",\n        -11.962573051452637\n      ],\n      [\n        \"▁柴田\",\n        -11.962575912475586\n      ],\n      [\n        \"▁聡\",\n        -11.962628364562988\n      ],\n      [\n        \"▁先祖\",\n        -11.962657928466797\n      ],\n      [\n        \"▁肝臓\",\n        -11.962743759155273\n      ],\n      [\n        \"bs\",\n        -11.962943077087402\n      ],\n      [\n        \"組織\",\n        -11.962963104248047\n      ],\n      [\n        \"▁フォース\",\n        -11.96304988861084\n      ],\n      [\n        \"▁府立\",\n        -11.963101387023926\n      ],\n      [\n        \"▁アーケード\",\n        -11.963224411010742\n      ],\n      [\n        \"ベス\",\n        -11.96335220336914\n      ],\n      [\n        \"年度\",\n        -11.963441848754883\n      ],\n      [\n        \"1959\",\n        -11.963444709777832\n      ],\n      [\n        \"ポス\",\n        -11.96360969543457\n      ],\n      [\n        \"正直\",\n        -11.963713645935059\n      ],\n      [\n        \"и\",\n        -11.963842391967773\n      ],\n      [\n        \"▁違いない\",\n        -11.96389102935791\n      ],\n      [\n        \"▁凛\",\n        -11.96391487121582\n      ],\n      [\n        \"▁藩士\",\n        -11.964062690734863\n      ],\n      [\n        \"▁同じである\",\n        -11.964143753051758\n      ],\n      [\n        \"▁ヴァー\",\n        -11.964212417602539\n      ],\n      [\n        \"▁ピアニスト\",\n        -11.964313507080078\n      ],\n      [\n        \"PG\",\n        -11.96440315246582\n      ],\n      [\n        \"▁UN\",\n        -11.96442985534668\n      ],\n      [\n        \"▁Am\",\n        -11.964437484741211\n      ],\n      [\n        \"▁フット\",\n        -11.964512825012207\n      ],\n      [\n        \"▁穂\",\n        -11.964537620544434\n      ],\n      [\n        \"uk\",\n        -11.964570999145508\n      ],\n      [\n        \"▁曜日\",\n        -11.964677810668945\n      ],\n      [\n        \"▁電機\",\n        -11.964863777160645\n      ],\n      [\n        \"▁センチメートル\",\n        -11.965047836303711\n      ],\n      [\n        \"グラフィ\",\n        -11.965293884277344\n      ],\n      [\n        \"ジオ\",\n        -11.96530818939209\n      ],\n      [\n        \"▁出入\",\n        -11.96534538269043\n      ],\n      [\n        \"占\",\n        -11.965352058410645\n      ],\n      [\n        \"▁麻雀\",\n        -11.965450286865234\n      ],\n      [\n        \"祐\",\n        -11.96552562713623\n      ],\n      [\n        \"▁糖質\",\n        -11.965597152709961\n      ],\n      [\n        \"▁俗\",\n        -11.96560001373291\n      ],\n      [\n        \"▁タカ\",\n        -11.965763092041016\n      ],\n      [\n        \"▁未だ\",\n        -11.96589183807373\n      ],\n      [\n        \"OG\",\n        -11.965924263000488\n      ],\n      [\n        \"▁プレゼン\",\n        -11.966096878051758\n      ],\n      [\n        \"むしろ\",\n        -11.966176986694336\n      ],\n      [\n        \"▁SK\",\n        -11.966268539428711\n      ],\n      [\n        \"▁モザイク\",\n        -11.96634578704834\n      ],\n      [\n        \"▁飛躍\",\n        -11.96635913848877\n      ],\n      [\n        \"▁DL\",\n        -11.966559410095215\n      ],\n      [\n        \"hen\",\n        -11.96657657623291\n      ],\n      [\n        \"▁出せる\",\n        -11.966633796691895\n      ],\n      [\n        \"▁被告\",\n        -11.96665096282959\n      ],\n      [\n        \"関西\",\n        -11.966670036315918\n      ],\n      [\n        \"▁海底\",\n        -11.96676254272461\n      ],\n      [\n        \"▁最長\",\n        -11.966768264770508\n      ],\n      [\n        \"▁ヨハン\",\n        -11.96682071685791\n      ],\n      [\n        \"yp\",\n        -11.966873168945312\n      ],\n      [\n        \"▁肘\",\n        -11.967226028442383\n      ],\n      [\n        \"▁趙\",\n        -11.967233657836914\n      ],\n      [\n        \"HI\",\n        -11.967307090759277\n      ],\n      [\n        \"▁豆腐\",\n        -11.967327117919922\n      ],\n      [\n        \"▁溢れる\",\n        -11.967398643493652\n      ],\n      [\n        \"▁撃墜\",\n        -11.967649459838867\n      ],\n      [\n        \"▁三木\",\n        -11.96788501739502\n      ],\n      [\n        \"UI\",\n        -11.96803092956543\n      ],\n      [\n        \"▁内定\",\n        -11.968042373657227\n      ],\n      [\n        \"きゅう\",\n        -11.968111991882324\n      ],\n      [\n        \"ele\",\n        -11.968170166015625\n      ],\n      [\n        \"▁見たら\",\n        -11.96823501586914\n      ],\n      [\n        \"▁Wiki\",\n        -11.968303680419922\n      ],\n      [\n        \"▁負わ\",\n        -11.968457221984863\n      ],\n      [\n        \"▁プー\",\n        -11.968683242797852\n      ],\n      [\n        \"FL\",\n        -11.968757629394531\n      ],\n      [\n        \"▁ヤクルト\",\n        -11.968762397766113\n      ],\n      [\n        \"▁エディ\",\n        -11.968819618225098\n      ],\n      [\n        \"▁専任\",\n        -11.968903541564941\n      ],\n      [\n        \"メー\",\n        -11.968965530395508\n      ],\n      [\n        \"Twitter\",\n        -11.968989372253418\n      ],\n      [\n        \"のう\",\n        -11.969013214111328\n      ],\n      [\n        \"off\",\n        -11.969033241271973\n      ],\n      [\n        \"rit\",\n        -11.969096183776855\n      ],\n      [\n        \"▁夜中\",\n        -11.96910285949707\n      ],\n      [\n        \"▁モテ\",\n        -11.969183921813965\n      ],\n      [\n        \"▁神々\",\n        -11.969522476196289\n      ],\n      [\n        \"▁設ける\",\n        -11.969703674316406\n      ],\n      [\n        \"▁ノル\",\n        -11.969805717468262\n      ],\n      [\n        \"▁ステータス\",\n        -11.969879150390625\n      ],\n      [\n        \"経営\",\n        -11.969902038574219\n      ],\n      [\n        \"▁バルブ\",\n        -11.970044136047363\n      ],\n      [\n        \"▁持ち主\",\n        -11.970054626464844\n      ],\n      [\n        \"▁きん\",\n        -11.97005558013916\n      ],\n      [\n        \"▁反面\",\n        -11.970175743103027\n      ],\n      [\n        \"妹\",\n        -11.970242500305176\n      ],\n      [\n        \"言葉\",\n        -11.970301628112793\n      ],\n      [\n        \"▁退役\",\n        -11.970345497131348\n      ],\n      [\n        \"▁1800\",\n        -11.97037124633789\n      ],\n      [\n        \"▁ミーティング\",\n        -11.970389366149902\n      ],\n      [\n        \"▁確実\",\n        -11.970664024353027\n      ],\n      [\n        \"▁amazon\",\n        -11.970734596252441\n      ],\n      [\n        \"ずみ\",\n        -11.970739364624023\n      ],\n      [\n        \"▁いかが\",\n        -11.97077751159668\n      ],\n      [\n        \"wa\",\n        -11.970818519592285\n      ],\n      [\n        \"1947\",\n        -11.970916748046875\n      ],\n      [\n        \"機嫌\",\n        -11.970951080322266\n      ],\n      [\n        \"▁右翼\",\n        -11.97099494934082\n      ],\n      [\n        \"コロ\",\n        -11.971144676208496\n      ],\n      [\n        \"▁生えて\",\n        -11.971181869506836\n      ],\n      [\n        \"▁実戦\",\n        -11.9712553024292\n      ],\n      [\n        \"▁塗料\",\n        -11.971287727355957\n      ],\n      [\n        \"旨\",\n        -11.971366882324219\n      ],\n      [\n        \"ヴィチ\",\n        -11.971574783325195\n      ],\n      [\n        \"ビジネス\",\n        -11.971619606018066\n      ],\n      [\n        \"セックス\",\n        -11.971684455871582\n      ],\n      [\n        \"ux\",\n        -11.972042083740234\n      ],\n      [\n        \"▁):\",\n        -11.972168922424316\n      ],\n      [\n        \"rac\",\n        -11.972229957580566\n      ],\n      [\n        \"▁番台\",\n        -11.972240447998047\n      ],\n      [\n        \"リヒ\",\n        -11.97243881225586\n      ],\n      [\n        \"▁か国\",\n        -11.972475051879883\n      ],\n      [\n        \"▁more\",\n        -11.972650527954102\n      ],\n      [\n        \"▁陥った\",\n        -11.97277545928955\n      ],\n      [\n        \"▁Manual\",\n        -11.972783088684082\n      ],\n      [\n        \"▁練\",\n        -11.972792625427246\n      ],\n      [\n        \"▁あす\",\n        -11.972907066345215\n      ],\n      [\n        \"▁日向\",\n        -11.973170280456543\n      ],\n      [\n        \"ざい\",\n        -11.973207473754883\n      ],\n      [\n        \"▁北上\",\n        -11.973237991333008\n      ],\n      [\n        \"▁アフガニスタン\",\n        -11.97329330444336\n      ],\n      [\n        \"▁エミ\",\n        -11.973539352416992\n      ],\n      [\n        \"▁繰り返\",\n        -11.973633766174316\n      ],\n      [\n        \"▁下がる\",\n        -11.973689079284668\n      ],\n      [\n        \"▁コキ\",\n        -11.973828315734863\n      ],\n      [\n        \"▁訴える\",\n        -11.973845481872559\n      ],\n      [\n        \"▁Red\",\n        -11.974014282226562\n      ],\n      [\n        \"▁JK\",\n        -11.974543571472168\n      ],\n      [\n        \"▁フライト\",\n        -11.974733352661133\n      ],\n      [\n        \"rist\",\n        -11.97487735748291\n      ],\n      [\n        \"▁Comp\",\n        -11.974903106689453\n      ],\n      [\n        \"▁ビザ\",\n        -11.975202560424805\n      ],\n      [\n        \"環境\",\n        -11.975211143493652\n      ],\n      [\n        \"ヶ丘\",\n        -11.975221633911133\n      ],\n      [\n        \"▁LE\",\n        -11.975325584411621\n      ],\n      [\n        \"▁開花\",\n        -11.97576904296875\n      ],\n      [\n        \"ll\",\n        -11.975787162780762\n      ],\n      [\n        \"初め\",\n        -11.975912094116211\n      ],\n      [\n        \"▁カ所\",\n        -11.975996017456055\n      ],\n      [\n        \"ニスト\",\n        -11.97611141204834\n      ],\n      [\n        \"粒\",\n        -11.976147651672363\n      ],\n      [\n        \"▁コーン\",\n        -11.976645469665527\n      ],\n      [\n        \"▁豊島\",\n        -11.976665496826172\n      ],\n      [\n        \"庵\",\n        -11.976717948913574\n      ],\n      [\n        \"クレジット\",\n        -11.976720809936523\n      ],\n      [\n        \"▁きたら\",\n        -11.976722717285156\n      ],\n      [\n        \"▁免\",\n        -11.976771354675293\n      ],\n      [\n        \"▁スピン\",\n        -11.976784706115723\n      ],\n      [\n        \"しゅ\",\n        -11.976840019226074\n      ],\n      [\n        \"ニウム\",\n        -11.976947784423828\n      ],\n      [\n        \"▁捨てる\",\n        -11.9769868850708\n      ],\n      [\n        \"▁ニッ\",\n        -11.977023124694824\n      ],\n      [\n        \"灯\",\n        -11.977108001708984\n      ],\n      [\n        \"▁パッチ\",\n        -11.977112770080566\n      ],\n      [\n        \"▁ディス\",\n        -11.977232933044434\n      ],\n      [\n        \"きん\",\n        -11.97725772857666\n      ],\n      [\n        \"▁WBC\",\n        -11.977270126342773\n      ],\n      [\n        \"▁許容\",\n        -11.977272033691406\n      ],\n      [\n        \"敗\",\n        -11.977285385131836\n      ],\n      [\n        \"▁正常に\",\n        -11.977324485778809\n      ],\n      [\n        \"▁アーサー\",\n        -11.977334976196289\n      ],\n      [\n        \"PU\",\n        -11.977398872375488\n      ],\n      [\n        \"▁上空\",\n        -11.97746753692627\n      ],\n      [\n        \"▁脈\",\n        -11.9774751663208\n      ],\n      [\n        \"▁広げ\",\n        -11.97749137878418\n      ],\n      [\n        \"▁ブライアン\",\n        -11.977503776550293\n      ],\n      [\n        \"▁連休\",\n        -11.977585792541504\n      ],\n      [\n        \"▁図った\",\n        -11.977635383605957\n      ],\n      [\n        \"▁歩み\",\n        -11.977652549743652\n      ],\n      [\n        \"ode\",\n        -11.97766399383545\n      ],\n      [\n        \"対象\",\n        -11.97790813446045\n      ],\n      [\n        \"▁DV\",\n        -11.977950096130371\n      ],\n      [\n        \"▁未知\",\n        -11.978086471557617\n      ],\n      [\n        \"▁占め\",\n        -11.978118896484375\n      ],\n      [\n        \"▁ドキドキ\",\n        -11.978297233581543\n      ],\n      [\n        \"▁ダイビング\",\n        -11.97833251953125\n      ],\n      [\n        \"att\",\n        -11.978472709655762\n      ],\n      [\n        \"▁であったり\",\n        -11.978482246398926\n      ],\n      [\n        \"▁劇中\",\n        -11.978588104248047\n      ],\n      [\n        \"▁辞\",\n        -11.978617668151855\n      ],\n      [\n        \"徹\",\n        -11.978713989257812\n      ],\n      [\n        \"▁フォル\",\n        -11.978754997253418\n      ],\n      [\n        \"▁強力\",\n        -11.978755950927734\n      ],\n      [\n        \"nel\",\n        -11.978774070739746\n      ],\n      [\n        \"▁左手\",\n        -11.978796005249023\n      ],\n      [\n        \"セラ\",\n        -11.97881031036377\n      ],\n      [\n        \"わい\",\n        -11.978918075561523\n      ],\n      [\n        \"車両\",\n        -11.978938102722168\n      ],\n      [\n        \"▁急激に\",\n        -11.978955268859863\n      ],\n      [\n        \"▁通用\",\n        -11.979063034057617\n      ],\n      [\n        \"▁大きかった\",\n        -11.979103088378906\n      ],\n      [\n        \"▁ガチ\",\n        -11.979406356811523\n      ],\n      [\n        \"▁高島\",\n        -11.97946548461914\n      ],\n      [\n        \"▁何と\",\n        -11.97972297668457\n      ],\n      [\n        \"▁最寄り\",\n        -11.979769706726074\n      ],\n      [\n        \"▁継いで\",\n        -11.979813575744629\n      ],\n      [\n        \"ばら\",\n        -11.979974746704102\n      ],\n      [\n        \"かつ\",\n        -11.980002403259277\n      ],\n      [\n        \"▁中等\",\n        -11.980110168457031\n      ],\n      [\n        \"▁お出かけ\",\n        -11.980178833007812\n      ],\n      [\n        \"▁与党\",\n        -11.980325698852539\n      ],\n      [\n        \"▁ローラ\",\n        -11.980478286743164\n      ],\n      [\n        \"▁適切\",\n        -11.980563163757324\n      ],\n      [\n        \"▁働きかけ\",\n        -11.980587005615234\n      ],\n      [\n        \"滑\",\n        -11.980606079101562\n      ],\n      [\n        \"ky\",\n        -11.980674743652344\n      ],\n      [\n        \"▁客車\",\n        -11.980844497680664\n      ],\n      [\n        \"▁バット\",\n        -11.980917930603027\n      ],\n      [\n        \"AU\",\n        -11.980928421020508\n      ],\n      [\n        \"▁キープ\",\n        -11.981184959411621\n      ],\n      [\n        \"學\",\n        -11.981215476989746\n      ],\n      [\n        \"1958\",\n        -11.981477737426758\n      ],\n      [\n        \"▁デブ\",\n        -11.98148250579834\n      ],\n      [\n        \"▁殺す\",\n        -11.981618881225586\n      ],\n      [\n        \"裕\",\n        -11.981661796569824\n      ],\n      [\n        \"▁Time\",\n        -11.981762886047363\n      ],\n      [\n        \"▁聞こえて\",\n        -11.981783866882324\n      ],\n      [\n        \"▁ソファ\",\n        -11.981821060180664\n      ],\n      [\n        \"▁175\",\n        -11.982128143310547\n      ],\n      [\n        \"▁伏見\",\n        -11.982151985168457\n      ],\n      [\n        \"▁打席\",\n        -11.98236083984375\n      ],\n      [\n        \"▁失礼\",\n        -11.982577323913574\n      ],\n      [\n        \"張り\",\n        -11.982577323913574\n      ],\n      [\n        \"▁けんどう\",\n        -11.982634544372559\n      ],\n      [\n        \"動物\",\n        -11.982636451721191\n      ],\n      [\n        \"▁丁寧な\",\n        -11.982779502868652\n      ],\n      [\n        \"めき\",\n        -11.982918739318848\n      ],\n      [\n        \"▁興業\",\n        -11.983339309692383\n      ],\n      [\n        \"なに\",\n        -11.983346939086914\n      ],\n      [\n        \"▁彗星\",\n        -11.98357105255127\n      ],\n      [\n        \"▁進めた\",\n        -11.983613014221191\n      ],\n      [\n        \"イク\",\n        -11.983695983886719\n      ],\n      [\n        \"ザイ\",\n        -11.983696937561035\n      ],\n      [\n        \"芝\",\n        -11.983759880065918\n      ],\n      [\n        \"▁パレード\",\n        -11.98404312133789\n      ],\n      [\n        \"▁SAC\",\n        -11.984146118164062\n      ],\n      [\n        \"調査\",\n        -11.984152793884277\n      ],\n      [\n        \"▁序盤\",\n        -11.984346389770508\n      ],\n      [\n        \"▁下落\",\n        -11.984368324279785\n      ],\n      [\n        \"FI\",\n        -11.984670639038086\n      ],\n      [\n        \"▁評して\",\n        -11.984670639038086\n      ],\n      [\n        \"▁Video\",\n        -11.984894752502441\n      ],\n      [\n        \"▁貼り付け\",\n        -11.985016822814941\n      ],\n      [\n        \"▁看\",\n        -11.985107421875\n      ],\n      [\n        \"▁蝶\",\n        -11.98520565032959\n      ],\n      [\n        \"▁兼ねて\",\n        -11.985276222229004\n      ],\n      [\n        \"▁ハリス\",\n        -11.985346794128418\n      ],\n      [\n        \"▁部会\",\n        -11.985408782958984\n      ],\n      [\n        \"▁就業\",\n        -11.98546028137207\n      ],\n      [\n        \"▁眼科\",\n        -11.985483169555664\n      ],\n      [\n        \"▁102\",\n        -11.985618591308594\n      ],\n      [\n        \"立って\",\n        -11.985692024230957\n      ],\n      [\n        \"▁下げ\",\n        -11.98576831817627\n      ],\n      [\n        \"▁パウダー\",\n        -11.985840797424316\n      ],\n      [\n        \"▁550\",\n        -11.985847473144531\n      ],\n      [\n        \"脚注\",\n        -11.985883712768555\n      ],\n      [\n        \"ICA\",\n        -11.985989570617676\n      ],\n      [\n        \"▁ハミルトン\",\n        -11.986028671264648\n      ],\n      [\n        \"▁購読\",\n        -11.986028671264648\n      ],\n      [\n        \"高い\",\n        -11.98631477355957\n      ],\n      [\n        \"▁あわせ\",\n        -11.986409187316895\n      ],\n      [\n        \"▁世に\",\n        -11.986421585083008\n      ],\n      [\n        \"▁フィラデルフィア\",\n        -11.986502647399902\n      ],\n      [\n        \"ます\",\n        -11.986531257629395\n      ],\n      [\n        \"クン\",\n        -11.986538887023926\n      ],\n      [\n        \"▁パラメータ\",\n        -11.986600875854492\n      ],\n      [\n        \"▁NET\",\n        -11.986711502075195\n      ],\n      [\n        \"ated\",\n        -11.986781120300293\n      ],\n      [\n        \"SL\",\n        -11.987138748168945\n      ],\n      [\n        \"▁卸\",\n        -11.987157821655273\n      ],\n      [\n        \"▁儲け\",\n        -11.987194061279297\n      ],\n      [\n        \"▁眠れ\",\n        -11.987234115600586\n      ],\n      [\n        \"▁暖\",\n        -11.987286567687988\n      ],\n      [\n        \"▁全線\",\n        -11.987316131591797\n      ],\n      [\n        \"▁こころ\",\n        -11.987561225891113\n      ],\n      [\n        \"▁留意\",\n        -11.98758602142334\n      ],\n      [\n        \"▁Jr\",\n        -11.987788200378418\n      ],\n      [\n        \"辱\",\n        -11.988302230834961\n      ],\n      [\n        \"▁バーン\",\n        -11.988381385803223\n      ],\n      [\n        \"はら\",\n        -11.988410949707031\n      ],\n      [\n        \"▁アンプ\",\n        -11.988597869873047\n      ],\n      [\n        \"▁商事\",\n        -11.988713264465332\n      ],\n      [\n        \"INE\",\n        -11.98876953125\n      ],\n      [\n        \"抗\",\n        -11.988777160644531\n      ],\n      [\n        \"▁勝て\",\n        -11.988778114318848\n      ],\n      [\n        \"▁6000\",\n        -11.989171028137207\n      ],\n      [\n        \"HD\",\n        -11.98930549621582\n      ],\n      [\n        \"▁ヤフオク\",\n        -11.989347457885742\n      ],\n      [\n        \"▁佐世保\",\n        -11.989347457885742\n      ],\n      [\n        \"決勝\",\n        -11.989370346069336\n      ],\n      [\n        \"開催\",\n        -11.989371299743652\n      ],\n      [\n        \"▁国々\",\n        -11.989426612854004\n      ],\n      [\n        \"縫\",\n        -11.989534378051758\n      ],\n      [\n        \"▁威力\",\n        -11.989614486694336\n      ],\n      [\n        \"侯\",\n        -11.989700317382812\n      ],\n      [\n        \"▁ノリ\",\n        -11.989808082580566\n      ],\n      [\n        \"リーン\",\n        -11.989830017089844\n      ],\n      [\n        \"▁見受け\",\n        -11.989847183227539\n      ],\n      [\n        \"▁COM\",\n        -11.989986419677734\n      ],\n      [\n        \"▁無駄に\",\n        -11.990019798278809\n      ],\n      [\n        \"LU\",\n        -11.990071296691895\n      ],\n      [\n        \"book\",\n        -11.99007511138916\n      ],\n      [\n        \"▁Ti\",\n        -11.990147590637207\n      ],\n      [\n        \"▁織り\",\n        -11.990172386169434\n      ],\n      [\n        \"QU\",\n        -11.990324020385742\n      ],\n      [\n        \"▁原産\",\n        -11.990557670593262\n      ],\n      [\n        \"がみ\",\n        -11.990667343139648\n      ],\n      [\n        \"リッジ\",\n        -11.990742683410645\n      ],\n      [\n        \"▁踏襲\",\n        -11.99086856842041\n      ],\n      [\n        \"▁めぐり\",\n        -11.991084098815918\n      ],\n      [\n        \"▁遠藤\",\n        -11.99111557006836\n      ],\n      [\n        \"尉\",\n        -11.991135597229004\n      ],\n      [\n        \"▁陽性\",\n        -11.99124813079834\n      ],\n      [\n        \"▁転じ\",\n        -11.991264343261719\n      ],\n      [\n        \"今週\",\n        -11.991327285766602\n      ],\n      [\n        \"▁ブラッド\",\n        -11.991348266601562\n      ],\n      [\n        \"▁越前\",\n        -11.991424560546875\n      ],\n      [\n        \"▁みどり\",\n        -11.991701126098633\n      ],\n      [\n        \"rop\",\n        -11.991710662841797\n      ],\n      [\n        \"▁ゆり\",\n        -11.991719245910645\n      ],\n      [\n        \"▁直して\",\n        -11.991881370544434\n      ],\n      [\n        \"▁定価\",\n        -11.991968154907227\n      ],\n      [\n        \"▁流す\",\n        -11.992027282714844\n      ],\n      [\n        \"▁恥\",\n        -11.99209213256836\n      ],\n      [\n        \"申\",\n        -11.992124557495117\n      ],\n      [\n        \"▁台北\",\n        -11.992165565490723\n      ],\n      [\n        \"渕\",\n        -11.99220085144043\n      ],\n      [\n        \"▁MR\",\n        -11.992262840270996\n      ],\n      [\n        \"▁統\",\n        -11.99252700805664\n      ],\n      [\n        \"▁マウンテン\",\n        -11.992581367492676\n      ],\n      [\n        \"▁着工\",\n        -11.992666244506836\n      ],\n      [\n        \"▁立案\",\n        -11.992681503295898\n      ],\n      [\n        \"TH\",\n        -11.992823600769043\n      ],\n      [\n        \"▁なされ\",\n        -11.992855072021484\n      ],\n      [\n        \"クイ\",\n        -11.992934226989746\n      ],\n      [\n        \"かなり\",\n        -11.993124008178711\n      ],\n      [\n        \"▁留め\",\n        -11.993128776550293\n      ],\n      [\n        \"▁座り\",\n        -11.993228912353516\n      ],\n      [\n        \"▁スコ\",\n        -11.993697166442871\n      ],\n      [\n        \"▁破って\",\n        -11.993897438049316\n      ],\n      [\n        \"殻\",\n        -11.99397087097168\n      ],\n      [\n        \"▁シリコン\",\n        -11.994203567504883\n      ],\n      [\n        \"立った\",\n        -11.994256019592285\n      ],\n      [\n        \"嚢\",\n        -11.994680404663086\n      ],\n      [\n        \"SON\",\n        -11.99477767944336\n      ],\n      [\n        \"聴\",\n        -11.9948148727417\n      ],\n      [\n        \"▁供養\",\n        -11.99489688873291\n      ],\n      [\n        \"▁食用\",\n        -11.994908332824707\n      ],\n      [\n        \"▁咲く\",\n        -11.99492073059082\n      ],\n      [\n        \"▁言動\",\n        -11.994943618774414\n      ],\n      [\n        \"▁傾け\",\n        -11.994963645935059\n      ],\n      [\n        \"▁Server\",\n        -11.994967460632324\n      ],\n      [\n        \"んぽ\",\n        -11.995014190673828\n      ],\n      [\n        \"▁抜けて\",\n        -11.995031356811523\n      ],\n      [\n        \"▁過言\",\n        -11.995100975036621\n      ],\n      [\n        \"▁満たして\",\n        -11.995126724243164\n      ],\n      [\n        \"▁小笠原\",\n        -11.995243072509766\n      ],\n      [\n        \"帖\",\n        -11.995253562927246\n      ],\n      [\n        \"バナ\",\n        -11.995280265808105\n      ],\n      [\n        \"戦闘\",\n        -11.995330810546875\n      ],\n      [\n        \"▁重奏\",\n        -11.99533462524414\n      ],\n      [\n        \"しろ\",\n        -11.995478630065918\n      ],\n      [\n        \"▁同等の\",\n        -11.995710372924805\n      ],\n      [\n        \"▁回想\",\n        -11.995731353759766\n      ],\n      [\n        \"▁高木\",\n        -11.99579906463623\n      ],\n      [\n        \"▁洒落\",\n        -11.995922088623047\n      ],\n      [\n        \"▁弾薬\",\n        -11.995962142944336\n      ],\n      [\n        \"▁プリン\",\n        -11.995965003967285\n      ],\n      [\n        \"▁あわ\",\n        -11.996320724487305\n      ],\n      [\n        \"メス\",\n        -11.99635124206543\n      ],\n      [\n        \"▁盾\",\n        -11.99639892578125\n      ],\n      [\n        \"cle\",\n        -11.996414184570312\n      ],\n      [\n        \"▁橘\",\n        -11.996440887451172\n      ],\n      [\n        \"▁桑\",\n        -11.996453285217285\n      ],\n      [\n        \"▁RA\",\n        -11.996659278869629\n      ],\n      [\n        \"▁まかせ\",\n        -11.99674129486084\n      ],\n      [\n        \"電気\",\n        -11.99675464630127\n      ],\n      [\n        \"▁カミ\",\n        -11.996938705444336\n      ],\n      [\n        \"▁パチスロ\",\n        -11.996973991394043\n      ],\n      [\n        \"▁id\",\n        -11.996990203857422\n      ],\n      [\n        \"▁名づけ\",\n        -11.99724292755127\n      ],\n      [\n        \"供\",\n        -11.997435569763184\n      ],\n      [\n        \"NG\",\n        -11.997491836547852\n      ],\n      [\n        \"▁受託\",\n        -11.997762680053711\n      ],\n      [\n        \"TF\",\n        -11.997811317443848\n      ],\n      [\n        \"▁だめ\",\n        -11.99783706665039\n      ],\n      [\n        \"▁学士\",\n        -11.997875213623047\n      ],\n      [\n        \"▁デッド\",\n        -11.997993469238281\n      ],\n      [\n        \"ress\",\n        -11.997994422912598\n      ],\n      [\n        \"アーズ\",\n        -11.998150825500488\n      ],\n      [\n        \"▁六本木\",\n        -11.99831485748291\n      ],\n      [\n        \"▁各々\",\n        -11.998377799987793\n      ],\n      [\n        \"息子\",\n        -11.998404502868652\n      ],\n      [\n        \"▁遅\",\n        -11.99846076965332\n      ],\n      [\n        \"▁透\",\n        -11.998464584350586\n      ],\n      [\n        \"▁部活\",\n        -11.99867057800293\n      ],\n      [\n        \"▁麻薬\",\n        -11.998757362365723\n      ],\n      [\n        \"qui\",\n        -11.998780250549316\n      ],\n      [\n        \"最後\",\n        -11.998839378356934\n      ],\n      [\n        \"▁接着\",\n        -11.998883247375488\n      ],\n      [\n        \"hr\",\n        -11.998917579650879\n      ],\n      [\n        \"千万\",\n        -11.999165534973145\n      ],\n      [\n        \"▁築き\",\n        -11.999175071716309\n      ],\n      [\n        \"▁黒田\",\n        -11.999279022216797\n      ],\n      [\n        \"▁ドロ\",\n        -11.99930477142334\n      ],\n      [\n        \"▁微分\",\n        -11.999430656433105\n      ],\n      [\n        \"▁恐ろしい\",\n        -11.99952220916748\n      ],\n      [\n        \"▁秩父\",\n        -11.99965763092041\n      ],\n      [\n        \"▁モハ\",\n        -11.999674797058105\n      ],\n      [\n        \"フュー\",\n        -11.999724388122559\n      ],\n      [\n        \"依\",\n        -11.99988079071045\n      ],\n      [\n        \"針\",\n        -11.999916076660156\n      ],\n      [\n        \"▁マーティン\",\n        -11.999958038330078\n      ],\n      [\n        \"▁信じる\",\n        -12.000093460083008\n      ],\n      [\n        \"▁難し\",\n        -12.000136375427246\n      ],\n      [\n        \"▁アジ\",\n        -12.000214576721191\n      ],\n      [\n        \"▁赤坂\",\n        -12.00021743774414\n      ],\n      [\n        \"▁わけじゃ\",\n        -12.000239372253418\n      ],\n      [\n        \"アーカイブ\",\n        -12.000443458557129\n      ],\n      [\n        \"市立\",\n        -12.000469207763672\n      ],\n      [\n        \"▁警報\",\n        -12.000521659851074\n      ],\n      [\n        \"▁ボーイズ\",\n        -12.000527381896973\n      ],\n      [\n        \"▁名目\",\n        -12.000597953796387\n      ],\n      [\n        \"ベット\",\n        -12.00067138671875\n      ],\n      [\n        \"1955\",\n        -12.000699043273926\n      ],\n      [\n        \"yu\",\n        -12.000726699829102\n      ],\n      [\n        \"▁掘\",\n        -12.000828742980957\n      ],\n      [\n        \"料金\",\n        -12.000860214233398\n      ],\n      [\n        \"じゅう\",\n        -12.000896453857422\n      ],\n      [\n        \"▁ウマ\",\n        -12.0009765625\n      ],\n      [\n        \"はい\",\n        -12.001053810119629\n      ],\n      [\n        \"▁ケル\",\n        -12.001198768615723\n      ],\n      [\n        \"残り\",\n        -12.001368522644043\n      ],\n      [\n        \"SR\",\n        -12.00139331817627\n      ],\n      [\n        \"▁紅茶\",\n        -12.001533508300781\n      ],\n      [\n        \"con\",\n        -12.001544952392578\n      ],\n      [\n        \"▁原型\",\n        -12.001585960388184\n      ],\n      [\n        \"▁むら\",\n        -12.001639366149902\n      ],\n      [\n        \"▁ぜん\",\n        -12.001694679260254\n      ],\n      [\n        \"▁活かして\",\n        -12.00184440612793\n      ],\n      [\n        \"OTO\",\n        -12.001875877380371\n      ],\n      [\n        \"▁IR\",\n        -12.001997947692871\n      ],\n      [\n        \"ヨウ\",\n        -12.002128601074219\n      ],\n      [\n        \"▁迷い\",\n        -12.00216007232666\n      ],\n      [\n        \"▁抗体\",\n        -12.00217056274414\n      ],\n      [\n        \"▁It\",\n        -12.002175331115723\n      ],\n      [\n        \"▁減らし\",\n        -12.002179145812988\n      ],\n      [\n        \"▁バンダイ\",\n        -12.002182006835938\n      ],\n      [\n        \"切って\",\n        -12.002214431762695\n      ],\n      [\n        \"▁聞こえ\",\n        -12.00224781036377\n      ],\n      [\n        \"頸\",\n        -12.002251625061035\n      ],\n      [\n        \"▁ムラ\",\n        -12.002327919006348\n      ],\n      [\n        \"▁売れる\",\n        -12.002349853515625\n      ],\n      [\n        \"The\",\n        -12.00259017944336\n      ],\n      [\n        \"▁頂ければ\",\n        -12.002720832824707\n      ],\n      [\n        \"▁マタニティ\",\n        -12.002734184265137\n      ],\n      [\n        \"▁西方\",\n        -12.002779960632324\n      ],\n      [\n        \"▁得票\",\n        -12.002788543701172\n      ],\n      [\n        \"ins\",\n        -12.00290584564209\n      ],\n      [\n        \"▁リアルな\",\n        -12.003046035766602\n      ],\n      [\n        \"栓\",\n        -12.003077507019043\n      ],\n      [\n        \"▁楕円\",\n        -12.003599166870117\n      ],\n      [\n        \"1946\",\n        -12.003623008728027\n      ],\n      [\n        \"HC\",\n        -12.003674507141113\n      ],\n      [\n        \"卑\",\n        -12.003695487976074\n      ],\n      [\n        \"事前\",\n        -12.003764152526855\n      ],\n      [\n        \"▁水系\",\n        -12.00395393371582\n      ],\n      [\n        \"ローマ\",\n        -12.003969192504883\n      ],\n      [\n        \"ショウ\",\n        -12.00403881072998\n      ],\n      [\n        \"▁気づく\",\n        -12.004080772399902\n      ],\n      [\n        \"ばん\",\n        -12.004083633422852\n      ],\n      [\n        \"▁親交\",\n        -12.004250526428223\n      ],\n      [\n        \"▁カルシウム\",\n        -12.004563331604004\n      ],\n      [\n        \"list\",\n        -12.004622459411621\n      ],\n      [\n        \"▁訪ね\",\n        -12.004715919494629\n      ],\n      [\n        \"▁クチコミ\",\n        -12.004755973815918\n      ],\n      [\n        \"▁音質\",\n        -12.004925727844238\n      ],\n      [\n        \"▁↑\",\n        -12.004973411560059\n      ],\n      [\n        \"app\",\n        -12.005083084106445\n      ],\n      [\n        \"▁恥ずかしい\",\n        -12.005107879638672\n      ],\n      [\n        \"▁寸法\",\n        -12.005215644836426\n      ],\n      [\n        \"▁主として\",\n        -12.005239486694336\n      ],\n      [\n        \"▁領事\",\n        -12.0054292678833\n      ],\n      [\n        \"▁南極\",\n        -12.00558090209961\n      ],\n      [\n        \"ンデ\",\n        -12.005583763122559\n      ],\n      [\n        \"範\",\n        -12.005670547485352\n      ],\n      [\n        \"▁柔らかい\",\n        -12.005698204040527\n      ],\n      [\n        \"▁マルコ\",\n        -12.00584602355957\n      ],\n      [\n        \"yth\",\n        -12.005935668945312\n      ],\n      [\n        \"▁岡本\",\n        -12.0059814453125\n      ],\n      [\n        \"ごう\",\n        -12.006022453308105\n      ],\n      [\n        \"HS\",\n        -12.006088256835938\n      ],\n      [\n        \"サキ\",\n        -12.006160736083984\n      ],\n      [\n        \"メラ\",\n        -12.006234169006348\n      ],\n      [\n        \"デラ\",\n        -12.006516456604004\n      ],\n      [\n        \"▁敦\",\n        -12.006598472595215\n      ],\n      [\n        \"▁墨\",\n        -12.00667953491211\n      ],\n      [\n        \"▁用水\",\n        -12.006728172302246\n      ],\n      [\n        \"飼\",\n        -12.006791114807129\n      ],\n      [\n        \"▁菊池\",\n        -12.006927490234375\n      ],\n      [\n        \"▁アスリート\",\n        -12.006977081298828\n      ],\n      [\n        \"▁径\",\n        -12.007085800170898\n      ],\n      [\n        \"▁卓\",\n        -12.00710678100586\n      ],\n      [\n        \"中でも\",\n        -12.007112503051758\n      ],\n      [\n        \"▁託\",\n        -12.007379531860352\n      ],\n      [\n        \"▁範\",\n        -12.007390022277832\n      ],\n      [\n        \"エンジン\",\n        -12.007499694824219\n      ],\n      [\n        \"▁クーデター\",\n        -12.007556915283203\n      ],\n      [\n        \"工科\",\n        -12.0077486038208\n      ],\n      [\n        \"▁1913\",\n        -12.007807731628418\n      ],\n      [\n        \"▁豪雨\",\n        -12.007893562316895\n      ],\n      [\n        \"▁本屋\",\n        -12.00795841217041\n      ],\n      [\n        \"▁117\",\n        -12.008166313171387\n      ],\n      [\n        \"▁売上高\",\n        -12.00834846496582\n      ],\n      [\n        \"▁青少年\",\n        -12.008371353149414\n      ],\n      [\n        \"▁振り返る\",\n        -12.008720397949219\n      ],\n      [\n        \"トラック\",\n        -12.008728981018066\n      ],\n      [\n        \"リット\",\n        -12.00877571105957\n      ],\n      [\n        \"▁試みた\",\n        -12.008788108825684\n      ],\n      [\n        \"▁名物\",\n        -12.008800506591797\n      ],\n      [\n        \"潰\",\n        -12.008854866027832\n      ],\n      [\n        \"▁マスターズ\",\n        -12.008872032165527\n      ],\n      [\n        \"本当\",\n        -12.008883476257324\n      ],\n      [\n        \"カート\",\n        -12.00894832611084\n      ],\n      [\n        \"▁イヤ\",\n        -12.009222984313965\n      ],\n      [\n        \"▁狭く\",\n        -12.009349822998047\n      ],\n      [\n        \"1956\",\n        -12.009448051452637\n      ],\n      [\n        \"久保\",\n        -12.009651184082031\n      ],\n      [\n        \"▁ヴィルヘルム\",\n        -12.009686470031738\n      ],\n      [\n        \"▁罰\",\n        -12.009758949279785\n      ],\n      [\n        \"ボーイ\",\n        -12.00999641418457\n      ],\n      [\n        \"▁ブレンド\",\n        -12.01001262664795\n      ],\n      [\n        \"atch\",\n        -12.01003646850586\n      ],\n      [\n        \"▁滅ぼ\",\n        -12.010125160217285\n      ],\n      [\n        \"▁宇治\",\n        -12.01013469696045\n      ],\n      [\n        \"ブロン\",\n        -12.010236740112305\n      ],\n      [\n        \"1948\",\n        -12.010250091552734\n      ],\n      [\n        \"騒\",\n        -12.010327339172363\n      ],\n      [\n        \"▁渓谷\",\n        -12.01046371459961\n      ],\n      [\n        \"▁広瀬\",\n        -12.010550498962402\n      ],\n      [\n        \"▁係数\",\n        -12.010749816894531\n      ],\n      [\n        \"▁ペル\",\n        -12.01108169555664\n      ],\n      [\n        \"▁双子\",\n        -12.011098861694336\n      ],\n      [\n        \"易\",\n        -12.011205673217773\n      ],\n      [\n        \"晩\",\n        -12.011324882507324\n      ],\n      [\n        \"▁セー\",\n        -12.011359214782715\n      ],\n      [\n        \"▁素敵\",\n        -12.011360168457031\n      ],\n      [\n        \"▁後援\",\n        -12.01140022277832\n      ],\n      [\n        \"ギリ\",\n        -12.011577606201172\n      ],\n      [\n        \"戦争\",\n        -12.011988639831543\n      ],\n      [\n        \"札幌\",\n        -12.012046813964844\n      ],\n      [\n        \"▁川上\",\n        -12.012097358703613\n      ],\n      [\n        \"▁サバ\",\n        -12.012321472167969\n      ],\n      [\n        \"▁カメ\",\n        -12.012685775756836\n      ],\n      [\n        \"最新\",\n        -12.012757301330566\n      ],\n      [\n        \"DM\",\n        -12.012762069702148\n      ],\n      [\n        \"暴\",\n        -12.012768745422363\n      ],\n      [\n        \"▁連ね\",\n        -12.012948989868164\n      ],\n      [\n        \"▁満喫\",\n        -12.013096809387207\n      ],\n      [\n        \"▁足立\",\n        -12.013227462768555\n      ],\n      [\n        \"▁疑わ\",\n        -12.013482093811035\n      ],\n      [\n        \"▁ロジャー\",\n        -12.013626098632812\n      ],\n      [\n        \"▁庵\",\n        -12.013651847839355\n      ],\n      [\n        \"まだまだ\",\n        -12.013773918151855\n      ],\n      [\n        \"▁鶴見\",\n        -12.013781547546387\n      ],\n      [\n        \"やり\",\n        -12.014057159423828\n      ],\n      [\n        \"▁ホイ\",\n        -12.014169692993164\n      ],\n      [\n        \"other\",\n        -12.014283180236816\n      ],\n      [\n        \"ert\",\n        -12.014385223388672\n      ],\n      [\n        \"ニク\",\n        -12.014440536499023\n      ],\n      [\n        \"どき\",\n        -12.014817237854004\n      ],\n      [\n        \"▁ブレイ\",\n        -12.014994621276855\n      ],\n      [\n        \"▁SUPER\",\n        -12.015037536621094\n      ],\n      [\n        \"胤\",\n        -12.015129089355469\n      ],\n      [\n        \"▁下手\",\n        -12.01537799835205\n      ],\n      [\n        \"▁Auto\",\n        -12.015384674072266\n      ],\n      [\n        \"▁罰金\",\n        -12.015788078308105\n      ],\n      [\n        \"▁図ら\",\n        -12.015816688537598\n      ],\n      [\n        \"IST\",\n        -12.016030311584473\n      ],\n      [\n        \"▁ストラップ\",\n        -12.01616382598877\n      ],\n      [\n        \"▁隊長\",\n        -12.016426086425781\n      ],\n      [\n        \"▁撃退\",\n        -12.016613960266113\n      ],\n      [\n        \"▁りゅう\",\n        -12.016678810119629\n      ],\n      [\n        \"▁兵力\",\n        -12.016757011413574\n      ],\n      [\n        \"制作\",\n        -12.016845703125\n      ],\n      [\n        \"▁代々\",\n        -12.016990661621094\n      ],\n      [\n        \"▁立ち上げた\",\n        -12.017095565795898\n      ],\n      [\n        \"▁見積り\",\n        -12.017119407653809\n      ],\n      [\n        \"▁燃\",\n        -12.01728343963623\n      ],\n      [\n        \"▁きれい\",\n        -12.017302513122559\n      ],\n      [\n        \"▁しゅう\",\n        -12.017508506774902\n      ],\n      [\n        \"▁シャルル\",\n        -12.017531394958496\n      ],\n      [\n        \"天正\",\n        -12.017690658569336\n      ],\n      [\n        \"倫\",\n        -12.017979621887207\n      ],\n      [\n        \"▁主権\",\n        -12.018132209777832\n      ],\n      [\n        \"▁招く\",\n        -12.018135070800781\n      ],\n      [\n        \"ょ\",\n        -12.018392562866211\n      ],\n      [\n        \"▁因\",\n        -12.018524169921875\n      ],\n      [\n        \"▁128\",\n        -12.018637657165527\n      ],\n      [\n        \"▁ポーチ\",\n        -12.018819808959961\n      ],\n      [\n        \"▁年少\",\n        -12.018819808959961\n      ],\n      [\n        \"▁ポル\",\n        -12.018850326538086\n      ],\n      [\n        \"メト\",\n        -12.018877983093262\n      ],\n      [\n        \"ーヴ\",\n        -12.018942832946777\n      ],\n      [\n        \"幼少\",\n        -12.01911735534668\n      ],\n      [\n        \"▁訪\",\n        -12.019168853759766\n      ],\n      [\n        \"▁ナル\",\n        -12.019237518310547\n      ],\n      [\n        \"▁ワイヤー\",\n        -12.019256591796875\n      ],\n      [\n        \"▁工法\",\n        -12.01927375793457\n      ],\n      [\n        \"▁大輔\",\n        -12.019375801086426\n      ],\n      [\n        \"´\",\n        -12.019506454467773\n      ],\n      [\n        \"▁浄化\",\n        -12.019524574279785\n      ],\n      [\n        \"▁sa\",\n        -12.01967716217041\n      ],\n      [\n        \"▁レバー\",\n        -12.019707679748535\n      ],\n      [\n        \"▁デフォルト\",\n        -12.019966125488281\n      ],\n      [\n        \"▁113\",\n        -12.02003288269043\n      ],\n      [\n        \"PP\",\n        -12.020052909851074\n      ],\n      [\n        \"▁極端に\",\n        -12.020307540893555\n      ],\n      [\n        \"▁水路\",\n        -12.020309448242188\n      ],\n      [\n        \"▁解く\",\n        -12.020448684692383\n      ],\n      [\n        \"ヴァイ\",\n        -12.020626068115234\n      ],\n      [\n        \"▁至り\",\n        -12.020708084106445\n      ],\n      [\n        \"夷\",\n        -12.020797729492188\n      ],\n      [\n        \"«\",\n        -12.020988464355469\n      ],\n      [\n        \"撫\",\n        -12.020990371704102\n      ],\n      [\n        \"避\",\n        -12.021100997924805\n      ],\n      [\n        \"▁So\",\n        -12.02112102508545\n      ],\n      [\n        \"1939\",\n        -12.021154403686523\n      ],\n      [\n        \"▁po\",\n        -12.021231651306152\n      ],\n      [\n        \"▁ハッ\",\n        -12.021286010742188\n      ],\n      [\n        \"▁捧げ\",\n        -12.021364212036133\n      ],\n      [\n        \"▁薦め\",\n        -12.021398544311523\n      ],\n      [\n        \"▁114\",\n        -12.02172565460205\n      ],\n      [\n        \"▁決着\",\n        -12.021748542785645\n      ],\n      [\n        \"▁東山\",\n        -12.021761894226074\n      ],\n      [\n        \"▁頼む\",\n        -12.022078514099121\n      ],\n      [\n        \"▁屋内\",\n        -12.02208423614502\n      ],\n      [\n        \"▁和歌\",\n        -12.022149085998535\n      ],\n      [\n        \"▁籍\",\n        -12.02225112915039\n      ],\n      [\n        \"くる\",\n        -12.022414207458496\n      ],\n      [\n        \"▁パキスタン\",\n        -12.022562980651855\n      ],\n      [\n        \"合う\",\n        -12.022812843322754\n      ],\n      [\n        \"▁整えて\",\n        -12.022831916809082\n      ],\n      [\n        \"▁詞\",\n        -12.022875785827637\n      ],\n      [\n        \"▁コロン\",\n        -12.022994995117188\n      ],\n      [\n        \"▁AW\",\n        -12.023035049438477\n      ],\n      [\n        \"▁NEC\",\n        -12.023256301879883\n      ],\n      [\n        \"▁受け付け\",\n        -12.023270606994629\n      ],\n      [\n        \"▁賜\",\n        -12.02342414855957\n      ],\n      [\n        \"▁gray\",\n        -12.023439407348633\n      ],\n      [\n        \"▁ぬいぐるみ\",\n        -12.023447036743164\n      ],\n      [\n        \"▁有名である\",\n        -12.023499488830566\n      ],\n      [\n        \"▁投下\",\n        -12.02351188659668\n      ],\n      [\n        \"▁母体\",\n        -12.023577690124512\n      ],\n      [\n        \"▁BC\",\n        -12.023634910583496\n      ],\n      [\n        \"▁all\",\n        -12.023706436157227\n      ],\n      [\n        \"杯\",\n        -12.0238618850708\n      ],\n      [\n        \"▁渡す\",\n        -12.024124145507812\n      ],\n      [\n        \"テレ\",\n        -12.024582862854004\n      ],\n      [\n        \"▁セガ\",\n        -12.02458667755127\n      ],\n      [\n        \"鳴\",\n        -12.024700164794922\n      ],\n      [\n        \"▁自称\",\n        -12.024772644042969\n      ],\n      [\n        \"我々\",\n        -12.02479076385498\n      ],\n      [\n        \"▁バンコク\",\n        -12.024824142456055\n      ],\n      [\n        \"▁血糖\",\n        -12.024892807006836\n      ],\n      [\n        \"迎\",\n        -12.024895668029785\n      ],\n      [\n        \"▁配分\",\n        -12.025033950805664\n      ],\n      [\n        \"ョ\",\n        -12.025169372558594\n      ],\n      [\n        \"▁貫通\",\n        -12.025209426879883\n      ],\n      [\n        \"▁原点\",\n        -12.025227546691895\n      ],\n      [\n        \"ーフ\",\n        -12.025289535522461\n      ],\n      [\n        \"▁均\",\n        -12.025335311889648\n      ],\n      [\n        \"▁コミ\",\n        -12.02536392211914\n      ],\n      [\n        \"▁艦艇\",\n        -12.025463104248047\n      ],\n      [\n        \"▁〇\",\n        -12.025522232055664\n      ],\n      [\n        \"都道府県\",\n        -12.025538444519043\n      ],\n      [\n        \"▁リベラル\",\n        -12.025625228881836\n      ],\n      [\n        \"▁丼\",\n        -12.02624797821045\n      ],\n      [\n        \"ISS\",\n        -12.026358604431152\n      ],\n      [\n        \"▁おしゃれな\",\n        -12.026592254638672\n      ],\n      [\n        \"▁問う\",\n        -12.026599884033203\n      ],\n      [\n        \"たらさ\",\n        -12.026674270629883\n      ],\n      [\n        \"▁さらさ\",\n        -12.026843070983887\n      ],\n      [\n        \"cial\",\n        -12.026846885681152\n      ],\n      [\n        \"▁会費\",\n        -12.026870727539062\n      ],\n      [\n        \"キッ\",\n        -12.02689266204834\n      ],\n      [\n        \"▁暴走\",\n        -12.027030944824219\n      ],\n      [\n        \"▁車庫\",\n        -12.02705192565918\n      ],\n      [\n        \"▁ミュージアム\",\n        -12.027286529541016\n      ],\n      [\n        \"LT\",\n        -12.02773380279541\n      ],\n      [\n        \"ture\",\n        -12.027746200561523\n      ],\n      [\n        \"ime\",\n        -12.027884483337402\n      ],\n      [\n        \"▁渡った\",\n        -12.02813720703125\n      ],\n      [\n        \"スプ\",\n        -12.028292655944824\n      ],\n      [\n        \"▁ドール\",\n        -12.028424263000488\n      ],\n      [\n        \"▁きら\",\n        -12.028453826904297\n      ],\n      [\n        \"早く\",\n        -12.02859115600586\n      ],\n      [\n        \"▁勝った\",\n        -12.028727531433105\n      ],\n      [\n        \"top\",\n        -12.028738021850586\n      ],\n      [\n        \"WS\",\n        -12.028796195983887\n      ],\n      [\n        \"▁信念\",\n        -12.028894424438477\n      ],\n      [\n        \"zu\",\n        -12.028950691223145\n      ],\n      [\n        \"▁アイヌ\",\n        -12.028985977172852\n      ],\n      [\n        \"▁練馬\",\n        -12.029120445251465\n      ],\n      [\n        \"è\",\n        -12.029163360595703\n      ],\n      [\n        \"マシーン\",\n        -12.029186248779297\n      ],\n      [\n        \"MM\",\n        -12.029335021972656\n      ],\n      [\n        \"▁みなし\",\n        -12.029571533203125\n      ],\n      [\n        \"▁代理人\",\n        -12.029828071594238\n      ],\n      [\n        \"鍋\",\n        -12.0299072265625\n      ],\n      [\n        \"▁着目\",\n        -12.029927253723145\n      ],\n      [\n        \"ンジ\",\n        -12.029927253723145\n      ],\n      [\n        \"▁すり\",\n        -12.030180931091309\n      ],\n      [\n        \"▁大久保\",\n        -12.03022575378418\n      ],\n      [\n        \"▁猪\",\n        -12.03026294708252\n      ],\n      [\n        \"je\",\n        -12.030506134033203\n      ],\n      [\n        \"▁推し\",\n        -12.03055191040039\n      ],\n      [\n        \"はな\",\n        -12.030569076538086\n      ],\n      [\n        \"1954\",\n        -12.03061294555664\n      ],\n      [\n        \"que\",\n        -12.03061294555664\n      ],\n      [\n        \"▁使い分け\",\n        -12.030792236328125\n      ],\n      [\n        \"▁望み\",\n        -12.030793190002441\n      ],\n      [\n        \"デジタル\",\n        -12.030813217163086\n      ],\n      [\n        \"▁スリム\",\n        -12.030922889709473\n      ],\n      [\n        \"▁生前\",\n        -12.030929565429688\n      ],\n      [\n        \"▁イライラ\",\n        -12.030953407287598\n      ],\n      [\n        \"▁ヴォル\",\n        -12.031042098999023\n      ],\n      [\n        \"亘\",\n        -12.031339645385742\n      ],\n      [\n        \"アジア\",\n        -12.03135871887207\n      ],\n      [\n        \"▁パニック\",\n        -12.031383514404297\n      ],\n      [\n        \"▁紗\",\n        -12.031455039978027\n      ],\n      [\n        \"▁隠れて\",\n        -12.031514167785645\n      ],\n      [\n        \"建物\",\n        -12.031661033630371\n      ],\n      [\n        \"省\",\n        -12.031776428222656\n      ],\n      [\n        \"▁氏族\",\n        -12.031834602355957\n      ],\n      [\n        \"▁アンティーク\",\n        -12.031854629516602\n      ],\n      [\n        \"忙し\",\n        -12.031900405883789\n      ],\n      [\n        \"縮\",\n        -12.031970024108887\n      ],\n      [\n        \"▁志願\",\n        -12.032115936279297\n      ],\n      [\n        \"▁叫び\",\n        -12.032132148742676\n      ],\n      [\n        \"▁的だった\",\n        -12.032208442687988\n      ],\n      [\n        \"▁Pi\",\n        -12.03221321105957\n      ],\n      [\n        \"▁吉川\",\n        -12.032342910766602\n      ],\n      [\n        \"遇\",\n        -12.032361030578613\n      ],\n      [\n        \"▁巡回\",\n        -12.032380104064941\n      ],\n      [\n        \"李\",\n        -12.0324125289917\n      ],\n      [\n        \"美容\",\n        -12.032763481140137\n      ],\n      [\n        \"get\",\n        -12.032772064208984\n      ],\n      [\n        \"▁112\",\n        -12.03278636932373\n      ],\n      [\n        \"1949\",\n        -12.0328950881958\n      ],\n      [\n        \"かえ\",\n        -12.032928466796875\n      ],\n      [\n        \"▁通じる\",\n        -12.032963752746582\n      ],\n      [\n        \"しゅう\",\n        -12.033111572265625\n      ],\n      [\n        \"定期\",\n        -12.033157348632812\n      ],\n      [\n        \"▁祝福\",\n        -12.033199310302734\n      ],\n      [\n        \"▁ラッキー\",\n        -12.033387184143066\n      ],\n      [\n        \"▁中性\",\n        -12.033401489257812\n      ],\n      [\n        \"▁降って\",\n        -12.033587455749512\n      ],\n      [\n        \"逸\",\n        -12.033649444580078\n      ],\n      [\n        \"誌\",\n        -12.033653259277344\n      ],\n      [\n        \"俗\",\n        -12.033815383911133\n      ],\n      [\n        \"▁皇子\",\n        -12.033828735351562\n      ],\n      [\n        \"▁作風\",\n        -12.034064292907715\n      ],\n      [\n        \"▁引き継いだ\",\n        -12.034137725830078\n      ],\n      [\n        \"▁役目\",\n        -12.034173011779785\n      ],\n      [\n        \"▁願望\",\n        -12.034235954284668\n      ],\n      [\n        \"▁Fe\",\n        -12.034327507019043\n      ],\n      [\n        \"▁迷彩\",\n        -12.034414291381836\n      ],\n      [\n        \"▁mini\",\n        -12.034528732299805\n      ],\n      [\n        \"エア\",\n        -12.034544944763184\n      ],\n      [\n        \"▁ペルー\",\n        -12.034628868103027\n      ],\n      [\n        \"宇宙\",\n        -12.034714698791504\n      ],\n      [\n        \"▁八重\",\n        -12.034839630126953\n      ],\n      [\n        \"▁International\",\n        -12.035011291503906\n      ],\n      [\n        \"▁CV\",\n        -12.035077095031738\n      ],\n      [\n        \"▁ROM\",\n        -12.035185813903809\n      ],\n      [\n        \"▁眞\",\n        -12.03519058227539\n      ],\n      [\n        \"▁目録\",\n        -12.035242080688477\n      ],\n      [\n        \"▁珠\",\n        -12.03528881072998\n      ],\n      [\n        \"▁カリキュラム\",\n        -12.035308837890625\n      ],\n      [\n        \"▁テク\",\n        -12.035386085510254\n      ],\n      [\n        \"▁ブリー\",\n        -12.035438537597656\n      ],\n      [\n        \"▁もてなし\",\n        -12.035526275634766\n      ],\n      [\n        \"ラグ\",\n        -12.035529136657715\n      ],\n      [\n        \"▁凍\",\n        -12.03566837310791\n      ],\n      [\n        \"▁フォーミュラ\",\n        -12.035707473754883\n      ],\n      [\n        \"▁開局\",\n        -12.035898208618164\n      ],\n      [\n        \"▁駅伝\",\n        -12.036035537719727\n      ],\n      [\n        \"鼻\",\n        -12.036112785339355\n      ],\n      [\n        \"▁温かい\",\n        -12.036213874816895\n      ],\n      [\n        \"▁活発に\",\n        -12.036369323730469\n      ],\n      [\n        \"ソリ\",\n        -12.036397933959961\n      ],\n      [\n        \"▁押さえ\",\n        -12.036410331726074\n      ],\n      [\n        \"▁事象\",\n        -12.036550521850586\n      ],\n      [\n        \"▁妖\",\n        -12.036674499511719\n      ],\n      [\n        \"▁浴場\",\n        -12.036985397338867\n      ],\n      [\n        \"▁NSE\",\n        -12.037089347839355\n      ],\n      [\n        \"スキン\",\n        -12.03711986541748\n      ],\n      [\n        \"▁立派な\",\n        -12.037461280822754\n      ],\n      [\n        \"▁大国\",\n        -12.037626266479492\n      ],\n      [\n        \"場所\",\n        -12.037690162658691\n      ],\n      [\n        \"▁採掘\",\n        -12.037711143493652\n      ],\n      [\n        \"▁真ん中\",\n        -12.03797435760498\n      ],\n      [\n        \"▁ギャグ\",\n        -12.038028717041016\n      ],\n      [\n        \"▁おこう\",\n        -12.038174629211426\n      ],\n      [\n        \"▁特権\",\n        -12.038220405578613\n      ],\n      [\n        \"BE\",\n        -12.038248062133789\n      ],\n      [\n        \"▁移る\",\n        -12.038324356079102\n      ],\n      [\n        \"▁担\",\n        -12.038328170776367\n      ],\n      [\n        \"環\",\n        -12.038461685180664\n      ],\n      [\n        \"`\",\n        -12.03852653503418\n      ],\n      [\n        \"▁ラス\",\n        -12.038734436035156\n      ],\n      [\n        \"最新の\",\n        -12.03892707824707\n      ],\n      [\n        \"▁なが\",\n        -12.038965225219727\n      ],\n      [\n        \"中世\",\n        -12.03899097442627\n      ],\n      [\n        \"▁跨\",\n        -12.0390043258667\n      ],\n      [\n        \"▁斜\",\n        -12.039046287536621\n      ],\n      [\n        \"rid\",\n        -12.039083480834961\n      ],\n      [\n        \"▁帰った\",\n        -12.039090156555176\n      ],\n      [\n        \"▁カビ\",\n        -12.039155960083008\n      ],\n      [\n        \"ビリ\",\n        -12.03933048248291\n      ],\n      [\n        \"uch\",\n        -12.039373397827148\n      ],\n      [\n        \"▁男優\",\n        -12.039412498474121\n      ],\n      [\n        \"▁関わった\",\n        -12.039795875549316\n      ],\n      [\n        \"関東\",\n        -12.039809226989746\n      ],\n      [\n        \"▁及ば\",\n        -12.039814949035645\n      ],\n      [\n        \"既に\",\n        -12.039826393127441\n      ],\n      [\n        \"▁ヴェネツィア\",\n        -12.039993286132812\n      ],\n      [\n        \"ステル\",\n        -12.040040016174316\n      ],\n      [\n        \"▁掛かる\",\n        -12.040106773376465\n      ],\n      [\n        \"▁Explorer\",\n        -12.040393829345703\n      ],\n      [\n        \"▁突撃\",\n        -12.040433883666992\n      ],\n      [\n        \"▁淡\",\n        -12.040450096130371\n      ],\n      [\n        \"▁トレント\",\n        -12.040796279907227\n      ],\n      [\n        \"▁名乗り\",\n        -12.040950775146484\n      ],\n      [\n        \"▁成る\",\n        -12.041208267211914\n      ],\n      [\n        \"▁オルガン\",\n        -12.041210174560547\n      ],\n      [\n        \"001\",\n        -12.041279792785645\n      ],\n      [\n        \"分布\",\n        -12.041505813598633\n      ],\n      [\n        \"▁Pe\",\n        -12.041516304016113\n      ],\n      [\n        \"ces\",\n        -12.041542053222656\n      ],\n      [\n        \"▁婚姻\",\n        -12.041698455810547\n      ],\n      [\n        \"▁万が一\",\n        -12.04173469543457\n      ],\n      [\n        \"▁りん\",\n        -12.041741371154785\n      ],\n      [\n        \"▁続々\",\n        -12.04202651977539\n      ],\n      [\n        \"▁代数\",\n        -12.0420503616333\n      ],\n      [\n        \"ブレー\",\n        -12.042218208312988\n      ],\n      [\n        \"▁通商\",\n        -12.04234790802002\n      ],\n      [\n        \"▁希少\",\n        -12.04251480102539\n      ],\n      [\n        \"▁本件\",\n        -12.042716026306152\n      ],\n      [\n        \"れい\",\n        -12.042730331420898\n      ],\n      [\n        \"▁使者\",\n        -12.042794227600098\n      ],\n      [\n        \"▁含んだ\",\n        -12.04285717010498\n      ],\n      [\n        \"▁中日\",\n        -12.042987823486328\n      ],\n      [\n        \"▁踊る\",\n        -12.042998313903809\n      ],\n      [\n        \"テスト\",\n        -12.043190956115723\n      ],\n      [\n        \"har\",\n        -12.043210983276367\n      ],\n      [\n        \"▁付着\",\n        -12.043264389038086\n      ],\n      [\n        \"▁投球\",\n        -12.043313980102539\n      ],\n      [\n        \"▁やってくる\",\n        -12.043339729309082\n      ],\n      [\n        \"▁治世\",\n        -12.043387413024902\n      ],\n      [\n        \"▁盆地\",\n        -12.043396949768066\n      ],\n      [\n        \"概説\",\n        -12.043442726135254\n      ],\n      [\n        \"▁田園\",\n        -12.04344654083252\n      ],\n      [\n        \"▁タラ\",\n        -12.043513298034668\n      ],\n      [\n        \"▁鍛え\",\n        -12.043607711791992\n      ],\n      [\n        \"▁特設\",\n        -12.043660163879395\n      ],\n      [\n        \"穀\",\n        -12.043696403503418\n      ],\n      [\n        \"帳\",\n        -12.0437650680542\n      ],\n      [\n        \"▁役立て\",\n        -12.04378604888916\n      ],\n      [\n        \"▁カレ\",\n        -12.043805122375488\n      ],\n      [\n        \"RAM\",\n        -12.043880462646484\n      ],\n      [\n        \"▁増設\",\n        -12.043901443481445\n      ],\n      [\n        \"テキスト\",\n        -12.043905258178711\n      ],\n      [\n        \"▁ゴン\",\n        -12.043912887573242\n      ],\n      [\n        \"▁神秘\",\n        -12.044041633605957\n      ],\n      [\n        \"▁発する\",\n        -12.044163703918457\n      ],\n      [\n        \"▁役場\",\n        -12.044179916381836\n      ],\n      [\n        \"炊\",\n        -12.044397354125977\n      ],\n      [\n        \"▁十三\",\n        -12.04446792602539\n      ],\n      [\n        \"▁ベースボール\",\n        -12.044524192810059\n      ],\n      [\n        \"▁セクション\",\n        -12.0446138381958\n      ],\n      [\n        \"こく\",\n        -12.044666290283203\n      ],\n      [\n        \"いわゆる\",\n        -12.044682502746582\n      ],\n      [\n        \"▁政務\",\n        -12.044715881347656\n      ],\n      [\n        \"▁げん\",\n        -12.044918060302734\n      ],\n      [\n        \"1952\",\n        -12.04494571685791\n      ],\n      [\n        \"▁創り\",\n        -12.045021057128906\n      ],\n      [\n        \"▁ピストン\",\n        -12.04505443572998\n      ],\n      [\n        \"買\",\n        -12.045061111450195\n      ],\n      [\n        \"▁DP\",\n        -12.045063018798828\n      ],\n      [\n        \"▁際し\",\n        -12.045077323913574\n      ],\n      [\n        \"▁曰く\",\n        -12.045103073120117\n      ],\n      [\n        \"つい\",\n        -12.045242309570312\n      ],\n      [\n        \"▁両面\",\n        -12.045289993286133\n      ],\n      [\n        \"▁濃厚\",\n        -12.045292854309082\n      ],\n      [\n        \"▁営む\",\n        -12.045392036437988\n      ],\n      [\n        \"▁go\",\n        -12.045470237731934\n      ],\n      [\n        \"▁取り入れる\",\n        -12.045665740966797\n      ],\n      [\n        \"▁規範\",\n        -12.04570484161377\n      ],\n      [\n        \"維\",\n        -12.045707702636719\n      ],\n      [\n        \"▁アト\",\n        -12.045748710632324\n      ],\n      [\n        \"▁ヨーク\",\n        -12.046090126037598\n      ],\n      [\n        \"▁秋葉原\",\n        -12.046106338500977\n      ],\n      [\n        \"▁暴行\",\n        -12.046555519104004\n      ],\n      [\n        \"▁皇太子\",\n        -12.046608924865723\n      ],\n      [\n        \"▁専業\",\n        -12.046730995178223\n      ],\n      [\n        \"エム\",\n        -12.046754837036133\n      ],\n      [\n        \"▁Can\",\n        -12.04677677154541\n      ],\n      [\n        \"口コミ\",\n        -12.046905517578125\n      ],\n      [\n        \"▁分かれる\",\n        -12.047000885009766\n      ],\n      [\n        \"▁及ぼし\",\n        -12.047015190124512\n      ],\n      [\n        \"▁原材料\",\n        -12.047037124633789\n      ],\n      [\n        \"▁生かして\",\n        -12.047057151794434\n      ],\n      [\n        \"▁優し\",\n        -12.047069549560547\n      ],\n      [\n        \"▁前橋\",\n        -12.047094345092773\n      ],\n      [\n        \"▁吊り\",\n        -12.047165870666504\n      ],\n      [\n        \"▁おやつ\",\n        -12.04721736907959\n      ],\n      [\n        \"▁燕\",\n        -12.047380447387695\n      ],\n      [\n        \"▁漆\",\n        -12.047422409057617\n      ],\n      [\n        \"▁真相\",\n        -12.047459602355957\n      ],\n      [\n        \"差し\",\n        -12.047477722167969\n      ],\n      [\n        \"並\",\n        -12.047487258911133\n      ],\n      [\n        \"▁都営\",\n        -12.04749870300293\n      ],\n      [\n        \"▁尼崎\",\n        -12.047616004943848\n      ],\n      [\n        \"▁バウ\",\n        -12.047722816467285\n      ],\n      [\n        \"▁届いて\",\n        -12.047789573669434\n      ],\n      [\n        \"▁リーディング\",\n        -12.04789924621582\n      ],\n      [\n        \"▁Ho\",\n        -12.04804515838623\n      ],\n      [\n        \"▁民法\",\n        -12.048050880432129\n      ],\n      [\n        \"▁縛\",\n        -12.04807186126709\n      ],\n      [\n        \"INT\",\n        -12.048162460327148\n      ],\n      [\n        \"ビッチ\",\n        -12.048335075378418\n      ],\n      [\n        \"▁入所\",\n        -12.048492431640625\n      ],\n      [\n        \"▁MediaWiki\",\n        -12.0485258102417\n      ],\n      [\n        \"▁誠実\",\n        -12.0488862991333\n      ],\n      [\n        \"将来\",\n        -12.049050331115723\n      ],\n      [\n        \"SO\",\n        -12.04908561706543\n      ],\n      [\n        \"ool\",\n        -12.049124717712402\n      ],\n      [\n        \"▁Po\",\n        -12.049128532409668\n      ],\n      [\n        \"▁ライオンズ\",\n        -12.049223899841309\n      ],\n      [\n        \"小説\",\n        -12.049243927001953\n      ],\n      [\n        \"▁iphone\",\n        -12.049263954162598\n      ],\n      [\n        \"▁湿度\",\n        -12.049368858337402\n      ],\n      [\n        \"▁BB\",\n        -12.049421310424805\n      ],\n      [\n        \"現行\",\n        -12.04943561553955\n      ],\n      [\n        \"▁誤った\",\n        -12.04954719543457\n      ],\n      [\n        \"ILL\",\n        -12.049615859985352\n      ],\n      [\n        \"▁べし\",\n        -12.049661636352539\n      ],\n      [\n        \"汁\",\n        -12.049675941467285\n      ],\n      [\n        \"▁デザート\",\n        -12.049732208251953\n      ],\n      [\n        \"▁洋画\",\n        -12.049732208251953\n      ],\n      [\n        \"▁お家\",\n        -12.049784660339355\n      ],\n      [\n        \"もない\",\n        -12.049860954284668\n      ],\n      [\n        \"▁1915\",\n        -12.049866676330566\n      ],\n      [\n        \"▁マサチューセッツ\",\n        -12.049932479858398\n      ],\n      [\n        \"まとめ\",\n        -12.050128936767578\n      ],\n      [\n        \"援\",\n        -12.050172805786133\n      ],\n      [\n        \"▁症例\",\n        -12.050288200378418\n      ],\n      [\n        \"▁ウィリアムズ\",\n        -12.050382614135742\n      ],\n      [\n        \"▁固有の\",\n        -12.05063533782959\n      ],\n      [\n        \"只\",\n        -12.050637245178223\n      ],\n      [\n        \"▁祖先\",\n        -12.050649642944336\n      ],\n      [\n        \"讃\",\n        -12.05070972442627\n      ],\n      [\n        \"▁カーボン\",\n        -12.050724029541016\n      ],\n      [\n        \"tan\",\n        -12.05094051361084\n      ],\n      [\n        \"ぱ\",\n        -12.050959587097168\n      ],\n      [\n        \"▁青葉\",\n        -12.051074028015137\n      ],\n      [\n        \"▁硬化\",\n        -12.051226615905762\n      ],\n      [\n        \"▁武力\",\n        -12.051239967346191\n      ],\n      [\n        \"▁アーチ\",\n        -12.051376342773438\n      ],\n      [\n        \"▁ビス\",\n        -12.051403999328613\n      ],\n      [\n        \"BU\",\n        -12.051523208618164\n      ],\n      [\n        \"▁尖\",\n        -12.051616668701172\n      ],\n      [\n        \"▁rd\",\n        -12.051806449890137\n      ],\n      [\n        \"レフ\",\n        -12.052119255065918\n      ],\n      [\n        \"▁掲示\",\n        -12.052128791809082\n      ],\n      [\n        \"е\",\n        -12.052255630493164\n      ],\n      [\n        \"▁不明の\",\n        -12.052277565002441\n      ],\n      [\n        \"▁ロビー\",\n        -12.052383422851562\n      ],\n      [\n        \"DY\",\n        -12.052427291870117\n      ],\n      [\n        \"どれ\",\n        -12.052620887756348\n      ],\n      [\n        \"▁協奏曲\",\n        -12.052661895751953\n      ],\n      [\n        \"▁餃子\",\n        -12.052661895751953\n      ],\n      [\n        \"▁怒ら\",\n        -12.052667617797852\n      ],\n      [\n        \"▁法定\",\n        -12.052678108215332\n      ],\n      [\n        \"▁Wii\",\n        -12.052783012390137\n      ],\n      [\n        \"▁定住\",\n        -12.052877426147461\n      ],\n      [\n        \"▁金持ち\",\n        -12.052935600280762\n      ],\n      [\n        \"mp\",\n        -12.05294418334961\n      ],\n      [\n        \"▁搬送\",\n        -12.05296516418457\n      ],\n      [\n        \"▁エリート\",\n        -12.053023338317871\n      ],\n      [\n        \"漫\",\n        -12.053045272827148\n      ],\n      [\n        \"▁減る\",\n        -12.053442001342773\n      ],\n      [\n        \"▁べきな\",\n        -12.053443908691406\n      ],\n      [\n        \"tin\",\n        -12.053498268127441\n      ],\n      [\n        \"UE\",\n        -12.053522109985352\n      ],\n      [\n        \"▁拉致\",\n        -12.053572654724121\n      ],\n      [\n        \"▁youtube\",\n        -12.053573608398438\n      ],\n      [\n        \"▁フォワード\",\n        -12.053689956665039\n      ],\n      [\n        \"▁ぐん\",\n        -12.053738594055176\n      ],\n      [\n        \"▁000\",\n        -12.053741455078125\n      ],\n      [\n        \"▁付随\",\n        -12.053754806518555\n      ],\n      [\n        \"▁名人\",\n        -12.053781509399414\n      ],\n      [\n        \"▁手軽\",\n        -12.053840637207031\n      ],\n      [\n        \"▁倒\",\n        -12.053893089294434\n      ],\n      [\n        \"▁シャトー\",\n        -12.053958892822266\n      ],\n      [\n        \"▁独学\",\n        -12.054040908813477\n      ],\n      [\n        \"▁石田\",\n        -12.054153442382812\n      ],\n      [\n        \"藝\",\n        -12.054383277893066\n      ],\n      [\n        \"▁憎\",\n        -12.054597854614258\n      ],\n      [\n        \"▁絶頂\",\n        -12.054606437683105\n      ],\n      [\n        \"▁南米\",\n        -12.054643630981445\n      ],\n      [\n        \"UB\",\n        -12.054655075073242\n      ],\n      [\n        \"orn\",\n        -12.054666519165039\n      ],\n      [\n        \"▁下関\",\n        -12.054682731628418\n      ],\n      [\n        \"▁勾配\",\n        -12.0546875\n      ],\n      [\n        \"▁眠って\",\n        -12.054716110229492\n      ],\n      [\n        \"▁ヘー\",\n        -12.054814338684082\n      ],\n      [\n        \"▁寸\",\n        -12.054985046386719\n      ],\n      [\n        \"▁リスナー\",\n        -12.05511474609375\n      ],\n      [\n        \"▁MUSIC\",\n        -12.055194854736328\n      ],\n      [\n        \"構造\",\n        -12.055200576782227\n      ],\n      [\n        \"トラン\",\n        -12.055413246154785\n      ],\n      [\n        \"▁トーン\",\n        -12.055432319641113\n      ],\n      [\n        \"▁感度\",\n        -12.055575370788574\n      ],\n      [\n        \"ifi\",\n        -12.055601119995117\n      ],\n      [\n        \"▁逃げる\",\n        -12.055655479431152\n      ],\n      [\n        \"▁行え\",\n        -12.056012153625488\n      ],\n      [\n        \"かみ\",\n        -12.05609130859375\n      ],\n      [\n        \"▁ランス\",\n        -12.056175231933594\n      ],\n      [\n        \"▁母音\",\n        -12.056244850158691\n      ],\n      [\n        \"▁スルー\",\n        -12.05630874633789\n      ],\n      [\n        \"コース\",\n        -12.056312561035156\n      ],\n      [\n        \"CR\",\n        -12.056323051452637\n      ],\n      [\n        \"▁人体\",\n        -12.056342124938965\n      ],\n      [\n        \"狐\",\n        -12.056513786315918\n      ],\n      [\n        \"▁ウェディング\",\n        -12.056772232055664\n      ],\n      [\n        \"▁あう\",\n        -12.056877136230469\n      ],\n      [\n        \"▁クリクラ\",\n        -12.05710220336914\n      ],\n      [\n        \"▁苦戦\",\n        -12.057229995727539\n      ],\n      [\n        \"ジル\",\n        -12.057331085205078\n      ],\n      [\n        \"▁就航\",\n        -12.057342529296875\n      ],\n      [\n        \"▁ウェールズ\",\n        -12.057432174682617\n      ],\n      [\n        \"▁EA\",\n        -12.057578086853027\n      ],\n      [\n        \"▁塗\",\n        -12.057665824890137\n      ],\n      [\n        \"▁カツ\",\n        -12.057743072509766\n      ],\n      [\n        \"▁ひき\",\n        -12.057830810546875\n      ],\n      [\n        \"がけ\",\n        -12.057923316955566\n      ],\n      [\n        \"▁望ま\",\n        -12.057960510253906\n      ],\n      [\n        \"▁ライス\",\n        -12.057981491088867\n      ],\n      [\n        \"▁降りて\",\n        -12.057984352111816\n      ],\n      [\n        \"HT\",\n        -12.057990074157715\n      ],\n      [\n        \"盟\",\n        -12.058003425598145\n      ],\n      [\n        \"▁同等\",\n        -12.058222770690918\n      ],\n      [\n        \"▁基幹\",\n        -12.058252334594727\n      ],\n      [\n        \"▁色素\",\n        -12.058259963989258\n      ],\n      [\n        \"1953\",\n        -12.058283805847168\n      ],\n      [\n        \"▁唱え\",\n        -12.0582857131958\n      ],\n      [\n        \"▁もしかしたら\",\n        -12.058307647705078\n      ],\n      [\n        \"播\",\n        -12.058320999145508\n      ],\n      [\n        \"▁柿\",\n        -12.058359146118164\n      ],\n      [\n        \"▁錯誤\",\n        -12.058445930480957\n      ],\n      [\n        \"▁落札\",\n        -12.058486938476562\n      ],\n      [\n        \"▁Bar\",\n        -12.058564186096191\n      ],\n      [\n        \"▁NS\",\n        -12.058684349060059\n      ],\n      [\n        \"アンド\",\n        -12.058878898620605\n      ],\n      [\n        \"▁伊予\",\n        -12.058895111083984\n      ],\n      [\n        \"▁大学校\",\n        -12.058961868286133\n      ],\n      [\n        \"▁小島\",\n        -12.059021949768066\n      ],\n      [\n        \"▁混同\",\n        -12.059048652648926\n      ],\n      [\n        \"▁vodafone\",\n        -12.059056282043457\n      ],\n      [\n        \"ウォ\",\n        -12.059073448181152\n      ],\n      [\n        \"十七\",\n        -12.059097290039062\n      ],\n      [\n        \"▁風土\",\n        -12.05920696258545\n      ],\n      [\n        \"▁挑む\",\n        -12.059261322021484\n      ],\n      [\n        \"悩\",\n        -12.05936336517334\n      ],\n      [\n        \"▁たり\",\n        -12.059469223022461\n      ],\n      [\n        \"Co\",\n        -12.059666633605957\n      ],\n      [\n        \"▁流して\",\n        -12.059671401977539\n      ],\n      [\n        \"1957\",\n        -12.059691429138184\n      ],\n      [\n        \"ウェン\",\n        -12.059694290161133\n      ],\n      [\n        \"何度\",\n        -12.05981731414795\n      ],\n      [\n        \"▁こん\",\n        -12.059906005859375\n      ],\n      [\n        \"▁さまざま\",\n        -12.059985160827637\n      ],\n      [\n        \"▁届出\",\n        -12.059995651245117\n      ],\n      [\n        \"▁首長\",\n        -12.060133934020996\n      ],\n      [\n        \"▁Per\",\n        -12.060277938842773\n      ],\n      [\n        \"▁レイプ\",\n        -12.060371398925781\n      ],\n      [\n        \"ナウ\",\n        -12.060397148132324\n      ],\n      [\n        \"私生活\",\n        -12.06042194366455\n      ],\n      [\n        \"star\",\n        -12.060503005981445\n      ],\n      [\n        \"テージ\",\n        -12.060556411743164\n      ],\n      [\n        \"▁News\",\n        -12.060651779174805\n      ],\n      [\n        \"▁最速\",\n        -12.06068229675293\n      ],\n      [\n        \"ft\",\n        -12.060686111450195\n      ],\n      [\n        \"裂\",\n        -12.06074333190918\n      ],\n      [\n        \"▁有罪\",\n        -12.060783386230469\n      ],\n      [\n        \"▁訓\",\n        -12.060830116271973\n      ],\n      [\n        \"昼\",\n        -12.060925483703613\n      ],\n      [\n        \"▁メルカリ\",\n        -12.060929298400879\n      ],\n      [\n        \"▁包み\",\n        -12.060933113098145\n      ],\n      [\n        \"ION\",\n        -12.060970306396484\n      ],\n      [\n        \"▁獅子\",\n        -12.060994148254395\n      ],\n      [\n        \"使い\",\n        -12.061037063598633\n      ],\n      [\n        \"リッツ\",\n        -12.06108570098877\n      ],\n      [\n        \"カップ\",\n        -12.061100006103516\n      ],\n      [\n        \"▁躊躇\",\n        -12.061197280883789\n      ],\n      [\n        \"▁ショルダー\",\n        -12.061299324035645\n      ],\n      [\n        \"▁滅\",\n        -12.061565399169922\n      ],\n      [\n        \"▁換算\",\n        -12.061605453491211\n      ],\n      [\n        \"▁ヴィン\",\n        -12.061606407165527\n      ],\n      [\n        \"▁えい\",\n        -12.061616897583008\n      ],\n      [\n        \"▁コナン\",\n        -12.061701774597168\n      ],\n      [\n        \"秘\",\n        -12.061789512634277\n      ],\n      [\n        \"更\",\n        -12.06191635131836\n      ],\n      [\n        \"▁全集\",\n        -12.061929702758789\n      ],\n      [\n        \"▁バク\",\n        -12.06194019317627\n      ],\n      [\n        \"寄せ\",\n        -12.061956405639648\n      ],\n      [\n        \"▁突如\",\n        -12.062028884887695\n      ],\n      [\n        \"▁弾圧\",\n        -12.06203842163086\n      ],\n      [\n        \"▁着いた\",\n        -12.06207275390625\n      ],\n      [\n        \"▁ブラウザー\",\n        -12.062185287475586\n      ],\n      [\n        \"▁学級\",\n        -12.062196731567383\n      ],\n      [\n        \"▁かっこいい\",\n        -12.0623197555542\n      ],\n      [\n        \"雅\",\n        -12.062426567077637\n      ],\n      [\n        \"てん\",\n        -12.062552452087402\n      ],\n      [\n        \"▁シェフ\",\n        -12.062603950500488\n      ],\n      [\n        \"▁熊谷\",\n        -12.06261157989502\n      ],\n      [\n        \"鉱\",\n        -12.06277084350586\n      ],\n      [\n        \"▁古着\",\n        -12.062804222106934\n      ],\n      [\n        \"サッカー\",\n        -12.062822341918945\n      ],\n      [\n        \"▁見つめ\",\n        -12.062826156616211\n      ],\n      [\n        \"▁みたいで\",\n        -12.062846183776855\n      ],\n      [\n        \"▁西村\",\n        -12.063023567199707\n      ],\n      [\n        \"▁can\",\n        -12.063179969787598\n      ],\n      [\n        \"▁農園\",\n        -12.06326675415039\n      ],\n      [\n        \"活動\",\n        -12.063299179077148\n      ],\n      [\n        \"▁AF\",\n        -12.063326835632324\n      ],\n      [\n        \"▁重要に\",\n        -12.063370704650879\n      ],\n      [\n        \"▁次郎\",\n        -12.063566207885742\n      ],\n      [\n        \"四郎\",\n        -12.063569068908691\n      ],\n      [\n        \"▁アポ\",\n        -12.06357479095459\n      ],\n      [\n        \"▁伸ばして\",\n        -12.063702583312988\n      ],\n      [\n        \"ley\",\n        -12.063704490661621\n      ],\n      [\n        \"祥\",\n        -12.063725471496582\n      ],\n      [\n        \"▁地盤\",\n        -12.063788414001465\n      ],\n      [\n        \"ころ\",\n        -12.063807487487793\n      ],\n      [\n        \"▁乗員\",\n        -12.063861846923828\n      ],\n      [\n        \"▁うま\",\n        -12.063924789428711\n      ],\n      [\n        \"▁謙\",\n        -12.063995361328125\n      ],\n      [\n        \"ティーン\",\n        -12.064075469970703\n      ],\n      [\n        \"棒\",\n        -12.06408405303955\n      ],\n      [\n        \"▁パーフェクト\",\n        -12.064160346984863\n      ],\n      [\n        \"▁習い\",\n        -12.06418514251709\n      ],\n      [\n        \"茨城\",\n        -12.064325332641602\n      ],\n      [\n        \"▁狩猟\",\n        -12.064366340637207\n      ],\n      [\n        \"主要\",\n        -12.064453125\n      ],\n      [\n        \"せた\",\n        -12.064537048339844\n      ],\n      [\n        \"▁パブリック\",\n        -12.064552307128906\n      ],\n      [\n        \"▁しき\",\n        -12.06464672088623\n      ],\n      [\n        \"注意\",\n        -12.064671516418457\n      ],\n      [\n        \"俣\",\n        -12.064715385437012\n      ],\n      [\n        \"▁都度\",\n        -12.06472110748291\n      ],\n      [\n        \"▁騒音\",\n        -12.064776420593262\n      ],\n      [\n        \"▁書簡\",\n        -12.064848899841309\n      ],\n      [\n        \"▁半径\",\n        -12.064969062805176\n      ],\n      [\n        \"きょ\",\n        -12.065115928649902\n      ],\n      [\n        \"▁恐らく\",\n        -12.06515884399414\n      ],\n      [\n        \"プレス\",\n        -12.065165519714355\n      ],\n      [\n        \"争\",\n        -12.065165519714355\n      ],\n      [\n        \"▁蹴\",\n        -12.065183639526367\n      ],\n      [\n        \"▁ねじ\",\n        -12.06525707244873\n      ],\n      [\n        \"▁悲し\",\n        -12.065285682678223\n      ],\n      [\n        \"ym\",\n        -12.065299987792969\n      ],\n      [\n        \"▁リハビリテーション\",\n        -12.065301895141602\n      ],\n      [\n        \"kin\",\n        -12.065314292907715\n      ],\n      [\n        \"▁カシ\",\n        -12.065317153930664\n      ],\n      [\n        \"レッジ\",\n        -12.065360069274902\n      ],\n      [\n        \"ean\",\n        -12.065397262573242\n      ],\n      [\n        \"▁めぐって\",\n        -12.065410614013672\n      ],\n      [\n        \"▁183\",\n        -12.065425872802734\n      ],\n      [\n        \"▁皮切\",\n        -12.065618515014648\n      ],\n      [\n        \"▁住吉\",\n        -12.065642356872559\n      ],\n      [\n        \"▁後年\",\n        -12.06569766998291\n      ],\n      [\n        \"否\",\n        -12.065720558166504\n      ],\n      [\n        \"▁元禄\",\n        -12.065762519836426\n      ],\n      [\n        \"隣\",\n        -12.06579303741455\n      ],\n      [\n        \"ute\",\n        -12.06590461730957\n      ],\n      [\n        \"▁リンゴ\",\n        -12.065939903259277\n      ],\n      [\n        \"▁宅地\",\n        -12.065950393676758\n      ],\n      [\n        \"つぶ\",\n        -12.066058158874512\n      ],\n      [\n        \"▁寝具\",\n        -12.066119194030762\n      ],\n      [\n        \"VC\",\n        -12.06624984741211\n      ],\n      [\n        \"▁アイディア\",\n        -12.06640625\n      ],\n      [\n        \"▁バズ\",\n        -12.066452980041504\n      ],\n      [\n        \"芳\",\n        -12.066463470458984\n      ],\n      [\n        \"▁船体\",\n        -12.066574096679688\n      ],\n      [\n        \"効果\",\n        -12.066585540771484\n      ],\n      [\n        \"▁つて\",\n        -12.066699028015137\n      ],\n      [\n        \"じり\",\n        -12.066843032836914\n      ],\n      [\n        \"ゴール\",\n        -12.066896438598633\n      ],\n      [\n        \"tory\",\n        -12.067008018493652\n      ],\n      [\n        \"ャ\",\n        -12.067129135131836\n      ],\n      [\n        \"▁プリキュア\",\n        -12.06734848022461\n      ],\n      [\n        \"fer\",\n        -12.067378997802734\n      ],\n      [\n        \"▁Firefox\",\n        -12.067410469055176\n      ],\n      [\n        \"▁対談\",\n        -12.067480087280273\n      ],\n      [\n        \"ez\",\n        -12.06753921508789\n      ],\n      [\n        \"▁素早く\",\n        -12.068096160888672\n      ],\n      [\n        \"▁書面\",\n        -12.068367958068848\n      ],\n      [\n        \"ヴィス\",\n        -12.06843376159668\n      ],\n      [\n        \"建設\",\n        -12.068483352661133\n      ],\n      [\n        \"▁経理\",\n        -12.068547248840332\n      ],\n      [\n        \"▁ぶん\",\n        -12.068550109863281\n      ],\n      [\n        \"石川\",\n        -12.068608283996582\n      ],\n      [\n        \"駒\",\n        -12.06865406036377\n      ],\n      [\n        \"▁シンポジウム\",\n        -12.068674087524414\n      ],\n      [\n        \"AX\",\n        -12.06869125366211\n      ],\n      [\n        \"▁有用\",\n        -12.0687837600708\n      ],\n      [\n        \"▁不審\",\n        -12.068824768066406\n      ],\n      [\n        \"▁Youtube\",\n        -12.06894302368164\n      ],\n      [\n        \"設計\",\n        -12.068985939025879\n      ],\n      [\n        \"▁オト\",\n        -12.069037437438965\n      ],\n      [\n        \"到\",\n        -12.069058418273926\n      ],\n      [\n        \"▁抜か\",\n        -12.069154739379883\n      ],\n      [\n        \"▁背負\",\n        -12.069156646728516\n      ],\n      [\n        \"▁悪かった\",\n        -12.069268226623535\n      ],\n      [\n        \"▁殴\",\n        -12.069340705871582\n      ],\n      [\n        \"▁遥\",\n        -12.069388389587402\n      ],\n      [\n        \"▁削\",\n        -12.069623947143555\n      ],\n      [\n        \"▁好きだった\",\n        -12.069894790649414\n      ],\n      [\n        \"忍\",\n        -12.069896697998047\n      ],\n      [\n        \"▁ともかく\",\n        -12.06991195678711\n      ],\n      [\n        \"▁ケータイ\",\n        -12.069953918457031\n      ],\n      [\n        \"グラフ\",\n        -12.070067405700684\n      ],\n      [\n        \"グラン\",\n        -12.07007122039795\n      ],\n      [\n        \"やす\",\n        -12.07011890411377\n      ],\n      [\n        \"▁刺さ\",\n        -12.070128440856934\n      ],\n      [\n        \"▁一行\",\n        -12.07020378112793\n      ],\n      [\n        \"▁パラリンピック\",\n        -12.070218086242676\n      ],\n      [\n        \"▁所管\",\n        -12.07023811340332\n      ],\n      [\n        \"▁Reader\",\n        -12.070340156555176\n      ],\n      [\n        \"至\",\n        -12.070403099060059\n      ],\n      [\n        \"▁ストリーミング\",\n        -12.070423126220703\n      ],\n      [\n        \"▁UV\",\n        -12.070427894592285\n      ],\n      [\n        \"早々\",\n        -12.070446014404297\n      ],\n      [\n        \"▁教団\",\n        -12.07060718536377\n      ],\n      [\n        \"▁那須\",\n        -12.070629119873047\n      ],\n      [\n        \"▁例年\",\n        -12.070708274841309\n      ],\n      [\n        \"▁横山\",\n        -12.070796012878418\n      ],\n      [\n        \"▁ヒロ\",\n        -12.070808410644531\n      ],\n      [\n        \"ぐれ\",\n        -12.07083511352539\n      ],\n      [\n        \"◎\",\n        -12.070932388305664\n      ],\n      [\n        \"落とし\",\n        -12.071026802062988\n      ],\n      [\n        \"ばり\",\n        -12.071087837219238\n      ],\n      [\n        \"▁伸ばす\",\n        -12.071145057678223\n      ],\n      [\n        \"所要\",\n        -12.071146011352539\n      ],\n      [\n        \"期間\",\n        -12.071181297302246\n      ],\n      [\n        \"▁出会って\",\n        -12.071422576904297\n      ],\n      [\n        \"っぷ\",\n        -12.071435928344727\n      ],\n      [\n        \"rom\",\n        -12.071601867675781\n      ],\n      [\n        \"▁願う\",\n        -12.071836471557617\n      ],\n      [\n        \"ッスル\",\n        -12.071863174438477\n      ],\n      [\n        \"▁現職\",\n        -12.071907043457031\n      ],\n      [\n        \"▁市区\",\n        -12.072066307067871\n      ],\n      [\n        \"▁近世\",\n        -12.072073936462402\n      ],\n      [\n        \"▁per\",\n        -12.072127342224121\n      ],\n      [\n        \"リッシュ\",\n        -12.072169303894043\n      ],\n      [\n        \"▁ビーム\",\n        -12.072331428527832\n      ],\n      [\n        \"鋼\",\n        -12.07235050201416\n      ],\n      [\n        \"▁眺めて\",\n        -12.07251262664795\n      ],\n      [\n        \"アクセス\",\n        -12.072604179382324\n      ],\n      [\n        \"▁he\",\n        -12.072762489318848\n      ],\n      [\n        \"▁常連\",\n        -12.072840690612793\n      ],\n      [\n        \"▁特異\",\n        -12.072958946228027\n      ],\n      [\n        \"食事\",\n        -12.072996139526367\n      ],\n      [\n        \"▁星野\",\n        -12.0730562210083\n      ],\n      [\n        \"▁芸名\",\n        -12.073079109191895\n      ],\n      [\n        \"▁歪\",\n        -12.073152542114258\n      ],\n      [\n        \"▁cl\",\n        -12.07320785522461\n      ],\n      [\n        \"COM\",\n        -12.073259353637695\n      ],\n      [\n        \"▁鉢\",\n        -12.073352813720703\n      ],\n      [\n        \"▁澄\",\n        -12.073413848876953\n      ],\n      [\n        \"▁食欲\",\n        -12.073538780212402\n      ],\n      [\n        \"燃\",\n        -12.073685646057129\n      ],\n      [\n        \"リフ\",\n        -12.073697090148926\n      ],\n      [\n        \"▁必殺\",\n        -12.073740005493164\n      ],\n      [\n        \"▁馬力\",\n        -12.073760032653809\n      ],\n      [\n        \"▁もしも\",\n        -12.073762893676758\n      ],\n      [\n        \"▁土器\",\n        -12.073963165283203\n      ],\n      [\n        \"▁アタック\",\n        -12.074055671691895\n      ],\n      [\n        \"▁MVP\",\n        -12.074174880981445\n      ],\n      [\n        \"癌\",\n        -12.074262619018555\n      ],\n      [\n        \"▁最悪の\",\n        -12.074501991271973\n      ],\n      [\n        \"▁暁\",\n        -12.074514389038086\n      ],\n      [\n        \"姉\",\n        -12.074563026428223\n      ],\n      [\n        \"▁警官\",\n        -12.074655532836914\n      ],\n      [\n        \"▁Hot\",\n        -12.074728965759277\n      ],\n      [\n        \"▁河原\",\n        -12.074796676635742\n      ],\n      [\n        \"▁1908\",\n        -12.074840545654297\n      ],\n      [\n        \"▁面会\",\n        -12.074885368347168\n      ],\n      [\n        \"サカ\",\n        -12.074941635131836\n      ],\n      [\n        \"▁堆積\",\n        -12.074965476989746\n      ],\n      [\n        \"▁マヤ\",\n        -12.074999809265137\n      ],\n      [\n        \"▁ナイ\",\n        -12.075016021728516\n      ],\n      [\n        \"▁管弦\",\n        -12.075055122375488\n      ],\n      [\n        \"▁キレイ\",\n        -12.0751371383667\n      ],\n      [\n        \"▁配下\",\n        -12.075169563293457\n      ],\n      [\n        \"▁晃\",\n        -12.075272560119629\n      ],\n      [\n        \"堤\",\n        -12.075441360473633\n      ],\n      [\n        \"▁手動\",\n        -12.075461387634277\n      ],\n      [\n        \"Mac\",\n        -12.07553482055664\n      ],\n      [\n        \"▁専務\",\n        -12.075543403625488\n      ],\n      [\n        \"▁われわれ\",\n        -12.075690269470215\n      ],\n      [\n        \"小路\",\n        -12.075949668884277\n      ],\n      [\n        \"▁伏\",\n        -12.076041221618652\n      ],\n      [\n        \"▁Excel\",\n        -12.076159477233887\n      ],\n      [\n        \"杵\",\n        -12.076208114624023\n      ],\n      [\n        \"▁モンテ\",\n        -12.07623291015625\n      ],\n      [\n        \"▁ロープ\",\n        -12.076295852661133\n      ],\n      [\n        \"▁うけ\",\n        -12.076391220092773\n      ],\n      [\n        \"▁枠組み\",\n        -12.076457023620605\n      ],\n      [\n        \"▁柔らかく\",\n        -12.076504707336426\n      ],\n      [\n        \"▁ピク\",\n        -12.076530456542969\n      ],\n      [\n        \"来年\",\n        -12.076611518859863\n      ],\n      [\n        \"▁揺\",\n        -12.076674461364746\n      ],\n      [\n        \"▁確かな\",\n        -12.076700210571289\n      ],\n      [\n        \"▁恐\",\n        -12.076732635498047\n      ],\n      [\n        \"▁メリ\",\n        -12.077054023742676\n      ],\n      [\n        \"▁降る\",\n        -12.077108383178711\n      ],\n      [\n        \"▁すみ\",\n        -12.077113151550293\n      ],\n      [\n        \"▁自粛\",\n        -12.07719898223877\n      ],\n      [\n        \"▁意味合い\",\n        -12.077232360839844\n      ],\n      [\n        \"微\",\n        -12.077278137207031\n      ],\n      [\n        \"▁充\",\n        -12.077282905578613\n      ],\n      [\n        \"コミ\",\n        -12.077347755432129\n      ],\n      [\n        \"▁Ba\",\n        -12.07748031616211\n      ],\n      [\n        \"▁義務付け\",\n        -12.077608108520508\n      ],\n      [\n        \"琴\",\n        -12.077710151672363\n      ],\n      [\n        \"▁陥って\",\n        -12.07786750793457\n      ],\n      [\n        \"▁シルク\",\n        -12.07800579071045\n      ],\n      [\n        \"▁パク\",\n        -12.078041076660156\n      ],\n      [\n        \"▁たまら\",\n        -12.07809829711914\n      ],\n      [\n        \"著作\",\n        -12.078156471252441\n      ],\n      [\n        \"▁横綱\",\n        -12.078391075134277\n      ],\n      [\n        \"▁三好\",\n        -12.07847785949707\n      ],\n      [\n        \"▁:)\",\n        -12.078489303588867\n      ],\n      [\n        \"▁斜め\",\n        -12.078513145446777\n      ],\n      [\n        \"▁異なった\",\n        -12.07853889465332\n      ],\n      [\n        \"men\",\n        -12.078675270080566\n      ],\n      [\n        \"▁南京\",\n        -12.07870864868164\n      ],\n      [\n        \"▁犯行\",\n        -12.078797340393066\n      ],\n      [\n        \"FE\",\n        -12.07880687713623\n      ],\n      [\n        \"▁ホリ\",\n        -12.079154014587402\n      ],\n      [\n        \"▁円形\",\n        -12.07923698425293\n      ],\n      [\n        \"▁十一\",\n        -12.079251289367676\n      ],\n      [\n        \"▁ムスリム\",\n        -12.07973575592041\n      ],\n      [\n        \"▁請負\",\n        -12.079739570617676\n      ],\n      [\n        \"イカ\",\n        -12.079747200012207\n      ],\n      [\n        \"▁チェン\",\n        -12.079771041870117\n      ],\n      [\n        \"▁要領\",\n        -12.07982349395752\n      ],\n      [\n        \"モデル\",\n        -12.07984733581543\n      ],\n      [\n        \"岐阜\",\n        -12.080012321472168\n      ],\n      [\n        \"▁余地\",\n        -12.080117225646973\n      ],\n      [\n        \"▁心がけ\",\n        -12.080144882202148\n      ],\n      [\n        \"▁欲しく\",\n        -12.080337524414062\n      ],\n      [\n        \"▁Sch\",\n        -12.080368041992188\n      ],\n      [\n        \"▁向か\",\n        -12.08040714263916\n      ],\n      [\n        \"▁りょう\",\n        -12.080440521240234\n      ],\n      [\n        \"▁オリックス\",\n        -12.0805025100708\n      ],\n      [\n        \"▁静かな\",\n        -12.080524444580078\n      ],\n      [\n        \"▁実物\",\n        -12.080643653869629\n      ],\n      [\n        \"▁木曽\",\n        -12.080933570861816\n      ],\n      [\n        \"▁少佐\",\n        -12.081027030944824\n      ],\n      [\n        \"ウェブ\",\n        -12.08126449584961\n      ],\n      [\n        \"▁限って\",\n        -12.081265449523926\n      ],\n      [\n        \"▁転写\",\n        -12.081338882446289\n      ],\n      [\n        \"ling\",\n        -12.081352233886719\n      ],\n      [\n        \"▁man\",\n        -12.081457138061523\n      ],\n      [\n        \"オーストラリア\",\n        -12.0814790725708\n      ],\n      [\n        \"繁\",\n        -12.08149242401123\n      ],\n      [\n        \"▁アルファベット\",\n        -12.081721305847168\n      ],\n      [\n        \"▁ブルーレイ\",\n        -12.08187484741211\n      ],\n      [\n        \"▁丹波\",\n        -12.081875801086426\n      ],\n      [\n        \"▁深め\",\n        -12.081901550292969\n      ],\n      [\n        \"▁己\",\n        -12.081924438476562\n      ],\n      [\n        \"生徒\",\n        -12.0822114944458\n      ],\n      [\n        \"▁ルーツ\",\n        -12.082234382629395\n      ],\n      [\n        \"Sh\",\n        -12.082277297973633\n      ],\n      [\n        \"▁トップス\",\n        -12.082322120666504\n      ],\n      [\n        \"▁党首\",\n        -12.082398414611816\n      ],\n      [\n        \"▁朝倉\",\n        -12.082536697387695\n      ],\n      [\n        \"正式\",\n        -12.082564353942871\n      ],\n      [\n        \"▁コウ\",\n        -12.08265495300293\n      ],\n      [\n        \"みん\",\n        -12.082671165466309\n      ],\n      [\n        \"ボーン\",\n        -12.082677841186523\n      ],\n      [\n        \"▁いちばん\",\n        -12.082771301269531\n      ],\n      [\n        \"▁中京\",\n        -12.082850456237793\n      ],\n      [\n        \"長い\",\n        -12.08292007446289\n      ],\n      [\n        \"瓶\",\n        -12.082954406738281\n      ],\n      [\n        \"▁照射\",\n        -12.08301830291748\n      ],\n      [\n        \"▁鈴鹿\",\n        -12.083296775817871\n      ],\n      [\n        \"▁トク\",\n        -12.083325386047363\n      ],\n      [\n        \"▁親切\",\n        -12.083366394042969\n      ],\n      [\n        \"las\",\n        -12.083442687988281\n      ],\n      [\n        \"▁浴\",\n        -12.083539009094238\n      ],\n      [\n        \"▁育つ\",\n        -12.083561897277832\n      ],\n      [\n        \"長崎\",\n        -12.083587646484375\n      ],\n      [\n        \"ぶし\",\n        -12.083786010742188\n      ],\n      [\n        \"▁club\",\n        -12.083817481994629\n      ],\n      [\n        \"▁下がり\",\n        -12.08387279510498\n      ],\n      [\n        \"▁アワード\",\n        -12.083914756774902\n      ],\n      [\n        \"mark\",\n        -12.0841064453125\n      ],\n      [\n        \"▁オートバイ\",\n        -12.084184646606445\n      ],\n      [\n        \"▁月日\",\n        -12.084485054016113\n      ],\n      [\n        \"▁普遍\",\n        -12.084532737731934\n      ],\n      [\n        \"▁肥料\",\n        -12.084539413452148\n      ],\n      [\n        \"UL\",\n        -12.084562301635742\n      ],\n      [\n        \"山田\",\n        -12.084583282470703\n      ],\n      [\n        \"▁両側\",\n        -12.084708213806152\n      ],\n      [\n        \"▁ベストセラー\",\n        -12.084726333618164\n      ],\n      [\n        \"▁くださり\",\n        -12.08474349975586\n      ],\n      [\n        \"▁アルバ\",\n        -12.084749221801758\n      ],\n      [\n        \"▁青色\",\n        -12.084762573242188\n      ],\n      [\n        \"▁スズキ\",\n        -12.084851264953613\n      ],\n      [\n        \"▁再選\",\n        -12.084892272949219\n      ],\n      [\n        \"▁ドレ\",\n        -12.084897994995117\n      ],\n      [\n        \"▁祈願\",\n        -12.08494758605957\n      ],\n      [\n        \"カワ\",\n        -12.084972381591797\n      ],\n      [\n        \"▁充て\",\n        -12.085023880004883\n      ],\n      [\n        \"▁遼\",\n        -12.085062026977539\n      ],\n      [\n        \"▁アビ\",\n        -12.085119247436523\n      ],\n      [\n        \"穏\",\n        -12.085186958312988\n      ],\n      [\n        \"iss\",\n        -12.085235595703125\n      ],\n      [\n        \"▁妊婦\",\n        -12.085261344909668\n      ],\n      [\n        \"▁1907\",\n        -12.0852632522583\n      ],\n      [\n        \"▁履\",\n        -12.085271835327148\n      ],\n      [\n        \"▁理学部\",\n        -12.085322380065918\n      ],\n      [\n        \"▁ワイヤレス\",\n        -12.085365295410156\n      ],\n      [\n        \"▁軽井沢\",\n        -12.08557415008545\n      ],\n      [\n        \"▁スノー\",\n        -12.08558464050293\n      ],\n      [\n        \"淀川\",\n        -12.085634231567383\n      ],\n      [\n        \"オーバー\",\n        -12.085714340209961\n      ],\n      [\n        \"▁観念\",\n        -12.085824966430664\n      ],\n      [\n        \"▁かず\",\n        -12.08585262298584\n      ],\n      [\n        \"▁一目\",\n        -12.08592700958252\n      ],\n      [\n        \"▁Dis\",\n        -12.086169242858887\n      ],\n      [\n        \"▁放った\",\n        -12.086431503295898\n      ],\n      [\n        \"▁ワゴン\",\n        -12.086540222167969\n      ],\n      [\n        \"▁鉛筆\",\n        -12.08663272857666\n      ],\n      [\n        \"ンドラ\",\n        -12.086798667907715\n      ],\n      [\n        \"▁合金\",\n        -12.086840629577637\n      ],\n      [\n        \"▁射精\",\n        -12.08685302734375\n      ],\n      [\n        \"▁戸田\",\n        -12.086921691894531\n      ],\n      [\n        \"▁チキン\",\n        -12.087179183959961\n      ],\n      [\n        \"▁愛し\",\n        -12.087291717529297\n      ],\n      [\n        \"▁鉱\",\n        -12.08734130859375\n      ],\n      [\n        \"▁IoT\",\n        -12.087563514709473\n      ],\n      [\n        \"▁定額\",\n        -12.087646484375\n      ],\n      [\n        \"WE\",\n        -12.08765983581543\n      ],\n      [\n        \"翌日\",\n        -12.087724685668945\n      ],\n      [\n        \"1937\",\n        -12.087868690490723\n      ],\n      [\n        \"▁225\",\n        -12.08788013458252\n      ],\n      [\n        \"▁惨\",\n        -12.088119506835938\n      ],\n      [\n        \"さつ\",\n        -12.088189125061035\n      ],\n      [\n        \"シート\",\n        -12.08833122253418\n      ],\n      [\n        \"技術\",\n        -12.08837890625\n      ],\n      [\n        \"▁吉本\",\n        -12.088407516479492\n      ],\n      [\n        \"▁┃\",\n        -12.088601112365723\n      ],\n      [\n        \"▁棋士\",\n        -12.088611602783203\n      ],\n      [\n        \"▁ステイ\",\n        -12.088761329650879\n      ],\n      [\n        \"ーニャ\",\n        -12.088842391967773\n      ],\n      [\n        \"▁路上\",\n        -12.08886432647705\n      ],\n      [\n        \"ゐ\",\n        -12.089007377624512\n      ],\n      [\n        \"▁花嫁\",\n        -12.089019775390625\n      ],\n      [\n        \"▁本能\",\n        -12.089156150817871\n      ],\n      [\n        \"ano\",\n        -12.089159965515137\n      ],\n      [\n        \"▁厳密に\",\n        -12.089178085327148\n      ],\n      [\n        \"加害\",\n        -12.089727401733398\n      ],\n      [\n        \"尽\",\n        -12.089865684509277\n      ],\n      [\n        \"▁退学\",\n        -12.089876174926758\n      ],\n      [\n        \"▁沸\",\n        -12.089906692504883\n      ],\n      [\n        \"▁blue\",\n        -12.089934349060059\n      ],\n      [\n        \"ニオン\",\n        -12.089934349060059\n      ],\n      [\n        \"▁王妃\",\n        -12.089980125427246\n      ],\n      [\n        \"▁カロ\",\n        -12.090007781982422\n      ],\n      [\n        \"▁誘致\",\n        -12.09009075164795\n      ],\n      [\n        \"ぶら\",\n        -12.090156555175781\n      ],\n      [\n        \"藻\",\n        -12.09015941619873\n      ],\n      [\n        \"▁HPE\",\n        -12.090213775634766\n      ],\n      [\n        \"▁一宮\",\n        -12.090311050415039\n      ],\n      [\n        \"▁西口\",\n        -12.09032917022705\n      ],\n      [\n        \"隈\",\n        -12.090344429016113\n      ],\n      [\n        \"▁是\",\n        -12.090397834777832\n      ],\n      [\n        \"▁RS\",\n        -12.090413093566895\n      ],\n      [\n        \"▁we\",\n        -12.090433120727539\n      ],\n      [\n        \"▁招聘\",\n        -12.090500831604004\n      ],\n      [\n        \"▁口腔\",\n        -12.090608596801758\n      ],\n      [\n        \"▁ブス\",\n        -12.09067440032959\n      ],\n      [\n        \"▁欠場\",\n        -12.090686798095703\n      ],\n      [\n        \"▁花見\",\n        -12.090790748596191\n      ],\n      [\n        \"ドス\",\n        -12.090808868408203\n      ],\n      [\n        \"▁西川\",\n        -12.090887069702148\n      ],\n      [\n        \"▁ウラ\",\n        -12.090947151184082\n      ],\n      [\n        \"▁届\",\n        -12.090964317321777\n      ],\n      [\n        \"▁うまい\",\n        -12.091055870056152\n      ],\n      [\n        \"ハウゼン\",\n        -12.091094970703125\n      ],\n      [\n        \"line\",\n        -12.091160774230957\n      ],\n      [\n        \"▁特長\",\n        -12.091193199157715\n      ],\n      [\n        \"▁主観\",\n        -12.091194152832031\n      ],\n      [\n        \"▁代官\",\n        -12.091241836547852\n      ],\n      [\n        \"▁応える\",\n        -12.091524124145508\n      ],\n      [\n        \"▁頂\",\n        -12.091559410095215\n      ],\n      [\n        \"▁下水\",\n        -12.091660499572754\n      ],\n      [\n        \"▁135\",\n        -12.091803550720215\n      ],\n      [\n        \"LINE\",\n        -12.091848373413086\n      ],\n      [\n        \"婿\",\n        -12.09186840057373\n      ],\n      [\n        \"振り\",\n        -12.091883659362793\n      ],\n      [\n        \"▁ばかりで\",\n        -12.09190559387207\n      ],\n      [\n        \"▁歌謡\",\n        -12.092000961303711\n      ],\n      [\n        \"▁喫し\",\n        -12.092022895812988\n      ],\n      [\n        \"▁大社\",\n        -12.092062950134277\n      ],\n      [\n        \"▁検診\",\n        -12.09221076965332\n      ],\n      [\n        \"▁ワッペン\",\n        -12.092214584350586\n      ],\n      [\n        \"▁大変です\",\n        -12.092302322387695\n      ],\n      [\n        \"▁ツーリング\",\n        -12.092427253723145\n      ],\n      [\n        \"▁ジェフ\",\n        -12.092482566833496\n      ],\n      [\n        \"▁本気\",\n        -12.09253215789795\n      ],\n      [\n        \"▁儀\",\n        -12.092540740966797\n      ],\n      [\n        \"▁WordPress\",\n        -12.09254264831543\n      ],\n      [\n        \"▁裏切\",\n        -12.09254264831543\n      ],\n      [\n        \"孔\",\n        -12.092750549316406\n      ],\n      [\n        \"家庭\",\n        -12.092750549316406\n      ],\n      [\n        \"タニ\",\n        -12.092801094055176\n      ],\n      [\n        \"▁破棄\",\n        -12.092823028564453\n      ],\n      [\n        \"ノミ\",\n        -12.092859268188477\n      ],\n      [\n        \"▁勤め\",\n        -12.092985153198242\n      ],\n      [\n        \"▁それとも\",\n        -12.093066215515137\n      ],\n      [\n        \"ets\",\n        -12.093121528625488\n      ],\n      [\n        \"▁王室\",\n        -12.093131065368652\n      ],\n      [\n        \"▁厩舎\",\n        -12.09355354309082\n      ],\n      [\n        \"▁シールド\",\n        -12.093725204467773\n      ],\n      [\n        \"▁﻿\",\n        -12.093757629394531\n      ],\n      [\n        \"▁控えて\",\n        -12.093796730041504\n      ],\n      [\n        \"▁当てて\",\n        -12.093830108642578\n      ],\n      [\n        \"▁食卓\",\n        -12.093830108642578\n      ],\n      [\n        \"▁BEST\",\n        -12.09386157989502\n      ],\n      [\n        \"▁管制\",\n        -12.094076156616211\n      ],\n      [\n        \"大正\",\n        -12.094176292419434\n      ],\n      [\n        \"レンジ\",\n        -12.0942964553833\n      ],\n      [\n        \"AKA\",\n        -12.094367980957031\n      ],\n      [\n        \"苗\",\n        -12.094382286071777\n      ],\n      [\n        \"他方\",\n        -12.094511985778809\n      ],\n      [\n        \"▁寄稿\",\n        -12.094522476196289\n      ],\n      [\n        \"▁GK\",\n        -12.094551086425781\n      ],\n      [\n        \"個別\",\n        -12.094830513000488\n      ],\n      [\n        \"▁ネックレス\",\n        -12.094907760620117\n      ],\n      [\n        \"▁三郎\",\n        -12.094971656799316\n      ],\n      [\n        \"賃\",\n        -12.095020294189453\n      ],\n      [\n        \"▁語源\",\n        -12.095117568969727\n      ],\n      [\n        \"xy\",\n        -12.09548282623291\n      ],\n      [\n        \"▁菩薩\",\n        -12.095558166503906\n      ],\n      [\n        \"シナ\",\n        -12.095792770385742\n      ],\n      [\n        \"▁ドラゴンボール\",\n        -12.095802307128906\n      ],\n      [\n        \"tt\",\n        -12.095808029174805\n      ],\n      [\n        \"舷\",\n        -12.095874786376953\n      ],\n      [\n        \"▁政令\",\n        -12.095978736877441\n      ],\n      [\n        \"ze\",\n        -12.096040725708008\n      ],\n      [\n        \"▁あた\",\n        -12.096078872680664\n      ],\n      [\n        \"棺\",\n        -12.096086502075195\n      ],\n      [\n        \"▁安藤\",\n        -12.096144676208496\n      ],\n      [\n        \"ルム\",\n        -12.096208572387695\n      ],\n      [\n        \"創業\",\n        -12.096301078796387\n      ],\n      [\n        \"精神\",\n        -12.096352577209473\n      ],\n      [\n        \"函\",\n        -12.096380233764648\n      ],\n      [\n        \"ページ\",\n        -12.096571922302246\n      ],\n      [\n        \"衡\",\n        -12.096640586853027\n      ],\n      [\n        \"いん\",\n        -12.096670150756836\n      ],\n      [\n        \"ani\",\n        -12.096816062927246\n      ],\n      [\n        \"▁ウブロ\",\n        -12.09686279296875\n      ],\n      [\n        \"▁選べ\",\n        -12.096899032592773\n      ],\n      [\n        \"ü\",\n        -12.097064018249512\n      ],\n      [\n        \"▁ランナー\",\n        -12.097248077392578\n      ],\n      [\n        \"ナール\",\n        -12.097387313842773\n      ],\n      [\n        \"綿\",\n        -12.0975923538208\n      ],\n      [\n        \"ベース\",\n        -12.09760856628418\n      ],\n      [\n        \"▁猟\",\n        -12.097676277160645\n      ],\n      [\n        \"▁ファイバー\",\n        -12.097784042358398\n      ],\n      [\n        \"消費\",\n        -12.097799301147461\n      ],\n      [\n        \"▁陶\",\n        -12.098066329956055\n      ],\n      [\n        \"▁原田\",\n        -12.098132133483887\n      ],\n      [\n        \"▁リム\",\n        -12.098231315612793\n      ],\n      [\n        \"▁行進\",\n        -12.098246574401855\n      ],\n      [\n        \"▁ちゃんねる\",\n        -12.098414421081543\n      ],\n      [\n        \"マッチ\",\n        -12.098490715026855\n      ],\n      [\n        \"▁撤回\",\n        -12.098519325256348\n      ],\n      [\n        \"▁塊\",\n        -12.098546981811523\n      ],\n      [\n        \"▁傷つけ\",\n        -12.098560333251953\n      ],\n      [\n        \"▁邸宅\",\n        -12.098641395568848\n      ],\n      [\n        \"▁紙幣\",\n        -12.098686218261719\n      ],\n      [\n        \"▁国軍\",\n        -12.09900951385498\n      ],\n      [\n        \"▁癒さ\",\n        -12.099051475524902\n      ],\n      [\n        \"▁魅了\",\n        -12.099056243896484\n      ],\n      [\n        \"▁マインド\",\n        -12.09907054901123\n      ],\n      [\n        \"▁FI\",\n        -12.099135398864746\n      ],\n      [\n        \"▁320\",\n        -12.099197387695312\n      ],\n      [\n        \"▁スリ\",\n        -12.099241256713867\n      ],\n      [\n        \"ユニ\",\n        -12.099352836608887\n      ],\n      [\n        \"▁ソン\",\n        -12.099472045898438\n      ],\n      [\n        \"cy\",\n        -12.099624633789062\n      ],\n      [\n        \"▁動かして\",\n        -12.09965705871582\n      ],\n      [\n        \"▁日用\",\n        -12.099736213684082\n      ],\n      [\n        \"▁周知\",\n        -12.099858283996582\n      ],\n      [\n        \"▁バルト\",\n        -12.099878311157227\n      ],\n      [\n        \"▁かしら\",\n        -12.099912643432617\n      ],\n      [\n        \"▁楠\",\n        -12.100241661071777\n      ],\n      [\n        \"▁切ら\",\n        -12.100242614746094\n      ],\n      [\n        \"鷹\",\n        -12.10024642944336\n      ],\n      [\n        \"▁魏\",\n        -12.100446701049805\n      ],\n      [\n        \"▁上越\",\n        -12.100468635559082\n      ],\n      [\n        \"AF\",\n        -12.100818634033203\n      ],\n      [\n        \"▁ばあちゃん\",\n        -12.100852966308594\n      ],\n      [\n        \"▁ボクサー\",\n        -12.100933074951172\n      ],\n      [\n        \"宋\",\n        -12.101235389709473\n      ],\n      [\n        \"▁コンスタン\",\n        -12.101238250732422\n      ],\n      [\n        \"▁消えた\",\n        -12.101401329040527\n      ],\n      [\n        \"▁配線\",\n        -12.101462364196777\n      ],\n      [\n        \"▁コーラス\",\n        -12.101736068725586\n      ],\n      [\n        \"▁納品\",\n        -12.101956367492676\n      ],\n      [\n        \"▁フレッシュ\",\n        -12.102128982543945\n      ],\n      [\n        \"▁小型の\",\n        -12.102408409118652\n      ],\n      [\n        \"▁電撃\",\n        -12.102426528930664\n      ],\n      [\n        \"スペ\",\n        -12.102460861206055\n      ],\n      [\n        \"セラー\",\n        -12.102709770202637\n      ],\n      [\n        \"▁空白\",\n        -12.102723121643066\n      ],\n      [\n        \"▁Kindle\",\n        -12.102765083312988\n      ],\n      [\n        \"▁越後\",\n        -12.10282039642334\n      ],\n      [\n        \"▁いち早く\",\n        -12.102994918823242\n      ],\n      [\n        \"▁←\",\n        -12.103053092956543\n      ],\n      [\n        \"▁合間\",\n        -12.103249549865723\n      ],\n      [\n        \"oku\",\n        -12.103253364562988\n      ],\n      [\n        \"ื\",\n        -12.103297233581543\n      ],\n      [\n        \"▁シンガー\",\n        -12.103456497192383\n      ],\n      [\n        \"▁本音\",\n        -12.103697776794434\n      ],\n      [\n        \"pic\",\n        -12.10374641418457\n      ],\n      [\n        \"▁ノイ\",\n        -12.10374927520752\n      ],\n      [\n        \"▁欲望\",\n        -12.10374927520752\n      ],\n      [\n        \"Translate\",\n        -12.103890419006348\n      ],\n      [\n        \"ニシ\",\n        -12.104015350341797\n      ],\n      [\n        \"▁登り\",\n        -12.104571342468262\n      ],\n      [\n        \"eep\",\n        -12.10458755493164\n      ],\n      [\n        \"▁重症\",\n        -12.104615211486816\n      ],\n      [\n        \"▁慰安\",\n        -12.10489559173584\n      ],\n      [\n        \"▁繰り\",\n        -12.10492992401123\n      ],\n      [\n        \"▁春秋\",\n        -12.105203628540039\n      ],\n      [\n        \"▁セリエ\",\n        -12.105273246765137\n      ],\n      [\n        \"▁ナレーション\",\n        -12.105340003967285\n      ],\n      [\n        \"▁アンリ\",\n        -12.105342864990234\n      ],\n      [\n        \"▁不法\",\n        -12.105386734008789\n      ],\n      [\n        \"▁市南\",\n        -12.10539436340332\n      ],\n      [\n        \"▁承って\",\n        -12.105422019958496\n      ],\n      [\n        \"▁喫した\",\n        -12.105565071105957\n      ],\n      [\n        \"のり\",\n        -12.105903625488281\n      ],\n      [\n        \"▁送迎\",\n        -12.105981826782227\n      ],\n      [\n        \"エット\",\n        -12.106012344360352\n      ],\n      [\n        \"東北\",\n        -12.106289863586426\n      ],\n      [\n        \"ABJ\",\n        -12.106356620788574\n      ],\n      [\n        \"ボット\",\n        -12.106549263000488\n      ],\n      [\n        \"▁ファイト\",\n        -12.106698989868164\n      ],\n      [\n        \"▁うさぎ\",\n        -12.106709480285645\n      ],\n      [\n        \"▁筒\",\n        -12.107053756713867\n      ],\n      [\n        \"▁学期\",\n        -12.107057571411133\n      ],\n      [\n        \"▁リセット\",\n        -12.107086181640625\n      ],\n      [\n        \"▁苦情\",\n        -12.10713005065918\n      ],\n      [\n        \"▁En\",\n        -12.107182502746582\n      ],\n      [\n        \"▁彰\",\n        -12.107452392578125\n      ],\n      [\n        \"▁知り合った\",\n        -12.107457160949707\n      ],\n      [\n        \"マツ\",\n        -12.107491493225098\n      ],\n      [\n        \"▁ビビ\",\n        -12.107502937316895\n      ],\n      [\n        \"▁腎臓\",\n        -12.107675552368164\n      ],\n      [\n        \"▁効能\",\n        -12.107817649841309\n      ],\n      [\n        \"濱\",\n        -12.107882499694824\n      ],\n      [\n        \"ザール\",\n        -12.108014106750488\n      ],\n      [\n        \"ric\",\n        -12.108077049255371\n      ],\n      [\n        \"▁モットー\",\n        -12.108101844787598\n      ],\n      [\n        \"▁シャッター\",\n        -12.108238220214844\n      ],\n      [\n        \"▁7000\",\n        -12.108298301696777\n      ],\n      [\n        \"▁私的\",\n        -12.10831356048584\n      ],\n      [\n        \"▁活発\",\n        -12.108335494995117\n      ],\n      [\n        \"oshi\",\n        -12.108354568481445\n      ],\n      [\n        \"爾\",\n        -12.108419418334961\n      ],\n      [\n        \"バチ\",\n        -12.10843276977539\n      ],\n      [\n        \"▁駄目\",\n        -12.108527183532715\n      ],\n      [\n        \"▁誤って\",\n        -12.108682632446289\n      ],\n      [\n        \"▁家老\",\n        -12.108715057373047\n      ],\n      [\n        \"▁PE\",\n        -12.108819007873535\n      ],\n      [\n        \"▁たつ\",\n        -12.108856201171875\n      ],\n      [\n        \"▁えん\",\n        -12.108931541442871\n      ],\n      [\n        \"▁崖\",\n        -12.109217643737793\n      ],\n      [\n        \"▁アミ\",\n        -12.109271049499512\n      ],\n      [\n        \"ユキ\",\n        -12.109309196472168\n      ],\n      [\n        \"だったら\",\n        -12.109521865844727\n      ],\n      [\n        \"▁コリン\",\n        -12.1096830368042\n      ],\n      [\n        \"▁GPS\",\n        -12.109792709350586\n      ],\n      [\n        \"▁書物\",\n        -12.110057830810547\n      ],\n      [\n        \"沙汰\",\n        -12.110077857971191\n      ],\n      [\n        \"▁リオ\",\n        -12.110078811645508\n      ],\n      [\n        \"レール\",\n        -12.110222816467285\n      ],\n      [\n        \"▁ずれ\",\n        -12.11035442352295\n      ],\n      [\n        \"▁CLUB\",\n        -12.110355377197266\n      ],\n      [\n        \"▁こく\",\n        -12.110397338867188\n      ],\n      [\n        \"乗り\",\n        -12.110505104064941\n      ],\n      [\n        \"▁アロ\",\n        -12.11058235168457\n      ],\n      [\n        \"▁駿\",\n        -12.110602378845215\n      ],\n      [\n        \"▁ジョイ\",\n        -12.110627174377441\n      ],\n      [\n        \"▁怪\",\n        -12.110644340515137\n      ],\n      [\n        \"▁唄\",\n        -12.110648155212402\n      ],\n      [\n        \"複\",\n        -12.110807418823242\n      ],\n      [\n        \"▁かえって\",\n        -12.111015319824219\n      ],\n      [\n        \"▁崩\",\n        -12.111152648925781\n      ],\n      [\n        \"cer\",\n        -12.111194610595703\n      ],\n      [\n        \"▁フィットネス\",\n        -12.111358642578125\n      ],\n      [\n        \"▁クラーク\",\n        -12.111377716064453\n      ],\n      [\n        \"▁文房具\",\n        -12.111419677734375\n      ],\n      [\n        \"▁CT\",\n        -12.111461639404297\n      ],\n      [\n        \"壊\",\n        -12.111505508422852\n      ],\n      [\n        \"ワース\",\n        -12.111600875854492\n      ],\n      [\n        \"▁甚\",\n        -12.11168384552002\n      ],\n      [\n        \"▁鳥類\",\n        -12.111759185791016\n      ],\n      [\n        \"▁燃費\",\n        -12.111862182617188\n      ],\n      [\n        \"▁if\",\n        -12.112042427062988\n      ],\n      [\n        \"▁プロテスタン\",\n        -12.112171173095703\n      ],\n      [\n        \"▁高野\",\n        -12.112298011779785\n      ],\n      [\n        \"▁キャリー\",\n        -12.112318992614746\n      ],\n      [\n        \"偶\",\n        -12.11257553100586\n      ],\n      [\n        \"安全\",\n        -12.112592697143555\n      ],\n      [\n        \"▁隠して\",\n        -12.112787246704102\n      ],\n      [\n        \"1000\",\n        -12.112869262695312\n      ],\n      [\n        \"▁開けた\",\n        -12.113194465637207\n      ],\n      [\n        \"▁行けば\",\n        -12.113323211669922\n      ],\n      [\n        \"▁うつ病\",\n        -12.113373756408691\n      ],\n      [\n        \"レスト\",\n        -12.11337947845459\n      ],\n      [\n        \"1951\",\n        -12.11344051361084\n      ],\n      [\n        \"▁鍼灸\",\n        -12.113460540771484\n      ],\n      [\n        \"▁感性\",\n        -12.113624572753906\n      ],\n      [\n        \"▁任ぜ\",\n        -12.113707542419434\n      ],\n      [\n        \"ンベルク\",\n        -12.113751411437988\n      ],\n      [\n        \"▁任天堂\",\n        -12.113774299621582\n      ],\n      [\n        \"▁Plugin\",\n        -12.113890647888184\n      ],\n      [\n        \"▁提起\",\n        -12.113890647888184\n      ],\n      [\n        \"推\",\n        -12.114012718200684\n      ],\n      [\n        \"▁タマ\",\n        -12.114052772521973\n      ],\n      [\n        \"▁っけ\",\n        -12.114062309265137\n      ],\n      [\n        \"▁消失\",\n        -12.114119529724121\n      ],\n      [\n        \"gr\",\n        -12.114250183105469\n      ],\n      [\n        \"鹿児島\",\n        -12.114351272583008\n      ],\n      [\n        \"▁太夫\",\n        -12.114409446716309\n      ],\n      [\n        \"チャイ\",\n        -12.114449501037598\n      ],\n      [\n        \"テナ\",\n        -12.11445426940918\n      ],\n      [\n        \"拡\",\n        -12.114481925964355\n      ],\n      [\n        \"▁ブッシュ\",\n        -12.11452865600586\n      ],\n      [\n        \"理由\",\n        -12.114533424377441\n      ],\n      [\n        \"▁負けて\",\n        -12.114628791809082\n      ],\n      [\n        \"▁南端\",\n        -12.114744186401367\n      ],\n      [\n        \"▁於いて\",\n        -12.114795684814453\n      ],\n      [\n        \"▁僧侶\",\n        -12.114861488342285\n      ],\n      [\n        \"筒\",\n        -12.114933013916016\n      ],\n      [\n        \"駆\",\n        -12.114947319030762\n      ],\n      [\n        \"AA\",\n        -12.114995002746582\n      ],\n      [\n        \"枠\",\n        -12.115017890930176\n      ],\n      [\n        \"IV\",\n        -12.115123748779297\n      ],\n      [\n        \"van\",\n        -12.115132331848145\n      ],\n      [\n        \"っしゃ\",\n        -12.115169525146484\n      ],\n      [\n        \"▁ペルシア\",\n        -12.115354537963867\n      ],\n      [\n        \"▁摩擦\",\n        -12.115509033203125\n      ],\n      [\n        \"▁特攻\",\n        -12.11557674407959\n      ],\n      [\n        \"▁細か\",\n        -12.115578651428223\n      ],\n      [\n        \"▁慶応\",\n        -12.11568546295166\n      ],\n      [\n        \"▁返\",\n        -12.115686416625977\n      ],\n      [\n        \"▁断熱\",\n        -12.115937232971191\n      ],\n      [\n        \"▁工賃\",\n        -12.115955352783203\n      ],\n      [\n        \"双\",\n        -12.116034507751465\n      ],\n      [\n        \"▁強盗\",\n        -12.116191864013672\n      ],\n      [\n        \"住所\",\n        -12.116294860839844\n      ],\n      [\n        \"▁リバウンド\",\n        -12.11636734008789\n      ],\n      [\n        \"▁綺麗\",\n        -12.116415977478027\n      ],\n      [\n        \"▁家畜\",\n        -12.11650276184082\n      ],\n      [\n        \"▁別荘\",\n        -12.116652488708496\n      ],\n      [\n        \"▁おる\",\n        -12.117237091064453\n      ],\n      [\n        \"▁年数\",\n        -12.11741828918457\n      ],\n      [\n        \"▁DD\",\n        -12.117509841918945\n      ],\n      [\n        \"▁殻\",\n        -12.117589950561523\n      ],\n      [\n        \"▁Hi\",\n        -12.11763858795166\n      ],\n      [\n        \"▁1916\",\n        -12.117668151855469\n      ],\n      [\n        \"▁インストラクター\",\n        -12.117986679077148\n      ],\n      [\n        \"▁同じだ\",\n        -12.118046760559082\n      ],\n      [\n        \"▁拡充\",\n        -12.11830997467041\n      ],\n      [\n        \"▁ナポリ\",\n        -12.118361473083496\n      ],\n      [\n        \"▁迫って\",\n        -12.118413925170898\n      ],\n      [\n        \"▁換える\",\n        -12.118460655212402\n      ],\n      [\n        \"▁Is\",\n        -12.118463516235352\n      ],\n      [\n        \"タケ\",\n        -12.11852741241455\n      ],\n      [\n        \"▁調停\",\n        -12.118551254272461\n      ],\n      [\n        \"▁ピエール\",\n        -12.11860179901123\n      ],\n      [\n        \"▁テクノ\",\n        -12.11865520477295\n      ],\n      [\n        \"▁凄\",\n        -12.118712425231934\n      ],\n      [\n        \"▁単価\",\n        -12.118792533874512\n      ],\n      [\n        \"午後\",\n        -12.118871688842773\n      ],\n      [\n        \"帆\",\n        -12.119102478027344\n      ],\n      [\n        \"▁見事に\",\n        -12.119148254394531\n      ],\n      [\n        \"▁ネイティブ\",\n        -12.119185447692871\n      ],\n      [\n        \"撰\",\n        -12.119283676147461\n      ],\n      [\n        \"▁片手\",\n        -12.119333267211914\n      ],\n      [\n        \"Wiki\",\n        -12.119342803955078\n      ],\n      [\n        \"▁連発\",\n        -12.119376182556152\n      ],\n      [\n        \"▁カンボジア\",\n        -12.1194429397583\n      ],\n      [\n        \"▁増す\",\n        -12.119620323181152\n      ],\n      [\n        \"▁プロトコル\",\n        -12.119721412658691\n      ],\n      [\n        \"チオ\",\n        -12.11972427368164\n      ],\n      [\n        \"▁最善\",\n        -12.119887351989746\n      ],\n      [\n        \"同じく\",\n        -12.119909286499023\n      ],\n      [\n        \"`)\",\n        -12.120060920715332\n      ],\n      [\n        \"運動\",\n        -12.120138168334961\n      ],\n      [\n        \"ブラウザ\",\n        -12.120209693908691\n      ],\n      [\n        \"▁背番号\",\n        -12.120309829711914\n      ],\n      [\n        \"であろう\",\n        -12.1204252243042\n      ],\n      [\n        \"MAN\",\n        -12.120537757873535\n      ],\n      [\n        \"▁すみません\",\n        -12.120566368103027\n      ],\n      [\n        \"▁バナー\",\n        -12.120580673217773\n      ],\n      [\n        \"▁寄せて\",\n        -12.120744705200195\n      ],\n      [\n        \"oss\",\n        -12.120748519897461\n      ],\n      [\n        \"WC\",\n        -12.120800971984863\n      ],\n      [\n        \"▁水力\",\n        -12.120838165283203\n      ],\n      [\n        \"▁解き\",\n        -12.120861053466797\n      ],\n      [\n        \"▁一度に\",\n        -12.121021270751953\n      ],\n      [\n        \"住民\",\n        -12.121054649353027\n      ],\n      [\n        \"LY\",\n        -12.12108325958252\n      ],\n      [\n        \"▁色合い\",\n        -12.121136665344238\n      ],\n      [\n        \"py\",\n        -12.1212158203125\n      ],\n      [\n        \"国民\",\n        -12.121285438537598\n      ],\n      [\n        \"▁天王\",\n        -12.121333122253418\n      ],\n      [\n        \"▁ウォーズ\",\n        -12.121384620666504\n      ],\n      [\n        \"▁梅雨\",\n        -12.12186336517334\n      ],\n      [\n        \"TY\",\n        -12.12199592590332\n      ],\n      [\n        \"胆\",\n        -12.122089385986328\n      ],\n      [\n        \"ブラー\",\n        -12.122106552124023\n      ],\n      [\n        \"▁遮断\",\n        -12.12212085723877\n      ],\n      [\n        \"br\",\n        -12.12230110168457\n      ],\n      [\n        \"レコ\",\n        -12.122349739074707\n      ],\n      [\n        \"▁移し\",\n        -12.122596740722656\n      ],\n      [\n        \"祝\",\n        -12.12260913848877\n      ],\n      [\n        \"▁もったいない\",\n        -12.122641563415527\n      ],\n      [\n        \"太陽\",\n        -12.122840881347656\n      ],\n      [\n        \"▁水面\",\n        -12.122842788696289\n      ],\n      [\n        \"▁GL\",\n        -12.122952461242676\n      ],\n      [\n        \"▁貼って\",\n        -12.122967720031738\n      ],\n      [\n        \"▁追悼\",\n        -12.12297534942627\n      ],\n      [\n        \"▁完璧な\",\n        -12.123064041137695\n      ],\n      [\n        \"Tech\",\n        -12.123224258422852\n      ],\n      [\n        \"▁アンナ\",\n        -12.123358726501465\n      ],\n      [\n        \"▁減った\",\n        -12.123537063598633\n      ],\n      [\n        \"▁ルーファ\",\n        -12.123615264892578\n      ],\n      [\n        \"垂\",\n        -12.123678207397461\n      ],\n      [\n        \"▁賜り\",\n        -12.123703002929688\n      ],\n      [\n        \"▁到来\",\n        -12.123726844787598\n      ],\n      [\n        \"ANA\",\n        -12.123770713806152\n      ],\n      [\n        \"▁いちご\",\n        -12.123991966247559\n      ],\n      [\n        \"▁梶\",\n        -12.124005317687988\n      ],\n      [\n        \"▁蒸し\",\n        -12.124102592468262\n      ],\n      [\n        \"ロンドン\",\n        -12.124200820922852\n      ],\n      [\n        \"キル\",\n        -12.124242782592773\n      ],\n      [\n        \"▁浅野\",\n        -12.124296188354492\n      ],\n      [\n        \"▁SR\",\n        -12.12433910369873\n      ],\n      [\n        \"▁残存\",\n        -12.124412536621094\n      ],\n      [\n        \"vent\",\n        -12.124561309814453\n      ],\n      [\n        \"▁間に合わ\",\n        -12.124567985534668\n      ],\n      [\n        \"▁MHz\",\n        -12.12470531463623\n      ],\n      [\n        \"▁RC\",\n        -12.124762535095215\n      ],\n      [\n        \"▁すき\",\n        -12.124809265136719\n      ],\n      [\n        \"▁良好な\",\n        -12.124809265136719\n      ],\n      [\n        \"▁若く\",\n        -12.12484073638916\n      ],\n      [\n        \"nes\",\n        -12.12486743927002\n      ],\n      [\n        \"▁我が国\",\n        -12.124919891357422\n      ],\n      [\n        \"部屋\",\n        -12.124943733215332\n      ],\n      [\n        \"▁軍勢\",\n        -12.124953269958496\n      ],\n      [\n        \"あるいは\",\n        -12.125041007995605\n      ],\n      [\n        \"▁新刊\",\n        -12.125068664550781\n      ],\n      [\n        \"▁Data\",\n        -12.12513256072998\n      ],\n      [\n        \"▁ジャム\",\n        -12.125378608703613\n      ],\n      [\n        \"▁養護\",\n        -12.125395774841309\n      ],\n      [\n        \"▁在り\",\n        -12.125442504882812\n      ],\n      [\n        \"▁Word\",\n        -12.125455856323242\n      ],\n      [\n        \"▁店主\",\n        -12.125456809997559\n      ],\n      [\n        \"▁宮本\",\n        -12.125544548034668\n      ],\n      [\n        \"勉\",\n        -12.125667572021484\n      ],\n      [\n        \"▁館長\",\n        -12.125702857971191\n      ],\n      [\n        \"▁ウォーキング\",\n        -12.125718116760254\n      ],\n      [\n        \"▁湿\",\n        -12.126065254211426\n      ],\n      [\n        \"▁咲き\",\n        -12.12612247467041\n      ],\n      [\n        \"ぞく\",\n        -12.126130104064941\n      ],\n      [\n        \"▁まくり\",\n        -12.126152992248535\n      ],\n      [\n        \"▁誤差\",\n        -12.126167297363281\n      ],\n      [\n        \"▁耐性\",\n        -12.126261711120605\n      ],\n      [\n        \"非常に\",\n        -12.126364707946777\n      ],\n      [\n        \"鈴\",\n        -12.126452445983887\n      ],\n      [\n        \"▁連敗\",\n        -12.12649917602539\n      ],\n      [\n        \"▁和食\",\n        -12.126547813415527\n      ],\n      [\n        \"▁出会える\",\n        -12.12664794921875\n      ],\n      [\n        \"▁逢\",\n        -12.126664161682129\n      ],\n      [\n        \"郭\",\n        -12.12668228149414\n      ],\n      [\n        \"▁火星\",\n        -12.12686824798584\n      ],\n      [\n        \"誠\",\n        -12.12705135345459\n      ],\n      [\n        \"くも\",\n        -12.127269744873047\n      ],\n      [\n        \"▁若しくは\",\n        -12.127318382263184\n      ],\n      [\n        \"▁強め\",\n        -12.127425193786621\n      ],\n      [\n        \"▁訴えた\",\n        -12.127574920654297\n      ],\n      [\n        \"TM\",\n        -12.127639770507812\n      ],\n      [\n        \"▁アトリエ\",\n        -12.127886772155762\n      ],\n      [\n        \"▁擁立\",\n        -12.127972602844238\n      ],\n      [\n        \"知ら\",\n        -12.128107070922852\n      ],\n      [\n        \"▁出会え\",\n        -12.128193855285645\n      ],\n      [\n        \"物語\",\n        -12.128203392028809\n      ],\n      [\n        \"▁消去\",\n        -12.128307342529297\n      ],\n      [\n        \"▁引き出す\",\n        -12.12860107421875\n      ],\n      [\n        \"▁クラン\",\n        -12.128631591796875\n      ],\n      [\n        \"▁ザン\",\n        -12.128692626953125\n      ],\n      [\n        \"▁重要だ\",\n        -12.128908157348633\n      ],\n      [\n        \"ざわ\",\n        -12.128935813903809\n      ],\n      [\n        \"グー\",\n        -12.12903881072998\n      ],\n      [\n        \"▁製菓\",\n        -12.129043579101562\n      ],\n      [\n        \"▁原爆\",\n        -12.129066467285156\n      ],\n      [\n        \"権者\",\n        -12.12911319732666\n      ],\n      [\n        \"▁TOUR\",\n        -12.129196166992188\n      ],\n      [\n        \"▁唯\",\n        -12.129301071166992\n      ],\n      [\n        \"▁転落\",\n        -12.129384994506836\n      ],\n      [\n        \"▁井戸\",\n        -12.129470825195312\n      ],\n      [\n        \"ママ\",\n        -12.129495620727539\n      ],\n      [\n        \"▁煽\",\n        -12.129501342773438\n      ],\n      [\n        \"夕\",\n        -12.129509925842285\n      ],\n      [\n        \"▁マツダ\",\n        -12.129622459411621\n      ],\n      [\n        \"▁貴重\",\n        -12.129657745361328\n      ],\n      [\n        \"▁走ら\",\n        -12.129715919494629\n      ],\n      [\n        \"▁召\",\n        -12.129721641540527\n      ],\n      [\n        \"▁握り\",\n        -12.12983226776123\n      ],\n      [\n        \"▁トート\",\n        -12.129851341247559\n      ],\n      [\n        \"▁Fate\",\n        -12.129860877990723\n      ],\n      [\n        \"▁肺炎\",\n        -12.130075454711914\n      ],\n      [\n        \"▁検知\",\n        -12.130157470703125\n      ],\n      [\n        \"▁留ま\",\n        -12.130306243896484\n      ],\n      [\n        \"▁内田\",\n        -12.130342483520508\n      ],\n      [\n        \"▁施した\",\n        -12.130583763122559\n      ],\n      [\n        \"▁連想\",\n        -12.130841255187988\n      ],\n      [\n        \"▁爆破\",\n        -12.130959510803223\n      ],\n      [\n        \"▁全土\",\n        -12.130975723266602\n      ],\n      [\n        \"▁撃沈\",\n        -12.131148338317871\n      ],\n      [\n        \"▁8000\",\n        -12.13129997253418\n      ],\n      [\n        \"▁HA\",\n        -12.13159465789795\n      ],\n      [\n        \"▁Blue\",\n        -12.131611824035645\n      ],\n      [\n        \"▁ステレオ\",\n        -12.13161563873291\n      ],\n      [\n        \"▁エール\",\n        -12.131632804870605\n      ],\n      [\n        \"▁pr\",\n        -12.131698608398438\n      ],\n      [\n        \"ini\",\n        -12.131821632385254\n      ],\n      [\n        \"▁給食\",\n        -12.13203239440918\n      ],\n      [\n        \"BM\",\n        -12.132132530212402\n      ],\n      [\n        \"▁鎌\",\n        -12.13219928741455\n      ],\n      [\n        \"▁UFC\",\n        -12.132317543029785\n      ],\n      [\n        \"ors\",\n        -12.132582664489746\n      ],\n      [\n        \"▁おおむね\",\n        -12.133004188537598\n      ],\n      [\n        \"▁友情\",\n        -12.133056640625\n      ],\n      [\n        \"オブ\",\n        -12.133129119873047\n      ],\n      [\n        \"+\",\n        -12.13318920135498\n      ],\n      [\n        \"▁優れ\",\n        -12.133411407470703\n      ],\n      [\n        \"ブラック\",\n        -12.133447647094727\n      ],\n      [\n        \"ょう\",\n        -12.133591651916504\n      ],\n      [\n        \"▁æ\",\n        -12.133720397949219\n      ],\n      [\n        \"▁培\",\n        -12.133747100830078\n      ],\n      [\n        \"▁創始\",\n        -12.133792877197266\n      ],\n      [\n        \"▁テンポ\",\n        -12.133822441101074\n      ],\n      [\n        \"▁カラダ\",\n        -12.133829116821289\n      ],\n      [\n        \"▁収束\",\n        -12.133899688720703\n      ],\n      [\n        \"▁骨盤\",\n        -12.133962631225586\n      ],\n      [\n        \"▁隠れ\",\n        -12.134186744689941\n      ],\n      [\n        \"▁交戦\",\n        -12.134218215942383\n      ],\n      [\n        \"▁2500\",\n        -12.13426399230957\n      ],\n      [\n        \"▁レアル\",\n        -12.134295463562012\n      ],\n      [\n        \"▁ひろし\",\n        -12.13432788848877\n      ],\n      [\n        \"▁弥生\",\n        -12.1343412399292\n      ],\n      [\n        \"▁バンクーバー\",\n        -12.134346008300781\n      ],\n      [\n        \"▁大切だ\",\n        -12.134364128112793\n      ],\n      [\n        \"▁曽\",\n        -12.134414672851562\n      ],\n      [\n        \"▁経ち\",\n        -12.13448715209961\n      ],\n      [\n        \"▁炎上\",\n        -12.134495735168457\n      ],\n      [\n        \"▁感心\",\n        -12.134511947631836\n      ],\n      [\n        \"▁アーキテクチャ\",\n        -12.134539604187012\n      ],\n      [\n        \"たくさんの\",\n        -12.134584426879883\n      ],\n      [\n        \"▁捕\",\n        -12.134593963623047\n      ],\n      [\n        \"ケーション\",\n        -12.134685516357422\n      ],\n      [\n        \"▁Out\",\n        -12.134751319885254\n      ],\n      [\n        \"▁カウンセラー\",\n        -12.134869575500488\n      ],\n      [\n        \"フード\",\n        -12.134987831115723\n      ],\n      [\n        \"▁純粋な\",\n        -12.135003089904785\n      ],\n      [\n        \"▁ばら\",\n        -12.135160446166992\n      ],\n      [\n        \"▁リモコン\",\n        -12.135198593139648\n      ],\n      [\n        \"▁exe\",\n        -12.135202407836914\n      ],\n      [\n        \"▁新卒\",\n        -12.135223388671875\n      ],\n      [\n        \"▁BBC\",\n        -12.135320663452148\n      ],\n      [\n        \"▁欠陥\",\n        -12.13542366027832\n      ],\n      [\n        \"▁功労\",\n        -12.1354398727417\n      ],\n      [\n        \"▁品番\",\n        -12.135618209838867\n      ],\n      [\n        \"揚\",\n        -12.135652542114258\n      ],\n      [\n        \"▁労務\",\n        -12.135687828063965\n      ],\n      [\n        \"▁芯\",\n        -12.13583755493164\n      ],\n      [\n        \"タリー\",\n        -12.135909080505371\n      ],\n      [\n        \"ye\",\n        -12.135936737060547\n      ],\n      [\n        \"▁動態\",\n        -12.136452674865723\n      ],\n      [\n        \"▁結城\",\n        -12.136552810668945\n      ],\n      [\n        \"▁大抵\",\n        -12.136557579040527\n      ],\n      [\n        \"▁彫\",\n        -12.1366548538208\n      ],\n      [\n        \"▁トニー\",\n        -12.13668441772461\n      ],\n      [\n        \"▁酢\",\n        -12.13669204711914\n      ],\n      [\n        \"▁無くて\",\n        -12.136701583862305\n      ],\n      [\n        \"▁ホルダー\",\n        -12.13670539855957\n      ],\n      [\n        \"普通\",\n        -12.136774063110352\n      ],\n      [\n        \"▁長寿\",\n        -12.136883735656738\n      ],\n      [\n        \"先週\",\n        -12.136993408203125\n      ],\n      [\n        \"読み\",\n        -12.137117385864258\n      ],\n      [\n        \"▁桜井\",\n        -12.13720989227295\n      ],\n      [\n        \"▁イク\",\n        -12.137223243713379\n      ],\n      [\n        \"著書\",\n        -12.137271881103516\n      ],\n      [\n        \"▁土砂\",\n        -12.137277603149414\n      ],\n      [\n        \"gin\",\n        -12.137343406677246\n      ],\n      [\n        \"▁殺した\",\n        -12.137406349182129\n      ],\n      [\n        \"▁ヌー\",\n        -12.137430191040039\n      ],\n      [\n        \"身体\",\n        -12.137499809265137\n      ],\n      [\n        \"▁一例\",\n        -12.137713432312012\n      ],\n      [\n        \"げて\",\n        -12.13773250579834\n      ],\n      [\n        \"MB\",\n        -12.13785457611084\n      ],\n      [\n        \"コア\",\n        -12.137906074523926\n      ],\n      [\n        \"▁島田\",\n        -12.13796329498291\n      ],\n      [\n        \"▁NC\",\n        -12.137991905212402\n      ],\n      [\n        \"ぎり\",\n        -12.13800048828125\n      ],\n      [\n        \"DU\",\n        -12.138040542602539\n      ],\n      [\n        \"▁チーフ\",\n        -12.138063430786133\n      ],\n      [\n        \"cho\",\n        -12.138191223144531\n      ],\n      [\n        \"▁細部\",\n        -12.138266563415527\n      ],\n      [\n        \"▁PHP\",\n        -12.138294219970703\n      ],\n      [\n        \"リリース\",\n        -12.138405799865723\n      ],\n      [\n        \"▁イルミネーション\",\n        -12.138501167297363\n      ],\n      [\n        \"EF\",\n        -12.138517379760742\n      ],\n      [\n        \"▁パケット\",\n        -12.138605117797852\n      ],\n      [\n        \"▁์\",\n        -12.13872241973877\n      ],\n      [\n        \"▁臓器\",\n        -12.138832092285156\n      ],\n      [\n        \"▁カウ\",\n        -12.138859748840332\n      ],\n      [\n        \"ィー\",\n        -12.138919830322266\n      ],\n      [\n        \"▁屋上\",\n        -12.139094352722168\n      ],\n      [\n        \"▁リットル\",\n        -12.139165878295898\n      ],\n      [\n        \"▁垂れ\",\n        -12.139211654663086\n      ],\n      [\n        \"ナルド\",\n        -12.139227867126465\n      ],\n      [\n        \"求\",\n        -12.13924503326416\n      ],\n      [\n        \"▁寂しい\",\n        -12.139403343200684\n      ],\n      [\n        \"▁受取\",\n        -12.139557838439941\n      ],\n      [\n        \"▁パロディ\",\n        -12.139641761779785\n      ],\n      [\n        \"▁手掛けて\",\n        -12.139825820922852\n      ],\n      [\n        \"ever\",\n        -12.140000343322754\n      ],\n      [\n        \"斉\",\n        -12.14001178741455\n      ],\n      [\n        \"▁慣習\",\n        -12.140045166015625\n      ],\n      [\n        \"▁EN\",\n        -12.140241622924805\n      ],\n      [\n        \"▁片方\",\n        -12.140398025512695\n      ],\n      [\n        \"▁しりつ\",\n        -12.140450477600098\n      ],\n      [\n        \"▁アイアン\",\n        -12.140460014343262\n      ],\n      [\n        \"▁八戸\",\n        -12.140469551086426\n      ],\n      [\n        \"▁鬼滅の刃\",\n        -12.14059829711914\n      ],\n      [\n        \"▁経った\",\n        -12.140599250793457\n      ],\n      [\n        \"▁改築\",\n        -12.140629768371582\n      ],\n      [\n        \"▁帆\",\n        -12.14067268371582\n      ],\n      [\n        \"▁江戸川\",\n        -12.140685081481934\n      ],\n      [\n        \"▁絹\",\n        -12.140799522399902\n      ],\n      [\n        \"SB\",\n        -12.140802383422852\n      ],\n      [\n        \"▁粘\",\n        -12.140979766845703\n      ],\n      [\n        \"▁縄文\",\n        -12.140992164611816\n      ],\n      [\n        \"▁サプライズ\",\n        -12.141104698181152\n      ],\n      [\n        \"▁探せ\",\n        -12.141120910644531\n      ],\n      [\n        \"映像\",\n        -12.141207695007324\n      ],\n      [\n        \"▁略奪\",\n        -12.141271591186523\n      ],\n      [\n        \"患者\",\n        -12.141310691833496\n      ],\n      [\n        \"▁ブルック\",\n        -12.141340255737305\n      ],\n      [\n        \"▁考\",\n        -12.14149284362793\n      ],\n      [\n        \"▁1905\",\n        -12.14179801940918\n      ],\n      [\n        \"トール\",\n        -12.141828536987305\n      ],\n      [\n        \"▁const\",\n        -12.141853332519531\n      ],\n      [\n        \"▁駿河\",\n        -12.141956329345703\n      ],\n      [\n        \"ガニ\",\n        -12.142008781433105\n      ],\n      [\n        \"▁刺繍\",\n        -12.142036437988281\n      ],\n      [\n        \"DAM\",\n        -12.142074584960938\n      ],\n      [\n        \"タラ\",\n        -12.14230728149414\n      ],\n      [\n        \"▁勃起\",\n        -12.142367362976074\n      ],\n      [\n        \"▁ダメな\",\n        -12.1423921585083\n      ],\n      [\n        \"▁マフラー\",\n        -12.142699241638184\n      ],\n      [\n        \"▁イラ\",\n        -12.142709732055664\n      ],\n      [\n        \"▁凌\",\n        -12.142870903015137\n      ],\n      [\n        \"▁ギル\",\n        -12.142878532409668\n      ],\n      [\n        \"クリスマス\",\n        -12.1428804397583\n      ],\n      [\n        \"AE\",\n        -12.142936706542969\n      ],\n      [\n        \"▁出港\",\n        -12.143119812011719\n      ],\n      [\n        \"よい\",\n        -12.143159866333008\n      ],\n      [\n        \"こんばんは\",\n        -12.143253326416016\n      ],\n      [\n        \"▁同窓\",\n        -12.143281936645508\n      ],\n      [\n        \"官位\",\n        -12.143319129943848\n      ],\n      [\n        \"▁YOU\",\n        -12.143430709838867\n      ],\n      [\n        \"垢\",\n        -12.143444061279297\n      ],\n      [\n        \"▁どうやら\",\n        -12.143476486206055\n      ],\n      [\n        \"▁わずかな\",\n        -12.143819808959961\n      ],\n      [\n        \"▁であれ\",\n        -12.143843650817871\n      ],\n      [\n        \"▁お祭り\",\n        -12.143880844116211\n      ],\n      [\n        \"▁ヤリ\",\n        -12.143908500671387\n      ],\n      [\n        \"帰国\",\n        -12.143927574157715\n      ],\n      [\n        \"▁長袖\",\n        -12.143930435180664\n      ],\n      [\n        \"▁ようでした\",\n        -12.144379615783691\n      ],\n      [\n        \"▁スタイリング\",\n        -12.144414901733398\n      ],\n      [\n        \"▁共生\",\n        -12.14458179473877\n      ],\n      [\n        \"▁学芸\",\n        -12.14460563659668\n      ],\n      [\n        \"▁イチ\",\n        -12.144611358642578\n      ],\n      [\n        \"削\",\n        -12.144654273986816\n      ],\n      [\n        \"ML\",\n        -12.144757270812988\n      ],\n      [\n        \"▁宴会\",\n        -12.144805908203125\n      ],\n      [\n        \"っちり\",\n        -12.144806861877441\n      ],\n      [\n        \"▁ホース\",\n        -12.14488410949707\n      ],\n      [\n        \"シャツ\",\n        -12.144911766052246\n      ],\n      [\n        \"▁こなして\",\n        -12.145100593566895\n      ],\n      [\n        \"▁親善\",\n        -12.145208358764648\n      ],\n      [\n        \"メーカー\",\n        -12.145281791687012\n      ],\n      [\n        \"▁思い出して\",\n        -12.14543342590332\n      ],\n      [\n        \"メガ\",\n        -12.145540237426758\n      ],\n      [\n        \"小さな\",\n        -12.14554214477539\n      ],\n      [\n        \"ヲ\",\n        -12.145654678344727\n      ],\n      [\n        \"pedia\",\n        -12.145759582519531\n      ],\n      [\n        \"▁刺し\",\n        -12.145822525024414\n      ],\n      [\n        \"単行本\",\n        -12.145875930786133\n      ],\n      [\n        \"▁スチール\",\n        -12.146137237548828\n      ],\n      [\n        \"▁メカ\",\n        -12.146194458007812\n      ],\n      [\n        \"▁逃\",\n        -12.146207809448242\n      ],\n      [\n        \"▁建てた\",\n        -12.146256446838379\n      ],\n      [\n        \"▁危\",\n        -12.146257400512695\n      ],\n      [\n        \"▁遂に\",\n        -12.1463623046875\n      ],\n      [\n        \"峯\",\n        -12.146470069885254\n      ],\n      [\n        \"当該\",\n        -12.14647102355957\n      ],\n      [\n        \"▁1,500\",\n        -12.146472930908203\n      ],\n      [\n        \"▁当院\",\n        -12.146574020385742\n      ],\n      [\n        \"OWN\",\n        -12.146796226501465\n      ],\n      [\n        \"▁シャネル\",\n        -12.146883010864258\n      ],\n      [\n        \"ナビ\",\n        -12.146913528442383\n      ],\n      [\n        \"▁不可能な\",\n        -12.146944999694824\n      ],\n      [\n        \"▁テイラー\",\n        -12.146968841552734\n      ],\n      [\n        \"▁ヴィー\",\n        -12.147130012512207\n      ],\n      [\n        \"菊\",\n        -12.14730167388916\n      ],\n      [\n        \"▁公布\",\n        -12.147319793701172\n      ],\n      [\n        \"▁ウォル\",\n        -12.147416114807129\n      ],\n      [\n        \"▁薬品\",\n        -12.147449493408203\n      ],\n      [\n        \"▁正統\",\n        -12.14774227142334\n      ],\n      [\n        \"▁駆除\",\n        -12.147815704345703\n      ],\n      [\n        \"▁誘惑\",\n        -12.147826194763184\n      ],\n      [\n        \"enn\",\n        -12.148323059082031\n      ],\n      [\n        \"▁ヴィトン\",\n        -12.148341178894043\n      ],\n      [\n        \"靴\",\n        -12.148341178894043\n      ],\n      [\n        \"▁西暦\",\n        -12.148370742797852\n      ],\n      [\n        \"ショナル\",\n        -12.148395538330078\n      ],\n      [\n        \"主演\",\n        -12.148398399353027\n      ],\n      [\n        \"▁106\",\n        -12.14842700958252\n      ],\n      [\n        \"▁AWS\",\n        -12.14852237701416\n      ],\n      [\n        \"羊\",\n        -12.148548126220703\n      ],\n      [\n        \"傘\",\n        -12.148591995239258\n      ],\n      [\n        \"VER\",\n        -12.148700714111328\n      ],\n      [\n        \"ヂ\",\n        -12.14880657196045\n      ],\n      [\n        \"▁誘拐\",\n        -12.148807525634766\n      ],\n      [\n        \"▁優待\",\n        -12.148836135864258\n      ],\n      [\n        \"▁蜂起\",\n        -12.148940086364746\n      ],\n      [\n        \"妊娠\",\n        -12.149014472961426\n      ],\n      [\n        \"▁2201\",\n        -12.149121284484863\n      ],\n      [\n        \"▁受給\",\n        -12.149215698242188\n      ],\n      [\n        \"▁宮内\",\n        -12.149375915527344\n      ],\n      [\n        \"▁知見\",\n        -12.149425506591797\n      ],\n      [\n        \"▁蕎麦\",\n        -12.14947509765625\n      ],\n      [\n        \"▁ビートルズ\",\n        -12.149598121643066\n      ],\n      [\n        \"柴\",\n        -12.149701118469238\n      ],\n      [\n        \"督\",\n        -12.149896621704102\n      ],\n      [\n        \"▁木曜\",\n        -12.149944305419922\n      ],\n      [\n        \"慢\",\n        -12.149950981140137\n      ],\n      [\n        \"▁過度\",\n        -12.150123596191406\n      ],\n      [\n        \"▁見つかって\",\n        -12.150158882141113\n      ],\n      [\n        \"ボディ\",\n        -12.150235176086426\n      ],\n      [\n        \"欧\",\n        -12.150405883789062\n      ],\n      [\n        \"▁独り\",\n        -12.150455474853516\n      ],\n      [\n        \"▁650\",\n        -12.150481224060059\n      ],\n      [\n        \"▁クリスティ\",\n        -12.150589942932129\n      ],\n      [\n        \"avi\",\n        -12.150629043579102\n      ],\n      [\n        \"▁束\",\n        -12.150768280029297\n      ],\n      [\n        \"▁駐在\",\n        -12.150853157043457\n      ],\n      [\n        \"ASS\",\n        -12.15097713470459\n      ],\n      [\n        \"▁駆けつけ\",\n        -12.151288032531738\n      ],\n      [\n        \"ぶつ\",\n        -12.15138053894043\n      ],\n      [\n        \"board\",\n        -12.151412963867188\n      ],\n      [\n        \"▁156\",\n        -12.151434898376465\n      ],\n      [\n        \"▁再興\",\n        -12.151609420776367\n      ],\n      [\n        \"▁水族\",\n        -12.151782035827637\n      ],\n      [\n        \"韻\",\n        -12.151786804199219\n      ],\n      [\n        \"ヤシ\",\n        -12.151957511901855\n      ],\n      [\n        \"▁地裁\",\n        -12.151971817016602\n      ],\n      [\n        \"巡\",\n        -12.152050971984863\n      ],\n      [\n        \"▁委ね\",\n        -12.152092933654785\n      ],\n      [\n        \"▁切れて\",\n        -12.152132034301758\n      ],\n      [\n        \"▁有馬\",\n        -12.15213394165039\n      ],\n      [\n        \"▁ホン\",\n        -12.152229309082031\n      ],\n      [\n        \"▁ゆめ\",\n        -12.152255058288574\n      ],\n      [\n        \"▁緑地\",\n        -12.15227222442627\n      ],\n      [\n        \"焚\",\n        -12.152377128601074\n      ],\n      [\n        \"tel\",\n        -12.152405738830566\n      ],\n      [\n        \"▁貯蔵\",\n        -12.152520179748535\n      ],\n      [\n        \"▁マート\",\n        -12.152742385864258\n      ],\n      [\n        \"であって\",\n        -12.152778625488281\n      ],\n      [\n        \"浴\",\n        -12.15278148651123\n      ],\n      [\n        \"▁宣告\",\n        -12.152856826782227\n      ],\n      [\n        \"▁直樹\",\n        -12.15292739868164\n      ],\n      [\n        \"▁先駆\",\n        -12.152935028076172\n      ],\n      [\n        \"▁新車\",\n        -12.152942657470703\n      ],\n      [\n        \"▁賞賛\",\n        -12.152958869934082\n      ],\n      [\n        \"▁申し訳ない\",\n        -12.153027534484863\n      ],\n      [\n        \"▁動かし\",\n        -12.153141021728516\n      ],\n      [\n        \"▁アトランタ\",\n        -12.15327262878418\n      ],\n      [\n        \"▁させた\",\n        -12.153304100036621\n      ],\n      [\n        \"▁補完\",\n        -12.153400421142578\n      ],\n      [\n        \"レーン\",\n        -12.153472900390625\n      ],\n      [\n        \"▁cat\",\n        -12.153542518615723\n      ],\n      [\n        \"トゥル\",\n        -12.153594970703125\n      ],\n      [\n        \"▁さほど\",\n        -12.153669357299805\n      ],\n      [\n        \"▁称賛\",\n        -12.153719902038574\n      ],\n      [\n        \"▁就いた\",\n        -12.153779029846191\n      ],\n      [\n        \"▁スレッド\",\n        -12.153922080993652\n      ],\n      [\n        \"ナリ\",\n        -12.153928756713867\n      ],\n      [\n        \"ピース\",\n        -12.153975486755371\n      ],\n      [\n        \"▁テンション\",\n        -12.15400505065918\n      ],\n      [\n        \"▁上方\",\n        -12.15412712097168\n      ],\n      [\n        \"潟\",\n        -12.154278755187988\n      ],\n      [\n        \"▁瞑想\",\n        -12.154279708862305\n      ],\n      [\n        \"KK\",\n        -12.1544828414917\n      ],\n      [\n        \"▁小樽\",\n        -12.154483795166016\n      ],\n      [\n        \"▁回す\",\n        -12.15458869934082\n      ],\n      [\n        \"▁制圧\",\n        -12.15461540222168\n      ],\n      [\n        \"▁取り出し\",\n        -12.154812812805176\n      ],\n      [\n        \"▁つながった\",\n        -12.154953002929688\n      ],\n      [\n        \"幣\",\n        -12.155112266540527\n      ],\n      [\n        \"安心\",\n        -12.15514087677002\n      ],\n      [\n        \"ハリ\",\n        -12.155216217041016\n      ],\n      [\n        \"ons\",\n        -12.155608177185059\n      ],\n      [\n        \"▁冷房\",\n        -12.155681610107422\n      ],\n      [\n        \"▁もらえた\",\n        -12.15571117401123\n      ],\n      [\n        \"▁京浜\",\n        -12.155769348144531\n      ],\n      [\n        \"▁泣いて\",\n        -12.155850410461426\n      ],\n      [\n        \"1936\",\n        -12.155937194824219\n      ],\n      [\n        \"▁櫻井\",\n        -12.156074523925781\n      ],\n      [\n        \"▁有名に\",\n        -12.156146049499512\n      ],\n      [\n        \"▁隠居\",\n        -12.15623950958252\n      ],\n      [\n        \"itch\",\n        -12.156294822692871\n      ],\n      [\n        \"▁見舞い\",\n        -12.15629768371582\n      ],\n      [\n        \"▁ベネ\",\n        -12.156351089477539\n      ],\n      [\n        \"▁ミャンマー\",\n        -12.156445503234863\n      ],\n      [\n        \"▁上達\",\n        -12.156484603881836\n      ],\n      [\n        \"メンズ\",\n        -12.156487464904785\n      ],\n      [\n        \"ボラ\",\n        -12.15662956237793\n      ],\n      [\n        \"▁久保\",\n        -12.156712532043457\n      ],\n      [\n        \"ther\",\n        -12.156726837158203\n      ],\n      [\n        \"▁釧路\",\n        -12.156746864318848\n      ],\n      [\n        \"▁本町\",\n        -12.156810760498047\n      ],\n      [\n        \"アーノ\",\n        -12.156843185424805\n      ],\n      [\n        \"▁大事だ\",\n        -12.15684986114502\n      ],\n      [\n        \"▁近辺\",\n        -12.156976699829102\n      ],\n      [\n        \"р\",\n        -12.157081604003906\n      ],\n      [\n        \"▁大変だ\",\n        -12.157159805297852\n      ],\n      [\n        \"▁参事\",\n        -12.157241821289062\n      ],\n      [\n        \"跳\",\n        -12.157307624816895\n      ],\n      [\n        \"▁倭\",\n        -12.157312393188477\n      ],\n      [\n        \"light\",\n        -12.157320022583008\n      ],\n      [\n        \"ーゲン\",\n        -12.157413482666016\n      ],\n      [\n        \"LK\",\n        -12.157584190368652\n      ],\n      [\n        \"▁デュー\",\n        -12.157598495483398\n      ],\n      [\n        \"▁溢れ\",\n        -12.157657623291016\n      ],\n      [\n        \"rain\",\n        -12.15777587890625\n      ],\n      [\n        \"▁置換\",\n        -12.15788745880127\n      ],\n      [\n        \"予め\",\n        -12.157983779907227\n      ],\n      [\n        \"隅\",\n        -12.158011436462402\n      ],\n      [\n        \"▁ロウ\",\n        -12.158080101013184\n      ],\n      [\n        \"▁面倒な\",\n        -12.158241271972656\n      ],\n      [\n        \"▁水野\",\n        -12.158246994018555\n      ],\n      [\n        \"▁中枢\",\n        -12.158312797546387\n      ],\n      [\n        \"▁っぱなし\",\n        -12.158320426940918\n      ],\n      [\n        \"▁アシ\",\n        -12.158346176147461\n      ],\n      [\n        \"▁懸\",\n        -12.158348083496094\n      ],\n      [\n        \"▁修繕\",\n        -12.158552169799805\n      ],\n      [\n        \"▁石器\",\n        -12.15870475769043\n      ],\n      [\n        \"▁mod\",\n        -12.158842086791992\n      ],\n      [\n        \"▁AGA\",\n        -12.158856391906738\n      ],\n      [\n        \"▁振り返り\",\n        -12.15888500213623\n      ],\n      [\n        \"ぺ\",\n        -12.159140586853027\n      ],\n      [\n        \"▁諦めて\",\n        -12.159271240234375\n      ],\n      [\n        \"請\",\n        -12.159282684326172\n      ],\n      [\n        \"ism\",\n        -12.159299850463867\n      ],\n      [\n        \"1938\",\n        -12.159309387207031\n      ],\n      [\n        \"▁time\",\n        -12.159335136413574\n      ],\n      [\n        \"明け\",\n        -12.15938949584961\n      ],\n      [\n        \"▁開封\",\n        -12.15941047668457\n      ],\n      [\n        \"▁ことば\",\n        -12.159467697143555\n      ],\n      [\n        \"▁すい\",\n        -12.15960693359375\n      ],\n      [\n        \"▁テナント\",\n        -12.159711837768555\n      ],\n      [\n        \"▁散策\",\n        -12.159717559814453\n      ],\n      [\n        \"▁マスコット\",\n        -12.159754753112793\n      ],\n      [\n        \"ont\",\n        -12.15981388092041\n      ],\n      [\n        \"▁￣\",\n        -12.160063743591309\n      ],\n      [\n        \"▁急いで\",\n        -12.160083770751953\n      ],\n      [\n        \"▁どうでも\",\n        -12.160116195678711\n      ],\n      [\n        \"▁当たった\",\n        -12.160148620605469\n      ],\n      [\n        \"▁戦記\",\n        -12.160237312316895\n      ],\n      [\n        \"▁辞めて\",\n        -12.160237312316895\n      ],\n      [\n        \"▁固ま\",\n        -12.160239219665527\n      ],\n      [\n        \"▁座標\",\n        -12.160534858703613\n      ],\n      [\n        \"求人\",\n        -12.160651206970215\n      ],\n      [\n        \"▁マンチェスター\",\n        -12.160797119140625\n      ],\n      [\n        \"▁絡み\",\n        -12.160799026489258\n      ],\n      [\n        \"FO\",\n        -12.160809516906738\n      ],\n      [\n        \"▁点在\",\n        -12.160873413085938\n      ],\n      [\n        \"▁移す\",\n        -12.161124229431152\n      ],\n      [\n        \"▁日刊\",\n        -12.161269187927246\n      ],\n      [\n        \"トム\",\n        -12.161279678344727\n      ],\n      [\n        \"伊那\",\n        -12.161355972290039\n      ],\n      [\n        \"▁航\",\n        -12.161394119262695\n      ],\n      [\n        \"▁当駅\",\n        -12.16144847869873\n      ],\n      [\n        \"▁肥満\",\n        -12.161494255065918\n      ],\n      [\n        \"▁位相\",\n        -12.161626815795898\n      ],\n      [\n        \"▁焼酎\",\n        -12.161813735961914\n      ],\n      [\n        \"▁適正な\",\n        -12.161849021911621\n      ],\n      [\n        \"いろ\",\n        -12.161918640136719\n      ],\n      [\n        \"▁アルメニア\",\n        -12.161925315856934\n      ],\n      [\n        \"薩\",\n        -12.162151336669922\n      ],\n      [\n        \"▁JN\",\n        -12.16215705871582\n      ],\n      [\n        \"▁強豪\",\n        -12.162243843078613\n      ],\n      [\n        \"霧\",\n        -12.162589073181152\n      ],\n      [\n        \"▁裏付け\",\n        -12.162632942199707\n      ],\n      [\n        \"▁召喚\",\n        -12.162830352783203\n      ],\n      [\n        \"ries\",\n        -12.162934303283691\n      ],\n      [\n        \"▁カンファレンス\",\n        -12.163166999816895\n      ],\n      [\n        \"▁馬車\",\n        -12.163189888000488\n      ],\n      [\n        \"▁稲荷\",\n        -12.163204193115234\n      ],\n      [\n        \"▁ハイパー\",\n        -12.163214683532715\n      ],\n      [\n        \"▁起こさ\",\n        -12.163311958312988\n      ],\n      [\n        \"▁マカ\",\n        -12.163594245910645\n      ],\n      [\n        \"н\",\n        -12.163844108581543\n      ],\n      [\n        \"▁迄\",\n        -12.164067268371582\n      ],\n      [\n        \"▁ヒート\",\n        -12.164068222045898\n      ],\n      [\n        \"辰\",\n        -12.1641845703125\n      ],\n      [\n        \"▁葛飾\",\n        -12.164190292358398\n      ],\n      [\n        \"▁隔離\",\n        -12.164205551147461\n      ],\n      [\n        \"▁人質\",\n        -12.16423225402832\n      ],\n      [\n        \"リアル\",\n        -12.164261817932129\n      ],\n      [\n        \"▁硫黄\",\n        -12.164298057556152\n      ],\n      [\n        \"▁漏洩\",\n        -12.164299011230469\n      ],\n      [\n        \"▁王女\",\n        -12.164320945739746\n      ],\n      [\n        \"▁完売\",\n        -12.16434097290039\n      ],\n      [\n        \"楼\",\n        -12.164448738098145\n      ],\n      [\n        \"▁岩田\",\n        -12.16454029083252\n      ],\n      [\n        \"▁奪う\",\n        -12.164575576782227\n      ],\n      [\n        \"▁意外に\",\n        -12.164604187011719\n      ],\n      [\n        \"iko\",\n        -12.164607048034668\n      ],\n      [\n        \"大変\",\n        -12.164658546447754\n      ],\n      [\n        \"▁ファル\",\n        -12.164731979370117\n      ],\n      [\n        \"▁Cr\",\n        -12.164835929870605\n      ],\n      [\n        \"▁対空\",\n        -12.164850234985352\n      ],\n      [\n        \"ニズム\",\n        -12.164891242980957\n      ],\n      [\n        \"▁隠す\",\n        -12.164941787719727\n      ],\n      [\n        \"▁やん\",\n        -12.164956092834473\n      ],\n      [\n        \"▁便宜\",\n        -12.165010452270508\n      ],\n      [\n        \"▁ā\",\n        -12.16512680053711\n      ],\n      [\n        \"▁きわめて\",\n        -12.165203094482422\n      ],\n      [\n        \"箕\",\n        -12.165203094482422\n      ],\n      [\n        \"▁いっぱいに\",\n        -12.16525650024414\n      ],\n      [\n        \"▁垂\",\n        -12.165261268615723\n      ],\n      [\n        \"▁ピックアップ\",\n        -12.16556167602539\n      ],\n      [\n        \"▁水槽\",\n        -12.165672302246094\n      ],\n      [\n        \"▁整数\",\n        -12.165886878967285\n      ],\n      [\n        \"▁発熱\",\n        -12.165912628173828\n      ],\n      [\n        \"▁地味\",\n        -12.16600227355957\n      ],\n      [\n        \"▁納期\",\n        -12.166285514831543\n      ],\n      [\n        \"グン\",\n        -12.166329383850098\n      ],\n      [\n        \"日々\",\n        -12.166555404663086\n      ],\n      [\n        \"▁作物\",\n        -12.166655540466309\n      ],\n      [\n        \"▁贅沢\",\n        -12.166891098022461\n      ],\n      [\n        \"▁制裁\",\n        -12.167006492614746\n      ],\n      [\n        \"リブ\",\n        -12.167040824890137\n      ],\n      [\n        \"兼\",\n        -12.167122840881348\n      ],\n      [\n        \"▁封印\",\n        -12.167145729064941\n      ],\n      [\n        \"▁鑑\",\n        -12.167163848876953\n      ],\n      [\n        \"グラー\",\n        -12.167292594909668\n      ],\n      [\n        \"アート\",\n        -12.167304992675781\n      ],\n      [\n        \"▁稼げ\",\n        -12.167319297790527\n      ],\n      [\n        \"▁ピアス\",\n        -12.167363166809082\n      ],\n      [\n        \"▁Ph\",\n        -12.1676664352417\n      ],\n      [\n        \"▁真空\",\n        -12.16768741607666\n      ],\n      [\n        \"▁中高\",\n        -12.167716979980469\n      ],\n      [\n        \"▁飲酒\",\n        -12.167811393737793\n      ],\n      [\n        \"なかなか\",\n        -12.167860984802246\n      ],\n      [\n        \"▁伝記\",\n        -12.16787052154541\n      ],\n      [\n        \"▁麓\",\n        -12.16787338256836\n      ],\n      [\n        \"▁抹消\",\n        -12.167924880981445\n      ],\n      [\n        \"フロ\",\n        -12.167947769165039\n      ],\n      [\n        \"そのまま\",\n        -12.16795539855957\n      ],\n      [\n        \"▁リターン\",\n        -12.168011665344238\n      ],\n      [\n        \"▁今井\",\n        -12.168023109436035\n      ],\n      [\n        \"クール\",\n        -12.168024063110352\n      ],\n      [\n        \"▁チア\",\n        -12.168197631835938\n      ],\n      [\n        \"▁安政\",\n        -12.168340682983398\n      ],\n      [\n        \"ゲイン\",\n        -12.168437957763672\n      ],\n      [\n        \"▁執政\",\n        -12.168638229370117\n      ],\n      [\n        \"▁捕食\",\n        -12.168780326843262\n      ],\n      [\n        \"▁重宝\",\n        -12.168912887573242\n      ],\n      [\n        \"パート\",\n        -12.169159889221191\n      ],\n      [\n        \"腔\",\n        -12.169172286987305\n      ],\n      [\n        \"▁論じ\",\n        -12.169384002685547\n      ],\n      [\n        \"▁ゴル\",\n        -12.169391632080078\n      ],\n      [\n        \"OK\",\n        -12.169417381286621\n      ],\n      [\n        \"▁相関\",\n        -12.169432640075684\n      ],\n      [\n        \"独立\",\n        -12.169530868530273\n      ],\n      [\n        \"▁就役\",\n        -12.169563293457031\n      ],\n      [\n        \"▁155\",\n        -12.16960620880127\n      ],\n      [\n        \"▁抜いた\",\n        -12.169686317443848\n      ],\n      [\n        \"▁ひかり\",\n        -12.169795989990234\n      ],\n      [\n        \"▁迫力\",\n        -12.169838905334473\n      ],\n      [\n        \"▁浅い\",\n        -12.169840812683105\n      ],\n      [\n        \"▁アグ\",\n        -12.169920921325684\n      ],\n      [\n        \"ぜん\",\n        -12.16999626159668\n      ],\n      [\n        \"▁中傷\",\n        -12.170069694519043\n      ],\n      [\n        \"▁微妙な\",\n        -12.170076370239258\n      ],\n      [\n        \"▁濃く\",\n        -12.170294761657715\n      ],\n      [\n        \"▁今や\",\n        -12.170299530029297\n      ],\n      [\n        \"▁ファミ\",\n        -12.170320510864258\n      ],\n      [\n        \"▁高騰\",\n        -12.170361518859863\n      ],\n      [\n        \"麺\",\n        -12.170382499694824\n      ],\n      [\n        \"▁侯\",\n        -12.17038345336914\n      ],\n      [\n        \"原因\",\n        -12.17041015625\n      ],\n      [\n        \"▁チョイス\",\n        -12.170567512512207\n      ],\n      [\n        \"▁ダイナミック\",\n        -12.170772552490234\n      ],\n      [\n        \"▁123\",\n        -12.170891761779785\n      ],\n      [\n        \"旅行\",\n        -12.170991897583008\n      ],\n      [\n        \"formul\",\n        -12.171051025390625\n      ],\n      [\n        \"▁新鮮\",\n        -12.17105770111084\n      ],\n      [\n        \"EAR\",\n        -12.171157836914062\n      ],\n      [\n        \"▁Intel\",\n        -12.171371459960938\n      ],\n      [\n        \"▁括弧\",\n        -12.17152214050293\n      ],\n      [\n        \"▁遊べる\",\n        -12.171819686889648\n      ],\n      [\n        \"頻\",\n        -12.172019958496094\n      ],\n      [\n        \"▁ふう\",\n        -12.172067642211914\n      ],\n      [\n        \"▁メディ\",\n        -12.172134399414062\n      ],\n      [\n        \"▁ぺ\",\n        -12.172138214111328\n      ],\n      [\n        \"▁千代\",\n        -12.1721773147583\n      ],\n      [\n        \"▁大河\",\n        -12.172224044799805\n      ],\n      [\n        \"▁俳句\",\n        -12.172248840332031\n      ],\n      [\n        \"▁身近に\",\n        -12.172362327575684\n      ],\n      [\n        \"▁ヌード\",\n        -12.172392845153809\n      ],\n      [\n        \"KE\",\n        -12.172403335571289\n      ],\n      [\n        \"8,000\",\n        -12.172446250915527\n      ],\n      [\n        \"▁ワット\",\n        -12.17248821258545\n      ],\n      [\n        \"妃\",\n        -12.172539710998535\n      ],\n      [\n        \"▁AFC\",\n        -12.172576904296875\n      ],\n      [\n        \"▁グー\",\n        -12.172598838806152\n      ],\n      [\n        \"▁トリック\",\n        -12.1726713180542\n      ],\n      [\n        \"壺\",\n        -12.172704696655273\n      ],\n      [\n        \"▁授け\",\n        -12.172739028930664\n      ],\n      [\n        \"曾\",\n        -12.172819137573242\n      ],\n      [\n        \"▁常磐\",\n        -12.172948837280273\n      ],\n      [\n        \"▁和平\",\n        -12.172985076904297\n      ],\n      [\n        \"▁みなみ\",\n        -12.172999382019043\n      ],\n      [\n        \"遠方\",\n        -12.17327880859375\n      ],\n      [\n        \"臓\",\n        -12.17343521118164\n      ],\n      [\n        \"遅\",\n        -12.173460006713867\n      ],\n      [\n        \"▁秘密の\",\n        -12.173503875732422\n      ],\n      [\n        \"▁Ab\",\n        -12.173523902893066\n      ],\n      [\n        \"▁面白かった\",\n        -12.173643112182617\n      ],\n      [\n        \"▁役人\",\n        -12.173674583435059\n      ],\n      [\n        \"棚\",\n        -12.173819541931152\n      ],\n      [\n        \"▁Ha\",\n        -12.173830032348633\n      ],\n      [\n        \"▁TEL\",\n        -12.173992156982422\n      ],\n      [\n        \"▁ジャイアンツ\",\n        -12.174005508422852\n      ],\n      [\n        \"▁後押し\",\n        -12.174188613891602\n      ],\n      [\n        \"粋\",\n        -12.174267768859863\n      ],\n      [\n        \"▁下車\",\n        -12.174325942993164\n      ],\n      [\n        \"▁生かした\",\n        -12.174338340759277\n      ],\n      [\n        \"今度\",\n        -12.174405097961426\n      ],\n      [\n        \"work\",\n        -12.17445182800293\n      ],\n      [\n        \"初心\",\n        -12.174471855163574\n      ],\n      [\n        \"▁去り\",\n        -12.174493789672852\n      ],\n      [\n        \"oon\",\n        -12.174511909484863\n      ],\n      [\n        \"めい\",\n        -12.174552917480469\n      ],\n      [\n        \"▁捉える\",\n        -12.174628257751465\n      ],\n      [\n        \"▁結末\",\n        -12.174644470214844\n      ],\n      [\n        \"▁日高\",\n        -12.174752235412598\n      ],\n      [\n        \"▁最適です\",\n        -12.174875259399414\n      ],\n      [\n        \"▁開戦\",\n        -12.174906730651855\n      ],\n      [\n        \"▁特別に\",\n        -12.175036430358887\n      ],\n      [\n        \"▁イタリアン\",\n        -12.175079345703125\n      ],\n      [\n        \"▁互い\",\n        -12.175079345703125\n      ],\n      [\n        \"▁安保\",\n        -12.17512035369873\n      ],\n      [\n        \"▁コンポーネント\",\n        -12.175332069396973\n      ],\n      [\n        \"▁何事\",\n        -12.175366401672363\n      ],\n      [\n        \"read\",\n        -12.175413131713867\n      ],\n      [\n        \"勧\",\n        -12.175511360168457\n      ],\n      [\n        \"▁豊富で\",\n        -12.175516128540039\n      ],\n      [\n        \"▁RT\",\n        -12.175691604614258\n      ],\n      [\n        \"▁転じた\",\n        -12.175812721252441\n      ],\n      [\n        \"▁砲兵\",\n        -12.175933837890625\n      ],\n      [\n        \"▁言ったら\",\n        -12.17594051361084\n      ],\n      [\n        \"▁及\",\n        -12.175997734069824\n      ],\n      [\n        \"ッケン\",\n        -12.176050186157227\n      ],\n      [\n        \"▁構わ\",\n        -12.176136016845703\n      ],\n      [\n        \"▁洗剤\",\n        -12.176149368286133\n      ],\n      [\n        \"▁残高\",\n        -12.176183700561523\n      ],\n      [\n        \"▁ごとく\",\n        -12.176451683044434\n      ],\n      [\n        \"▁若年\",\n        -12.176565170288086\n      ],\n      [\n        \"▁法制\",\n        -12.176665306091309\n      ],\n      [\n        \"やく\",\n        -12.1766996383667\n      ],\n      [\n        \"ove\",\n        -12.176728248596191\n      ],\n      [\n        \"髄\",\n        -12.176791191101074\n      ],\n      [\n        \"▁デルタ\",\n        -12.176831245422363\n      ],\n      [\n        \"▁活かした\",\n        -12.176939010620117\n      ],\n      [\n        \"ましい\",\n        -12.176968574523926\n      ],\n      [\n        \"▁だす\",\n        -12.176985740661621\n      ],\n      [\n        \"▁未だに\",\n        -12.177356719970703\n      ],\n      [\n        \"▁携\",\n        -12.177436828613281\n      ],\n      [\n        \"▁トラン\",\n        -12.177550315856934\n      ],\n      [\n        \"yama\",\n        -12.177949905395508\n      ],\n      [\n        \"▁新報\",\n        -12.177968978881836\n      ],\n      [\n        \"▁関税\",\n        -12.178064346313477\n      ],\n      [\n        \"シオン\",\n        -12.178072929382324\n      ],\n      [\n        \"▁エディフィス\",\n        -12.178081512451172\n      ],\n      [\n        \"▁尽き\",\n        -12.178082466125488\n      ],\n      [\n        \"▁交互\",\n        -12.17808723449707\n      ],\n      [\n        \"▁エディション\",\n        -12.178224563598633\n      ],\n      [\n        \"崩\",\n        -12.178245544433594\n      ],\n      [\n        \"▁年々\",\n        -12.1782808303833\n      ],\n      [\n        \"▁拳銃\",\n        -12.178319931030273\n      ],\n      [\n        \"▁熱く\",\n        -12.178427696228027\n      ],\n      [\n        \"盆\",\n        -12.178592681884766\n      ],\n      [\n        \"▁Home\",\n        -12.178607940673828\n      ],\n      [\n        \"▁触れた\",\n        -12.178616523742676\n      ],\n      [\n        \"TT\",\n        -12.178749084472656\n      ],\n      [\n        \"▁合体\",\n        -12.17879867553711\n      ],\n      [\n        \"▁不要な\",\n        -12.178829193115234\n      ],\n      [\n        \"▁Plus\",\n        -12.178918838500977\n      ],\n      [\n        \"骸\",\n        -12.178983688354492\n      ],\n      [\n        \"▁首席\",\n        -12.179070472717285\n      ],\n      [\n        \"▁1906\",\n        -12.179072380065918\n      ],\n      [\n        \"▁亡くなる\",\n        -12.179117202758789\n      ],\n      [\n        \"▁健康な\",\n        -12.179128646850586\n      ],\n      [\n        \"現地\",\n        -12.179162979125977\n      ],\n      [\n        \"▁ボディー\",\n        -12.179272651672363\n      ],\n      [\n        \"▁寸前\",\n        -12.1796875\n      ],\n      [\n        \"▁均一\",\n        -12.179713249206543\n      ],\n      [\n        \"ヶ谷\",\n        -12.179905891418457\n      ],\n      [\n        \"▁二度と\",\n        -12.179919242858887\n      ],\n      [\n        \"video\",\n        -12.179924964904785\n      ],\n      [\n        \"エーション\",\n        -12.180018424987793\n      ],\n      [\n        \"▁掌握\",\n        -12.180150032043457\n      ],\n      [\n        \"▁納入\",\n        -12.18022632598877\n      ],\n      [\n        \"▁就く\",\n        -12.1802396774292\n      ],\n      [\n        \"▁気に入った\",\n        -12.180316925048828\n      ],\n      [\n        \"▁STAR\",\n        -12.1804838180542\n      ],\n      [\n        \"ジット\",\n        -12.180488586425781\n      ],\n      [\n        \"アール\",\n        -12.180590629577637\n      ],\n      [\n        \"▁検事\",\n        -12.180658340454102\n      ],\n      [\n        \"▁効力\",\n        -12.180710792541504\n      ],\n      [\n        \"▁穏やかな\",\n        -12.180723190307617\n      ],\n      [\n        \"▁借り入れ\",\n        -12.180791854858398\n      ],\n      [\n        \"nc\",\n        -12.181026458740234\n      ],\n      [\n        \"▁御礼\",\n        -12.181066513061523\n      ],\n      [\n        \"ギス\",\n        -12.181100845336914\n      ],\n      [\n        \"▁じん\",\n        -12.181180953979492\n      ],\n      [\n        \"▁みたい\",\n        -12.18120002746582\n      ],\n      [\n        \"▁製法\",\n        -12.181295394897461\n      ],\n      [\n        \"鶏\",\n        -12.18132209777832\n      ],\n      [\n        \"▁阿波\",\n        -12.181361198425293\n      ],\n      [\n        \"友人\",\n        -12.181413650512695\n      ],\n      [\n        \"▁スペクトル\",\n        -12.181414604187012\n      ],\n      [\n        \"▁笑う\",\n        -12.181524276733398\n      ],\n      [\n        \"oi\",\n        -12.181562423706055\n      ],\n      [\n        \"田中\",\n        -12.181642532348633\n      ],\n      [\n        \"▁クビ\",\n        -12.18165111541748\n      ],\n      [\n        \"▁グレン\",\n        -12.181830406188965\n      ],\n      [\n        \"ムー\",\n        -12.18186092376709\n      ],\n      [\n        \"ッテン\",\n        -12.181891441345215\n      ],\n      [\n        \"▁tag\",\n        -12.181950569152832\n      ],\n      [\n        \"この頃\",\n        -12.182174682617188\n      ],\n      [\n        \"▁マットレス\",\n        -12.18228530883789\n      ],\n      [\n        \"▁浴衣\",\n        -12.182357788085938\n      ],\n      [\n        \"▁紀伊\",\n        -12.182491302490234\n      ],\n      [\n        \"ZE\",\n        -12.182502746582031\n      ],\n      [\n        \"▁めい\",\n        -12.182513236999512\n      ],\n      [\n        \"▁ケガ\",\n        -12.182586669921875\n      ],\n      [\n        \"▁大腸\",\n        -12.182587623596191\n      ],\n      [\n        \"▁脂質\",\n        -12.182609558105469\n      ],\n      [\n        \"鈴木\",\n        -12.182616233825684\n      ],\n      [\n        \"▁スピーチ\",\n        -12.182680130004883\n      ],\n      [\n        \"▁つなぎ\",\n        -12.182817459106445\n      ],\n      [\n        \"▁出世\",\n        -12.18285846710205\n      ],\n      [\n        \"▁おれ\",\n        -12.182953834533691\n      ],\n      [\n        \"たま\",\n        -12.18315315246582\n      ],\n      [\n        \"ATION\",\n        -12.18330192565918\n      ],\n      [\n        \"▁≫\",\n        -12.183317184448242\n      ],\n      [\n        \"▁背面\",\n        -12.183382034301758\n      ],\n      [\n        \"▁逸話\",\n        -12.183420181274414\n      ],\n      [\n        \"▁控訴\",\n        -12.183486938476562\n      ],\n      [\n        \"▁ヘルメット\",\n        -12.183497428894043\n      ],\n      [\n        \"▁2107\",\n        -12.183725357055664\n      ],\n      [\n        \"総合\",\n        -12.18374252319336\n      ],\n      [\n        \"▁GS\",\n        -12.183782577514648\n      ],\n      [\n        \"▁毎日新聞\",\n        -12.183821678161621\n      ],\n      [\n        \"~\",\n        -12.183881759643555\n      ],\n      [\n        \"ブール\",\n        -12.183923721313477\n      ],\n      [\n        \"article\",\n        -12.183924674987793\n      ],\n      [\n        \"▁シンガーソング\",\n        -12.183947563171387\n      ],\n      [\n        \"▁攻勢\",\n        -12.183948516845703\n      ],\n      [\n        \"▁られたり\",\n        -12.18395709991455\n      ],\n      [\n        \"シュタット\",\n        -12.184067726135254\n      ],\n      [\n        \"ane\",\n        -12.184221267700195\n      ],\n      [\n        \"▁リス\",\n        -12.184232711791992\n      ],\n      [\n        \"▁船長\",\n        -12.184236526489258\n      ],\n      [\n        \"▁オタク\",\n        -12.18438720703125\n      ],\n      [\n        \"▁残念な\",\n        -12.184396743774414\n      ],\n      [\n        \"ダイエット\",\n        -12.184718132019043\n      ],\n      [\n        \"▁友だち\",\n        -12.1847562789917\n      ],\n      [\n        \"セク\",\n        -12.18482494354248\n      ],\n      [\n        \"▁山陰\",\n        -12.184829711914062\n      ],\n      [\n        \"▁コイル\",\n        -12.184887886047363\n      ],\n      [\n        \"▁平方メートル\",\n        -12.18498706817627\n      ],\n      [\n        \"鰭\",\n        -12.18498706817627\n      ],\n      [\n        \"▁囲碁\",\n        -12.185107231140137\n      ],\n      [\n        \"フスキー\",\n        -12.185311317443848\n      ],\n      [\n        \"▁押さ\",\n        -12.18565559387207\n      ],\n      [\n        \"▁封\",\n        -12.185657501220703\n      ],\n      [\n        \"びと\",\n        -12.185840606689453\n      ],\n      [\n        \"king\",\n        -12.185879707336426\n      ],\n      [\n        \"▁国旗\",\n        -12.1859130859375\n      ],\n      [\n        \"▁アップグレード\",\n        -12.185965538024902\n      ],\n      [\n        \"▁vi\",\n        -12.186001777648926\n      ],\n      [\n        \"▁ا\",\n        -12.186063766479492\n      ],\n      [\n        \"▁4017\",\n        -12.186090469360352\n      ],\n      [\n        \"▁そら\",\n        -12.186100959777832\n      ],\n      [\n        \"▁味わう\",\n        -12.186142921447754\n      ],\n      [\n        \"▁エンジェル\",\n        -12.186285972595215\n      ],\n      [\n        \"let\",\n        -12.186297416687012\n      ],\n      [\n        \"▁エキ\",\n        -12.186511039733887\n      ],\n      [\n        \"▁生え\",\n        -12.186530113220215\n      ],\n      [\n        \"課\",\n        -12.186545372009277\n      ],\n      [\n        \"▁導いた\",\n        -12.186569213867188\n      ],\n      [\n        \"ッシー\",\n        -12.186579704284668\n      ],\n      [\n        \"▁公示\",\n        -12.186583518981934\n      ],\n      [\n        \"▁コラーゲン\",\n        -12.186720848083496\n      ],\n      [\n        \"▁致\",\n        -12.186722755432129\n      ],\n      [\n        \"▁遺構\",\n        -12.186751365661621\n      ],\n      [\n        \"降水\",\n        -12.186796188354492\n      ],\n      [\n        \"台風\",\n        -12.186832427978516\n      ],\n      [\n        \"GM\",\n        -12.186881065368652\n      ],\n      [\n        \"▁違\",\n        -12.186944961547852\n      ],\n      [\n        \"▁梗塞\",\n        -12.186952590942383\n      ],\n      [\n        \"▁マツ\",\n        -12.187125205993652\n      ],\n      [\n        \"▁窒素\",\n        -12.187183380126953\n      ],\n      [\n        \"▁カマ\",\n        -12.187225341796875\n      ],\n      [\n        \"▁普\",\n        -12.187228202819824\n      ],\n      [\n        \"▁どうにか\",\n        -12.187307357788086\n      ],\n      [\n        \"▁転倒\",\n        -12.187349319458008\n      ],\n      [\n        \"val\",\n        -12.187504768371582\n      ],\n      [\n        \"▁311\",\n        -12.187641143798828\n      ],\n      [\n        \"▁怪物\",\n        -12.187660217285156\n      ],\n      [\n        \"▁ゾンビ\",\n        -12.187689781188965\n      ],\n      [\n        \"▁津軽\",\n        -12.187837600708008\n      ],\n      [\n        \"▁おろし\",\n        -12.18783950805664\n      ],\n      [\n        \"tsu\",\n        -12.187843322753906\n      ],\n      [\n        \"▁滞\",\n        -12.18785285949707\n      ],\n      [\n        \"▁拾\",\n        -12.18791389465332\n      ],\n      [\n        \"PL\",\n        -12.187945365905762\n      ],\n      [\n        \"▁パープル\",\n        -12.187948226928711\n      ],\n      [\n        \"▁鬱\",\n        -12.187952995300293\n      ],\n      [\n        \"▁しゃべ\",\n        -12.187982559204102\n      ],\n      [\n        \"甘\",\n        -12.188024520874023\n      ],\n      [\n        \"▁107\",\n        -12.188089370727539\n      ],\n      [\n        \"▁シンデレラ\",\n        -12.18811321258545\n      ],\n      [\n        \"▁深める\",\n        -12.188170433044434\n      ],\n      [\n        \"▁ツイ\",\n        -12.188396453857422\n      ],\n      [\n        \"ちゅ\",\n        -12.188549041748047\n      ],\n      [\n        \"▁ギュ\",\n        -12.188566207885742\n      ],\n      [\n        \"▁有害\",\n        -12.188596725463867\n      ],\n      [\n        \"KY\",\n        -12.18870735168457\n      ],\n      [\n        \"▁河野\",\n        -12.188748359680176\n      ],\n      [\n        \"▁資\",\n        -12.189149856567383\n      ],\n      [\n        \"▁NY\",\n        -12.18915843963623\n      ],\n      [\n        \"▁交え\",\n        -12.189204216003418\n      ],\n      [\n        \"▁紳士\",\n        -12.189269065856934\n      ],\n      [\n        \"▁行ったら\",\n        -12.189371109008789\n      ],\n      [\n        \"▁返答\",\n        -12.189393997192383\n      ],\n      [\n        \"▁亭\",\n        -12.189412117004395\n      ],\n      [\n        \"NT\",\n        -12.189516067504883\n      ],\n      [\n        \"▁リフレッシュ\",\n        -12.189520835876465\n      ],\n      [\n        \"ema\",\n        -12.189587593078613\n      ],\n      [\n        \"▁芋\",\n        -12.189667701721191\n      ],\n      [\n        \"▁オハイオ\",\n        -12.189733505249023\n      ],\n      [\n        \"▁切り離\",\n        -12.18986701965332\n      ],\n      [\n        \"▁有楽町\",\n        -12.18996524810791\n      ],\n      [\n        \"▁群れ\",\n        -12.189998626708984\n      ],\n      [\n        \"▁胆\",\n        -12.190207481384277\n      ],\n      [\n        \"▁エリック\",\n        -12.190214157104492\n      ],\n      [\n        \"▁便利に\",\n        -12.190271377563477\n      ],\n      [\n        \"▁題名\",\n        -12.190376281738281\n      ],\n      [\n        \"▁Nintendo\",\n        -12.190443992614746\n      ],\n      [\n        \"恩\",\n        -12.190511703491211\n      ],\n      [\n        \"ark\",\n        -12.190584182739258\n      ],\n      [\n        \"▁Super\",\n        -12.190690994262695\n      ],\n      [\n        \"楽曲\",\n        -12.190800666809082\n      ],\n      [\n        \"▁老化\",\n        -12.190937042236328\n      ],\n      [\n        \"▁震え\",\n        -12.191014289855957\n      ],\n      [\n        \"▁HDD\",\n        -12.191047668457031\n      ],\n      [\n        \"▁トマス\",\n        -12.191078186035156\n      ],\n      [\n        \"▁へん\",\n        -12.191125869750977\n      ],\n      [\n        \"▁Game\",\n        -12.191168785095215\n      ],\n      [\n        \"銃\",\n        -12.191228866577148\n      ],\n      [\n        \"▁ウエ\",\n        -12.191266059875488\n      ],\n      [\n        \"pr\",\n        -12.191279411315918\n      ],\n      [\n        \"▁退官\",\n        -12.191340446472168\n      ],\n      [\n        \"▁カネ\",\n        -12.191390037536621\n      ],\n      [\n        \"▁公平\",\n        -12.19139575958252\n      ],\n      [\n        \"▁1903\",\n        -12.191439628601074\n      ],\n      [\n        \"▁在来\",\n        -12.191567420959473\n      ],\n      [\n        \"▁深化\",\n        -12.19160270690918\n      ],\n      [\n        \"▁モノレール\",\n        -12.191632270812988\n      ],\n      [\n        \"▁必死に\",\n        -12.191654205322266\n      ],\n      [\n        \"▁ヨシ\",\n        -12.191688537597656\n      ],\n      [\n        \"▁経つ\",\n        -12.191892623901367\n      ],\n      [\n        \"▁引き分け\",\n        -12.191929817199707\n      ],\n      [\n        \"▁舞踊\",\n        -12.191944122314453\n      ],\n      [\n        \"▁逃した\",\n        -12.19201946258545\n      ],\n      [\n        \"▁はじめる\",\n        -12.192055702209473\n      ],\n      [\n        \"▁みたいだ\",\n        -12.19206428527832\n      ],\n      [\n        \"十郎\",\n        -12.192187309265137\n      ],\n      [\n        \"▁明か\",\n        -12.192201614379883\n      ],\n      [\n        \"▁少量\",\n        -12.192264556884766\n      ],\n      [\n        \"さまざまな\",\n        -12.19228458404541\n      ],\n      [\n        \"▁Type\",\n        -12.192398071289062\n      ],\n      [\n        \"▁載せ\",\n        -12.19240951538086\n      ],\n      [\n        \"▁収支\",\n        -12.1924409866333\n      ],\n      [\n        \"というのも\",\n        -12.192638397216797\n      ],\n      [\n        \"▁困難である\",\n        -12.192641258239746\n      ],\n      [\n        \"ding\",\n        -12.192745208740234\n      ],\n      [\n        \"▁携わった\",\n        -12.192755699157715\n      ],\n      [\n        \"▁手がけて\",\n        -12.19275951385498\n      ],\n      [\n        \"▁呼\",\n        -12.192821502685547\n      ],\n      [\n        \"クロン\",\n        -12.19290828704834\n      ],\n      [\n        \"▁酒井\",\n        -12.193053245544434\n      ],\n      [\n        \"▁ファミコン\",\n        -12.193169593811035\n      ],\n      [\n        \"ATA\",\n        -12.19318675994873\n      ],\n      [\n        \"▁不況\",\n        -12.193243026733398\n      ],\n      [\n        \"ISA\",\n        -12.193547248840332\n      ],\n      [\n        \"▁インプラント\",\n        -12.19359302520752\n      ],\n      [\n        \"▁拍手\",\n        -12.193803787231445\n      ],\n      [\n        \"▁曹\",\n        -12.193924903869629\n      ],\n      [\n        \"▁メロ\",\n        -12.194063186645508\n      ],\n      [\n        \"▁バッ\",\n        -12.194151878356934\n      ],\n      [\n        \"▁トミー\",\n        -12.194253921508789\n      ],\n      [\n        \"▁馬身\",\n        -12.194319725036621\n      ],\n      [\n        \"ゴリ\",\n        -12.19435977935791\n      ],\n      [\n        \"▁有利\",\n        -12.194375038146973\n      ],\n      [\n        \"癖\",\n        -12.19451904296875\n      ],\n      [\n        \"▁パシフィック\",\n        -12.194619178771973\n      ],\n      [\n        \"さすが\",\n        -12.194754600524902\n      ],\n      [\n        \"▁Sky\",\n        -12.19491958618164\n      ],\n      [\n        \"こなわ\",\n        -12.194961547851562\n      ],\n      [\n        \"▁オシャレ\",\n        -12.195018768310547\n      ],\n      [\n        \"▁増し\",\n        -12.19507884979248\n      ],\n      [\n        \"▁EL\",\n        -12.195178985595703\n      ],\n      [\n        \"▁チャネル\",\n        -12.195231437683105\n      ],\n      [\n        \"▁松原\",\n        -12.195290565490723\n      ],\n      [\n        \"太平洋\",\n        -12.19533920288086\n      ],\n      [\n        \"浩\",\n        -12.195342063903809\n      ],\n      [\n        \"▁As\",\n        -12.195456504821777\n      ],\n      [\n        \"匠\",\n        -12.195579528808594\n      ],\n      [\n        \"▁インフレ\",\n        -12.195659637451172\n      ],\n      [\n        \"▁◯\",\n        -12.195706367492676\n      ],\n      [\n        \"▁セラピスト\",\n        -12.195902824401855\n      ],\n      [\n        \"▁激減\",\n        -12.19593334197998\n      ],\n      [\n        \"雑誌\",\n        -12.195938110351562\n      ],\n      [\n        \"払わ\",\n        -12.195977210998535\n      ],\n      [\n        \"▁ダイエー\",\n        -12.196196556091309\n      ],\n      [\n        \"反対\",\n        -12.196248054504395\n      ],\n      [\n        \"▁穀物\",\n        -12.196371078491211\n      ],\n      [\n        \"▁等しい\",\n        -12.196407318115234\n      ],\n      [\n        \"ーーーー\",\n        -12.196521759033203\n      ],\n      [\n        \"ざん\",\n        -12.196534156799316\n      ],\n      [\n        \"▁アーク\",\n        -12.196560859680176\n      ],\n      [\n        \"▁小麦\",\n        -12.196581840515137\n      ],\n      [\n        \"▁エンタメ\",\n        -12.196603775024414\n      ],\n      [\n        \"運営\",\n        -12.196704864501953\n      ],\n      [\n        \"▁陥る\",\n        -12.196722030639648\n      ],\n      [\n        \"▁土台\",\n        -12.19686222076416\n      ],\n      [\n        \"日常\",\n        -12.196934700012207\n      ],\n      [\n        \"▁民家\",\n        -12.197007179260254\n      ],\n      [\n        \"しも\",\n        -12.197010040283203\n      ],\n      [\n        \"ada\",\n        -12.197014808654785\n      ],\n      [\n        \"▁橋梁\",\n        -12.197039604187012\n      ],\n      [\n        \"▁事柄\",\n        -12.197073936462402\n      ],\n      [\n        \"▁視界\",\n        -12.197104454040527\n      ],\n      [\n        \"▁キハ\",\n        -12.197128295898438\n      ],\n      [\n        \"楚\",\n        -12.197355270385742\n      ],\n      [\n        \"近く\",\n        -12.19737720489502\n      ],\n      [\n        \"っつ\",\n        -12.197449684143066\n      ],\n      [\n        \"▁徐\",\n        -12.197513580322266\n      ],\n      [\n        \"▁間近\",\n        -12.19772720336914\n      ],\n      [\n        \"▁生殖\",\n        -12.197744369506836\n      ],\n      [\n        \"オキシ\",\n        -12.197795867919922\n      ],\n      [\n        \"▁敬意\",\n        -12.197881698608398\n      ],\n      [\n        \"1933\",\n        -12.197980880737305\n      ],\n      [\n        \"▁町長\",\n        -12.198041915893555\n      ],\n      [\n        \"▁ぴったりの\",\n        -12.19807243347168\n      ],\n      [\n        \"▁映し\",\n        -12.19808292388916\n      ],\n      [\n        \"▁輝いた\",\n        -12.198105812072754\n      ],\n      [\n        \"ッション\",\n        -12.198164939880371\n      ],\n      [\n        \"sen\",\n        -12.198261260986328\n      ],\n      [\n        \"rus\",\n        -12.19829273223877\n      ],\n      [\n        \"▁ホークス\",\n        -12.19831371307373\n      ],\n      [\n        \"▁一杯\",\n        -12.198325157165527\n      ],\n      [\n        \"▁まんが\",\n        -12.198378562927246\n      ],\n      [\n        \"今月\",\n        -12.198519706726074\n      ],\n      [\n        \"▁聞こえる\",\n        -12.198521614074707\n      ],\n      [\n        \"▁届ける\",\n        -12.198678016662598\n      ],\n      [\n        \"▁ボイ\",\n        -12.198801040649414\n      ],\n      [\n        \"▁赤く\",\n        -12.198875427246094\n      ],\n      [\n        \"▁アトラクション\",\n        -12.198943138122559\n      ],\n      [\n        \"▁暖房\",\n        -12.199085235595703\n      ],\n      [\n        \"▁アクセ\",\n        -12.199088096618652\n      ],\n      [\n        \"▁Ac\",\n        -12.199258804321289\n      ],\n      [\n        \"▁広がった\",\n        -12.199262619018555\n      ],\n      [\n        \"▁主席\",\n        -12.199372291564941\n      ],\n      [\n        \"▁Ge\",\n        -12.19944953918457\n      ],\n      [\n        \"▁スターリン\",\n        -12.199469566345215\n      ],\n      [\n        \"晩年\",\n        -12.199569702148438\n      ],\n      [\n        \"▁等々\",\n        -12.199593544006348\n      ],\n      [\n        \"▁計上\",\n        -12.199594497680664\n      ],\n      [\n        \"十四\",\n        -12.199618339538574\n      ],\n      [\n        \"▁ルパン\",\n        -12.199634552001953\n      ],\n      [\n        \"▁ふれあい\",\n        -12.199654579162598\n      ],\n      [\n        \"歴代\",\n        -12.199699401855469\n      ],\n      [\n        \"mor\",\n        -12.19986343383789\n      ],\n      [\n        \"▁日帰り\",\n        -12.199865341186523\n      ],\n      [\n        \"▁妨げ\",\n        -12.199872016906738\n      ],\n      [\n        \"▁文脈\",\n        -12.199955940246582\n      ],\n      [\n        \"▁コーラ\",\n        -12.199978828430176\n      ],\n      [\n        \"▁着た\",\n        -12.200285911560059\n      ],\n      [\n        \"▁兼務\",\n        -12.200387001037598\n      ],\n      [\n        \"タカ\",\n        -12.200395584106445\n      ],\n      [\n        \"▁組成\",\n        -12.200677871704102\n      ],\n      [\n        \"▁告げる\",\n        -12.200706481933594\n      ],\n      [\n        \"▁仕えた\",\n        -12.200709342956543\n      ],\n      [\n        \"キッド\",\n        -12.200898170471191\n      ],\n      [\n        \"▁War\",\n        -12.20112133026123\n      ],\n      [\n        \"▁不自由\",\n        -12.201156616210938\n      ],\n      [\n        \"▁指向\",\n        -12.201301574707031\n      ],\n      [\n        \"▁ウォーク\",\n        -12.201451301574707\n      ],\n      [\n        \"だって\",\n        -12.201462745666504\n      ],\n      [\n        \"▁共用\",\n        -12.20146369934082\n      ],\n      [\n        \"▁胴\",\n        -12.201766967773438\n      ],\n      [\n        \"▁拝見\",\n        -12.201996803283691\n      ],\n      [\n        \"▁叱\",\n        -12.202232360839844\n      ],\n      [\n        \"▁保って\",\n        -12.202291488647461\n      ],\n      [\n        \"▁積分\",\n        -12.202507972717285\n      ],\n      [\n        \"▁大雨\",\n        -12.202666282653809\n      ],\n      [\n        \"▁デジ\",\n        -12.202777862548828\n      ],\n      [\n        \"シェン\",\n        -12.202795028686523\n      ],\n      [\n        \"▁造成\",\n        -12.202900886535645\n      ],\n      [\n        \"▁腎\",\n        -12.202903747558594\n      ],\n      [\n        \"▁エッジ\",\n        -12.202911376953125\n      ],\n      [\n        \"▁フェラーリ\",\n        -12.202934265136719\n      ],\n      [\n        \"二郎\",\n        -12.2029390335083\n      ],\n      [\n        \"▁生かし\",\n        -12.203011512756348\n      ],\n      [\n        \"らう\",\n        -12.203080177307129\n      ],\n      [\n        \"▁串\",\n        -12.203102111816406\n      ],\n      [\n        \"▁Associate\",\n        -12.203167915344238\n      ],\n      [\n        \"▁勿論\",\n        -12.203186988830566\n      ],\n      [\n        \"▁シャイ\",\n        -12.203227996826172\n      ],\n      [\n        \"▁愛人\",\n        -12.203295707702637\n      ],\n      [\n        \"ジェット\",\n        -12.203299522399902\n      ],\n      [\n        \"▁昼食\",\n        -12.203343391418457\n      ],\n      [\n        \"▁ハインリヒ\",\n        -12.20340347290039\n      ],\n      [\n        \"▁Te\",\n        -12.203775405883789\n      ],\n      [\n        \"▁恩恵\",\n        -12.203794479370117\n      ],\n      [\n        \"ゅ\",\n        -12.20386791229248\n      ],\n      [\n        \"ral\",\n        -12.203868865966797\n      ],\n      [\n        \"▁良くて\",\n        -12.204134941101074\n      ],\n      [\n        \"▁通院\",\n        -12.204179763793945\n      ],\n      [\n        \"髙\",\n        -12.204227447509766\n      ],\n      [\n        \"▁松尾\",\n        -12.204270362854004\n      ],\n      [\n        \"▁名門\",\n        -12.204424858093262\n      ],\n      [\n        \"▁よー\",\n        -12.20448112487793\n      ],\n      [\n        \"▁たばこ\",\n        -12.20470142364502\n      ],\n      [\n        \"▁負った\",\n        -12.204824447631836\n      ],\n      [\n        \"eam\",\n        -12.204843521118164\n      ],\n      [\n        \"▁溶\",\n        -12.204975128173828\n      ],\n      [\n        \"▁組んだ\",\n        -12.205167770385742\n      ],\n      [\n        \"▁まな\",\n        -12.205216407775879\n      ],\n      [\n        \"▁尋常\",\n        -12.20528793334961\n      ],\n      [\n        \"jo\",\n        -12.20544147491455\n      ],\n      [\n        \"▁強かった\",\n        -12.20560359954834\n      ],\n      [\n        \"ゼット\",\n        -12.205663681030273\n      ],\n      [\n        \"▁内海\",\n        -12.205801963806152\n      ],\n      [\n        \"▁挟ま\",\n        -12.205901145935059\n      ],\n      [\n        \"ランチ\",\n        -12.206098556518555\n      ],\n      [\n        \"▁経た\",\n        -12.206123352050781\n      ],\n      [\n        \"▁カッ\",\n        -12.20621109008789\n      ],\n      [\n        \"▁静止\",\n        -12.206274032592773\n      ],\n      [\n        \"ニクス\",\n        -12.206286430358887\n      ],\n      [\n        \"ターン\",\n        -12.20630931854248\n      ],\n      [\n        \"▁宛て\",\n        -12.206465721130371\n      ],\n      [\n        \"▁昨今\",\n        -12.206503868103027\n      ],\n      [\n        \"▁減ら\",\n        -12.206526756286621\n      ],\n      [\n        \"▁パレスチナ\",\n        -12.206703186035156\n      ],\n      [\n        \"停\",\n        -12.206714630126953\n      ],\n      [\n        \"SHI\",\n        -12.206759452819824\n      ],\n      [\n        \"▁116\",\n        -12.206790924072266\n      ],\n      [\n        \"▁焼け\",\n        -12.206812858581543\n      ],\n      [\n        \"▁司祭\",\n        -12.206859588623047\n      ],\n      [\n        \"▁消す\",\n        -12.20693588256836\n      ],\n      [\n        \"▁容赦\",\n        -12.20694351196289\n      ],\n      [\n        \"▁FOR\",\n        -12.206954956054688\n      ],\n      [\n        \"メア\",\n        -12.20695972442627\n      ],\n      [\n        \"▁組み合わせる\",\n        -12.206978797912598\n      ],\n      [\n        \"▁冗談\",\n        -12.207056999206543\n      ],\n      [\n        \"▁大森\",\n        -12.207070350646973\n      ],\n      [\n        \"▁特番\",\n        -12.207188606262207\n      ],\n      [\n        \"KA\",\n        -12.207261085510254\n      ],\n      [\n        \"▁トルク\",\n        -12.207274436950684\n      ],\n      [\n        \"▁騒ぎ\",\n        -12.207293510437012\n      ],\n      [\n        \"▁面談\",\n        -12.207318305969238\n      ],\n      [\n        \"▁キズ\",\n        -12.207342147827148\n      ],\n      [\n        \"ラード\",\n        -12.207375526428223\n      ],\n      [\n        \"END\",\n        -12.20740795135498\n      ],\n      [\n        \"▁佐伯\",\n        -12.207561492919922\n      ],\n      [\n        \"▁グリル\",\n        -12.207852363586426\n      ],\n      [\n        \"FX\",\n        -12.207982063293457\n      ],\n      [\n        \"▁電灯\",\n        -12.208037376403809\n      ],\n      [\n        \"▁有志\",\n        -12.208312034606934\n      ],\n      [\n        \"▁っぽく\",\n        -12.208431243896484\n      ],\n      [\n        \"press\",\n        -12.208504676818848\n      ],\n      [\n        \"がし\",\n        -12.208572387695312\n      ],\n      [\n        \"びき\",\n        -12.208605766296387\n      ],\n      [\n        \"▁Bi\",\n        -12.208650588989258\n      ],\n      [\n        \"▁最高峰\",\n        -12.208684921264648\n      ],\n      [\n        \"▁ファイナルファンタジー\",\n        -12.208715438842773\n      ],\n      [\n        \"▁貴族院\",\n        -12.20895767211914\n      ],\n      [\n        \"股\",\n        -12.208990097045898\n      ],\n      [\n        \"牌\",\n        -12.209066390991211\n      ],\n      [\n        \"▁板橋\",\n        -12.209121704101562\n      ],\n      [\n        \"誤\",\n        -12.209217071533203\n      ],\n      [\n        \"盛り\",\n        -12.209344863891602\n      ],\n      [\n        \"ジョージ\",\n        -12.209471702575684\n      ],\n      [\n        \"▁即座に\",\n        -12.209657669067383\n      ],\n      [\n        \"▁次期\",\n        -12.209738731384277\n      ],\n      [\n        \"機能\",\n        -12.209901809692383\n      ],\n      [\n        \"▁捉えて\",\n        -12.209903717041016\n      ],\n      [\n        \"シエ\",\n        -12.210014343261719\n      ],\n      [\n        \"▁曖昧\",\n        -12.210027694702148\n      ],\n      [\n        \"▁町立\",\n        -12.210076332092285\n      ],\n      [\n        \"▁思い出す\",\n        -12.210088729858398\n      ],\n      [\n        \"▁新入\",\n        -12.210088729858398\n      ],\n      [\n        \"▁伝道\",\n        -12.210095405578613\n      ],\n      [\n        \"栖\",\n        -12.210219383239746\n      ],\n      [\n        \"▁踊\",\n        -12.210458755493164\n      ],\n      [\n        \"▁仕方がない\",\n        -12.21048641204834\n      ],\n      [\n        \"▁外野手\",\n        -12.210487365722656\n      ],\n      [\n        \"▁返却\",\n        -12.210492134094238\n      ],\n      [\n        \"ズル\",\n        -12.210517883300781\n      ],\n      [\n        \"トゥール\",\n        -12.210561752319336\n      ],\n      [\n        \"▁猶予\",\n        -12.21060562133789\n      ],\n      [\n        \"▁スパイス\",\n        -12.210640907287598\n      ],\n      [\n        \"▁通告\",\n        -12.210643768310547\n      ],\n      [\n        \"▁いつの間にか\",\n        -12.210681915283203\n      ],\n      [\n        \"mu\",\n        -12.210713386535645\n      ],\n      [\n        \"▁つまみ\",\n        -12.210731506347656\n      ],\n      [\n        \"▁写本\",\n        -12.21074390411377\n      ],\n      [\n        \"▁愛顧\",\n        -12.21076774597168\n      ],\n      [\n        \"そうして\",\n        -12.210790634155273\n      ],\n      [\n        \"▁討論\",\n        -12.210894584655762\n      ],\n      [\n        \"ken\",\n        -12.210917472839355\n      ],\n      [\n        \"選挙\",\n        -12.211030006408691\n      ],\n      [\n        \"鋳\",\n        -12.211079597473145\n      ],\n      [\n        \"▁遡\",\n        -12.211482048034668\n      ],\n      [\n        \"▁強烈な\",\n        -12.211503028869629\n      ],\n      [\n        \"吉田\",\n        -12.211578369140625\n      ],\n      [\n        \"▁丈夫\",\n        -12.211599349975586\n      ],\n      [\n        \"▁LIFE\",\n        -12.211801528930664\n      ],\n      [\n        \"▁KA\",\n        -12.211943626403809\n      ],\n      [\n        \"鼓\",\n        -12.211990356445312\n      ],\n      [\n        \"だか\",\n        -12.21214771270752\n      ],\n      [\n        \"▁神道\",\n        -12.212182998657227\n      ],\n      [\n        \"▁返した\",\n        -12.212320327758789\n      ],\n      [\n        \"▁通じた\",\n        -12.2123384475708\n      ],\n      [\n        \"括\",\n        -12.21250057220459\n      ],\n      [\n        \"▁追及\",\n        -12.212512969970703\n      ],\n      [\n        \"▁意匠\",\n        -12.212528228759766\n      ],\n      [\n        \"▁跳ね\",\n        -12.212530136108398\n      ],\n      [\n        \"▁留まり\",\n        -12.212567329406738\n      ],\n      [\n        \"▁止まり\",\n        -12.212669372558594\n      ],\n      [\n        \"▁実情\",\n        -12.212687492370605\n      ],\n      [\n        \"▁築いて\",\n        -12.212713241577148\n      ],\n      [\n        \"▁適度\",\n        -12.212714195251465\n      ],\n      [\n        \"肩\",\n        -12.21279239654541\n      ],\n      [\n        \"▁予言\",\n        -12.212956428527832\n      ],\n      [\n        \"▁Pay\",\n        -12.21299934387207\n      ],\n      [\n        \"▁病理\",\n        -12.213067054748535\n      ],\n      [\n        \"▁注入\",\n        -12.213171005249023\n      ],\n      [\n        \"▁当番\",\n        -12.213261604309082\n      ],\n      [\n        \"▁精子\",\n        -12.213268280029297\n      ],\n      [\n        \"▁朗読\",\n        -12.213335037231445\n      ],\n      [\n        \"▁以て\",\n        -12.213345527648926\n      ],\n      [\n        \"▁貸出\",\n        -12.213435173034668\n      ],\n      [\n        \"▁ジャージ\",\n        -12.213623046875\n      ],\n      [\n        \"▁弱点\",\n        -12.213638305664062\n      ],\n      [\n        \"▁遊戯\",\n        -12.213732719421387\n      ],\n      [\n        \"▁公安\",\n        -12.213798522949219\n      ],\n      [\n        \"▁優遇\",\n        -12.213835716247559\n      ],\n      [\n        \"宮城\",\n        -12.213855743408203\n      ],\n      [\n        \"▁入隊\",\n        -12.213886260986328\n      ],\n      [\n        \"▁加わって\",\n        -12.213946342468262\n      ],\n      [\n        \"▁モス\",\n        -12.213959693908691\n      ],\n      [\n        \"▁水雷\",\n        -12.214062690734863\n      ],\n      [\n        \"▁アルト\",\n        -12.214102745056152\n      ],\n      [\n        \"奮\",\n        -12.214146614074707\n      ],\n      [\n        \"▁小田\",\n        -12.214242935180664\n      ],\n      [\n        \"▁伸ばし\",\n        -12.214262008666992\n      ],\n      [\n        \"▁奮闘\",\n        -12.214284896850586\n      ],\n      [\n        \"▁コンプレックス\",\n        -12.214404106140137\n      ],\n      [\n        \"▁賞味\",\n        -12.214434623718262\n      ],\n      [\n        \"広告\",\n        -12.214436531066895\n      ],\n      [\n        \"▁転移\",\n        -12.214442253112793\n      ],\n      [\n        \"▁鷲\",\n        -12.214469909667969\n      ],\n      [\n        \"▁et\",\n        -12.21449089050293\n      ],\n      [\n        \"PER\",\n        -12.214492797851562\n      ],\n      [\n        \"▁合衆\",\n        -12.21469497680664\n      ],\n      [\n        \"▁奪還\",\n        -12.21476936340332\n      ],\n      [\n        \"ient\",\n        -12.214899063110352\n      ],\n      [\n        \"▁こい\",\n        -12.214984893798828\n      ],\n      [\n        \"▁Edition\",\n        -12.214999198913574\n      ],\n      [\n        \"▁雑草\",\n        -12.21500301361084\n      ],\n      [\n        \"▁続行\",\n        -12.215116500854492\n      ],\n      [\n        \"オレ\",\n        -12.21523380279541\n      ],\n      [\n        \"桶\",\n        -12.21535587310791\n      ],\n      [\n        \"▁HO\",\n        -12.215373039245605\n      ],\n      [\n        \"アフリカ\",\n        -12.215604782104492\n      ],\n      [\n        \"舌\",\n        -12.215913772583008\n      ],\n      [\n        \"EST\",\n        -12.216012954711914\n      ],\n      [\n        \"ゲイ\",\n        -12.216078758239746\n      ],\n      [\n        \"▁ヴィクトリア\",\n        -12.216196060180664\n      ],\n      [\n        \"▁産出\",\n        -12.2162446975708\n      ],\n      [\n        \"▁陸地\",\n        -12.21627140045166\n      ],\n      [\n        \"慣\",\n        -12.21628189086914\n      ],\n      [\n        \"イザ\",\n        -12.21634578704834\n      ],\n      [\n        \"▁返って\",\n        -12.216376304626465\n      ],\n      [\n        \"製造\",\n        -12.216385841369629\n      ],\n      [\n        \"uki\",\n        -12.216654777526855\n      ],\n      [\n        \"▁ヴィンテージ\",\n        -12.217150688171387\n      ],\n      [\n        \"▁NFL\",\n        -12.21724796295166\n      ],\n      [\n        \"疹\",\n        -12.217257499694824\n      ],\n      [\n        \"▁函数\",\n        -12.217264175415039\n      ],\n      [\n        \"▁高価な\",\n        -12.217368125915527\n      ],\n      [\n        \"ene\",\n        -12.217585563659668\n      ],\n      [\n        \"▁学歴\",\n        -12.217592239379883\n      ],\n      [\n        \"▁施\",\n        -12.21761417388916\n      ],\n      [\n        \"▁info\",\n        -12.217619895935059\n      ],\n      [\n        \"管理\",\n        -12.217641830444336\n      ],\n      [\n        \"▁皇族\",\n        -12.217659950256348\n      ],\n      [\n        \"ars\",\n        -12.217706680297852\n      ],\n      [\n        \"ドキ\",\n        -12.217761993408203\n      ],\n      [\n        \"そく\",\n        -12.217873573303223\n      ],\n      [\n        \"▁等級\",\n        -12.218024253845215\n      ],\n      [\n        \"ku\",\n        -12.218055725097656\n      ],\n      [\n        \"AMP\",\n        -12.218086242675781\n      ],\n      [\n        \"▁見据え\",\n        -12.218101501464844\n      ],\n      [\n        \"▁此\",\n        -12.218210220336914\n      ],\n      [\n        \"弁護\",\n        -12.218250274658203\n      ],\n      [\n        \"▁百合\",\n        -12.218297958374023\n      ],\n      [\n        \"▁陥り\",\n        -12.218338966369629\n      ],\n      [\n        \"ところ\",\n        -12.218355178833008\n      ],\n      [\n        \"▁1889\",\n        -12.218461990356445\n      ],\n      [\n        \"▁源泉\",\n        -12.218568801879883\n      ],\n      [\n        \"▁やりがい\",\n        -12.218585968017578\n      ],\n      [\n        \"▁ビニール\",\n        -12.218620300292969\n      ],\n      [\n        \"▁BMW\",\n        -12.218697547912598\n      ],\n      [\n        \"▁清楚\",\n        -12.21876335144043\n      ],\n      [\n        \"大手\",\n        -12.218765258789062\n      ],\n      [\n        \"▁ノア\",\n        -12.218766212463379\n      ],\n      [\n        \"▁原宿\",\n        -12.218916893005371\n      ],\n      [\n        \"▁かかわる\",\n        -12.219058990478516\n      ],\n      [\n        \"午前\",\n        -12.219114303588867\n      ],\n      [\n        \"▁建てる\",\n        -12.219115257263184\n      ],\n      [\n        \"▁pre\",\n        -12.21915340423584\n      ],\n      [\n        \"▁郡山\",\n        -12.219164848327637\n      ],\n      [\n        \"▁休養\",\n        -12.219213485717773\n      ],\n      [\n        \"どうも\",\n        -12.219245910644531\n      ],\n      [\n        \"▁エルメス\",\n        -12.219345092773438\n      ],\n      [\n        \"ミュー\",\n        -12.219382286071777\n      ],\n      [\n        \"▁おばさん\",\n        -12.219533920288086\n      ],\n      [\n        \"▁ジェン\",\n        -12.21957778930664\n      ],\n      [\n        \"▁ルーキー\",\n        -12.219621658325195\n      ],\n      [\n        \"▁材質\",\n        -12.219625473022461\n      ],\n      [\n        \"▁胴体\",\n        -12.219627380371094\n      ],\n      [\n        \"▁ディレクトリ\",\n        -12.219651222229004\n      ],\n      [\n        \"▁なるほど\",\n        -12.219658851623535\n      ],\n      [\n        \"▁1890\",\n        -12.219720840454102\n      ],\n      [\n        \"▁一つ一つ\",\n        -12.219771385192871\n      ],\n      [\n        \"▁1904\",\n        -12.21978759765625\n      ],\n      [\n        \"▁引き起こし\",\n        -12.219796180725098\n      ],\n      [\n        \"▁まっ\",\n        -12.219841003417969\n      ],\n      [\n        \"カット\",\n        -12.219890594482422\n      ],\n      [\n        \"▁ステーキ\",\n        -12.219895362854004\n      ],\n      [\n        \"▁回帰\",\n        -12.219905853271484\n      ],\n      [\n        \"▁ケンタッキー\",\n        -12.220009803771973\n      ],\n      [\n        \"▁襲い\",\n        -12.220017433166504\n      ],\n      [\n        \"▁妖精\",\n        -12.220022201538086\n      ],\n      [\n        \"レッ\",\n        -12.22022533416748\n      ],\n      [\n        \"言語\",\n        -12.220454216003418\n      ],\n      [\n        \"▁軍用\",\n        -12.220527648925781\n      ],\n      [\n        \"陳\",\n        -12.2205810546875\n      ],\n      [\n        \"▁おこなって\",\n        -12.220608711242676\n      ],\n      [\n        \"▁溶接\",\n        -12.22061824798584\n      ],\n      [\n        \"▁ビルド\",\n        -12.220645904541016\n      ],\n      [\n        \"▁乗り越え\",\n        -12.22067928314209\n      ],\n      [\n        \"▁種族\",\n        -12.220754623413086\n      ],\n      [\n        \"▁南区\",\n        -12.220765113830566\n      ],\n      [\n        \"出来\",\n        -12.220792770385742\n      ],\n      [\n        \"欧州\",\n        -12.220793724060059\n      ],\n      [\n        \"▁性欲\",\n        -12.221287727355957\n      ],\n      [\n        \"ひょ\",\n        -12.221635818481445\n      ],\n      [\n        \"lor\",\n        -12.221806526184082\n      ],\n      [\n        \"ぴ\",\n        -12.221879005432129\n      ],\n      [\n        \"▁発令\",\n        -12.22192096710205\n      ],\n      [\n        \"▁容姿\",\n        -12.221931457519531\n      ],\n      [\n        \"づか\",\n        -12.221997261047363\n      ],\n      [\n        \"▁聖地\",\n        -12.222379684448242\n      ],\n      [\n        \"▁足元\",\n        -12.222380638122559\n      ],\n      [\n        \"貝\",\n        -12.222413063049316\n      ],\n      [\n        \"▁ip\",\n        -12.222515106201172\n      ],\n      [\n        \"プレイヤー\",\n        -12.222628593444824\n      ],\n      [\n        \"▁器官\",\n        -12.222776412963867\n      ],\n      [\n        \"▁脂\",\n        -12.222848892211914\n      ],\n      [\n        \"▁超人\",\n        -12.223217964172363\n      ],\n      [\n        \"▁Professional\",\n        -12.223244667053223\n      ],\n      [\n        \"▁クレー\",\n        -12.223284721374512\n      ],\n      [\n        \"▁カムループス\",\n        -12.223484992980957\n      ],\n      [\n        \"▁総数\",\n        -12.223530769348145\n      ],\n      [\n        \"▁自由民主党\",\n        -12.223535537719727\n      ],\n      [\n        \"ウィー\",\n        -12.223567008972168\n      ],\n      [\n        \"▁線形\",\n        -12.223577499389648\n      ],\n      [\n        \"▁御殿\",\n        -12.223589897155762\n      ],\n      [\n        \"▁準じ\",\n        -12.223649978637695\n      ],\n      [\n        \"舘\",\n        -12.223725318908691\n      ],\n      [\n        \"▁千歳\",\n        -12.223771095275879\n      ],\n      [\n        \"▁School\",\n        -12.223797798156738\n      ],\n      [\n        \"▁ファイター\",\n        -12.224020957946777\n      ],\n      [\n        \"必要\",\n        -12.224081993103027\n      ],\n      [\n        \"▁支線\",\n        -12.224148750305176\n      ],\n      [\n        \"▁Fl\",\n        -12.224220275878906\n      ],\n      [\n        \"▁持てる\",\n        -12.224493980407715\n      ],\n      [\n        \"rn\",\n        -12.224542617797852\n      ],\n      [\n        \"▁可視\",\n        -12.224909782409668\n      ],\n      [\n        \"▁夜景\",\n        -12.2249174118042\n      ],\n      [\n        \"▁付か\",\n        -12.224991798400879\n      ],\n      [\n        \"▁名声\",\n        -12.225010871887207\n      ],\n      [\n        \"▁メルマガ\",\n        -12.225046157836914\n      ],\n      [\n        \"▁小遣い\",\n        -12.225166320800781\n      ],\n      [\n        \"スパイ\",\n        -12.225201606750488\n      ],\n      [\n        \"▁乗組員\",\n        -12.225286483764648\n      ],\n      [\n        \"▁飼って\",\n        -12.225319862365723\n      ],\n      [\n        \"▁本山\",\n        -12.225347518920898\n      ],\n      [\n        \"▁codic\",\n        -12.225509643554688\n      ],\n      [\n        \"▁お迎え\",\n        -12.2255277633667\n      ],\n      [\n        \"っとり\",\n        -12.225590705871582\n      ],\n      [\n        \"▁中佐\",\n        -12.225597381591797\n      ],\n      [\n        \"▁ウォン\",\n        -12.225662231445312\n      ],\n      [\n        \"▁白く\",\n        -12.225698471069336\n      ],\n      [\n        \"ense\",\n        -12.225992202758789\n      ],\n      [\n        \"デール\",\n        -12.226115226745605\n      ],\n      [\n        \"堅\",\n        -12.226225852966309\n      ],\n      [\n        \"ヅ\",\n        -12.226245880126953\n      ],\n      [\n        \"ドック\",\n        -12.226303100585938\n      ],\n      [\n        \"▁新井\",\n        -12.226435661315918\n      ],\n      [\n        \"▁sim\",\n        -12.226828575134277\n      ],\n      [\n        \"▁ナイキ\",\n        -12.226846694946289\n      ],\n      [\n        \"▁就活\",\n        -12.226871490478516\n      ],\n      [\n        \"▁お好み\",\n        -12.226966857910156\n      ],\n      [\n        \"▁キレイに\",\n        -12.22707748413086\n      ],\n      [\n        \"▁工務\",\n        -12.227231979370117\n      ],\n      [\n        \"▁陶器\",\n        -12.227245330810547\n      ],\n      [\n        \"▁音波\",\n        -12.227453231811523\n      ],\n      [\n        \"▁転が\",\n        -12.227547645568848\n      ],\n      [\n        \"▁車輪\",\n        -12.22756576538086\n      ],\n      [\n        \"▁直轄\",\n        -12.227640151977539\n      ],\n      [\n        \"▁並べて\",\n        -12.227718353271484\n      ],\n      [\n        \"▁天王寺\",\n        -12.227794647216797\n      ],\n      [\n        \"▁Tokyo\",\n        -12.227823257446289\n      ],\n      [\n        \"▁連帯\",\n        -12.22785472869873\n      ],\n      [\n        \"▁負債\",\n        -12.22795295715332\n      ],\n      [\n        \"▁治癒\",\n        -12.227956771850586\n      ],\n      [\n        \"PM\",\n        -12.228090286254883\n      ],\n      [\n        \"rt\",\n        -12.228130340576172\n      ],\n      [\n        \"▁協調\",\n        -12.228225708007812\n      ],\n      [\n        \"▁TH\",\n        -12.228248596191406\n      ],\n      [\n        \"▁院生\",\n        -12.228288650512695\n      ],\n      [\n        \"▁忍者\",\n        -12.228387832641602\n      ],\n      [\n        \"1932\",\n        -12.22845458984375\n      ],\n      [\n        \"▁巡礼\",\n        -12.22846794128418\n      ],\n      [\n        \"▁反する\",\n        -12.228565216064453\n      ],\n      [\n        \"▁pic\",\n        -12.228653907775879\n      ],\n      [\n        \"hon\",\n        -12.228656768798828\n      ],\n      [\n        \"▁衣服\",\n        -12.2288236618042\n      ],\n      [\n        \"料理\",\n        -12.228829383850098\n      ],\n      [\n        \"eck\",\n        -12.228867530822754\n      ],\n      [\n        \"▁Mozilla\",\n        -12.228900909423828\n      ],\n      [\n        \"ッピー\",\n        -12.22893238067627\n      ],\n      [\n        \"▁消える\",\n        -12.229165077209473\n      ],\n      [\n        \"▁最大で\",\n        -12.2291898727417\n      ],\n      [\n        \"▁買い取り\",\n        -12.229253768920898\n      ],\n      [\n        \"徒然\",\n        -12.229321479797363\n      ],\n      [\n        \"働\",\n        -12.229430198669434\n      ],\n      [\n        \"▁石鹸\",\n        -12.229515075683594\n      ],\n      [\n        \"▁低温\",\n        -12.229521751403809\n      ],\n      [\n        \"▁山手\",\n        -12.229623794555664\n      ],\n      [\n        \"▁Management\",\n        -12.22962474822998\n      ],\n      [\n        \"▁アルミニウム\",\n        -12.229639053344727\n      ],\n      [\n        \"▁要約\",\n        -12.22967529296875\n      ],\n      [\n        \"▁ええ\",\n        -12.229707717895508\n      ],\n      [\n        \"▁松下\",\n        -12.229769706726074\n      ],\n      [\n        \"▁版画\",\n        -12.229819297790527\n      ],\n      [\n        \"▁殺到\",\n        -12.229897499084473\n      ],\n      [\n        \"▁レオン\",\n        -12.229927062988281\n      ],\n      [\n        \"がれ\",\n        -12.230128288269043\n      ],\n      [\n        \"▁中型\",\n        -12.23013687133789\n      ],\n      [\n        \"ctor\",\n        -12.230185508728027\n      ],\n      [\n        \"▁fi\",\n        -12.230194091796875\n      ],\n      [\n        \"▁接し\",\n        -12.230340957641602\n      ],\n      [\n        \"▁小沢\",\n        -12.230395317077637\n      ],\n      [\n        \"こし\",\n        -12.230402946472168\n      ],\n      [\n        \"▁質感\",\n        -12.230437278747559\n      ],\n      [\n        \"ネオ\",\n        -12.230450630187988\n      ],\n      [\n        \"TU\",\n        -12.230706214904785\n      ],\n      [\n        \"▁サーチ\",\n        -12.23081111907959\n      ],\n      [\n        \"▁ハラ\",\n        -12.230817794799805\n      ],\n      [\n        \"▁Mark\",\n        -12.231293678283691\n      ],\n      [\n        \"蔑\",\n        -12.231317520141602\n      ],\n      [\n        \"▁330\",\n        -12.231403350830078\n      ],\n      [\n        \"▁哺乳\",\n        -12.231437683105469\n      ],\n      [\n        \"▁スケッチ\",\n        -12.231520652770996\n      ],\n      [\n        \"ロース\",\n        -12.231554985046387\n      ],\n      [\n        \"カテゴリ\",\n        -12.231595993041992\n      ],\n      [\n        \"RF\",\n        -12.231857299804688\n      ],\n      [\n        \"▁代わる\",\n        -12.23192024230957\n      ],\n      [\n        \"シロ\",\n        -12.232075691223145\n      ],\n      [\n        \"ホーク\",\n        -12.232239723205566\n      ],\n      [\n        \"▁石橋\",\n        -12.232276916503906\n      ],\n      [\n        \"▁譜\",\n        -12.232439041137695\n      ],\n      [\n        \"効\",\n        -12.232492446899414\n      ],\n      [\n        \"▁インテル\",\n        -12.232695579528809\n      ],\n      [\n        \"OSS\",\n        -12.232712745666504\n      ],\n      [\n        \"▁県庁\",\n        -12.23299503326416\n      ],\n      [\n        \"err\",\n        -12.233136177062988\n      ],\n      [\n        \"kan\",\n        -12.233160018920898\n      ],\n      [\n        \"麻呂\",\n        -12.233214378356934\n      ],\n      [\n        \"▁税制\",\n        -12.233317375183105\n      ],\n      [\n        \"▁大崎\",\n        -12.233414649963379\n      ],\n      [\n        \"ニウス\",\n        -12.23343563079834\n      ],\n      [\n        \"瞬\",\n        -12.233489036560059\n      ],\n      [\n        \"▁向ける\",\n        -12.233548164367676\n      ],\n      [\n        \"▁門下\",\n        -12.233656883239746\n      ],\n      [\n        \"▁引き取\",\n        -12.233726501464844\n      ],\n      [\n        \"▁Work\",\n        -12.233797073364258\n      ],\n      [\n        \"▁センサ\",\n        -12.23379898071289\n      ],\n      [\n        \"▁124\",\n        -12.233813285827637\n      ],\n      [\n        \"▁詫び\",\n        -12.233860969543457\n      ],\n      [\n        \"なんか\",\n        -12.233895301818848\n      ],\n      [\n        \"▁ドック\",\n        -12.233973503112793\n      ],\n      [\n        \"▁壊\",\n        -12.234020233154297\n      ],\n      [\n        \"▁キラキラ\",\n        -12.234103202819824\n      ],\n      [\n        \"▁称え\",\n        -12.234158515930176\n      ],\n      [\n        \"▁ミリオン\",\n        -12.234163284301758\n      ],\n      [\n        \"▁碧\",\n        -12.234336853027344\n      ],\n      [\n        \"▁珈琲\",\n        -12.234346389770508\n      ],\n      [\n        \"▁下野\",\n        -12.234365463256836\n      ],\n      [\n        \"▁蜜\",\n        -12.234394073486328\n      ],\n      [\n        \"▁各種の\",\n        -12.234458923339844\n      ],\n      [\n        \"▁アルプス\",\n        -12.234615325927734\n      ],\n      [\n        \"▁重傷\",\n        -12.23471736907959\n      ],\n      [\n        \"▁高麗\",\n        -12.234819412231445\n      ],\n      [\n        \"介護\",\n        -12.234823226928711\n      ],\n      [\n        \"▁旗艦\",\n        -12.234895706176758\n      ],\n      [\n        \"UP\",\n        -12.234957695007324\n      ],\n      [\n        \"▁寂し\",\n        -12.235027313232422\n      ],\n      [\n        \"awa\",\n        -12.235167503356934\n      ],\n      [\n        \"▁Bu\",\n        -12.235227584838867\n      ],\n      [\n        \"戦国\",\n        -12.235244750976562\n      ],\n      [\n        \"▁戯曲\",\n        -12.235560417175293\n      ],\n      [\n        \"▁コリ\",\n        -12.235577583312988\n      ],\n      [\n        \"帰り\",\n        -12.235594749450684\n      ],\n      [\n        \"▁簡単です\",\n        -12.235645294189453\n      ],\n      [\n        \"▁突起\",\n        -12.235873222351074\n      ],\n      [\n        \"んだり\",\n        -12.235879898071289\n      ],\n      [\n        \"廟\",\n        -12.23592472076416\n      ],\n      [\n        \"▁麻痺\",\n        -12.23592758178711\n      ],\n      [\n        \"▁招いて\",\n        -12.236041069030762\n      ],\n      [\n        \"▁アンドレ\",\n        -12.236099243164062\n      ],\n      [\n        \"▁痛め\",\n        -12.236124992370605\n      ],\n      [\n        \"▁争う\",\n        -12.236166954040527\n      ],\n      [\n        \"▁タコ\",\n        -12.236289024353027\n      ],\n      [\n        \"▁歌声\",\n        -12.236294746398926\n      ],\n      [\n        \"サック\",\n        -12.236432075500488\n      ],\n      [\n        \"ミド\",\n        -12.23646354675293\n      ],\n      [\n        \"ッティング\",\n        -12.236471176147461\n      ],\n      [\n        \"▁内臓\",\n        -12.236753463745117\n      ],\n      [\n        \"▁少なからず\",\n        -12.236775398254395\n      ],\n      [\n        \"▁line\",\n        -12.236910820007324\n      ],\n      [\n        \"▁410\",\n        -12.236947059631348\n      ],\n      [\n        \"RR\",\n        -12.237013816833496\n      ],\n      [\n        \"▁セレブ\",\n        -12.237058639526367\n      ],\n      [\n        \"▁寛永\",\n        -12.23709774017334\n      ],\n      [\n        \"▁チェロ\",\n        -12.237228393554688\n      ],\n      [\n        \"ith\",\n        -12.237255096435547\n      ],\n      [\n        \"mal\",\n        -12.237686157226562\n      ],\n      [\n        \"粛\",\n        -12.237802505493164\n      ],\n      [\n        \"▁ジュリア\",\n        -12.237854957580566\n      ],\n      [\n        \"んぼ\",\n        -12.238058090209961\n      ],\n      [\n        \"▁灰色\",\n        -12.238130569458008\n      ],\n      [\n        \"▁チューブ\",\n        -12.238165855407715\n      ],\n      [\n        \"リョ\",\n        -12.238184928894043\n      ],\n      [\n        \"YouTube\",\n        -12.238249778747559\n      ],\n      [\n        \"ket\",\n        -12.238292694091797\n      ],\n      [\n        \"▁松戸\",\n        -12.238308906555176\n      ],\n      [\n        \"▁KB\",\n        -12.238337516784668\n      ],\n      [\n        \"LF\",\n        -12.238365173339844\n      ],\n      [\n        \"▁Pre\",\n        -12.238511085510254\n      ],\n      [\n        \"▁重ねた\",\n        -12.238519668579102\n      ],\n      [\n        \"ザック\",\n        -12.23861312866211\n      ],\n      [\n        \"▁貸して\",\n        -12.238801956176758\n      ],\n      [\n        \"▁ダート\",\n        -12.238866806030273\n      ],\n      [\n        \"テリ\",\n        -12.238873481750488\n      ],\n      [\n        \"▁封鎖\",\n        -12.239092826843262\n      ],\n      [\n        \"▁分担\",\n        -12.239121437072754\n      ],\n      [\n        \"▁ライフル\",\n        -12.239189147949219\n      ],\n      [\n        \"モール\",\n        -12.239195823669434\n      ],\n      [\n        \"▁因んで\",\n        -12.23920726776123\n      ],\n      [\n        \"▁イヤホン\",\n        -12.239226341247559\n      ],\n      [\n        \"プロフィール\",\n        -12.239233016967773\n      ],\n      [\n        \"年間\",\n        -12.239273071289062\n      ],\n      [\n        \"▁りんご\",\n        -12.239339828491211\n      ],\n      [\n        \"少年\",\n        -12.239389419555664\n      ],\n      [\n        \"UC\",\n        -12.239432334899902\n      ],\n      [\n        \"茎\",\n        -12.239570617675781\n      ],\n      [\n        \"▁承継\",\n        -12.239598274230957\n      ],\n      [\n        \"メロ\",\n        -12.239752769470215\n      ],\n      [\n        \"▁グリー\",\n        -12.239776611328125\n      ],\n      [\n        \"▁生誕\",\n        -12.239787101745605\n      ],\n      [\n        \"▁来院\",\n        -12.239845275878906\n      ],\n      [\n        \"▁移設\",\n        -12.239859580993652\n      ],\n      [\n        \"▁どういった\",\n        -12.240192413330078\n      ],\n      [\n        \"▁ナイロン\",\n        -12.240384101867676\n      ],\n      [\n        \"▁細く\",\n        -12.240554809570312\n      ],\n      [\n        \"▁箸\",\n        -12.240555763244629\n      ],\n      [\n        \"▁遅れた\",\n        -12.240593910217285\n      ],\n      [\n        \"平日\",\n        -12.240612983703613\n      ],\n      [\n        \"▁いわば\",\n        -12.240789413452148\n      ],\n      [\n        \"▁こみ\",\n        -12.24083423614502\n      ],\n      [\n        \"▁鳥居\",\n        -12.240851402282715\n      ],\n      [\n        \"▁氷河\",\n        -12.241079330444336\n      ],\n      [\n        \"▁脅迫\",\n        -12.241164207458496\n      ],\n      [\n        \"時代\",\n        -12.241320610046387\n      ],\n      [\n        \"fu\",\n        -12.241323471069336\n      ],\n      [\n        \"cl\",\n        -12.241440773010254\n      ],\n      [\n        \"ウオ\",\n        -12.241543769836426\n      ],\n      [\n        \"▁すご\",\n        -12.241559028625488\n      ],\n      [\n        \"▁軍艦\",\n        -12.241569519042969\n      ],\n      [\n        \"緯\",\n        -12.241593360900879\n      ],\n      [\n        \"▁des\",\n        -12.241722106933594\n      ],\n      [\n        \"▁収める\",\n        -12.24191665649414\n      ],\n      [\n        \"擬\",\n        -12.242016792297363\n      ],\n      [\n        \"IR\",\n        -12.24205207824707\n      ],\n      [\n        \"▁MOD\",\n        -12.242210388183594\n      ],\n      [\n        \"▁Up\",\n        -12.242348670959473\n      ],\n      [\n        \"▁移って\",\n        -12.242447853088379\n      ],\n      [\n        \"▁見込ま\",\n        -12.242508888244629\n      ],\n      [\n        \"▁最多の\",\n        -12.24254035949707\n      ],\n      [\n        \"▁募金\",\n        -12.242622375488281\n      ],\n      [\n        \"eu\",\n        -12.24262523651123\n      ],\n      [\n        \"拍\",\n        -12.242685317993164\n      ],\n      [\n        \"▁アルカ\",\n        -12.242706298828125\n      ],\n      [\n        \"▁萬\",\n        -12.242737770080566\n      ],\n      [\n        \"zo\",\n        -12.242740631103516\n      ],\n      [\n        \"▁いっ\",\n        -12.242776870727539\n      ],\n      [\n        \"キャリア\",\n        -12.242892265319824\n      ],\n      [\n        \"▁冷静に\",\n        -12.242910385131836\n      ],\n      [\n        \"▁王様\",\n        -12.242912292480469\n      ],\n      [\n        \"▁一律\",\n        -12.242984771728516\n      ],\n      [\n        \"▁自力\",\n        -12.2430419921875\n      ],\n      [\n        \"▁サスペンション\",\n        -12.243120193481445\n      ],\n      [\n        \"▁寒く\",\n        -12.243151664733887\n      ],\n      [\n        \"シアン\",\n        -12.243326187133789\n      ],\n      [\n        \"▁スマイル\",\n        -12.243402481079102\n      ],\n      [\n        \"賊\",\n        -12.243468284606934\n      ],\n      [\n        \"▁スイ\",\n        -12.243517875671387\n      ],\n      [\n        \"分類\",\n        -12.243539810180664\n      ],\n      [\n        \"合って\",\n        -12.243555068969727\n      ],\n      [\n        \"▁やむ\",\n        -12.243558883666992\n      ],\n      [\n        \"▁代用\",\n        -12.243592262268066\n      ],\n      [\n        \"▁高圧\",\n        -12.2437105178833\n      ],\n      [\n        \"▁気付いた\",\n        -12.243917465209961\n      ],\n      [\n        \"▁設けた\",\n        -12.243925094604492\n      ],\n      [\n        \"▁微笑\",\n        -12.244036674499512\n      ],\n      [\n        \"十五\",\n        -12.24406909942627\n      ],\n      [\n        \"▁ダイヤル\",\n        -12.244084358215332\n      ],\n      [\n        \"▁質疑\",\n        -12.24410343170166\n      ],\n      [\n        \"韓\",\n        -12.244154930114746\n      ],\n      [\n        \"菓\",\n        -12.244242668151855\n      ],\n      [\n        \"▁停滞\",\n        -12.24435043334961\n      ],\n      [\n        \"▁コス\",\n        -12.244366645812988\n      ],\n      [\n        \"どうぞ\",\n        -12.244399070739746\n      ],\n      [\n        \"▁原始\",\n        -12.244430541992188\n      ],\n      [\n        \"貌\",\n        -12.244439125061035\n      ],\n      [\n        \"▁くれたり\",\n        -12.244502067565918\n      ],\n      [\n        \"▁引き起こ\",\n        -12.244543075561523\n      ],\n      [\n        \"▁Watch\",\n        -12.24467658996582\n      ],\n      [\n        \"▁漫才\",\n        -12.244712829589844\n      ],\n      [\n        \"葺\",\n        -12.244712829589844\n      ],\n      [\n        \"涼\",\n        -12.24494457244873\n      ],\n      [\n        \"▁高岡\",\n        -12.244973182678223\n      ],\n      [\n        \"ラボ\",\n        -12.24500846862793\n      ],\n      [\n        \"▁pp\",\n        -12.245095252990723\n      ],\n      [\n        \"パワー\",\n        -12.245165824890137\n      ],\n      [\n        \"▁OR\",\n        -12.245182037353516\n      ],\n      [\n        \"脱毛\",\n        -12.245345115661621\n      ],\n      [\n        \"▁コンディション\",\n        -12.245572090148926\n      ],\n      [\n        \"ラーズ\",\n        -12.245704650878906\n      ],\n      [\n        \"拳\",\n        -12.245755195617676\n      ],\n      [\n        \"▁雛\",\n        -12.246228218078613\n      ],\n      [\n        \"▁惚れ\",\n        -12.246353149414062\n      ],\n      [\n        \"マート\",\n        -12.246528625488281\n      ],\n      [\n        \"▁屈指\",\n        -12.246588706970215\n      ],\n      [\n        \"bor\",\n        -12.246681213378906\n      ],\n      [\n        \"▁洗う\",\n        -12.246768951416016\n      ],\n      [\n        \"ホームページ\",\n        -12.24677848815918\n      ],\n      [\n        \"▁ペンシルベニア\",\n        -12.246854782104492\n      ],\n      [\n        \"▁絵師\",\n        -12.24701976776123\n      ],\n      [\n        \"▁不安な\",\n        -12.247185707092285\n      ],\n      [\n        \"▁雑談\",\n        -12.247214317321777\n      ],\n      [\n        \"▁ウサギ\",\n        -12.247326850891113\n      ],\n      [\n        \"▁Direct\",\n        -12.247332572937012\n      ],\n      [\n        \"▁SW\",\n        -12.247483253479004\n      ],\n      [\n        \"佐藤\",\n        -12.247483253479004\n      ],\n      [\n        \"▁顔面\",\n        -12.247489929199219\n      ],\n      [\n        \"▁外れ\",\n        -12.247564315795898\n      ],\n      [\n        \"▁政界\",\n        -12.247729301452637\n      ],\n      [\n        \"^^\",\n        -12.24775505065918\n      ],\n      [\n        \"▁復刻\",\n        -12.24781322479248\n      ],\n      [\n        \"▁プレッシャー\",\n        -12.248063087463379\n      ],\n      [\n        \"▁茶色\",\n        -12.24813461303711\n      ],\n      [\n        \"▁ユーゴスラビア\",\n        -12.24819564819336\n      ],\n      [\n        \"ery\",\n        -12.248230934143066\n      ],\n      [\n        \"操\",\n        -12.248249053955078\n      ],\n      [\n        \"▁痕跡\",\n        -12.248274803161621\n      ],\n      [\n        \"▁カルロス\",\n        -12.248333930969238\n      ],\n      [\n        \"テュ\",\n        -12.248403549194336\n      ],\n      [\n        \"いき\",\n        -12.248404502868652\n      ],\n      [\n        \"▁的であった\",\n        -12.248476028442383\n      ],\n      [\n        \"▁喋\",\n        -12.248481750488281\n      ],\n      [\n        \"▁嫌だ\",\n        -12.248557090759277\n      ],\n      [\n        \"ティエ\",\n        -12.24856948852539\n      ],\n      [\n        \"まさ\",\n        -12.248838424682617\n      ],\n      [\n        \"▁吾\",\n        -12.248940467834473\n      ],\n      [\n        \"▁一門\",\n        -12.248955726623535\n      ],\n      [\n        \"労働\",\n        -12.249001502990723\n      ],\n      [\n        \"▁インスタグラム\",\n        -12.249029159545898\n      ],\n      [\n        \"ジュール\",\n        -12.249089241027832\n      ],\n      [\n        \"作詞\",\n        -12.249098777770996\n      ],\n      [\n        \"▁ワーナー\",\n        -12.249136924743652\n      ],\n      [\n        \"▁学力\",\n        -12.24915885925293\n      ],\n      [\n        \"oh\",\n        -12.24935531616211\n      ],\n      [\n        \"▁Opera\",\n        -12.249369621276855\n      ],\n      [\n        \"▁聖人\",\n        -12.249373435974121\n      ],\n      [\n        \"ジュー\",\n        -12.249380111694336\n      ],\n      [\n        \"▁砕\",\n        -12.249396324157715\n      ],\n      [\n        \"▁トピック\",\n        -12.249402046203613\n      ],\n      [\n        \"▁アテネ\",\n        -12.249510765075684\n      ],\n      [\n        \"▁中尉\",\n        -12.249529838562012\n      ],\n      [\n        \"mes\",\n        -12.249726295471191\n      ],\n      [\n        \"えい\",\n        -12.250041961669922\n      ],\n      [\n        \"▁アレン\",\n        -12.250107765197754\n      ],\n      [\n        \"ゲスト\",\n        -12.250153541564941\n      ],\n      [\n        \"▁没後\",\n        -12.250248908996582\n      ],\n      [\n        \"▁大工\",\n        -12.250267028808594\n      ],\n      [\n        \"▁フォックス\",\n        -12.250285148620605\n      ],\n      [\n        \"▁後楽園\",\n        -12.250492095947266\n      ],\n      [\n        \"▁真田\",\n        -12.250593185424805\n      ],\n      [\n        \"▁ムハンマド\",\n        -12.250866889953613\n      ],\n      [\n        \"▁恵比寿\",\n        -12.250985145568848\n      ],\n      [\n        \"▁Network\",\n        -12.251004219055176\n      ],\n      [\n        \"▁っ子\",\n        -12.251077651977539\n      ],\n      [\n        \"ARS\",\n        -12.251100540161133\n      ],\n      [\n        \"▁喜ぶ\",\n        -12.251100540161133\n      ],\n      [\n        \"▁マナ\",\n        -12.251103401184082\n      ],\n      [\n        \"アニ\",\n        -12.251142501831055\n      ],\n      [\n        \"▁伊賀\",\n        -12.251455307006836\n      ],\n      [\n        \"↓\",\n        -12.25147819519043\n      ],\n      [\n        \"▁局所\",\n        -12.251673698425293\n      ],\n      [\n        \"▁Ltd\",\n        -12.251728057861328\n      ],\n      [\n        \"▁下さった\",\n        -12.252103805541992\n      ],\n      [\n        \"▁好奇心\",\n        -12.252220153808594\n      ],\n      [\n        \"群馬\",\n        -12.25222396850586\n      ],\n      [\n        \"▁美味しかった\",\n        -12.252227783203125\n      ],\n      [\n        \"▁相変わらず\",\n        -12.25231647491455\n      ],\n      [\n        \"▁外して\",\n        -12.252497673034668\n      ],\n      [\n        \"▁分館\",\n        -12.25284481048584\n      ],\n      [\n        \"スマートフォン\",\n        -12.252846717834473\n      ],\n      [\n        \"特記\",\n        -12.252856254577637\n      ],\n      [\n        \"▁てつ\",\n        -12.252889633178711\n      ],\n      [\n        \"仙台\",\n        -12.252989768981934\n      ],\n      [\n        \"▁トリオ\",\n        -12.253083229064941\n      ],\n      [\n        \"▁亡くなって\",\n        -12.253087043762207\n      ],\n      [\n        \"▁一新\",\n        -12.253100395202637\n      ],\n      [\n        \"▁mp\",\n        -12.253127098083496\n      ],\n      [\n        \"▁今夜\",\n        -12.253267288208008\n      ],\n      [\n        \"これほど\",\n        -12.253291130065918\n      ],\n      [\n        \"▁美白\",\n        -12.253334045410156\n      ],\n      [\n        \"▁堤\",\n        -12.25337028503418\n      ],\n      [\n        \"槽\",\n        -12.253433227539062\n      ],\n      [\n        \"▁ついで\",\n        -12.253463745117188\n      ],\n      [\n        \"ドゥー\",\n        -12.253470420837402\n      ],\n      [\n        \"▁破った\",\n        -12.253645896911621\n      ],\n      [\n        \"▁レイヤー\",\n        -12.253691673278809\n      ],\n      [\n        \"▁一戸建て\",\n        -12.253703117370605\n      ],\n      [\n        \"▁TS\",\n        -12.253750801086426\n      ],\n      [\n        \"▁キーパー\",\n        -12.25390625\n      ],\n      [\n        \"▁懐かしい\",\n        -12.25395393371582\n      ],\n      [\n        \"▁良し\",\n        -12.253957748413086\n      ],\n      [\n        \"▁過失\",\n        -12.253999710083008\n      ],\n      [\n        \"▁半額\",\n        -12.254167556762695\n      ],\n      [\n        \"▁特産\",\n        -12.254287719726562\n      ],\n      [\n        \"▁おまえ\",\n        -12.25433349609375\n      ],\n      [\n        \"▁注ぐ\",\n        -12.25438117980957\n      ],\n      [\n        \"▁主将\",\n        -12.254483222961426\n      ],\n      [\n        \"連邦\",\n        -12.254535675048828\n      ],\n      [\n        \"▁大丈夫な\",\n        -12.254590034484863\n      ],\n      [\n        \"▁マレー\",\n        -12.254647254943848\n      ],\n      [\n        \"画面\",\n        -12.254653930664062\n      ],\n      [\n        \"▁留まった\",\n        -12.254778861999512\n      ],\n      [\n        \"vers\",\n        -12.254904747009277\n      ],\n      [\n        \"▁台地\",\n        -12.254939079284668\n      ],\n      [\n        \"▁逃走\",\n        -12.254972457885742\n      ],\n      [\n        \"ッリ\",\n        -12.255030632019043\n      ],\n      [\n        \"▁ズレ\",\n        -12.25505256652832\n      ],\n      [\n        \"▁うな\",\n        -12.25507926940918\n      ],\n      [\n        \"同様に\",\n        -12.255094528198242\n      ],\n      [\n        \"▁Fire\",\n        -12.25512409210205\n      ],\n      [\n        \"▁近づけ\",\n        -12.255218505859375\n      ],\n      [\n        \"▁麻生\",\n        -12.255302429199219\n      ],\n      [\n        \"▁村田\",\n        -12.255305290222168\n      ],\n      [\n        \"▁取り巻く\",\n        -12.2553129196167\n      ],\n      [\n        \"▁本願寺\",\n        -12.2553129196167\n      ],\n      [\n        \"▁的であり\",\n        -12.255313873291016\n      ],\n      [\n        \"▁信州\",\n        -12.255317687988281\n      ],\n      [\n        \"lex\",\n        -12.255348205566406\n      ],\n      [\n        \"▁近接\",\n        -12.25535774230957\n      ],\n      [\n        \"▁直接の\",\n        -12.25544548034668\n      ],\n      [\n        \"▁幸運\",\n        -12.255459785461426\n      ],\n      [\n        \"フィア\",\n        -12.255636215209961\n      ],\n      [\n        \"▁親しみ\",\n        -12.255685806274414\n      ],\n      [\n        \"▁太子\",\n        -12.255768775939941\n      ],\n      [\n        \"▁弘前\",\n        -12.255778312683105\n      ],\n      [\n        \"ven\",\n        -12.255842208862305\n      ],\n      [\n        \"▁忙しく\",\n        -12.255904197692871\n      ],\n      [\n        \"却\",\n        -12.255941390991211\n      ],\n      [\n        \"▁周回\",\n        -12.255965232849121\n      ],\n      [\n        \"▁撃ち\",\n        -12.25601577758789\n      ],\n      [\n        \"▁浮き\",\n        -12.256046295166016\n      ],\n      [\n        \"▁USS\",\n        -12.256196975708008\n      ],\n      [\n        \"▁不妊\",\n        -12.256285667419434\n      ],\n      [\n        \"my\",\n        -12.256355285644531\n      ],\n      [\n        \"▁マニ\",\n        -12.256449699401855\n      ],\n      [\n        \"▁高額な\",\n        -12.256523132324219\n      ],\n      [\n        \"ラック\",\n        -12.256525993347168\n      ],\n      [\n        \"▁ウッ\",\n        -12.256529808044434\n      ],\n      [\n        \"▁模倣\",\n        -12.256552696228027\n      ],\n      [\n        \"付いて\",\n        -12.256613731384277\n      ],\n      [\n        \"▁購買\",\n        -12.256800651550293\n      ],\n      [\n        \"▁ハーバード\",\n        -12.256834030151367\n      ],\n      [\n        \"▁単品\",\n        -12.256916999816895\n      ],\n      [\n        \"捕\",\n        -12.256954193115234\n      ],\n      [\n        \"▁吊\",\n        -12.256957054138184\n      ],\n      [\n        \"せつ\",\n        -12.256963729858398\n      ],\n      [\n        \"▁年月\",\n        -12.256982803344727\n      ],\n      [\n        \"まさに\",\n        -12.257193565368652\n      ],\n      [\n        \"right\",\n        -12.25725269317627\n      ],\n      [\n        \"▁ギリギリ\",\n        -12.25729751586914\n      ],\n      [\n        \"▁引いた\",\n        -12.257370948791504\n      ],\n      [\n        \"エレ\",\n        -12.25742244720459\n      ],\n      [\n        \"▁online\",\n        -12.257454872131348\n      ],\n      [\n        \"TRA\",\n        -12.257514953613281\n      ],\n      [\n        \"▁水曜\",\n        -12.257645606994629\n      ],\n      [\n        \"rs\",\n        -12.257671356201172\n      ],\n      [\n        \"▁亡くなり\",\n        -12.257673263549805\n      ],\n      [\n        \"▁張って\",\n        -12.257840156555176\n      ],\n      [\n        \"▁大丸\",\n        -12.257963180541992\n      ],\n      [\n        \"▁豪華な\",\n        -12.258033752441406\n      ],\n      [\n        \"pon\",\n        -12.258171081542969\n      ],\n      [\n        \"▁FR\",\n        -12.258177757263184\n      ],\n      [\n        \"スン\",\n        -12.258232116699219\n      ],\n      [\n        \"▁物価\",\n        -12.258430480957031\n      ],\n      [\n        \"▁ネパール\",\n        -12.258455276489258\n      ],\n      [\n        \"▁摩\",\n        -12.258463859558105\n      ],\n      [\n        \"AKE\",\n        -12.258522987365723\n      ],\n      [\n        \"▁遅れる\",\n        -12.258530616760254\n      ],\n      [\n        \"パール\",\n        -12.258551597595215\n      ],\n      [\n        \"▁伊丹\",\n        -12.25872802734375\n      ],\n      [\n        \"ect\",\n        -12.258854866027832\n      ],\n      [\n        \"▁卸売\",\n        -12.258912086486816\n      ],\n      [\n        \"▁硬貨\",\n        -12.25955581665039\n      ],\n      [\n        \"▁\",\n        -12.259661674499512\n      ],\n      [\n        \"▁ぶっ\",\n        -12.259748458862305\n      ],\n      [\n        \"aga\",\n        -12.2598237991333\n      ],\n      [\n        \"▁ビリー\",\n        -12.25982666015625\n      ],\n      [\n        \"▁聴覚\",\n        -12.26006031036377\n      ],\n      [\n        \"ロワ\",\n        -12.260143280029297\n      ],\n      [\n        \"▁メルセデス\",\n        -12.260156631469727\n      ],\n      [\n        \"▁レンガ\",\n        -12.260177612304688\n      ],\n      [\n        \"▁淫\",\n        -12.260272026062012\n      ],\n      [\n        \"▁ベッ\",\n        -12.260428428649902\n      ],\n      [\n        \"▁補う\",\n        -12.260478973388672\n      ],\n      [\n        \"▁厳重\",\n        -12.260485649108887\n      ],\n      [\n        \"▁手袋\",\n        -12.260541915893555\n      ],\n      [\n        \"▁頼朝\",\n        -12.260632514953613\n      ],\n      [\n        \"ND\",\n        -12.260724067687988\n      ],\n      [\n        \"▁ティン\",\n        -12.260787963867188\n      ],\n      [\n        \"▁帯び\",\n        -12.261004447937012\n      ],\n      [\n        \"▁プロバイダー\",\n        -12.26112174987793\n      ],\n      [\n        \"arch\",\n        -12.261162757873535\n      ],\n      [\n        \"暑\",\n        -12.261207580566406\n      ],\n      [\n        \"▁見合い\",\n        -12.261305809020996\n      ],\n      [\n        \"▁出かける\",\n        -12.261429786682129\n      ],\n      [\n        \"シド\",\n        -12.261476516723633\n      ],\n      [\n        \"▁歪み\",\n        -12.261536598205566\n      ],\n      [\n        \"ns\",\n        -12.261618614196777\n      ],\n      [\n        \"▁貯め\",\n        -12.261618614196777\n      ],\n      [\n        \"▁元帥\",\n        -12.261808395385742\n      ],\n      [\n        \"▁薪\",\n        -12.26182746887207\n      ],\n      [\n        \"ato\",\n        -12.261855125427246\n      ],\n      [\n        \"▁書道\",\n        -12.261866569519043\n      ],\n      [\n        \"▁かねて\",\n        -12.2618989944458\n      ],\n      [\n        \"▁取り戻し\",\n        -12.262018203735352\n      ],\n      [\n        \"▁森田\",\n        -12.262125015258789\n      ],\n      [\n        \"ディアン\",\n        -12.262141227722168\n      ],\n      [\n        \"蛮\",\n        -12.262275695800781\n      ],\n      [\n        \"閑\",\n        -12.26252555847168\n      ],\n      [\n        \"▁Ga\",\n        -12.262535095214844\n      ],\n      [\n        \"国立\",\n        -12.262578964233398\n      ],\n      [\n        \"▁冊子\",\n        -12.262761116027832\n      ],\n      [\n        \"ATE\",\n        -12.262972831726074\n      ],\n      [\n        \"シェア\",\n        -12.26305866241455\n      ],\n      [\n        \"▁Team\",\n        -12.263144493103027\n      ],\n      [\n        \"▁MAN\",\n        -12.263219833374023\n      ],\n      [\n        \"▁Ko\",\n        -12.263364791870117\n      ],\n      [\n        \"裁判\",\n        -12.263396263122559\n      ],\n      [\n        \"▁湧\",\n        -12.263442039489746\n      ],\n      [\n        \"ダール\",\n        -12.263649940490723\n      ],\n      [\n        \"▁緊\",\n        -12.263655662536621\n      ],\n      [\n        \"▁ダメだ\",\n        -12.263882637023926\n      ],\n      [\n        \"▁面して\",\n        -12.263910293579102\n      ],\n      [\n        \"▁キミ\",\n        -12.263992309570312\n      ],\n      [\n        \"▁ブロンテ\",\n        -12.264131546020508\n      ],\n      [\n        \"とくに\",\n        -12.264148712158203\n      ],\n      [\n        \"▁クラウン\",\n        -12.264165878295898\n      ],\n      [\n        \"▁祥\",\n        -12.264222145080566\n      ],\n      [\n        \"曇\",\n        -12.264394760131836\n      ],\n      [\n        \"▁ビキニ\",\n        -12.264524459838867\n      ],\n      [\n        \"▁敗れる\",\n        -12.264625549316406\n      ],\n      [\n        \"▁嫉妬\",\n        -12.264649391174316\n      ],\n      [\n        \"▁終始\",\n        -12.264679908752441\n      ],\n      [\n        \"弦\",\n        -12.264721870422363\n      ],\n      [\n        \"▁空調\",\n        -12.264817237854004\n      ],\n      [\n        \"▁品物\",\n        -12.264856338500977\n      ],\n      [\n        \"▁居た\",\n        -12.264891624450684\n      ],\n      [\n        \"less\",\n        -12.265054702758789\n      ],\n      [\n        \"▁Mobile\",\n        -12.26508617401123\n      ],\n      [\n        \"こない\",\n        -12.265116691589355\n      ],\n      [\n        \"▁富田\",\n        -12.265164375305176\n      ],\n      [\n        \"ふう\",\n        -12.265179634094238\n      ],\n      [\n        \"▁廣\",\n        -12.265242576599121\n      ],\n      [\n        \"覇\",\n        -12.265254974365234\n      ],\n      [\n        \"▁戸籍\",\n        -12.265360832214355\n      ],\n      [\n        \"▁没した\",\n        -12.26537036895752\n      ],\n      [\n        \"▁190\",\n        -12.265388488769531\n      ],\n      [\n        \"▁虫歯\",\n        -12.265471458435059\n      ],\n      [\n        \"こす\",\n        -12.265498161315918\n      ],\n      [\n        \"ift\",\n        -12.265509605407715\n      ],\n      [\n        \"条件\",\n        -12.265552520751953\n      ],\n      [\n        \"▁ローダー\",\n        -12.26560115814209\n      ],\n      [\n        \"担当\",\n        -12.265670776367188\n      ],\n      [\n        \"▁Dream\",\n        -12.265789031982422\n      ],\n      [\n        \"▁常任\",\n        -12.265849113464355\n      ],\n      [\n        \"▁qu\",\n        -12.266084671020508\n      ],\n      [\n        \"▁よば\",\n        -12.26617431640625\n      ],\n      [\n        \"▁サミット\",\n        -12.266368865966797\n      ],\n      [\n        \"—\",\n        -12.266378402709961\n      ],\n      [\n        \"▁ずいぶん\",\n        -12.26652717590332\n      ],\n      [\n        \"▁単身\",\n        -12.266770362854004\n      ],\n      [\n        \"▁洞\",\n        -12.266844749450684\n      ],\n      [\n        \"▁クラッシュ\",\n        -12.266863822937012\n      ],\n      [\n        \"mas\",\n        -12.266867637634277\n      ],\n      [\n        \"▁牙\",\n        -12.266935348510742\n      ],\n      [\n        \"uck\",\n        -12.266940116882324\n      ],\n      [\n        \"ule\",\n        -12.266948699951172\n      ],\n      [\n        \"▁靖\",\n        -12.267006874084473\n      ],\n      [\n        \"菅\",\n        -12.267016410827637\n      ],\n      [\n        \"1934\",\n        -12.267059326171875\n      ],\n      [\n        \"▁サングラス\",\n        -12.267098426818848\n      ],\n      [\n        \"一緒に\",\n        -12.267281532287598\n      ],\n      [\n        \"バッグ\",\n        -12.267298698425293\n      ],\n      [\n        \"▁元気な\",\n        -12.267315864562988\n      ],\n      [\n        \"mm\",\n        -12.267361640930176\n      ],\n      [\n        \"▁特命\",\n        -12.2673921585083\n      ],\n      [\n        \"▁貰って\",\n        -12.267531394958496\n      ],\n      [\n        \"▁めで\",\n        -12.267790794372559\n      ],\n      [\n        \"▁まえ\",\n        -12.267830848693848\n      ],\n      [\n        \"▁斗\",\n        -12.268009185791016\n      ],\n      [\n        \"▁002\",\n        -12.268080711364746\n      ],\n      [\n        \"▁物産\",\n        -12.268193244934082\n      ],\n      [\n        \"▁タービン\",\n        -12.268220901489258\n      ],\n      [\n        \"去\",\n        -12.26839542388916\n      ],\n      [\n        \"▁ウエア\",\n        -12.26856803894043\n      ],\n      [\n        \"瀧\",\n        -12.268659591674805\n      ],\n      [\n        \"バンク\",\n        -12.268865585327148\n      ],\n      [\n        \"▁いつまで\",\n        -12.26907730102539\n      ],\n      [\n        \"▁手助け\",\n        -12.269288063049316\n      ],\n      [\n        \"▁進軍\",\n        -12.269294738769531\n      ],\n      [\n        \"フス\",\n        -12.269319534301758\n      ],\n      [\n        \"▁やめる\",\n        -12.269351959228516\n      ],\n      [\n        \"▁彦\",\n        -12.269465446472168\n      ],\n      [\n        \"セブン\",\n        -12.269501686096191\n      ],\n      [\n        \"▁確実な\",\n        -12.269535064697266\n      ],\n      [\n        \"▁ミラ\",\n        -12.269536972045898\n      ],\n      [\n        \"国道\",\n        -12.269554138183594\n      ],\n      [\n        \"ORI\",\n        -12.269660949707031\n      ],\n      [\n        \"プティ\",\n        -12.269820213317871\n      ],\n      [\n        \"▁御所\",\n        -12.269919395446777\n      ],\n      [\n        \"▁先週\",\n        -12.26996898651123\n      ],\n      [\n        \"奉\",\n        -12.270041465759277\n      ],\n      [\n        \"▁ポータブル\",\n        -12.270042419433594\n      ],\n      [\n        \"▁各駅\",\n        -12.270094871520996\n      ],\n      [\n        \"▁すばらしい\",\n        -12.270153045654297\n      ],\n      [\n        \"▁外食\",\n        -12.270153999328613\n      ],\n      [\n        \"▁ハーン\",\n        -12.270242691040039\n      ],\n      [\n        \"べる\",\n        -12.270270347595215\n      ],\n      [\n        \"しっかり\",\n        -12.270320892333984\n      ],\n      [\n        \"▁その先\",\n        -12.27047061920166\n      ],\n      [\n        \"▁特技\",\n        -12.270683288574219\n      ],\n      [\n        \"ッセン\",\n        -12.270768165588379\n      ],\n      [\n        \"▁寝室\",\n        -12.271096229553223\n      ],\n      [\n        \"▁マネ\",\n        -12.271164894104004\n      ],\n      [\n        \"▁超過\",\n        -12.271164894104004\n      ],\n      [\n        \"▁怪しい\",\n        -12.27132511138916\n      ],\n      [\n        \"MON\",\n        -12.271347045898438\n      ],\n      [\n        \"▁融\",\n        -12.271428108215332\n      ],\n      [\n        \"▁健全な\",\n        -12.27143669128418\n      ],\n      [\n        \"禅\",\n        -12.27153205871582\n      ],\n      [\n        \"▁表し\",\n        -12.271551132202148\n      ],\n      [\n        \"ネコ\",\n        -12.271564483642578\n      ],\n      [\n        \"▁子爵\",\n        -12.271588325500488\n      ],\n      [\n        \"鞭\",\n        -12.271597862243652\n      ],\n      [\n        \"塗\",\n        -12.27161693572998\n      ],\n      [\n        \"▁激怒\",\n        -12.271716117858887\n      ],\n      [\n        \"ちょうど\",\n        -12.271722793579102\n      ],\n      [\n        \"oth\",\n        -12.2717866897583\n      ],\n      [\n        \"▁取り除く\",\n        -12.271803855895996\n      ],\n      [\n        \"▁酷い\",\n        -12.271808624267578\n      ],\n      [\n        \"べつ\",\n        -12.27188491821289\n      ],\n      [\n        \"▁直感\",\n        -12.272018432617188\n      ],\n      [\n        \"▁混在\",\n        -12.272132873535156\n      ],\n      [\n        \"cent\",\n        -12.272261619567871\n      ],\n      [\n        \"RB\",\n        -12.272313117980957\n      ],\n      [\n        \"▁PP\",\n        -12.272329330444336\n      ],\n      [\n        \"バース\",\n        -12.272333145141602\n      ],\n      [\n        \"▁赤本\",\n        -12.272335052490234\n      ],\n      [\n        \"▁何者\",\n        -12.27236557006836\n      ],\n      [\n        \"▁HC\",\n        -12.272394180297852\n      ],\n      [\n        \"▁頼み\",\n        -12.272443771362305\n      ],\n      [\n        \"▁鱗\",\n        -12.272501945495605\n      ],\n      [\n        \"▁云う\",\n        -12.272509574890137\n      ],\n      [\n        \"▁行政書士\",\n        -12.272560119628906\n      ],\n      [\n        \"▁報じた\",\n        -12.272686958312988\n      ],\n      [\n        \"▁魅\",\n        -12.272706031799316\n      ],\n      [\n        \"▁ギャング\",\n        -12.272915840148926\n      ],\n      [\n        \"畠\",\n        -12.273188591003418\n      ],\n      [\n        \"嶽\",\n        -12.273316383361816\n      ],\n      [\n        \"ö\",\n        -12.273442268371582\n      ],\n      [\n        \"翁\",\n        -12.273443222045898\n      ],\n      [\n        \"▁取引先\",\n        -12.2735013961792\n      ],\n      [\n        \"▁飛鳥\",\n        -12.273642539978027\n      ],\n      [\n        \"▁カモ\",\n        -12.273665428161621\n      ],\n      [\n        \"▁At\",\n        -12.273724555969238\n      ],\n      [\n        \"▁金剛\",\n        -12.273748397827148\n      ],\n      [\n        \"▁動け\",\n        -12.27389144897461\n      ],\n      [\n        \"▁積んで\",\n        -12.273932456970215\n      ],\n      [\n        \"▁ディオ\",\n        -12.274223327636719\n      ],\n      [\n        \"▁揃え\",\n        -12.274418830871582\n      ],\n      [\n        \"ction\",\n        -12.274491310119629\n      ],\n      [\n        \"▁USA\",\n        -12.274508476257324\n      ],\n      [\n        \"顎\",\n        -12.274550437927246\n      ],\n      [\n        \"▁くろ\",\n        -12.274557113647461\n      ],\n      [\n        \"▁暴動\",\n        -12.274558067321777\n      ],\n      [\n        \"こい\",\n        -12.274592399597168\n      ],\n      [\n        \"▁聖職\",\n        -12.274635314941406\n      ],\n      [\n        \"▁IWC\",\n        -12.274639129638672\n      ],\n      [\n        \"陀\",\n        -12.27470588684082\n      ],\n      [\n        \"DOM\",\n        -12.274815559387207\n      ],\n      [\n        \"▁総集編\",\n        -12.275084495544434\n      ],\n      [\n        \"ミット\",\n        -12.27517318725586\n      ],\n      [\n        \"ott\",\n        -12.275288581848145\n      ],\n      [\n        \"▁釜\",\n        -12.275510787963867\n      ],\n      [\n        \"だし\",\n        -12.275552749633789\n      ],\n      [\n        \"ゆき\",\n        -12.275565147399902\n      ],\n      [\n        \"▁過激\",\n        -12.275567054748535\n      ],\n      [\n        \"▁アクリル\",\n        -12.275633811950684\n      ],\n      [\n        \"▁分譲\",\n        -12.275660514831543\n      ],\n      [\n        \"▁とんでもない\",\n        -12.275718688964844\n      ],\n      [\n        \"▁頂上\",\n        -12.275786399841309\n      ],\n      [\n        \"nn\",\n        -12.275839805603027\n      ],\n      [\n        \"▁原告\",\n        -12.275893211364746\n      ],\n      [\n        \"ネタ\",\n        -12.275915145874023\n      ],\n      [\n        \"▁バイブ\",\n        -12.275993347167969\n      ],\n      [\n        \"ITA\",\n        -12.276098251342773\n      ],\n      [\n        \"ダック\",\n        -12.276185989379883\n      ],\n      [\n        \"▁ペイント\",\n        -12.276267051696777\n      ],\n      [\n        \"わざ\",\n        -12.276334762573242\n      ],\n      [\n        \"▁着実に\",\n        -12.276350021362305\n      ],\n      [\n        \"▁JS\",\n        -12.276424407958984\n      ],\n      [\n        \"els\",\n        -12.27642822265625\n      ],\n      [\n        \"▁YouTuber\",\n        -12.276487350463867\n      ],\n      [\n        \"▁鮮やかな\",\n        -12.276511192321777\n      ],\n      [\n        \"▁マシ\",\n        -12.276639938354492\n      ],\n      [\n        \"▁ミカ\",\n        -12.276698112487793\n      ],\n      [\n        \"▁アリゾナ\",\n        -12.276728630065918\n      ],\n      [\n        \"▁TD\",\n        -12.276732444763184\n      ],\n      [\n        \"▁閉め\",\n        -12.276912689208984\n      ],\n      [\n        \"旭\",\n        -12.276938438415527\n      ],\n      [\n        \"▁表題\",\n        -12.27694034576416\n      ],\n      [\n        \"▁供用\",\n        -12.276983261108398\n      ],\n      [\n        \"リントン\",\n        -12.277057647705078\n      ],\n      [\n        \"▁水田\",\n        -12.277200698852539\n      ],\n      [\n        \"生産\",\n        -12.27724838256836\n      ],\n      [\n        \"カフェ\",\n        -12.277284622192383\n      ],\n      [\n        \"継ぎ\",\n        -12.277300834655762\n      ],\n      [\n        \"▁音色\",\n        -12.277313232421875\n      ],\n      [\n        \"▁対峙\",\n        -12.277363777160645\n      ],\n      [\n        \"▁Har\",\n        -12.277417182922363\n      ],\n      [\n        \"▁北口\",\n        -12.27742862701416\n      ],\n      [\n        \"いちゃ\",\n        -12.277454376220703\n      ],\n      [\n        \"▁東工\",\n        -12.27757453918457\n      ],\n      [\n        \"▁浮かぶ\",\n        -12.277674674987793\n      ],\n      [\n        \"出版\",\n        -12.277979850769043\n      ],\n      [\n        \"▁ぶつけ\",\n        -12.278024673461914\n      ],\n      [\n        \"▁手頃\",\n        -12.278046607971191\n      ],\n      [\n        \"対応\",\n        -12.278047561645508\n      ],\n      [\n        \"▁カップリング\",\n        -12.278217315673828\n      ],\n      [\n        \"▁手持ち\",\n        -12.278288841247559\n      ],\n      [\n        \"”\",\n        -12.278341293334961\n      ],\n      [\n        \"▁入間\",\n        -12.278348922729492\n      ],\n      [\n        \"▁苛\",\n        -12.27837085723877\n      ],\n      [\n        \"▁青空\",\n        -12.278520584106445\n      ],\n      [\n        \"▁白鳥\",\n        -12.278609275817871\n      ],\n      [\n        \"▁サンダル\",\n        -12.27861213684082\n      ],\n      [\n        \"▁Res\",\n        -12.278743743896484\n      ],\n      [\n        \"▁可動\",\n        -12.278989791870117\n      ],\n      [\n        \"▁アタ\",\n        -12.27900218963623\n      ],\n      [\n        \"▁あっさり\",\n        -12.279009819030762\n      ],\n      [\n        \"エリア\",\n        -12.27901840209961\n      ],\n      [\n        \"▁もたらし\",\n        -12.279029846191406\n      ],\n      [\n        \"センス\",\n        -12.279125213623047\n      ],\n      [\n        \"▁築く\",\n        -12.279128074645996\n      ],\n      [\n        \"▁履行\",\n        -12.279132843017578\n      ],\n      [\n        \"▁奉納\",\n        -12.279191017150879\n      ],\n      [\n        \"▁幕張\",\n        -12.27922534942627\n      ],\n      [\n        \"越し\",\n        -12.279393196105957\n      ],\n      [\n        \"ステージ\",\n        -12.27939510345459\n      ],\n      [\n        \"▁もらおう\",\n        -12.27940559387207\n      ],\n      [\n        \"▁ジェリー\",\n        -12.279458045959473\n      ],\n      [\n        \"▁フォート\",\n        -12.279542922973633\n      ],\n      [\n        \"▁皇室\",\n        -12.279623985290527\n      ],\n      [\n        \"mit\",\n        -12.279777526855469\n      ],\n      [\n        \"▁確かめ\",\n        -12.280029296875\n      ],\n      [\n        \"1935\",\n        -12.28003978729248\n      ],\n      [\n        \"▁何かと\",\n        -12.280157089233398\n      ],\n      [\n        \"▁下さ\",\n        -12.280244827270508\n      ],\n      [\n        \"▁ヒューマン\",\n        -12.280254364013672\n      ],\n      [\n        \"▁ロッド\",\n        -12.280364990234375\n      ],\n      [\n        \"▁失調\",\n        -12.28064250946045\n      ],\n      [\n        \"▁議事\",\n        -12.28066349029541\n      ],\n      [\n        \"ウロ\",\n        -12.280673027038574\n      ],\n      [\n        \"目的\",\n        -12.28072452545166\n      ],\n      [\n        \"To\",\n        -12.280738830566406\n      ],\n      [\n        \"大型\",\n        -12.280774116516113\n      ],\n      [\n        \"▁無駄な\",\n        -12.280855178833008\n      ],\n      [\n        \"▁ノード\",\n        -12.28093147277832\n      ],\n      [\n        \"曽根\",\n        -12.280932426452637\n      ],\n      [\n        \"▁Mod\",\n        -12.281020164489746\n      ],\n      [\n        \"▁奄美\",\n        -12.281042098999023\n      ],\n      [\n        \"▁側近\",\n        -12.281140327453613\n      ],\n      [\n        \"▁京急\",\n        -12.281194686889648\n      ],\n      [\n        \"▁貧しい\",\n        -12.28129768371582\n      ],\n      [\n        \"▁ベール\",\n        -12.281302452087402\n      ],\n      [\n        \"▁満ちた\",\n        -12.281475067138672\n      ],\n      [\n        \"▁部数\",\n        -12.281575202941895\n      ],\n      [\n        \"歩き\",\n        -12.281593322753906\n      ],\n      [\n        \"▁当てる\",\n        -12.2816162109375\n      ],\n      [\n        \"HP\",\n        -12.281636238098145\n      ],\n      [\n        \"▁カセット\",\n        -12.281673431396484\n      ],\n      [\n        \"emo\",\n        -12.281758308410645\n      ],\n      [\n        \"▁高地\",\n        -12.281842231750488\n      ],\n      [\n        \"▁伴奏\",\n        -12.281947135925293\n      ],\n      [\n        \"▁ミリ\",\n        -12.281951904296875\n      ],\n      [\n        \"▁はじまり\",\n        -12.281966209411621\n      ],\n      [\n        \"碑\",\n        -12.28219985961914\n      ],\n      [\n        \"▁系譜\",\n        -12.282207489013672\n      ],\n      [\n        \"▁並み\",\n        -12.28221607208252\n      ],\n      [\n        \"投資\",\n        -12.282217025756836\n      ],\n      [\n        \"▁おおよそ\",\n        -12.282232284545898\n      ],\n      [\n        \"▁培養\",\n        -12.282459259033203\n      ],\n      [\n        \"▁しまったら\",\n        -12.2825288772583\n      ],\n      [\n        \"OU\",\n        -12.282537460327148\n      ],\n      [\n        \"フィラ\",\n        -12.282682418823242\n      ],\n      [\n        \"▁咲いて\",\n        -12.28281021118164\n      ],\n      [\n        \"▁オバマ\",\n        -12.282824516296387\n      ],\n      [\n        \"▁res\",\n        -12.28285026550293\n      ],\n      [\n        \"tle\",\n        -12.282951354980469\n      ],\n      [\n        \"▁夢中に\",\n        -12.282953262329102\n      ],\n      [\n        \"▁朴\",\n        -12.28308391571045\n      ],\n      [\n        \"▁1902\",\n        -12.283285140991211\n      ],\n      [\n        \"▁勤めて\",\n        -12.28329849243164\n      ],\n      [\n        \"uz\",\n        -12.283495903015137\n      ],\n      [\n        \"▁発刊\",\n        -12.283608436584473\n      ],\n      [\n        \"▁効く\",\n        -12.283615112304688\n      ],\n      [\n        \"▁伝わり\",\n        -12.283759117126465\n      ],\n      [\n        \"我が家\",\n        -12.283857345581055\n      ],\n      [\n        \"▁西郷\",\n        -12.283907890319824\n      ],\n      [\n        \"▁蜂\",\n        -12.28406047821045\n      ],\n      [\n        \"▁過酷な\",\n        -12.284098625183105\n      ],\n      [\n        \"▁点灯\",\n        -12.284128189086914\n      ],\n      [\n        \"unt\",\n        -12.284194946289062\n      ],\n      [\n        \"近代\",\n        -12.284238815307617\n      ],\n      [\n        \"▁貰う\",\n        -12.284353256225586\n      ],\n      [\n        \"ニャン\",\n        -12.284354209899902\n      ],\n      [\n        \"▁屋台\",\n        -12.284358978271484\n      ],\n      [\n        \"▁眠る\",\n        -12.284378051757812\n      ],\n      [\n        \"ルディ\",\n        -12.284448623657227\n      ],\n      [\n        \"CU\",\n        -12.284512519836426\n      ],\n      [\n        \"挿\",\n        -12.284529685974121\n      ],\n      [\n        \"ポキル\",\n        -12.284536361694336\n      ],\n      [\n        \"▁アポロ\",\n        -12.28467082977295\n      ],\n      [\n        \"▁萌え\",\n        -12.2850341796875\n      ],\n      [\n        \"銘\",\n        -12.285099983215332\n      ],\n      [\n        \"▁重なり\",\n        -12.285114288330078\n      ],\n      [\n        \"炉\",\n        -12.285141944885254\n      ],\n      [\n        \"▁津田\",\n        -12.285272598266602\n      ],\n      [\n        \"▁何十\",\n        -12.285294532775879\n      ],\n      [\n        \"▁富士見\",\n        -12.285307884216309\n      ],\n      [\n        \"》\",\n        -12.28539752960205\n      ],\n      [\n        \"▁ウィルソン\",\n        -12.285435676574707\n      ],\n      [\n        \"▁図面\",\n        -12.285454750061035\n      ],\n      [\n        \"▁デパート\",\n        -12.285486221313477\n      ],\n      [\n        \"▁有力な\",\n        -12.28565502166748\n      ],\n      [\n        \"▁リリー\",\n        -12.28565788269043\n      ],\n      [\n        \"▁Records\",\n        -12.285764694213867\n      ],\n      [\n        \"▁見積\",\n        -12.285829544067383\n      ],\n      [\n        \"▁すす\",\n        -12.285859107971191\n      ],\n      [\n        \"▁気付き\",\n        -12.285959243774414\n      ],\n      [\n        \"▁産駒\",\n        -12.286067008972168\n      ],\n      [\n        \"▁盛り込ま\",\n        -12.286140441894531\n      ],\n      [\n        \"▁green\",\n        -12.286145210266113\n      ],\n      [\n        \"▁うかが\",\n        -12.28619384765625\n      ],\n      [\n        \"縄\",\n        -12.286275863647461\n      ],\n      [\n        \"ection\",\n        -12.286444664001465\n      ],\n      [\n        \"▁デコ\",\n        -12.28646469116211\n      ],\n      [\n        \"▁隙\",\n        -12.286510467529297\n      ],\n      [\n        \"清水\",\n        -12.286548614501953\n      ],\n      [\n        \"▁文京\",\n        -12.286665916442871\n      ],\n      [\n        \"▁ジュー\",\n        -12.286723136901855\n      ],\n      [\n        \"まじ\",\n        -12.286725044250488\n      ],\n      [\n        \"▁奥様\",\n        -12.286734580993652\n      ],\n      [\n        \"▁ウチ\",\n        -12.286943435668945\n      ],\n      [\n        \"絡\",\n        -12.287077903747559\n      ],\n      [\n        \"▁トレーディング\",\n        -12.287091255187988\n      ],\n      [\n        \"轄\",\n        -12.287311553955078\n      ],\n      [\n        \"▁封入\",\n        -12.287357330322266\n      ],\n      [\n        \"シュタイン\",\n        -12.287393569946289\n      ],\n      [\n        \"▁貯\",\n        -12.28748607635498\n      ],\n      [\n        \"ゴル\",\n        -12.287588119506836\n      ],\n      [\n        \"▁なされる\",\n        -12.287611961364746\n      ],\n      [\n        \"LM\",\n        -12.287631034851074\n      ],\n      [\n        \"▁懐かし\",\n        -12.28775691986084\n      ],\n      [\n        \"▁コミューン\",\n        -12.287847518920898\n      ],\n      [\n        \"▁頼んで\",\n        -12.287931442260742\n      ],\n      [\n        \"▁有名です\",\n        -12.287933349609375\n      ],\n      [\n        \"AO\",\n        -12.288150787353516\n      ],\n      [\n        \"▁無罪\",\n        -12.288189888000488\n      ],\n      [\n        \"クライ\",\n        -12.288403511047363\n      ],\n      [\n        \"河内\",\n        -12.288409233093262\n      ],\n      [\n        \"▁factory\",\n        -12.288443565368652\n      ],\n      [\n        \"emp\",\n        -12.288564682006836\n      ],\n      [\n        \"▁«\",\n        -12.288578033447266\n      ],\n      [\n        \"▁MBS\",\n        -12.288671493530273\n      ],\n      [\n        \"屈\",\n        -12.288712501525879\n      ],\n      [\n        \"▁突っ込\",\n        -12.288867950439453\n      ],\n      [\n        \"omi\",\n        -12.28888988494873\n      ],\n      [\n        \"苦\",\n        -12.28895378112793\n      ],\n      [\n        \"▁格子\",\n        -12.28901481628418\n      ],\n      [\n        \"▁処罰\",\n        -12.289093017578125\n      ],\n      [\n        \"ava\",\n        -12.289121627807617\n      ],\n      [\n        \"伝統\",\n        -12.289220809936523\n      ],\n      [\n        \"▁引か\",\n        -12.289237976074219\n      ],\n      [\n        \"▁ヒン\",\n        -12.289444923400879\n      ],\n      [\n        \"▁止まって\",\n        -12.289506912231445\n      ],\n      [\n        \"TB\",\n        -12.289560317993164\n      ],\n      [\n        \"▁構図\",\n        -12.289596557617188\n      ],\n      [\n        \"▁創生\",\n        -12.289670944213867\n      ],\n      [\n        \"▁シューティング\",\n        -12.28978157043457\n      ],\n      [\n        \"▁フェチ\",\n        -12.28982162475586\n      ],\n      [\n        \"▁摂津\",\n        -12.289863586425781\n      ],\n      [\n        \"廷\",\n        -12.289905548095703\n      ],\n      [\n        \"▁久米\",\n        -12.28998851776123\n      ],\n      [\n        \"編集\",\n        -12.290099143981934\n      ],\n      [\n        \"▁だが\",\n        -12.290117263793945\n      ],\n      [\n        \"ミノ\",\n        -12.290143966674805\n      ],\n      [\n        \"▁開閉\",\n        -12.290170669555664\n      ],\n      [\n        \"▁姦\",\n        -12.290231704711914\n      ],\n      [\n        \"感染\",\n        -12.290337562561035\n      ],\n      [\n        \"▁Mr\",\n        -12.290514945983887\n      ],\n      [\n        \"揚げ\",\n        -12.290553092956543\n      ],\n      [\n        \"▁本舗\",\n        -12.290576934814453\n      ],\n      [\n        \"▁Ni\",\n        -12.290593147277832\n      ],\n      [\n        \"▁不問\",\n        -12.290611267089844\n      ],\n      [\n        \"亡\",\n        -12.29063892364502\n      ],\n      [\n        \"▁吾妻\",\n        -12.290651321411133\n      ],\n      [\n        \"▁まこと\",\n        -12.29076099395752\n      ],\n      [\n        \"▁狙\",\n        -12.29081916809082\n      ],\n      [\n        \"▁映え\",\n        -12.290857315063477\n      ],\n      [\n        \"▁幽\",\n        -12.290863037109375\n      ],\n      [\n        \"▁制した\",\n        -12.291057586669922\n      ],\n      [\n        \"▁内面\",\n        -12.291091918945312\n      ],\n      [\n        \"▁High\",\n        -12.291119575500488\n      ],\n      [\n        \"▁廊下\",\n        -12.2911376953125\n      ],\n      [\n        \"▁シベリア\",\n        -12.29127025604248\n      ],\n      [\n        \"▁肥\",\n        -12.291337013244629\n      ],\n      [\n        \"ちゅう\",\n        -12.29134750366211\n      ],\n      [\n        \"クリス\",\n        -12.291377067565918\n      ],\n      [\n        \"▁XL\",\n        -12.2913818359375\n      ],\n      [\n        \"▁舗装\",\n        -12.291394233703613\n      ],\n      [\n        \"cc\",\n        -12.291465759277344\n      ],\n      [\n        \"▁履き\",\n        -12.291476249694824\n      ],\n      [\n        \"▁反転\",\n        -12.291500091552734\n      ],\n      [\n        \"▁クレーム\",\n        -12.291717529296875\n      ],\n      [\n        \"▁越えた\",\n        -12.291837692260742\n      ],\n      [\n        \"▁貸切\",\n        -12.292227745056152\n      ],\n      [\n        \"▁ゲリラ\",\n        -12.292293548583984\n      ],\n      [\n        \"1928\",\n        -12.292384147644043\n      ],\n      [\n        \"ゅう\",\n        -12.292447090148926\n      ],\n      [\n        \"三重\",\n        -12.292481422424316\n      ],\n      [\n        \"▁投影\",\n        -12.292746543884277\n      ],\n      [\n        \"▁商社\",\n        -12.293010711669922\n      ],\n      [\n        \"▁GE\",\n        -12.293051719665527\n      ],\n      [\n        \"▁Disc\",\n        -12.293137550354004\n      ],\n      [\n        \"還\",\n        -12.293192863464355\n      ],\n      [\n        \"SQL\",\n        -12.293207168579102\n      ],\n      [\n        \"▁エンジニアリング\",\n        -12.293244361877441\n      ],\n      [\n        \"▁厚く\",\n        -12.29325008392334\n      ],\n      [\n        \"▁亡\",\n        -12.293330192565918\n      ],\n      [\n        \"▁分断\",\n        -12.293339729309082\n      ],\n      [\n        \"▁慰謝料\",\n        -12.293451309204102\n      ],\n      [\n        \"▁洗礼\",\n        -12.293734550476074\n      ],\n      [\n        \"温泉\",\n        -12.29378890991211\n      ],\n      [\n        \"▁木下\",\n        -12.293900489807129\n      ],\n      [\n        \"▁サウ\",\n        -12.294113159179688\n      ],\n      [\n        \"ono\",\n        -12.294219970703125\n      ],\n      [\n        \"now\",\n        -12.294281005859375\n      ],\n      [\n        \"▁カラフル\",\n        -12.294310569763184\n      ],\n      [\n        \"▁間違った\",\n        -12.294353485107422\n      ],\n      [\n        \"▁密かに\",\n        -12.29439640045166\n      ],\n      [\n        \"▁ヒーター\",\n        -12.29448127746582\n      ],\n      [\n        \"pro\",\n        -12.294529914855957\n      ],\n      [\n        \"▁ウイング\",\n        -12.2946138381958\n      ],\n      [\n        \"弓\",\n        -12.294700622558594\n      ],\n      [\n        \"▁310\",\n        -12.294754028320312\n      ],\n      [\n        \"送料\",\n        -12.294754028320312\n      ],\n      [\n        \"▁郵政\",\n        -12.294868469238281\n      ],\n      [\n        \"▁プレゼンテーション\",\n        -12.294883728027344\n      ],\n      [\n        \"▁Ant\",\n        -12.295036315917969\n      ],\n      [\n        \"▁容易\",\n        -12.29510498046875\n      ],\n      [\n        \"▁名乗って\",\n        -12.295255661010742\n      ],\n      [\n        \"▁諸説\",\n        -12.295690536499023\n      ],\n      [\n        \"かったり\",\n        -12.295763969421387\n      ],\n      [\n        \"▁嫌いな\",\n        -12.295780181884766\n      ],\n      [\n        \"▁flower\",\n        -12.296029090881348\n      ],\n      [\n        \"PDF\",\n        -12.296075820922852\n      ],\n      [\n        \"▁紺\",\n        -12.2962064743042\n      ],\n      [\n        \"砕\",\n        -12.296257019042969\n      ],\n      [\n        \"▁大川\",\n        -12.296378135681152\n      ],\n      [\n        \"▁必要不可欠\",\n        -12.296416282653809\n      ],\n      [\n        \"▁Da\",\n        -12.29642105102539\n      ],\n      [\n        \"エステ\",\n        -12.296459197998047\n      ],\n      [\n        \"シード\",\n        -12.296723365783691\n      ],\n      [\n        \"▁DR\",\n        -12.296788215637207\n      ],\n      [\n        \"▁var\",\n        -12.296796798706055\n      ],\n      [\n        \"▁獣医\",\n        -12.296806335449219\n      ],\n      [\n        \"▁電球\",\n        -12.296871185302734\n      ],\n      [\n        \"▁申し立て\",\n        -12.29695987701416\n      ],\n      [\n        \"▁じゅん\",\n        -12.297037124633789\n      ],\n      [\n        \"▁渡航\",\n        -12.297243118286133\n      ],\n      [\n        \"漁\",\n        -12.297304153442383\n      ],\n      [\n        \"▁脅か\",\n        -12.297435760498047\n      ],\n      [\n        \"▁浜田\",\n        -12.29745101928711\n      ],\n      [\n        \"▁乗り物\",\n        -12.297459602355957\n      ],\n      [\n        \"▁聴取\",\n        -12.297516822814941\n      ],\n      [\n        \"りょう\",\n        -12.297571182250977\n      ],\n      [\n        \"▁断言\",\n        -12.297609329223633\n      ],\n      [\n        \"▁SSL\",\n        -12.297630310058594\n      ],\n      [\n        \"▁余計な\",\n        -12.297708511352539\n      ],\n      [\n        \"IVE\",\n        -12.297745704650879\n      ],\n      [\n        \"借\",\n        -12.297898292541504\n      ],\n      [\n        \"▁台東\",\n        -12.297981262207031\n      ],\n      [\n        \"ショップ\",\n        -12.297981262207031\n      ],\n      [\n        \"▁騎\",\n        -12.298088073730469\n      ],\n      [\n        \"▁Application\",\n        -12.298095703125\n      ],\n      [\n        \"▁とらわれ\",\n        -12.298105239868164\n      ],\n      [\n        \"自動\",\n        -12.298114776611328\n      ],\n      [\n        \"▁金子\",\n        -12.298127174377441\n      ],\n      [\n        \"▁もとより\",\n        -12.298148155212402\n      ],\n      [\n        \"▁葛\",\n        -12.298179626464844\n      ],\n      [\n        \"▁リノベーション\",\n        -12.298613548278809\n      ],\n      [\n        \"征\",\n        -12.298711776733398\n      ],\n      [\n        \"▁アイデンティティ\",\n        -12.29874324798584\n      ],\n      [\n        \"▁スレンダー\",\n        -12.298772811889648\n      ],\n      [\n        \"▁引き継ぎ\",\n        -12.298807144165039\n      ],\n      [\n        \"the\",\n        -12.298842430114746\n      ],\n      [\n        \"▁何処\",\n        -12.298879623413086\n      ],\n      [\n        \"▁暮れ\",\n        -12.29891300201416\n      ],\n      [\n        \"DL\",\n        -12.298933029174805\n      ],\n      [\n        \"友達\",\n        -12.298962593078613\n      ],\n      [\n        \"▁WORLD\",\n        -12.299001693725586\n      ],\n      [\n        \"▁オーラ\",\n        -12.299055099487305\n      ],\n      [\n        \"▁親衛隊\",\n        -12.299261093139648\n      ],\n      [\n        \"era\",\n        -12.29928207397461\n      ],\n      [\n        \"▁301\",\n        -12.299285888671875\n      ],\n      [\n        \"▁サーフィン\",\n        -12.299345016479492\n      ],\n      [\n        \"▁着く\",\n        -12.299386978149414\n      ],\n      [\n        \"▁アリバイ\",\n        -12.299395561218262\n      ],\n      [\n        \"チコ\",\n        -12.299604415893555\n      ],\n      [\n        \"▁Sw\",\n        -12.299605369567871\n      ],\n      [\n        \"▁国体\",\n        -12.299622535705566\n      ],\n      [\n        \"▁延び\",\n        -12.299633979797363\n      ],\n      [\n        \"▁つとめ\",\n        -12.2997465133667\n      ],\n      [\n        \"▁断片\",\n        -12.29986572265625\n      ],\n      [\n        \"▁NT\",\n        -12.300063133239746\n      ],\n      [\n        \"▁聖母\",\n        -12.300103187561035\n      ],\n      [\n        \"App\",\n        -12.300126075744629\n      ],\n      [\n        \"▁ナイター\",\n        -12.300182342529297\n      ],\n      [\n        \"EAT\",\n        -12.300209045410156\n      ],\n      [\n        \"▁射程\",\n        -12.300463676452637\n      ],\n      [\n        \"▁頭文字\",\n        -12.300467491149902\n      ],\n      [\n        \"クマ\",\n        -12.300514221191406\n      ],\n      [\n        \"▁Exp\",\n        -12.300668716430664\n      ],\n      [\n        \"クラス\",\n        -12.300734519958496\n      ],\n      [\n        \"▁コンロ\",\n        -12.300816535949707\n      ],\n      [\n        \"▁苦しんで\",\n        -12.300816535949707\n      ],\n      [\n        \"▁共存\",\n        -12.300883293151855\n      ],\n      [\n        \"▁><\",\n        -12.300908088684082\n      ],\n      [\n        \"▁地蔵\",\n        -12.300920486450195\n      ],\n      [\n        \"▁互\",\n        -12.300984382629395\n      ],\n      [\n        \"テーマ\",\n        -12.301006317138672\n      ],\n      [\n        \"▁椿\",\n        -12.301024436950684\n      ],\n      [\n        \"▁国営\",\n        -12.301128387451172\n      ],\n      [\n        \"▁ユリ\",\n        -12.301305770874023\n      ],\n      [\n        \"エリ\",\n        -12.301309585571289\n      ],\n      [\n        \"▁スラム\",\n        -12.3013277053833\n      ],\n      [\n        \"▁産物\",\n        -12.3015718460083\n      ],\n      [\n        \"▁本家\",\n        -12.30158519744873\n      ],\n      [\n        \"付ける\",\n        -12.301621437072754\n      ],\n      [\n        \"悟\",\n        -12.30176067352295\n      ],\n      [\n        \"▁住んだ\",\n        -12.301793098449707\n      ],\n      [\n        \"▁Ag\",\n        -12.302131652832031\n      ],\n      [\n        \"▁退院\",\n        -12.302440643310547\n      ],\n      [\n        \"ノコ\",\n        -12.30251693725586\n      ],\n      [\n        \"狂\",\n        -12.302732467651367\n      ],\n      [\n        \"▁タイガー\",\n        -12.302743911743164\n      ],\n      [\n        \"▁おこなう\",\n        -12.302762985229492\n      ],\n      [\n        \"▁松江\",\n        -12.302769660949707\n      ],\n      [\n        \"▁ホッ\",\n        -12.30282211303711\n      ],\n      [\n        \"▁枯れ\",\n        -12.30282974243164\n      ],\n      [\n        \"質問\",\n        -12.302922248840332\n      ],\n      [\n        \"峠\",\n        -12.303194999694824\n      ],\n      [\n        \"▁のうた\",\n        -12.303400039672852\n      ],\n      [\n        \"▁Col\",\n        -12.30345630645752\n      ],\n      [\n        \"DER\",\n        -12.30354118347168\n      ],\n      [\n        \"▁どなた\",\n        -12.303827285766602\n      ],\n      [\n        \"小学生\",\n        -12.303884506225586\n      ],\n      [\n        \"▁レイク\",\n        -12.30391788482666\n      ],\n      [\n        \"ピス\",\n        -12.303921699523926\n      ],\n      [\n        \"巾\",\n        -12.303932189941406\n      ],\n      [\n        \"▁ローソン\",\n        -12.303987503051758\n      ],\n      [\n        \"▁乗せ\",\n        -12.303987503051758\n      ],\n      [\n        \"瑠\",\n        -12.304062843322754\n      ],\n      [\n        \"▁Club\",\n        -12.30423641204834\n      ],\n      [\n        \"ログ\",\n        -12.304287910461426\n      ],\n      [\n        \"▁マクドナルド\",\n        -12.304323196411133\n      ],\n      [\n        \"ワーズ\",\n        -12.304340362548828\n      ],\n      [\n        \"BR\",\n        -12.304365158081055\n      ],\n      [\n        \"▁浴びて\",\n        -12.304413795471191\n      ],\n      [\n        \"▁ワンダー\",\n        -12.304461479187012\n      ],\n      [\n        \"車体\",\n        -12.30447006225586\n      ],\n      [\n        \"▁レンタカー\",\n        -12.304500579833984\n      ],\n      [\n        \"▁恐れて\",\n        -12.304574012756348\n      ],\n      [\n        \"▁フォール\",\n        -12.304717063903809\n      ],\n      [\n        \"▁居場所\",\n        -12.304753303527832\n      ],\n      [\n        \"▁致命\",\n        -12.304760932922363\n      ],\n      [\n        \"▁旗本\",\n        -12.30476188659668\n      ],\n      [\n        \"▁最高裁\",\n        -12.304767608642578\n      ],\n      [\n        \"▁住職\",\n        -12.305068969726562\n      ],\n      [\n        \"▁母子\",\n        -12.305163383483887\n      ],\n      [\n        \"▁襲名\",\n        -12.30523681640625\n      ],\n      [\n        \"ヘイ\",\n        -12.305272102355957\n      ],\n      [\n        \"ビアン\",\n        -12.305468559265137\n      ],\n      [\n        \"可能\",\n        -12.305486679077148\n      ],\n      [\n        \"ブリー\",\n        -12.305558204650879\n      ],\n      [\n        \"▁定時\",\n        -12.3056001663208\n      ],\n      [\n        \"▁罠\",\n        -12.305601119995117\n      ],\n      [\n        \"▁田原\",\n        -12.305606842041016\n      ],\n      [\n        \"▁御用\",\n        -12.305865287780762\n      ],\n      [\n        \"▁観た\",\n        -12.305865287780762\n      ],\n      [\n        \"▁堤防\",\n        -12.305898666381836\n      ],\n      [\n        \"▁養育\",\n        -12.305920600891113\n      ],\n      [\n        \"▁ブラザーズ\",\n        -12.306015968322754\n      ],\n      [\n        \"▁書け\",\n        -12.306109428405762\n      ],\n      [\n        \"▁思い出した\",\n        -12.306138038635254\n      ],\n      [\n        \"仮名\",\n        -12.306190490722656\n      ],\n      [\n        \"▁架け\",\n        -12.306239128112793\n      ],\n      [\n        \"▁沼津\",\n        -12.306282997131348\n      ],\n      [\n        \"劇場\",\n        -12.306286811828613\n      ],\n      [\n        \"▁告示\",\n        -12.30640697479248\n      ],\n      [\n        \"▁茅\",\n        -12.306426048278809\n      ],\n      [\n        \"▁気に入\",\n        -12.30647087097168\n      ],\n      [\n        \"¥\",\n        -12.306474685668945\n      ],\n      [\n        \"必ず\",\n        -12.30652141571045\n      ],\n      [\n        \"▁学べる\",\n        -12.306551933288574\n      ],\n      [\n        \"討\",\n        -12.30662727355957\n      ],\n      [\n        \"▁ようこそ\",\n        -12.306668281555176\n      ],\n      [\n        \"▁苦しむ\",\n        -12.306669235229492\n      ],\n      [\n        \"▁か月間\",\n        -12.306965827941895\n      ],\n      [\n        \"DP\",\n        -12.307012557983398\n      ],\n      [\n        \"▁神楽\",\n        -12.307046890258789\n      ],\n      [\n        \"eng\",\n        -12.307055473327637\n      ],\n      [\n        \"簡\",\n        -12.307074546813965\n      ],\n      [\n        \"▁先代\",\n        -12.307137489318848\n      ],\n      [\n        \"拒\",\n        -12.3071870803833\n      ],\n      [\n        \"RNA\",\n        -12.30718994140625\n      ],\n      [\n        \"▁中堅\",\n        -12.307767868041992\n      ],\n      [\n        \"▁年俸\",\n        -12.307777404785156\n      ],\n      [\n        \"▁注力\",\n        -12.307812690734863\n      ],\n      [\n        \"▁事由\",\n        -12.307856559753418\n      ],\n      [\n        \"▁制し\",\n        -12.307859420776367\n      ],\n      [\n        \"▁過ごせる\",\n        -12.307868003845215\n      ],\n      [\n        \"▁特価\",\n        -12.307991981506348\n      ],\n      [\n        \"▁モーション\",\n        -12.308006286621094\n      ],\n      [\n        \"▁エディタ\",\n        -12.30801773071289\n      ],\n      [\n        \"▁裏切り\",\n        -12.308233261108398\n      ],\n      [\n        \"ham\",\n        -12.308354377746582\n      ],\n      [\n        \"▁着色\",\n        -12.308415412902832\n      ],\n      [\n        \"▁ケネディ\",\n        -12.308499336242676\n      ],\n      [\n        \"地名\",\n        -12.30855941772461\n      ],\n      [\n        \"▁会える\",\n        -12.308571815490723\n      ],\n      [\n        \"▁ソナタ\",\n        -12.30862808227539\n      ],\n      [\n        \"▁単発\",\n        -12.308751106262207\n      ],\n      [\n        \"▁抜粋\",\n        -12.30876636505127\n      ],\n      [\n        \"▁鴨\",\n        -12.308876037597656\n      ],\n      [\n        \"▁撤廃\",\n        -12.30888843536377\n      ],\n      [\n        \"ノア\",\n        -12.308966636657715\n      ],\n      [\n        \"▁1300\",\n        -12.309028625488281\n      ],\n      [\n        \"1929\",\n        -12.30916690826416\n      ],\n      [\n        \"ーん\",\n        -12.309292793273926\n      ],\n      [\n        \"▁フットサル\",\n        -12.309296607971191\n      ],\n      [\n        \"▁暴露\",\n        -12.309298515319824\n      ],\n      [\n        \"▁230\",\n        -12.309377670288086\n      ],\n      [\n        \"▁ダイア\",\n        -12.30950927734375\n      ],\n      [\n        \"▁済ませ\",\n        -12.309599876403809\n      ],\n      [\n        \"▁飼い\",\n        -12.309663772583008\n      ],\n      [\n        \"▁マック\",\n        -12.309723854064941\n      ],\n      [\n        \"富山\",\n        -12.309745788574219\n      ],\n      [\n        \"▁激化\",\n        -12.309760093688965\n      ],\n      [\n        \"▁嬉し\",\n        -12.30983829498291\n      ],\n      [\n        \"AIR\",\n        -12.309941291809082\n      ],\n      [\n        \"▁合致\",\n        -12.309964179992676\n      ],\n      [\n        \"IDE\",\n        -12.310047149658203\n      ],\n      [\n        \"▁毒性\",\n        -12.310272216796875\n      ],\n      [\n        \"▁寄って\",\n        -12.310323715209961\n      ],\n      [\n        \"▁総括\",\n        -12.31032943725586\n      ],\n      [\n        \"▁フォーカス\",\n        -12.310388565063477\n      ],\n      [\n        \"▁幸い\",\n        -12.31039047241211\n      ],\n      [\n        \"▁ヤフー\",\n        -12.310428619384766\n      ],\n      [\n        \"▁虚偽\",\n        -12.310462951660156\n      ],\n      [\n        \"要するに\",\n        -12.310462951660156\n      ],\n      [\n        \"▁シアリス\",\n        -12.310523986816406\n      ],\n      [\n        \"▁海老\",\n        -12.310546875\n      ],\n      [\n        \"▁がんばって\",\n        -12.31071949005127\n      ],\n      [\n        \"▁挫折\",\n        -12.310851097106934\n      ],\n      [\n        \"▁安価な\",\n        -12.3108549118042\n      ],\n      [\n        \"▁火曜\",\n        -12.311047554016113\n      ],\n      [\n        \"晋\",\n        -12.311090469360352\n      ],\n      [\n        \"▁シグナル\",\n        -12.311113357543945\n      ],\n      [\n        \"▁本多\",\n        -12.311131477355957\n      ],\n      [\n        \"▁ボーイング\",\n        -12.311214447021484\n      ],\n      [\n        \"▁使節\",\n        -12.31130313873291\n      ],\n      [\n        \"▁ベーシック\",\n        -12.3115234375\n      ],\n      [\n        \"ファイル\",\n        -12.311582565307617\n      ],\n      [\n        \"▁過半数\",\n        -12.311636924743652\n      ],\n      [\n        \"傑\",\n        -12.311636924743652\n      ],\n      [\n        \"▁CAD\",\n        -12.311663627624512\n      ],\n      [\n        \"▁招いた\",\n        -12.311834335327148\n      ],\n      [\n        \"▁480\",\n        -12.311845779418945\n      ],\n      [\n        \"▁引っ張\",\n        -12.311882972717285\n      ],\n      [\n        \"▁テクニカル\",\n        -12.311899185180664\n      ],\n      [\n        \"▁江東\",\n        -12.311963081359863\n      ],\n      [\n        \"▁SHOW\",\n        -12.312068939208984\n      ],\n      [\n        \"▁10000\",\n        -12.312187194824219\n      ],\n      [\n        \"▁忘れた\",\n        -12.312283515930176\n      ],\n      [\n        \"▁甘く\",\n        -12.312376022338867\n      ],\n      [\n        \"▁受領\",\n        -12.31238842010498\n      ],\n      [\n        \"釜\",\n        -12.31254768371582\n      ],\n      [\n        \"▁製鉄\",\n        -12.312627792358398\n      ],\n      [\n        \"▁剣道\",\n        -12.312633514404297\n      ],\n      [\n        \"▁white\",\n        -12.312686920166016\n      ],\n      [\n        \"▁ミスター\",\n        -12.312737464904785\n      ],\n      [\n        \"▁Sun\",\n        -12.312752723693848\n      ],\n      [\n        \"▁iPod\",\n        -12.312817573547363\n      ],\n      [\n        \"▁薬学\",\n        -12.312893867492676\n      ],\n      [\n        \"▁WBA\",\n        -12.312950134277344\n      ],\n      [\n        \"PD\",\n        -12.312973022460938\n      ],\n      [\n        \"▁魔法使い\",\n        -12.312989234924316\n      ],\n      [\n        \"▁バード\",\n        -12.313251495361328\n      ],\n      [\n        \"▁ロマ\",\n        -12.313254356384277\n      ],\n      [\n        \"▁火事\",\n        -12.313295364379883\n      ],\n      [\n        \"▁鎮守\",\n        -12.313419342041016\n      ],\n      [\n        \"寮\",\n        -12.313468933105469\n      ],\n      [\n        \"▁波長\",\n        -12.313529968261719\n      ],\n      [\n        \"▁当面\",\n        -12.31376838684082\n      ],\n      [\n        \"STA\",\n        -12.313824653625488\n      ],\n      [\n        \"▁熟成\",\n        -12.313847541809082\n      ],\n      [\n        \"▁没収\",\n        -12.313937187194824\n      ],\n      [\n        \"▁解凍\",\n        -12.31401252746582\n      ],\n      [\n        \"▁狙った\",\n        -12.314050674438477\n      ],\n      [\n        \"▁得意な\",\n        -12.314136505126953\n      ],\n      [\n        \"▁三原\",\n        -12.314140319824219\n      ],\n      [\n        \"ANG\",\n        -12.314254760742188\n      ],\n      [\n        \"ダンス\",\n        -12.314337730407715\n      ],\n      [\n        \"スタイン\",\n        -12.31434154510498\n      ],\n      [\n        \"ノイ\",\n        -12.314517974853516\n      ],\n      [\n        \"▁COVI\",\n        -12.314599990844727\n      ],\n      [\n        \"▁めちゃくちゃ\",\n        -12.314656257629395\n      ],\n      [\n        \"TAL\",\n        -12.31477165222168\n      ],\n      [\n        \"▁プライ\",\n        -12.314803123474121\n      ],\n      [\n        \"ギター\",\n        -12.31481647491455\n      ],\n      [\n        \"ring\",\n        -12.314884185791016\n      ],\n      [\n        \"▁ブッ\",\n        -12.314887046813965\n      ],\n      [\n        \"▁停電\",\n        -12.314915657043457\n      ],\n      [\n        \"back\",\n        -12.314952850341797\n      ],\n      [\n        \"▁シリアル\",\n        -12.315028190612793\n      ],\n      [\n        \"▁グリップ\",\n        -12.315288543701172\n      ],\n      [\n        \"▁チラ\",\n        -12.315337181091309\n      ],\n      [\n        \"▁im\",\n        -12.3154878616333\n      ],\n      [\n        \"キリ\",\n        -12.315507888793945\n      ],\n      [\n        \"▁やってき\",\n        -12.315532684326172\n      ],\n      [\n        \"▁アンティ\",\n        -12.315638542175293\n      ],\n      [\n        \"▁外装\",\n        -12.315657615661621\n      ],\n      [\n        \"▁通す\",\n        -12.315847396850586\n      ],\n      [\n        \"▁そのように\",\n        -12.315857887268066\n      ],\n      [\n        \"▁ソーダ\",\n        -12.31592082977295\n      ],\n      [\n        \"▁ノット\",\n        -12.316032409667969\n      ],\n      [\n        \"▁人柄\",\n        -12.316178321838379\n      ],\n      [\n        \"▁庇\",\n        -12.316201210021973\n      ],\n      [\n        \"▁ストライク\",\n        -12.316510200500488\n      ],\n      [\n        \"▁慎重\",\n        -12.316511154174805\n      ],\n      [\n        \"廉\",\n        -12.316630363464355\n      ],\n      [\n        \"▁1901\",\n        -12.31664752960205\n      ],\n      [\n        \"▁着替え\",\n        -12.316719055175781\n      ],\n      [\n        \"▁マケドニア\",\n        -12.31689453125\n      ],\n      [\n        \"▁スパイク\",\n        -12.316916465759277\n      ],\n      [\n        \"いたり\",\n        -12.316938400268555\n      ],\n      [\n        \"1927\",\n        -12.316962242126465\n      ],\n      [\n        \"▁個展\",\n        -12.317059516906738\n      ],\n      [\n        \"▁パンダ\",\n        -12.317105293273926\n      ],\n      [\n        \"▁テラ\",\n        -12.317163467407227\n      ],\n      [\n        \"gar\",\n        -12.317243576049805\n      ],\n      [\n        \"▁まく\",\n        -12.317245483398438\n      ],\n      [\n        \"▁もうけた\",\n        -12.317266464233398\n      ],\n      [\n        \"▁抜群の\",\n        -12.317527770996094\n      ],\n      [\n        \"▁忘れる\",\n        -12.317543029785156\n      ],\n      [\n        \"知らず\",\n        -12.31764030456543\n      ],\n      [\n        \"▁走った\",\n        -12.317668914794922\n      ],\n      [\n        \"▁振る舞い\",\n        -12.317825317382812\n      ],\n      [\n        \"レコード\",\n        -12.318039894104004\n      ],\n      [\n        \"▁content\",\n        -12.31808090209961\n      ],\n      [\n        \"▁構い\",\n        -12.318086624145508\n      ],\n      [\n        \"▁ばん\",\n        -12.318106651306152\n      ],\n      [\n        \"暖\",\n        -12.318367958068848\n      ],\n      [\n        \"▁アレクサ\",\n        -12.318448066711426\n      ],\n      [\n        \"▁黙って\",\n        -12.318536758422852\n      ],\n      [\n        \"▁常陸\",\n        -12.31855583190918\n      ],\n      [\n        \"lip\",\n        -12.318588256835938\n      ],\n      [\n        \"哲\",\n        -12.31865119934082\n      ],\n      [\n        \"▁Best\",\n        -12.318670272827148\n      ],\n      [\n        \"▁立ち寄り\",\n        -12.318740844726562\n      ],\n      [\n        \"▁極限\",\n        -12.318843841552734\n      ],\n      [\n        \"▁仮名\",\n        -12.318875312805176\n      ],\n      [\n        \"▁こだわって\",\n        -12.31893253326416\n      ],\n      [\n        \"レータ\",\n        -12.31911849975586\n      ],\n      [\n        \"奴\",\n        -12.319193840026855\n      ],\n      [\n        \"ルート\",\n        -12.319272994995117\n      ],\n      [\n        \"▁道中\",\n        -12.319280624389648\n      ],\n      [\n        \"閃\",\n        -12.319401741027832\n      ],\n      [\n        \"▁ボーダー\",\n        -12.319442749023438\n      ],\n      [\n        \"▁整列\",\n        -12.31945514678955\n      ],\n      [\n        \"▁茶屋\",\n        -12.319615364074707\n      ],\n      [\n        \"▁オックスフォード\",\n        -12.319665908813477\n      ],\n      [\n        \"▁公式の\",\n        -12.319708824157715\n      ],\n      [\n        \"▁ロマンス\",\n        -12.319828987121582\n      ],\n      [\n        \"エナ\",\n        -12.319929122924805\n      ],\n      [\n        \"▁目立ち\",\n        -12.320030212402344\n      ],\n      [\n        \"▁ローション\",\n        -12.320047378540039\n      ],\n      [\n        \"▁づけ\",\n        -12.320052146911621\n      ],\n      [\n        \"公職\",\n        -12.320100784301758\n      ],\n      [\n        \"▁別府\",\n        -12.32010555267334\n      ],\n      [\n        \"▁ドリル\",\n        -12.320252418518066\n      ],\n      [\n        \"形態\",\n        -12.320252418518066\n      ],\n      [\n        \"パーツ\",\n        -12.320255279541016\n      ],\n      [\n        \"▁明細\",\n        -12.320314407348633\n      ],\n      [\n        \"あき\",\n        -12.320341110229492\n      ],\n      [\n        \"葛\",\n        -12.320355415344238\n      ],\n      [\n        \"▁南口\",\n        -12.32042121887207\n      ],\n      [\n        \"▁インテ\",\n        -12.320611953735352\n      ],\n      [\n        \"▁シチュエーション\",\n        -12.320723533630371\n      ],\n      [\n        \"▁切り替える\",\n        -12.320804595947266\n      ],\n      [\n        \"▁澤\",\n        -12.320942878723145\n      ],\n      [\n        \"まかな\",\n        -12.320967674255371\n      ],\n      [\n        \"じめ\",\n        -12.320969581604004\n      ],\n      [\n        \"▁English\",\n        -12.320987701416016\n      ],\n      [\n        \"▁乗用車\",\n        -12.320987701416016\n      ],\n      [\n        \"サブ\",\n        -12.321207046508789\n      ],\n      [\n        \"ピタ\",\n        -12.321220397949219\n      ],\n      [\n        \"毎月\",\n        -12.321489334106445\n      ],\n      [\n        \"東海\",\n        -12.321549415588379\n      ],\n      [\n        \"セール\",\n        -12.321600914001465\n      ],\n      [\n        \"▁亜科\",\n        -12.32164478302002\n      ],\n      [\n        \"▁大王\",\n        -12.321694374084473\n      ],\n      [\n        \"▁貨車\",\n        -12.321915626525879\n      ],\n      [\n        \"▁‘\",\n        -12.321969985961914\n      ],\n      [\n        \"日頃\",\n        -12.322138786315918\n      ],\n      [\n        \"学長\",\n        -12.322198867797852\n      ],\n      [\n        \"▁語彙\",\n        -12.32224178314209\n      ],\n      [\n        \"▁多重\",\n        -12.322415351867676\n      ],\n      [\n        \"受賞\",\n        -12.322433471679688\n      ],\n      [\n        \"oma\",\n        -12.322491645812988\n      ],\n      [\n        \"▁救わ\",\n        -12.322495460510254\n      ],\n      [\n        \"男子\",\n        -12.322532653808594\n      ],\n      [\n        \"エント\",\n        -12.322664260864258\n      ],\n      [\n        \"タイヤ\",\n        -12.322686195373535\n      ],\n      [\n        \"YS\",\n        -12.322736740112305\n      ],\n      [\n        \"須賀\",\n        -12.32276439666748\n      ],\n      [\n        \"キャラ\",\n        -12.322806358337402\n      ],\n      [\n        \"宗教\",\n        -12.3228120803833\n      ],\n      [\n        \"▁未明\",\n        -12.32284164428711\n      ],\n      [\n        \"▁属した\",\n        -12.322956085205078\n      ],\n      [\n        \"サール\",\n        -12.323036193847656\n      ],\n      [\n        \"▁憂\",\n        -12.323042869567871\n      ],\n      [\n        \"▁ポロシャツ\",\n        -12.32324504852295\n      ],\n      [\n        \"▁feat\",\n        -12.323259353637695\n      ],\n      [\n        \"銅\",\n        -12.323261260986328\n      ],\n      [\n        \"▁扱った\",\n        -12.323271751403809\n      ],\n      [\n        \"▁カクテル\",\n        -12.323372840881348\n      ],\n      [\n        \"▁封筒\",\n        -12.323379516601562\n      ],\n      [\n        \"地震\",\n        -12.323583602905273\n      ],\n      [\n        \"ピナ\",\n        -12.32363510131836\n      ],\n      [\n        \"▁エリー\",\n        -12.323655128479004\n      ],\n      [\n        \"▁相応\",\n        -12.323662757873535\n      ],\n      [\n        \"▁ミサ\",\n        -12.323749542236328\n      ],\n      [\n        \"▁フィクション\",\n        -12.323752403259277\n      ],\n      [\n        \"コート\",\n        -12.323836326599121\n      ],\n      [\n        \"鎌倉\",\n        -12.323862075805664\n      ],\n      [\n        \"▁丸山\",\n        -12.3239107131958\n      ],\n      [\n        \"▁室長\",\n        -12.323936462402344\n      ],\n      [\n        \"▁シワ\",\n        -12.323993682861328\n      ],\n      [\n        \"▁斉藤\",\n        -12.324095726013184\n      ],\n      [\n        \"マリー\",\n        -12.324104309082031\n      ],\n      [\n        \"▁ハブ\",\n        -12.324165344238281\n      ],\n      [\n        \"煎\",\n        -12.32416820526123\n      ],\n      [\n        \"▁š\",\n        -12.324169158935547\n      ],\n      [\n        \"ui\",\n        -12.324189186096191\n      ],\n      [\n        \"ジェイ\",\n        -12.324252128601074\n      ],\n      [\n        \"ベロ\",\n        -12.324405670166016\n      ],\n      [\n        \"▁自由党\",\n        -12.324437141418457\n      ],\n      [\n        \"▁ネズミ\",\n        -12.3245267868042\n      ],\n      [\n        \"une\",\n        -12.324628829956055\n      ],\n      [\n        \"▁委\",\n        -12.324661254882812\n      ],\n      [\n        \"▁メチル\",\n        -12.324719429016113\n      ],\n      [\n        \"▁長調\",\n        -12.324746131896973\n      ],\n      [\n        \"▁挿絵\",\n        -12.324832916259766\n      ],\n      [\n        \"面積\",\n        -12.324908256530762\n      ],\n      [\n        \"んじゃ\",\n        -12.324999809265137\n      ],\n      [\n        \"▁回して\",\n        -12.325050354003906\n      ],\n      [\n        \"擦\",\n        -12.325087547302246\n      ],\n      [\n        \"▁エルフ\",\n        -12.325197219848633\n      ],\n      [\n        \"稚\",\n        -12.325221061706543\n      ],\n      [\n        \"▁下げて\",\n        -12.325268745422363\n      ],\n      [\n        \"フォル\",\n        -12.325336456298828\n      ],\n      [\n        \"▁驚いて\",\n        -12.325361251831055\n      ],\n      [\n        \"▁殺して\",\n        -12.325362205505371\n      ],\n      [\n        \"▁伝授\",\n        -12.325403213500977\n      ],\n      [\n        \"▁寧\",\n        -12.325525283813477\n      ],\n      [\n        \"▁見たり\",\n        -12.325544357299805\n      ],\n      [\n        \"▁触り\",\n        -12.325544357299805\n      ],\n      [\n        \"くれ\",\n        -12.325613975524902\n      ],\n      [\n        \"▁炒め\",\n        -12.325662612915039\n      ],\n      [\n        \"win\",\n        -12.32575798034668\n      ],\n      [\n        \"▁LDK\",\n        -12.325858116149902\n      ],\n      [\n        \"それとも\",\n        -12.325878143310547\n      ],\n      [\n        \"▁und\",\n        -12.325943946838379\n      ],\n      [\n        \"▁放課後\",\n        -12.326028823852539\n      ],\n      [\n        \"▁フィルハーモニ\",\n        -12.32616138458252\n      ],\n      [\n        \"▁不可欠\",\n        -12.326189041137695\n      ],\n      [\n        \"▁VIP\",\n        -12.32619857788086\n      ],\n      [\n        \"晶\",\n        -12.326212882995605\n      ],\n      [\n        \"▁Tour\",\n        -12.326238632202148\n      ],\n      [\n        \"▁練り\",\n        -12.326313018798828\n      ],\n      [\n        \"謝\",\n        -12.326454162597656\n      ],\n      [\n        \"コット\",\n        -12.32650375366211\n      ],\n      [\n        \"▁緩やか\",\n        -12.326542854309082\n      ],\n      [\n        \"▁北斗\",\n        -12.326543807983398\n      ],\n      [\n        \"NY\",\n        -12.326582908630371\n      ],\n      [\n        \"置き\",\n        -12.326591491699219\n      ],\n      [\n        \"▁手伝って\",\n        -12.326828002929688\n      ],\n      [\n        \"▁防ぎ\",\n        -12.326869010925293\n      ],\n      [\n        \"チェル\",\n        -12.326899528503418\n      ],\n      [\n        \"▁VERDICT\",\n        -12.326959609985352\n      ],\n      [\n        \"▁勲\",\n        -12.327018737792969\n      ],\n      [\n        \"▁竹内\",\n        -12.32707405090332\n      ],\n      [\n        \"▁メダリスト\",\n        -12.327093124389648\n      ],\n      [\n        \"▁山内\",\n        -12.327183723449707\n      ],\n      [\n        \"おん\",\n        -12.327240943908691\n      ],\n      [\n        \"▁マニラ\",\n        -12.327357292175293\n      ],\n      [\n        \"▁手書き\",\n        -12.327357292175293\n      ],\n      [\n        \"リム\",\n        -12.32741641998291\n      ],\n      [\n        \"▁下地\",\n        -12.327585220336914\n      ],\n      [\n        \"▁寛政\",\n        -12.327699661254883\n      ],\n      [\n        \"▁腫れ\",\n        -12.327713012695312\n      ],\n      [\n        \"牟\",\n        -12.32789134979248\n      ],\n      [\n        \"▁クモ\",\n        -12.328038215637207\n      ],\n      [\n        \"GU\",\n        -12.328104972839355\n      ],\n      [\n        \"IRE\",\n        -12.32819938659668\n      ],\n      [\n        \"ゲージ\",\n        -12.328210830688477\n      ],\n      [\n        \"▁red\",\n        -12.328465461730957\n      ],\n      [\n        \"▁実体\",\n        -12.328493118286133\n      ],\n      [\n        \"▁意外な\",\n        -12.328550338745117\n      ],\n      [\n        \"bb\",\n        -12.328557014465332\n      ],\n      [\n        \"▁松浦\",\n        -12.328657150268555\n      ],\n      [\n        \"▁没年\",\n        -12.32869815826416\n      ],\n      [\n        \"▁並木\",\n        -12.328713417053223\n      ],\n      [\n        \"▁ソフトウエア\",\n        -12.328849792480469\n      ],\n      [\n        \"▁委任\",\n        -12.328858375549316\n      ],\n      [\n        \"▁行ない\",\n        -12.32903003692627\n      ],\n      [\n        \"早稲田\",\n        -12.329081535339355\n      ],\n      [\n        \"▁視力\",\n        -12.329099655151367\n      ],\n      [\n        \"ban\",\n        -12.329146385192871\n      ],\n      [\n        \"▁異常な\",\n        -12.329194068908691\n      ],\n      [\n        \"▁巻き起こ\",\n        -12.329230308532715\n      ],\n      [\n        \"▁行き来\",\n        -12.329243659973145\n      ],\n      [\n        \"▁三宅\",\n        -12.329278945922852\n      ],\n      [\n        \"▁アシュ\",\n        -12.329487800598145\n      ],\n      [\n        \"▁Online\",\n        -12.32950210571289\n      ],\n      [\n        \"▁有形\",\n        -12.329508781433105\n      ],\n      [\n        \"▁秋山\",\n        -12.329618453979492\n      ],\n      [\n        \"▁ザクセン\",\n        -12.32975959777832\n      ],\n      [\n        \"▁有吉\",\n        -12.329779624938965\n      ],\n      [\n        \"▁取り組んだ\",\n        -12.32980728149414\n      ],\n      [\n        \"▁襟\",\n        -12.330024719238281\n      ],\n      [\n        \"▁異議\",\n        -12.330035209655762\n      ],\n      [\n        \"▁ロータリー\",\n        -12.330082893371582\n      ],\n      [\n        \"vis\",\n        -12.330324172973633\n      ],\n      [\n        \"bin\",\n        -12.330348014831543\n      ],\n      [\n        \"▁白山\",\n        -12.330373764038086\n      ],\n      [\n        \"▁1868\",\n        -12.330559730529785\n      ],\n      [\n        \"▁踏切\",\n        -12.330696105957031\n      ],\n      [\n        \"▁溢れて\",\n        -12.33081340789795\n      ],\n      [\n        \"▁暴れ\",\n        -12.330850601196289\n      ],\n      [\n        \"▁ビクター\",\n        -12.331096649169922\n      ],\n      [\n        \"大切な\",\n        -12.331101417541504\n      ],\n      [\n        \"ashi\",\n        -12.331106185913086\n      ],\n      [\n        \"nal\",\n        -12.33115291595459\n      ],\n      [\n        \"▁巧\",\n        -12.331207275390625\n      ],\n      [\n        \"▁向き合う\",\n        -12.331254005432129\n      ],\n      [\n        \"▁リーダーシップ\",\n        -12.331432342529297\n      ],\n      [\n        \"▁内藤\",\n        -12.33146858215332\n      ],\n      [\n        \"▁クロム\",\n        -12.331527709960938\n      ],\n      [\n        \"▁グルー\",\n        -12.33163070678711\n      ],\n      [\n        \"▁惹\",\n        -12.331639289855957\n      ],\n      [\n        \"賜\",\n        -12.33169174194336\n      ],\n      [\n        \"▁受け取って\",\n        -12.331714630126953\n      ],\n      [\n        \"▁ヘクタール\",\n        -12.33176326751709\n      ],\n      [\n        \"▁鋭い\",\n        -12.331774711608887\n      ],\n      [\n        \"▁勝って\",\n        -12.331831932067871\n      ],\n      [\n        \"▁許\",\n        -12.331838607788086\n      ],\n      [\n        \"▁マキ\",\n        -12.331857681274414\n      ],\n      [\n        \"▁カルテ\",\n        -12.331892013549805\n      ],\n      [\n        \"▁^^\",\n        -12.33198356628418\n      ],\n      [\n        \"痕\",\n        -12.33203125\n      ],\n      [\n        \"▁棲\",\n        -12.332100868225098\n      ],\n      [\n        \"▁JST\",\n        -12.332133293151855\n      ],\n      [\n        \"▁不利\",\n        -12.332134246826172\n      ],\n      [\n        \"▁Lab\",\n        -12.33217716217041\n      ],\n      [\n        \"▁スパー\",\n        -12.332273483276367\n      ],\n      [\n        \"▁遺物\",\n        -12.3323974609375\n      ],\n      [\n        \"▁ブレスレット\",\n        -12.3324556350708\n      ],\n      [\n        \"▁肩こり\",\n        -12.33256721496582\n      ],\n      [\n        \"▁1898\",\n        -12.332659721374512\n      ],\n      [\n        \"▁Group\",\n        -12.332700729370117\n      ],\n      [\n        \"▁深めて\",\n        -12.332804679870605\n      ],\n      [\n        \"▁終焉\",\n        -12.33297061920166\n      ],\n      [\n        \"▁追撃\",\n        -12.33304214477539\n      ],\n      [\n        \"▁平坦\",\n        -12.333122253417969\n      ],\n      [\n        \"綬\",\n        -12.333370208740234\n      ],\n      [\n        \"桐\",\n        -12.333420753479004\n      ],\n      [\n        \"▁一方的に\",\n        -12.333503723144531\n      ],\n      [\n        \"▁ノルマ\",\n        -12.333548545837402\n      ],\n      [\n        \"棋\",\n        -12.333738327026367\n      ],\n      [\n        \"»\",\n        -12.333800315856934\n      ],\n      [\n        \"▁中原\",\n        -12.333881378173828\n      ],\n      [\n        \"普通の\",\n        -12.333986282348633\n      ],\n      [\n        \"ノル\",\n        -12.334000587463379\n      ],\n      [\n        \"▁割に\",\n        -12.334105491638184\n      ],\n      [\n        \"▁ゴシック\",\n        -12.33425235748291\n      ],\n      [\n        \"▁杉並\",\n        -12.334325790405273\n      ],\n      [\n        \"歳\",\n        -12.334434509277344\n      ],\n      [\n        \"▁拷問\",\n        -12.334442138671875\n      ],\n      [\n        \"▁愛国\",\n        -12.334449768066406\n      ],\n      [\n        \"簡単に\",\n        -12.334503173828125\n      ],\n      [\n        \"▁市電\",\n        -12.334547996520996\n      ],\n      [\n        \"▁カッコ\",\n        -12.33458423614502\n      ],\n      [\n        \"っこう\",\n        -12.334635734558105\n      ],\n      [\n        \"1931\",\n        -12.334650039672852\n      ],\n      [\n        \"マニア\",\n        -12.334830284118652\n      ],\n      [\n        \"慶長\",\n        -12.334918975830078\n      ],\n      [\n        \"▁リュー\",\n        -12.33512020111084\n      ],\n      [\n        \"▁下痢\",\n        -12.33518123626709\n      ],\n      [\n        \"すごい\",\n        -12.33532428741455\n      ],\n      [\n        \"▁ストローク\",\n        -12.335421562194824\n      ],\n      [\n        \"▁フェザー\",\n        -12.335432052612305\n      ],\n      [\n        \"▁押し付け\",\n        -12.335477828979492\n      ],\n      [\n        \"溜\",\n        -12.33551025390625\n      ],\n      [\n        \"植物\",\n        -12.335634231567383\n      ],\n      [\n        \"▁占拠\",\n        -12.335665702819824\n      ],\n      [\n        \"▁イズ\",\n        -12.33566951751709\n      ],\n      [\n        \"▁留守\",\n        -12.335672378540039\n      ],\n      [\n        \"▁事案\",\n        -12.335709571838379\n      ],\n      [\n        \"リップ\",\n        -12.335775375366211\n      ],\n      [\n        \"旦\",\n        -12.335789680480957\n      ],\n      [\n        \"▁抗菌\",\n        -12.335840225219727\n      ],\n      [\n        \"▁4,000\",\n        -12.335907936096191\n      ],\n      [\n        \"くじ\",\n        -12.335984230041504\n      ],\n      [\n        \"▁粟\",\n        -12.336055755615234\n      ],\n      [\n        \"▁念頭\",\n        -12.336077690124512\n      ],\n      [\n        \"オープン\",\n        -12.336097717285156\n      ],\n      [\n        \"▁本郷\",\n        -12.33635425567627\n      ],\n      [\n        \"▁転勤\",\n        -12.336383819580078\n      ],\n      [\n        \"ブイ\",\n        -12.336419105529785\n      ],\n      [\n        \"▁テイスト\",\n        -12.336440086364746\n      ],\n      [\n        \"▁クレンジング\",\n        -12.336456298828125\n      ],\n      [\n        \"▁フェスタ\",\n        -12.336487770080566\n      ],\n      [\n        \"ノート\",\n        -12.336539268493652\n      ],\n      [\n        \"▁捕ま\",\n        -12.33654499053955\n      ],\n      [\n        \"UG\",\n        -12.33666706085205\n      ],\n      [\n        \"オート\",\n        -12.336771011352539\n      ],\n      [\n        \"イユ\",\n        -12.336806297302246\n      ],\n      [\n        \"▁除いた\",\n        -12.336954116821289\n      ],\n      [\n        \"宮崎\",\n        -12.337017059326172\n      ],\n      [\n        \"▁進捗\",\n        -12.337130546569824\n      ],\n      [\n        \"▁用具\",\n        -12.337242126464844\n      ],\n      [\n        \"自治\",\n        -12.337259292602539\n      ],\n      [\n        \"lk\",\n        -12.337275505065918\n      ],\n      [\n        \"フィンペシア\",\n        -12.337319374084473\n      ],\n      [\n        \"﨑\",\n        -12.337396621704102\n      ],\n      [\n        \"▁未定\",\n        -12.337601661682129\n      ],\n      [\n        \"▁きや\",\n        -12.33760929107666\n      ],\n      [\n        \"▁暗く\",\n        -12.337701797485352\n      ],\n      [\n        \"あらかじめ\",\n        -12.337725639343262\n      ],\n      [\n        \"国家\",\n        -12.337786674499512\n      ],\n      [\n        \"▁遂げ\",\n        -12.337806701660156\n      ],\n      [\n        \"▁高くて\",\n        -12.337833404541016\n      ],\n      [\n        \"▁積水ハウス\",\n        -12.337935447692871\n      ],\n      [\n        \"▁ジュリエット\",\n        -12.338069915771484\n      ],\n      [\n        \"1923\",\n        -12.338095664978027\n      ],\n      [\n        \"▁テック\",\n        -12.338190078735352\n      ],\n      [\n        \"aya\",\n        -12.33823013305664\n      ],\n      [\n        \"▁ヒューストン\",\n        -12.338237762451172\n      ],\n      [\n        \"▁テオ\",\n        -12.338249206542969\n      ],\n      [\n        \"▁モロッコ\",\n        -12.338485717773438\n      ],\n      [\n        \"▁無形\",\n        -12.33848762512207\n      ],\n      [\n        \"▁適当な\",\n        -12.338571548461914\n      ],\n      [\n        \"タイム\",\n        -12.338574409484863\n      ],\n      [\n        \"▁労力\",\n        -12.338578224182129\n      ],\n      [\n        \"▁TB\",\n        -12.338621139526367\n      ],\n      [\n        \"逃\",\n        -12.338651657104492\n      ],\n      [\n        \"キュラ\",\n        -12.338791847229004\n      ],\n      [\n        \"▁まじ\",\n        -12.338799476623535\n      ],\n      [\n        \"▁スイング\",\n        -12.338984489440918\n      ],\n      [\n        \"▁ズボン\",\n        -12.339107513427734\n      ],\n      [\n        \"ブリン\",\n        -12.339234352111816\n      ],\n      [\n        \"oid\",\n        -12.339241027832031\n      ],\n      [\n        \"▁田辺\",\n        -12.339540481567383\n      ],\n      [\n        \"あげ\",\n        -12.339542388916016\n      ],\n      [\n        \"小さい\",\n        -12.339570999145508\n      ],\n      [\n        \"▁座る\",\n        -12.339584350585938\n      ],\n      [\n        \"1924\",\n        -12.339594841003418\n      ],\n      [\n        \"▁頼って\",\n        -12.339654922485352\n      ],\n      [\n        \"▁随分\",\n        -12.33968734741211\n      ],\n      [\n        \"▁サックス\",\n        -12.339694023132324\n      ],\n      [\n        \"▁磨\",\n        -12.339728355407715\n      ],\n      [\n        \"MD\",\n        -12.339778900146484\n      ],\n      [\n        \"base\",\n        -12.33980655670166\n      ],\n      [\n        \"atsu\",\n        -12.33989143371582\n      ],\n      [\n        \"▁おもしろい\",\n        -12.339900016784668\n      ],\n      [\n        \"▁Mk\",\n        -12.339914321899414\n      ],\n      [\n        \"(_\",\n        -12.339937210083008\n      ],\n      [\n        \"▁安全で\",\n        -12.339967727661133\n      ],\n      [\n        \"▁music\",\n        -12.340017318725586\n      ],\n      [\n        \"▁消して\",\n        -12.340048789978027\n      ],\n      [\n        \"▁ドナルド\",\n        -12.340068817138672\n      ],\n      [\n        \"▁イマ\",\n        -12.340130805969238\n      ],\n      [\n        \"▁陸奥\",\n        -12.340163230895996\n      ],\n      [\n        \"▁対訳\",\n        -12.340209007263184\n      ],\n      [\n        \"erry\",\n        -12.340458869934082\n      ],\n      [\n        \"▁大師\",\n        -12.340502738952637\n      ],\n      [\n        \"▁可愛く\",\n        -12.340561866760254\n      ],\n      [\n        \"▁シュタイン\",\n        -12.340620040893555\n      ],\n      [\n        \"▁フランクフルト\",\n        -12.340630531311035\n      ],\n      [\n        \"▁拍子\",\n        -12.340903282165527\n      ],\n      [\n        \"気候\",\n        -12.340919494628906\n      ],\n      [\n        \"▁北極\",\n        -12.3410005569458\n      ],\n      [\n        \"▁ナッツ\",\n        -12.341033935546875\n      ],\n      [\n        \"▁Cre\",\n        -12.341044425964355\n      ],\n      [\n        \"ソロ\",\n        -12.341185569763184\n      ],\n      [\n        \"マニ\",\n        -12.341241836547852\n      ],\n      [\n        \"▁フィッシュ\",\n        -12.341269493103027\n      ],\n      [\n        \"▁なんとも\",\n        -12.341290473937988\n      ],\n      [\n        \"▁浮か\",\n        -12.341297149658203\n      ],\n      [\n        \"▁繋げ\",\n        -12.34135913848877\n      ],\n      [\n        \"▁たいてい\",\n        -12.341399192810059\n      ],\n      [\n        \"▁共著\",\n        -12.341550827026367\n      ],\n      [\n        \"▁享保\",\n        -12.341573715209961\n      ],\n      [\n        \"▁下した\",\n        -12.34168529510498\n      ],\n      [\n        \"両親\",\n        -12.341769218444824\n      ],\n      [\n        \"▁おかず\",\n        -12.34190559387207\n      ],\n      [\n        \"地上\",\n        -12.341913223266602\n      ],\n      [\n        \"▁JRA\",\n        -12.341915130615234\n      ],\n      [\n        \"看護\",\n        -12.341954231262207\n      ],\n      [\n        \"セキュリティ\",\n        -12.342070579528809\n      ],\n      [\n        \"ala\",\n        -12.342090606689453\n      ],\n      [\n        \"▁ヒラ\",\n        -12.342108726501465\n      ],\n      [\n        \"▁エンタープライズ\",\n        -12.34225082397461\n      ],\n      [\n        \"マク\",\n        -12.342392921447754\n      ],\n      [\n        \"ドラー\",\n        -12.342428207397461\n      ],\n      [\n        \"峡\",\n        -12.342448234558105\n      ],\n      [\n        \"▁臨む\",\n        -12.342602729797363\n      ],\n      [\n        \"▁武家\",\n        -12.342666625976562\n      ],\n      [\n        \"▁クセ\",\n        -12.34278392791748\n      ],\n      [\n        \"▁計量\",\n        -12.342796325683594\n      ],\n      [\n        \"▁ラヴ\",\n        -12.342823028564453\n      ],\n      [\n        \"▁ストーブ\",\n        -12.342887878417969\n      ],\n      [\n        \"去年\",\n        -12.342986106872559\n      ],\n      [\n        \"▁きみ\",\n        -12.343064308166504\n      ],\n      [\n        \"▁NASA\",\n        -12.343111038208008\n      ],\n      [\n        \"▁闘い\",\n        -12.343205451965332\n      ],\n      [\n        \"高速\",\n        -12.343585014343262\n      ],\n      [\n        \"▁水源\",\n        -12.343710899353027\n      ],\n      [\n        \"墨\",\n        -12.343732833862305\n      ],\n      [\n        \"▁疲れた\",\n        -12.34394645690918\n      ],\n      [\n        \"設定\",\n        -12.344024658203125\n      ],\n      [\n        \"▁志摩\",\n        -12.344192504882812\n      ],\n      [\n        \"Cookie\",\n        -12.344221115112305\n      ],\n      [\n        \"▁狩\",\n        -12.344351768493652\n      ],\n      [\n        \"▁時事\",\n        -12.344362258911133\n      ],\n      [\n        \"its\",\n        -12.344488143920898\n      ],\n      [\n        \"▁420\",\n        -12.344560623168945\n      ],\n      [\n        \"▁高まった\",\n        -12.344758033752441\n      ],\n      [\n        \"▁ジョニー\",\n        -12.34476089477539\n      ],\n      [\n        \"▁石灰\",\n        -12.344764709472656\n      ],\n      [\n        \"▁トレイン\",\n        -12.344766616821289\n      ],\n      [\n        \"▁キラ\",\n        -12.34477424621582\n      ],\n      [\n        \"▁東口\",\n        -12.344802856445312\n      ],\n      [\n        \"累\",\n        -12.34495735168457\n      ],\n      [\n        \"OCA\",\n        -12.345134735107422\n      ],\n      [\n        \"fin\",\n        -12.345147132873535\n      ],\n      [\n        \"▁ベンツ\",\n        -12.345264434814453\n      ],\n      [\n        \"▁愛犬\",\n        -12.345297813415527\n      ],\n      [\n        \"刃\",\n        -12.34536075592041\n      ],\n      [\n        \"▁何かしら\",\n        -12.345365524291992\n      ],\n      [\n        \"▁南朝\",\n        -12.34538459777832\n      ],\n      [\n        \"▁撮れ\",\n        -12.345431327819824\n      ],\n      [\n        \"▁三越\",\n        -12.345561027526855\n      ],\n      [\n        \"慰\",\n        -12.345603942871094\n      ],\n      [\n        \"ann\",\n        -12.345608711242676\n      ],\n      [\n        \"▁桃山\",\n        -12.345621109008789\n      ],\n      [\n        \"▁スタンス\",\n        -12.345622062683105\n      ],\n      [\n        \"▁ゆとり\",\n        -12.345682144165039\n      ],\n      [\n        \"▁優勢\",\n        -12.34576416015625\n      ],\n      [\n        \"▁有利な\",\n        -12.345789909362793\n      ],\n      [\n        \"▁KI\",\n        -12.345818519592285\n      ],\n      [\n        \"▁西鉄\",\n        -12.345907211303711\n      ],\n      [\n        \"糧\",\n        -12.345952987670898\n      ],\n      [\n        \"▁Par\",\n        -12.346050262451172\n      ],\n      [\n        \"▁出家\",\n        -12.346123695373535\n      ],\n      [\n        \"▁UK\",\n        -12.346142768859863\n      ],\n      [\n        \"code\",\n        -12.346263885498047\n      ],\n      [\n        \"▁スイート\",\n        -12.346354484558105\n      ],\n      [\n        \"ě\",\n        -12.346449851989746\n      ],\n      [\n        \"フォーム\",\n        -12.346467018127441\n      ],\n      [\n        \"▁メッシュ\",\n        -12.34650707244873\n      ],\n      [\n        \"▁オールド\",\n        -12.346545219421387\n      ],\n      [\n        \"▁エロい\",\n        -12.346550941467285\n      ],\n      [\n        \"▁ユネスコ\",\n        -12.346857070922852\n      ],\n      [\n        \"審査\",\n        -12.346874237060547\n      ],\n      [\n        \"OUND\",\n        -12.346915245056152\n      ],\n      [\n        \"▁名曲\",\n        -12.346979141235352\n      ],\n      [\n        \"▁フリーの\",\n        -12.346988677978516\n      ],\n      [\n        \"▁杭\",\n        -12.34702205657959\n      ],\n      [\n        \"▁ダニ\",\n        -12.347074508666992\n      ],\n      [\n        \"▁疾病\",\n        -12.347128868103027\n      ],\n      [\n        \"▁とどまった\",\n        -12.347132682800293\n      ],\n      [\n        \"▁ヒルズ\",\n        -12.347352981567383\n      ],\n      [\n        \"▁減額\",\n        -12.34747314453125\n      ],\n      [\n        \"インター\",\n        -12.347504615783691\n      ],\n      [\n        \"レック\",\n        -12.347618103027344\n      ],\n      [\n        \"巳\",\n        -12.347663879394531\n      ],\n      [\n        \"▁コロラド\",\n        -12.347672462463379\n      ],\n      [\n        \"▁出かけて\",\n        -12.34776496887207\n      ],\n      [\n        \"大分\",\n        -12.347783088684082\n      ],\n      [\n        \"▁アドバンス\",\n        -12.34781265258789\n      ],\n      [\n        \"▁オナクラ\",\n        -12.347832679748535\n      ],\n      [\n        \"デュー\",\n        -12.347886085510254\n      ],\n      [\n        \"▁ヒーリング\",\n        -12.347946166992188\n      ],\n      [\n        \"▁ジミー\",\n        -12.3480224609375\n      ],\n      [\n        \"輩\",\n        -12.348029136657715\n      ],\n      [\n        \"▁自発\",\n        -12.348062515258789\n      ],\n      [\n        \"▁アントニオ\",\n        -12.348079681396484\n      ],\n      [\n        \"▁目次\",\n        -12.348088264465332\n      ],\n      [\n        \"▁無理な\",\n        -12.34814739227295\n      ],\n      [\n        \"▁ウィキペディア\",\n        -12.34821605682373\n      ],\n      [\n        \"▁1871\",\n        -12.348217010498047\n      ],\n      [\n        \"ビデオ\",\n        -12.348237991333008\n      ],\n      [\n        \"▁蟹\",\n        -12.348484992980957\n      ],\n      [\n        \"▁引換\",\n        -12.348543167114258\n      ],\n      [\n        \"▁太守\",\n        -12.348596572875977\n      ],\n      [\n        \"▁アオ\",\n        -12.348620414733887\n      ],\n      [\n        \"▁探知\",\n        -12.348743438720703\n      ],\n      [\n        \"▁買い求め\",\n        -12.348760604858398\n      ],\n      [\n        \"▁末端\",\n        -12.348788261413574\n      ],\n      [\n        \"▁キロ\",\n        -12.348801612854004\n      ],\n      [\n        \"▁成り立つ\",\n        -12.349091529846191\n      ],\n      [\n        \"user\",\n        -12.349132537841797\n      ],\n      [\n        \"▁登壇\",\n        -12.34935188293457\n      ],\n      [\n        \"▁あれこれ\",\n        -12.349397659301758\n      ],\n      [\n        \"▁遡る\",\n        -12.349441528320312\n      ],\n      [\n        \"▁商船\",\n        -12.349626541137695\n      ],\n      [\n        \"▁エチオピア\",\n        -12.349712371826172\n      ],\n      [\n        \"▁有難う\",\n        -12.349712371826172\n      ],\n      [\n        \"仮\",\n        -12.349740028381348\n      ],\n      [\n        \"ニアン\",\n        -12.349769592285156\n      ],\n      [\n        \"▁存\",\n        -12.349812507629395\n      ],\n      [\n        \"▁レーン\",\n        -12.349818229675293\n      ],\n      [\n        \"▁大村\",\n        -12.349997520446777\n      ],\n      [\n        \"▁フルート\",\n        -12.35001277923584\n      ],\n      [\n        \"イオン\",\n        -12.35014820098877\n      ],\n      [\n        \"▁目玉\",\n        -12.350203514099121\n      ],\n      [\n        \"▁だした\",\n        -12.35024356842041\n      ],\n      [\n        \"▁誓い\",\n        -12.350397109985352\n      ],\n      [\n        \"ハロ\",\n        -12.35040283203125\n      ],\n      [\n        \"▁チョン\",\n        -12.350748062133789\n      ],\n      [\n        \"▁晒\",\n        -12.350757598876953\n      ],\n      [\n        \"▁打った\",\n        -12.350912094116211\n      ],\n      [\n        \"▁対比\",\n        -12.350926399230957\n      ],\n      [\n        \"▁気動車\",\n        -12.35093879699707\n      ],\n      [\n        \"▁あたし\",\n        -12.350992202758789\n      ],\n      [\n        \"▁光沢\",\n        -12.35127067565918\n      ],\n      [\n        \"帽\",\n        -12.351277351379395\n      ],\n      [\n        \"▁原案\",\n        -12.35129165649414\n      ],\n      [\n        \"▁和風\",\n        -12.351346969604492\n      ],\n      [\n        \"▁近親\",\n        -12.351359367370605\n      ],\n      [\n        \"▁片側\",\n        -12.351402282714844\n      ],\n      [\n        \"十八\",\n        -12.351436614990234\n      ],\n      [\n        \"▁お盆\",\n        -12.351557731628418\n      ],\n      [\n        \"▁工藤\",\n        -12.351621627807617\n      ],\n      [\n        \"▁徴\",\n        -12.351682662963867\n      ],\n      [\n        \"▁理性\",\n        -12.351798057556152\n      ],\n      [\n        \"▁出かけ\",\n        -12.351800918579102\n      ],\n      [\n        \"輸\",\n        -12.35184097290039\n      ],\n      [\n        \"秦\",\n        -12.351916313171387\n      ],\n      [\n        \"▁ファイン\",\n        -12.351978302001953\n      ],\n      [\n        \"FU\",\n        -12.3519926071167\n      ],\n      [\n        \"▁くす\",\n        -12.352171897888184\n      ],\n      [\n        \"レジ\",\n        -12.35272216796875\n      ],\n      [\n        \"▁広東\",\n        -12.35283088684082\n      ],\n      [\n        \"圓\",\n        -12.352849960327148\n      ],\n      [\n        \"▁断絶\",\n        -12.352913856506348\n      ],\n      [\n        \"ウィッチ\",\n        -12.352946281433105\n      ],\n      [\n        \"▁ものすごく\",\n        -12.3529634475708\n      ],\n      [\n        \"▁動揺\",\n        -12.352991104125977\n      ],\n      [\n        \"▁増進\",\n        -12.353035926818848\n      ],\n      [\n        \"ヘア\",\n        -12.353215217590332\n      ],\n      [\n        \"▁さっき\",\n        -12.353389739990234\n      ],\n      [\n        \"ギョ\",\n        -12.35339069366455\n      ],\n      [\n        \"ros\",\n        -12.353407859802246\n      ],\n      [\n        \"ゼーション\",\n        -12.353484153747559\n      ],\n      [\n        \"▁鎧\",\n        -12.353690147399902\n      ],\n      [\n        \"tom\",\n        -12.35374927520752\n      ],\n      [\n        \"▁バーベキュー\",\n        -12.353806495666504\n      ],\n      [\n        \"▁ブライダル\",\n        -12.353827476501465\n      ],\n      [\n        \"▁例え\",\n        -12.353913307189941\n      ],\n      [\n        \"多摩\",\n        -12.354080200195312\n      ],\n      [\n        \"▁講和\",\n        -12.354108810424805\n      ],\n      [\n        \"▁粉末\",\n        -12.354146957397461\n      ],\n      [\n        \"oom\",\n        -12.35421085357666\n      ],\n      [\n        \"▁握る\",\n        -12.354357719421387\n      ],\n      [\n        \"▁フォロワー\",\n        -12.354490280151367\n      ],\n      [\n        \"▁割と\",\n        -12.354545593261719\n      ],\n      [\n        \"▁召し\",\n        -12.354560852050781\n      ],\n      [\n        \"▁モントリオール\",\n        -12.354901313781738\n      ],\n      [\n        \"▁正当な\",\n        -12.355170249938965\n      ],\n      [\n        \"ろく\",\n        -12.355287551879883\n      ],\n      [\n        \"今では\",\n        -12.355384826660156\n      ],\n      [\n        \"▁支払って\",\n        -12.355464935302734\n      ],\n      [\n        \"伴\",\n        -12.355561256408691\n      ],\n      [\n        \"ッテル\",\n        -12.355703353881836\n      ],\n      [\n        \"▁コカ\",\n        -12.355728149414062\n      ],\n      [\n        \"▁領有\",\n        -12.35579776763916\n      ],\n      [\n        \"▁訊\",\n        -12.356009483337402\n      ],\n      [\n        \"▁ハゲ\",\n        -12.356107711791992\n      ],\n      [\n        \"ロジ\",\n        -12.356164932250977\n      ],\n      [\n        \"▁取り外し\",\n        -12.35622501373291\n      ],\n      [\n        \"仮に\",\n        -12.356228828430176\n      ],\n      [\n        \"▁Max\",\n        -12.35633659362793\n      ],\n      [\n        \"amb\",\n        -12.356350898742676\n      ],\n      [\n        \"▁無職\",\n        -12.356351852416992\n      ],\n      [\n        \"▁グッチ\",\n        -12.356374740600586\n      ],\n      [\n        \"桓\",\n        -12.35640811920166\n      ],\n      [\n        \"▁Em\",\n        -12.356525421142578\n      ],\n      [\n        \"▁対馬\",\n        -12.35654067993164\n      ],\n      [\n        \"▁鄭\",\n        -12.35661792755127\n      ],\n      [\n        \"▁ソーラー\",\n        -12.35666275024414\n      ],\n      [\n        \"▁浸水\",\n        -12.356679916381836\n      ],\n      [\n        \"▁カープ\",\n        -12.356756210327148\n      ],\n      [\n        \"▁鉛\",\n        -12.356785774230957\n      ],\n      [\n        \"▁本堂\",\n        -12.356833457946777\n      ],\n      [\n        \"▁シンセ\",\n        -12.356873512268066\n      ],\n      [\n        \"▁あたった\",\n        -12.357105255126953\n      ],\n      [\n        \"▁慈恵\",\n        -12.357111930847168\n      ],\n      [\n        \"▁陣地\",\n        -12.357179641723633\n      ],\n      [\n        \"▁既婚\",\n        -12.357213020324707\n      ],\n      [\n        \"▁却下\",\n        -12.357231140136719\n      ],\n      [\n        \"▁トウ\",\n        -12.357420921325684\n      ],\n      [\n        \"STER\",\n        -12.357421875\n      ],\n      [\n        \"▁_)\",\n        -12.357441902160645\n      ],\n      [\n        \"▁新羅\",\n        -12.357443809509277\n      ],\n      [\n        \"▁0408\",\n        -12.357550621032715\n      ],\n      [\n        \"▁判別\",\n        -12.357686996459961\n      ],\n      [\n        \"▁ホロ\",\n        -12.35776138305664\n      ],\n      [\n        \"酔\",\n        -12.357804298400879\n      ],\n      [\n        \"▁任せて\",\n        -12.357876777648926\n      ],\n      [\n        \"▁健全\",\n        -12.35795783996582\n      ],\n      [\n        \"▁大内\",\n        -12.358034133911133\n      ],\n      [\n        \"▁わき\",\n        -12.358047485351562\n      ],\n      [\n        \"▁GDP\",\n        -12.358048439025879\n      ],\n      [\n        \"▁サビ\",\n        -12.35806655883789\n      ],\n      [\n        \"▁艦船\",\n        -12.358095169067383\n      ],\n      [\n        \"デント\",\n        -12.358098030090332\n      ],\n      [\n        \"▁砲塔\",\n        -12.358128547668457\n      ],\n      [\n        \"▁理系\",\n        -12.358142852783203\n      ],\n      [\n        \"▁おはよう\",\n        -12.35833740234375\n      ],\n      [\n        \"▁高槻\",\n        -12.358475685119629\n      ],\n      [\n        \"▁エルサレム\",\n        -12.358603477478027\n      ],\n      [\n        \"▁古来\",\n        -12.358716011047363\n      ],\n      [\n        \"幼\",\n        -12.358721733093262\n      ],\n      [\n        \"▁釘\",\n        -12.358805656433105\n      ],\n      [\n        \"▁SDGs\",\n        -12.358878135681152\n      ],\n      [\n        \"▁牧野\",\n        -12.359020233154297\n      ],\n      [\n        \"▁インディーズ\",\n        -12.359134674072266\n      ],\n      [\n        \"姦\",\n        -12.359171867370605\n      ],\n      [\n        \"別の\",\n        -12.359183311462402\n      ],\n      [\n        \"▁一線\",\n        -12.359230041503906\n      ],\n      [\n        \"▁豊か\",\n        -12.359232902526855\n      ],\n      [\n        \"life\",\n        -12.359383583068848\n      ],\n      [\n        \"荒廃\",\n        -12.359469413757324\n      ],\n      [\n        \"▁多目的\",\n        -12.359524726867676\n      ],\n      [\n        \"▁1896\",\n        -12.359599113464355\n      ],\n      [\n        \"勇\",\n        -12.359697341918945\n      ],\n      [\n        \"▁匹敵\",\n        -12.35975456237793\n      ],\n      [\n        \"▁文具\",\n        -12.359827041625977\n      ],\n      [\n        \"季節\",\n        -12.360028266906738\n      ],\n      [\n        \"ガメ\",\n        -12.360140800476074\n      ],\n      [\n        \"GR\",\n        -12.360162734985352\n      ],\n      [\n        \"▁呈し\",\n        -12.360225677490234\n      ],\n      [\n        \"▁教訓\",\n        -12.360332489013672\n      ],\n      [\n        \"▁ホームズ\",\n        -12.360347747802734\n      ],\n      [\n        \"▁大敗\",\n        -12.360389709472656\n      ],\n      [\n        \"▁ナムコ\",\n        -12.3604097366333\n      ],\n      [\n        \"▁揃えて\",\n        -12.360686302185059\n      ],\n      [\n        \"▁断層\",\n        -12.360748291015625\n      ],\n      [\n        \"▁基板\",\n        -12.360808372497559\n      ],\n      [\n        \"▁各所\",\n        -12.36082649230957\n      ],\n      [\n        \"▁最期\",\n        -12.360857963562012\n      ],\n      [\n        \"▁性感\",\n        -12.36093521118164\n      ],\n      [\n        \"▁収縮\",\n        -12.360962867736816\n      ],\n      [\n        \"▁会派\",\n        -12.360995292663574\n      ],\n      [\n        \"▁シタデル\",\n        -12.361079216003418\n      ],\n      [\n        \"▁Light\",\n        -12.361109733581543\n      ],\n      [\n        \"▁エラ\",\n        -12.361164093017578\n      ],\n      [\n        \"かせ\",\n        -12.361196517944336\n      ],\n      [\n        \"▁ポテンシャル\",\n        -12.361217498779297\n      ],\n      [\n        \"▁ジル\",\n        -12.361248016357422\n      ],\n      [\n        \"▁浮かび\",\n        -12.361428260803223\n      ],\n      [\n        \"できる\",\n        -12.361495971679688\n      ],\n      [\n        \"▁おいしく\",\n        -12.361566543579102\n      ],\n      [\n        \"д\",\n        -12.3616304397583\n      ],\n      [\n        \"bar\",\n        -12.361716270446777\n      ],\n      [\n        \"▁造営\",\n        -12.361739158630371\n      ],\n      [\n        \"孤\",\n        -12.36176586151123\n      ],\n      [\n        \"▁金山\",\n        -12.361787796020508\n      ],\n      [\n        \"預\",\n        -12.361894607543945\n      ],\n      [\n        \"▁擁する\",\n        -12.361906051635742\n      ],\n      [\n        \"▁対岸\",\n        -12.361908912658691\n      ],\n      [\n        \"▁親会社\",\n        -12.362046241760254\n      ],\n      [\n        \"tech\",\n        -12.362092971801758\n      ],\n      [\n        \"下半身\",\n        -12.362464904785156\n      ],\n      [\n        \"▁著しい\",\n        -12.362492561340332\n      ],\n      [\n        \"▁送金\",\n        -12.362497329711914\n      ],\n      [\n        \"▁えり\",\n        -12.362906455993652\n      ],\n      [\n        \"まき\",\n        -12.36291790008545\n      ],\n      [\n        \"▁Gen\",\n        -12.362937927246094\n      ],\n      [\n        \"▁極力\",\n        -12.362979888916016\n      ],\n      [\n        \"▁オカ\",\n        -12.362998008728027\n      ],\n      [\n        \"ข\",\n        -12.363009452819824\n      ],\n      [\n        \"▁収蔵\",\n        -12.36313247680664\n      ],\n      [\n        \"▁1897\",\n        -12.363152503967285\n      ],\n      [\n        \"▁ポット\",\n        -12.363207817077637\n      ],\n      [\n        \"現実\",\n        -12.363404273986816\n      ],\n      [\n        \"▁連日\",\n        -12.363419532775879\n      ],\n      [\n        \"gan\",\n        -12.363494873046875\n      ],\n      [\n        \"▁ルノー\",\n        -12.363503456115723\n      ],\n      [\n        \"▁怖く\",\n        -12.363984107971191\n      ],\n      [\n        \"▁飛ば\",\n        -12.364068031311035\n      ],\n      [\n        \"南北\",\n        -12.364124298095703\n      ],\n      [\n        \"pen\",\n        -12.364127159118652\n      ],\n      [\n        \"▁pos\",\n        -12.364156723022461\n      ],\n      [\n        \"ニオ\",\n        -12.364215850830078\n      ],\n      [\n        \"▁out\",\n        -12.364249229431152\n      ],\n      [\n        \"IKE\",\n        -12.364272117614746\n      ],\n      [\n        \"麦\",\n        -12.364410400390625\n      ],\n      [\n        \"▁大丈夫だ\",\n        -12.364447593688965\n      ],\n      [\n        \"▁画期的な\",\n        -12.364470481872559\n      ],\n      [\n        \"▁鋳造\",\n        -12.36452865600586\n      ],\n      [\n        \"▁信徒\",\n        -12.364551544189453\n      ],\n      [\n        \"▁創る\",\n        -12.3645601272583\n      ],\n      [\n        \"産業\",\n        -12.36466121673584\n      ],\n      [\n        \"▁生む\",\n        -12.364672660827637\n      ],\n      [\n        \"ピット\",\n        -12.364700317382812\n      ],\n      [\n        \"▁失踪\",\n        -12.364945411682129\n      ],\n      [\n        \"▁関連付け\",\n        -12.365163803100586\n      ],\n      [\n        \"▁見直す\",\n        -12.365221977233887\n      ],\n      [\n        \"恋愛\",\n        -12.365290641784668\n      ],\n      [\n        \"1925\",\n        -12.365340232849121\n      ],\n      [\n        \"▁Her\",\n        -12.365341186523438\n      ],\n      [\n        \"tail\",\n        -12.365346908569336\n      ],\n      [\n        \"▁壊れ\",\n        -12.365407943725586\n      ],\n      [\n        \"▁Corporation\",\n        -12.365496635437012\n      ],\n      [\n        \"▁亜鉛\",\n        -12.36550521850586\n      ],\n      [\n        \"寂\",\n        -12.365525245666504\n      ],\n      [\n        \"叉\",\n        -12.36563491821289\n      ],\n      [\n        \"▁エクセル\",\n        -12.365689277648926\n      ],\n      [\n        \"クチ\",\n        -12.365768432617188\n      ],\n      [\n        \"▁さっぱり\",\n        -12.365784645080566\n      ],\n      [\n        \"▁埋\",\n        -12.365859031677246\n      ],\n      [\n        \"▁キャット\",\n        -12.365863800048828\n      ],\n      [\n        \"▁118\",\n        -12.365883827209473\n      ],\n      [\n        \"▁大小\",\n        -12.3659029006958\n      ],\n      [\n        \"▁無効に\",\n        -12.365991592407227\n      ],\n      [\n        \"ざき\",\n        -12.365996360778809\n      ],\n      [\n        \"▁1899\",\n        -12.366332054138184\n      ],\n      [\n        \"プロジェクト\",\n        -12.366486549377441\n      ],\n      [\n        \"どろ\",\n        -12.366491317749023\n      ],\n      [\n        \"▁最悪\",\n        -12.366862297058105\n      ],\n      [\n        \"▁ドラマー\",\n        -12.366899490356445\n      ],\n      [\n        \"▁ROCK\",\n        -12.3670654296875\n      ],\n      [\n        \"▁アルマ\",\n        -12.367074012756348\n      ],\n      [\n        \"▁アデ\",\n        -12.367143630981445\n      ],\n      [\n        \"▁瑞穂\",\n        -12.36732292175293\n      ],\n      [\n        \"調べ\",\n        -12.367341995239258\n      ],\n      [\n        \"戴\",\n        -12.367568016052246\n      ],\n      [\n        \"▁おとな\",\n        -12.367713928222656\n      ],\n      [\n        \"▁落ち着き\",\n        -12.367851257324219\n      ],\n      [\n        \"▁リンカーン\",\n        -12.367990493774414\n      ],\n      [\n        \"▁ナナ\",\n        -12.368429183959961\n      ],\n      [\n        \"レギュラー\",\n        -12.368444442749023\n      ],\n      [\n        \"紫\",\n        -12.368444442749023\n      ],\n      [\n        \"▁寅\",\n        -12.368449211120605\n      ],\n      [\n        \"▁傾\",\n        -12.36864948272705\n      ],\n      [\n        \"▁一斉に\",\n        -12.36866283416748\n      ],\n      [\n        \"▁フランツ\",\n        -12.368681907653809\n      ],\n      [\n        \"live\",\n        -12.368849754333496\n      ],\n      [\n        \"レベル\",\n        -12.368878364562988\n      ],\n      [\n        \"▁慣れた\",\n        -12.369125366210938\n      ],\n      [\n        \"rm\",\n        -12.36916732788086\n      ],\n      [\n        \"青森\",\n        -12.369277954101562\n      ],\n      [\n        \"▁エクササイズ\",\n        -12.369378089904785\n      ],\n      [\n        \"▁弾き\",\n        -12.369388580322266\n      ],\n      [\n        \"錬\",\n        -12.369444847106934\n      ],\n      [\n        \"▁布告\",\n        -12.369451522827148\n      ],\n      [\n        \"▁プラグ\",\n        -12.369458198547363\n      ],\n      [\n        \"ART\",\n        -12.369527816772461\n      ],\n      [\n        \"▁連立\",\n        -12.369771957397461\n      ],\n      [\n        \"Heydouga\",\n        -12.369808197021484\n      ],\n      [\n        \"▁スワ\",\n        -12.369844436645508\n      ],\n      [\n        \"▁朝日放送\",\n        -12.369932174682617\n      ],\n      [\n        \"もち\",\n        -12.36998462677002\n      ],\n      [\n        \"▁出会\",\n        -12.369997024536133\n      ],\n      [\n        \"▁ダグラス\",\n        -12.369999885559082\n      ],\n      [\n        \"▁郁\",\n        -12.370046615600586\n      ],\n      [\n        \"ถ\",\n        -12.370072364807129\n      ],\n      [\n        \"蔣\",\n        -12.370072364807129\n      ],\n      [\n        \"▁下し\",\n        -12.370118141174316\n      ],\n      [\n        \"墓所\",\n        -12.370317459106445\n      ],\n      [\n        \"プー\",\n        -12.370352745056152\n      ],\n      [\n        \"▁熱狂\",\n        -12.370410919189453\n      ],\n      [\n        \"ケア\",\n        -12.370485305786133\n      ],\n      [\n        \"▁要員\",\n        -12.370524406433105\n      ],\n      [\n        \"▁駆\",\n        -12.370619773864746\n      ],\n      [\n        \"▁叶え\",\n        -12.370674133300781\n      ],\n      [\n        \"▁ビーズ\",\n        -12.370810508728027\n      ],\n      [\n        \"▁ニュージャージー\",\n        -12.370906829833984\n      ],\n      [\n        \"▁尾崎\",\n        -12.371047973632812\n      ],\n      [\n        \"▁ノーマル\",\n        -12.371054649353027\n      ],\n      [\n        \"ミッション\",\n        -12.371077537536621\n      ],\n      [\n        \"ACT\",\n        -12.371187210083008\n      ],\n      [\n        \"ビジョン\",\n        -12.371235847473145\n      ],\n      [\n        \"▁スタメン\",\n        -12.371574401855469\n      ],\n      [\n        \"▁連鎖\",\n        -12.371636390686035\n      ],\n      [\n        \"▁ヒール\",\n        -12.371695518493652\n      ],\n      [\n        \"par\",\n        -12.371853828430176\n      ],\n      [\n        \"▁怒って\",\n        -12.372025489807129\n      ],\n      [\n        \"レンジャー\",\n        -12.372163772583008\n      ],\n      [\n        \"▁吹田\",\n        -12.372315406799316\n      ],\n      [\n        \"クロー\",\n        -12.37233829498291\n      ],\n      [\n        \"▁1870\",\n        -12.372356414794922\n      ],\n      [\n        \"侍\",\n        -12.37251091003418\n      ],\n      [\n        \"紛\",\n        -12.372557640075684\n      ],\n      [\n        \"皿\",\n        -12.37256145477295\n      ],\n      [\n        \"▁文政\",\n        -12.372576713562012\n      ],\n      [\n        \"▁執り行\",\n        -12.372577667236328\n      ],\n      [\n        \"▁リール\",\n        -12.372583389282227\n      ],\n      [\n        \"KS\",\n        -12.372640609741211\n      ],\n      [\n        \"▁was\",\n        -12.372668266296387\n      ],\n      [\n        \"▁きたり\",\n        -12.372708320617676\n      ],\n      [\n        \"▁バルコニー\",\n        -12.372716903686523\n      ],\n      [\n        \"続け\",\n        -12.372849464416504\n      ],\n      [\n        \"▁フェニックス\",\n        -12.372871398925781\n      ],\n      [\n        \"▁炭鉱\",\n        -12.373008728027344\n      ],\n      [\n        \"ago\",\n        -12.373041152954102\n      ],\n      [\n        \"lect\",\n        -12.373266220092773\n      ],\n      [\n        \"tre\",\n        -12.373359680175781\n      ],\n      [\n        \"▁民放\",\n        -12.373453140258789\n      ],\n      [\n        \"▁プレイス\",\n        -12.373490333557129\n      ],\n      [\n        \"▁スローガン\",\n        -12.373917579650879\n      ],\n      [\n        \"はる\",\n        -12.374091148376465\n      ],\n      [\n        \"▁UNI\",\n        -12.37410831451416\n      ],\n      [\n        \"▁MX\",\n        -12.374276161193848\n      ],\n      [\n        \"ジェル\",\n        -12.374320030212402\n      ],\n      [\n        \"▁付録\",\n        -12.374444007873535\n      ],\n      [\n        \"▁広まった\",\n        -12.374532699584961\n      ],\n      [\n        \"▁日比谷\",\n        -12.374670028686523\n      ],\n      [\n        \"▁相当な\",\n        -12.374680519104004\n      ],\n      [\n        \"▁そっくり\",\n        -12.37471866607666\n      ],\n      [\n        \"▁予感\",\n        -12.37474536895752\n      ],\n      [\n        \"▁催眠\",\n        -12.374829292297363\n      ],\n      [\n        \"▁part\",\n        -12.374835968017578\n      ],\n      [\n        \"▁キングダム\",\n        -12.374874114990234\n      ],\n      [\n        \"▁仔\",\n        -12.37506103515625\n      ],\n      [\n        \"▁デジモン\",\n        -12.375138282775879\n      ],\n      [\n        \"姿\",\n        -12.375173568725586\n      ],\n      [\n        \"▁頑張る\",\n        -12.375307083129883\n      ],\n      [\n        \"▁まどか\",\n        -12.375367164611816\n      ],\n      [\n        \"▁担任\",\n        -12.375412940979004\n      ],\n      [\n        \"▁戻し\",\n        -12.375459671020508\n      ],\n      [\n        \"▁GW\",\n        -12.37551212310791\n      ],\n      [\n        \"▁許して\",\n        -12.375590324401855\n      ],\n      [\n        \"ヴィッチ\",\n        -12.375596046447754\n      ],\n      [\n        \"▁やれば\",\n        -12.375636100769043\n      ],\n      [\n        \"script\",\n        -12.375662803649902\n      ],\n      [\n        \"ファイア\",\n        -12.375712394714355\n      ],\n      [\n        \"っぱい\",\n        -12.375726699829102\n      ],\n      [\n        \"▁型式\",\n        -12.375821113586426\n      ],\n      [\n        \"▁模した\",\n        -12.37592887878418\n      ],\n      [\n        \"▁沈黙\",\n        -12.375931739807129\n      ],\n      [\n        \"▁シアトル\",\n        -12.376068115234375\n      ],\n      [\n        \"▁ヒップホップ\",\n        -12.376206398010254\n      ],\n      [\n        \"ばた\",\n        -12.376255989074707\n      ],\n      [\n        \"▁東区\",\n        -12.376277923583984\n      ],\n      [\n        \"▁CAS\",\n        -12.376331329345703\n      ],\n      [\n        \"▁厚い\",\n        -12.376450538635254\n      ],\n      [\n        \"▁プラント\",\n        -12.376561164855957\n      ],\n      [\n        \"▁迅速\",\n        -12.376761436462402\n      ],\n      [\n        \"▁ベラ\",\n        -12.376803398132324\n      ],\n      [\n        \"IME\",\n        -12.376852035522461\n      ],\n      [\n        \"ニール\",\n        -12.376914978027344\n      ],\n      [\n        \"▁FS\",\n        -12.377008438110352\n      ],\n      [\n        \"▁時空\",\n        -12.377132415771484\n      ],\n      [\n        \"▁快楽\",\n        -12.377178192138672\n      ],\n      [\n        \"▁採集\",\n        -12.377609252929688\n      ],\n      [\n        \"rc\",\n        -12.377677917480469\n      ],\n      [\n        \"▁途絶え\",\n        -12.377745628356934\n      ],\n      [\n        \"▁教習\",\n        -12.377787590026855\n      ],\n      [\n        \"▁こだわった\",\n        -12.377800941467285\n      ],\n      [\n        \"▁まき\",\n        -12.377866744995117\n      ],\n      [\n        \"▁取り揃えて\",\n        -12.377880096435547\n      ],\n      [\n        \"真面目\",\n        -12.377881050109863\n      ],\n      [\n        \"▁リーフ\",\n        -12.378016471862793\n      ],\n      [\n        \"rp\",\n        -12.378077507019043\n      ],\n      [\n        \"▁ジョセフ\",\n        -12.3782377243042\n      ],\n      [\n        \"▁了解\",\n        -12.378305435180664\n      ],\n      [\n        \"▁許す\",\n        -12.378535270690918\n      ],\n      [\n        \"▁協賛\",\n        -12.378599166870117\n      ],\n      [\n        \"トラー\",\n        -12.378697395324707\n      ],\n      [\n        \"▁吉祥寺\",\n        -12.378866195678711\n      ],\n      [\n        \"▁遷移\",\n        -12.378872871398926\n      ],\n      [\n        \"高齢\",\n        -12.379066467285156\n      ],\n      [\n        \"すい\",\n        -12.379095077514648\n      ],\n      [\n        \"▁壊れて\",\n        -12.379131317138672\n      ],\n      [\n        \"▁マンハッタン\",\n        -12.379146575927734\n      ],\n      [\n        \"▁AG\",\n        -12.379232406616211\n      ],\n      [\n        \"▁忠実\",\n        -12.379426956176758\n      ],\n      [\n        \"▁紡\",\n        -12.379539489746094\n      ],\n      [\n        \"▁公明党\",\n        -12.379568099975586\n      ],\n      [\n        \"▁追記\",\n        -12.37961196899414\n      ],\n      [\n        \"▁一夜\",\n        -12.379626274108887\n      ],\n      [\n        \"▁松岡\",\n        -12.379694938659668\n      ],\n      [\n        \"▁中々\",\n        -12.379705429077148\n      ],\n      [\n        \"▁平田\",\n        -12.37975788116455\n      ],\n      [\n        \"かして\",\n        -12.379800796508789\n      ],\n      [\n        \"▁少人数\",\n        -12.37985610961914\n      ],\n      [\n        \"保険\",\n        -12.379857063293457\n      ],\n      [\n        \"▁post\",\n        -12.38007640838623\n      ],\n      [\n        \"ッツァ\",\n        -12.380125045776367\n      ],\n      [\n        \"▁Design\",\n        -12.380172729492188\n      ],\n      [\n        \"▁次長\",\n        -12.380210876464844\n      ],\n      [\n        \"▁揃い\",\n        -12.38027286529541\n      ],\n      [\n        \"▁ART\",\n        -12.380291938781738\n      ],\n      [\n        \"KI\",\n        -12.380294799804688\n      ],\n      [\n        \"▁生駒\",\n        -12.38033390045166\n      ],\n      [\n        \"▁やめた\",\n        -12.380374908447266\n      ],\n      [\n        \"中古\",\n        -12.380385398864746\n      ],\n      [\n        \"ika\",\n        -12.380391120910645\n      ],\n      [\n        \"▁リクルート\",\n        -12.380410194396973\n      ],\n      [\n        \"競\",\n        -12.380417823791504\n      ],\n      [\n        \"▁ARP\",\n        -12.380459785461426\n      ],\n      [\n        \"▁ポピュラー\",\n        -12.380550384521484\n      ],\n      [\n        \"ほぼ\",\n        -12.380594253540039\n      ],\n      [\n        \"▁異例の\",\n        -12.380636215209961\n      ],\n      [\n        \"aj\",\n        -12.380645751953125\n      ],\n      [\n        \"デンス\",\n        -12.380819320678711\n      ],\n      [\n        \"▁凡\",\n        -12.380839347839355\n      ],\n      [\n        \"カバー\",\n        -12.380846977233887\n      ],\n      [\n        \"ura\",\n        -12.380895614624023\n      ],\n      [\n        \"▁ICT\",\n        -12.380914688110352\n      ],\n      [\n        \"▁280\",\n        -12.381092071533203\n      ],\n      [\n        \"▁大友\",\n        -12.381098747253418\n      ],\n      [\n        \"▁かわり\",\n        -12.381143569946289\n      ],\n      [\n        \"▁縁起\",\n        -12.38117504119873\n      ],\n      [\n        \"▁ルカ\",\n        -12.38122272491455\n      ],\n      [\n        \"▁立花\",\n        -12.381224632263184\n      ],\n      [\n        \"會\",\n        -12.38125228881836\n      ],\n      [\n        \"▁凝縮\",\n        -12.38126277923584\n      ],\n      [\n        \"▁焼く\",\n        -12.381375312805176\n      ],\n      [\n        \"作者\",\n        -12.381380081176758\n      ],\n      [\n        \"ロボ\",\n        -12.381393432617188\n      ],\n      [\n        \"▁転居\",\n        -12.38144302368164\n      ],\n      [\n        \"国勢\",\n        -12.381479263305664\n      ],\n      [\n        \"▁履いて\",\n        -12.381494522094727\n      ],\n      [\n        \"菱\",\n        -12.38155460357666\n      ],\n      [\n        \"▁うら\",\n        -12.38155746459961\n      ],\n      [\n        \"▁面した\",\n        -12.381573677062988\n      ],\n      [\n        \"▁パイオニア\",\n        -12.381674766540527\n      ],\n      [\n        \"▁OVA\",\n        -12.3817138671875\n      ],\n      [\n        \"▁州都\",\n        -12.381782531738281\n      ],\n      [\n        \"▁竜王\",\n        -12.381903648376465\n      ],\n      [\n        \"REA\",\n        -12.381916046142578\n      ],\n      [\n        \"▁常設\",\n        -12.382049560546875\n      ],\n      [\n        \"▁サムソナイト\",\n        -12.382096290588379\n      ],\n      [\n        \"サンシャイン\",\n        -12.382102012634277\n      ],\n      [\n        \"▁魚介\",\n        -12.382147789001465\n      ],\n      [\n        \"▁ナース\",\n        -12.38219165802002\n      ],\n      [\n        \"▁潜入\",\n        -12.382265090942383\n      ],\n      [\n        \"▁鳥羽\",\n        -12.382423400878906\n      ],\n      [\n        \"▁借\",\n        -12.38244342803955\n      ],\n      [\n        \"▁デトロイト\",\n        -12.382518768310547\n      ],\n      [\n        \"▁頼る\",\n        -12.382540702819824\n      ],\n      [\n        \"寸\",\n        -12.382561683654785\n      ],\n      [\n        \"赤ちゃん\",\n        -12.382580757141113\n      ],\n      [\n        \"▁key\",\n        -12.382591247558594\n      ],\n      [\n        \"ランキング\",\n        -12.382628440856934\n      ],\n      [\n        \"▁つもりです\",\n        -12.382695198059082\n      ],\n      [\n        \"▁サイコ\",\n        -12.382776260375977\n      ],\n      [\n        \"▁刑法\",\n        -12.382881164550781\n      ],\n      [\n        \"▁レガ\",\n        -12.382895469665527\n      ],\n      [\n        \"GH\",\n        -12.383003234863281\n      ],\n      [\n        \"▁有利に\",\n        -12.383095741271973\n      ],\n      [\n        \"ぐち\",\n        -12.383326530456543\n      ],\n      [\n        \"▁開口\",\n        -12.383381843566895\n      ],\n      [\n        \"▁スターズ\",\n        -12.383386611938477\n      ],\n      [\n        \"▁タケ\",\n        -12.383416175842285\n      ],\n      [\n        \"別名\",\n        -12.383440971374512\n      ],\n      [\n        \"с\",\n        -12.383502960205078\n      ],\n      [\n        \"▁おいし\",\n        -12.383623123168945\n      ],\n      [\n        \"わか\",\n        -12.383639335632324\n      ],\n      [\n        \"桃\",\n        -12.383657455444336\n      ],\n      [\n        \"De\",\n        -12.383689880371094\n      ],\n      [\n        \"▁細工\",\n        -12.383766174316406\n      ],\n      [\n        \"▁祭典\",\n        -12.38377857208252\n      ],\n      [\n        \"▁157\",\n        -12.383872032165527\n      ],\n      [\n        \"▁DB\",\n        -12.38388442993164\n      ],\n      [\n        \"▁覆う\",\n        -12.383916854858398\n      ],\n      [\n        \"▁五郎\",\n        -12.383943557739258\n      ],\n      [\n        \"テイン\",\n        -12.383990287780762\n      ],\n      [\n        \"▁播磨\",\n        -12.38406753540039\n      ],\n      [\n        \"ful\",\n        -12.384167671203613\n      ],\n      [\n        \"▁喜多\",\n        -12.38436508178711\n      ],\n      [\n        \"▁inc\",\n        -12.384387016296387\n      ],\n      [\n        \"▁放ち\",\n        -12.3848876953125\n      ],\n      [\n        \"ゲート\",\n        -12.384960174560547\n      ],\n      [\n        \"▁許し\",\n        -12.384970664978027\n      ],\n      [\n        \"▁幽霊\",\n        -12.385072708129883\n      ],\n      [\n        \"▁推計\",\n        -12.385075569152832\n      ],\n      [\n        \"十六\",\n        -12.385144233703613\n      ],\n      [\n        \"▁登る\",\n        -12.385223388671875\n      ],\n      [\n        \"▁Post\",\n        -12.385232925415039\n      ],\n      [\n        \"▁問屋\",\n        -12.385359764099121\n      ],\n      [\n        \"▁黒色\",\n        -12.385416984558105\n      ],\n      [\n        \"No\",\n        -12.385534286499023\n      ],\n      [\n        \"VO\",\n        -12.385558128356934\n      ],\n      [\n        \"▁佐渡\",\n        -12.385574340820312\n      ],\n      [\n        \"桂\",\n        -12.385658264160156\n      ],\n      [\n        \"▁過ごせ\",\n        -12.385664939880371\n      ],\n      [\n        \"▁外伝\",\n        -12.38576602935791\n      ],\n      [\n        \"TL\",\n        -12.3858003616333\n      ],\n      [\n        \"▁突然の\",\n        -12.385805130004883\n      ],\n      [\n        \"ッハ\",\n        -12.385844230651855\n      ],\n      [\n        \"▁del\",\n        -12.38591480255127\n      ],\n      [\n        \"ああ\",\n        -12.385969161987305\n      ],\n      [\n        \"▁反して\",\n        -12.385981559753418\n      ],\n      [\n        \"▁ユン\",\n        -12.38603401184082\n      ],\n      [\n        \"ヘッド\",\n        -12.386226654052734\n      ],\n      [\n        \"▁侯爵\",\n        -12.386333465576172\n      ],\n      [\n        \"▁車輌\",\n        -12.386478424072266\n      ],\n      [\n        \"▁ちん\",\n        -12.386637687683105\n      ],\n      [\n        \"▁目論\",\n        -12.386648178100586\n      ],\n      [\n        \"▁CAM\",\n        -12.386650085449219\n      ],\n      [\n        \"畜\",\n        -12.386825561523438\n      ],\n      [\n        \"苦笑\",\n        -12.386961936950684\n      ],\n      [\n        \"ピカ\",\n        -12.387030601501465\n      ],\n      [\n        \"▁ファンデーション\",\n        -12.387031555175781\n      ],\n      [\n        \"▁ブロードウェイ\",\n        -12.38719367980957\n      ],\n      [\n        \"▁ゴースト\",\n        -12.387356758117676\n      ],\n      [\n        \"ANCE\",\n        -12.38755989074707\n      ],\n      [\n        \"▁退け\",\n        -12.38756275177002\n      ],\n      [\n        \"▁買い得\",\n        -12.387669563293457\n      ],\n      [\n        \"顕微\",\n        -12.387773513793945\n      ],\n      [\n        \"▁返さ\",\n        -12.387825012207031\n      ],\n      [\n        \"▁フランシス\",\n        -12.387853622436523\n      ],\n      [\n        \"▁Sony\",\n        -12.388154983520508\n      ],\n      [\n        \"ature\",\n        -12.388198852539062\n      ],\n      [\n        \"先ほど\",\n        -12.388293266296387\n      ],\n      [\n        \"タマ\",\n        -12.388306617736816\n      ],\n      [\n        \"▁結核\",\n        -12.388518333435059\n      ],\n      [\n        \"▁シノ\",\n        -12.388633728027344\n      ],\n      [\n        \"常に\",\n        -12.38866901397705\n      ],\n      [\n        \"▁斡旋\",\n        -12.388871192932129\n      ],\n      [\n        \"▁組立\",\n        -12.388886451721191\n      ],\n      [\n        \"▁転売\",\n        -12.388888359069824\n      ],\n      [\n        \"▁物品\",\n        -12.389062881469727\n      ],\n      [\n        \"▁インディアナ\",\n        -12.389171600341797\n      ],\n      [\n        \"▁豊臣\",\n        -12.389371871948242\n      ],\n      [\n        \"ations\",\n        -12.389395713806152\n      ],\n      [\n        \"▁MD\",\n        -12.389433860778809\n      ],\n      [\n        \"▁独特な\",\n        -12.389437675476074\n      ],\n      [\n        \"▁フェロー\",\n        -12.389721870422363\n      ],\n      [\n        \"▁シンプルで\",\n        -12.389863967895508\n      ],\n      [\n        \"ストレス\",\n        -12.389900207519531\n      ],\n      [\n        \"ead\",\n        -12.390003204345703\n      ],\n      [\n        \"BF\",\n        -12.390030860900879\n      ],\n      [\n        \"クィ\",\n        -12.390031814575195\n      ],\n      [\n        \"▁ラーニング\",\n        -12.390107154846191\n      ],\n      [\n        \"▁明らかで\",\n        -12.39037036895752\n      ],\n      [\n        \"怪\",\n        -12.390495300292969\n      ],\n      [\n        \"特技\",\n        -12.390572547912598\n      ],\n      [\n        \"▁サマ\",\n        -12.390643119812012\n      ],\n      [\n        \"▁干し\",\n        -12.390727996826172\n      ],\n      [\n        \"▁観覧\",\n        -12.390851974487305\n      ],\n      [\n        \"▁コスチューム\",\n        -12.39085578918457\n      ],\n      [\n        \"▁話せる\",\n        -12.39085578918457\n      ],\n      [\n        \"▁ライアン\",\n        -12.390924453735352\n      ],\n      [\n        \"▁財源\",\n        -12.390968322753906\n      ],\n      [\n        \"ソフト\",\n        -12.391080856323242\n      ],\n      [\n        \"▁繊細な\",\n        -12.391128540039062\n      ],\n      [\n        \"▁ピュア\",\n        -12.391196250915527\n      ],\n      [\n        \"▁起工\",\n        -12.391400337219238\n      ],\n      [\n        \"▁ドットコム\",\n        -12.391449928283691\n      ],\n      [\n        \"自ら\",\n        -12.3915433883667\n      ],\n      [\n        \"設立\",\n        -12.391563415527344\n      ],\n      [\n        \"▁不安定な\",\n        -12.391685485839844\n      ],\n      [\n        \"檀\",\n        -12.391707420349121\n      ],\n      [\n        \"▁あろう\",\n        -12.391716957092285\n      ],\n      [\n        \"そこそこ\",\n        -12.391801834106445\n      ],\n      [\n        \"▁アーネスト\",\n        -12.391875267028809\n      ],\n      [\n        \"▁名乗った\",\n        -12.39199447631836\n      ],\n      [\n        \"▁左派\",\n        -12.392005920410156\n      ],\n      [\n        \"▁じっと\",\n        -12.392048835754395\n      ],\n      [\n        \"▁遷\",\n        -12.392068862915039\n      ],\n      [\n        \"▁如何\",\n        -12.392072677612305\n      ],\n      [\n        \"▁つもりで\",\n        -12.39215087890625\n      ],\n      [\n        \"▁浴びる\",\n        -12.392178535461426\n      ],\n      [\n        \"▁咳\",\n        -12.392395973205566\n      ],\n      [\n        \"マーン\",\n        -12.392411231994629\n      ],\n      [\n        \"顕\",\n        -12.3925142288208\n      ],\n      [\n        \"world\",\n        -12.392560005187988\n      ],\n      [\n        \"▁カートリッジ\",\n        -12.392715454101562\n      ],\n      [\n        \"▁ネクタイ\",\n        -12.392844200134277\n      ],\n      [\n        \"▁育って\",\n        -12.39316177368164\n      ],\n      [\n        \"ADE\",\n        -12.393280029296875\n      ],\n      [\n        \"リスク\",\n        -12.393391609191895\n      ],\n      [\n        \"▁玉川\",\n        -12.393423080444336\n      ],\n      [\n        \"▁一橋\",\n        -12.39342975616455\n      ],\n      [\n        \"▁QR\",\n        -12.393479347229004\n      ],\n      [\n        \"▁暗黒\",\n        -12.393494606018066\n      ],\n      [\n        \"▁稀に\",\n        -12.393513679504395\n      ],\n      [\n        \"▁対外\",\n        -12.393516540527344\n      ],\n      [\n        \"▁飛騨\",\n        -12.393556594848633\n      ],\n      [\n        \"▁270\",\n        -12.393597602844238\n      ],\n      [\n        \"▁みず\",\n        -12.393624305725098\n      ],\n      [\n        \"▁くせ\",\n        -12.39362621307373\n      ],\n      [\n        \"▁草津\",\n        -12.393662452697754\n      ],\n      [\n        \"▁救命\",\n        -12.393763542175293\n      ],\n      [\n        \"lat\",\n        -12.393811225891113\n      ],\n      [\n        \"▁コンセント\",\n        -12.39400577545166\n      ],\n      [\n        \"▁かんたん\",\n        -12.394020080566406\n      ],\n      [\n        \"▁売り場\",\n        -12.39405345916748\n      ],\n      [\n        \"▁リオデジャネイロ\",\n        -12.394256591796875\n      ],\n      [\n        \"▁ペダル\",\n        -12.394286155700684\n      ],\n      [\n        \"ition\",\n        -12.394338607788086\n      ],\n      [\n        \"▁あしら\",\n        -12.394371032714844\n      ],\n      [\n        \"▁ほっと\",\n        -12.394449234008789\n      ],\n      [\n        \"トリス\",\n        -12.394574165344238\n      ],\n      [\n        \"▁河北\",\n        -12.394634246826172\n      ],\n      [\n        \"ずっと\",\n        -12.39464282989502\n      ],\n      [\n        \"▁急な\",\n        -12.394659042358398\n      ],\n      [\n        \"ology\",\n        -12.394659996032715\n      ],\n      [\n        \"▁裾\",\n        -12.394726753234863\n      ],\n      [\n        \"▁たまご\",\n        -12.394776344299316\n      ],\n      [\n        \"▁不明だ\",\n        -12.394803047180176\n      ],\n      [\n        \"▁Act\",\n        -12.39495849609375\n      ],\n      [\n        \"ーっと\",\n        -12.395095825195312\n      ],\n      [\n        \"▁ゲン\",\n        -12.395145416259766\n      ],\n      [\n        \"ャー\",\n        -12.395268440246582\n      ],\n      [\n        \"▁ウルフ\",\n        -12.395337104797363\n      ],\n      [\n        \"▁杖\",\n        -12.395354270935059\n      ],\n      [\n        \"▁裏面\",\n        -12.395403861999512\n      ],\n      [\n        \"グリーン\",\n        -12.395411491394043\n      ],\n      [\n        \"▁織物\",\n        -12.395464897155762\n      ],\n      [\n        \"毎回\",\n        -12.395540237426758\n      ],\n      [\n        \"組み\",\n        -12.395565032958984\n      ],\n      [\n        \"▁残念です\",\n        -12.395570755004883\n      ],\n      [\n        \"業務\",\n        -12.395589828491211\n      ],\n      [\n        \"▁ヒュ\",\n        -12.395617485046387\n      ],\n      [\n        \"▁墳\",\n        -12.395685195922852\n      ],\n      [\n        \"▁ルブタン\",\n        -12.395691871643066\n      ],\n      [\n        \"▁牛肉\",\n        -12.395695686340332\n      ],\n      [\n        \"▁アイスランド\",\n        -12.395719528198242\n      ],\n      [\n        \"イェ\",\n        -12.395912170410156\n      ],\n      [\n        \"▁Mc\",\n        -12.396031379699707\n      ],\n      [\n        \"1918\",\n        -12.396120071411133\n      ],\n      [\n        \"▁期日\",\n        -12.396161079406738\n      ],\n      [\n        \"スロー\",\n        -12.396276473999023\n      ],\n      [\n        \"▁写像\",\n        -12.396339416503906\n      ],\n      [\n        \"▁AK\",\n        -12.396366119384766\n      ],\n      [\n        \"▁ばっかり\",\n        -12.396404266357422\n      ],\n      [\n        \"▁fals\",\n        -12.396462440490723\n      ],\n      [\n        \"▁先着\",\n        -12.396470069885254\n      ],\n      [\n        \"▁ポリエステル\",\n        -12.396547317504883\n      ],\n      [\n        \"▁不備\",\n        -12.396586418151855\n      ],\n      [\n        \"▁伏せ\",\n        -12.396651268005371\n      ],\n      [\n        \"▁表参道\",\n        -12.396690368652344\n      ],\n      [\n        \"▁迎撃\",\n        -12.396690368652344\n      ],\n      [\n        \"▁エピ\",\n        -12.39669418334961\n      ],\n      [\n        \"▁抱か\",\n        -12.396979331970215\n      ],\n      [\n        \"▁勝者\",\n        -12.39702033996582\n      ],\n      [\n        \"めん\",\n        -12.397360801696777\n      ],\n      [\n        \"▁サント\",\n        -12.397422790527344\n      ],\n      [\n        \"▁タイト\",\n        -12.39749526977539\n      ],\n      [\n        \"▁任官\",\n        -12.397497177124023\n      ],\n      [\n        \"ヒロ\",\n        -12.39755916595459\n      ],\n      [\n        \"▁婚活\",\n        -12.397754669189453\n      ],\n      [\n        \"旦那\",\n        -12.397846221923828\n      ],\n      [\n        \"慮\",\n        -12.397991180419922\n      ],\n      [\n        \"▁女学校\",\n        -12.398037910461426\n      ],\n      [\n        \"SK\",\n        -12.39805793762207\n      ],\n      [\n        \"▁貧乏\",\n        -12.398118019104004\n      ],\n      [\n        \"▁極東\",\n        -12.39834213256836\n      ],\n      [\n        \"▁波動\",\n        -12.398383140563965\n      ],\n      [\n        \"▁能登\",\n        -12.3984956741333\n      ],\n      [\n        \"▁探求\",\n        -12.39856243133545\n      ],\n      [\n        \"▁共鳴\",\n        -12.39858627319336\n      ],\n      [\n        \"▁膣\",\n        -12.398618698120117\n      ],\n      [\n        \"▁ヶ国\",\n        -12.398640632629395\n      ],\n      [\n        \"げた\",\n        -12.398860931396484\n      ],\n      [\n        \"▁ANA\",\n        -12.399004936218262\n      ],\n      [\n        \"▁できたり\",\n        -12.3990478515625\n      ],\n      [\n        \"▁赤外線\",\n        -12.39911937713623\n      ],\n      [\n        \"▁Tw\",\n        -12.39923095703125\n      ],\n      [\n        \"▁決心\",\n        -12.399299621582031\n      ],\n      [\n        \"篠\",\n        -12.399374008178711\n      ],\n      [\n        \"▁簡素\",\n        -12.399405479431152\n      ],\n      [\n        \"▁少子\",\n        -12.399676322937012\n      ],\n      [\n        \"▁中年\",\n        -12.39970588684082\n      ],\n      [\n        \"周囲\",\n        -12.399727821350098\n      ],\n      [\n        \"▁喜劇\",\n        -12.399739265441895\n      ],\n      [\n        \"▁ジーンズ\",\n        -12.399748802185059\n      ],\n      [\n        \"殖\",\n        -12.399944305419922\n      ],\n      [\n        \"作曲\",\n        -12.400110244750977\n      ],\n      [\n        \"ツク\",\n        -12.400113105773926\n      ],\n      [\n        \"ý\",\n        -12.400121688842773\n      ],\n      [\n        \"前年\",\n        -12.400136947631836\n      ],\n      [\n        \"▁プロト\",\n        -12.400165557861328\n      ],\n      [\n        \"▁サスペンス\",\n        -12.400264739990234\n      ],\n      [\n        \"ゝ\",\n        -12.400264739990234\n      ],\n      [\n        \"磯\",\n        -12.400426864624023\n      ],\n      [\n        \"ッペ\",\n        -12.4004545211792\n      ],\n      [\n        \"▁Chan\",\n        -12.400465965270996\n      ],\n      [\n        \"▁ラスベガス\",\n        -12.400694847106934\n      ],\n      [\n        \"▁込めた\",\n        -12.400718688964844\n      ],\n      [\n        \"MT\",\n        -12.400853157043457\n      ],\n      [\n        \"▁固体\",\n        -12.400882720947266\n      ],\n      [\n        \"▁射殺\",\n        -12.400903701782227\n      ],\n      [\n        \"▁サボ\",\n        -12.400914192199707\n      ],\n      [\n        \"▁移した\",\n        -12.400967597961426\n      ],\n      [\n        \"▁省令\",\n        -12.401341438293457\n      ],\n      [\n        \"▁貰える\",\n        -12.40134334564209\n      ],\n      [\n        \"tions\",\n        -12.401424407958984\n      ],\n      [\n        \"ウラ\",\n        -12.401433944702148\n      ],\n      [\n        \"▁往来\",\n        -12.401555061340332\n      ],\n      [\n        \"▁FL\",\n        -12.40156078338623\n      ],\n      [\n        \"▁いまだに\",\n        -12.401567459106445\n      ],\n      [\n        \"▁最安\",\n        -12.401787757873535\n      ],\n      [\n        \"▁フン\",\n        -12.401825904846191\n      ],\n      [\n        \"午\",\n        -12.401958465576172\n      ],\n      [\n        \"▁所沢\",\n        -12.402073860168457\n      ],\n      [\n        \"▁くれたら\",\n        -12.402077674865723\n      ],\n      [\n        \"▁マイアミ\",\n        -12.402416229248047\n      ],\n      [\n        \"▁算定\",\n        -12.40241813659668\n      ],\n      [\n        \"▁ジェンダー\",\n        -12.4024658203125\n      ],\n      [\n        \"▁ソープランド\",\n        -12.402497291564941\n      ],\n      [\n        \"▁定かで\",\n        -12.40256118774414\n      ],\n      [\n        \"▁村山\",\n        -12.402673721313477\n      ],\n      [\n        \"▁兼ねた\",\n        -12.402708053588867\n      ],\n      [\n        \"▁ウォーカー\",\n        -12.402718544006348\n      ],\n      [\n        \"ナント\",\n        -12.402728080749512\n      ],\n      [\n        \"▁粘土\",\n        -12.40274429321289\n      ],\n      [\n        \"▁av\",\n        -12.402746200561523\n      ],\n      [\n        \"▁ジョーダン\",\n        -12.402790069580078\n      ],\n      [\n        \"祖父\",\n        -12.402798652648926\n      ],\n      [\n        \"▁ギャラ\",\n        -12.402854919433594\n      ],\n      [\n        \"開業\",\n        -12.40286922454834\n      ],\n      [\n        \"▁どれほど\",\n        -12.403008460998535\n      ],\n      [\n        \"▁不信\",\n        -12.403121948242188\n      ],\n      [\n        \"▁生年月日\",\n        -12.403133392333984\n      ],\n      [\n        \"▁題して\",\n        -12.403135299682617\n      ],\n      [\n        \"▁1100\",\n        -12.403267860412598\n      ],\n      [\n        \"▁テイ\",\n        -12.403282165527344\n      ],\n      [\n        \"▁品目\",\n        -12.403326034545898\n      ],\n      [\n        \"グラス\",\n        -12.403390884399414\n      ],\n      [\n        \"▁デヴィッド\",\n        -12.403564453125\n      ],\n      [\n        \"▁エフ\",\n        -12.403600692749023\n      ],\n      [\n        \"▁ビア\",\n        -12.403613090515137\n      ],\n      [\n        \"▁土俵\",\n        -12.403639793395996\n      ],\n      [\n        \"▁西尾\",\n        -12.403693199157715\n      ],\n      [\n        \"鵬\",\n        -12.403708457946777\n      ],\n      [\n        \"▁続出\",\n        -12.403743743896484\n      ],\n      [\n        \"▁駐留\",\n        -12.403899192810059\n      ],\n      [\n        \"トーク\",\n        -12.40396785736084\n      ],\n      [\n        \"ヨシ\",\n        -12.40396785736084\n      ],\n      [\n        \"けど\",\n        -12.403972625732422\n      ],\n      [\n        \"通信\",\n        -12.404043197631836\n      ],\n      [\n        \"▁フロリネ\",\n        -12.404109954833984\n      ],\n      [\n        \"▁濁\",\n        -12.404223442077637\n      ],\n      [\n        \"▁莫大な\",\n        -12.40428352355957\n      ],\n      [\n        \"后\",\n        -12.404379844665527\n      ],\n      [\n        \"1919\",\n        -12.404460906982422\n      ],\n      [\n        \"▁ヴィル\",\n        -12.40451431274414\n      ],\n      [\n        \"▁ローゼン\",\n        -12.40474796295166\n      ],\n      [\n        \"ジロ\",\n        -12.404865264892578\n      ],\n      [\n        \"▁マルタ\",\n        -12.404874801635742\n      ],\n      [\n        \"▁尽くす\",\n        -12.404882431030273\n      ],\n      [\n        \"▁セクター\",\n        -12.404886245727539\n      ],\n      [\n        \"ital\",\n        -12.404916763305664\n      ],\n      [\n        \"▁はるか\",\n        -12.404994010925293\n      ],\n      [\n        \"駐車\",\n        -12.405088424682617\n      ],\n      [\n        \"突然\",\n        -12.405094146728516\n      ],\n      [\n        \"ida\",\n        -12.405190467834473\n      ],\n      [\n        \"▁湾岸\",\n        -12.405192375183105\n      ],\n      [\n        \"▁Pol\",\n        -12.405197143554688\n      ],\n      [\n        \"▁源流\",\n        -12.405287742614746\n      ],\n      [\n        \"▁シャフト\",\n        -12.40533447265625\n      ],\n      [\n        \"▁何ら\",\n        -12.405352592468262\n      ],\n      [\n        \"▁旋回\",\n        -12.405434608459473\n      ],\n      [\n        \"▁バッハ\",\n        -12.40544605255127\n      ],\n      [\n        \"詰\",\n        -12.405475616455078\n      ],\n      [\n        \"▁コマーシャル\",\n        -12.405722618103027\n      ],\n      [\n        \"▁コーディネーター\",\n        -12.406010627746582\n      ],\n      [\n        \"叡\",\n        -12.406010627746582\n      ],\n      [\n        \"▁知性\",\n        -12.406122207641602\n      ],\n      [\n        \"▁途端\",\n        -12.406155586242676\n      ],\n      [\n        \"▁転身\",\n        -12.406363487243652\n      ],\n      [\n        \"▁砲弾\",\n        -12.406411170959473\n      ],\n      [\n        \"т\",\n        -12.406440734863281\n      ],\n      [\n        \"▁王家\",\n        -12.406635284423828\n      ],\n      [\n        \"ポロ\",\n        -12.406647682189941\n      ],\n      [\n        \"▁そのほか\",\n        -12.40667724609375\n      ],\n      [\n        \"▁鉄筋\",\n        -12.406702995300293\n      ],\n      [\n        \"▁欲し\",\n        -12.406867027282715\n      ],\n      [\n        \"▁振替\",\n        -12.40692138671875\n      ],\n      [\n        \"▁訴えて\",\n        -12.406975746154785\n      ],\n      [\n        \"▁│\",\n        -12.40700626373291\n      ],\n      [\n        \"▁尽くして\",\n        -12.40714168548584\n      ],\n      [\n        \"ぢ\",\n        -12.407163619995117\n      ],\n      [\n        \"▁タク\",\n        -12.407365798950195\n      ],\n      [\n        \"▁富裕\",\n        -12.407493591308594\n      ],\n      [\n        \"▁売春\",\n        -12.407508850097656\n      ],\n      [\n        \"▁LG\",\n        -12.407780647277832\n      ],\n      [\n        \"▁中でも\",\n        -12.407811164855957\n      ],\n      [\n        \"ビール\",\n        -12.407917976379395\n      ],\n      [\n        \"▁代々木\",\n        -12.407933235168457\n      ],\n      [\n        \"ソール\",\n        -12.407981872558594\n      ],\n      [\n        \"ドゥル\",\n        -12.407995223999023\n      ],\n      [\n        \"ピラ\",\n        -12.408011436462402\n      ],\n      [\n        \"▁レンジャー\",\n        -12.408238410949707\n      ],\n      [\n        \"必要な\",\n        -12.40828800201416\n      ],\n      [\n        \"鉢\",\n        -12.408404350280762\n      ],\n      [\n        \"▁驚異\",\n        -12.40848445892334\n      ],\n      [\n        \"▁プロテイン\",\n        -12.408492088317871\n      ],\n      [\n        \"▁偽装\",\n        -12.408573150634766\n      ],\n      [\n        \"慧\",\n        -12.408751487731934\n      ],\n      [\n        \"潤\",\n        -12.408772468566895\n      ],\n      [\n        \"卓\",\n        -12.408868789672852\n      ],\n      [\n        \"行き\",\n        -12.408872604370117\n      ],\n      [\n        \"eve\",\n        -12.408940315246582\n      ],\n      [\n        \"コーン\",\n        -12.409070014953613\n      ],\n      [\n        \"LOG\",\n        -12.409269332885742\n      ],\n      [\n        \"▁盲\",\n        -12.409296035766602\n      ],\n      [\n        \"ks\",\n        -12.409348487854004\n      ],\n      [\n        \"▁証書\",\n        -12.40947437286377\n      ],\n      [\n        \"▁フランソワ\",\n        -12.409476280212402\n      ],\n      [\n        \"臨\",\n        -12.40948486328125\n      ],\n      [\n        \"▁何となく\",\n        -12.409517288208008\n      ],\n      [\n        \"▁パーキング\",\n        -12.409566879272461\n      ],\n      [\n        \"▁握手\",\n        -12.409619331359863\n      ],\n      [\n        \"▁増税\",\n        -12.409626007080078\n      ],\n      [\n        \"▁電信\",\n        -12.409696578979492\n      ],\n      [\n        \"毎週\",\n        -12.409720420837402\n      ],\n      [\n        \"CT\",\n        -12.409743309020996\n      ],\n      [\n        \"▁伝送\",\n        -12.409862518310547\n      ],\n      [\n        \"▁シラ\",\n        -12.410107612609863\n      ],\n      [\n        \"▁ISBN\",\n        -12.410197257995605\n      ],\n      [\n        \"▁戦績\",\n        -12.410322189331055\n      ],\n      [\n        \"▁駅名\",\n        -12.4103364944458\n      ],\n      [\n        \"▁デリバリー\",\n        -12.410486221313477\n      ],\n      [\n        \"▁エッ\",\n        -12.410577774047852\n      ],\n      [\n        \"▁スン\",\n        -12.41073989868164\n      ],\n      [\n        \"▁髭\",\n        -12.410770416259766\n      ],\n      [\n        \"干し\",\n        -12.410816192626953\n      ],\n      [\n        \"ッピング\",\n        -12.41086196899414\n      ],\n      [\n        \"塊\",\n        -12.410882949829102\n      ],\n      [\n        \"ミラ\",\n        -12.410888671875\n      ],\n      [\n        \"▁バラバラ\",\n        -12.41099739074707\n      ],\n      [\n        \"▁サンディエゴ\",\n        -12.411065101623535\n      ],\n      [\n        \"▁勝率\",\n        -12.411124229431152\n      ],\n      [\n        \"▁ヨーグルト\",\n        -12.411210060119629\n      ],\n      [\n        \"▁ポロ\",\n        -12.411355018615723\n      ],\n      [\n        \"▁コパ\",\n        -12.411372184753418\n      ],\n      [\n        \"▁リミックス\",\n        -12.411499977111816\n      ],\n      [\n        \"▁崇拝\",\n        -12.411507606506348\n      ],\n      [\n        \"ena\",\n        -12.411543846130371\n      ],\n      [\n        \"▁土日祝\",\n        -12.411660194396973\n      ],\n      [\n        \"▁取り壊\",\n        -12.411690711975098\n      ],\n      [\n        \"▁樽\",\n        -12.411844253540039\n      ],\n      [\n        \"▁古川\",\n        -12.411904335021973\n      ],\n      [\n        \"潜\",\n        -12.412002563476562\n      ],\n      [\n        \"良く\",\n        -12.41219711303711\n      ],\n      [\n        \"▁授乳\",\n        -12.412224769592285\n      ],\n      [\n        \"▁塩化\",\n        -12.41222858428955\n      ],\n      [\n        \"OME\",\n        -12.412413597106934\n      ],\n      [\n        \"▁セリ\",\n        -12.4124174118042\n      ],\n      [\n        \"▁ムード\",\n        -12.412564277648926\n      ],\n      [\n        \"▁山麓\",\n        -12.412618637084961\n      ],\n      [\n        \"▁Media\",\n        -12.412681579589844\n      ],\n      [\n        \"▁召集\",\n        -12.41269588470459\n      ],\n      [\n        \"colspa\",\n        -12.412779808044434\n      ],\n      [\n        \"嫁\",\n        -12.413082122802734\n      ],\n      [\n        \"▁試みる\",\n        -12.413239479064941\n      ],\n      [\n        \"蔭\",\n        -12.413239479064941\n      ],\n      [\n        \"▁メドレー\",\n        -12.413240432739258\n      ],\n      [\n        \"▁ヤー\",\n        -12.413313865661621\n      ],\n      [\n        \"▁ゴッド\",\n        -12.413458824157715\n      ],\n      [\n        \"坐\",\n        -12.413529396057129\n      ],\n      [\n        \"▁色味\",\n        -12.413596153259277\n      ],\n      [\n        \"080\",\n        -12.413631439208984\n      ],\n      [\n        \"▁見極め\",\n        -12.413718223571777\n      ],\n      [\n        \"bc\",\n        -12.41386890411377\n      ],\n      [\n        \"ネットワーク\",\n        -12.414017677307129\n      ],\n      [\n        \"▁用法\",\n        -12.414057731628418\n      ],\n      [\n        \"困\",\n        -12.41407585144043\n      ],\n      [\n        \"少なくとも\",\n        -12.414095878601074\n      ],\n      [\n        \"▁社交\",\n        -12.414183616638184\n      ],\n      [\n        \"MR\",\n        -12.414201736450195\n      ],\n      [\n        \"▁清浄\",\n        -12.414227485656738\n      ],\n      [\n        \"テオ\",\n        -12.414244651794434\n      ],\n      [\n        \"▁広め\",\n        -12.414275169372559\n      ],\n      [\n        \"致\",\n        -12.414295196533203\n      ],\n      [\n        \"▁魚類\",\n        -12.414633750915527\n      ],\n      [\n        \"▁プラハ\",\n        -12.414706230163574\n      ],\n      [\n        \"▁まくって\",\n        -12.414809226989746\n      ],\n      [\n        \"▁SALE\",\n        -12.414923667907715\n      ],\n      [\n        \"▁ウイスキー\",\n        -12.415162086486816\n      ],\n      [\n        \"▁必\",\n        -12.415251731872559\n      ],\n      [\n        \"▁改めた\",\n        -12.415260314941406\n      ],\n      [\n        \"▁ノック\",\n        -12.415266990661621\n      ],\n      [\n        \"▁北端\",\n        -12.41543960571289\n      ],\n      [\n        \"▁弾道\",\n        -12.41554069519043\n      ],\n      [\n        \"▁コミュ\",\n        -12.415550231933594\n      ],\n      [\n        \"ted\",\n        -12.415745735168457\n      ],\n      [\n        \"cal\",\n        -12.415919303894043\n      ],\n      [\n        \"ハード\",\n        -12.415996551513672\n      ],\n      [\n        \"▁ヴォーカル\",\n        -12.416047096252441\n      ],\n      [\n        \"▁呪い\",\n        -12.416084289550781\n      ],\n      [\n        \"▁Uni\",\n        -12.416096687316895\n      ],\n      [\n        \"▁起こら\",\n        -12.416146278381348\n      ],\n      [\n        \"ハンド\",\n        -12.416214942932129\n      ],\n      [\n        \"▁釈迦\",\n        -12.416291236877441\n      ],\n      [\n        \"▁振付\",\n        -12.416380882263184\n      ],\n      [\n        \"▁慕\",\n        -12.416419982910156\n      ],\n      [\n        \"▁遊園地\",\n        -12.416437149047852\n      ],\n      [\n        \"その頃\",\n        -12.416536331176758\n      ],\n      [\n        \"▁国宝\",\n        -12.416556358337402\n      ],\n      [\n        \"▁開会\",\n        -12.416613578796387\n      ],\n      [\n        \"松本\",\n        -12.416631698608398\n      ],\n      [\n        \"▁Trans\",\n        -12.416662216186523\n      ],\n      [\n        \"umi\",\n        -12.416753768920898\n      ],\n      [\n        \"胡\",\n        -12.41688346862793\n      ],\n      [\n        \"▁尽くした\",\n        -12.417048454284668\n      ],\n      [\n        \"▁渡した\",\n        -12.41706371307373\n      ],\n      [\n        \"▁ブラウス\",\n        -12.417140007019043\n      ],\n      [\n        \"湾\",\n        -12.417202949523926\n      ],\n      [\n        \"▁San\",\n        -12.417226791381836\n      ],\n      [\n        \"サワ\",\n        -12.417304992675781\n      ],\n      [\n        \"諱\",\n        -12.41731071472168\n      ],\n      [\n        \"凄\",\n        -12.417362213134766\n      ],\n      [\n        \"▁大垣\",\n        -12.417549133300781\n      ],\n      [\n        \"▁太平\",\n        -12.417556762695312\n      ],\n      [\n        \"▁まっすぐ\",\n        -12.417613983154297\n      ],\n      [\n        \"▁ダイアリー\",\n        -12.41765308380127\n      ],\n      [\n        \"▁シチリア\",\n        -12.41774845123291\n      ],\n      [\n        \"▁大砲\",\n        -12.417763710021973\n      ],\n      [\n        \"▁吹替\",\n        -12.417764663696289\n      ],\n      [\n        \"▁フレンド\",\n        -12.417922973632812\n      ],\n      [\n        \"▁トランク\",\n        -12.417999267578125\n      ],\n      [\n        \"▁嗜好\",\n        -12.418039321899414\n      ],\n      [\n        \"ピル\",\n        -12.418167114257812\n      ],\n      [\n        \"▁握って\",\n        -12.418187141418457\n      ],\n      [\n        \"▁脱落\",\n        -12.418204307556152\n      ],\n      [\n        \"興味\",\n        -12.418334007263184\n      ],\n      [\n        \"ブリア\",\n        -12.418353080749512\n      ],\n      [\n        \"▁ウイン\",\n        -12.418360710144043\n      ],\n      [\n        \"▁台本\",\n        -12.41845989227295\n      ],\n      [\n        \"▁クソ\",\n        -12.418501853942871\n      ],\n      [\n        \"▁捕まえ\",\n        -12.418519973754883\n      ],\n      [\n        \"▁水質\",\n        -12.418587684631348\n      ],\n      [\n        \"▁ZERO\",\n        -12.41868782043457\n      ],\n      [\n        \"▁今川\",\n        -12.418720245361328\n      ],\n      [\n        \"▁Grand\",\n        -12.418747901916504\n      ],\n      [\n        \"▁万能\",\n        -12.418793678283691\n      ],\n      [\n        \"▁暖かく\",\n        -12.418850898742676\n      ],\n      [\n        \"オランダ\",\n        -12.418864250183105\n      ],\n      [\n        \"▁ムーア\",\n        -12.418924331665039\n      ],\n      [\n        \"表示\",\n        -12.419048309326172\n      ],\n      [\n        \"▁専修\",\n        -12.419093132019043\n      ],\n      [\n        \"▁十字架\",\n        -12.419235229492188\n      ],\n      [\n        \"▁写し\",\n        -12.419244766235352\n      ],\n      [\n        \"▁ベータ\",\n        -12.419270515441895\n      ],\n      [\n        \"ソス\",\n        -12.419368743896484\n      ],\n      [\n        \"▁ルミ\",\n        -12.419594764709473\n      ],\n      [\n        \"▁キューブ\",\n        -12.419600486755371\n      ],\n      [\n        \"▁少尉\",\n        -12.419806480407715\n      ],\n      [\n        \"是\",\n        -12.419812202453613\n      ],\n      [\n        \"▁バース\",\n        -12.419909477233887\n      ],\n      [\n        \"ジュラ\",\n        -12.419925689697266\n      ],\n      [\n        \"アカ\",\n        -12.419971466064453\n      ],\n      [\n        \"▁ガガ\",\n        -12.420015335083008\n      ],\n      [\n        \"▁大神\",\n        -12.420527458190918\n      ],\n      [\n        \"▁カバン\",\n        -12.420560836791992\n      ],\n      [\n        \"▁矢野\",\n        -12.420611381530762\n      ],\n      [\n        \"摂\",\n        -12.420705795288086\n      ],\n      [\n        \"ush\",\n        -12.420849800109863\n      ],\n      [\n        \"ョー\",\n        -12.420857429504395\n      ],\n      [\n        \"asa\",\n        -12.420873641967773\n      ],\n      [\n        \"淀\",\n        -12.421024322509766\n      ],\n      [\n        \"山形\",\n        -12.421058654785156\n      ],\n      [\n        \"ative\",\n        -12.421146392822266\n      ],\n      [\n        \"ホワイト\",\n        -12.421148300170898\n      ],\n      [\n        \"▁恥ずかし\",\n        -12.421330451965332\n      ],\n      [\n        \"▁新橋\",\n        -12.42136001586914\n      ],\n      [\n        \"▁ハチ\",\n        -12.421379089355469\n      ],\n      [\n        \"▁教わ\",\n        -12.421381950378418\n      ],\n      [\n        \"▁内祝い\",\n        -12.421399116516113\n      ],\n      [\n        \"▁バート\",\n        -12.421418190002441\n      ],\n      [\n        \"罰\",\n        -12.42142391204834\n      ],\n      [\n        \"▁スピンオフ\",\n        -12.421425819396973\n      ],\n      [\n        \"▁ブルゾン\",\n        -12.421510696411133\n      ],\n      [\n        \"▁出番\",\n        -12.421512603759766\n      ],\n      [\n        \"天然\",\n        -12.421635627746582\n      ],\n      [\n        \"▁145\",\n        -12.421765327453613\n      ],\n      [\n        \"紹\",\n        -12.421804428100586\n      ],\n      [\n        \"▁コスモ\",\n        -12.421844482421875\n      ],\n      [\n        \"ボロ\",\n        -12.42190933227539\n      ],\n      [\n        \"▁母国\",\n        -12.421961784362793\n      ],\n      [\n        \"企画\",\n        -12.42203426361084\n      ],\n      [\n        \"▁協働\",\n        -12.422140121459961\n      ],\n      [\n        \"スペル\",\n        -12.422201156616211\n      ],\n      [\n        \"▁手足\",\n        -12.42221736907959\n      ],\n      [\n        \"▁酵母\",\n        -12.422276496887207\n      ],\n      [\n        \"▁あんた\",\n        -12.422350883483887\n      ],\n      [\n        \"周り\",\n        -12.422451972961426\n      ],\n      [\n        \"▁四十\",\n        -12.422471046447754\n      ],\n      [\n        \"プラン\",\n        -12.422552108764648\n      ],\n      [\n        \"▁凱旋\",\n        -12.42257022857666\n      ],\n      [\n        \"▁安置\",\n        -12.422937393188477\n      ],\n      [\n        \"乾\",\n        -12.422940254211426\n      ],\n      [\n        \"▁前向きに\",\n        -12.423009872436523\n      ],\n      [\n        \"▁排泄\",\n        -12.423009872436523\n      ],\n      [\n        \"▁極端な\",\n        -12.423155784606934\n      ],\n      [\n        \"▁若き\",\n        -12.423254013061523\n      ],\n      [\n        \"ノイド\",\n        -12.423320770263672\n      ],\n      [\n        \"▁仮設\",\n        -12.423373222351074\n      ],\n      [\n        \"▁有田\",\n        -12.423519134521484\n      ],\n      [\n        \"▁外さ\",\n        -12.4235258102417\n      ],\n      [\n        \"▁平塚\",\n        -12.423601150512695\n      ],\n      [\n        \"▁メラ\",\n        -12.423620223999023\n      ],\n      [\n        \"▁間取り\",\n        -12.423673629760742\n      ],\n      [\n        \"▁及んだ\",\n        -12.423768997192383\n      ],\n      [\n        \"書籍\",\n        -12.423868179321289\n      ],\n      [\n        \"母親\",\n        -12.42392349243164\n      ],\n      [\n        \"▁蹴り\",\n        -12.423962593078613\n      ],\n      [\n        \"▁Download\",\n        -12.424036026000977\n      ],\n      [\n        \"▁報復\",\n        -12.42422103881836\n      ],\n      [\n        \"コンピュータ\",\n        -12.424251556396484\n      ],\n      [\n        \"▁江南\",\n        -12.424311637878418\n      ],\n      [\n        \"▁May\",\n        -12.424359321594238\n      ],\n      [\n        \"▁MU\",\n        -12.42440128326416\n      ],\n      [\n        \"▁肉棒\",\n        -12.424402236938477\n      ],\n      [\n        \"▁恵み\",\n        -12.424430847167969\n      ],\n      [\n        \"▁詰めて\",\n        -12.42453384399414\n      ],\n      [\n        \"▁ルルーシュ\",\n        -12.424622535705566\n      ],\n      [\n        \"▁Du\",\n        -12.424640655517578\n      ],\n      [\n        \"ピック\",\n        -12.424748420715332\n      ],\n      [\n        \"▁産後\",\n        -12.424785614013672\n      ],\n      [\n        \"▁プライド\",\n        -12.42506217956543\n      ],\n      [\n        \"▁クロック\",\n        -12.425067901611328\n      ],\n      [\n        \"▁ss\",\n        -12.425349235534668\n      ],\n      [\n        \"▁譲り\",\n        -12.425515174865723\n      ],\n      [\n        \"ICO\",\n        -12.4255952835083\n      ],\n      [\n        \"▁密接\",\n        -12.42559814453125\n      ],\n      [\n        \"▁しょうがっこう\",\n        -12.425821304321289\n      ],\n      [\n        \"▁商会\",\n        -12.425993919372559\n      ],\n      [\n        \"誕\",\n        -12.426131248474121\n      ],\n      [\n        \"▁原画\",\n        -12.4263916015625\n      ],\n      [\n        \"▁グア\",\n        -12.42654037475586\n      ],\n      [\n        \"▁音量\",\n        -12.426544189453125\n      ],\n      [\n        \"まるで\",\n        -12.42656421661377\n      ],\n      [\n        \"▁デラックス\",\n        -12.426613807678223\n      ],\n      [\n        \"▁フロンティア\",\n        -12.426679611206055\n      ],\n      [\n        \"▁断面\",\n        -12.426705360412598\n      ],\n      [\n        \"▁白河\",\n        -12.426787376403809\n      ],\n      [\n        \"1926\",\n        -12.426912307739258\n      ],\n      [\n        \"▁カンザス\",\n        -12.426973342895508\n      ],\n      [\n        \"▁ついつい\",\n        -12.426992416381836\n      ],\n      [\n        \"▁クリー\",\n        -12.427011489868164\n      ],\n      [\n        \"▁北川\",\n        -12.427091598510742\n      ],\n      [\n        \"▁精通\",\n        -12.427133560180664\n      ],\n      [\n        \"▁目立った\",\n        -12.427225112915039\n      ],\n      [\n        \"OCK\",\n        -12.427265167236328\n      ],\n      [\n        \"▁ひまわり\",\n        -12.427268028259277\n      ],\n      [\n        \"▁Of\",\n        -12.427377700805664\n      ],\n      [\n        \"ipp\",\n        -12.427390098571777\n      ],\n      [\n        \"▁144\",\n        -12.427441596984863\n      ],\n      [\n        \"▁ヴォー\",\n        -12.427530288696289\n      ],\n      [\n        \"tar\",\n        -12.427617073059082\n      ],\n      [\n        \"▁アパ\",\n        -12.427637100219727\n      ],\n      [\n        \"▁デュエル\",\n        -12.427756309509277\n      ],\n      [\n        \"フォース\",\n        -12.427837371826172\n      ],\n      [\n        \"▁銃撃\",\n        -12.427838325500488\n      ],\n      [\n        \"▁塩基\",\n        -12.427876472473145\n      ],\n      [\n        \"▁明白\",\n        -12.427961349487305\n      ],\n      [\n        \"▁Safari\",\n        -12.428004264831543\n      ],\n      [\n        \"▁イケ\",\n        -12.428182601928711\n      ],\n      [\n        \"エク\",\n        -12.428230285644531\n      ],\n      [\n        \"▁〇〇\",\n        -12.428295135498047\n      ],\n      [\n        \"▁渦\",\n        -12.428709030151367\n      ],\n      [\n        \"パレ\",\n        -12.428723335266113\n      ],\n      [\n        \"dia\",\n        -12.42890453338623\n      ],\n      [\n        \"▁白髪\",\n        -12.428985595703125\n      ],\n      [\n        \"▁女児\",\n        -12.429024696350098\n      ],\n      [\n        \"▁アトピー\",\n        -12.429073333740234\n      ],\n      [\n        \"押\",\n        -12.429153442382812\n      ],\n      [\n        \"▁容認\",\n        -12.429200172424316\n      ],\n      [\n        \"▁醸し\",\n        -12.429211616516113\n      ],\n      [\n        \"KYO\",\n        -12.42933177947998\n      ],\n      [\n        \"▁コーチング\",\n        -12.42935562133789\n      ],\n      [\n        \"▁進入\",\n        -12.42943000793457\n      ],\n      [\n        \"▁爆乳\",\n        -12.42953109741211\n      ],\n      [\n        \"自転車\",\n        -12.429737091064453\n      ],\n      [\n        \"▁公使\",\n        -12.42982006072998\n      ],\n      [\n        \"生態\",\n        -12.429827690124512\n      ],\n      [\n        \"パック\",\n        -12.429888725280762\n      ],\n      [\n        \"▁bu\",\n        -12.43004322052002\n      ],\n      [\n        \"hot\",\n        -12.430133819580078\n      ],\n      [\n        \"▁催し\",\n        -12.430146217346191\n      ],\n      [\n        \"▁1880\",\n        -12.430156707763672\n      ],\n      [\n        \"構成\",\n        -12.430191040039062\n      ],\n      [\n        \"▁侵\",\n        -12.430193901062012\n      ],\n      [\n        \"なかった\",\n        -12.43024730682373\n      ],\n      [\n        \"▁スクロール\",\n        -12.430264472961426\n      ],\n      [\n        \"▁素子\",\n        -12.430305480957031\n      ],\n      [\n        \"令和\",\n        -12.430365562438965\n      ],\n      [\n        \"▁取り組\",\n        -12.430469512939453\n      ],\n      [\n        \"▁破れ\",\n        -12.430620193481445\n      ],\n      [\n        \"▁糞\",\n        -12.430777549743652\n      ],\n      [\n        \"▁外れた\",\n        -12.43081283569336\n      ],\n      [\n        \"▁生後\",\n        -12.431142807006836\n      ],\n      [\n        \"おかげ\",\n        -12.43117618560791\n      ],\n      [\n        \"翔\",\n        -12.431333541870117\n      ],\n      [\n        \"陶\",\n        -12.431377410888672\n      ],\n      [\n        \"▁ロッカー\",\n        -12.431438446044922\n      ],\n      [\n        \"ンガム\",\n        -12.431468963623047\n      ],\n      [\n        \"▁陽子\",\n        -12.43151569366455\n      ],\n      [\n        \"ロップ\",\n        -12.43161678314209\n      ],\n      [\n        \"▁北野\",\n        -12.431621551513672\n      ],\n      [\n        \"▁クイーンズ\",\n        -12.431632995605469\n      ],\n      [\n        \"▁閉じた\",\n        -12.431886672973633\n      ],\n      [\n        \"▁こむ\",\n        -12.431931495666504\n      ],\n      [\n        \"▁東亜\",\n        -12.431940078735352\n      ],\n      [\n        \"▁きって\",\n        -12.43198299407959\n      ],\n      [\n        \"▁スリーブ\",\n        -12.43199348449707\n      ],\n      [\n        \"OB\",\n        -12.4320707321167\n      ],\n      [\n        \"▁リブ\",\n        -12.432289123535156\n      ],\n      [\n        \"▁台所\",\n        -12.432326316833496\n      ],\n      [\n        \"▁傷害\",\n        -12.432377815246582\n      ],\n      [\n        \"▁FP\",\n        -12.432384490966797\n      ],\n      [\n        \"▁car\",\n        -12.432394981384277\n      ],\n      [\n        \"▁調布\",\n        -12.432416915893555\n      ],\n      [\n        \"▁辿り着\",\n        -12.432432174682617\n      ],\n      [\n        \"▁宣教師\",\n        -12.432448387145996\n      ],\n      [\n        \"おお\",\n        -12.432514190673828\n      ],\n      [\n        \"▁春季\",\n        -12.432592391967773\n      ],\n      [\n        \"▁いったら\",\n        -12.432612419128418\n      ],\n      [\n        \"パーク\",\n        -12.432699203491211\n      ],\n      [\n        \"▁省エネ\",\n        -12.43272876739502\n      ],\n      [\n        \"マックス\",\n        -12.432750701904297\n      ],\n      [\n        \"▁JIS\",\n        -12.432760238647461\n      ],\n      [\n        \"▁直撃\",\n        -12.432879447937012\n      ],\n      [\n        \"▁実効\",\n        -12.432964324951172\n      ],\n      [\n        \"スポンサー\",\n        -12.433015823364258\n      ],\n      [\n        \"▁ミシガン\",\n        -12.433023452758789\n      ],\n      [\n        \"IND\",\n        -12.4331693649292\n      ],\n      [\n        \"Apple\",\n        -12.43319034576416\n      ],\n      [\n        \"▁アルフ\",\n        -12.433197975158691\n      ],\n      [\n        \"▁込める\",\n        -12.43325138092041\n      ],\n      [\n        \"ヴァルト\",\n        -12.433269500732422\n      ],\n      [\n        \"▁新党\",\n        -12.433313369750977\n      ],\n      [\n        \"クラウド\",\n        -12.433313369750977\n      ],\n      [\n        \"▁茨木\",\n        -12.433319091796875\n      ],\n      [\n        \"▁薔薇\",\n        -12.433467864990234\n      ],\n      [\n        \"熙\",\n        -12.433467864990234\n      ],\n      [\n        \"文学\",\n        -12.433479309082031\n      ],\n      [\n        \"▁一時的な\",\n        -12.43355655670166\n      ],\n      [\n        \"ォ\",\n        -12.433601379394531\n      ],\n      [\n        \"gl\",\n        -12.433613777160645\n      ],\n      [\n        \"▁成り立って\",\n        -12.433673858642578\n      ],\n      [\n        \"らしく\",\n        -12.433673858642578\n      ],\n      [\n        \"▁ご存じ\",\n        -12.433911323547363\n      ],\n      [\n        \"▁宙\",\n        -12.433920860290527\n      ],\n      [\n        \"っぺ\",\n        -12.434012413024902\n      ],\n      [\n        \"レビュー\",\n        -12.434040069580078\n      ],\n      [\n        \"▁注釈\",\n        -12.434088706970215\n      ],\n      [\n        \"▁裂\",\n        -12.434103012084961\n      ],\n      [\n        \"▁クローン\",\n        -12.434184074401855\n      ],\n      [\n        \"扇\",\n        -12.434221267700195\n      ],\n      [\n        \"▁廃業\",\n        -12.43425178527832\n      ],\n      [\n        \"▁分化\",\n        -12.434281349182129\n      ],\n      [\n        \"▁倒れて\",\n        -12.434297561645508\n      ],\n      [\n        \"qua\",\n        -12.434370994567871\n      ],\n      [\n        \"いくら\",\n        -12.434391021728516\n      ],\n      [\n        \"▁各自\",\n        -12.434463500976562\n      ],\n      [\n        \"モル\",\n        -12.434469223022461\n      ],\n      [\n        \"▁補足\",\n        -12.434609413146973\n      ],\n      [\n        \"▁PT\",\n        -12.434619903564453\n      ],\n      [\n        \"金融\",\n        -12.434621810913086\n      ],\n      [\n        \"▁任用\",\n        -12.43470287322998\n      ],\n      [\n        \"沈\",\n        -12.434713363647461\n      ],\n      [\n        \"each\",\n        -12.434819221496582\n      ],\n      [\n        \"▁連中\",\n        -12.434826850891113\n      ],\n      [\n        \"▁旋律\",\n        -12.434948921203613\n      ],\n      [\n        \"▁白川\",\n        -12.434986114501953\n      ],\n      [\n        \"▁慌てて\",\n        -12.435192108154297\n      ],\n      [\n        \"tes\",\n        -12.435248374938965\n      ],\n      [\n        \"転職\",\n        -12.435251235961914\n      ],\n      [\n        \"▁天地\",\n        -12.435253143310547\n      ],\n      [\n        \"▁気持ちよく\",\n        -12.435319900512695\n      ],\n      [\n        \"▁改組\",\n        -12.43535041809082\n      ],\n      [\n        \"▁盛り上がって\",\n        -12.435394287109375\n      ],\n      [\n        \"▁隆盛\",\n        -12.435494422912598\n      ],\n      [\n        \"伺\",\n        -12.435511589050293\n      ],\n      [\n        \"▁くに\",\n        -12.435546875\n      ],\n      [\n        \"コミック\",\n        -12.435548782348633\n      ],\n      [\n        \"ichi\",\n        -12.435574531555176\n      ],\n      [\n        \"▁刺史\",\n        -12.435604095458984\n      ],\n      [\n        \"▁タイアップ\",\n        -12.435733795166016\n      ],\n      [\n        \"▁噴\",\n        -12.435872077941895\n      ],\n      [\n        \"▁モニタリング\",\n        -12.435892105102539\n      ],\n      [\n        \"考え\",\n        -12.435962677001953\n      ],\n      [\n        \"▁柵\",\n        -12.435970306396484\n      ],\n      [\n        \"▁十六\",\n        -12.436079025268555\n      ],\n      [\n        \"▁大根\",\n        -12.436126708984375\n      ],\n      [\n        \"▁腹部\",\n        -12.436153411865234\n      ],\n      [\n        \"▁長所\",\n        -12.436180114746094\n      ],\n      [\n        \"ラウンド\",\n        -12.436217308044434\n      ],\n      [\n        \"▁苦悩\",\n        -12.436312675476074\n      ],\n      [\n        \"▁逃げて\",\n        -12.436413764953613\n      ],\n      [\n        \"勲\",\n        -12.43647575378418\n      ],\n      [\n        \"バレー\",\n        -12.436537742614746\n      ],\n      [\n        \"▁印鑑\",\n        -12.436627388000488\n      ],\n      [\n        \"▁病棟\",\n        -12.4366455078125\n      ],\n      [\n        \"lock\",\n        -12.436675071716309\n      ],\n      [\n        \"▁イリノイ\",\n        -12.43687915802002\n      ],\n      [\n        \"CBD\",\n        -12.436955451965332\n      ],\n      [\n        \"樋\",\n        -12.437026977539062\n      ],\n      [\n        \"▁MAR\",\n        -12.437110900878906\n      ],\n      [\n        \"何故\",\n        -12.437151908874512\n      ],\n      [\n        \"ola\",\n        -12.43718147277832\n      ],\n      [\n        \"▁どうぶつ\",\n        -12.437337875366211\n      ],\n      [\n        \"▁オフライン\",\n        -12.437402725219727\n      ],\n      [\n        \"▁持ち帰り\",\n        -12.437647819519043\n      ],\n      [\n        \"▁小池\",\n        -12.437703132629395\n      ],\n      [\n        \"▁dark\",\n        -12.437756538391113\n      ],\n      [\n        \"ump\",\n        -12.437949180603027\n      ],\n      [\n        \"離れ\",\n        -12.438024520874023\n      ],\n      [\n        \"▁浮世\",\n        -12.438031196594238\n      ],\n      [\n        \"▁皮肉\",\n        -12.438163757324219\n      ],\n      [\n        \"合わ\",\n        -12.438302040100098\n      ],\n      [\n        \"▁コンボ\",\n        -12.438337326049805\n      ],\n      [\n        \"▁強要\",\n        -12.43844223022461\n      ],\n      [\n        \"櫻\",\n        -12.43851375579834\n      ],\n      [\n        \"▁レインボー\",\n        -12.438566207885742\n      ],\n      [\n        \"ワシ\",\n        -12.438593864440918\n      ],\n      [\n        \"もしも\",\n        -12.438604354858398\n      ],\n      [\n        \"▁国分寺\",\n        -12.438813209533691\n      ],\n      [\n        \"▁忠誠\",\n        -12.438895225524902\n      ],\n      [\n        \"▁見どころ\",\n        -12.43896198272705\n      ],\n      [\n        \"of\",\n        -12.439019203186035\n      ],\n      [\n        \"通算\",\n        -12.439022064208984\n      ],\n      [\n        \"▁おせち\",\n        -12.439115524291992\n      ],\n      [\n        \"▁スウェット\",\n        -12.439258575439453\n      ],\n      [\n        \"▁大好きで\",\n        -12.439260482788086\n      ],\n      [\n        \"早速\",\n        -12.439371109008789\n      ],\n      [\n        \"▁赤十字\",\n        -12.439408302307129\n      ],\n      [\n        \"▁1400\",\n        -12.439484596252441\n      ],\n      [\n        \"ender\",\n        -12.439493179321289\n      ],\n      [\n        \"▁デュオ\",\n        -12.43960189819336\n      ],\n      [\n        \"▁facebook\",\n        -12.439705848693848\n      ],\n      [\n        \"▁イラストレーター\",\n        -12.439775466918945\n      ],\n      [\n        \"▁Ki\",\n        -12.439862251281738\n      ],\n      [\n        \"▁団員\",\n        -12.440045356750488\n      ],\n      [\n        \"า\",\n        -12.44005298614502\n      ],\n      [\n        \"▁小牧\",\n        -12.440086364746094\n      ],\n      [\n        \"▁パートナーシップ\",\n        -12.440089225769043\n      ],\n      [\n        \"▁古河\",\n        -12.440239906311035\n      ],\n      [\n        \"▁OCN\",\n        -12.440305709838867\n      ],\n      [\n        \"▁159\",\n        -12.440430641174316\n      ],\n      [\n        \"▁Architecture\",\n        -12.440512657165527\n      ],\n      [\n        \"▁発車\",\n        -12.440519332885742\n      ],\n      [\n        \"▁子役\",\n        -12.440563201904297\n      ],\n      [\n        \"▁Mobil\",\n        -12.440678596496582\n      ],\n      [\n        \"距離\",\n        -12.440750122070312\n      ],\n      [\n        \"▁盗難\",\n        -12.440790176391602\n      ],\n      [\n        \"▁プライス\",\n        -12.4408540725708\n      ],\n      [\n        \"▁教えた\",\n        -12.440963745117188\n      ],\n      [\n        \"GP\",\n        -12.44096565246582\n      ],\n      [\n        \"溶\",\n        -12.441006660461426\n      ],\n      [\n        \"3000\",\n        -12.441088676452637\n      ],\n      [\n        \"▁ベランダ\",\n        -12.441113471984863\n      ],\n      [\n        \"arm\",\n        -12.44113826751709\n      ],\n      [\n        \"▁121\",\n        -12.44116497039795\n      ],\n      [\n        \"▁ほんと\",\n        -12.44119930267334\n      ],\n      [\n        \"▁規程\",\n        -12.441346168518066\n      ],\n      [\n        \"或いは\",\n        -12.441349983215332\n      ],\n      [\n        \"▁プランナー\",\n        -12.441360473632812\n      ],\n      [\n        \"▁モデ\",\n        -12.441366195678711\n      ],\n      [\n        \"▁歯周病\",\n        -12.441495895385742\n      ],\n      [\n        \"▁閣議\",\n        -12.441561698913574\n      ],\n      [\n        \"▁満員\",\n        -12.441696166992188\n      ],\n      [\n        \"▁ニコラ\",\n        -12.441794395446777\n      ],\n      [\n        \"シュタ\",\n        -12.442032814025879\n      ],\n      [\n        \"▁バーガー\",\n        -12.442193984985352\n      ],\n      [\n        \"出て\",\n        -12.442255973815918\n      ],\n      [\n        \"▁どうか\",\n        -12.442435264587402\n      ],\n      [\n        \"▁エウ\",\n        -12.44248104095459\n      ],\n      [\n        \"完\",\n        -12.442549705505371\n      ],\n      [\n        \"▁構える\",\n        -12.442635536193848\n      ],\n      [\n        \"リッチ\",\n        -12.442678451538086\n      ],\n      [\n        \"▁リーマン\",\n        -12.442697525024414\n      ],\n      [\n        \"cul\",\n        -12.442774772644043\n      ],\n      [\n        \"英国\",\n        -12.44293212890625\n      ],\n      [\n        \"▁ガレージ\",\n        -12.44312858581543\n      ],\n      [\n        \"めく\",\n        -12.443254470825195\n      ],\n      [\n        \"▁麹\",\n        -12.443285942077637\n      ],\n      [\n        \"ラール\",\n        -12.443367958068848\n      ],\n      [\n        \"▁嫌悪\",\n        -12.44339656829834\n      ],\n      [\n        \"▁ヨン\",\n        -12.443436622619629\n      ],\n      [\n        \"▁被告人\",\n        -12.443499565124512\n      ],\n      [\n        \"後日\",\n        -12.443517684936523\n      ],\n      [\n        \"買い\",\n        -12.443526268005371\n      ],\n      [\n        \"▁流星\",\n        -12.44353199005127\n      ],\n      [\n        \"▁ブランディング\",\n        -12.4435453414917\n      ],\n      [\n        \"▁ぼう\",\n        -12.44357681274414\n      ],\n      [\n        \"▁贈呈\",\n        -12.443589210510254\n      ],\n      [\n        \"▁Service\",\n        -12.443644523620605\n      ],\n      [\n        \"▁バスク\",\n        -12.443839073181152\n      ],\n      [\n        \"山本\",\n        -12.443852424621582\n      ],\n      [\n        \"▁甘味\",\n        -12.444032669067383\n      ],\n      [\n        \"▁ホモ\",\n        -12.444252014160156\n      ],\n      [\n        \"たとえ\",\n        -12.444321632385254\n      ],\n      [\n        \"▁メロン\",\n        -12.444487571716309\n      ],\n      [\n        \"▁1895\",\n        -12.44459342956543\n      ],\n      [\n        \"体験\",\n        -12.444637298583984\n      ],\n      [\n        \"リィ\",\n        -12.444661140441895\n      ],\n      [\n        \"▁掲げた\",\n        -12.444704055786133\n      ],\n      [\n        \"▁鎮座\",\n        -12.444769859313965\n      ],\n      [\n        \"▁慈\",\n        -12.444862365722656\n      ],\n      [\n        \"▁千里\",\n        -12.444917678833008\n      ],\n      [\n        \"▁Halloween\",\n        -12.444934844970703\n      ],\n      [\n        \"▁ワックス\",\n        -12.444954872131348\n      ],\n      [\n        \"▁上層\",\n        -12.44505500793457\n      ],\n      [\n        \"▁如く\",\n        -12.445061683654785\n      ],\n      [\n        \"▁ノエル\",\n        -12.445243835449219\n      ],\n      [\n        \"メット\",\n        -12.445511817932129\n      ],\n      [\n        \"づいて\",\n        -12.445537567138672\n      ],\n      [\n        \"▁づつ\",\n        -12.445550918579102\n      ],\n      [\n        \"▁易\",\n        -12.44555950164795\n      ],\n      [\n        \"嫌\",\n        -12.44558048248291\n      ],\n      [\n        \"モニ\",\n        -12.445610046386719\n      ],\n      [\n        \"▁出動\",\n        -12.445855140686035\n      ],\n      [\n        \"▁詰まった\",\n        -12.446022033691406\n      ],\n      [\n        \"▁168\",\n        -12.446123123168945\n      ],\n      [\n        \"▁星座\",\n        -12.44615650177002\n      ],\n      [\n        \"▁別冊\",\n        -12.446231842041016\n      ],\n      [\n        \"このまま\",\n        -12.446395874023438\n      ],\n      [\n        \"▁民謡\",\n        -12.446452140808105\n      ],\n      [\n        \"IZ\",\n        -12.446456909179688\n      ],\n      [\n        \"▁逃れた\",\n        -12.446596145629883\n      ],\n      [\n        \"▁浄土\",\n        -12.446701049804688\n      ],\n      [\n        \"被害\",\n        -12.44670581817627\n      ],\n      [\n        \"▁愚\",\n        -12.446784973144531\n      ],\n      [\n        \"▁Level\",\n        -12.44691276550293\n      ],\n      [\n        \"▁眺める\",\n        -12.44694709777832\n      ],\n      [\n        \"▁Answer\",\n        -12.447033882141113\n      ],\n      [\n        \"▁和菓子\",\n        -12.447183609008789\n      ],\n      [\n        \"▁生んだ\",\n        -12.447196960449219\n      ],\n      [\n        \"▁養殖\",\n        -12.447344779968262\n      ],\n      [\n        \"ライド\",\n        -12.447415351867676\n      ],\n      [\n        \"淡\",\n        -12.447446823120117\n      ],\n      [\n        \"▁明確\",\n        -12.447466850280762\n      ],\n      [\n        \"▁聴いた\",\n        -12.447680473327637\n      ],\n      [\n        \"更新\",\n        -12.447713851928711\n      ],\n      [\n        \"▁量販\",\n        -12.447787284851074\n      ],\n      [\n        \"▁Netflix\",\n        -12.447834014892578\n      ],\n      [\n        \"痴\",\n        -12.447930335998535\n      ],\n      [\n        \"oz\",\n        -12.447999000549316\n      ],\n      [\n        \"▁表れ\",\n        -12.448049545288086\n      ],\n      [\n        \"▁悪役\",\n        -12.44806957244873\n      ],\n      [\n        \"▁無名\",\n        -12.448171615600586\n      ],\n      [\n        \"▁ふみ\",\n        -12.448455810546875\n      ],\n      [\n        \"▁クレーン\",\n        -12.44849967956543\n      ],\n      [\n        \"睡\",\n        -12.448525428771973\n      ],\n      [\n        \"▁サザン\",\n        -12.448570251464844\n      ],\n      [\n        \"脂\",\n        -12.448596000671387\n      ],\n      [\n        \"ガウ\",\n        -12.448596954345703\n      ],\n      [\n        \"▁防空\",\n        -12.448616981506348\n      ],\n      [\n        \"▁金色\",\n        -12.448866844177246\n      ],\n      [\n        \"▁└\",\n        -12.448882102966309\n      ],\n      [\n        \"▁見事\",\n        -12.448930740356445\n      ],\n      [\n        \"▁有意\",\n        -12.44897747039795\n      ],\n      [\n        \"計画\",\n        -12.44902515411377\n      ],\n      [\n        \"▁ペリ\",\n        -12.449097633361816\n      ],\n      [\n        \"▁呪\",\n        -12.449187278747559\n      ],\n      [\n        \"▁派閥\",\n        -12.449525833129883\n      ],\n      [\n        \"▁帯域\",\n        -12.449592590332031\n      ],\n      [\n        \"ジウム\",\n        -12.449668884277344\n      ],\n      [\n        \"▁逆の\",\n        -12.449687004089355\n      ],\n      [\n        \"▁出航\",\n        -12.449797630310059\n      ],\n      [\n        \"count\",\n        -12.449838638305664\n      ],\n      [\n        \"魯\",\n        -12.450039863586426\n      ],\n      [\n        \"ビッド\",\n        -12.45007610321045\n      ],\n      [\n        \"んと\",\n        -12.45008373260498\n      ],\n      [\n        \"訪\",\n        -12.450108528137207\n      ],\n      [\n        \"lon\",\n        -12.450128555297852\n      ],\n      [\n        \"▁溜め\",\n        -12.4501953125\n      ],\n      [\n        \"科学\",\n        -12.450340270996094\n      ],\n      [\n        \"▁ルーター\",\n        -12.450420379638672\n      ],\n      [\n        \"ピアノ\",\n        -12.450493812561035\n      ],\n      [\n        \"▁カリウム\",\n        -12.450547218322754\n      ],\n      [\n        \"▁蔵書\",\n        -12.450549125671387\n      ],\n      [\n        \"経験\",\n        -12.45055103302002\n      ],\n      [\n        \"▁1872\",\n        -12.450713157653809\n      ],\n      [\n        \"▁偏見\",\n        -12.450764656066895\n      ],\n      [\n        \"運転\",\n        -12.450889587402344\n      ],\n      [\n        \"▁破る\",\n        -12.450919151306152\n      ],\n      [\n        \"捨\",\n        -12.450937271118164\n      ],\n      [\n        \"▁膨張\",\n        -12.450943946838379\n      ],\n      [\n        \"シモ\",\n        -12.451013565063477\n      ],\n      [\n        \"蛇\",\n        -12.451085090637207\n      ],\n      [\n        \"苦しい\",\n        -12.451374053955078\n      ],\n      [\n        \"▁ごめん\",\n        -12.451414108276367\n      ],\n      [\n        \"▁誘って\",\n        -12.451423645019531\n      ],\n      [\n        \"1917\",\n        -12.451508522033691\n      ],\n      [\n        \"メタ\",\n        -12.451542854309082\n      ],\n      [\n        \"治郎\",\n        -12.451552391052246\n      ],\n      [\n        \"▁望\",\n        -12.451574325561523\n      ],\n      [\n        \"▁クレア\",\n        -12.451642990112305\n      ],\n      [\n        \"▁硬式\",\n        -12.451656341552734\n      ],\n      [\n        \"▁アナリスト\",\n        -12.45166301727295\n      ],\n      [\n        \"▁踏まえた\",\n        -12.451725006103516\n      ],\n      [\n        \"▁せき\",\n        -12.451752662658691\n      ],\n      [\n        \"▁Blog\",\n        -12.451991081237793\n      ],\n      [\n        \"わす\",\n        -12.45201301574707\n      ],\n      [\n        \"▁米沢\",\n        -12.452013969421387\n      ],\n      [\n        \"▁リアリティ\",\n        -12.452061653137207\n      ],\n      [\n        \"▁湧き\",\n        -12.452157020568848\n      ],\n      [\n        \"▁飾って\",\n        -12.452188491821289\n      ],\n      [\n        \"天文\",\n        -12.452240943908691\n      ],\n      [\n        \"▁鉱業\",\n        -12.452260971069336\n      ],\n      [\n        \"▁カノ\",\n        -12.452281951904297\n      ],\n      [\n        \"プール\",\n        -12.4523344039917\n      ],\n      [\n        \"FS\",\n        -12.45236873626709\n      ],\n      [\n        \"ひこ\",\n        -12.452397346496582\n      ],\n      [\n        \"レイン\",\n        -12.452438354492188\n      ],\n      [\n        \"▁コンビニエンス\",\n        -12.452467918395996\n      ],\n      [\n        \"▁Wh\",\n        -12.452533721923828\n      ],\n      [\n        \"▁pink\",\n        -12.452539443969727\n      ],\n      [\n        \"▁納付\",\n        -12.452645301818848\n      ],\n      [\n        \"▁めん\",\n        -12.452754020690918\n      ],\n      [\n        \"▁女流\",\n        -12.452776908874512\n      ],\n      [\n        \"▁レズ\",\n        -12.452865600585938\n      ],\n      [\n        \"▁備考\",\n        -12.452917098999023\n      ],\n      [\n        \"▁閉塞\",\n        -12.452921867370605\n      ],\n      [\n        \"ines\",\n        -12.45302963256836\n      ],\n      [\n        \"▁危ない\",\n        -12.453099250793457\n      ],\n      [\n        \"riv\",\n        -12.453121185302734\n      ],\n      [\n        \"▁バッジ\",\n        -12.453125953674316\n      ],\n      [\n        \"々しく\",\n        -12.45315933227539\n      ],\n      [\n        \"唄\",\n        -12.453234672546387\n      ],\n      [\n        \"徳島\",\n        -12.453372955322266\n      ],\n      [\n        \"生まれ\",\n        -12.453378677368164\n      ],\n      [\n        \"▁辺境\",\n        -12.453394889831543\n      ],\n      [\n        \"vie\",\n        -12.453471183776855\n      ],\n      [\n        \"▁オペレーティング\",\n        -12.453810691833496\n      ],\n      [\n        \"▁無垢\",\n        -12.453852653503418\n      ],\n      [\n        \"SF\",\n        -12.45389461517334\n      ],\n      [\n        \"ジャック\",\n        -12.453962326049805\n      ],\n      [\n        \"iro\",\n        -12.45400333404541\n      ],\n      [\n        \"Ch\",\n        -12.454030990600586\n      ],\n      [\n        \"▁南下\",\n        -12.454116821289062\n      ],\n      [\n        \"▁Exam\",\n        -12.454117774963379\n      ],\n      [\n        \"▁保証人\",\n        -12.454137802124023\n      ],\n      [\n        \"▁徴兵\",\n        -12.454142570495605\n      ],\n      [\n        \"▁呂\",\n        -12.454183578491211\n      ],\n      [\n        \"▁コレステロール\",\n        -12.454263687133789\n      ],\n      [\n        \"RG\",\n        -12.454329490661621\n      ],\n      [\n        \"伊藤\",\n        -12.454364776611328\n      ],\n      [\n        \"▁セレクション\",\n        -12.454447746276855\n      ],\n      [\n        \"▁shop\",\n        -12.454488754272461\n      ],\n      [\n        \"▁争\",\n        -12.454602241516113\n      ],\n      [\n        \"1921\",\n        -12.454629898071289\n      ],\n      [\n        \"▁探る\",\n        -12.454659461975098\n      ],\n      [\n        \"▁霞\",\n        -12.454659461975098\n      ],\n      [\n        \"▁敢行\",\n        -12.454717636108398\n      ],\n      [\n        \"▁萌\",\n        -12.454741477966309\n      ],\n      [\n        \"▁ルネサンス\",\n        -12.4550199508667\n      ],\n      [\n        \"▁大相撲\",\n        -12.45503044128418\n      ],\n      [\n        \"▁モラ\",\n        -12.455036163330078\n      ],\n      [\n        \"▁選任\",\n        -12.45521068572998\n      ],\n      [\n        \"▁アット\",\n        -12.45530891418457\n      ],\n      [\n        \"緊急\",\n        -12.45535659790039\n      ],\n      [\n        \"トイレ\",\n        -12.45552921295166\n      ],\n      [\n        \"▁著した\",\n        -12.455543518066406\n      ],\n      [\n        \"▁永遠に\",\n        -12.455554008483887\n      ],\n      [\n        \"演奏\",\n        -12.45556354522705\n      ],\n      [\n        \"▁203\",\n        -12.455607414245605\n      ],\n      [\n        \"▁日清\",\n        -12.455728530883789\n      ],\n      [\n        \"ワイン\",\n        -12.455745697021484\n      ],\n      [\n        \"▁やってきて\",\n        -12.455768585205078\n      ],\n      [\n        \"言い\",\n        -12.455830574035645\n      ],\n      [\n        \"▁Rock\",\n        -12.455917358398438\n      ],\n      [\n        \"▁覚えた\",\n        -12.456010818481445\n      ],\n      [\n        \"note\",\n        -12.456194877624512\n      ],\n      [\n        \"▁レジェンド\",\n        -12.456231117248535\n      ],\n      [\n        \"▁可能であり\",\n        -12.456262588500977\n      ],\n      [\n        \"rum\",\n        -12.456321716308594\n      ],\n      [\n        \"▁中略\",\n        -12.45633316040039\n      ],\n      [\n        \"蕭\",\n        -12.456382751464844\n      ],\n      [\n        \"▁奥州\",\n        -12.456441879272461\n      ],\n      [\n        \"▁グッ\",\n        -12.456531524658203\n      ],\n      [\n        \"▁どうせ\",\n        -12.456653594970703\n      ],\n      [\n        \"ration\",\n        -12.456707954406738\n      ],\n      [\n        \"▁260\",\n        -12.45673656463623\n      ],\n      [\n        \"▁ウラン\",\n        -12.456743240356445\n      ],\n      [\n        \"▁直近\",\n        -12.456871032714844\n      ],\n      [\n        \"▁シャドウ\",\n        -12.456942558288574\n      ],\n      [\n        \"▁ベネズエラ\",\n        -12.456989288330078\n      ],\n      [\n        \"▁申し込む\",\n        -12.457091331481934\n      ],\n      [\n        \"ニヤ\",\n        -12.457110404968262\n      ],\n      [\n        \"▁っこ\",\n        -12.457136154174805\n      ],\n      [\n        \"▁十数\",\n        -12.457159996032715\n      ],\n      [\n        \"▁団長\",\n        -12.457219123840332\n      ],\n      [\n        \"EV\",\n        -12.457240104675293\n      ],\n      [\n        \"福井\",\n        -12.457369804382324\n      ],\n      [\n        \"▁有人\",\n        -12.457447052001953\n      ],\n      [\n        \"▁マグロ\",\n        -12.457536697387695\n      ],\n      [\n        \"▁味わって\",\n        -12.457564353942871\n      ],\n      [\n        \"Facebook\",\n        -12.457639694213867\n      ],\n      [\n        \"▁義理\",\n        -12.457690238952637\n      ],\n      [\n        \"III\",\n        -12.45772647857666\n      ],\n      [\n        \"▁富士通\",\n        -12.457759857177734\n      ],\n      [\n        \"ves\",\n        -12.457770347595215\n      ],\n      [\n        \"▁サントリー\",\n        -12.4578275680542\n      ],\n      [\n        \"▁退場\",\n        -12.45785140991211\n      ],\n      [\n        \"▁豊川\",\n        -12.457883834838867\n      ],\n      [\n        \"▁Security\",\n        -12.45789909362793\n      ],\n      [\n        \"▁愚か\",\n        -12.458003044128418\n      ],\n      [\n        \"▁DMM\",\n        -12.458049774169922\n      ],\n      [\n        \"アマゾン\",\n        -12.458104133605957\n      ],\n      [\n        \"▁石巻\",\n        -12.458281517028809\n      ],\n      [\n        \"ほく\",\n        -12.458324432373047\n      ],\n      [\n        \"▁NPB\",\n        -12.458358764648438\n      ],\n      [\n        \"▁コネクタ\",\n        -12.458377838134766\n      ],\n      [\n        \"▁差し替え\",\n        -12.458388328552246\n      ],\n      [\n        \"▁etc\",\n        -12.458459854125977\n      ],\n      [\n        \"▁名残\",\n        -12.458523750305176\n      ],\n      [\n        \"河原\",\n        -12.458619117736816\n      ],\n      [\n        \"▁brown\",\n        -12.45872974395752\n      ],\n      [\n        \"▁古賀\",\n        -12.458739280700684\n      ],\n      [\n        \"▁痴漢\",\n        -12.458809852600098\n      ],\n      [\n        \"光寺\",\n        -12.458820343017578\n      ],\n      [\n        \"忌\",\n        -12.458852767944336\n      ],\n      [\n        \"GN\",\n        -12.458929061889648\n      ],\n      [\n        \"gs\",\n        -12.45902156829834\n      ],\n      [\n        \"▁ソニック\",\n        -12.459086418151855\n      ],\n      [\n        \"▁引き下げ\",\n        -12.459091186523438\n      ],\n      [\n        \"▁蝦夷\",\n        -12.459114074707031\n      ],\n      [\n        \"▁地価\",\n        -12.459132194519043\n      ],\n      [\n        \"▁朱印\",\n        -12.459160804748535\n      ],\n      [\n        \"▁デュアル\",\n        -12.459272384643555\n      ],\n      [\n        \"Name\",\n        -12.459327697753906\n      ],\n      [\n        \"▁バンタム\",\n        -12.459327697753906\n      ],\n      [\n        \"コシ\",\n        -12.459339141845703\n      ],\n      [\n        \"8000\",\n        -12.459376335144043\n      ],\n      [\n        \"ごく\",\n        -12.45946979522705\n      ],\n      [\n        \"モバイル\",\n        -12.45947551727295\n      ],\n      [\n        \"▁先駆け\",\n        -12.459506034851074\n      ],\n      [\n        \"▁迫害\",\n        -12.45959186553955\n      ],\n      [\n        \"▁議決\",\n        -12.459722518920898\n      ],\n      [\n        \"たまに\",\n        -12.459836959838867\n      ],\n      [\n        \"慣れ\",\n        -12.459900856018066\n      ],\n      [\n        \"▁free\",\n        -12.460097312927246\n      ],\n      [\n        \"標準\",\n        -12.460105895996094\n      ],\n      [\n        \"▁ハイライト\",\n        -12.460203170776367\n      ],\n      [\n        \"ーー\",\n        -12.460219383239746\n      ],\n      [\n        \"▁OUT\",\n        -12.460357666015625\n      ],\n      [\n        \"もしかしたら\",\n        -12.460705757141113\n      ],\n      [\n        \"誠に\",\n        -12.460737228393555\n      ],\n      [\n        \"▁演歌\",\n        -12.460877418518066\n      ],\n      [\n        \"▁格段に\",\n        -12.460938453674316\n      ],\n      [\n        \"キャップ\",\n        -12.461004257202148\n      ],\n      [\n        \"1922\",\n        -12.46113395690918\n      ],\n      [\n        \"▁イグ\",\n        -12.461196899414062\n      ],\n      [\n        \"詰め\",\n        -12.46125316619873\n      ],\n      [\n        \"▁ww\",\n        -12.461426734924316\n      ],\n      [\n        \"運行\",\n        -12.461445808410645\n      ],\n      [\n        \"▁トレイ\",\n        -12.461559295654297\n      ],\n      [\n        \"▁つくった\",\n        -12.461711883544922\n      ],\n      [\n        \"▁請願\",\n        -12.461712837219238\n      ],\n      [\n        \"▁プードル\",\n        -12.461753845214844\n      ],\n      [\n        \"▁評した\",\n        -12.46177864074707\n      ],\n      [\n        \"▁ディズニーランド\",\n        -12.461814880371094\n      ],\n      [\n        \"個\",\n        -12.46190071105957\n      ],\n      [\n        \"▁着せ\",\n        -12.46190357208252\n      ],\n      [\n        \"▁冷や\",\n        -12.461935043334961\n      ],\n      [\n        \"▁本尊\",\n        -12.461935043334961\n      ],\n      [\n        \"▁切れる\",\n        -12.461956977844238\n      ],\n      [\n        \"▁服部\",\n        -12.462021827697754\n      ],\n      [\n        \"▁打ち切り\",\n        -12.462027549743652\n      ],\n      [\n        \"▁ハロー\",\n        -12.462117195129395\n      ],\n      [\n        \"▁洪\",\n        -12.462362289428711\n      ],\n      [\n        \"▁衆院\",\n        -12.462457656860352\n      ],\n      [\n        \"グレー\",\n        -12.462593078613281\n      ],\n      [\n        \"▁儀礼\",\n        -12.462638854980469\n      ],\n      [\n        \"▁双葉\",\n        -12.462641716003418\n      ],\n      [\n        \"▁日活\",\n        -12.462660789489746\n      ],\n      [\n        \"曽\",\n        -12.462688446044922\n      ],\n      [\n        \"▁小平\",\n        -12.462831497192383\n      ],\n      [\n        \"▁磐田\",\n        -12.462886810302734\n      ],\n      [\n        \"和田\",\n        -12.462912559509277\n      ],\n      [\n        \"ッペン\",\n        -12.462916374206543\n      ],\n      [\n        \"▁手芸\",\n        -12.463149070739746\n      ],\n      [\n        \"般\",\n        -12.463217735290527\n      ],\n      [\n        \"rad\",\n        -12.463218688964844\n      ],\n      [\n        \"ARK\",\n        -12.463266372680664\n      ],\n      [\n        \"▁トリプル\",\n        -12.463334083557129\n      ],\n      [\n        \"oph\",\n        -12.463550567626953\n      ],\n      [\n        \"▁キャンディ\",\n        -12.463570594787598\n      ],\n      [\n        \"▁発光\",\n        -12.463772773742676\n      ],\n      [\n        \"▁媒介\",\n        -12.463834762573242\n      ],\n      [\n        \"▁FINAL\",\n        -12.463988304138184\n      ],\n      [\n        \"▁歓\",\n        -12.46420955657959\n      ],\n      [\n        \"▁倍率\",\n        -12.464221000671387\n      ],\n      [\n        \"庸\",\n        -12.4642915725708\n      ],\n      [\n        \"ナップ\",\n        -12.464312553405762\n      ],\n      [\n        \"漏\",\n        -12.464422225952148\n      ],\n      [\n        \"▁パット\",\n        -12.464433670043945\n      ],\n      [\n        \"▁Solutions\",\n        -12.464599609375\n      ],\n      [\n        \"▁四方\",\n        -12.46481704711914\n      ],\n      [\n        \"恒\",\n        -12.464855194091797\n      ],\n      [\n        \"▁覆い\",\n        -12.464874267578125\n      ],\n      [\n        \"▁モーツァルト\",\n        -12.464903831481934\n      ],\n      [\n        \"•\",\n        -12.465006828308105\n      ],\n      [\n        \"▁領収\",\n        -12.465069770812988\n      ],\n      [\n        \"▁凸\",\n        -12.46512508392334\n      ],\n      [\n        \"▁Architect\",\n        -12.465187072753906\n      ],\n      [\n        \"▁Version\",\n        -12.465231895446777\n      ],\n      [\n        \"▁シャーロット\",\n        -12.465240478515625\n      ],\n      [\n        \"▁証人\",\n        -12.465254783630371\n      ],\n      [\n        \"梓\",\n        -12.465361595153809\n      ],\n      [\n        \"▁マーシャル\",\n        -12.465468406677246\n      ],\n      [\n        \"к\",\n        -12.465514183044434\n      ],\n      [\n        \"メリ\",\n        -12.465522766113281\n      ],\n      [\n        \"▁サード\",\n        -12.46560287475586\n      ],\n      [\n        \"▁ネギ\",\n        -12.465603828430176\n      ],\n      [\n        \"▁回った\",\n        -12.465853691101074\n      ],\n      [\n        \"▁ランドナー\",\n        -12.465950965881348\n      ],\n      [\n        \"スペクト\",\n        -12.466092109680176\n      ],\n      [\n        \"伐\",\n        -12.466264724731445\n      ],\n      [\n        \"801\",\n        -12.466329574584961\n      ],\n      [\n        \"▁あらためて\",\n        -12.466432571411133\n      ],\n      [\n        \"▁とどまら\",\n        -12.466435432434082\n      ],\n      [\n        \"マグ\",\n        -12.466575622558594\n      ],\n      [\n        \"▁減らして\",\n        -12.4666166305542\n      ],\n      [\n        \"ope\",\n        -12.46672248840332\n      ],\n      [\n        \"▁似合う\",\n        -12.46687126159668\n      ],\n      [\n        \"▁体格\",\n        -12.466913223266602\n      ],\n      [\n        \"▁母艦\",\n        -12.466962814331055\n      ],\n      [\n        \"素材\",\n        -12.467108726501465\n      ],\n      [\n        \"Play\",\n        -12.467145919799805\n      ],\n      [\n        \"農業\",\n        -12.467278480529785\n      ],\n      [\n        \"新規\",\n        -12.467323303222656\n      ],\n      [\n        \"zi\",\n        -12.467366218566895\n      ],\n      [\n        \"▁亡くし\",\n        -12.46739673614502\n      ],\n      [\n        \"▁アリア\",\n        -12.467453002929688\n      ],\n      [\n        \"▁米子\",\n        -12.4674711227417\n      ],\n      [\n        \"▁円盤\",\n        -12.467527389526367\n      ],\n      [\n        \"▁明かした\",\n        -12.467785835266113\n      ],\n      [\n        \"▁舞鶴\",\n        -12.46785831451416\n      ],\n      [\n        \"▁多忙\",\n        -12.467988967895508\n      ],\n      [\n        \"事実\",\n        -12.468076705932617\n      ],\n      [\n        \"▁八幡宮\",\n        -12.468079566955566\n      ],\n      [\n        \"▁Mor\",\n        -12.468125343322754\n      ],\n      [\n        \"先制\",\n        -12.468177795410156\n      ],\n      [\n        \"▁詰まって\",\n        -12.468321800231934\n      ],\n      [\n        \"▁バスケット\",\n        -12.468499183654785\n      ],\n      [\n        \"ツェル\",\n        -12.468520164489746\n      ],\n      [\n        \"▁チェス\",\n        -12.468554496765137\n      ],\n      [\n        \"▁引き継ぐ\",\n        -12.468685150146484\n      ],\n      [\n        \"▁母乳\",\n        -12.46876049041748\n      ],\n      [\n        \"▁特筆\",\n        -12.469144821166992\n      ],\n      [\n        \"▁プリンタ\",\n        -12.469179153442383\n      ],\n      [\n        \"▁シリンダー\",\n        -12.46919059753418\n      ],\n      [\n        \"▁テネシー\",\n        -12.469344139099121\n      ],\n      [\n        \"▁楽園\",\n        -12.469403266906738\n      ],\n      [\n        \"▁繰り返した\",\n        -12.469422340393066\n      ],\n      [\n        \"▁葛藤\",\n        -12.469535827636719\n      ],\n      [\n        \"狩\",\n        -12.469696998596191\n      ],\n      [\n        \"昇\",\n        -12.469740867614746\n      ],\n      [\n        \"▁埋める\",\n        -12.46975326538086\n      ],\n      [\n        \"▁百済\",\n        -12.469871520996094\n      ],\n      [\n        \"▁ライド\",\n        -12.469919204711914\n      ],\n      [\n        \"ポラ\",\n        -12.469961166381836\n      ],\n      [\n        \"▁万博\",\n        -12.469970703125\n      ],\n      [\n        \"▁〝\",\n        -12.469992637634277\n      ],\n      [\n        \"▁近づ\",\n        -12.470025062561035\n      ],\n      [\n        \"▁国税\",\n        -12.470046997070312\n      ],\n      [\n        \"各種\",\n        -12.47011947631836\n      ],\n      [\n        \"▁have\",\n        -12.470163345336914\n      ],\n      [\n        \"▁局面\",\n        -12.470197677612305\n      ],\n      [\n        \"▁奪った\",\n        -12.470227241516113\n      ],\n      [\n        \"▁乏しい\",\n        -12.47026538848877\n      ],\n      [\n        \"▁消火\",\n        -12.470356941223145\n      ],\n      [\n        \"▁ロードレース\",\n        -12.470520973205566\n      ],\n      [\n        \"ett\",\n        -12.470568656921387\n      ],\n      [\n        \"▁ロケーション\",\n        -12.470582962036133\n      ],\n      [\n        \"▁崩し\",\n        -12.470619201660156\n      ],\n      [\n        \"くち\",\n        -12.470742225646973\n      ],\n      [\n        \"▁pc\",\n        -12.470858573913574\n      ],\n      [\n        \"▁ジュン\",\n        -12.47103500366211\n      ],\n      [\n        \"▁並列\",\n        -12.47107219696045\n      ],\n      [\n        \"▁サウジアラビア\",\n        -12.471091270446777\n      ],\n      [\n        \"ima\",\n        -12.471111297607422\n      ],\n      [\n        \"▁借りた\",\n        -12.47115421295166\n      ],\n      [\n        \"▁白書\",\n        -12.47115421295166\n      ],\n      [\n        \"繋\",\n        -12.471169471740723\n      ],\n      [\n        \"▁精霊\",\n        -12.471280097961426\n      ],\n      [\n        \"▁引き換え\",\n        -12.471342086791992\n      ],\n      [\n        \"新たな\",\n        -12.471356391906738\n      ],\n      [\n        \"▁TT\",\n        -12.471428871154785\n      ],\n      [\n        \"▁中頃\",\n        -12.47148609161377\n      ],\n      [\n        \"▁喚起\",\n        -12.471495628356934\n      ],\n      [\n        \"くん\",\n        -12.471911430358887\n      ],\n      [\n        \"ビエ\",\n        -12.47192668914795\n      ],\n      [\n        \"▁衝動\",\n        -12.47195816040039\n      ],\n      [\n        \"ITY\",\n        -12.471980094909668\n      ],\n      [\n        \"変わり\",\n        -12.471983909606934\n      ],\n      [\n        \"▁進水\",\n        -12.472057342529297\n      ],\n      [\n        \"▁126\",\n        -12.472156524658203\n      ],\n      [\n        \"▁洗って\",\n        -12.472168922424316\n      ],\n      [\n        \"▁ネジ\",\n        -12.472199440002441\n      ],\n      [\n        \"▁臨んだ\",\n        -12.47230052947998\n      ],\n      [\n        \"▁血液型\",\n        -12.472338676452637\n      ],\n      [\n        \"▁トロイ\",\n        -12.472405433654785\n      ],\n      [\n        \"▁内視鏡\",\n        -12.472418785095215\n      ],\n      [\n        \"▁換装\",\n        -12.472419738769531\n      ],\n      [\n        \"首都\",\n        -12.472434997558594\n      ],\n      [\n        \"▁負けた\",\n        -12.47243595123291\n      ],\n      [\n        \"▁靴下\",\n        -12.472566604614258\n      ],\n      [\n        \"▁プラダ\",\n        -12.472631454467773\n      ],\n      [\n        \"▁20,000\",\n        -12.47263240814209\n      ],\n      [\n        \"▁引き寄せ\",\n        -12.472664833068848\n      ],\n      [\n        \"▁浮かべ\",\n        -12.472687721252441\n      ],\n      [\n        \"▁称し\",\n        -12.47274112701416\n      ],\n      [\n        \"▁言い訳\",\n        -12.472757339477539\n      ],\n      [\n        \"EW\",\n        -12.472795486450195\n      ],\n      [\n        \"▁エレクトリック\",\n        -12.473034858703613\n      ],\n      [\n        \"▶\",\n        -12.473034858703613\n      ],\n      [\n        \"▁無地\",\n        -12.473036766052246\n      ],\n      [\n        \"隷\",\n        -12.473173141479492\n      ],\n      [\n        \"▁興信所\",\n        -12.473188400268555\n      ],\n      [\n        \"▁King\",\n        -12.47337532043457\n      ],\n      [\n        \"ret\",\n        -12.473419189453125\n      ],\n      [\n        \"▁永井\",\n        -12.473470687866211\n      ],\n      [\n        \"抵\",\n        -12.47347640991211\n      ],\n      [\n        \"愁\",\n        -12.47349739074707\n      ],\n      [\n        \"▁どうした\",\n        -12.473553657531738\n      ],\n      [\n        \"バイク\",\n        -12.473580360412598\n      ],\n      [\n        \"槻\",\n        -12.473590850830078\n      ],\n      [\n        \"Tweet\",\n        -12.473894119262695\n      ],\n      [\n        \"yr\",\n        -12.473965644836426\n      ],\n      [\n        \"RAN\",\n        -12.474020004272461\n      ],\n      [\n        \"▁フランチャイズ\",\n        -12.474113464355469\n      ],\n      [\n        \"▁ゼン\",\n        -12.474272727966309\n      ],\n      [\n        \"たぶん\",\n        -12.47429084777832\n      ],\n      [\n        \"▁取り消し\",\n        -12.474331855773926\n      ],\n      [\n        \"説明\",\n        -12.474352836608887\n      ],\n      [\n        \"▁亜種\",\n        -12.474361419677734\n      ],\n      [\n        \"古い\",\n        -12.474419593811035\n      ],\n      [\n        \"▁適当に\",\n        -12.474589347839355\n      ],\n      [\n        \"▁国政\",\n        -12.474679946899414\n      ],\n      [\n        \"▁ç\",\n        -12.474742889404297\n      ],\n      [\n        \"十二\",\n        -12.474762916564941\n      ],\n      [\n        \"衰\",\n        -12.474825859069824\n      ],\n      [\n        \"LV\",\n        -12.47485065460205\n      ],\n      [\n        \"媒\",\n        -12.474869728088379\n      ],\n      [\n        \"▁ルートヴィヒ\",\n        -12.474884986877441\n      ],\n      [\n        \"▁熱海\",\n        -12.474932670593262\n      ],\n      [\n        \"▁フェリ\",\n        -12.474996566772461\n      ],\n      [\n        \"▁惣\",\n        -12.475178718566895\n      ],\n      [\n        \"竿\",\n        -12.475193977355957\n      ],\n      [\n        \"▁127\",\n        -12.475202560424805\n      ],\n      [\n        \"▁ございまして\",\n        -12.475348472595215\n      ],\n      [\n        \"ウマ\",\n        -12.475486755371094\n      ],\n      [\n        \"▁浄水\",\n        -12.475504875183105\n      ],\n      [\n        \"▁ラング\",\n        -12.47558307647705\n      ],\n      [\n        \"▁ミッキー\",\n        -12.475626945495605\n      ],\n      [\n        \"埼\",\n        -12.475628852844238\n      ],\n      [\n        \"▁エレクトロニクス\",\n        -12.475811004638672\n      ],\n      [\n        \"▁ピラミッド\",\n        -12.475811004638672\n      ],\n      [\n        \"楽器\",\n        -12.476018905639648\n      ],\n      [\n        \"▁匠\",\n        -12.476040840148926\n      ],\n      [\n        \"▁フィニッシュ\",\n        -12.4761381149292\n      ],\n      [\n        \"▁ヨハネ\",\n        -12.476273536682129\n      ],\n      [\n        \"▁ケリー\",\n        -12.476446151733398\n      ],\n      [\n        \"▁出来れば\",\n        -12.476490020751953\n      ],\n      [\n        \"チケット\",\n        -12.476570129394531\n      ],\n      [\n        \"▁ONLINE\",\n        -12.476597785949707\n      ],\n      [\n        \"col\",\n        -12.476737022399902\n      ],\n      [\n        \"▁代名詞\",\n        -12.476738929748535\n      ],\n      [\n        \"償\",\n        -12.476865768432617\n      ],\n      [\n        \"クラー\",\n        -12.476888656616211\n      ],\n      [\n        \"▁纏\",\n        -12.476943016052246\n      ],\n      [\n        \"単式\",\n        -12.477096557617188\n      ],\n      [\n        \"ira\",\n        -12.477099418640137\n      ],\n      [\n        \"何も\",\n        -12.477179527282715\n      ],\n      [\n        \"▁伐採\",\n        -12.477202415466309\n      ],\n      [\n        \"▁SV\",\n        -12.47723388671875\n      ],\n      [\n        \"▁硬い\",\n        -12.477252006530762\n      ],\n      [\n        \"▁華やかな\",\n        -12.477286338806152\n      ],\n      [\n        \"▁ポルシェ\",\n        -12.47739315032959\n      ],\n      [\n        \"メド\",\n        -12.47758674621582\n      ],\n      [\n        \"▁風習\",\n        -12.477852821350098\n      ],\n      [\n        \"▁説教\",\n        -12.477917671203613\n      ],\n      [\n        \"▁イタ\",\n        -12.477957725524902\n      ],\n      [\n        \"一つ\",\n        -12.47797679901123\n      ],\n      [\n        \"▁未遂\",\n        -12.478029251098633\n      ],\n      [\n        \"▁積載\",\n        -12.478035926818848\n      ],\n      [\n        \"▁加齢\",\n        -12.478049278259277\n      ],\n      [\n        \"後半\",\n        -12.478055953979492\n      ],\n      [\n        \"燈\",\n        -12.478130340576172\n      ],\n      [\n        \"▁FE\",\n        -12.478193283081055\n      ],\n      [\n        \"▁autumn\",\n        -12.478285789489746\n      ],\n      [\n        \"▁事変\",\n        -12.478365898132324\n      ],\n      [\n        \"働き\",\n        -12.478382110595703\n      ],\n      [\n        \"aff\",\n        -12.478385925292969\n      ],\n      [\n        \"じょ\",\n        -12.478544235229492\n      ],\n      [\n        \"▁式場\",\n        -12.478626251220703\n      ],\n      [\n        \"▁380\",\n        -12.478689193725586\n      ],\n      [\n        \"▁エストニア\",\n        -12.47880744934082\n      ],\n      [\n        \"▁活発な\",\n        -12.478835105895996\n      ],\n      [\n        \"▁存分に\",\n        -12.47890567779541\n      ],\n      [\n        \"▁久々に\",\n        -12.478906631469727\n      ],\n      [\n        \"▁Il\",\n        -12.47917366027832\n      ],\n      [\n        \"ness\",\n        -12.47918701171875\n      ],\n      [\n        \"▁褒美\",\n        -12.479215621948242\n      ],\n      [\n        \"▁入選\",\n        -12.479246139526367\n      ],\n      [\n        \"▁半減\",\n        -12.479355812072754\n      ],\n      [\n        \"▁剥奪\",\n        -12.479375839233398\n      ],\n      [\n        \"▁劣る\",\n        -12.479482650756836\n      ],\n      [\n        \"MACHINE\",\n        -12.479525566101074\n      ],\n      [\n        \"▁祇園\",\n        -12.479525566101074\n      ],\n      [\n        \"▁めっちゃ\",\n        -12.479635238647461\n      ],\n      [\n        \"▁Japanese\",\n        -12.479835510253906\n      ],\n      [\n        \"中村\",\n        -12.480096817016602\n      ],\n      [\n        \"▁イソ\",\n        -12.480193138122559\n      ],\n      [\n        \"現状\",\n        -12.480202674865723\n      ],\n      [\n        \"▁噛\",\n        -12.480205535888672\n      ],\n      [\n        \"▁お返し\",\n        -12.480230331420898\n      ],\n      [\n        \"▁且つ\",\n        -12.480300903320312\n      ],\n      [\n        \"GC\",\n        -12.480683326721191\n      ],\n      [\n        \"search\",\n        -12.480794906616211\n      ],\n      [\n        \"▁Д\",\n        -12.48087215423584\n      ],\n      [\n        \"虐\",\n        -12.48090648651123\n      ],\n      [\n        \"▁1⁄4\",\n        -12.480921745300293\n      ],\n      [\n        \"los\",\n        -12.480934143066406\n      ],\n      [\n        \"▁阿蘇\",\n        -12.480965614318848\n      ],\n      [\n        \"▁当てはまる\",\n        -12.481101036071777\n      ],\n      [\n        \"▁値上げ\",\n        -12.481202125549316\n      ],\n      [\n        \"現場\",\n        -12.481226921081543\n      ],\n      [\n        \"▁試す\",\n        -12.481229782104492\n      ],\n      [\n        \"▁感銘\",\n        -12.481284141540527\n      ],\n      [\n        \"▁教義\",\n        -12.48139476776123\n      ],\n      [\n        \"▁買い取っ\",\n        -12.481473922729492\n      ],\n      [\n        \"▁誘発\",\n        -12.481560707092285\n      ],\n      [\n        \"▁尾根\",\n        -12.481680870056152\n      ],\n      [\n        \"洛\",\n        -12.481840133666992\n      ],\n      [\n        \"▁阻\",\n        -12.481873512268066\n      ],\n      [\n        \"▁mar\",\n        -12.481954574584961\n      ],\n      [\n        \"▁ボケ\",\n        -12.482000350952148\n      ],\n      [\n        \"▁ウソ\",\n        -12.482024192810059\n      ],\n      [\n        \"▁如来\",\n        -12.482077598571777\n      ],\n      [\n        \"▁Real\",\n        -12.482215881347656\n      ],\n      [\n        \"▁損な\",\n        -12.482245445251465\n      ],\n      [\n        \"▁ダイナ\",\n        -12.48232364654541\n      ],\n      [\n        \"栃木\",\n        -12.482333183288574\n      ],\n      [\n        \"▁欲しかった\",\n        -12.482339859008789\n      ],\n      [\n        \"▁省庁\",\n        -12.482357025146484\n      ],\n      [\n        \"▁不自然\",\n        -12.482421875\n      ],\n      [\n        \"ローム\",\n        -12.482442855834961\n      ],\n      [\n        \"▁存じ\",\n        -12.482513427734375\n      ],\n      [\n        \"▁スティック\",\n        -12.48257064819336\n      ],\n      [\n        \"tern\",\n        -12.48260498046875\n      ],\n      [\n        \"チェック\",\n        -12.48272705078125\n      ],\n      [\n        \"布施\",\n        -12.482754707336426\n      ],\n      [\n        \"▁重なる\",\n        -12.482763290405273\n      ],\n      [\n        \"▁ふれ\",\n        -12.482940673828125\n      ],\n      [\n        \"▁残せ\",\n        -12.483062744140625\n      ],\n      [\n        \"▁ゲノム\",\n        -12.483409881591797\n      ],\n      [\n        \"▁イノ\",\n        -12.483444213867188\n      ],\n      [\n        \"NU\",\n        -12.483617782592773\n      ],\n      [\n        \"▁NATO\",\n        -12.483715057373047\n      ],\n      [\n        \"▁ゼネラル\",\n        -12.483720779418945\n      ],\n      [\n        \"ファス\",\n        -12.483839988708496\n      ],\n      [\n        \"ハヤ\",\n        -12.483902931213379\n      ],\n      [\n        \"ABA\",\n        -12.483977317810059\n      ],\n      [\n        \"▁MY\",\n        -12.483980178833008\n      ],\n      [\n        \"▁恐慌\",\n        -12.484189987182617\n      ],\n      [\n        \"▁ステロイド\",\n        -12.484254837036133\n      ],\n      [\n        \"▁サヨナラ\",\n        -12.484343528747559\n      ],\n      [\n        \"汎\",\n        -12.484343528747559\n      ],\n      [\n        \"▁TIME\",\n        -12.484403610229492\n      ],\n      [\n        \"▁ケンブリッジ\",\n        -12.484509468078613\n      ],\n      [\n        \"▁退去\",\n        -12.484522819519043\n      ],\n      [\n        \"レグ\",\n        -12.484528541564941\n      ],\n      [\n        \"セリ\",\n        -12.484548568725586\n      ],\n      [\n        \"フレー\",\n        -12.484587669372559\n      ],\n      [\n        \"▁繋ぐ\",\n        -12.484655380249023\n      ],\n      [\n        \"▁まくる\",\n        -12.484663963317871\n      ],\n      [\n        \"▁良心\",\n        -12.484698295593262\n      ],\n      [\n        \"作業\",\n        -12.484833717346191\n      ],\n      [\n        \"▁大関\",\n        -12.48486042022705\n      ],\n      [\n        \"▁美容院\",\n        -12.48493480682373\n      ],\n      [\n        \"▁菅原\",\n        -12.484970092773438\n      ],\n      [\n        \"窮\",\n        -12.48512077331543\n      ],\n      [\n        \"琉\",\n        -12.485122680664062\n      ],\n      [\n        \"▁解け\",\n        -12.485123634338379\n      ],\n      [\n        \"▁振って\",\n        -12.485328674316406\n      ],\n      [\n        \"▁檜\",\n        -12.485369682312012\n      ],\n      [\n        \"見た目\",\n        -12.485398292541504\n      ],\n      [\n        \"▁おしゃべり\",\n        -12.48546314239502\n      ],\n      [\n        \"▁光線\",\n        -12.485530853271484\n      ],\n      [\n        \"▁スピリチュアル\",\n        -12.485590934753418\n      ],\n      [\n        \"ナック\",\n        -12.485603332519531\n      ],\n      [\n        \"▁和英\",\n        -12.485747337341309\n      ],\n      [\n        \"どうしても\",\n        -12.485782623291016\n      ],\n      [\n        \"▁接合\",\n        -12.485846519470215\n      ],\n      [\n        \"しりつ\",\n        -12.485973358154297\n      ],\n      [\n        \"Ruby\",\n        -12.486011505126953\n      ],\n      [\n        \"▁アレックス\",\n        -12.486112594604492\n      ],\n      [\n        \"ASH\",\n        -12.486187934875488\n      ],\n      [\n        \"▁スナップ\",\n        -12.486207008361816\n      ],\n      [\n        \"kai\",\n        -12.486234664916992\n      ],\n      [\n        \"▁来週\",\n        -12.486364364624023\n      ],\n      [\n        \"▁コミュニケーションズ\",\n        -12.486456871032715\n      ],\n      [\n        \"▁腐敗\",\n        -12.486546516418457\n      ],\n      [\n        \"日経\",\n        -12.486593246459961\n      ],\n      [\n        \"▁完璧\",\n        -12.486618041992188\n      ],\n      [\n        \"カツ\",\n        -12.486620903015137\n      ],\n      [\n        \"▁一揆\",\n        -12.486631393432617\n      ],\n      [\n        \"タイプ\",\n        -12.486654281616211\n      ],\n      [\n        \"囚\",\n        -12.486681938171387\n      ],\n      [\n        \"▁じょ\",\n        -12.486751556396484\n      ],\n      [\n        \"▁ユーモア\",\n        -12.48675537109375\n      ],\n      [\n        \"頑\",\n        -12.486777305603027\n      ],\n      [\n        \"▁仮称\",\n        -12.486799240112305\n      ],\n      [\n        \"▁ニュータウン\",\n        -12.486837387084961\n      ],\n      [\n        \"▁居心地\",\n        -12.48684024810791\n      ],\n      [\n        \"250\",\n        -12.487006187438965\n      ],\n      [\n        \"▁アベニュー\",\n        -12.487168312072754\n      ],\n      [\n        \"んぱ\",\n        -12.487184524536133\n      ],\n      [\n        \"▁一色\",\n        -12.487194061279297\n      ],\n      [\n        \"AKI\",\n        -12.487215042114258\n      ],\n      [\n        \"iver\",\n        -12.487239837646484\n      ],\n      [\n        \"▁お陰\",\n        -12.48724365234375\n      ],\n      [\n        \"なぎ\",\n        -12.487385749816895\n      ],\n      [\n        \"▁1873\",\n        -12.4874267578125\n      ],\n      [\n        \"▁ディフェンス\",\n        -12.487621307373047\n      ],\n      [\n        \"MAX\",\n        -12.487676620483398\n      ],\n      [\n        \"▁保留\",\n        -12.487791061401367\n      ],\n      [\n        \"▁党派\",\n        -12.488104820251465\n      ],\n      [\n        \"▁すく\",\n        -12.4881591796875\n      ],\n      [\n        \"▁着任\",\n        -12.488195419311523\n      ],\n      [\n        \"▁嫡男\",\n        -12.48824691772461\n      ],\n      [\n        \"タク\",\n        -12.488369941711426\n      ],\n      [\n        \"▁取り付ける\",\n        -12.488377571105957\n      ],\n      [\n        \"▁古巣\",\n        -12.488389015197754\n      ],\n      [\n        \"▁{{\",\n        -12.488397598266602\n      ],\n      [\n        \"▁贅沢な\",\n        -12.488420486450195\n      ],\n      [\n        \"シク\",\n        -12.48861312866211\n      ],\n      [\n        \"▁不当\",\n        -12.488638877868652\n      ],\n      [\n        \"▁反対の\",\n        -12.48867416381836\n      ],\n      [\n        \"嵐\",\n        -12.48868465423584\n      ],\n      [\n        \"▁出費\",\n        -12.489092826843262\n      ],\n      [\n        \"蓄\",\n        -12.489133834838867\n      ],\n      [\n        \"▁ラビ\",\n        -12.489290237426758\n      ],\n      [\n        \"▁玲\",\n        -12.489317893981934\n      ],\n      [\n        \"▁シグネチャ\",\n        -12.489341735839844\n      ],\n      [\n        \"▁軌跡\",\n        -12.489358901977539\n      ],\n      [\n        \"▁アレクサンドル\",\n        -12.48942756652832\n      ],\n      [\n        \"錦\",\n        -12.489471435546875\n      ],\n      [\n        \"▁こんで\",\n        -12.489500999450684\n      ],\n      [\n        \"▁マスト\",\n        -12.489596366882324\n      ],\n      [\n        \"▁そっち\",\n        -12.489622116088867\n      ],\n      [\n        \"▁book\",\n        -12.489907264709473\n      ],\n      [\n        \"THE\",\n        -12.48993968963623\n      ],\n      [\n        \"▁フレンズ\",\n        -12.490090370178223\n      ],\n      [\n        \"▁クランク\",\n        -12.490105628967285\n      ],\n      [\n        \"カリフォルニア\",\n        -12.490283012390137\n      ],\n      [\n        \"▁転校\",\n        -12.490307807922363\n      ],\n      [\n        \"絶対\",\n        -12.490372657775879\n      ],\n      [\n        \"▁Minecraft\",\n        -12.490438461303711\n      ],\n      [\n        \"または\",\n        -12.490449905395508\n      ],\n      [\n        \"▁じゃん\",\n        -12.490452766418457\n      ],\n      [\n        \"▁げな\",\n        -12.490554809570312\n      ],\n      [\n        \"▁メロディー\",\n        -12.490687370300293\n      ],\n      [\n        \"▁文字通り\",\n        -12.490692138671875\n      ],\n      [\n        \"▁ブリティッシュ\",\n        -12.490752220153809\n      ],\n      [\n        \"▁フェンス\",\n        -12.490764617919922\n      ],\n      [\n        \"▁淡水\",\n        -12.490952491760254\n      ],\n      [\n        \"隋\",\n        -12.491222381591797\n      ],\n      [\n        \"▁突出\",\n        -12.491348266601562\n      ],\n      [\n        \"クリー\",\n        -12.491442680358887\n      ],\n      [\n        \"▁何とも\",\n        -12.491509437561035\n      ],\n      [\n        \"▁パナマ\",\n        -12.491545677185059\n      ],\n      [\n        \"▁平地\",\n        -12.491555213928223\n      ],\n      [\n        \"▁控えめ\",\n        -12.491684913635254\n      ],\n      [\n        \"▁More\",\n        -12.491820335388184\n      ],\n      [\n        \"▁バックス\",\n        -12.4918212890625\n      ],\n      [\n        \"▁秘訣\",\n        -12.491853713989258\n      ],\n      [\n        \"▁栄誉\",\n        -12.491888046264648\n      ],\n      [\n        \"▁バスケ\",\n        -12.49206829071045\n      ],\n      [\n        \"ANT\",\n        -12.492071151733398\n      ],\n      [\n        \"1914\",\n        -12.492077827453613\n      ],\n      [\n        \"ツール\",\n        -12.492094039916992\n      ],\n      [\n        \"▁Translate\",\n        -12.49223518371582\n      ],\n      [\n        \"▁四日市\",\n        -12.492321968078613\n      ],\n      [\n        \"▁ナチ\",\n        -12.492369651794434\n      ],\n      [\n        \"▁止まる\",\n        -12.492371559143066\n      ],\n      [\n        \"▁導か\",\n        -12.492391586303711\n      ],\n      [\n        \"▁テレワーク\",\n        -12.492417335510254\n      ],\n      [\n        \"▁クラッチ\",\n        -12.49243450164795\n      ],\n      [\n        \"▁1869\",\n        -12.492457389831543\n      ],\n      [\n        \"▁税率\",\n        -12.492558479309082\n      ],\n      [\n        \"cur\",\n        -12.492565155029297\n      ],\n      [\n        \"▁RNA\",\n        -12.492631912231445\n      ],\n      [\n        \"rie\",\n        -12.492673873901367\n      ],\n      [\n        \"▁イヌ\",\n        -12.492712020874023\n      ],\n      [\n        \"▁スカル\",\n        -12.492727279663086\n      ],\n      [\n        \"▁留置\",\n        -12.493053436279297\n      ],\n      [\n        \"之介\",\n        -12.493115425109863\n      ],\n      [\n        \"▁親しく\",\n        -12.49335765838623\n      ],\n      [\n        \"▁モロ\",\n        -12.493377685546875\n      ],\n      [\n        \"▁整骨\",\n        -12.493407249450684\n      ],\n      [\n        \"バージョン\",\n        -12.493444442749023\n      ],\n      [\n        \"▁グーグル\",\n        -12.49345588684082\n      ],\n      [\n        \"don\",\n        -12.493470191955566\n      ],\n      [\n        \"▁水晶\",\n        -12.493577003479004\n      ],\n      [\n        \"汐\",\n        -12.49357795715332\n      ],\n      [\n        \"▁次女\",\n        -12.4935884475708\n      ],\n      [\n        \"桑\",\n        -12.493729591369629\n      ],\n      [\n        \"▁クラウ\",\n        -12.493732452392578\n      ],\n      [\n        \"ジム\",\n        -12.493824005126953\n      ],\n      [\n        \"▁配色\",\n        -12.49403190612793\n      ],\n      [\n        \"▁Macintosh\",\n        -12.494050025939941\n      ],\n      [\n        \"▁コンソール\",\n        -12.494128227233887\n      ],\n      [\n        \"▁露天\",\n        -12.49422836303711\n      ],\n      [\n        \"▁同点\",\n        -12.494244575500488\n      ],\n      [\n        \"▁豊後\",\n        -12.494295120239258\n      ],\n      [\n        \"▁貰え\",\n        -12.49431037902832\n      ],\n      [\n        \"▁平凡\",\n        -12.494409561157227\n      ],\n      [\n        \"▁Es\",\n        -12.494458198547363\n      ],\n      [\n        \"tional\",\n        -12.49448013305664\n      ],\n      [\n        \"憤\",\n        -12.494522094726562\n      ],\n      [\n        \"土地\",\n        -12.494657516479492\n      ],\n      [\n        \"▁賄\",\n        -12.494660377502441\n      ],\n      [\n        \"▁付け加え\",\n        -12.49466609954834\n      ],\n      [\n        \"フェルト\",\n        -12.49484634399414\n      ],\n      [\n        \"フレンド\",\n        -12.49484634399414\n      ],\n      [\n        \"▁アンドリュー\",\n        -12.4949369430542\n      ],\n      [\n        \"▁アクティビティ\",\n        -12.495152473449707\n      ],\n      [\n        \"フェイス\",\n        -12.495187759399414\n      ],\n      [\n        \"素人\",\n        -12.495195388793945\n      ],\n      [\n        \"▁若狭\",\n        -12.495217323303223\n      ],\n      [\n        \"▁冷戦\",\n        -12.495246887207031\n      ],\n      [\n        \"▁人称\",\n        -12.495262145996094\n      ],\n      [\n        \"▁薬師\",\n        -12.495428085327148\n      ],\n      [\n        \"▁inter\",\n        -12.495431900024414\n      ],\n      [\n        \"▁手塚\",\n        -12.49572467803955\n      ],\n      [\n        \"▁名言\",\n        -12.495843887329102\n      ],\n      [\n        \"ユニット\",\n        -12.49584674835205\n      ],\n      [\n        \"▁大作\",\n        -12.495885848999023\n      ],\n      [\n        \"▁無くなって\",\n        -12.495942115783691\n      ],\n      [\n        \"▁頂戴\",\n        -12.495946884155273\n      ],\n      [\n        \"▁姪\",\n        -12.495952606201172\n      ],\n      [\n        \"▁感激\",\n        -12.49599838256836\n      ],\n      [\n        \"▁築城\",\n        -12.496304512023926\n      ],\n      [\n        \"▁香料\",\n        -12.496343612670898\n      ],\n      [\n        \"▁無制限\",\n        -12.496413230895996\n      ],\n      [\n        \"▁邑\",\n        -12.496440887451172\n      ],\n      [\n        \"▁ラブライブ\",\n        -12.496492385864258\n      ],\n      [\n        \"uf\",\n        -12.496519088745117\n      ],\n      [\n        \"款\",\n        -12.49653434753418\n      ],\n      [\n        \"淑\",\n        -12.496570587158203\n      ],\n      [\n        \"▁消した\",\n        -12.496596336364746\n      ],\n      [\n        \"香港\",\n        -12.496612548828125\n      ],\n      [\n        \"▁武術\",\n        -12.49665641784668\n      ],\n      [\n        \"▁趣\",\n        -12.496688842773438\n      ],\n      [\n        \"▁あがり\",\n        -12.496918678283691\n      ],\n      [\n        \"▁やすかった\",\n        -12.49696159362793\n      ],\n      [\n        \"トイ\",\n        -12.496987342834473\n      ],\n      [\n        \"▁全曲\",\n        -12.497036933898926\n      ],\n      [\n        \"▁抱えた\",\n        -12.497044563293457\n      ],\n      [\n        \"多分\",\n        -12.497062683105469\n      ],\n      [\n        \"▁リタ\",\n        -12.497127532958984\n      ],\n      [\n        \"ヒョン\",\n        -12.497178077697754\n      ],\n      [\n        \"▁途切れ\",\n        -12.497201919555664\n      ],\n      [\n        \"膏\",\n        -12.497201919555664\n      ],\n      [\n        \"伊豆\",\n        -12.497454643249512\n      ],\n      [\n        \"▁163\",\n        -12.497687339782715\n      ],\n      [\n        \"▁楽しんだ\",\n        -12.49770736694336\n      ],\n      [\n        \"▁リベ\",\n        -12.497719764709473\n      ],\n      [\n        \"▁河合\",\n        -12.497735023498535\n      ],\n      [\n        \"スラフ\",\n        -12.497857093811035\n      ],\n      [\n        \"競走\",\n        -12.497928619384766\n      ],\n      [\n        \"style\",\n        -12.49796199798584\n      ],\n      [\n        \"ねん\",\n        -12.497966766357422\n      ],\n      [\n        \"▁出陣\",\n        -12.49799919128418\n      ],\n      [\n        \"▁多種多様な\",\n        -12.498031616210938\n      ],\n      [\n        \"▁産経\",\n        -12.498154640197754\n      ],\n      [\n        \"鷲\",\n        -12.49821949005127\n      ],\n      [\n        \"▁無理だ\",\n        -12.498270034790039\n      ],\n      [\n        \"▁公営\",\n        -12.498300552368164\n      ],\n      [\n        \"お互い\",\n        -12.498534202575684\n      ],\n      [\n        \"▁逆襲\",\n        -12.498602867126465\n      ],\n      [\n        \"▁アコースティック\",\n        -12.498781204223633\n      ],\n      [\n        \"▁ダイバー\",\n        -12.498891830444336\n      ],\n      [\n        \"マリア\",\n        -12.49890422821045\n      ],\n      [\n        \"▁林業\",\n        -12.498908996582031\n      ],\n      [\n        \"▁言論\",\n        -12.498936653137207\n      ],\n      [\n        \"▁サイクリング\",\n        -12.49909782409668\n      ],\n      [\n        \"▁ファブリック\",\n        -12.49909782409668\n      ],\n      [\n        \"翠\",\n        -12.49909782409668\n      ],\n      [\n        \"▁贈\",\n        -12.499114990234375\n      ],\n      [\n        \"▁煙突\",\n        -12.499115943908691\n      ],\n      [\n        \"⇒\",\n        -12.49917221069336\n      ],\n      [\n        \"渉\",\n        -12.499238014221191\n      ],\n      [\n        \"▁暖か\",\n        -12.499238967895508\n      ],\n      [\n        \"▁大日\",\n        -12.499272346496582\n      ],\n      [\n        \"▁ピル\",\n        -12.499459266662598\n      ],\n      [\n        \"▁人件\",\n        -12.499532699584961\n      ],\n      [\n        \"▁のりば\",\n        -12.499686241149902\n      ],\n      [\n        \"小林\",\n        -12.499946594238281\n      ],\n      [\n        \"▁清算\",\n        -12.499975204467773\n      ],\n      [\n        \"▁その頃\",\n        -12.49998664855957\n      ],\n      [\n        \"触\",\n        -12.500039100646973\n      ],\n      [\n        \"▁海運\",\n        -12.500054359436035\n      ],\n      [\n        \"▁退屈\",\n        -12.500069618225098\n      ],\n      [\n        \"▁渡して\",\n        -12.50007152557373\n      ],\n      [\n        \"▁長老\",\n        -12.50011157989502\n      ],\n      [\n        \"▁漏\",\n        -12.500312805175781\n      ],\n      [\n        \"ヴン\",\n        -12.500364303588867\n      ],\n      [\n        \"▁セラミック\",\n        -12.500382423400879\n      ],\n      [\n        \"▁プッシュ\",\n        -12.500598907470703\n      ],\n      [\n        \"▁精製\",\n        -12.500646591186523\n      ],\n      [\n        \"▁貸与\",\n        -12.500703811645508\n      ],\n      [\n        \"▁むか\",\n        -12.500739097595215\n      ],\n      [\n        \"▁替える\",\n        -12.500781059265137\n      ],\n      [\n        \"▁即時\",\n        -12.500804901123047\n      ],\n      [\n        \"▁シップ\",\n        -12.500969886779785\n      ],\n      [\n        \"▁内緒\",\n        -12.501065254211426\n      ],\n      [\n        \"ハート\",\n        -12.501193046569824\n      ],\n      [\n        \"▁稼動\",\n        -12.501211166381836\n      ],\n      [\n        \"▁なんの\",\n        -12.50122356414795\n      ],\n      [\n        \"冒\",\n        -12.501250267028809\n      ],\n      [\n        \"▁遭い\",\n        -12.501313209533691\n      ],\n      [\n        \"悶\",\n        -12.501313209533691\n      ],\n      [\n        \"▁堂々と\",\n        -12.501537322998047\n      ],\n      [\n        \"▁硬く\",\n        -12.501542091369629\n      ],\n      [\n        \"▁入園\",\n        -12.501585006713867\n      ],\n      [\n        \"▁やたら\",\n        -12.501667022705078\n      ],\n      [\n        \"▁大差\",\n        -12.501753807067871\n      ],\n      [\n        \"寵\",\n        -12.501789093017578\n      ],\n      [\n        \"ITE\",\n        -12.501816749572754\n      ],\n      [\n        \"ique\",\n        -12.501970291137695\n      ],\n      [\n        \"▁真宗\",\n        -12.501989364624023\n      ],\n      [\n        \"▁太い\",\n        -12.50200080871582\n      ],\n      [\n        \"▁ピンサロ\",\n        -12.502105712890625\n      ],\n      [\n        \"▁備わって\",\n        -12.502105712890625\n      ],\n      [\n        \"▁県警\",\n        -12.502123832702637\n      ],\n      [\n        \"ソク\",\n        -12.502211570739746\n      ],\n      [\n        \"▁パルコ\",\n        -12.502232551574707\n      ],\n      [\n        \"▁宝物\",\n        -12.502275466918945\n      ],\n      [\n        \"▁玲奈\",\n        -12.502455711364746\n      ],\n      [\n        \"▁刷新\",\n        -12.502500534057617\n      ],\n      [\n        \"▁WWE\",\n        -12.502511024475098\n      ],\n      [\n        \"空港\",\n        -12.502514839172363\n      ],\n      [\n        \"▁ローリング\",\n        -12.5026216506958\n      ],\n      [\n        \"▁削り\",\n        -12.502659797668457\n      ],\n      [\n        \"めば\",\n        -12.50271224975586\n      ],\n      [\n        \"ぐん\",\n        -12.502787590026855\n      ],\n      [\n        \"▁パーカ\",\n        -12.502799987792969\n      ],\n      [\n        \"▁締切\",\n        -12.502910614013672\n      ],\n      [\n        \"▁ひで\",\n        -12.502951622009277\n      ],\n      [\n        \"剃\",\n        -12.503211975097656\n      ],\n      [\n        \"▁インスト\",\n        -12.503267288208008\n      ],\n      [\n        \"▁1894\",\n        -12.503499031066895\n      ],\n      [\n        \"ZZ\",\n        -12.503562927246094\n      ],\n      [\n        \"りゅう\",\n        -12.50361156463623\n      ],\n      [\n        \"JavaScript\",\n        -12.503645896911621\n      ],\n      [\n        \"▁純粋に\",\n        -12.503694534301758\n      ],\n      [\n        \"▁度合い\",\n        -12.50375747680664\n      ],\n      [\n        \"ついでに\",\n        -12.50377368927002\n      ],\n      [\n        \"▁十五\",\n        -12.50381088256836\n      ],\n      [\n        \"▁期して\",\n        -12.503888130187988\n      ],\n      [\n        \"▁テイク\",\n        -12.503971099853516\n      ],\n      [\n        \"なかでも\",\n        -12.504019737243652\n      ],\n      [\n        \"▁エクステリア\",\n        -12.50407886505127\n      ],\n      [\n        \"▁発散\",\n        -12.504098892211914\n      ],\n      [\n        \"↑\",\n        -12.504129409790039\n      ],\n      [\n        \"▁注いで\",\n        -12.504220008850098\n      ],\n      [\n        \"▁完璧に\",\n        -12.504257202148438\n      ],\n      [\n        \"ドッグ\",\n        -12.504273414611816\n      ],\n      [\n        \"▁修学\",\n        -12.504584312438965\n      ],\n      [\n        \"響\",\n        -12.504831314086914\n      ],\n      [\n        \"ハウ\",\n        -12.504928588867188\n      ],\n      [\n        \"▁長門\",\n        -12.504944801330566\n      ],\n      [\n        \"▁コモンズ\",\n        -12.504986763000488\n      ],\n      [\n        \"市場\",\n        -12.505206108093262\n      ],\n      [\n        \"▁爆笑\",\n        -12.505219459533691\n      ],\n      [\n        \"▁ペンダント\",\n        -12.505230903625488\n      ],\n      [\n        \"▁故意\",\n        -12.505399703979492\n      ],\n      [\n        \"▁テイクアウト\",\n        -12.505456924438477\n      ],\n      [\n        \"袖\",\n        -12.505459785461426\n      ],\n      [\n        \"▁改宗\",\n        -12.50546646118164\n      ],\n      [\n        \"▁ヒゲ\",\n        -12.50550651550293\n      ],\n      [\n        \"▁テレビジョン\",\n        -12.505598068237305\n      ],\n      [\n        \"▁釜山\",\n        -12.505603790283203\n      ],\n      [\n        \"HY\",\n        -12.506072044372559\n      ],\n      [\n        \"旋\",\n        -12.506077766418457\n      ],\n      [\n        \"▁トランペット\",\n        -12.506094932556152\n      ],\n      [\n        \"bot\",\n        -12.506101608276367\n      ],\n      [\n        \"▁除けば\",\n        -12.506103515625\n      ],\n      [\n        \"place\",\n        -12.506148338317871\n      ],\n      [\n        \"▁漂う\",\n        -12.5062255859375\n      ],\n      [\n        \"虜\",\n        -12.506231307983398\n      ],\n      [\n        \"▁スバル\",\n        -12.506248474121094\n      ],\n      [\n        \"▁ラバー\",\n        -12.50639533996582\n      ],\n      [\n        \"異名\",\n        -12.506720542907715\n      ],\n      [\n        \"▁WD\",\n        -12.506840705871582\n      ],\n      [\n        \"▁震度\",\n        -12.506875991821289\n      ],\n      [\n        \"▁日誌\",\n        -12.506942749023438\n      ],\n      [\n        \"▁数える\",\n        -12.50710391998291\n      ],\n      [\n        \"▁松島\",\n        -12.507107734680176\n      ],\n      [\n        \"▁筋力\",\n        -12.507119178771973\n      ],\n      [\n        \"ジェネ\",\n        -12.507242202758789\n      ],\n      [\n        \"▁ハーバー\",\n        -12.507292747497559\n      ],\n      [\n        \"美子\",\n        -12.507325172424316\n      ],\n      [\n        \"▁不正な\",\n        -12.507416725158691\n      ],\n      [\n        \"YU\",\n        -12.507418632507324\n      ],\n      [\n        \"▁min\",\n        -12.507523536682129\n      ],\n      [\n        \"night\",\n        -12.507572174072266\n      ],\n      [\n        \"という\",\n        -12.50760555267334\n      ],\n      [\n        \"▁こっそり\",\n        -12.507672309875488\n      ],\n      [\n        \"▁初音\",\n        -12.507725715637207\n      ],\n      [\n        \"医師\",\n        -12.507776260375977\n      ],\n      [\n        \"even\",\n        -12.507830619812012\n      ],\n      [\n        \"▁高句麗\",\n        -12.507831573486328\n      ],\n      [\n        \"▁発した\",\n        -12.507865905761719\n      ],\n      [\n        \"譲\",\n        -12.507980346679688\n      ],\n      [\n        \"▁団結\",\n        -12.507988929748535\n      ],\n      [\n        \"▁Fa\",\n        -12.507993698120117\n      ],\n      [\n        \"▁総統\",\n        -12.508193016052246\n      ],\n      [\n        \"▁敷き\",\n        -12.50828742980957\n      ],\n      [\n        \"▁セメント\",\n        -12.508368492126465\n      ],\n      [\n        \"▁歩いた\",\n        -12.508402824401855\n      ],\n      [\n        \"ログイン\",\n        -12.508405685424805\n      ],\n      [\n        \"世の中\",\n        -12.508462905883789\n      ],\n      [\n        \"▁三味線\",\n        -12.508469581604004\n      ],\n      [\n        \"▁帯広\",\n        -12.508519172668457\n      ],\n      [\n        \"CNSA\",\n        -12.508520126342773\n      ],\n      [\n        \"▁いかがです\",\n        -12.508541107177734\n      ],\n      [\n        \"▁応えて\",\n        -12.508580207824707\n      ],\n      [\n        \"▁return\",\n        -12.50862979888916\n      ],\n      [\n        \"▁ソラ\",\n        -12.508631706237793\n      ],\n      [\n        \"▁BLACK\",\n        -12.508971214294434\n      ],\n      [\n        \"▁ジャガー\",\n        -12.508995056152344\n      ],\n      [\n        \"▁部落\",\n        -12.509048461914062\n      ],\n      [\n        \"▁コンゴ\",\n        -12.509113311767578\n      ],\n      [\n        \"▁UI\",\n        -12.509202003479004\n      ],\n      [\n        \"フロー\",\n        -12.50930404663086\n      ],\n      [\n        \"▁取れた\",\n        -12.509332656860352\n      ],\n      [\n        \"test\",\n        -12.509366989135742\n      ],\n      [\n        \"▁ミシシッピ\",\n        -12.509428024291992\n      ],\n      [\n        \"▁ミネソタ\",\n        -12.509428024291992\n      ],\n      [\n        \"▁年寄り\",\n        -12.50960922241211\n      ],\n      [\n        \"▁大幅\",\n        -12.509744644165039\n      ],\n      [\n        \"▁サリ\",\n        -12.50975227355957\n      ],\n      [\n        \"▁未熟\",\n        -12.50976276397705\n      ],\n      [\n        \"▁Vista\",\n        -12.509770393371582\n      ],\n      [\n        \"▁本校\",\n        -12.509861946105957\n      ],\n      [\n        \"うん\",\n        -12.509907722473145\n      ],\n      [\n        \"▁高雄\",\n        -12.509960174560547\n      ],\n      [\n        \"▁荒木\",\n        -12.509988784790039\n      ],\n      [\n        \"▁ホセ\",\n        -12.510025024414062\n      ],\n      [\n        \"▁貯蓄\",\n        -12.510071754455566\n      ],\n      [\n        \"▁申立\",\n        -12.510151863098145\n      ],\n      [\n        \"▁くれれば\",\n        -12.510270118713379\n      ],\n      [\n        \"▁強引に\",\n        -12.510387420654297\n      ],\n      [\n        \"▁地主\",\n        -12.510409355163574\n      ],\n      [\n        \"平安\",\n        -12.51041030883789\n      ],\n      [\n        \"込む\",\n        -12.510551452636719\n      ],\n      [\n        \"▁おこし\",\n        -12.51064682006836\n      ],\n      [\n        \"▁定評\",\n        -12.510833740234375\n      ],\n      [\n        \"▁City\",\n        -12.510900497436523\n      ],\n      [\n        \"▁クロウ\",\n        -12.5109224319458\n      ],\n      [\n        \"▁符\",\n        -12.51099681854248\n      ],\n      [\n        \"▁繰\",\n        -12.511034965515137\n      ],\n      [\n        \"同期\",\n        -12.511125564575195\n      ],\n      [\n        \"剛\",\n        -12.511134147644043\n      ],\n      [\n        \"▁配管\",\n        -12.511200904846191\n      ],\n      [\n        \"▁University\",\n        -12.511346817016602\n      ],\n      [\n        \"▁潤い\",\n        -12.511505126953125\n      ],\n      [\n        \"▁ps\",\n        -12.51164436340332\n      ],\n      [\n        \"▁sub\",\n        -12.511707305908203\n      ],\n      [\n        \"▁容易で\",\n        -12.511740684509277\n      ],\n      [\n        \"oko\",\n        -12.512118339538574\n      ],\n      [\n        \"▁スロバキア\",\n        -12.51211929321289\n      ],\n      [\n        \"▁積んだ\",\n        -12.512228012084961\n      ],\n      [\n        \"▁苦しめ\",\n        -12.51235294342041\n      ],\n      [\n        \"▁マカオ\",\n        -12.512433052062988\n      ],\n      [\n        \"INS\",\n        -12.512495040893555\n      ],\n      [\n        \"lit\",\n        -12.512514114379883\n      ],\n      [\n        \"ピエ\",\n        -12.51257038116455\n      ],\n      [\n        \"▁接点\",\n        -12.512579917907715\n      ],\n      [\n        \"▁掘削\",\n        -12.512797355651855\n      ],\n      [\n        \"COLOR\",\n        -12.512866973876953\n      ],\n      [\n        \"▁ズーム\",\n        -12.512871742248535\n      ],\n      [\n        \"▁景品\",\n        -12.513072967529297\n      ],\n      [\n        \"▁溜まって\",\n        -12.51310920715332\n      ],\n      [\n        \"▁縫い\",\n        -12.513114929199219\n      ],\n      [\n        \"▁ショーツ\",\n        -12.51318645477295\n      ],\n      [\n        \"mic\",\n        -12.513219833374023\n      ],\n      [\n        \"クソ\",\n        -12.513225555419922\n      ],\n      [\n        \"▁リラクゼーション\",\n        -12.513269424438477\n      ],\n      [\n        \"キャッチ\",\n        -12.513301849365234\n      ],\n      [\n        \"▁クイック\",\n        -12.51333236694336\n      ],\n      [\n        \"▁調印\",\n        -12.513382911682129\n      ],\n      [\n        \"新宿\",\n        -12.513392448425293\n      ],\n      [\n        \"▁迂回\",\n        -12.513429641723633\n      ],\n      [\n        \"▁ガム\",\n        -12.513533592224121\n      ],\n      [\n        \"▁買おう\",\n        -12.513636589050293\n      ],\n      [\n        \"ティウス\",\n        -12.51364517211914\n      ],\n      [\n        \"▁太刀\",\n        -12.513760566711426\n      ],\n      [\n        \"▁大物\",\n        -12.513762474060059\n      ],\n      [\n        \"エンス\",\n        -12.513805389404297\n      ],\n      [\n        \"▁賛否\",\n        -12.514071464538574\n      ],\n      [\n        \"豚\",\n        -12.514110565185547\n      ],\n      [\n        \"疫\",\n        -12.514211654663086\n      ],\n      [\n        \"武蔵\",\n        -12.514318466186523\n      ],\n      [\n        \"カーズ\",\n        -12.514521598815918\n      ],\n      [\n        \"ベア\",\n        -12.514545440673828\n      ],\n      [\n        \"▁製紙\",\n        -12.514570236206055\n      ],\n      [\n        \"▁当たら\",\n        -12.514711380004883\n      ],\n      [\n        \"▁Flash\",\n        -12.514738082885742\n      ],\n      [\n        \"▁あらわれ\",\n        -12.514763832092285\n      ],\n      [\n        \"キンス\",\n        -12.514769554138184\n      ],\n      [\n        \"プラー\",\n        -12.514922142028809\n      ],\n      [\n        \"▁205\",\n        -12.51492691040039\n      ],\n      [\n        \"▁連行\",\n        -12.514989852905273\n      ],\n      [\n        \"soft\",\n        -12.515042304992676\n      ],\n      [\n        \"▁マーチ\",\n        -12.515189170837402\n      ],\n      [\n        \"ember\",\n        -12.515336990356445\n      ],\n      [\n        \"▁成す\",\n        -12.515373229980469\n      ],\n      [\n        \"▁申し込\",\n        -12.515469551086426\n      ],\n      [\n        \"▁スクウェア\",\n        -12.515742301940918\n      ],\n      [\n        \"▁家政\",\n        -12.515751838684082\n      ],\n      [\n        \"media\",\n        -12.515853881835938\n      ],\n      [\n        \"湊\",\n        -12.515896797180176\n      ],\n      [\n        \"▁本種\",\n        -12.515935897827148\n      ],\n      [\n        \"高田\",\n        -12.516000747680664\n      ],\n      [\n        \"▁カギ\",\n        -12.51613712310791\n      ],\n      [\n        \"▁平原\",\n        -12.516203880310059\n      ],\n      [\n        \"カタ\",\n        -12.516246795654297\n      ],\n      [\n        \"▁名付けた\",\n        -12.516281127929688\n      ],\n      [\n        \"▁無意識\",\n        -12.516342163085938\n      ],\n      [\n        \"▁川島\",\n        -12.51646614074707\n      ],\n      [\n        \"▁スティーブン\",\n        -12.516510963439941\n      ],\n      [\n        \"ダブル\",\n        -12.516534805297852\n      ],\n      [\n        \"▁Master\",\n        -12.5165376663208\n      ],\n      [\n        \"▁以南\",\n        -12.516645431518555\n      ],\n      [\n        \"▁塗る\",\n        -12.51665210723877\n      ],\n      [\n        \"▁目前\",\n        -12.516674995422363\n      ],\n      [\n        \"▁皆無\",\n        -12.516797065734863\n      ],\n      [\n        \"高橋\",\n        -12.51683521270752\n      ],\n      [\n        \"▁祝う\",\n        -12.51695728302002\n      ],\n      [\n        \"▁ハンス\",\n        -12.517066955566406\n      ],\n      [\n        \"▁ファイターズ\",\n        -12.517193794250488\n      ],\n      [\n        \"▁豚肉\",\n        -12.517194747924805\n      ],\n      [\n        \"ヴォー\",\n        -12.517239570617676\n      ],\n      [\n        \"▁訪ねて\",\n        -12.517292022705078\n      ],\n      [\n        \"▁National\",\n        -12.51729965209961\n      ],\n      [\n        \"亮\",\n        -12.517352104187012\n      ],\n      [\n        \"▁掛ける\",\n        -12.517358779907227\n      ],\n      [\n        \"DB\",\n        -12.517369270324707\n      ],\n      [\n        \"▁柔軟に\",\n        -12.517380714416504\n      ],\n      [\n        \"▁並んだ\",\n        -12.517472267150879\n      ],\n      [\n        \"▁岩崎\",\n        -12.517561912536621\n      ],\n      [\n        \"▁出かけた\",\n        -12.517620086669922\n      ],\n      [\n        \"1912\",\n        -12.517925262451172\n      ],\n      [\n        \"▁農産物\",\n        -12.51793098449707\n      ],\n      [\n        \"▁ひょう\",\n        -12.518017768859863\n      ],\n      [\n        \"宰\",\n        -12.518113136291504\n      ],\n      [\n        \"▁被爆\",\n        -12.518174171447754\n      ],\n      [\n        \"▁朧\",\n        -12.518309593200684\n      ],\n      [\n        \"▁部材\",\n        -12.518453598022461\n      ],\n      [\n        \"▁SOFT\",\n        -12.518540382385254\n      ],\n      [\n        \"▁惣菜\",\n        -12.518596649169922\n      ],\n      [\n        \"▁キノコ\",\n        -12.51865291595459\n      ],\n      [\n        \"ゞ\",\n        -12.518736839294434\n      ],\n      [\n        \"▁対局\",\n        -12.518796920776367\n      ],\n      [\n        \"▁東端\",\n        -12.518805503845215\n      ],\n      [\n        \"core\",\n        -12.518835067749023\n      ],\n      [\n        \"▁稼\",\n        -12.518853187561035\n      ],\n      [\n        \"▁見守って\",\n        -12.518898963928223\n      ],\n      [\n        \"▁ボスニア\",\n        -12.518954277038574\n      ],\n      [\n        \"▁羽生\",\n        -12.519000053405762\n      ],\n      [\n        \"▁締\",\n        -12.51923656463623\n      ],\n      [\n        \"ward\",\n        -12.519577026367188\n      ],\n      [\n        \"密集\",\n        -12.519608497619629\n      ],\n      [\n        \"▁キリン\",\n        -12.519647598266602\n      ],\n      [\n        \"▁タール\",\n        -12.51970100402832\n      ],\n      [\n        \"▁ばね\",\n        -12.519950866699219\n      ],\n      [\n        \"▁アムステルダム\",\n        -12.520028114318848\n      ],\n      [\n        \"頓\",\n        -12.520173072814941\n      ],\n      [\n        \"▁因果\",\n        -12.520208358764648\n      ],\n      [\n        \"▁育てた\",\n        -12.520312309265137\n      ],\n      [\n        \"▁大好きです\",\n        -12.520366668701172\n      ],\n      [\n        \"▁見かけた\",\n        -12.520408630371094\n      ],\n      [\n        \"ウィック\",\n        -12.520537376403809\n      ],\n      [\n        \"▁焼いて\",\n        -12.520553588867188\n      ],\n      [\n        \"▁トヨタ自動車\",\n        -12.520703315734863\n      ],\n      [\n        \"▁チタン\",\n        -12.52071762084961\n      ],\n      [\n        \"▁早川\",\n        -12.520718574523926\n      ],\n      [\n        \"▁わざと\",\n        -12.52083969116211\n      ],\n      [\n        \"▁サテライト\",\n        -12.520997047424316\n      ],\n      [\n        \"▁Cap\",\n        -12.521020889282227\n      ],\n      [\n        \"貸\",\n        -12.521062850952148\n      ],\n      [\n        \"正しい\",\n        -12.521080017089844\n      ],\n      [\n        \"▁塗って\",\n        -12.521108627319336\n      ],\n      [\n        \"▁キャピタル\",\n        -12.521159172058105\n      ],\n      [\n        \"▁表した\",\n        -12.521191596984863\n      ],\n      [\n        \"▁エニックス\",\n        -12.521242141723633\n      ],\n      [\n        \"▁国交\",\n        -12.521378517150879\n      ],\n      [\n        \"▁コッ\",\n        -12.521389961242676\n      ],\n      [\n        \"▁アンダーソン\",\n        -12.521459579467773\n      ],\n      [\n        \"▁硫酸\",\n        -12.521482467651367\n      ],\n      [\n        \"▁いっしょに\",\n        -12.521491050720215\n      ],\n      [\n        \"Cl\",\n        -12.521577835083008\n      ],\n      [\n        \"▁一因\",\n        -12.52165412902832\n      ],\n      [\n        \"▁勤める\",\n        -12.521673202514648\n      ],\n      [\n        \"▁一躍\",\n        -12.521804809570312\n      ],\n      [\n        \"▁痴女\",\n        -12.521805763244629\n      ],\n      [\n        \"ミラー\",\n        -12.521954536437988\n      ],\n      [\n        \"▁城下町\",\n        -12.521966934204102\n      ],\n      [\n        \"斯\",\n        -12.521966934204102\n      ],\n      [\n        \"▁養老\",\n        -12.522017478942871\n      ],\n      [\n        \"▁1893\",\n        -12.522032737731934\n      ],\n      [\n        \"ろん\",\n        -12.52204704284668\n      ],\n      [\n        \"ハワイ\",\n        -12.522163391113281\n      ],\n      [\n        \"▁1・2\",\n        -12.522192001342773\n      ],\n      [\n        \"▁同伴\",\n        -12.522199630737305\n      ],\n      [\n        \"▁祖国\",\n        -12.522354125976562\n      ],\n      [\n        \"▁シェイ\",\n        -12.522355079650879\n      ],\n      [\n        \"▁撫で\",\n        -12.52245807647705\n      ],\n      [\n        \"▁童話\",\n        -12.522615432739258\n      ],\n      [\n        \"▁ALL\",\n        -12.522639274597168\n      ],\n      [\n        \"▁閉じる\",\n        -12.522660255432129\n      ],\n      [\n        \"▁信越\",\n        -12.522753715515137\n      ],\n      [\n        \"▁直した\",\n        -12.5227689743042\n      ],\n      [\n        \"▁法政\",\n        -12.522787094116211\n      ],\n      [\n        \"▁芦屋\",\n        -12.522953987121582\n      ],\n      [\n        \"枯\",\n        -12.523016929626465\n      ],\n      [\n        \"美術\",\n        -12.523168563842773\n      ],\n      [\n        \"好き\",\n        -12.523226737976074\n      ],\n      [\n        \"▁響く\",\n        -12.523327827453613\n      ],\n      [\n        \"▁おもい\",\n        -12.523422241210938\n      ],\n      [\n        \"暮れ\",\n        -12.52342700958252\n      ],\n      [\n        \"▁遥かに\",\n        -12.523603439331055\n      ],\n      [\n        \"▁ホウ\",\n        -12.5236177444458\n      ],\n      [\n        \"▁正常な\",\n        -12.523900985717773\n      ],\n      [\n        \"▁1886\",\n        -12.524154663085938\n      ],\n      [\n        \"▁昨\",\n        -12.52418041229248\n      ],\n      [\n        \"▁支所\",\n        -12.524236679077148\n      ],\n      [\n        \"共和\",\n        -12.524330139160156\n      ],\n      [\n        \"▁投げる\",\n        -12.524345397949219\n      ],\n      [\n        \"▁エフェクト\",\n        -12.524396896362305\n      ],\n      [\n        \"▁もっぱら\",\n        -12.52441120147705\n      ],\n      [\n        \"ular\",\n        -12.524435997009277\n      ],\n      [\n        \"omo\",\n        -12.524489402770996\n      ],\n      [\n        \"▁病死\",\n        -12.524526596069336\n      ],\n      [\n        \"▁身の\",\n        -12.524537086486816\n      ],\n      [\n        \"腐\",\n        -12.524543762207031\n      ],\n      [\n        \"▁文言\",\n        -12.524682998657227\n      ],\n      [\n        \"▁献上\",\n        -12.524704933166504\n      ],\n      [\n        \"▁冨\",\n        -12.52479076385498\n      ],\n      [\n        \"▁開場\",\n        -12.52480697631836\n      ],\n      [\n        \"▁今季\",\n        -12.524866104125977\n      ],\n      [\n        \"▁包丁\",\n        -12.52490234375\n      ],\n      [\n        \"ume\",\n        -12.524937629699707\n      ],\n      [\n        \"▁喪\",\n        -12.52495002746582\n      ],\n      [\n        \"▁築地\",\n        -12.525017738342285\n      ],\n      [\n        \"いろいろ\",\n        -12.525031089782715\n      ],\n      [\n        \"ぽん\",\n        -12.525113105773926\n      ],\n      [\n        \"▁Val\",\n        -12.525443077087402\n      ],\n      [\n        \"衆議院\",\n        -12.525507926940918\n      ],\n      [\n        \"▁提督\",\n        -12.525532722473145\n      ],\n      [\n        \"▁栄光\",\n        -12.525821685791016\n      ],\n      [\n        \"▁トーヨー\",\n        -12.52591323852539\n      ],\n      [\n        \"▁BIG\",\n        -12.52608871459961\n      ],\n      [\n        \"▁登って\",\n        -12.52610969543457\n      ],\n      [\n        \"▁採り\",\n        -12.526371002197266\n      ],\n      [\n        \"▁みかん\",\n        -12.526503562927246\n      ],\n      [\n        \"▁打診\",\n        -12.526527404785156\n      ],\n      [\n        \"▁吸引\",\n        -12.526542663574219\n      ],\n      [\n        \"▁舞い\",\n        -12.526572227478027\n      ],\n      [\n        \"▁羽根\",\n        -12.526690483093262\n      ],\n      [\n        \"ASA\",\n        -12.526834487915039\n      ],\n      [\n        \"▁嘉永\",\n        -12.52697467803955\n      ],\n      [\n        \"▁操業\",\n        -12.526996612548828\n      ],\n      [\n        \"▁なにも\",\n        -12.527066230773926\n      ],\n      [\n        \"▁エイジング\",\n        -12.527071952819824\n      ],\n      [\n        \"▁多賀\",\n        -12.527115821838379\n      ],\n      [\n        \"▁延べ\",\n        -12.52714729309082\n      ],\n      [\n        \"▁飽和\",\n        -12.5271577835083\n      ],\n      [\n        \"▁手首\",\n        -12.527214050292969\n      ],\n      [\n        \"▁図形\",\n        -12.527223587036133\n      ],\n      [\n        \"▁活かす\",\n        -12.52724552154541\n      ],\n      [\n        \"フィナステリ\",\n        -12.527304649353027\n      ],\n      [\n        \"クリストファー\",\n        -12.527325630187988\n      ],\n      [\n        \"▁解読\",\n        -12.52734088897705\n      ],\n      [\n        \"▁当てた\",\n        -12.527568817138672\n      ],\n      [\n        \"ボク\",\n        -12.527582168579102\n      ],\n      [\n        \"▁1884\",\n        -12.527667045593262\n      ],\n      [\n        \"ソ連\",\n        -12.527684211730957\n      ],\n      [\n        \"UST\",\n        -12.527703285217285\n      ],\n      [\n        \"▁いただけたら\",\n        -12.527809143066406\n      ],\n      [\n        \"▁後続\",\n        -12.52784538269043\n      ],\n      [\n        \"▁ハック\",\n        -12.527923583984375\n      ],\n      [\n        \"javascript\",\n        -12.527971267700195\n      ],\n      [\n        \"站\",\n        -12.527971267700195\n      ],\n      [\n        \"▁sec\",\n        -12.528040885925293\n      ],\n      [\n        \"人権\",\n        -12.52816390991211\n      ],\n      [\n        \"▁吸血\",\n        -12.528202056884766\n      ],\n      [\n        \"▁水深\",\n        -12.528264999389648\n      ],\n      [\n        \"tain\",\n        -12.528302192687988\n      ],\n      [\n        \"▁節目\",\n        -12.528388023376465\n      ],\n      [\n        \"▁カブ\",\n        -12.528398513793945\n      ],\n      [\n        \"▁セグメント\",\n        -12.528459548950195\n      ],\n      [\n        \"▁佑\",\n        -12.528477668762207\n      ],\n      [\n        \"エピソード\",\n        -12.528615951538086\n      ],\n      [\n        \"▁プラズマ\",\n        -12.528724670410156\n      ],\n      [\n        \"▁灘\",\n        -12.528749465942383\n      ],\n      [\n        \"▁256\",\n        -12.528904914855957\n      ],\n      [\n        \"▁オーブン\",\n        -12.528942108154297\n      ],\n      [\n        \"▁重臣\",\n        -12.529088973999023\n      ],\n      [\n        \"▁公言\",\n        -12.5291748046875\n      ],\n      [\n        \"▁マクロス\",\n        -12.529237747192383\n      ],\n      [\n        \"▁左岸\",\n        -12.52925968170166\n      ],\n      [\n        \"uit\",\n        -12.529294967651367\n      ],\n      [\n        \"▁英訳\",\n        -12.529430389404297\n      ],\n      [\n        \"▁Norton\",\n        -12.529437065124512\n      ],\n      [\n        \"▁代役\",\n        -12.529583930969238\n      ],\n      [\n        \"▁エネルギッシュ\",\n        -12.529600143432617\n      ],\n      [\n        \"ついに\",\n        -12.529643058776855\n      ],\n      [\n        \"▁ビルマ\",\n        -12.529682159423828\n      ],\n      [\n        \"▁替\",\n        -12.529690742492676\n      ],\n      [\n        \"メイド\",\n        -12.529691696166992\n      ],\n      [\n        \"▁ダウ\",\n        -12.52969741821289\n      ],\n      [\n        \"▁トキ\",\n        -12.52974796295166\n      ],\n      [\n        \"▁急激な\",\n        -12.529764175415039\n      ],\n      [\n        \"蒙\",\n        -12.529915809631348\n      ],\n      [\n        \"▁庄内\",\n        -12.529961585998535\n      ],\n      [\n        \"TOP\",\n        -12.530007362365723\n      ],\n      [\n        \"電力\",\n        -12.530102729797363\n      ],\n      [\n        \"▁王族\",\n        -12.530238151550293\n      ],\n      [\n        \"▁ヘッセン\",\n        -12.530311584472656\n      ],\n      [\n        \"▁宇佐\",\n        -12.530369758605957\n      ],\n      [\n        \"運用\",\n        -12.530439376831055\n      ],\n      [\n        \"掌\",\n        -12.530460357666016\n      ],\n      [\n        \"▁擁し\",\n        -12.530471801757812\n      ],\n      [\n        \"▁移送\",\n        -12.530484199523926\n      ],\n      [\n        \"▁反抗\",\n        -12.530503273010254\n      ],\n      [\n        \"▁諸侯\",\n        -12.530511856079102\n      ],\n      [\n        \"優勝\",\n        -12.530534744262695\n      ],\n      [\n        \"どい\",\n        -12.530553817749023\n      ],\n      [\n        \"▁胃腸\",\n        -12.530776977539062\n      ],\n      [\n        \"ious\",\n        -12.530839920043945\n      ],\n      [\n        \"▁扇風機\",\n        -12.530904769897461\n      ],\n      [\n        \"▁熱心な\",\n        -12.530909538269043\n      ],\n      [\n        \"レーヌ\",\n        -12.530917167663574\n      ],\n      [\n        \"▁買取り\",\n        -12.531103134155273\n      ],\n      [\n        \"RON\",\n        -12.531146049499512\n      ],\n      [\n        \"▁様相\",\n        -12.531177520751953\n      ],\n      [\n        \"久しぶりの\",\n        -12.531432151794434\n      ],\n      [\n        \"▁半期\",\n        -12.531472206115723\n      ],\n      [\n        \"▁レッズ\",\n        -12.531744956970215\n      ],\n      [\n        \"eta\",\n        -12.531770706176758\n      ],\n      [\n        \"▁浴びた\",\n        -12.531830787658691\n      ],\n      [\n        \"▁CSS\",\n        -12.531851768493652\n      ],\n      [\n        \"▁乗馬\",\n        -12.531861305236816\n      ],\n      [\n        \"▁同調\",\n        -12.53190803527832\n      ],\n      [\n        \"互\",\n        -12.532081604003906\n      ],\n      [\n        \"▁夜明け\",\n        -12.532198905944824\n      ],\n      [\n        \"▁アレクサンダー\",\n        -12.53222942352295\n      ],\n      [\n        \"川崎\",\n        -12.532341003417969\n      ],\n      [\n        \"▁キエフ\",\n        -12.532364845275879\n      ],\n      [\n        \"ein\",\n        -12.532529830932617\n      ],\n      [\n        \"▁キャスティング\",\n        -12.532683372497559\n      ],\n      [\n        \"fc\",\n        -12.53274154663086\n      ],\n      [\n        \"▁外す\",\n        -12.532768249511719\n      ],\n      [\n        \"ゼロッテ\",\n        -12.532773971557617\n      ],\n      [\n        \"▁灯台\",\n        -12.532853126525879\n      ],\n      [\n        \"荻\",\n        -12.53286361694336\n      ],\n      [\n        \"受け\",\n        -12.532903671264648\n      ],\n      [\n        \"ギル\",\n        -12.533021926879883\n      ],\n      [\n        \"誹謗\",\n        -12.533028602600098\n      ],\n      [\n        \"▁Export\",\n        -12.533065795898438\n      ],\n      [\n        \"▁真面目に\",\n        -12.533199310302734\n      ],\n      [\n        \"▁財閥\",\n        -12.533384323120117\n      ],\n      [\n        \"▁八木\",\n        -12.533388137817383\n      ],\n      [\n        \"▁GHz\",\n        -12.533520698547363\n      ],\n      [\n        \"▁ふら\",\n        -12.533537864685059\n      ],\n      [\n        \"▁四郎\",\n        -12.533547401428223\n      ],\n      [\n        \"▁弦楽\",\n        -12.53359317779541\n      ],\n      [\n        \"▁Gl\",\n        -12.533839225769043\n      ],\n      [\n        \"▁胞子\",\n        -12.533853530883789\n      ],\n      [\n        \"ングス\",\n        -12.533927917480469\n      ],\n      [\n        \"▁逃れる\",\n        -12.533936500549316\n      ],\n      [\n        \"▁判例\",\n        -12.533997535705566\n      ],\n      [\n        \"▁マクミラン\",\n        -12.534174919128418\n      ],\n      [\n        \"▁黄色い\",\n        -12.534318923950195\n      ],\n      [\n        \"ペプチド\",\n        -12.534341812133789\n      ],\n      [\n        \"じつ\",\n        -12.534393310546875\n      ],\n      [\n        \"▁マーカー\",\n        -12.534520149230957\n      ],\n      [\n        \"▁js\",\n        -12.534539222717285\n      ],\n      [\n        \"▁忌\",\n        -12.53459644317627\n      ],\n      [\n        \"750\",\n        -12.534662246704102\n      ],\n      [\n        \"▁イニング\",\n        -12.535040855407715\n      ],\n      [\n        \"▁狙撃\",\n        -12.535179138183594\n      ],\n      [\n        \"▁Top\",\n        -12.535233497619629\n      ],\n      [\n        \"▁風力\",\n        -12.535255432128906\n      ],\n      [\n        \"▁田川\",\n        -12.535269737243652\n      ],\n      [\n        \"▁フレグランス\",\n        -12.535321235656738\n      ],\n      [\n        \"▁元老\",\n        -12.535404205322266\n      ],\n      [\n        \"▁湊\",\n        -12.535426139831543\n      ],\n      [\n        \"▁門司\",\n        -12.535441398620605\n      ],\n      [\n        \"179\",\n        -12.535622596740723\n      ],\n      [\n        \"工業\",\n        -12.535630226135254\n      ],\n      [\n        \"愛媛\",\n        -12.535712242126465\n      ],\n      [\n        \"▁販促\",\n        -12.535977363586426\n      ],\n      [\n        \"▁貝塚\",\n        -12.536199569702148\n      ],\n      [\n        \"症状\",\n        -12.536351203918457\n      ],\n      [\n        \"uji\",\n        -12.536385536193848\n      ],\n      [\n        \"AK\",\n        -12.536473274230957\n      ],\n      [\n        \"爪\",\n        -12.536529541015625\n      ],\n      [\n        \"▁無難\",\n        -12.536722183227539\n      ],\n      [\n        \"▁湿地\",\n        -12.536819458007812\n      ],\n      [\n        \"des\",\n        -12.536913871765137\n      ],\n      [\n        \"▁滴\",\n        -12.537114143371582\n      ],\n      [\n        \"▁陛下\",\n        -12.537126541137695\n      ],\n      [\n        \"▁翌月\",\n        -12.537156105041504\n      ],\n      [\n        \"▁足跡\",\n        -12.537346839904785\n      ],\n      [\n        \"560\",\n        -12.537355422973633\n      ],\n      [\n        \"▁二輪\",\n        -12.537487983703613\n      ],\n      [\n        \"▁血統\",\n        -12.537578582763672\n      ],\n      [\n        \"苦し\",\n        -12.537737846374512\n      ],\n      [\n        \"▁ハンマー\",\n        -12.537775039672852\n      ],\n      [\n        \"▁STORE\",\n        -12.537809371948242\n      ],\n      [\n        \"択\",\n        -12.53786563873291\n      ],\n      [\n        \"▁138\",\n        -12.537915229797363\n      ],\n      [\n        \"丞\",\n        -12.537947654724121\n      ],\n      [\n        \"▁活気\",\n        -12.538116455078125\n      ],\n      [\n        \"▁博した\",\n        -12.538128852844238\n      ],\n      [\n        \"▁Good\",\n        -12.538175582885742\n      ],\n      [\n        \"▁厄介\",\n        -12.538276672363281\n      ],\n      [\n        \"▁機銃\",\n        -12.53838062286377\n      ],\n      [\n        \"▁朔\",\n        -12.538424491882324\n      ],\n      [\n        \"挑\",\n        -12.538435935974121\n      ],\n      [\n        \"實\",\n        -12.53844165802002\n      ],\n      [\n        \"▁両端\",\n        -12.53850269317627\n      ],\n      [\n        \"▁アルバニア\",\n        -12.538555145263672\n      ],\n      [\n        \"▁基底\",\n        -12.538565635681152\n      ],\n      [\n        \"▁態勢\",\n        -12.538771629333496\n      ],\n      [\n        \"エビ\",\n        -12.538784980773926\n      ],\n      [\n        \"▁若松\",\n        -12.538800239562988\n      ],\n      [\n        \"▁勅令\",\n        -12.538806915283203\n      ],\n      [\n        \"▁臨海\",\n        -12.538817405700684\n      ],\n      [\n        \"カウ\",\n        -12.538891792297363\n      ],\n      [\n        \"▁添えて\",\n        -12.539022445678711\n      ],\n      [\n        \"san\",\n        -12.539050102233887\n      ],\n      [\n        \"神経\",\n        -12.539201736450195\n      ],\n      [\n        \"アイドル\",\n        -12.53922176361084\n      ],\n      [\n        \"当院\",\n        -12.539477348327637\n      ],\n      [\n        \"▁メリー\",\n        -12.539783477783203\n      ],\n      [\n        \"▁415\",\n        -12.539835929870605\n      ],\n      [\n        \"▁顕著な\",\n        -12.539875984191895\n      ],\n      [\n        \"▁出掛け\",\n        -12.540002822875977\n      ],\n      [\n        \"▁フローリング\",\n        -12.54025650024414\n      ],\n      [\n        \"▁抜け毛\",\n        -12.540277481079102\n      ],\n      [\n        \"▁浴び\",\n        -12.540318489074707\n      ],\n      [\n        \"▁胚\",\n        -12.5403413772583\n      ],\n      [\n        \"んしゃ\",\n        -12.540384292602539\n      ],\n      [\n        \"ファッション\",\n        -12.540413856506348\n      ],\n      [\n        \"▁抜け出し\",\n        -12.540416717529297\n      ],\n      [\n        \"▁最良の\",\n        -12.540417671203613\n      ],\n      [\n        \"▁ハワード\",\n        -12.540434837341309\n      ],\n      [\n        \"▁スタイ\",\n        -12.540515899658203\n      ],\n      [\n        \"ocal\",\n        -12.540553092956543\n      ],\n      [\n        \"▁Night\",\n        -12.540556907653809\n      ],\n      [\n        \"▁任せる\",\n        -12.540611267089844\n      ],\n      [\n        \"▁HR\",\n        -12.540756225585938\n      ],\n      [\n        \"▁作ったり\",\n        -12.540761947631836\n      ],\n      [\n        \"▁悪意\",\n        -12.540770530700684\n      ],\n      [\n        \"▁改ざん\",\n        -12.540775299072266\n      ],\n      [\n        \"▁大原\",\n        -12.540797233581543\n      ],\n      [\n        \"ゼロ\",\n        -12.540865898132324\n      ],\n      [\n        \"▁可変\",\n        -12.541008949279785\n      ],\n      [\n        \"ノース\",\n        -12.5412015914917\n      ],\n      [\n        \"平均\",\n        -12.541382789611816\n      ],\n      [\n        \"▁重なって\",\n        -12.541415214538574\n      ],\n      [\n        \"▁頼んだ\",\n        -12.541426658630371\n      ],\n      [\n        \"▁坑\",\n        -12.541428565979004\n      ],\n      [\n        \"ili\",\n        -12.541479110717773\n      ],\n      [\n        \"▁チェル\",\n        -12.541492462158203\n      ],\n      [\n        \"スタート\",\n        -12.541559219360352\n      ],\n      [\n        \"▁ろく\",\n        -12.5415620803833\n      ],\n      [\n        \"▁インフォメーション\",\n        -12.541735649108887\n      ],\n      [\n        \"▁リキッド\",\n        -12.541763305664062\n      ],\n      [\n        \"潔\",\n        -12.541777610778809\n      ],\n      [\n        \"珍\",\n        -12.541840553283691\n      ],\n      [\n        \"▁区切り\",\n        -12.541940689086914\n      ],\n      [\n        \"▁ミステリ\",\n        -12.541960716247559\n      ],\n      [\n        \"▁谷川\",\n        -12.542023658752441\n      ],\n      [\n        \"▁温め\",\n        -12.542047500610352\n      ],\n      [\n        \"▁鳴らし\",\n        -12.542058944702148\n      ],\n      [\n        \"▁ヴィラ\",\n        -12.542119026184082\n      ],\n      [\n        \"ヴィエ\",\n        -12.542179107666016\n      ],\n      [\n        \"▁キャベツ\",\n        -12.542231559753418\n      ],\n      [\n        \"150\",\n        -12.54234504699707\n      ],\n      [\n        \"▁定休日\",\n        -12.542427062988281\n      ],\n      [\n        \"本社\",\n        -12.54245376586914\n      ],\n      [\n        \"WR\",\n        -12.542533874511719\n      ],\n      [\n        \"▁メッセ\",\n        -12.5425443649292\n      ],\n      [\n        \"▁cd\",\n        -12.542582511901855\n      ],\n      [\n        \"▁プロペラ\",\n        -12.542631149291992\n      ],\n      [\n        \"ote\",\n        -12.54275894165039\n      ],\n      [\n        \"▁コスパ\",\n        -12.542877197265625\n      ],\n      [\n        \"dom\",\n        -12.542913436889648\n      ],\n      [\n        \"▁クハ\",\n        -12.542975425720215\n      ],\n      [\n        \"▁治す\",\n        -12.542984962463379\n      ],\n      [\n        \"保護\",\n        -12.543198585510254\n      ],\n      [\n        \"▁ペトロ\",\n        -12.543274879455566\n      ],\n      [\n        \"混\",\n        -12.543314933776855\n      ],\n      [\n        \"▁キタ\",\n        -12.543427467346191\n      ],\n      [\n        \"▁失脚\",\n        -12.543785095214844\n      ],\n      [\n        \"▁古事\",\n        -12.543865203857422\n      ],\n      [\n        \"▁脊椎\",\n        -12.543883323669434\n      ],\n      [\n        \"▁華やか\",\n        -12.543917655944824\n      ],\n      [\n        \"▁貸付\",\n        -12.544038772583008\n      ],\n      [\n        \"▁ファイブ\",\n        -12.544045448303223\n      ],\n      [\n        \"▁監禁\",\n        -12.544048309326172\n      ],\n      [\n        \"▁エアー\",\n        -12.544087409973145\n      ],\n      [\n        \"劣\",\n        -12.544182777404785\n      ],\n      [\n        \"▁寺社\",\n        -12.54422378540039\n      ],\n      [\n        \"▁反対に\",\n        -12.544301986694336\n      ],\n      [\n        \"附\",\n        -12.544310569763184\n      ],\n      [\n        \"▁青梅\",\n        -12.544502258300781\n      ],\n      [\n        \"▁ヘルシー\",\n        -12.544512748718262\n      ],\n      [\n        \"▁券売機\",\n        -12.54454517364502\n      ],\n      [\n        \"アゼルバイジャン\",\n        -12.54454517364502\n      ],\n      [\n        \"翅\",\n        -12.54454517364502\n      ],\n      [\n        \"▁常駐\",\n        -12.544563293457031\n      ],\n      [\n        \"▁あいさつ\",\n        -12.54458236694336\n      ],\n      [\n        \"▁大東\",\n        -12.544771194458008\n      ],\n      [\n        \"▁芝生\",\n        -12.544788360595703\n      ],\n      [\n        \"▁反動\",\n        -12.54487419128418\n      ],\n      [\n        \"▁近似\",\n        -12.54491901397705\n      ],\n      [\n        \"▁コープ\",\n        -12.544920921325684\n      ],\n      [\n        \"▁曲げ\",\n        -12.545005798339844\n      ],\n      [\n        \"▁山間\",\n        -12.545058250427246\n      ],\n      [\n        \"ロング\",\n        -12.545318603515625\n      ],\n      [\n        \"▁鶴岡\",\n        -12.545326232910156\n      ],\n      [\n        \"そろ\",\n        -12.545448303222656\n      ],\n      [\n        \"▁ソード\",\n        -12.545465469360352\n      ],\n      [\n        \"チュウ\",\n        -12.545466423034668\n      ],\n      [\n        \"▁はずだった\",\n        -12.5454740524292\n      ],\n      [\n        \"▁チリワック\",\n        -12.545537948608398\n      ],\n      [\n        \"▁Steam\",\n        -12.54557991027832\n      ],\n      [\n        \"▁易い\",\n        -12.54564094543457\n      ],\n      [\n        \"紗\",\n        -12.545843124389648\n      ],\n      [\n        \"▁空いた\",\n        -12.545845985412598\n      ],\n      [\n        \"▁発端\",\n        -12.545889854431152\n      ],\n      [\n        \"▁1885\",\n        -12.54595947265625\n      ],\n      [\n        \"▁シークレット\",\n        -12.546035766601562\n      ],\n      [\n        \"▁カレン\",\n        -12.54608154296875\n      ],\n      [\n        \"芸能\",\n        -12.546113967895508\n      ],\n      [\n        \"餅\",\n        -12.546195983886719\n      ],\n      [\n        \"▁諮問\",\n        -12.5462007522583\n      ],\n      [\n        \"▁支局\",\n        -12.546248435974121\n      ],\n      [\n        \"▁ギネス\",\n        -12.546290397644043\n      ],\n      [\n        \"▁みそ\",\n        -12.54642105102539\n      ],\n      [\n        \"▁ストリーム\",\n        -12.546577453613281\n      ],\n      [\n        \"それゆえ\",\n        -12.546586036682129\n      ],\n      [\n        \"▁日テレ\",\n        -12.546630859375\n      ],\n      [\n        \"▁刷\",\n        -12.54666805267334\n      ],\n      [\n        \"▁rights\",\n        -12.54670524597168\n      ],\n      [\n        \"▁味付け\",\n        -12.546795845031738\n      ],\n      [\n        \"▁美味\",\n        -12.54682445526123\n      ],\n      [\n        \"▁番付\",\n        -12.546903610229492\n      ],\n      [\n        \"▁クローバー\",\n        -12.546981811523438\n      ],\n      [\n        \"▁アリー\",\n        -12.547069549560547\n      ],\n      [\n        \"▁直流\",\n        -12.547139167785645\n      ],\n      [\n        \"▁浪人\",\n        -12.547204971313477\n      ],\n      [\n        \"▁ソール\",\n        -12.547245025634766\n      ],\n      [\n        \"▁スピーディ\",\n        -12.54729175567627\n      ],\n      [\n        \"図書\",\n        -12.547423362731934\n      ],\n      [\n        \"▁ディビシオン\",\n        -12.547528266906738\n      ],\n      [\n        \"▁だくさん\",\n        -12.547530174255371\n      ],\n      [\n        \"▁グリッド\",\n        -12.54776668548584\n      ],\n      [\n        \"▁タダ\",\n        -12.547941207885742\n      ],\n      [\n        \"▁エヌ\",\n        -12.547990798950195\n      ],\n      [\n        \"▁安土\",\n        -12.548134803771973\n      ],\n      [\n        \"▁蔓延\",\n        -12.548192024230957\n      ],\n      [\n        \"▁あいつ\",\n        -12.548285484313965\n      ],\n      [\n        \"▁うっかり\",\n        -12.548357963562012\n      ],\n      [\n        \"▁カタルーニャ\",\n        -12.548357963562012\n      ],\n      [\n        \"昨夜\",\n        -12.548420906066895\n      ],\n      [\n        \"スタジオ\",\n        -12.548421859741211\n      ],\n      [\n        \"▁つとめた\",\n        -12.548428535461426\n      ],\n      [\n        \"▁グラフィックス\",\n        -12.548449516296387\n      ],\n      [\n        \"▁偽造\",\n        -12.548467636108398\n      ],\n      [\n        \"▁宗家\",\n        -12.548468589782715\n      ],\n      [\n        \"tive\",\n        -12.548562049865723\n      ],\n      [\n        \"▁みずほ\",\n        -12.54872989654541\n      ],\n      [\n        \"▁文理\",\n        -12.548794746398926\n      ],\n      [\n        \"▁脱走\",\n        -12.548800468444824\n      ],\n      [\n        \"鴻\",\n        -12.548856735229492\n      ],\n      [\n        \"▁直送\",\n        -12.5488862991333\n      ],\n      [\n        \"深い\",\n        -12.548890113830566\n      ],\n      [\n        \"SNS\",\n        -12.548975944519043\n      ],\n      [\n        \"rim\",\n        -12.548991203308105\n      ],\n      [\n        \"illa\",\n        -12.549001693725586\n      ],\n      [\n        \"▁Technology\",\n        -12.549022674560547\n      ],\n      [\n        \"▁貼ら\",\n        -12.54902458190918\n      ],\n      [\n        \"ルール\",\n        -12.549031257629395\n      ],\n      [\n        \"ジャンル\",\n        -12.549090385437012\n      ],\n      [\n        \"▁冷静\",\n        -12.549196243286133\n      ],\n      [\n        \"▁飼\",\n        -12.549225807189941\n      ],\n      [\n        \"▁名鉄\",\n        -12.549256324768066\n      ],\n      [\n        \"バランス\",\n        -12.549287796020508\n      ],\n      [\n        \"▁スキャンダル\",\n        -12.549384117126465\n      ],\n      [\n        \"▁らしき\",\n        -12.549420356750488\n      ],\n      [\n        \"▁刈谷\",\n        -12.54952335357666\n      ],\n      [\n        \"辻\",\n        -12.549858093261719\n      ],\n      [\n        \"▁死傷\",\n        -12.549871444702148\n      ],\n      [\n        \"ella\",\n        -12.550039291381836\n      ],\n      [\n        \"▁光る\",\n        -12.550046920776367\n      ],\n      [\n        \"▁めざし\",\n        -12.550240516662598\n      ],\n      [\n        \"▁さよなら\",\n        -12.55035400390625\n      ],\n      [\n        \"MIT\",\n        -12.550429344177246\n      ],\n      [\n        \"▁画素\",\n        -12.550448417663574\n      ],\n      [\n        \"AMI\",\n        -12.55050277709961\n      ],\n      [\n        \"▁003\",\n        -12.55050277709961\n      ],\n      [\n        \"▁ストライプ\",\n        -12.550520896911621\n      ],\n      [\n        \"▁心地よい\",\n        -12.55070686340332\n      ],\n      [\n        \"▁晶\",\n        -12.55072021484375\n      ],\n      [\n        \"マウス\",\n        -12.550795555114746\n      ],\n      [\n        \"bit\",\n        -12.550909042358398\n      ],\n      [\n        \"▁触って\",\n        -12.550933837890625\n      ],\n      [\n        \"▁中途\",\n        -12.550938606262207\n      ],\n      [\n        \"▁えび\",\n        -12.55097484588623\n      ],\n      [\n        \"切ら\",\n        -12.550996780395508\n      ],\n      [\n        \"▁就いて\",\n        -12.551013946533203\n      ],\n      [\n        \"▁啓蒙\",\n        -12.551027297973633\n      ],\n      [\n        \"▁火器\",\n        -12.551104545593262\n      ],\n      [\n        \"▁殺菌\",\n        -12.551109313964844\n      ],\n      [\n        \"▁過剰な\",\n        -12.551117897033691\n      ],\n      [\n        \"ーーー\",\n        -12.551139831542969\n      ],\n      [\n        \"▁今治\",\n        -12.551167488098145\n      ],\n      [\n        \"HL\",\n        -12.55126953125\n      ],\n      [\n        \"▁スリランカ\",\n        -12.551352500915527\n      ],\n      [\n        \"▁貼る\",\n        -12.551355361938477\n      ],\n      [\n        \"▁仕上げて\",\n        -12.551406860351562\n      ],\n      [\n        \"▁甘え\",\n        -12.551460266113281\n      ],\n      [\n        \"▁退治\",\n        -12.551480293273926\n      ],\n      [\n        \"▁ブルックリン\",\n        -12.55164623260498\n      ],\n      [\n        \"▁宗派\",\n        -12.551657676696777\n      ],\n      [\n        \"▁タフ\",\n        -12.55172061920166\n      ],\n      [\n        \"霞\",\n        -12.551749229431152\n      ],\n      [\n        \"▁同様である\",\n        -12.551847457885742\n      ],\n      [\n        \"▁取組み\",\n        -12.551955223083496\n      ],\n      [\n        \"▁フィーチャー\",\n        -12.552085876464844\n      ],\n      [\n        \"▁水害\",\n        -12.55214786529541\n      ],\n      [\n        \"▁大仏\",\n        -12.552227973937988\n      ],\n      [\n        \"▁リチウム\",\n        -12.552351951599121\n      ],\n      [\n        \"▁陶芸\",\n        -12.552374839782715\n      ],\n      [\n        \"▁消極\",\n        -12.552571296691895\n      ],\n      [\n        \"▁ピンチ\",\n        -12.552587509155273\n      ],\n      [\n        \"▁カエル\",\n        -12.552593231201172\n      ],\n      [\n        \"▁引き起こした\",\n        -12.5526762008667\n      ],\n      [\n        \"▁官職\",\n        -12.55274772644043\n      ],\n      [\n        \"▁BG\",\n        -12.552937507629395\n      ],\n      [\n        \"Point\",\n        -12.552990913391113\n      ],\n      [\n        \"▁入部\",\n        -12.553004264831543\n      ],\n      [\n        \"▁反復\",\n        -12.553019523620605\n      ],\n      [\n        \"大き\",\n        -12.55302906036377\n      ],\n      [\n        \"▁ワーキング\",\n        -12.55305290222168\n      ],\n      [\n        \"▁上皇\",\n        -12.55309009552002\n      ],\n      [\n        \"▁注ぎ\",\n        -12.553221702575684\n      ],\n      [\n        \"▁野口\",\n        -12.553268432617188\n      ],\n      [\n        \"▁知多\",\n        -12.55329418182373\n      ],\n      [\n        \"▁ペットボトル\",\n        -12.553353309631348\n      ],\n      [\n        \"▁取り消\",\n        -12.553478240966797\n      ],\n      [\n        \"Bl\",\n        -12.553494453430176\n      ],\n      [\n        \"▁エッセンス\",\n        -12.553525924682617\n      ],\n      [\n        \"乾燥\",\n        -12.553553581237793\n      ],\n      [\n        \"▁サウナ\",\n        -12.553618431091309\n      ],\n      [\n        \"▁ナビゲーション\",\n        -12.55368709564209\n      ],\n      [\n        \"▁Net\",\n        -12.553727149963379\n      ],\n      [\n        \"メタル\",\n        -12.553744316101074\n      ],\n      [\n        \"▁ベタ\",\n        -12.55374526977539\n      ],\n      [\n        \"▁1891\",\n        -12.553752899169922\n      ],\n      [\n        \"▁minor\",\n        -12.55375862121582\n      ],\n      [\n        \"▁コミュニティー\",\n        -12.553862571716309\n      ],\n      [\n        \"▁Tu\",\n        -12.553956985473633\n      ],\n      [\n        \"▁くっつ\",\n        -12.55408763885498\n      ],\n      [\n        \"wi\",\n        -12.55417537689209\n      ],\n      [\n        \"ペア\",\n        -12.554214477539062\n      ],\n      [\n        \"▁いわき\",\n        -12.55422592163086\n      ],\n      [\n        \"▁右岸\",\n        -12.554350852966309\n      ],\n      [\n        \"▁dvd\",\n        -12.55435562133789\n      ],\n      [\n        \"全長\",\n        -12.554370880126953\n      ],\n      [\n        \"トヨタ\",\n        -12.554438591003418\n      ],\n      [\n        \"▁レプリカ\",\n        -12.554551124572754\n      ],\n      [\n        \"▁発効\",\n        -12.554616928100586\n      ],\n      [\n        \"連続\",\n        -12.554621696472168\n      ],\n      [\n        \"▁貰い\",\n        -12.55469036102295\n      ],\n      [\n        \"▁カバ\",\n        -12.55478572845459\n      ],\n      [\n        \"▁免責\",\n        -12.554879188537598\n      ],\n      [\n        \"恨み\",\n        -12.554895401000977\n      ],\n      [\n        \"Pa\",\n        -12.554899215698242\n      ],\n      [\n        \"▁ぶどう\",\n        -12.554967880249023\n      ],\n      [\n        \"くろ\",\n        -12.555001258850098\n      ],\n      [\n        \"▁題した\",\n        -12.555014610290527\n      ],\n      [\n        \"▁ローター\",\n        -12.555032730102539\n      ],\n      [\n        \"▁縄\",\n        -12.55504035949707\n      ],\n      [\n        \"▁川西\",\n        -12.555045127868652\n      ],\n      [\n        \"▁佐倉\",\n        -12.555072784423828\n      ],\n      [\n        \"▁給湯\",\n        -12.555076599121094\n      ],\n      [\n        \"▁ソロモン\",\n        -12.555191040039062\n      ],\n      [\n        \"▁クライマックス\",\n        -12.55520248413086\n      ],\n      [\n        \"▁少なくて\",\n        -12.555243492126465\n      ],\n      [\n        \"クォ\",\n        -12.555282592773438\n      ],\n      [\n        \"▁自伝\",\n        -12.555362701416016\n      ],\n      [\n        \"▁ケルン\",\n        -12.555364608764648\n      ],\n      [\n        \"サギ\",\n        -12.555511474609375\n      ],\n      [\n        \"▁2023\",\n        -12.555534362792969\n      ],\n      [\n        \"和歌山\",\n        -12.555575370788574\n      ],\n      [\n        \"▁思ったり\",\n        -12.555630683898926\n      ],\n      [\n        \"▁あー\",\n        -12.555670738220215\n      ],\n      [\n        \"DH\",\n        -12.555764198303223\n      ],\n      [\n        \"▁絶景\",\n        -12.555939674377441\n      ],\n      [\n        \"▁交えて\",\n        -12.556063652038574\n      ],\n      [\n        \"▁JC\",\n        -12.556090354919434\n      ],\n      [\n        \"JA\",\n        -12.556169509887695\n      ],\n      [\n        \"в\",\n        -12.556194305419922\n      ],\n      [\n        \"▁生まれ変わ\",\n        -12.556641578674316\n      ],\n      [\n        \"腿\",\n        -12.556697845458984\n      ],\n      [\n        \"▁ノートン\",\n        -12.556741714477539\n      ],\n      [\n        \"▁あし\",\n        -12.556829452514648\n      ],\n      [\n        \"▁くだ\",\n        -12.556912422180176\n      ],\n      [\n        \"曳\",\n        -12.557031631469727\n      ],\n      [\n        \" \",\n        -12.557032585144043\n      ],\n      [\n        \"▁逝去\",\n        -12.557032585144043\n      ],\n      [\n        \"コーヒー\",\n        -12.557072639465332\n      ],\n      [\n        \"▁隔て\",\n        -12.557119369506836\n      ],\n      [\n        \"▁兄ちゃん\",\n        -12.557138442993164\n      ],\n      [\n        \"▁秋季\",\n        -12.55716323852539\n      ],\n      [\n        \"▁タックル\",\n        -12.55720043182373\n      ],\n      [\n        \"▁アルカリ\",\n        -12.55721664428711\n      ],\n      [\n        \"ウィリアム\",\n        -12.55743408203125\n      ],\n      [\n        \"▁∞\",\n        -12.557474136352539\n      ],\n      [\n        \"▁マーガレット\",\n        -12.557535171508789\n      ],\n      [\n        \"uku\",\n        -12.557547569274902\n      ],\n      [\n        \"▁ボーン\",\n        -12.557650566101074\n      ],\n      [\n        \"デオ\",\n        -12.557689666748047\n      ],\n      [\n        \"▁この先\",\n        -12.557698249816895\n      ],\n      [\n        \"▁仕上がって\",\n        -12.557703018188477\n      ],\n      [\n        \"▁コンサル\",\n        -12.55774211883545\n      ],\n      [\n        \"▁ごめんなさい\",\n        -12.557744026184082\n      ],\n      [\n        \"▁挟み\",\n        -12.55787181854248\n      ],\n      [\n        \"▁520\",\n        -12.55799674987793\n      ],\n      [\n        \"▁イルカ\",\n        -12.558099746704102\n      ],\n      [\n        \"▁通達\",\n        -12.558128356933594\n      ],\n      [\n        \"ぼく\",\n        -12.558131217956543\n      ],\n      [\n        \"▁おっしゃって\",\n        -12.558207511901855\n      ],\n      [\n        \"▁城壁\",\n        -12.55832576751709\n      ],\n      [\n        \"▁しょうがない\",\n        -12.558374404907227\n      ],\n      [\n        \"▁インターフェース\",\n        -12.558374404907227\n      ],\n      [\n        \"▁時効\",\n        -12.558426856994629\n      ],\n      [\n        \"▁しっとり\",\n        -12.558709144592285\n      ],\n      [\n        \"▁前夜\",\n        -12.558774948120117\n      ],\n      [\n        \"飲み\",\n        -12.558823585510254\n      ],\n      [\n        \"▁フレデリック\",\n        -12.558877944946289\n      ],\n      [\n        \"▁永禄\",\n        -12.558911323547363\n      ],\n      [\n        \"▁咲か\",\n        -12.559159278869629\n      ],\n      [\n        \"1900\",\n        -12.559189796447754\n      ],\n      [\n        \"▁商法\",\n        -12.559200286865234\n      ],\n      [\n        \"みや\",\n        -12.559226036071777\n      ],\n      [\n        \"ツィオ\",\n        -12.55924129486084\n      ],\n      [\n        \"兄弟\",\n        -12.559342384338379\n      ],\n      [\n        \"▁減速\",\n        -12.55935287475586\n      ],\n      [\n        \"▁全文\",\n        -12.55950927734375\n      ],\n      [\n        \"太田\",\n        -12.55953598022461\n      ],\n      [\n        \"▁AZ\",\n        -12.559618949890137\n      ],\n      [\n        \"項\",\n        -12.55963134765625\n      ],\n      [\n        \"▁満たない\",\n        -12.559649467468262\n      ],\n      [\n        \"▁絶好\",\n        -12.559656143188477\n      ],\n      [\n        \"▁永田\",\n        -12.559685707092285\n      ],\n      [\n        \"▁輝いて\",\n        -12.559696197509766\n      ],\n      [\n        \"▁チャイルド\",\n        -12.559885025024414\n      ],\n      [\n        \"▁Get\",\n        -12.559986114501953\n      ],\n      [\n        \"一応\",\n        -12.560111045837402\n      ],\n      [\n        \"▁半球\",\n        -12.56011962890625\n      ],\n      [\n        \"▁クラリネット\",\n        -12.560220718383789\n      ],\n      [\n        \"いよいよ\",\n        -12.560311317443848\n      ],\n      [\n        \"graph\",\n        -12.560380935668945\n      ],\n      [\n        \"応募\",\n        -12.560486793518066\n      ],\n      [\n        \"▁トレイル\",\n        -12.560493469238281\n      ],\n      [\n        \"▁リタイア\",\n        -12.560574531555176\n      ],\n      [\n        \"▁防護\",\n        -12.56069278717041\n      ],\n      [\n        \"富良野\",\n        -12.560729026794434\n      ],\n      [\n        \"▁室蘭\",\n        -12.560813903808594\n      ],\n      [\n        \"1910\",\n        -12.560907363891602\n      ],\n      [\n        \"ぼん\",\n        -12.560933113098145\n      ],\n      [\n        \"▁兄さん\",\n        -12.56101131439209\n      ],\n      [\n        \"mar\",\n        -12.56103515625\n      ],\n      [\n        \"▁windows\",\n        -12.561058044433594\n      ],\n      [\n        \"▁パワフル\",\n        -12.561229705810547\n      ],\n      [\n        \"ヨコハマタイヤ\",\n        -12.561325073242188\n      ],\n      [\n        \"小学\",\n        -12.561344146728516\n      ],\n      [\n        \"▁ブン\",\n        -12.561380386352539\n      ],\n      [\n        \"▁一転\",\n        -12.561477661132812\n      ],\n      [\n        \"▁ビューティ\",\n        -12.561554908752441\n      ],\n      [\n        \"▁なくちゃ\",\n        -12.561700820922852\n      ],\n      [\n        \"▁まともに\",\n        -12.561735153198242\n      ],\n      [\n        \"▁オットー\",\n        -12.561747550964355\n      ],\n      [\n        \"▁衣料\",\n        -12.561761856079102\n      ],\n      [\n        \"▁セダン\",\n        -12.562078475952148\n      ],\n      [\n        \"劉\",\n        -12.562336921691895\n      ],\n      [\n        \"▁果たせ\",\n        -12.562418937683105\n      ],\n      [\n        \"▁Sound\",\n        -12.562446594238281\n      ],\n      [\n        \"▁1888\",\n        -12.562503814697266\n      ],\n      [\n        \"スティン\",\n        -12.562694549560547\n      ],\n      [\n        \"yc\",\n        -12.562857627868652\n      ],\n      [\n        \"▁留まる\",\n        -12.562888145446777\n      ],\n      [\n        \"誓\",\n        -12.56289291381836\n      ],\n      [\n        \"▁返送\",\n        -12.562943458557129\n      ],\n      [\n        \"▁重要で\",\n        -12.562980651855469\n      ],\n      [\n        \"いろんな\",\n        -12.56302547454834\n      ],\n      [\n        \"▁気付いて\",\n        -12.563042640686035\n      ],\n      [\n        \"▁交配\",\n        -12.563136100769043\n      ],\n      [\n        \"▁カイロ\",\n        -12.563149452209473\n      ],\n      [\n        \"▁公司\",\n        -12.56316089630127\n      ],\n      [\n        \"▁おまけ\",\n        -12.563166618347168\n      ],\n      [\n        \"ria\",\n        -12.56318187713623\n      ],\n      [\n        \"ible\",\n        -12.563331604003906\n      ],\n      [\n        \"▁磐\",\n        -12.563346862792969\n      ],\n      [\n        \"▁大石\",\n        -12.563458442687988\n      ],\n      [\n        \"▁没頭\",\n        -12.56351089477539\n      ],\n      [\n        \"▁Award\",\n        -12.563667297363281\n      ],\n      [\n        \"▁流れた\",\n        -12.563685417175293\n      ],\n      [\n        \"▁励まし\",\n        -12.563775062561035\n      ],\n      [\n        \"▁供与\",\n        -12.563785552978516\n      ],\n      [\n        \"▁ハッチ\",\n        -12.563820838928223\n      ],\n      [\n        \"▁アーマード\",\n        -12.564530372619629\n      ],\n      [\n        \"▁木星\",\n        -12.564541816711426\n      ],\n      [\n        \"▁摂政\",\n        -12.564574241638184\n      ],\n      [\n        \"▁パウロ\",\n        -12.564769744873047\n      ],\n      [\n        \"▁悩んだ\",\n        -12.564793586730957\n      ],\n      [\n        \"▁GC\",\n        -12.564961433410645\n      ],\n      [\n        \"▁列挙\",\n        -12.56503963470459\n      ],\n      [\n        \"▁絶大な\",\n        -12.565109252929688\n      ],\n      [\n        \"▁オレゴン\",\n        -12.565170288085938\n      ],\n      [\n        \"▁ツボ\",\n        -12.565177917480469\n      ],\n      [\n        \"▁歌人\",\n        -12.565258026123047\n      ],\n      [\n        \"▁イオンモール\",\n        -12.565321922302246\n      ],\n      [\n        \"▁寄進\",\n        -12.565375328063965\n      ],\n      [\n        \"▁おなじみ\",\n        -12.565444946289062\n      ],\n      [\n        \"撒\",\n        -12.565444946289062\n      ],\n      [\n        \"▁母校\",\n        -12.565472602844238\n      ],\n      [\n        \"▁着信\",\n        -12.565476417541504\n      ],\n      [\n        \"▁よそ\",\n        -12.565484046936035\n      ],\n      [\n        \"▁冠した\",\n        -12.565510749816895\n      ],\n      [\n        \"▁丸の内\",\n        -12.5656156539917\n      ],\n      [\n        \"野球\",\n        -12.565733909606934\n      ],\n      [\n        \"駅舎\",\n        -12.565808296203613\n      ],\n      [\n        \"USE\",\n        -12.565876007080078\n      ],\n      [\n        \"▁悦\",\n        -12.565882682800293\n      ],\n      [\n        \"▁コロムビア\",\n        -12.56595230102539\n      ],\n      [\n        \"▁百科事典\",\n        -12.566121101379395\n      ],\n      [\n        \"前者\",\n        -12.566205024719238\n      ],\n      [\n        \"マック\",\n        -12.566283226013184\n      ],\n      [\n        \"ブレイ\",\n        -12.566428184509277\n      ],\n      [\n        \"▁抑えた\",\n        -12.566548347473145\n      ],\n      [\n        \"▁二郎\",\n        -12.56676197052002\n      ],\n      [\n        \"食品\",\n        -12.566802024841309\n      ],\n      [\n        \"▁遂げる\",\n        -12.56684684753418\n      ],\n      [\n        \"惟\",\n        -12.56696605682373\n      ],\n      [\n        \"▁ニュアンス\",\n        -12.566967010498047\n      ],\n      [\n        \"▁アイスクリーム\",\n        -12.566975593566895\n      ],\n      [\n        \"▁シックス\",\n        -12.567084312438965\n      ],\n      [\n        \"▁モノクロ\",\n        -12.567122459411621\n      ],\n      [\n        \"▁洋楽\",\n        -12.56716251373291\n      ],\n      [\n        \"▁かゆ\",\n        -12.567183494567871\n      ],\n      [\n        \"赦\",\n        -12.567458152770996\n      ],\n      [\n        \"相談\",\n        -12.567537307739258\n      ],\n      [\n        \"妊\",\n        -12.567670822143555\n      ],\n      [\n        \"遷\",\n        -12.56781005859375\n      ],\n      [\n        \"▁使徒\",\n        -12.56785774230957\n      ],\n      [\n        \"▁噴出\",\n        -12.567863464355469\n      ],\n      [\n        \"▁弔\",\n        -12.56786823272705\n      ],\n      [\n        \"▁失望\",\n        -12.567899703979492\n      ],\n      [\n        \"欽\",\n        -12.56798267364502\n      ],\n      [\n        \"▁有線\",\n        -12.568231582641602\n      ],\n      [\n        \"▁椎名\",\n        -12.568325996398926\n      ],\n      [\n        \"iP\",\n        -12.568367004394531\n      ],\n      [\n        \"▁贈与\",\n        -12.568501472473145\n      ],\n      [\n        \"▁コンパニオン\",\n        -12.568660736083984\n      ],\n      [\n        \"car\",\n        -12.568704605102539\n      ],\n      [\n        \"▁ヤツ\",\n        -12.568792343139648\n      ],\n      [\n        \"▁窪\",\n        -12.568869590759277\n      ],\n      [\n        \"ブラジル\",\n        -12.568872451782227\n      ],\n      [\n        \"▁平定\",\n        -12.568916320800781\n      ],\n      [\n        \"▁祭神\",\n        -12.568933486938477\n      ],\n      [\n        \"喰\",\n        -12.568951606750488\n      ],\n      [\n        \"癒\",\n        -12.569039344787598\n      ],\n      [\n        \"▁アダプター\",\n        -12.569087028503418\n      ],\n      [\n        \"▁産卵\",\n        -12.569100379943848\n      ],\n      [\n        \"▁バイマ\",\n        -12.569120407104492\n      ],\n      [\n        \"โ\",\n        -12.569169044494629\n      ],\n      [\n        \"▁直ぐに\",\n        -12.569169998168945\n      ],\n      [\n        \"爺\",\n        -12.569169998168945\n      ],\n      [\n        \"▁6,000\",\n        -12.56932544708252\n      ],\n      [\n        \"ニチ\",\n        -12.569440841674805\n      ],\n      [\n        \"▁tv\",\n        -12.569552421569824\n      ],\n      [\n        \"▁幼虫\",\n        -12.569555282592773\n      ],\n      [\n        \"▁ナカ\",\n        -12.56955623626709\n      ],\n      [\n        \"▁ミドリ\",\n        -12.569599151611328\n      ],\n      [\n        \"▁始発\",\n        -12.569616317749023\n      ],\n      [\n        \"▁始末\",\n        -12.569717407226562\n      ],\n      [\n        \"▁拾い\",\n        -12.56973648071289\n      ],\n      [\n        \"▁置き換える\",\n        -12.569873809814453\n      ],\n      [\n        \"▁複雑に\",\n        -12.569999694824219\n      ],\n      [\n        \"看\",\n        -12.570040702819824\n      ],\n      [\n        \"▁ひいて\",\n        -12.570085525512695\n      ],\n      [\n        \"▁演目\",\n        -12.57037353515625\n      ],\n      [\n        \"▁シンク\",\n        -12.57044506072998\n      ],\n      [\n        \"厚生\",\n        -12.570635795593262\n      ],\n      [\n        \"▁ニール\",\n        -12.570758819580078\n      ],\n      [\n        \"▁ハイキング\",\n        -12.570762634277344\n      ],\n      [\n        \"▁待望\",\n        -12.570783615112305\n      ],\n      [\n        \"人数\",\n        -12.571003913879395\n      ],\n      [\n        \"▁KING\",\n        -12.571023941040039\n      ],\n      [\n        \"▁真言宗\",\n        -12.571036338806152\n      ],\n      [\n        \"▁ウォルト\",\n        -12.57113265991211\n      ],\n      [\n        \"詳\",\n        -12.571133613586426\n      ],\n      [\n        \"クリーブランド\",\n        -12.571138381958008\n      ],\n      [\n        \"▁Player\",\n        -12.571176528930664\n      ],\n      [\n        \"▁信任\",\n        -12.571184158325195\n      ],\n      [\n        \"▁活力\",\n        -12.571250915527344\n      ],\n      [\n        \"▁限る\",\n        -12.571487426757812\n      ],\n      [\n        \"▁要注意\",\n        -12.571587562561035\n      ],\n      [\n        \"▁味わえる\",\n        -12.571637153625488\n      ],\n      [\n        \"▁Development\",\n        -12.57171630859375\n      ],\n      [\n        \"SCO\",\n        -12.571745872497559\n      ],\n      [\n        \"▁MIN\",\n        -12.571752548217773\n      ],\n      [\n        \"▁トロフィー\",\n        -12.571789741516113\n      ],\n      [\n        \"けれども\",\n        -12.571808815002441\n      ],\n      [\n        \"▁裕福な\",\n        -12.571890830993652\n      ],\n      [\n        \"完成\",\n        -12.571905136108398\n      ],\n      [\n        \"▁蒸留\",\n        -12.571907997131348\n      ],\n      [\n        \"はん\",\n        -12.571920394897461\n      ],\n      [\n        \"ベトナム\",\n        -12.57207202911377\n      ],\n      [\n        \"▁吉岡\",\n        -12.572073936462402\n      ],\n      [\n        \"▁コンプリート\",\n        -12.572226524353027\n      ],\n      [\n        \"後者\",\n        -12.572266578674316\n      ],\n      [\n        \"▁健診\",\n        -12.572309494018555\n      ],\n      [\n        \"▁難い\",\n        -12.572378158569336\n      ],\n      [\n        \"于\",\n        -12.572392463684082\n      ],\n      [\n        \"▁岡村\",\n        -12.572576522827148\n      ],\n      [\n        \"▁急死\",\n        -12.572591781616211\n      ],\n      [\n        \"▁温か\",\n        -12.572656631469727\n      ],\n      [\n        \"▁ベット\",\n        -12.572662353515625\n      ],\n      [\n        \"▁Plan\",\n        -12.572681427001953\n      ],\n      [\n        \"厄\",\n        -12.572736740112305\n      ],\n      [\n        \"鯉\",\n        -12.572736740112305\n      ],\n      [\n        \"▁大江\",\n        -12.57284927368164\n      ],\n      [\n        \"DAY\",\n        -12.572869300842285\n      ],\n      [\n        \"っちゃん\",\n        -12.572891235351562\n      ],\n      [\n        \"▁末日\",\n        -12.572920799255371\n      ],\n      [\n        \"電車\",\n        -12.5729341506958\n      ],\n      [\n        \"ジカ\",\n        -12.57295036315918\n      ],\n      [\n        \"ior\",\n        -12.572969436645508\n      ],\n      [\n        \"▁倒れた\",\n        -12.573044776916504\n      ],\n      [\n        \"▁攻防\",\n        -12.573077201843262\n      ],\n      [\n        \"▁潔\",\n        -12.573137283325195\n      ],\n      [\n        \"賓\",\n        -12.573247909545898\n      ],\n      [\n        \"▁あゆみ\",\n        -12.573418617248535\n      ],\n      [\n        \"▁reserved\",\n        -12.573588371276855\n      ],\n      [\n        \"▁全権\",\n        -12.573603630065918\n      ],\n      [\n        \"▁研磨\",\n        -12.573777198791504\n      ],\n      [\n        \"トーン\",\n        -12.573819160461426\n      ],\n      [\n        \"借金\",\n        -12.573884010314941\n      ],\n      [\n        \"▁待ち合わせ\",\n        -12.573933601379395\n      ],\n      [\n        \"▁Au\",\n        -12.574009895324707\n      ],\n      [\n        \"漬\",\n        -12.57406234741211\n      ],\n      [\n        \"▁健一\",\n        -12.574068069458008\n      ],\n      [\n        \"NH\",\n        -12.574080467224121\n      ],\n      [\n        \"保育\",\n        -12.57411003112793\n      ],\n      [\n        \"▁オーシャン\",\n        -12.574112892150879\n      ],\n      [\n        \"ZO\",\n        -12.574117660522461\n      ],\n      [\n        \"▁金具\",\n        -12.574302673339844\n      ],\n      [\n        \"▁1892\",\n        -12.57433795928955\n      ],\n      [\n        \"▁就学\",\n        -12.57441520690918\n      ],\n      [\n        \"▁目の当たり\",\n        -12.57461166381836\n      ],\n      [\n        \"▁飛び出し\",\n        -12.574633598327637\n      ],\n      [\n        \"ジャケット\",\n        -12.57475471496582\n      ],\n      [\n        \"滋\",\n        -12.574920654296875\n      ],\n      [\n        \"樫\",\n        -12.574952125549316\n      ],\n      [\n        \"▁OH\",\n        -12.575109481811523\n      ],\n      [\n        \"▁伝導\",\n        -12.575175285339355\n      ],\n      [\n        \"オット\",\n        -12.575233459472656\n      ],\n      [\n        \"伊勢\",\n        -12.575246810913086\n      ],\n      [\n        \"単に\",\n        -12.57526683807373\n      ],\n      [\n        \"▁抑圧\",\n        -12.57529354095459\n      ],\n      [\n        \"▁共済\",\n        -12.57535457611084\n      ],\n      [\n        \"NET\",\n        -12.575416564941406\n      ],\n      [\n        \"▁値引き\",\n        -12.575416564941406\n      ],\n      [\n        \"▁トバ\",\n        -12.575470924377441\n      ],\n      [\n        \"▁プロバイダ\",\n        -12.575509071350098\n      ],\n      [\n        \"▁エスト\",\n        -12.575630187988281\n      ],\n      [\n        \"▁ウィー\",\n        -12.575658798217773\n      ],\n      [\n        \"▁アトリ\",\n        -12.575695991516113\n      ],\n      [\n        \"▁いらっしゃ\",\n        -12.575753211975098\n      ],\n      [\n        \"▁アンカー\",\n        -12.575876235961914\n      ],\n      [\n        \"▁ラグーン\",\n        -12.575918197631836\n      ],\n      [\n        \"阪神\",\n        -12.576014518737793\n      ],\n      [\n        \"ホス\",\n        -12.576019287109375\n      ],\n      [\n        \"▁離陸\",\n        -12.576045036315918\n      ],\n      [\n        \"▁BT\",\n        -12.576112747192383\n      ],\n      [\n        \"▁SG\",\n        -12.57614517211914\n      ],\n      [\n        \"ゴルフ\",\n        -12.576257705688477\n      ],\n      [\n        \"ガード\",\n        -12.576274871826172\n      ],\n      [\n        \"▁筈\",\n        -12.57632827758789\n      ],\n      [\n        \"▁建材\",\n        -12.576333045959473\n      ],\n      [\n        \"▁蓄え\",\n        -12.57636833190918\n      ],\n      [\n        \"悲\",\n        -12.576438903808594\n      ],\n      [\n        \"▁フィレンツェ\",\n        -12.576488494873047\n      ],\n      [\n        \"▁外資\",\n        -12.576523780822754\n      ],\n      [\n        \"▁締めくく\",\n        -12.576836585998535\n      ],\n      [\n        \"▁忠実に\",\n        -12.576841354370117\n      ],\n      [\n        \"耐\",\n        -12.576841354370117\n      ],\n      [\n        \"ニキ\",\n        -12.576944351196289\n      ],\n      [\n        \"▁心境\",\n        -12.576953887939453\n      ],\n      [\n        \"▁賢い\",\n        -12.57713508605957\n      ],\n      [\n        \"▁筑後\",\n        -12.577173233032227\n      ],\n      [\n        \"▁非公式\",\n        -12.577188491821289\n      ],\n      [\n        \"▁アイロン\",\n        -12.577315330505371\n      ],\n      [\n        \"冥\",\n        -12.57734203338623\n      ],\n      [\n        \"▁暑く\",\n        -12.577360153198242\n      ],\n      [\n        \"▁ムン\",\n        -12.577465057373047\n      ],\n      [\n        \"▁私鉄\",\n        -12.577466011047363\n      ],\n      [\n        \"クルー\",\n        -12.577508926391602\n      ],\n      [\n        \"〒\",\n        -12.577576637268066\n      ],\n      [\n        \"ショッピング\",\n        -12.577594757080078\n      ],\n      [\n        \"▁打ち切\",\n        -12.577706336975098\n      ],\n      [\n        \"▁天草\",\n        -12.577733039855957\n      ],\n      [\n        \"山梨\",\n        -12.577739715576172\n      ],\n      [\n        \"▁そっと\",\n        -12.577858924865723\n      ],\n      [\n        \"▁誘う\",\n        -12.577902793884277\n      ],\n      [\n        \"▁放射能\",\n        -12.578042030334473\n      ],\n      [\n        \"▁八尾\",\n        -12.578042984008789\n      ],\n      [\n        \"▁採点\",\n        -12.578060150146484\n      ],\n      [\n        \"yahoo\",\n        -12.57806396484375\n      ],\n      [\n        \"開幕\",\n        -12.57806396484375\n      ],\n      [\n        \"▁従属\",\n        -12.578177452087402\n      ],\n      [\n        \"▁祭祀\",\n        -12.578234672546387\n      ],\n      [\n        \"▁相棒\",\n        -12.578292846679688\n      ],\n      [\n        \"▁属す\",\n        -12.578385353088379\n      ],\n      [\n        \"ISH\",\n        -12.578486442565918\n      ],\n      [\n        \"乞\",\n        -12.578537940979004\n      ],\n      [\n        \"詮\",\n        -12.578540802001953\n      ],\n      [\n        \"WI\",\n        -12.57857608795166\n      ],\n      [\n        \"▁その方\",\n        -12.57862377166748\n      ],\n      [\n        \"ッチャ\",\n        -12.578643798828125\n      ],\n      [\n        \"▁従った\",\n        -12.578715324401855\n      ],\n      [\n        \"▁新庄\",\n        -12.578728675842285\n      ],\n      [\n        \"▁兎\",\n        -12.578865051269531\n      ],\n      [\n        \"掛かり\",\n        -12.578871726989746\n      ],\n      [\n        \"time\",\n        -12.579156875610352\n      ],\n      [\n        \"ius\",\n        -12.579202651977539\n      ],\n      [\n        \"▁ベロ\",\n        -12.579292297363281\n      ],\n      [\n        \"▁三鷹\",\n        -12.579388618469238\n      ],\n      [\n        \"▁宜\",\n        -12.579465866088867\n      ],\n      [\n        \"ORY\",\n        -12.57949447631836\n      ],\n      [\n        \"▁或\",\n        -12.579619407653809\n      ],\n      [\n        \"▁内訳\",\n        -12.579812049865723\n      ],\n      [\n        \"▁同志\",\n        -12.579855918884277\n      ],\n      [\n        \"▁土屋\",\n        -12.579858779907227\n      ],\n      [\n        \"フロント\",\n        -12.579890251159668\n      ],\n      [\n        \"箇\",\n        -12.579910278320312\n      ],\n      [\n        \"▁痙攣\",\n        -12.579911231994629\n      ],\n      [\n        \"アルコール\",\n        -12.579933166503906\n      ],\n      [\n        \"イラスト\",\n        -12.580338478088379\n      ],\n      [\n        \"▁郭\",\n        -12.580348014831543\n      ],\n      [\n        \"瓜\",\n        -12.580425262451172\n      ],\n      [\n        \"禰\",\n        -12.580425262451172\n      ],\n      [\n        \"獲\",\n        -12.580495834350586\n      ],\n      [\n        \"▁西岸\",\n        -12.580519676208496\n      ],\n      [\n        \"▁なれた\",\n        -12.58056640625\n      ],\n      [\n        \"▁除菌\",\n        -12.58064079284668\n      ],\n      [\n        \"▁漁港\",\n        -12.580645561218262\n      ],\n      [\n        \"▁戦果\",\n        -12.5807466506958\n      ],\n      [\n        \"▁痛感\",\n        -12.580767631530762\n      ],\n      [\n        \"▁ストライキ\",\n        -12.580770492553711\n      ],\n      [\n        \"▁優雅\",\n        -12.580977439880371\n      ],\n      [\n        \"▁急便\",\n        -12.581083297729492\n      ],\n      [\n        \"▁移して\",\n        -12.58153247833252\n      ],\n      [\n        \"▁絞って\",\n        -12.581544876098633\n      ],\n      [\n        \"▁ディスカッション\",\n        -12.581626892089844\n      ],\n      [\n        \"▁預言\",\n        -12.581626892089844\n      ],\n      [\n        \"▁抱いた\",\n        -12.581806182861328\n      ],\n      [\n        \"▁鍛える\",\n        -12.581815719604492\n      ],\n      [\n        \"布団\",\n        -12.581881523132324\n      ],\n      [\n        \"▁産婦人科\",\n        -12.58197021484375\n      ],\n      [\n        \"▁辛く\",\n        -12.58203125\n      ],\n      [\n        \"伽\",\n        -12.58214282989502\n      ],\n      [\n        \"▁home\",\n        -12.582170486450195\n      ],\n      [\n        \"▁ミキ\",\n        -12.582387924194336\n      ],\n      [\n        \"▁帰れ\",\n        -12.582533836364746\n      ],\n      [\n        \"▁Char\",\n        -12.582541465759277\n      ],\n      [\n        \"福祉\",\n        -12.582611083984375\n      ],\n      [\n        \"▁大家\",\n        -12.58270263671875\n      ],\n      [\n        \"らかな\",\n        -12.582831382751465\n      ],\n      [\n        \"▁深川\",\n        -12.582929611206055\n      ],\n      [\n        \"ツイート\",\n        -12.58297061920166\n      ],\n      [\n        \"歌詞\",\n        -12.58305549621582\n      ],\n      [\n        \"▁事典\",\n        -12.58312702178955\n      ],\n      [\n        \"▁相馬\",\n        -12.58316707611084\n      ],\n      [\n        \"▁派手な\",\n        -12.58317756652832\n      ],\n      [\n        \"▁たいへん\",\n        -12.5831937789917\n      ],\n      [\n        \"▁鳴り\",\n        -12.583194732666016\n      ],\n      [\n        \"▁止めた\",\n        -12.583234786987305\n      ],\n      [\n        \"以来\",\n        -12.58354377746582\n      ],\n      [\n        \"そん\",\n        -12.583633422851562\n      ],\n      [\n        \"00\",\n        -12.583702087402344\n      ],\n      [\n        \"バトル\",\n        -12.583776473999023\n      ],\n      [\n        \"▁哲也\",\n        -12.58379077911377\n      ],\n      [\n        \"▁バドミントン\",\n        -12.583861351013184\n      ],\n      [\n        \"▁酸味\",\n        -12.583990097045898\n      ],\n      [\n        \"タッチ\",\n        -12.584146499633789\n      ],\n      [\n        \"▁夜行\",\n        -12.584157943725586\n      ],\n      [\n        \"▁出そう\",\n        -12.58418083190918\n      ],\n      [\n        \"▁UFJ\",\n        -12.584205627441406\n      ],\n      [\n        \"▁改行\",\n        -12.584296226501465\n      ],\n      [\n        \"▁染み\",\n        -12.584488868713379\n      ],\n      [\n        \"膿\",\n        -12.584550857543945\n      ],\n      [\n        \"▁カラス\",\n        -12.584551811218262\n      ],\n      [\n        \"▁チャーリー\",\n        -12.584633827209473\n      ],\n      [\n        \"温水\",\n        -12.58464241027832\n      ],\n      [\n        \"▁強行\",\n        -12.584710121154785\n      ],\n      [\n        \"▁遊んだ\",\n        -12.584739685058594\n      ],\n      [\n        \"上品な\",\n        -12.584753036499023\n      ],\n      [\n        \"ウー\",\n        -12.584809303283691\n      ],\n      [\n        \"▁見事な\",\n        -12.58481216430664\n      ],\n      [\n        \"メニュー\",\n        -12.584833145141602\n      ],\n      [\n        \"DD\",\n        -12.58499813079834\n      ],\n      [\n        \"▁バラエティー\",\n        -12.585058212280273\n      ],\n      [\n        \"探\",\n        -12.585076332092285\n      ],\n      [\n        \"ega\",\n        -12.585131645202637\n      ],\n      [\n        \"▁利害\",\n        -12.585190773010254\n      ],\n      [\n        \"あまりに\",\n        -12.585198402404785\n      ],\n      [\n        \"鞘\",\n        -12.58523941040039\n      ],\n      [\n        \"mac\",\n        -12.585251808166504\n      ],\n      [\n        \"▁欠如\",\n        -12.585434913635254\n      ],\n      [\n        \"▁フランシスコ\",\n        -12.585508346557617\n      ],\n      [\n        \"拭\",\n        -12.585570335388184\n      ],\n      [\n        \"▁反逆\",\n        -12.585681915283203\n      ],\n      [\n        \"▁微妙に\",\n        -12.585854530334473\n      ],\n      [\n        \"▁心筋\",\n        -12.58590030670166\n      ],\n      [\n        \"煮\",\n        -12.585901260375977\n      ],\n      [\n        \"▁±\",\n        -12.586081504821777\n      ],\n      [\n        \"▁業態\",\n        -12.586174011230469\n      ],\n      [\n        \"ゅー\",\n        -12.586175918579102\n      ],\n      [\n        \"▁好感\",\n        -12.586225509643555\n      ],\n      [\n        \"▁フレームワーク\",\n        -12.586228370666504\n      ],\n      [\n        \"基礎\",\n        -12.586235046386719\n      ],\n      [\n        \"▁降りる\",\n        -12.586237907409668\n      ],\n      [\n        \"▁パラダイス\",\n        -12.586446762084961\n      ],\n      [\n        \"ノウ\",\n        -12.586520195007324\n      ],\n      [\n        \"▁末裔\",\n        -12.586523056030273\n      ],\n      [\n        \"▁さっそく\",\n        -12.586630821228027\n      ],\n      [\n        \"shin\",\n        -12.586655616760254\n      ],\n      [\n        \"俳優\",\n        -12.586763381958008\n      ],\n      [\n        \"▁Gra\",\n        -12.586782455444336\n      ],\n      [\n        \"▁声楽\",\n        -12.586819648742676\n      ],\n      [\n        \"せき\",\n        -12.586874961853027\n      ],\n      [\n        \"▁終末\",\n        -12.587075233459473\n      ],\n      [\n        \"▁枚方\",\n        -12.587096214294434\n      ],\n      [\n        \"▁1860\",\n        -12.587190628051758\n      ],\n      [\n        \"▁ศ\",\n        -12.587214469909668\n      ],\n      [\n        \"▁松坂\",\n        -12.587334632873535\n      ],\n      [\n        \"境内\",\n        -12.58735179901123\n      ],\n      [\n        \"▁書き下ろし\",\n        -12.58736801147461\n      ],\n      [\n        \"驚\",\n        -12.58745288848877\n      ],\n      [\n        \"▁樺太\",\n        -12.587482452392578\n      ],\n      [\n        \"▁明言\",\n        -12.587512016296387\n      ],\n      [\n        \"▁引き継いで\",\n        -12.58768081665039\n      ],\n      [\n        \"▁社殿\",\n        -12.587700843811035\n      ],\n      [\n        \"◇\",\n        -12.587801933288574\n      ],\n      [\n        \"詔\",\n        -12.587827682495117\n      ],\n      [\n        \"▁American\",\n        -12.588001251220703\n      ],\n      [\n        \"▁十八\",\n        -12.588098526000977\n      ],\n      [\n        \"▁Off\",\n        -12.588125228881836\n      ],\n      [\n        \"▁壮大な\",\n        -12.588178634643555\n      ],\n      [\n        \"泳ぎ\",\n        -12.588194847106934\n      ],\n      [\n        \"▁アルル\",\n        -12.58820915222168\n      ],\n      [\n        \"畳\",\n        -12.588323593139648\n      ],\n      [\n        \"erson\",\n        -12.588440895080566\n      ],\n      [\n        \"▁難しかった\",\n        -12.588493347167969\n      ],\n      [\n        \"▁召し上がり\",\n        -12.588528633117676\n      ],\n      [\n        \"▁担い\",\n        -12.588582992553711\n      ],\n      [\n        \"▁CHA\",\n        -12.588664054870605\n      ],\n      [\n        \"▁競う\",\n        -12.588689804077148\n      ],\n      [\n        \"▁替わり\",\n        -12.588711738586426\n      ],\n      [\n        \"錠\",\n        -12.588860511779785\n      ],\n      [\n        \"脚本\",\n        -12.58889389038086\n      ],\n      [\n        \"▁詩集\",\n        -12.588942527770996\n      ],\n      [\n        \"▁クリーナー\",\n        -12.588973045349121\n      ],\n      [\n        \"男女\",\n        -12.589118003845215\n      ],\n      [\n        \"廊\",\n        -12.589138984680176\n      ],\n      [\n        \"▁スパルタ\",\n        -12.589229583740234\n      ],\n      [\n        \"MF\",\n        -12.589380264282227\n      ],\n      [\n        \"▁当然です\",\n        -12.58940601348877\n      ],\n      [\n        \"献\",\n        -12.589461326599121\n      ],\n      [\n        \"触り\",\n        -12.58946418762207\n      ],\n      [\n        \"▁正直に\",\n        -12.58955192565918\n      ],\n      [\n        \"▁セラピー\",\n        -12.589609146118164\n      ],\n      [\n        \"tage\",\n        -12.589635848999023\n      ],\n      [\n        \"NF\",\n        -12.589695930480957\n      ],\n      [\n        \"▁越谷\",\n        -12.589695930480957\n      ],\n      [\n        \"▁辞める\",\n        -12.58979606628418\n      ],\n      [\n        \"拙\",\n        -12.589903831481934\n      ],\n      [\n        \"▁ハッキリ\",\n        -12.589912414550781\n      ],\n      [\n        \"uni\",\n        -12.58993148803711\n      ],\n      [\n        \"▁アラスカ\",\n        -12.589943885803223\n      ],\n      [\n        \"rand\",\n        -12.589982986450195\n      ],\n      [\n        \"▁法規\",\n        -12.590018272399902\n      ],\n      [\n        \"▁確かめる\",\n        -12.590086936950684\n      ],\n      [\n        \"ener\",\n        -12.590145111083984\n      ],\n      [\n        \"▁下降\",\n        -12.590252876281738\n      ],\n      [\n        \"Me\",\n        -12.590354919433594\n      ],\n      [\n        \"▁描画\",\n        -12.590422630310059\n      ],\n      [\n        \"▁満洲\",\n        -12.590583801269531\n      ],\n      [\n        \"ヽ\",\n        -12.590596199035645\n      ],\n      [\n        \"▁愚痴\",\n        -12.590600967407227\n      ],\n      [\n        \"▁壁面\",\n        -12.590621948242188\n      ],\n      [\n        \"ju\",\n        -12.59069538116455\n      ],\n      [\n        \"▁ウィズ\",\n        -12.590726852416992\n      ],\n      [\n        \"鐵\",\n        -12.590768814086914\n      ],\n      [\n        \"▁囚人\",\n        -12.590771675109863\n      ],\n      [\n        \"▁支えた\",\n        -12.590827941894531\n      ],\n      [\n        \"▁東郷\",\n        -12.590903282165527\n      ],\n      [\n        \"▁短歌\",\n        -12.590958595275879\n      ],\n      [\n        \"▁的でした\",\n        -12.591047286987305\n      ],\n      [\n        \"▁霜\",\n        -12.591079711914062\n      ],\n      [\n        \"ライザー\",\n        -12.591146469116211\n      ],\n      [\n        \"▁あきら\",\n        -12.59115219116211\n      ],\n      [\n        \"▁ミラン\",\n        -12.59119987487793\n      ],\n      [\n        \"▁トークン\",\n        -12.591230392456055\n      ],\n      [\n        \"▁ペレ\",\n        -12.5912504196167\n      ],\n      [\n        \"▁グアム\",\n        -12.591275215148926\n      ],\n      [\n        \"▁血行\",\n        -12.591277122497559\n      ],\n      [\n        \"▁乗せた\",\n        -12.591370582580566\n      ],\n      [\n        \"▁高めた\",\n        -12.591593742370605\n      ],\n      [\n        \"▁月給\",\n        -12.591779708862305\n      ],\n      [\n        \"▁弄\",\n        -12.59191608428955\n      ],\n      [\n        \"lia\",\n        -12.591939926147461\n      ],\n      [\n        \"▁EMI\",\n        -12.591985702514648\n      ],\n      [\n        \"▁んだろ\",\n        -12.592061042785645\n      ],\n      [\n        \"藤原\",\n        -12.59209156036377\n      ],\n      [\n        \"load\",\n        -12.592092514038086\n      ],\n      [\n        \"まさか\",\n        -12.592151641845703\n      ],\n      [\n        \"TION\",\n        -12.59232234954834\n      ],\n      [\n        \"GF\",\n        -12.592323303222656\n      ],\n      [\n        \"▁引っかか\",\n        -12.59233570098877\n      ],\n      [\n        \"▁立ち上げる\",\n        -12.592364311218262\n      ],\n      [\n        \"▁准\",\n        -12.592402458190918\n      ],\n      [\n        \"▁フェルト\",\n        -12.59244441986084\n      ],\n      [\n        \"睦\",\n        -12.59268569946289\n      ],\n      [\n        \"iff\",\n        -12.592690467834473\n      ],\n      [\n        \"▁アドルフ\",\n        -12.592694282531738\n      ],\n      [\n        \"▁サムライ\",\n        -12.593045234680176\n      ],\n      [\n        \"vid\",\n        -12.593096733093262\n      ],\n      [\n        \"▁つもりだった\",\n        -12.59313678741455\n      ],\n      [\n        \"究\",\n        -12.593164443969727\n      ],\n      [\n        \"肝\",\n        -12.593207359313965\n      ],\n      [\n        \"▁公判\",\n        -12.593208312988281\n      ],\n      [\n        \"▁一変\",\n        -12.593308448791504\n      ],\n      [\n        \"▁温室\",\n        -12.593426704406738\n      ],\n      [\n        \"▁ロビン\",\n        -12.593490600585938\n      ],\n      [\n        \"▁ザガーロ\",\n        -12.59361457824707\n      ],\n      [\n        \"(__)\",\n        -12.593720436096191\n      ],\n      [\n        \"▁佐久\",\n        -12.593774795532227\n      ],\n      [\n        \"▁大洋\",\n        -12.5938720703125\n      ],\n      [\n        \"▁感触\",\n        -12.593907356262207\n      ],\n      [\n        \"▁リリーフ\",\n        -12.593994140625\n      ],\n      [\n        \"▁スロベニア\",\n        -12.594067573547363\n      ],\n      [\n        \"奢\",\n        -12.594067573547363\n      ],\n      [\n        \"▁帽\",\n        -12.594141006469727\n      ],\n      [\n        \"▁刀剣\",\n        -12.594283103942871\n      ],\n      [\n        \"▁気付く\",\n        -12.594407081604004\n      ],\n      [\n        \"▁とことん\",\n        -12.594422340393066\n      ],\n      [\n        \"▁先物\",\n        -12.594422340393066\n      ],\n      [\n        \"▁良質な\",\n        -12.594590187072754\n      ],\n      [\n        \"▁呼び名\",\n        -12.594701766967773\n      ],\n      [\n        \"▁鉄鋼\",\n        -12.594846725463867\n      ],\n      [\n        \"▁発案\",\n        -12.595090866088867\n      ],\n      [\n        \"▁鞭\",\n        -12.595222473144531\n      ],\n      [\n        \"▁たかし\",\n        -12.595243453979492\n      ],\n      [\n        \"▁352\",\n        -12.595386505126953\n      ],\n      [\n        \"▁改題\",\n        -12.595386505126953\n      ],\n      [\n        \"聯\",\n        -12.595459938049316\n      ],\n      [\n        \"へい\",\n        -12.595532417297363\n      ],\n      [\n        \"▁ミクロ\",\n        -12.595638275146484\n      ],\n      [\n        \"暇\",\n        -12.595687866210938\n      ],\n      [\n        \"▁加茂\",\n        -12.595731735229492\n      ],\n      [\n        \"face\",\n        -12.595747947692871\n      ],\n      [\n        \"ments\",\n        -12.595787048339844\n      ],\n      [\n        \"終戦\",\n        -12.595830917358398\n      ],\n      [\n        \"▁ジャングル\",\n        -12.595968246459961\n      ],\n      [\n        \"―\",\n        -12.595978736877441\n      ],\n      [\n        \"▁思い切って\",\n        -12.595980644226074\n      ],\n      [\n        \"▁精進\",\n        -12.596012115478516\n      ],\n      [\n        \"▁SSD\",\n        -12.596115112304688\n      ],\n      [\n        \"▁たまり\",\n        -12.596141815185547\n      ],\n      [\n        \"袁\",\n        -12.596156120300293\n      ],\n      [\n        \"▁mail\",\n        -12.596171379089355\n      ],\n      [\n        \"EGA\",\n        -12.59618091583252\n      ],\n      [\n        \"▁192\",\n        -12.596206665039062\n      ],\n      [\n        \"▁Update\",\n        -12.596318244934082\n      ],\n      [\n        \"▁仏像\",\n        -12.596375465393066\n      ],\n      [\n        \"▁負って\",\n        -12.596400260925293\n      ],\n      [\n        \"▁Business\",\n        -12.596505165100098\n      ],\n      [\n        \"▁サバイバル\",\n        -12.596505165100098\n      ],\n      [\n        \"▁四角\",\n        -12.596846580505371\n      ],\n      [\n        \"▁脊髄\",\n        -12.596853256225586\n      ],\n      [\n        \"▁遺品\",\n        -12.5968599319458\n      ],\n      [\n        \"▁造語\",\n        -12.596928596496582\n      ],\n      [\n        \"▁リダイレクト\",\n        -12.597027778625488\n      ],\n      [\n        \"救\",\n        -12.597084045410156\n      ],\n      [\n        \"LAN\",\n        -12.59715461730957\n      ],\n      [\n        \"▁バイキング\",\n        -12.597163200378418\n      ],\n      [\n        \"▁掛かり\",\n        -12.597179412841797\n      ],\n      [\n        \"▁給油\",\n        -12.59725570678711\n      ],\n      [\n        \"▁強姦\",\n        -12.5972900390625\n      ],\n      [\n        \"丼\",\n        -12.597294807434082\n      ],\n      [\n        \"恨\",\n        -12.597333908081055\n      ],\n      [\n        \"▁ブレード\",\n        -12.59737491607666\n      ],\n      [\n        \"呟\",\n        -12.597375869750977\n      ],\n      [\n        \"▁汽船\",\n        -12.597376823425293\n      ],\n      [\n        \"▁ウィング\",\n        -12.597396850585938\n      ],\n      [\n        \"▁完走\",\n        -12.597456932067871\n      ],\n      [\n        \"OX\",\n        -12.597468376159668\n      ],\n      [\n        \"▁1887\",\n        -12.597500801086426\n      ],\n      [\n        \"cha\",\n        -12.597511291503906\n      ],\n      [\n        \"▁こだわる\",\n        -12.597513198852539\n      ],\n      [\n        \"▁豊中\",\n        -12.597532272338867\n      ],\n      [\n        \"▁含\",\n        -12.597667694091797\n      ],\n      [\n        \"▁fo\",\n        -12.5977144241333\n      ],\n      [\n        \"皆\",\n        -12.597715377807617\n      ],\n      [\n        \"▁引き渡\",\n        -12.597784996032715\n      ],\n      [\n        \"牢\",\n        -12.597887992858887\n      ],\n      [\n        \"▁colo\",\n        -12.597901344299316\n      ],\n      [\n        \"諜報\",\n        -12.597904205322266\n      ],\n      [\n        \"▁貰った\",\n        -12.597923278808594\n      ],\n      [\n        \"ふく\",\n        -12.598007202148438\n      ],\n      [\n        \"直接\",\n        -12.598063468933105\n      ],\n      [\n        \"▁廻り\",\n        -12.598094940185547\n      ],\n      [\n        \"▁授賞\",\n        -12.598249435424805\n      ],\n      [\n        \"▁透過\",\n        -12.598270416259766\n      ],\n      [\n        \"▁CBS\",\n        -12.598541259765625\n      ],\n      [\n        \"▁炭水化物\",\n        -12.59859848022461\n      ],\n      [\n        \"▁広州\",\n        -12.598747253417969\n      ],\n      [\n        \"LR\",\n        -12.598779678344727\n      ],\n      [\n        \"▁参列\",\n        -12.598833084106445\n      ],\n      [\n        \"艇\",\n        -12.598915100097656\n      ],\n      [\n        \"▁担った\",\n        -12.598953247070312\n      ],\n      [\n        \"▁民兵\",\n        -12.59897518157959\n      ],\n      [\n        \"mura\",\n        -12.599016189575195\n      ],\n      [\n        \"ライダー\",\n        -12.59913444519043\n      ],\n      [\n        \"▁掌\",\n        -12.599278450012207\n      ],\n      [\n        \"▁整合\",\n        -12.599303245544434\n      ],\n      [\n        \"bra\",\n        -12.599329948425293\n      ],\n      [\n        \"▁ポッド\",\n        -12.599390983581543\n      ],\n      [\n        \"ミィ\",\n        -12.599466323852539\n      ],\n      [\n        \"▁主砲\",\n        -12.599503517150879\n      ],\n      [\n        \"uri\",\n        -12.599578857421875\n      ],\n      [\n        \"ッピ\",\n        -12.599625587463379\n      ],\n      [\n        \"▁安堵\",\n        -12.60000228881836\n      ],\n      [\n        \"▁ニュートン\",\n        -12.600013732910156\n      ],\n      [\n        \"▁思いやり\",\n        -12.600027084350586\n      ],\n      [\n        \"▁ディビジョン\",\n        -12.600056648254395\n      ],\n      [\n        \"▁掘り下げ\",\n        -12.600190162658691\n      ],\n      [\n        \"▁寝た\",\n        -12.60022258758545\n      ],\n      [\n        \"can\",\n        -12.600269317626953\n      ],\n      [\n        \"▁Special\",\n        -12.600318908691406\n      ],\n      [\n        \"▁モスク\",\n        -12.600323677062988\n      ],\n      [\n        \"▁宿題\",\n        -12.600499153137207\n      ],\n      [\n        \"▁尋ねる\",\n        -12.600500106811523\n      ],\n      [\n        \"▁休む\",\n        -12.600557327270508\n      ],\n      [\n        \"▁クック\",\n        -12.600573539733887\n      ],\n      [\n        \"▁ベンダー\",\n        -12.60063648223877\n      ],\n      [\n        \"▁皮脂\",\n        -12.600719451904297\n      ],\n      [\n        \"▁広義\",\n        -12.60073471069336\n      ],\n      [\n        \"▁イーグルス\",\n        -12.600749015808105\n      ],\n      [\n        \"▁Color\",\n        -12.60085678100586\n      ],\n      [\n        \"▁ウーマン\",\n        -12.60086441040039\n      ],\n      [\n        \"▁オペレーション\",\n        -12.600872039794922\n      ],\n      [\n        \"▁Salesforce\",\n        -12.601046562194824\n      ],\n      [\n        \"IMA\",\n        -12.601120948791504\n      ],\n      [\n        \"▁トール\",\n        -12.601143836975098\n      ],\n      [\n        \"▁フィッシング\",\n        -12.601282119750977\n      ],\n      [\n        \"▁GAME\",\n        -12.601755142211914\n      ],\n      [\n        \"OY\",\n        -12.601879119873047\n      ],\n      [\n        \"▁Acrobat\",\n        -12.601922035217285\n      ],\n      [\n        \"▁頭脳\",\n        -12.601924896240234\n      ],\n      [\n        \"未来\",\n        -12.601951599121094\n      ],\n      [\n        \"瑞\",\n        -12.602005958557129\n      ],\n      [\n        \"▁棘\",\n        -12.602025032043457\n      ],\n      [\n        \"▁ポートフォリオ\",\n        -12.602097511291504\n      ],\n      [\n        \"▁スティーブ\",\n        -12.602243423461914\n      ],\n      [\n        \"▁アークティック\",\n        -12.602302551269531\n      ],\n      [\n        \"岩手\",\n        -12.602346420288086\n      ],\n      [\n        \"松山\",\n        -12.602435111999512\n      ],\n      [\n        \"▁ディフェンダー\",\n        -12.602448463439941\n      ],\n      [\n        \"詣\",\n        -12.602581024169922\n      ],\n      [\n        \"▁倣\",\n        -12.602684020996094\n      ],\n      [\n        \"▁親指\",\n        -12.602710723876953\n      ],\n      [\n        \"▁近縁\",\n        -12.60272216796875\n      ],\n      [\n        \"TSU\",\n        -12.602747917175293\n      ],\n      [\n        \"▁つまらない\",\n        -12.602799415588379\n      ],\n      [\n        \"▁筑紫\",\n        -12.602799415588379\n      ],\n      [\n        \"ガラス\",\n        -12.602813720703125\n      ],\n      [\n        \"▁わら\",\n        -12.602895736694336\n      ],\n      [\n        \"lab\",\n        -12.602961540222168\n      ],\n      [\n        \"尹\",\n        -12.602974891662598\n      ],\n      [\n        \"▁複素\",\n        -12.60302734375\n      ],\n      [\n        \"なんだか\",\n        -12.603092193603516\n      ],\n      [\n        \"▁Foundation\",\n        -12.603150367736816\n      ],\n      [\n        \"▁磨く\",\n        -12.603365898132324\n      ],\n      [\n        \"こん\",\n        -12.603484153747559\n      ],\n      [\n        \"▁有益な\",\n        -12.603537559509277\n      ],\n      [\n        \"BT\",\n        -12.60356616973877\n      ],\n      [\n        \"▁結集\",\n        -12.603759765625\n      ],\n      [\n        \"ゃく\",\n        -12.603842735290527\n      ],\n      [\n        \"▁間違えて\",\n        -12.60384750366211\n      ],\n      [\n        \"▁征伐\",\n        -12.603859901428223\n      ],\n      [\n        \"▁小銃\",\n        -12.60407543182373\n      ],\n      [\n        \"▁WHO\",\n        -12.604081153869629\n      ],\n      [\n        \"▁増刊\",\n        -12.604096412658691\n      ],\n      [\n        \"▁倒さ\",\n        -12.604156494140625\n      ],\n      [\n        \"▁レバノン\",\n        -12.604203224182129\n      ],\n      [\n        \"▁躍進\",\n        -12.604204177856445\n      ],\n      [\n        \"▁在留\",\n        -12.604230880737305\n      ],\n      [\n        \"施\",\n        -12.604244232177734\n      ],\n      [\n        \"▁パトリック\",\n        -12.604379653930664\n      ],\n      [\n        \"▁ご挨拶\",\n        -12.604554176330566\n      ],\n      [\n        \"▁ストー\",\n        -12.604584693908691\n      ],\n      [\n        \"▁漁師\",\n        -12.604644775390625\n      ],\n      [\n        \"▁崩御\",\n        -12.604766845703125\n      ],\n      [\n        \"▁BAR\",\n        -12.604780197143555\n      ],\n      [\n        \"▁投げて\",\n        -12.604949951171875\n      ],\n      [\n        \"▁暗示\",\n        -12.604971885681152\n      ],\n      [\n        \"▁丸い\",\n        -12.605047225952148\n      ],\n      [\n        \"▁コップ\",\n        -12.605161666870117\n      ],\n      [\n        \"▁開架\",\n        -12.605172157287598\n      ],\n      [\n        \"マリン\",\n        -12.60533618927002\n      ],\n      [\n        \"▁従わ\",\n        -12.605403900146484\n      ],\n      [\n        \"▁ベートーヴェン\",\n        -12.605433464050293\n      ],\n      [\n        \"▁ホイヤー\",\n        -12.605477333068848\n      ],\n      [\n        \"▁くすり\",\n        -12.605485916137695\n      ],\n      [\n        \"▁オロ\",\n        -12.605517387390137\n      ],\n      [\n        \"▁差し上げ\",\n        -12.60554313659668\n      ],\n      [\n        \"遍\",\n        -12.60560417175293\n      ],\n      [\n        \"▁選帝侯\",\n        -12.605608940124512\n      ],\n      [\n        \"▁BP\",\n        -12.605626106262207\n      ],\n      [\n        \"▁set\",\n        -12.605693817138672\n      ],\n      [\n        \"▁踏み込\",\n        -12.60583782196045\n      ],\n      [\n        \"▁欠席\",\n        -12.605860710144043\n      ],\n      [\n        \"▁ポップス\",\n        -12.605931282043457\n      ],\n      [\n        \"▁指先\",\n        -12.605952262878418\n      ],\n      [\n        \"▁製剤\",\n        -12.605969429016113\n      ],\n      [\n        \"ヒュー\",\n        -12.606086730957031\n      ],\n      [\n        \"▁伸縮\",\n        -12.606155395507812\n      ],\n      [\n        \"▁動的\",\n        -12.606648445129395\n      ],\n      [\n        \"▁祀る\",\n        -12.606842041015625\n      ],\n      [\n        \"put\",\n        -12.606952667236328\n      ],\n      [\n        \"▁ツヤ\",\n        -12.607000350952148\n      ],\n      [\n        \"▁Global\",\n        -12.607129096984863\n      ],\n      [\n        \"大和\",\n        -12.607179641723633\n      ],\n      [\n        \"錯\",\n        -12.607182502746582\n      ],\n      [\n        \"▁たけし\",\n        -12.60722541809082\n      ],\n      [\n        \"▁作法\",\n        -12.607366561889648\n      ],\n      [\n        \"付く\",\n        -12.607632637023926\n      ],\n      [\n        \"▁宇部\",\n        -12.607660293579102\n      ],\n      [\n        \"涙\",\n        -12.607680320739746\n      ],\n      [\n        \"▁施し\",\n        -12.607686996459961\n      ],\n      [\n        \"▁ブックス\",\n        -12.607755661010742\n      ],\n      [\n        \"▁書体\",\n        -12.607990264892578\n      ],\n      [\n        \"スカイ\",\n        -12.608007431030273\n      ],\n      [\n        \"▁マルク\",\n        -12.608085632324219\n      ],\n      [\n        \"▁兼用\",\n        -12.608158111572266\n      ],\n      [\n        \"ship\",\n        -12.608193397521973\n      ],\n      [\n        \"▁Shi\",\n        -12.608278274536133\n      ],\n      [\n        \"▁ナシ\",\n        -12.608281135559082\n      ],\n      [\n        \"▁サロ\",\n        -12.608291625976562\n      ],\n      [\n        \"▁William\",\n        -12.608427047729492\n      ],\n      [\n        \"゜\",\n        -12.608427047729492\n      ],\n      [\n        \"▁キレ\",\n        -12.608464241027832\n      ],\n      [\n        \"▁天津\",\n        -12.608485221862793\n      ],\n      [\n        \"▁大西\",\n        -12.608664512634277\n      ],\n      [\n        \"拝\",\n        -12.608671188354492\n      ],\n      [\n        \"勉強\",\n        -12.608774185180664\n      ],\n      [\n        \"▁譚\",\n        -12.609001159667969\n      ],\n      [\n        \"▁刻印\",\n        -12.60901927947998\n      ],\n      [\n        \"Ma\",\n        -12.609084129333496\n      ],\n      [\n        \"▁及んで\",\n        -12.609102249145508\n      ],\n      [\n        \"▁加減\",\n        -12.609188079833984\n      ],\n      [\n        \"▁いまだ\",\n        -12.609206199645996\n      ],\n      [\n        \"gy\",\n        -12.609214782714844\n      ],\n      [\n        \"▁ゆず\",\n        -12.609214782714844\n      ],\n      [\n        \"▁Cisco\",\n        -12.609310150146484\n      ],\n      [\n        \"▁どうにも\",\n        -12.609370231628418\n      ],\n      [\n        \"▁オウ\",\n        -12.609426498413086\n      ],\n      [\n        \"▁細長い\",\n        -12.609517097473145\n      ],\n      [\n        \"掘\",\n        -12.609548568725586\n      ],\n      [\n        \"▁休刊\",\n        -12.609561920166016\n      ],\n      [\n        \"佑\",\n        -12.60964298248291\n      ],\n      [\n        \"DEN\",\n        -12.60981559753418\n      ],\n      [\n        \"▁前部\",\n        -12.609825134277344\n      ],\n      [\n        \"▁瀬戸内\",\n        -12.609903335571289\n      ],\n      [\n        \"VR\",\n        -12.609920501708984\n      ],\n      [\n        \"▁宰相\",\n        -12.610015869140625\n      ],\n      [\n        \"▁落ち着か\",\n        -12.610015869140625\n      ],\n      [\n        \"▁チューニング\",\n        -12.610069274902344\n      ],\n      [\n        \"▁飲め\",\n        -12.61008358001709\n      ],\n      [\n        \"▁リーチ\",\n        -12.610105514526367\n      ],\n      [\n        \"▁同情\",\n        -12.610175132751465\n      ],\n      [\n        \"▁積む\",\n        -12.61017894744873\n      ],\n      [\n        \"ray\",\n        -12.610289573669434\n      ],\n      [\n        \"▁発進\",\n        -12.610483169555664\n      ],\n      [\n        \"▁Developer\",\n        -12.610546112060547\n      ],\n      [\n        \"テュー\",\n        -12.61056900024414\n      ],\n      [\n        \"▁産学\",\n        -12.61070728302002\n      ],\n      [\n        \"▁折りたたみ\",\n        -12.610723495483398\n      ],\n      [\n        \"▁ホールド\",\n        -12.61074447631836\n      ],\n      [\n        \"勤務\",\n        -12.610809326171875\n      ],\n      [\n        \"▁火葬\",\n        -12.610917091369629\n      ],\n      [\n        \"▁励み\",\n        -12.611078262329102\n      ],\n      [\n        \"▁的確に\",\n        -12.611078262329102\n      ],\n      [\n        \"▁抜けた\",\n        -12.611223220825195\n      ],\n      [\n        \"▁アスレチック\",\n        -12.61125373840332\n      ],\n      [\n        \"▁ハンドボール\",\n        -12.61133098602295\n      ],\n      [\n        \"▁放って\",\n        -12.611454963684082\n      ],\n      [\n        \"▁ハーレム\",\n        -12.611509323120117\n      ],\n      [\n        \"▁商学\",\n        -12.611570358276367\n      ],\n      [\n        \"ORE\",\n        -12.611631393432617\n      ],\n      [\n        \"▁BLUE\",\n        -12.611639976501465\n      ],\n      [\n        \"▁風潮\",\n        -12.611717224121094\n      ],\n      [\n        \"▁マウ\",\n        -12.611777305603027\n      ],\n      [\n        \"▁畜産\",\n        -12.611784934997559\n      ],\n      [\n        \"▁泣く\",\n        -12.611788749694824\n      ],\n      [\n        \"▁Xperia\",\n        -12.611961364746094\n      ],\n      [\n        \"ガガミラノ\",\n        -12.611961364746094\n      ],\n      [\n        \"▁ポジティブ\",\n        -12.612038612365723\n      ],\n      [\n        \"ough\",\n        -12.612255096435547\n      ],\n      [\n        \"▁閉館\",\n        -12.612447738647461\n      ],\n      [\n        \"ダーズ\",\n        -12.612521171569824\n      ],\n      [\n        \"▁インタフェース\",\n        -12.612669944763184\n      ],\n      [\n        \"▁鳩\",\n        -12.612685203552246\n      ],\n      [\n        \"ula\",\n        -12.612687110900879\n      ],\n      [\n        \"GL\",\n        -12.612703323364258\n      ],\n      [\n        \"▁捨てた\",\n        -12.612923622131348\n      ],\n      [\n        \"▁仇\",\n        -12.6129789352417\n      ],\n      [\n        \"▁きつい\",\n        -12.613078117370605\n      ],\n      [\n        \"▁最高に\",\n        -12.613080024719238\n      ],\n      [\n        \"撮\",\n        -12.613089561462402\n      ],\n      [\n        \"▁戴冠\",\n        -12.613201141357422\n      ],\n      [\n        \"TON\",\n        -12.613225936889648\n      ],\n      [\n        \"▁明和\",\n        -12.613249778747559\n      ],\n      [\n        \"▁一味\",\n        -12.613302230834961\n      ],\n      [\n        \"▁シュル\",\n        -12.613325119018555\n      ],\n      [\n        \"鮎\",\n        -12.613378524780273\n      ],\n      [\n        \"▁摂る\",\n        -12.613571166992188\n      ],\n      [\n        \"▁迅速な\",\n        -12.613723754882812\n      ],\n      [\n        \"▁小麦粉\",\n        -12.613750457763672\n      ],\n      [\n        \"莉\",\n        -12.613950729370117\n      ],\n      [\n        \"ona\",\n        -12.614060401916504\n      ],\n      [\n        \"色々\",\n        -12.614063262939453\n      ],\n      [\n        \"恐\",\n        -12.614102363586426\n      ],\n      [\n        \"cre\",\n        -12.614105224609375\n      ],\n      [\n        \"▁♥\",\n        -12.614120483398438\n      ],\n      [\n        \"▁純粋\",\n        -12.614269256591797\n      ],\n      [\n        \"▁晋三\",\n        -12.614317893981934\n      ],\n      [\n        \"▁均等\",\n        -12.614465713500977\n      ],\n      [\n        \"▁資質\",\n        -12.614516258239746\n      ],\n      [\n        \"▁カーネル\",\n        -12.614619255065918\n      ],\n      [\n        \"▁佐竹\",\n        -12.614724159240723\n      ],\n      [\n        \"▁思惑\",\n        -12.614839553833008\n      ],\n      [\n        \"ナーズ\",\n        -12.614952087402344\n      ],\n      [\n        \"▁出羽\",\n        -12.614968299865723\n      ],\n      [\n        \"▁有名で\",\n        -12.61501407623291\n      ],\n      [\n        \"▁調剤\",\n        -12.61507511138916\n      ],\n      [\n        \"▁老後\",\n        -12.615253448486328\n      ],\n      [\n        \"▁プロパティ\",\n        -12.61534595489502\n      ],\n      [\n        \"▁キングス\",\n        -12.615352630615234\n      ],\n      [\n        \"▁けども\",\n        -12.6154146194458\n      ],\n      [\n        \"gn\",\n        -12.61545467376709\n      ],\n      [\n        \"▁コースト\",\n        -12.615503311157227\n      ],\n      [\n        \"▁簡潔\",\n        -12.615508079528809\n      ],\n      [\n        \"▁土浦\",\n        -12.615533828735352\n      ],\n      [\n        \"▁勝ち越し\",\n        -12.615609169006348\n      ],\n      [\n        \"ファル\",\n        -12.615884780883789\n      ],\n      [\n        \"▁実例\",\n        -12.615887641906738\n      ],\n      [\n        \"▁携わり\",\n        -12.616068840026855\n      ],\n      [\n        \"bon\",\n        -12.616227149963379\n      ],\n      [\n        \"▁生計\",\n        -12.616280555725098\n      ],\n      [\n        \"▁押さえて\",\n        -12.616579055786133\n      ],\n      [\n        \"▁レイバン\",\n        -12.616662979125977\n      ],\n      [\n        \"盧\",\n        -12.616752624511719\n      ],\n      [\n        \"▁オールナイト\",\n        -12.616861343383789\n      ],\n      [\n        \"▁ブリュ\",\n        -12.616910934448242\n      ],\n      [\n        \"ツェン\",\n        -12.616938591003418\n      ],\n      [\n        \"灘\",\n        -12.616969108581543\n      ],\n      [\n        \"▁たっぷりの\",\n        -12.617085456848145\n      ],\n      [\n        \"▁国債\",\n        -12.617263793945312\n      ],\n      [\n        \"▁拭き\",\n        -12.617287635803223\n      ],\n      [\n        \"▁うわ\",\n        -12.617365837097168\n      ],\n      [\n        \"▁アンドロイド\",\n        -12.61738109588623\n      ],\n      [\n        \"▁内包\",\n        -12.617385864257812\n      ],\n      [\n        \"亚\",\n        -12.617819786071777\n      ],\n      [\n        \"▁エヴァン\",\n        -12.617835998535156\n      ],\n      [\n        \"▁代打\",\n        -12.617938041687012\n      ],\n      [\n        \"▁商学部\",\n        -12.617948532104492\n      ],\n      [\n        \"迅\",\n        -12.617997169494629\n      ],\n      [\n        \"▁下がった\",\n        -12.61800765991211\n      ],\n      [\n        \"lum\",\n        -12.618173599243164\n      ],\n      [\n        \"▁治水\",\n        -12.618221282958984\n      ],\n      [\n        \"素敵な\",\n        -12.618221282958984\n      ],\n      [\n        \"▁楼\",\n        -12.618294715881348\n      ],\n      [\n        \"▁抹茶\",\n        -12.618353843688965\n      ],\n      [\n        \"▁曇り\",\n        -12.61836051940918\n      ],\n      [\n        \"ホイ\",\n        -12.618496894836426\n      ],\n      [\n        \"iel\",\n        -12.618561744689941\n      ],\n      [\n        \"▁戻して\",\n        -12.618617057800293\n      ],\n      [\n        \"▁繋が\",\n        -12.618645668029785\n      ],\n      [\n        \"▁繋がった\",\n        -12.618680000305176\n      ],\n      [\n        \"▁定食\",\n        -12.618807792663574\n      ],\n      [\n        \"▁悪質な\",\n        -12.618844985961914\n      ],\n      [\n        \"▁結びつき\",\n        -12.618885040283203\n      ],\n      [\n        \"▁きっちり\",\n        -12.61889362335205\n      ],\n      [\n        \"近頃\",\n        -12.618988990783691\n      ],\n      [\n        \"サイン\",\n        -12.619036674499512\n      ],\n      [\n        \"▁よろしい\",\n        -12.619109153747559\n      ],\n      [\n        \"ストーン\",\n        -12.619129180908203\n      ],\n      [\n        \"▁別れて\",\n        -12.619172096252441\n      ],\n      [\n        \"▁藤本\",\n        -12.619366645812988\n      ],\n      [\n        \"▁ボイラー\",\n        -12.619393348693848\n      ],\n      [\n        \"▁ジェラール\",\n        -12.619460105895996\n      ],\n      [\n        \"▁壁画\",\n        -12.6196928024292\n      ],\n      [\n        \"▁放火\",\n        -12.61981201171875\n      ],\n      [\n        \"▁尾道\",\n        -12.619884490966797\n      ],\n      [\n        \"▁スティーヴン\",\n        -12.619904518127441\n      ],\n      [\n        \"▁UFO\",\n        -12.619940757751465\n      ],\n      [\n        \"▁ボヘミア\",\n        -12.619958877563477\n      ],\n      [\n        \"▁ブレス\",\n        -12.620011329650879\n      ],\n      [\n        \"法律\",\n        -12.620018005371094\n      ],\n      [\n        \"6000\",\n        -12.620052337646484\n      ],\n      [\n        \"▁火薬\",\n        -12.620057106018066\n      ],\n      [\n        \"▁引き渡し\",\n        -12.620074272155762\n      ],\n      [\n        \"▁売店\",\n        -12.620129585266113\n      ],\n      [\n        \"EK\",\n        -12.620279312133789\n      ],\n      [\n        \"▁まれに\",\n        -12.620331764221191\n      ],\n      [\n        \"▁八代\",\n        -12.620443344116211\n      ],\n      [\n        \"ado\",\n        -12.620484352111816\n      ],\n      [\n        \"祓\",\n        -12.62049388885498\n      ],\n      [\n        \"マスク\",\n        -12.620519638061523\n      ],\n      [\n        \"aut\",\n        -12.620637893676758\n      ],\n      [\n        \"不安\",\n        -12.620676040649414\n      ],\n      [\n        \"▁丹後\",\n        -12.620688438415527\n      ],\n      [\n        \"▁良品\",\n        -12.620810508728027\n      ],\n      [\n        \"▁インスリン\",\n        -12.621030807495117\n      ],\n      [\n        \"▁サイモン\",\n        -12.621052742004395\n      ],\n      [\n        \"揃\",\n        -12.621100425720215\n      ],\n      [\n        \"▁不快\",\n        -12.621101379394531\n      ],\n      [\n        \"▁本業\",\n        -12.62118148803711\n      ],\n      [\n        \"▁ローテーション\",\n        -12.621188163757324\n      ],\n      [\n        \"▁帰省\",\n        -12.621241569519043\n      ],\n      [\n        \"全身\",\n        -12.621354103088379\n      ],\n      [\n        \"▁ボロ\",\n        -12.621460914611816\n      ],\n      [\n        \"▁美学\",\n        -12.621575355529785\n      ],\n      [\n        \"バト\",\n        -12.621597290039062\n      ],\n      [\n        \"▁残酷\",\n        -12.621598243713379\n      ],\n      [\n        \"▁身體\",\n        -12.621642112731934\n      ],\n      [\n        \"崔\",\n        -12.621744155883789\n      ],\n      [\n        \"ures\",\n        -12.621763229370117\n      ],\n      [\n        \"▁シーリング\",\n        -12.621769905090332\n      ],\n      [\n        \"▁ブリテン\",\n        -12.621814727783203\n      ],\n      [\n        \"▁べきでしょう\",\n        -12.621842384338379\n      ],\n      [\n        \"パパ\",\n        -12.621867179870605\n      ],\n      [\n        \"ジュン\",\n        -12.621912956237793\n      ],\n      [\n        \"▁ハガキ\",\n        -12.62192440032959\n      ],\n      [\n        \"▁静脈\",\n        -12.621981620788574\n      ],\n      [\n        \"▁Cor\",\n        -12.622015953063965\n      ],\n      [\n        \"▁迷う\",\n        -12.62210464477539\n      ],\n      [\n        \"▁エクストラ\",\n        -12.622125625610352\n      ],\n      [\n        \"▁のび太\",\n        -12.622325897216797\n      ],\n      [\n        \"▁1876\",\n        -12.622403144836426\n      ],\n      [\n        \"▁弾き語り\",\n        -12.622459411621094\n      ],\n      [\n        \"▁850\",\n        -12.622474670410156\n      ],\n      [\n        \"▁翻\",\n        -12.622537612915039\n      ],\n      [\n        \"▁顕著\",\n        -12.622538566589355\n      ],\n      [\n        \"RL\",\n        -12.622546195983887\n      ],\n      [\n        \"▁ちなみ\",\n        -12.622607231140137\n      ],\n      [\n        \"▁備前\",\n        -12.622645378112793\n      ],\n      [\n        \"▁Wikipedia\",\n        -12.622649192810059\n      ],\n      [\n        \"バイン\",\n        -12.622709274291992\n      ],\n      [\n        \"▁ミニチュア\",\n        -12.622726440429688\n      ],\n      [\n        \"▁登用\",\n        -12.6227388381958\n      ],\n      [\n        \"▁ハンバーグ\",\n        -12.622954368591309\n      ],\n      [\n        \"▁困窮\",\n        -12.62299633026123\n      ],\n      [\n        \"▁舵\",\n        -12.62310791015625\n      ],\n      [\n        \"▁朋\",\n        -12.623132705688477\n      ],\n      [\n        \"▁栗原\",\n        -12.623194694519043\n      ],\n      [\n        \"ジェネクリ\",\n        -12.62337875366211\n      ],\n      [\n        \"▁退却\",\n        -12.623380661010742\n      ],\n      [\n        \"幼い\",\n        -12.623406410217285\n      ],\n      [\n        \"▁スタディ\",\n        -12.62358570098877\n      ],\n      [\n        \"▁届け出\",\n        -12.623588562011719\n      ],\n      [\n        \"▁ダラス\",\n        -12.623896598815918\n      ],\n      [\n        \"▁全滅\",\n        -12.623948097229004\n      ],\n      [\n        \"マンション\",\n        -12.623952865600586\n      ],\n      [\n        \"ming\",\n        -12.623967170715332\n      ],\n      [\n        \"▁スライダー\",\n        -12.624039649963379\n      ],\n      [\n        \"▁傭兵\",\n        -12.62407112121582\n      ],\n      [\n        \"▁OEM\",\n        -12.624126434326172\n      ],\n      [\n        \"▁原油\",\n        -12.624160766601562\n      ],\n      [\n        \"化粧\",\n        -12.62416934967041\n      ],\n      [\n        \"ツキー\",\n        -12.624212265014648\n      ],\n      [\n        \"▁むくみ\",\n        -12.624251365661621\n      ],\n      [\n        \"▁ニコライ\",\n        -12.624251365661621\n      ],\n      [\n        \"▁磁場\",\n        -12.624252319335938\n      ],\n      [\n        \"▁同志社\",\n        -12.624255180358887\n      ],\n      [\n        \"▁軌\",\n        -12.624344825744629\n      ],\n      [\n        \"▁ドゥー\",\n        -12.624448776245117\n      ],\n      [\n        \"▁風船\",\n        -12.624456405639648\n      ],\n      [\n        \"▁千住\",\n        -12.624711990356445\n      ],\n      [\n        \"▁請\",\n        -12.624740600585938\n      ],\n      [\n        \"摺\",\n        -12.624787330627441\n      ],\n      [\n        \"▁フッ\",\n        -12.624909400939941\n      ],\n      [\n        \"▁photo\",\n        -12.624911308288574\n      ],\n      [\n        \"▁産む\",\n        -12.624984741210938\n      ],\n      [\n        \"▁消臭\",\n        -12.624992370605469\n      ],\n      [\n        \"▁will\",\n        -12.625031471252441\n      ],\n      [\n        \"▁着けて\",\n        -12.625221252441406\n      ],\n      [\n        \"▁持株\",\n        -12.625367164611816\n      ],\n      [\n        \"▁発し\",\n        -12.625372886657715\n      ],\n      [\n        \"▁旧制\",\n        -12.625486373901367\n      ],\n      [\n        \"WEB\",\n        -12.625574111938477\n      ],\n      [\n        \"▁あふれ\",\n        -12.625657081604004\n      ],\n      [\n        \"▁ブックマーク\",\n        -12.625751495361328\n      ],\n      [\n        \"▁明らかな\",\n        -12.625755310058594\n      ],\n      [\n        \"▁短調\",\n        -12.625815391540527\n      ],\n      [\n        \"▁仕える\",\n        -12.625913619995117\n      ],\n      [\n        \"▁倒し\",\n        -12.62601375579834\n      ],\n      [\n        \"▁720\",\n        -12.626144409179688\n      ],\n      [\n        \"▁厚木\",\n        -12.626152992248535\n      ],\n      [\n        \"ディナ\",\n        -12.626155853271484\n      ],\n      [\n        \"ボルト\",\n        -12.626175880432129\n      ],\n      [\n        \"幸い\",\n        -12.626221656799316\n      ],\n      [\n        \"▁筐体\",\n        -12.626222610473633\n      ],\n      [\n        \"▁堰\",\n        -12.626423835754395\n      ],\n      [\n        \"▁フォア\",\n        -12.62646198272705\n      ],\n      [\n        \"▁倒して\",\n        -12.62653923034668\n      ],\n      [\n        \"▁まれ\",\n        -12.626590728759766\n      ],\n      [\n        \"▁努める\",\n        -12.626656532287598\n      ],\n      [\n        \"cast\",\n        -12.626812934875488\n      ],\n      [\n        \"▁黒川\",\n        -12.626879692077637\n      ],\n      [\n        \"▁取れて\",\n        -12.626947402954102\n      ],\n      [\n        \"▁支那\",\n        -12.626988410949707\n      ],\n      [\n        \"▁産生\",\n        -12.62708568572998\n      ],\n      [\n        \"▁公家\",\n        -12.627107620239258\n      ],\n      [\n        \"得意\",\n        -12.627233505249023\n      ],\n      [\n        \"▁インスピレーション\",\n        -12.627301216125488\n      ],\n      [\n        \"▁出自\",\n        -12.62751579284668\n      ],\n      [\n        \"武天皇\",\n        -12.627530097961426\n      ],\n      [\n        \"Ex\",\n        -12.627639770507812\n      ],\n      [\n        \"▁久留米\",\n        -12.627644538879395\n      ],\n      [\n        \"▁kHz\",\n        -12.628020286560059\n      ],\n      [\n        \"▁ぐるみ\",\n        -12.628029823303223\n      ],\n      [\n        \"▁アオイ\",\n        -12.628060340881348\n      ],\n      [\n        \"声優\",\n        -12.628060340881348\n      ],\n      [\n        \"▁鉄板\",\n        -12.628063201904297\n      ],\n      [\n        \"▁VTR\",\n        -12.628097534179688\n      ],\n      [\n        \"▁疑う\",\n        -12.628153800964355\n      ],\n      [\n        \"▁優等\",\n        -12.628288269042969\n      ],\n      [\n        \"融\",\n        -12.62834358215332\n      ],\n      [\n        \"▁万一\",\n        -12.628355026245117\n      ],\n      [\n        \"▁なおかつ\",\n        -12.628434181213379\n      ],\n      [\n        \"▁先月\",\n        -12.628584861755371\n      ],\n      [\n        \"▁前記\",\n        -12.62868881225586\n      ],\n      [\n        \"─\",\n        -12.629054069519043\n      ],\n      [\n        \"職場\",\n        -12.62905502319336\n      ],\n      [\n        \"▁モモ\",\n        -12.629127502441406\n      ],\n      [\n        \"met\",\n        -12.629158973693848\n      ],\n      [\n        \"ERA\",\n        -12.629573822021484\n      ],\n      [\n        \"▁知覚\",\n        -12.62959098815918\n      ],\n      [\n        \"標高\",\n        -12.629617691040039\n      ],\n      [\n        \"▁イオ\",\n        -12.629626274108887\n      ],\n      [\n        \"▁合弁\",\n        -12.629634857177734\n      ],\n      [\n        \"篇\",\n        -12.62975025177002\n      ],\n      [\n        \"▁やさしく\",\n        -12.62983226776123\n      ],\n      [\n        \"▁Reg\",\n        -12.630005836486816\n      ],\n      [\n        \"shop\",\n        -12.630067825317383\n      ],\n      [\n        \"▁重大\",\n        -12.630303382873535\n      ],\n      [\n        \"▁オナ\",\n        -12.630363464355469\n      ],\n      [\n        \"▁閉じて\",\n        -12.630420684814453\n      ],\n      [\n        \"▁┈\",\n        -12.630427360534668\n      ],\n      [\n        \"▁Vo\",\n        -12.630433082580566\n      ],\n      [\n        \"▁酸性\",\n        -12.630459785461426\n      ],\n      [\n        \"1911\",\n        -12.630476951599121\n      ],\n      [\n        \"魏\",\n        -12.630489349365234\n      ],\n      [\n        \"▁香取\",\n        -12.630516052246094\n      ],\n      [\n        \"mobile\",\n        -12.630545616149902\n      ],\n      [\n        \"▁繰り広げる\",\n        -12.630555152893066\n      ],\n      [\n        \"▁エコー\",\n        -12.630568504333496\n      ],\n      [\n        \"▁毅\",\n        -12.63058090209961\n      ],\n      [\n        \"▁リベンジ\",\n        -12.630583763122559\n      ],\n      [\n        \"▁スプリント\",\n        -12.630722045898438\n      ],\n      [\n        \"▁免れ\",\n        -12.630837440490723\n      ],\n      [\n        \"▁掛かって\",\n        -12.630922317504883\n      ],\n      [\n        \"ポーター\",\n        -12.630958557128906\n      ],\n      [\n        \"▁長尾\",\n        -12.630992889404297\n      ],\n      [\n        \"▁ダイジェスト\",\n        -12.631082534790039\n      ],\n      [\n        \"▁ヘブライ\",\n        -12.631082534790039\n      ],\n      [\n        \"必\",\n        -12.631159782409668\n      ],\n      [\n        \"▁迫った\",\n        -12.63117790222168\n      ],\n      [\n        \"議院\",\n        -12.63129997253418\n      ],\n      [\n        \"▁遠野\",\n        -12.631339073181152\n      ],\n      [\n        \"▁エサ\",\n        -12.631440162658691\n      ],\n      [\n        \"▁シュン\",\n        -12.631443977355957\n      ],\n      [\n        \"▁ノンフィクション\",\n        -12.631443977355957\n      ],\n      [\n        \"▁胎児\",\n        -12.631443977355957\n      ],\n      [\n        \"▁笑った\",\n        -12.631525993347168\n      ],\n      [\n        \"▁file\",\n        -12.6315279006958\n      ],\n      [\n        \"▁戻ら\",\n        -12.631535530090332\n      ],\n      [\n        \"▲\",\n        -12.631600379943848\n      ],\n      [\n        \"▁待合室\",\n        -12.631624221801758\n      ],\n      [\n        \"RIS\",\n        -12.631778717041016\n      ],\n      [\n        \"▁ノースカロライ\",\n        -12.631804466247559\n      ],\n      [\n        \"▁居城\",\n        -12.631831169128418\n      ],\n      [\n        \"▁帰郷\",\n        -12.63196086883545\n      ],\n      [\n        \"▁黒字\",\n        -12.631969451904297\n      ],\n      [\n        \"ien\",\n        -12.632049560546875\n      ],\n      [\n        \"▁配役\",\n        -12.632220268249512\n      ],\n      [\n        \"ota\",\n        -12.632407188415527\n      ],\n      [\n        \"ドロス\",\n        -12.632433891296387\n      ],\n      [\n        \"アキ\",\n        -12.63243579864502\n      ],\n      [\n        \"▁セッティング\",\n        -12.632450103759766\n      ],\n      [\n        \"圏\",\n        -12.632508277893066\n      ],\n      [\n        \"▁見つめて\",\n        -12.632633209228516\n      ],\n      [\n        \"礫\",\n        -12.632707595825195\n      ],\n      [\n        \"▁均衡\",\n        -12.632718086242676\n      ],\n      [\n        \"▁書ける\",\n        -12.632823944091797\n      ],\n      [\n        \"▁伊勢崎\",\n        -12.633129119873047\n      ],\n      [\n        \"iki\",\n        -12.633180618286133\n      ],\n      [\n        \"関係\",\n        -12.633289337158203\n      ],\n      [\n        \"ペリ\",\n        -12.633328437805176\n      ],\n      [\n        \"▁愛着\",\n        -12.633413314819336\n      ],\n      [\n        \"▁商号\",\n        -12.6336030960083\n      ],\n      [\n        \"おはよう\",\n        -12.633607864379883\n      ],\n      [\n        \"アヌス\",\n        -12.633665084838867\n      ],\n      [\n        \"▁後進\",\n        -12.633702278137207\n      ],\n      [\n        \"▁シンプルに\",\n        -12.633740425109863\n      ],\n      [\n        \"▁斬り\",\n        -12.633758544921875\n      ],\n      [\n        \"▁Billboard\",\n        -12.633792877197266\n      ],\n      [\n        \"▁This\",\n        -12.633951187133789\n      ],\n      [\n        \"▁多項式\",\n        -12.633974075317383\n      ],\n      [\n        \"だれ\",\n        -12.633978843688965\n      ],\n      [\n        \"▁漸\",\n        -12.634028434753418\n      ],\n      [\n        \"▁ケープ\",\n        -12.63413143157959\n      ],\n      [\n        \"▁厨房\",\n        -12.634154319763184\n      ],\n      [\n        \"つける\",\n        -12.63416862487793\n      ],\n      [\n        \"ball\",\n        -12.634246826171875\n      ],\n      [\n        \"▁絵柄\",\n        -12.634248733520508\n      ],\n      [\n        \"▁外れて\",\n        -12.634289741516113\n      ],\n      [\n        \"▁ボア\",\n        -12.63439655303955\n      ],\n      [\n        \"▁­\",\n        -12.634407997131348\n      ],\n      [\n        \"▁満ち\",\n        -12.634492874145508\n      ],\n      [\n        \"▁ダイハツ\",\n        -12.634516716003418\n      ],\n      [\n        \"どうやら\",\n        -12.634519577026367\n      ],\n      [\n        \"▁履修\",\n        -12.634541511535645\n      ],\n      [\n        \"▁コンパイル\",\n        -12.634697914123535\n      ],\n      [\n        \"▁ヤクザ\",\n        -12.634697914123535\n      ],\n      [\n        \"▁祈祷\",\n        -12.634697914123535\n      ],\n      [\n        \"チング\",\n        -12.634742736816406\n      ],\n      [\n        \"▁キャンドル\",\n        -12.63475513458252\n      ],\n      [\n        \"UMA\",\n        -12.634766578674316\n      ],\n      [\n        \"ソニー\",\n        -12.634781837463379\n      ],\n      [\n        \"ats\",\n        -12.634819030761719\n      ],\n      [\n        \"▁於\",\n        -12.635065078735352\n      ],\n      [\n        \"▁混ぜて\",\n        -12.635079383850098\n      ],\n      [\n        \"▁向き合い\",\n        -12.635147094726562\n      ],\n      [\n        \"棟\",\n        -12.635167121887207\n      ],\n      [\n        \"▁やったら\",\n        -12.635225296020508\n      ],\n      [\n        \"AGA\",\n        -12.635356903076172\n      ],\n      [\n        \"▁精算\",\n        -12.635395050048828\n      ],\n      [\n        \"▁カタカナ\",\n        -12.635422706604004\n      ],\n      [\n        \"クルス\",\n        -12.635549545288086\n      ],\n      [\n        \"鎖\",\n        -12.635550498962402\n      ],\n      [\n        \"▁スノーボード\",\n        -12.635615348815918\n      ],\n      [\n        \"どのような\",\n        -12.635793685913086\n      ],\n      [\n        \"▁サハ\",\n        -12.635804176330566\n      ],\n      [\n        \"▁北村\",\n        -12.635818481445312\n      ],\n      [\n        \"▁親方\",\n        -12.635858535766602\n      ],\n      [\n        \"OI\",\n        -12.635931015014648\n      ],\n      [\n        \"▁切符\",\n        -12.635988235473633\n      ],\n      [\n        \"▁肝炎\",\n        -12.636022567749023\n      ],\n      [\n        \"icon\",\n        -12.636055946350098\n      ],\n      [\n        \"無理\",\n        -12.636076927185059\n      ],\n      [\n        \"▁ハンガー\",\n        -12.63618278503418\n      ],\n      [\n        \"ーデ\",\n        -12.636351585388184\n      ],\n      [\n        \"▁鳴門\",\n        -12.636390686035156\n      ],\n      [\n        \"▁蒸\",\n        -12.636561393737793\n      ],\n      [\n        \"▁星人\",\n        -12.636564254760742\n      ],\n      [\n        \"既\",\n        -12.636661529541016\n      ],\n      [\n        \"▁乗り出し\",\n        -12.63668155670166\n      ],\n      [\n        \"▁分校\",\n        -12.636796951293945\n      ],\n      [\n        \"▁負ける\",\n        -12.63684368133545\n      ],\n      [\n        \"▁数理\",\n        -12.636868476867676\n      ],\n      [\n        \"▁覗いて\",\n        -12.636873245239258\n      ],\n      [\n        \"▁Prime\",\n        -12.6370849609375\n      ],\n      [\n        \"書誌\",\n        -12.637248039245605\n      ],\n      [\n        \"泥\",\n        -12.637258529663086\n      ],\n      [\n        \"▁セントルイス\",\n        -12.637417793273926\n      ],\n      [\n        \"▁上回って\",\n        -12.637419700622559\n      ],\n      [\n        \"▁志村\",\n        -12.63760757446289\n      ],\n      [\n        \"▁淫乱\",\n        -12.637629508972168\n      ],\n      [\n        \"house\",\n        -12.637655258178711\n      ],\n      [\n        \"▁ほし\",\n        -12.637757301330566\n      ],\n      [\n        \"▁街並み\",\n        -12.637810707092285\n      ],\n      [\n        \"▁父子\",\n        -12.637835502624512\n      ],\n      [\n        \"▁良き\",\n        -12.637835502624512\n      ],\n      [\n        \"▁PART\",\n        -12.637883186340332\n      ],\n      [\n        \"▁マキシ\",\n        -12.638007164001465\n      ],\n      [\n        \"▁蚊\",\n        -12.638175010681152\n      ],\n      [\n        \"ムーン\",\n        -12.638197898864746\n      ],\n      [\n        \"安倍\",\n        -12.63822078704834\n      ],\n      [\n        \"1913\",\n        -12.638254165649414\n      ],\n      [\n        \"▁受理\",\n        -12.63829517364502\n      ],\n      [\n        \"障害\",\n        -12.638386726379395\n      ],\n      [\n        \"▁遂げて\",\n        -12.638463973999023\n      ],\n      [\n        \"▁ヒアルロン\",\n        -12.638507843017578\n      ],\n      [\n        \"▁マルティ\",\n        -12.638651847839355\n      ],\n      [\n        \"eth\",\n        -12.638704299926758\n      ],\n      [\n        \"Drive\",\n        -12.638708114624023\n      ],\n      [\n        \"▁終わったら\",\n        -12.638715744018555\n      ],\n      [\n        \"▁気体\",\n        -12.638748168945312\n      ],\n      [\n        \"▁塀\",\n        -12.63887882232666\n      ],\n      [\n        \"obo\",\n        -12.63888931274414\n      ],\n      [\n        \"▁BOOK\",\n        -12.639007568359375\n      ],\n      [\n        \"学区\",\n        -12.639131546020508\n      ],\n      [\n        \"▁きょく\",\n        -12.639423370361328\n      ],\n      [\n        \"他人\",\n        -12.639471054077148\n      ],\n      [\n        \"▁高台\",\n        -12.639598846435547\n      ],\n      [\n        \"幻\",\n        -12.639630317687988\n      ],\n      [\n        \"▁トラスト\",\n        -12.639897346496582\n      ],\n      [\n        \"▁スコープ\",\n        -12.64000129699707\n      ],\n      [\n        \"がかり\",\n        -12.64004135131836\n      ],\n      [\n        \"▁陰陽\",\n        -12.640124320983887\n      ],\n      [\n        \"ICS\",\n        -12.640142440795898\n      ],\n      [\n        \"▁ウクレレ\",\n        -12.640145301818848\n      ],\n      [\n        \"▁安城\",\n        -12.640159606933594\n      ],\n      [\n        \"▁オクタ\",\n        -12.64023494720459\n      ],\n      [\n        \"ッキン\",\n        -12.640251159667969\n      ],\n      [\n        \"冊\",\n        -12.640252113342285\n      ],\n      [\n        \"▁低かった\",\n        -12.640259742736816\n      ],\n      [\n        \"▁直列\",\n        -12.64028263092041\n      ],\n      [\n        \"▁心情\",\n        -12.640335083007812\n      ],\n      [\n        \"▁伯父\",\n        -12.640351295471191\n      ],\n      [\n        \"▁仮装\",\n        -12.640356063842773\n      ],\n      [\n        \"Mo\",\n        -12.640620231628418\n      ],\n      [\n        \"▁醜\",\n        -12.640663146972656\n      ],\n      [\n        \"lot\",\n        -12.640666007995605\n      ],\n      [\n        \"▁きよ\",\n        -12.640719413757324\n      ],\n      [\n        \"▁メモリアル\",\n        -12.640730857849121\n      ],\n      [\n        \"▁山々\",\n        -12.640778541564941\n      ],\n      [\n        \"▁いただけた\",\n        -12.640917778015137\n      ],\n      [\n        \"▁変貌\",\n        -12.640925407409668\n      ],\n      [\n        \"▁親しい\",\n        -12.640957832336426\n      ],\n      [\n        \"len\",\n        -12.641090393066406\n      ],\n      [\n        \"中野\",\n        -12.641106605529785\n      ],\n      [\n        \"オウ\",\n        -12.641196250915527\n      ],\n      [\n        \"▁インタラクティブ\",\n        -12.64123821258545\n      ],\n      [\n        \"▁ュ\",\n        -12.641284942626953\n      ],\n      [\n        \"縞\",\n        -12.641420364379883\n      ],\n      [\n        \"卓越\",\n        -12.641423225402832\n      ],\n      [\n        \"mat\",\n        -12.64146900177002\n      ],\n      [\n        \"Cont\",\n        -12.641742706298828\n      ],\n      [\n        \"疲れ\",\n        -12.641793251037598\n      ],\n      [\n        \"ould\",\n        -12.641830444335938\n      ],\n      [\n        \"zer\",\n        -12.641871452331543\n      ],\n      [\n        \"▁ちょい\",\n        -12.641912460327148\n      ],\n      [\n        \"▁劇的に\",\n        -12.641966819763184\n      ],\n      [\n        \"▁FG\",\n        -12.642069816589355\n      ],\n      [\n        \"▁不要で\",\n        -12.642072677612305\n      ],\n      [\n        \"cro\",\n        -12.642107963562012\n      ],\n      [\n        \"▁元来\",\n        -12.642229080200195\n      ],\n      [\n        \"にもかかわらず\",\n        -12.642332077026367\n      ],\n      [\n        \"▁円滑に\",\n        -12.642333030700684\n      ],\n      [\n        \"始め\",\n        -12.642409324645996\n      ],\n      [\n        \"▁鍵盤\",\n        -12.642426490783691\n      ],\n      [\n        \"▁建つ\",\n        -12.642439842224121\n      ],\n      [\n        \"▁ホログラム\",\n        -12.642523765563965\n      ],\n      [\n        \"'\",\n        -12.642578125\n      ],\n      [\n        \"ram\",\n        -12.642722129821777\n      ],\n      [\n        \"▁差し出\",\n        -12.642736434936523\n      ],\n      [\n        \"▁寛容\",\n        -12.642755508422852\n      ],\n      [\n        \"たけ\",\n        -12.642837524414062\n      ],\n      [\n        \"煌\",\n        -12.642879486083984\n      ],\n      [\n        \"▁営み\",\n        -12.642919540405273\n      ],\n      [\n        \"嵩\",\n        -12.643062591552734\n      ],\n      [\n        \"ving\",\n        -12.643173217773438\n      ],\n      [\n        \"vin\",\n        -12.643176078796387\n      ],\n      [\n        \"cept\",\n        -12.643304824829102\n      ],\n      [\n        \"▁済ませて\",\n        -12.643425941467285\n      ],\n      [\n        \"▁鯨\",\n        -12.6434326171875\n      ],\n      [\n        \"▁クローゼット\",\n        -12.643441200256348\n      ],\n      [\n        \"▁スーダン\",\n        -12.64353084564209\n      ],\n      [\n        \"▁信玄\",\n        -12.643712043762207\n      ],\n      [\n        \"▁叶える\",\n        -12.643718719482422\n      ],\n      [\n        \"▁ふつう\",\n        -12.643793106079102\n      ],\n      [\n        \"▁語族\",\n        -12.643892288208008\n      ],\n      [\n        \"柚\",\n        -12.643972396850586\n      ],\n      [\n        \"ガタ\",\n        -12.644085884094238\n      ],\n      [\n        \"▁ヒッツ\",\n        -12.644100189208984\n      ],\n      [\n        \"▁1,200\",\n        -12.644161224365234\n      ],\n      [\n        \"▁幕下\",\n        -12.644240379333496\n      ],\n      [\n        \"▁愛車\",\n        -12.644242286682129\n      ],\n      [\n        \"▁アヤ\",\n        -12.644330024719238\n      ],\n      [\n        \"▁スペシャリスト\",\n        -12.644341468811035\n      ],\n      [\n        \"▁武者\",\n        -12.644341468811035\n      ],\n      [\n        \"ニム\",\n        -12.644440650939941\n      ],\n      [\n        \"本体\",\n        -12.644440650939941\n      ],\n      [\n        \"▁施して\",\n        -12.644454956054688\n      ],\n      [\n        \"▁ユウ\",\n        -12.64445686340332\n      ],\n      [\n        \"▁ペイン\",\n        -12.644464492797852\n      ],\n      [\n        \"▁ファスナー\",\n        -12.644525527954102\n      ],\n      [\n        \"▁バーデン\",\n        -12.644584655761719\n      ],\n      [\n        \"▁付き合う\",\n        -12.644681930541992\n      ],\n      [\n        \"▁ウェイト\",\n        -12.64470100402832\n      ],\n      [\n        \"л\",\n        -12.644705772399902\n      ],\n      [\n        \"▁見立て\",\n        -12.6447114944458\n      ],\n      [\n        \"▁時短\",\n        -12.644725799560547\n      ],\n      [\n        \"▁桐生\",\n        -12.644889831542969\n      ],\n      [\n        \"▁ヨーゼフ\",\n        -12.644919395446777\n      ],\n      [\n        \"▁止まった\",\n        -12.644933700561523\n      ],\n      [\n        \"▁令嬢\",\n        -12.645075798034668\n      ],\n      [\n        \"いろいろな\",\n        -12.645142555236816\n      ],\n      [\n        \"▁アップロード\",\n        -12.645354270935059\n      ],\n      [\n        \"▁ハドソン\",\n        -12.645440101623535\n      ],\n      [\n        \"▁ニックネーム\",\n        -12.645458221435547\n      ],\n      [\n        \"▁アホ\",\n        -12.645463943481445\n      ],\n      [\n        \"▁トラウマ\",\n        -12.645467758178711\n      ],\n      [\n        \"▁日の出\",\n        -12.645491600036621\n      ],\n      [\n        \"▁草原\",\n        -12.645492553710938\n      ],\n      [\n        \"壮\",\n        -12.645529747009277\n      ],\n      [\n        \"ours\",\n        -12.645648002624512\n      ],\n      [\n        \"▁ガジェット\",\n        -12.645703315734863\n      ],\n      [\n        \"▁受け入れた\",\n        -12.645790100097656\n      ],\n      [\n        \"▁執事\",\n        -12.645793914794922\n      ],\n      [\n        \"ather\",\n        -12.64589786529541\n      ],\n      [\n        \"▁那珂\",\n        -12.645988464355469\n      ],\n      [\n        \"docomo\",\n        -12.645989418029785\n      ],\n      [\n        \"▁悔し\",\n        -12.646014213562012\n      ],\n      [\n        \"自社\",\n        -12.646056175231934\n      ],\n      [\n        \"▁着け\",\n        -12.646069526672363\n      ],\n      [\n        \"▁シメオ\",\n        -12.646123886108398\n      ],\n      [\n        \"▁甲状腺\",\n        -12.646354675292969\n      ],\n      [\n        \"▁尽く\",\n        -12.646390914916992\n      ],\n      [\n        \"▁巴\",\n        -12.646434783935547\n      ],\n      [\n        \"▁こいつ\",\n        -12.646472930908203\n      ],\n      [\n        \"▁児玉\",\n        -12.646539688110352\n      ],\n      [\n        \"▁義勇\",\n        -12.646806716918945\n      ],\n      [\n        \"▁憂鬱\",\n        -12.646905899047852\n      ],\n      [\n        \"配信\",\n        -12.647128105163574\n      ],\n      [\n        \"▁ネクス\",\n        -12.64719295501709\n      ],\n      [\n        \"▁タウ\",\n        -12.647217750549316\n      ],\n      [\n        \"▁荷重\",\n        -12.64722728729248\n      ],\n      [\n        \"▁じいちゃん\",\n        -12.647271156311035\n      ],\n      [\n        \"▁中級\",\n        -12.647416114807129\n      ],\n      [\n        \"▁知らせる\",\n        -12.64745044708252\n      ],\n      [\n        \"▁カッコいい\",\n        -12.647470474243164\n      ],\n      [\n        \"万が一\",\n        -12.647565841674805\n      ],\n      [\n        \"▁空き家\",\n        -12.64758014678955\n      ],\n      [\n        \"▁のぞき\",\n        -12.64769172668457\n      ],\n      [\n        \"鍼\",\n        -12.647820472717285\n      ],\n      [\n        \"▁スリップ\",\n        -12.647920608520508\n      ],\n      [\n        \"▁荘園\",\n        -12.64794635772705\n      ],\n      [\n        \"壱\",\n        -12.648004531860352\n      ],\n      [\n        \"麿\",\n        -12.648004531860352\n      ],\n      [\n        \"▁立山\",\n        -12.6480712890625\n      ],\n      [\n        \"▁系図\",\n        -12.648176193237305\n      ],\n      [\n        \"▁PROJECT\",\n        -12.648187637329102\n      ],\n      [\n        \"▁脫\",\n        -12.648412704467773\n      ],\n      [\n        \"▁乗船\",\n        -12.648608207702637\n      ],\n      [\n        \"▁過激な\",\n        -12.648651123046875\n      ],\n      [\n        \"オリンピック\",\n        -12.648669242858887\n      ],\n      [\n        \"▁ピクチャーズ\",\n        -12.648738861083984\n      ],\n      [\n        \"▁話せ\",\n        -12.648981094360352\n      ],\n      [\n        \"▁メッキ\",\n        -12.649007797241211\n      ],\n      [\n        \"細胞\",\n        -12.649066925048828\n      ],\n      [\n        \"▁ミズーリ\",\n        -12.6491060256958\n      ],\n      [\n        \"▁乳酸菌\",\n        -12.649290084838867\n      ],\n      [\n        \"▁とどめ\",\n        -12.649304389953613\n      ],\n      [\n        \"▁鞄\",\n        -12.649317741394043\n      ],\n      [\n        \"▁とうとう\",\n        -12.649421691894531\n      ],\n      [\n        \"カミ\",\n        -12.64950180053711\n      ],\n      [\n        \"▁タイツ\",\n        -12.649506568908691\n      ],\n      [\n        \"▁文久\",\n        -12.649673461914062\n      ],\n      [\n        \"▁飯塚\",\n        -12.64980411529541\n      ],\n      [\n        \"絢\",\n        -12.64984130859375\n      ],\n      [\n        \"▁ョ\",\n        -12.649863243103027\n      ],\n      [\n        \"igh\",\n        -12.649918556213379\n      ],\n      [\n        \"HTML\",\n        -12.649978637695312\n      ],\n      [\n        \"▁ベニ\",\n        -12.65005111694336\n      ],\n      [\n        \"▁締め切り\",\n        -12.650074005126953\n      ],\n      [\n        \"▁是正\",\n        -12.65014362335205\n      ],\n      [\n        \"▁カンナビジオール\",\n        -12.650209426879883\n      ],\n      [\n        \"ウォール\",\n        -12.650279998779297\n      ],\n      [\n        \"彫\",\n        -12.650303840637207\n      ],\n      [\n        \"side\",\n        -12.650333404541016\n      ],\n      [\n        \"▁水溶\",\n        -12.650535583496094\n      ],\n      [\n        \"▁エキスパート\",\n        -12.65059757232666\n      ],\n      [\n        \"▁増田\",\n        -12.650670051574707\n      ],\n      [\n        \"▁讃岐\",\n        -12.650760650634766\n      ],\n      [\n        \"AKU\",\n        -12.650806427001953\n      ],\n      [\n        \"プチ\",\n        -12.650834083557129\n      ],\n      [\n        \"キサン\",\n        -12.650835990905762\n      ],\n      [\n        \"▁魔力\",\n        -12.65099048614502\n      ],\n      [\n        \"▁もらったり\",\n        -12.651137351989746\n      ],\n      [\n        \"▁ハンドメイド\",\n        -12.651151657104492\n      ],\n      [\n        \"uro\",\n        -12.651322364807129\n      ],\n      [\n        \"▁MAP\",\n        -12.651347160339355\n      ],\n      [\n        \"▁内野手\",\n        -12.65150260925293\n      ],\n      [\n        \"メキシコ\",\n        -12.651588439941406\n      ],\n      [\n        \"▁ウィンター\",\n        -12.651654243469238\n      ],\n      [\n        \"▁アクセル\",\n        -12.651664733886719\n      ],\n      [\n        \"▁生き延び\",\n        -12.651681900024414\n      ],\n      [\n        \"▁治る\",\n        -12.651691436767578\n      ],\n      [\n        \"TOR\",\n        -12.651716232299805\n      ],\n      [\n        \"▁1864\",\n        -12.651739120483398\n      ],\n      [\n        \"▁落合\",\n        -12.651782035827637\n      ],\n      [\n        \"▁炊き\",\n        -12.65186882019043\n      ],\n      [\n        \"▁公団\",\n        -12.651888847351074\n      ],\n      [\n        \"▁申し上げる\",\n        -12.651888847351074\n      ],\n      [\n        \"▁1881\",\n        -12.651970863342285\n      ],\n      [\n        \"▁フランクリン\",\n        -12.652195930480957\n      ],\n      [\n        \"▁控える\",\n        -12.652290344238281\n      ],\n      [\n        \"▁犯した\",\n        -12.652363777160645\n      ],\n      [\n        \"〈\",\n        -12.652379035949707\n      ],\n      [\n        \"▁頻発\",\n        -12.652419090270996\n      ],\n      [\n        \"▁熱意\",\n        -12.652667045593262\n      ],\n      [\n        \"▁Hol\",\n        -12.652795791625977\n      ],\n      [\n        \"SION\",\n        -12.652802467346191\n      ],\n      [\n        \"▁紛れ\",\n        -12.652811050415039\n      ],\n      [\n        \"▁ジェイムズ\",\n        -12.652814865112305\n      ],\n      [\n        \"▁浮かんで\",\n        -12.652915954589844\n      ],\n      [\n        \"▁Center\",\n        -12.652974128723145\n      ],\n      [\n        \"▁校区\",\n        -12.653132438659668\n      ],\n      [\n        \"謂\",\n        -12.653154373168945\n      ],\n      [\n        \"▁扶養\",\n        -12.653156280517578\n      ],\n      [\n        \"▁日本書紀\",\n        -12.653157234191895\n      ],\n      [\n        \"▁ゲーミング\",\n        -12.653205871582031\n      ],\n      [\n        \"▁大館\",\n        -12.653220176696777\n      ],\n      [\n        \"▁不利益\",\n        -12.653286933898926\n      ],\n      [\n        \"▁1882\",\n        -12.653481483459473\n      ],\n      [\n        \"▁要ら\",\n        -12.653497695922852\n      ],\n      [\n        \"▁ランドリー\",\n        -12.65369701385498\n      ],\n      [\n        \"▁挑発\",\n        -12.653709411621094\n      ],\n      [\n        \"▁カズ\",\n        -12.653711318969727\n      ],\n      [\n        \"▁ネガティブな\",\n        -12.653740882873535\n      ],\n      [\n        \"▁休んで\",\n        -12.653924942016602\n      ],\n      [\n        \"▁残ら\",\n        -12.654046058654785\n      ],\n      [\n        \"カジノ\",\n        -12.654056549072266\n      ],\n      [\n        \"▁クロノ\",\n        -12.654088020324707\n      ],\n      [\n        \"▁オーダーメイド\",\n        -12.654095649719238\n      ],\n      [\n        \"▁豪族\",\n        -12.654167175292969\n      ],\n      [\n        \"公共\",\n        -12.654196739196777\n      ],\n      [\n        \"▁1700\",\n        -12.6542329788208\n      ],\n      [\n        \"▁ブリーダー\",\n        -12.654281616210938\n      ],\n      [\n        \"詳しい\",\n        -12.654287338256836\n      ],\n      [\n        \"▁土岐\",\n        -12.654415130615234\n      ],\n      [\n        \"▁エプロン\",\n        -12.654448509216309\n      ],\n      [\n        \"▁混入\",\n        -12.654552459716797\n      ],\n      [\n        \"▁その辺\",\n        -12.654586791992188\n      ],\n      [\n        \"▁以って\",\n        -12.654641151428223\n      ],\n      [\n        \"▁exp\",\n        -12.65466022491455\n      ],\n      [\n        \"プリー\",\n        -12.654725074768066\n      ],\n      [\n        \"▁笑み\",\n        -12.654764175415039\n      ],\n      [\n        \"TIC\",\n        -12.65477180480957\n      ],\n      [\n        \"▁ペンギン\",\n        -12.65489673614502\n      ],\n      [\n        \"▁漏らし\",\n        -12.655094146728516\n      ],\n      [\n        \"滋賀\",\n        -12.655204772949219\n      ],\n      [\n        \"▁Weblio\",\n        -12.65522289276123\n      ],\n      [\n        \"▁先駆けて\",\n        -12.655245780944824\n      ],\n      [\n        \"記録\",\n        -12.655327796936035\n      ],\n      [\n        \"▁氾濫\",\n        -12.65537166595459\n      ],\n      [\n        \"▁罰則\",\n        -12.655403137207031\n      ],\n      [\n        \"▁激突\",\n        -12.65542221069336\n      ],\n      [\n        \"一見\",\n        -12.65544319152832\n      ],\n      [\n        \"▁一斉\",\n        -12.655498504638672\n      ],\n      [\n        \"▁ロスト\",\n        -12.655503273010254\n      ],\n      [\n        \"授業\",\n        -12.655547142028809\n      ],\n      [\n        \"團\",\n        -12.655556678771973\n      ],\n      [\n        \"▁一式\",\n        -12.65561580657959\n      ],\n      [\n        \"ちん\",\n        -12.655673027038574\n      ],\n      [\n        \"▁莉\",\n        -12.655698776245117\n      ],\n      [\n        \"▁寝台\",\n        -12.655714988708496\n      ],\n      [\n        \"▁碑文\",\n        -12.655733108520508\n      ],\n      [\n        \"▁繁華街\",\n        -12.655741691589355\n      ],\n      [\n        \"閏\",\n        -12.655741691589355\n      ],\n      [\n        \"▁Jun\",\n        -12.65588665008545\n      ],\n      [\n        \"▁ようだった\",\n        -12.655942916870117\n      ],\n      [\n        \"▁UTC\",\n        -12.655963897705078\n      ],\n      [\n        \"▁破片\",\n        -12.656007766723633\n      ],\n      [\n        \"猿\",\n        -12.656103134155273\n      ],\n      [\n        \"▁そろって\",\n        -12.656115531921387\n      ],\n      [\n        \"▁四川\",\n        -12.65627384185791\n      ],\n      [\n        \"啓\",\n        -12.656291007995605\n      ],\n      [\n        \"▁以北\",\n        -12.656298637390137\n      ],\n      [\n        \"▁竹田\",\n        -12.65632152557373\n      ],\n      [\n        \"▁乗り越えて\",\n        -12.656384468078613\n      ],\n      [\n        \"▁サガ\",\n        -12.656394958496094\n      ],\n      [\n        \"▁ハンディ\",\n        -12.656396865844727\n      ],\n      [\n        \"▁福利\",\n        -12.65647029876709\n      ],\n      [\n        \"蹄\",\n        -12.656481742858887\n      ],\n      [\n        \"▁塩分\",\n        -12.656584739685059\n      ],\n      [\n        \"▁初版\",\n        -12.65676212310791\n      ],\n      [\n        \"ガシ\",\n        -12.656795501708984\n      ],\n      [\n        \"▁エイリアン\",\n        -12.656810760498047\n      ],\n      [\n        \"▁ニオイ\",\n        -12.656853675842285\n      ],\n      [\n        \"▁JAL\",\n        -12.656970024108887\n      ],\n      [\n        \"▁栄えた\",\n        -12.656994819641113\n      ],\n      [\n        \"▁憲章\",\n        -12.657093048095703\n      ],\n      [\n        \"▁パルス\",\n        -12.657170295715332\n      ],\n      [\n        \"符\",\n        -12.657278060913086\n      ],\n      [\n        \"▁ニート\",\n        -12.657288551330566\n      ],\n      [\n        \"▁大別\",\n        -12.65731143951416\n      ],\n      [\n        \"▁シモン\",\n        -12.65733528137207\n      ],\n      [\n        \"戦前\",\n        -12.65733528137207\n      ],\n      [\n        \"キャッチフレーズ\",\n        -12.6574068069458\n      ],\n      [\n        \"浮気\",\n        -12.657483100891113\n      ],\n      [\n        \"ジマ\",\n        -12.657489776611328\n      ],\n      [\n        \"メリーランド\",\n        -12.657588958740234\n      ],\n      [\n        \"▁ロッキー\",\n        -12.657748222351074\n      ],\n      [\n        \"▁麻衣\",\n        -12.657769203186035\n      ],\n      [\n        \"▁厳格な\",\n        -12.65778636932373\n      ],\n      [\n        \"YAMA\",\n        -12.65778923034668\n      ],\n      [\n        \"▁無縁\",\n        -12.65784740447998\n      ],\n      [\n        \"意外\",\n        -12.657856941223145\n      ],\n      [\n        \"▁来訪\",\n        -12.657883644104004\n      ],\n      [\n        \"▁チャリティー\",\n        -12.657906532287598\n      ],\n      [\n        \"▁素肌\",\n        -12.657919883728027\n      ],\n      [\n        \"▁ホッと\",\n        -12.658036231994629\n      ],\n      [\n        \"uth\",\n        -12.658085823059082\n      ],\n      [\n        \"▁控えた\",\n        -12.658097267150879\n      ],\n      [\n        \"▁おこなった\",\n        -12.658333778381348\n      ],\n      [\n        \"olo\",\n        -12.658378601074219\n      ],\n      [\n        \"alt\",\n        -12.658392906188965\n      ],\n      [\n        \"▁リラックマ\",\n        -12.65851879119873\n      ],\n      [\n        \"▁在職\",\n        -12.65860366821289\n      ],\n      [\n        \"▁1878\",\n        -12.658649444580078\n      ],\n      [\n        \"▁白井\",\n        -12.658689498901367\n      ],\n      [\n        \"▁抑止\",\n        -12.65870475769043\n      ],\n      [\n        \"▁停車場\",\n        -12.658830642700195\n      ],\n      [\n        \"▁見込め\",\n        -12.65893840789795\n      ],\n      [\n        \"▁スパン\",\n        -12.659027099609375\n      ],\n      [\n        \"▁文科\",\n        -12.65905475616455\n      ],\n      [\n        \"▁祈る\",\n        -12.659080505371094\n      ],\n      [\n        \"アダルト\",\n        -12.659090995788574\n      ],\n      [\n        \"▁成形\",\n        -12.659235000610352\n      ],\n      [\n        \"▁水没\",\n        -12.65930461883545\n      ],\n      [\n        \"升\",\n        -12.65944766998291\n      ],\n      [\n        \"▁カッター\",\n        -12.659466743469238\n      ],\n      [\n        \"▁伝来\",\n        -12.659496307373047\n      ],\n      [\n        \"モット\",\n        -12.659584999084473\n      ],\n      [\n        \"んせん\",\n        -12.659661293029785\n      ],\n      [\n        \"▁批准\",\n        -12.659818649291992\n      ],\n      [\n        \"▁相まって\",\n        -12.660035133361816\n      ],\n      [\n        \"▁味覚\",\n        -12.660116195678711\n      ],\n      [\n        \"▁復縁\",\n        -12.66024112701416\n      ],\n      [\n        \"4000\",\n        -12.660324096679688\n      ],\n      [\n        \"▁溶解\",\n        -12.660420417785645\n      ],\n      [\n        \"けれど\",\n        -12.660502433776855\n      ],\n      [\n        \"▁勘定\",\n        -12.660740852355957\n      ],\n      [\n        \"▁偏差値\",\n        -12.660747528076172\n      ],\n      [\n        \"▁別々の\",\n        -12.660749435424805\n      ],\n      [\n        \"リンゲン\",\n        -12.660865783691406\n      ],\n      [\n        \"▁達人\",\n        -12.661005020141602\n      ],\n      [\n        \"TX\",\n        -12.661028861999512\n      ],\n      [\n        \"▁造園\",\n        -12.661063194274902\n      ],\n      [\n        \"▁油圧\",\n        -12.661211013793945\n      ],\n      [\n        \"▁Song\",\n        -12.661219596862793\n      ],\n      [\n        \"▁海面\",\n        -12.661642074584961\n      ],\n      [\n        \"MU\",\n        -12.661742210388184\n      ],\n      [\n        \"▁奥行き\",\n        -12.66178035736084\n      ],\n      [\n        \"eas\",\n        -12.661782264709473\n      ],\n      [\n        \"▁集い\",\n        -12.661797523498535\n      ],\n      [\n        \"憩\",\n        -12.661849021911621\n      ],\n      [\n        \"▁歩んで\",\n        -12.661907196044922\n      ],\n      [\n        \"▁七夕\",\n        -12.661953926086426\n      ],\n      [\n        \"▁弾丸\",\n        -12.662039756774902\n      ],\n      [\n        \"▁赴き\",\n        -12.662049293518066\n      ],\n      [\n        \"▁強硬\",\n        -12.66209888458252\n      ],\n      [\n        \"ヘレ\",\n        -12.662164688110352\n      ],\n      [\n        \"高知\",\n        -12.66220474243164\n      ],\n      [\n        \"▁穿\",\n        -12.662381172180176\n      ],\n      [\n        \"▁チャーム\",\n        -12.662454605102539\n      ],\n      [\n        \"1915\",\n        -12.662459373474121\n      ],\n      [\n        \"▁異常に\",\n        -12.662498474121094\n      ],\n      [\n        \"LOW\",\n        -12.662535667419434\n      ],\n      [\n        \"▁プロット\",\n        -12.662822723388672\n      ],\n      [\n        \"▁シュガー\",\n        -12.662851333618164\n      ],\n      [\n        \"▁初級\",\n        -12.662983894348145\n      ],\n      [\n        \"▁給水\",\n        -12.663080215454102\n      ],\n      [\n        \"児童\",\n        -12.663082122802734\n      ],\n      [\n        \"▁Solution\",\n        -12.663164138793945\n      ],\n      [\n        \"AH\",\n        -12.663311004638672\n      ],\n      [\n        \"▁改札口\",\n        -12.663434982299805\n      ],\n      [\n        \"盗\",\n        -12.663891792297363\n      ],\n      [\n        \"▁カーディガン\",\n        -12.663911819458008\n      ],\n      [\n        \"▁いたずら\",\n        -12.66392993927002\n      ],\n      [\n        \"▁image\",\n        -12.663947105407715\n      ],\n      [\n        \"▁アニマル\",\n        -12.663979530334473\n      ],\n      [\n        \"▁官邸\",\n        -12.664023399353027\n      ],\n      [\n        \"▁今朝\",\n        -12.66421127319336\n      ],\n      [\n        \"▁セレモニー\",\n        -12.664284706115723\n      ],\n      [\n        \"▁リハーサル\",\n        -12.664284706115723\n      ],\n      [\n        \"▁泥棒\",\n        -12.664300918579102\n      ],\n      [\n        \"▁可愛らしい\",\n        -12.664308547973633\n      ],\n      [\n        \"▁広範囲に\",\n        -12.66435432434082\n      ],\n      [\n        \"▁生かす\",\n        -12.664360046386719\n      ],\n      [\n        \"▁主軸\",\n        -12.664409637451172\n      ],\n      [\n        \"▁施す\",\n        -12.664435386657715\n      ],\n      [\n        \"▁伸ばした\",\n        -12.66443920135498\n      ],\n      [\n        \"▁即興\",\n        -12.664637565612793\n      ],\n      [\n        \"手のひら\",\n        -12.664657592773438\n      ],\n      [\n        \"飴\",\n        -12.664657592773438\n      ],\n      [\n        \"▁ストーカー\",\n        -12.664820671081543\n      ],\n      [\n        \"▁多角\",\n        -12.664823532104492\n      ],\n      [\n        \"▁有用な\",\n        -12.664862632751465\n      ],\n      [\n        \"▁心配に\",\n        -12.66489315032959\n      ],\n      [\n        \"▁平家\",\n        -12.66490364074707\n      ],\n      [\n        \"ージェント\",\n        -12.665019989013672\n      ],\n      [\n        \"▁conf\",\n        -12.66518783569336\n      ],\n      [\n        \"病気\",\n        -12.66528034210205\n      ],\n      [\n        \"▁上品\",\n        -12.665350914001465\n      ],\n      [\n        \"▁探した\",\n        -12.66538143157959\n      ],\n      [\n        \"住居\",\n        -12.665395736694336\n      ],\n      [\n        \"▁点差\",\n        -12.665403366088867\n      ],\n      [\n        \"▁ガーデニング\",\n        -12.665404319763184\n      ],\n      [\n        \"▁早急に\",\n        -12.665404319763184\n      ],\n      [\n        \"メート\",\n        -12.665546417236328\n      ],\n      [\n        \"▁爽やかな\",\n        -12.665558815002441\n      ],\n      [\n        \"▁風水\",\n        -12.665640830993652\n      ],\n      [\n        \"▁急速な\",\n        -12.66573715209961\n      ],\n      [\n        \"工事\",\n        -12.66574478149414\n      ],\n      [\n        \"ハナ\",\n        -12.665789604187012\n      ],\n      [\n        \"出場\",\n        -12.665963172912598\n      ],\n      [\n        \"▁精一杯\",\n        -12.66596508026123\n      ],\n      [\n        \"▁引っ張り\",\n        -12.66601848602295\n      ],\n      [\n        \"abi\",\n        -12.666106224060059\n      ],\n      [\n        \"寡\",\n        -12.66615104675293\n      ],\n      [\n        \"▁岸田\",\n        -12.666261672973633\n      ],\n      [\n        \"▁西端\",\n        -12.666375160217285\n      ],\n      [\n        \"民主党\",\n        -12.666375160217285\n      ],\n      [\n        \"▁地表\",\n        -12.666452407836914\n      ],\n      [\n        \"▁機雷\",\n        -12.666452407836914\n      ],\n      [\n        \"▁クローズ\",\n        -12.666454315185547\n      ],\n      [\n        \"▁チェリー\",\n        -12.666497230529785\n      ],\n      [\n        \"這\",\n        -12.666522026062012\n      ],\n      [\n        \"▁ポートランド\",\n        -12.666577339172363\n      ],\n      [\n        \"▁まゆ\",\n        -12.666687965393066\n      ],\n      [\n        \"▁重心\",\n        -12.666793823242188\n      ],\n      [\n        \"LAND\",\n        -12.66684627532959\n      ],\n      [\n        \"▁手腕\",\n        -12.666937828063965\n      ],\n      [\n        \"▁ブランク\",\n        -12.667145729064941\n      ],\n      [\n        \"▁紀要\",\n        -12.66719913482666\n      ],\n      [\n        \"戊\",\n        -12.66727352142334\n      ],\n      [\n        \"柏\",\n        -12.667357444763184\n      ],\n      [\n        \"▁頭取\",\n        -12.667479515075684\n      ],\n      [\n        \"▁岩石\",\n        -12.66749095916748\n      ],\n      [\n        \"▁ャ\",\n        -12.667583465576172\n      ],\n      [\n        \"▁1874\",\n        -12.667603492736816\n      ],\n      [\n        \"▁向き合って\",\n        -12.667675971984863\n      ],\n      [\n        \"▁兵役\",\n        -12.667914390563965\n      ],\n      [\n        \"棄\",\n        -12.667917251586914\n      ],\n      [\n        \"▁サーカス\",\n        -12.668145179748535\n      ],\n      [\n        \"董\",\n        -12.668179512023926\n      ],\n      [\n        \"▁ドバイ\",\n        -12.668251991271973\n      ],\n      [\n        \"▁和らげ\",\n        -12.668349266052246\n      ],\n      [\n        \"▁たしかに\",\n        -12.668400764465332\n      ],\n      [\n        \"▁体積\",\n        -12.668478012084961\n      ],\n      [\n        \"ister\",\n        -12.668739318847656\n      ],\n      [\n        \"▁フライデー\",\n        -12.668835639953613\n      ],\n      [\n        \"直し\",\n        -12.668874740600586\n      ],\n      [\n        \"フォール\",\n        -12.668905258178711\n      ],\n      [\n        \"▁三宮\",\n        -12.668930053710938\n      ],\n      [\n        \"▁!!\",\n        -12.668977737426758\n      ],\n      [\n        \"berg\",\n        -12.669086456298828\n      ],\n      [\n        \"▁安価で\",\n        -12.669116973876953\n      ],\n      [\n        \"▁工廠\",\n        -12.669160842895508\n      ],\n      [\n        \"lick\",\n        -12.669208526611328\n      ],\n      [\n        \"▁努めた\",\n        -12.669211387634277\n      ],\n      [\n        \"▁クッキング\",\n        -12.669325828552246\n      ],\n      [\n        \"▁利き\",\n        -12.669379234313965\n      ],\n      [\n        \"▁長者\",\n        -12.669394493103027\n      ],\n      [\n        \"▁ゐる\",\n        -12.669425964355469\n      ],\n      [\n        \"▁最寄\",\n        -12.669506072998047\n      ],\n      [\n        \"▁消息\",\n        -12.669559478759766\n      ],\n      [\n        \"徽\",\n        -12.669708251953125\n      ],\n      [\n        \"▁墨田\",\n        -12.669731140136719\n      ],\n      [\n        \"▁厳し\",\n        -12.669732093811035\n      ],\n      [\n        \"▁重度\",\n        -12.669795989990234\n      ],\n      [\n        \"▁Photo\",\n        -12.669885635375977\n      ],\n      [\n        \"▁ベーシスト\",\n        -12.669896125793457\n      ],\n      [\n        \"▁停留場\",\n        -12.669896125793457\n      ],\n      [\n        \"▁デイサービス\",\n        -12.669954299926758\n      ],\n      [\n        \"▁公卿\",\n        -12.669986724853516\n      ],\n      [\n        \"rv\",\n        -12.670012474060059\n      ],\n      [\n        \"▁鳥栖\",\n        -12.67013168334961\n      ],\n      [\n        \"マルク\",\n        -12.67017936706543\n      ],\n      [\n        \"魁\",\n        -12.670270919799805\n      ],\n      [\n        \"▁Chi\",\n        -12.670315742492676\n      ],\n      [\n        \"チョー\",\n        -12.670320510864258\n      ],\n      [\n        \"スウェーデン\",\n        -12.670379638671875\n      ],\n      [\n        \"欺\",\n        -12.670458793640137\n      ],\n      [\n        \"▁潰し\",\n        -12.670653343200684\n      ],\n      [\n        \"▁zip\",\n        -12.670744895935059\n      ],\n      [\n        \"ミノキシジル\",\n        -12.670833587646484\n      ],\n      [\n        \"▁上質な\",\n        -12.670841217041016\n      ],\n      [\n        \"▁池上\",\n        -12.67093563079834\n      ],\n      [\n        \"▁クイン\",\n        -12.671050071716309\n      ],\n      [\n        \"瞬時\",\n        -12.67109203338623\n      ],\n      [\n        \"▁足首\",\n        -12.671119689941406\n      ],\n      [\n        \"▁中途半端\",\n        -12.671209335327148\n      ],\n      [\n        \"レッタ\",\n        -12.671269416809082\n      ],\n      [\n        \"フォト\",\n        -12.67128849029541\n      ],\n      [\n        \"▁歯磨き\",\n        -12.67139720916748\n      ],\n      [\n        \"租\",\n        -12.671399116516113\n      ],\n      [\n        \"▁挙動\",\n        -12.671540260314941\n      ],\n      [\n        \"▁似合\",\n        -12.671570777893066\n      ],\n      [\n        \"▁世襲\",\n        -12.671615600585938\n      ],\n      [\n        \"概略\",\n        -12.671623229980469\n      ],\n      [\n        \"▁オンエア\",\n        -12.671822547912598\n      ],\n      [\n        \"陸軍\",\n        -12.67184829711914\n      ],\n      [\n        \"イメージ\",\n        -12.671902656555176\n      ],\n      [\n        \"クラフト\",\n        -12.671914100646973\n      ],\n      [\n        \"▁冷め\",\n        -12.671928405761719\n      ],\n      [\n        \"▁商材\",\n        -12.672104835510254\n      ],\n      [\n        \"▁恋活\",\n        -12.672140121459961\n      ],\n      [\n        \"▁揃った\",\n        -12.67215633392334\n      ],\n      [\n        \"▁不可欠な\",\n        -12.672165870666504\n      ],\n      [\n        \"▁加湿\",\n        -12.672224998474121\n      ],\n      [\n        \"厩\",\n        -12.67233657836914\n      ],\n      [\n        \"喬\",\n        -12.672337532043457\n      ],\n      [\n        \"▁リュウ\",\n        -12.672613143920898\n      ],\n      [\n        \"セレ\",\n        -12.672642707824707\n      ],\n      [\n        \"▁唱える\",\n        -12.672713279724121\n      ],\n      [\n        \"▁減量\",\n        -12.672714233398438\n      ],\n      [\n        \"▁動いた\",\n        -12.672952651977539\n      ],\n      [\n        \"▁そごう\",\n        -12.672959327697754\n      ],\n      [\n        \"▁手洗い\",\n        -12.673001289367676\n      ],\n      [\n        \"▁trans\",\n        -12.673016548156738\n      ],\n      [\n        \"▁対人\",\n        -12.67308235168457\n      ],\n      [\n        \"▁自生\",\n        -12.6731595993042\n      ],\n      [\n        \"戚\",\n        -12.673392295837402\n      ],\n      [\n        \"▁Your\",\n        -12.673456192016602\n      ],\n      [\n        \"yan\",\n        -12.673476219177246\n      ],\n      [\n        \"▁Leg\",\n        -12.673572540283203\n      ],\n      [\n        \"▁突き出\",\n        -12.673741340637207\n      ],\n      [\n        \"▁ナマ\",\n        -12.67387580871582\n      ],\n      [\n        \"色々な\",\n        -12.6738862991333\n      ],\n      [\n        \"▁和名\",\n        -12.674012184143066\n      ],\n      [\n        \"▁済ませる\",\n        -12.674142837524414\n      ],\n      [\n        \"▁用事\",\n        -12.674186706542969\n      ],\n      [\n        \"FM\",\n        -12.674545288085938\n      ],\n      [\n        \"▁驚愕\",\n        -12.674596786499023\n      ],\n      [\n        \"ドーム\",\n        -12.674616813659668\n      ],\n      [\n        \"▁コレクター\",\n        -12.674671173095703\n      ],\n      [\n        \"徴\",\n        -12.674883842468262\n      ],\n      [\n        \"▁レーサー\",\n        -12.675005912780762\n      ],\n      [\n        \"▁案外\",\n        -12.67509937286377\n      ],\n      [\n        \"▁004\",\n        -12.67516040802002\n      ],\n      [\n        \"▁TSUTAYA\",\n        -12.675161361694336\n      ],\n      [\n        \"イングランド\",\n        -12.6751708984375\n      ],\n      [\n        \"▁1875\",\n        -12.675175666809082\n      ],\n      [\n        \"っしり\",\n        -12.675176620483398\n      ],\n      [\n        \"▁Consultant\",\n        -12.675350189208984\n      ],\n      [\n        \"▁セクキャバ\",\n        -12.675350189208984\n      ],\n      [\n        \"▁錬金術\",\n        -12.675350189208984\n      ],\n      [\n        \"▁噴射\",\n        -12.675376892089844\n      ],\n      [\n        \"どうして\",\n        -12.675393104553223\n      ],\n      [\n        \"表題\",\n        -12.675472259521484\n      ],\n      [\n        \"佐賀\",\n        -12.675577163696289\n      ],\n      [\n        \"▁居て\",\n        -12.675599098205566\n      ],\n      [\n        \"unk\",\n        -12.675677299499512\n      ],\n      [\n        \"▁打倒\",\n        -12.675713539123535\n      ],\n      [\n        \"zen\",\n        -12.675870895385742\n      ],\n      [\n        \"▁ティム\",\n        -12.675891876220703\n      ],\n      [\n        \"▁拠れば\",\n        -12.675918579101562\n      ],\n      [\n        \"▁ナザレ\",\n        -12.675926208496094\n      ],\n      [\n        \"▁オークランド\",\n        -12.67603588104248\n      ],\n      [\n        \"▁パイパン\",\n        -12.676048278808594\n      ],\n      [\n        \"▁西野\",\n        -12.67609691619873\n      ],\n      [\n        \"▁進言\",\n        -12.676101684570312\n      ],\n      [\n        \"▁ハンブルク\",\n        -12.676122665405273\n      ],\n      [\n        \"▁打ち明け\",\n        -12.67618465423584\n      ],\n      [\n        \"ぼろ\",\n        -12.676226615905762\n      ],\n      [\n        \"oli\",\n        -12.67626953125\n      ],\n      [\n        \"▁よろ\",\n        -12.676276206970215\n      ],\n      [\n        \"▁直行\",\n        -12.676288604736328\n      ],\n      [\n        \"昆\",\n        -12.67629337310791\n      ],\n      [\n        \"ua\",\n        -12.676298141479492\n      ],\n      [\n        \"pin\",\n        -12.67644214630127\n      ],\n      [\n        \"▁出迎え\",\n        -12.676486015319824\n      ],\n      [\n        \"▁Ass\",\n        -12.676582336425781\n      ],\n      [\n        \"▁1867\",\n        -12.67658519744873\n      ],\n      [\n        \"▁下さる\",\n        -12.676627159118652\n      ],\n      [\n        \"▁Imp\",\n        -12.676725387573242\n      ],\n      [\n        \"eat\",\n        -12.676762580871582\n      ],\n      [\n        \"▁いかにも\",\n        -12.67678451538086\n      ],\n      [\n        \"▁性交\",\n        -12.676850318908691\n      ],\n      [\n        \"▁顕彰\",\n        -12.67686653137207\n      ],\n      [\n        \"▁忍び\",\n        -12.676870346069336\n      ],\n      [\n        \"An\",\n        -12.676974296569824\n      ],\n      [\n        \"▁まとまった\",\n        -12.677014350891113\n      ],\n      [\n        \"負け\",\n        -12.67717170715332\n      ],\n      [\n        \"ベント\",\n        -12.677202224731445\n      ],\n      [\n        \"窟\",\n        -12.67723274230957\n      ],\n      [\n        \"▁小坂\",\n        -12.677314758300781\n      ],\n      [\n        \"粕\",\n        -12.6774263381958\n      ],\n      [\n        \"ラックス\",\n        -12.677434921264648\n      ],\n      [\n        \"▁同定\",\n        -12.677471160888672\n      ],\n      [\n        \"房総\",\n        -12.677504539489746\n      ],\n      [\n        \"アウ\",\n        -12.677559852600098\n      ],\n      [\n        \"▁通した\",\n        -12.677695274353027\n      ],\n      [\n        \"▁チャイナ\",\n        -12.677810668945312\n      ],\n      [\n        \"lim\",\n        -12.677875518798828\n      ],\n      [\n        \"▁貯水\",\n        -12.677992820739746\n      ],\n      [\n        \"▁ケニア\",\n        -12.678009986877441\n      ],\n      [\n        \"▁アナタ\",\n        -12.678275108337402\n      ],\n      [\n        \"▁培った\",\n        -12.678306579589844\n      ],\n      [\n        \"キャンペーン\",\n        -12.678357124328613\n      ],\n      [\n        \"▁White\",\n        -12.678400039672852\n      ],\n      [\n        \"▁星空\",\n        -12.678423881530762\n      ],\n      [\n        \"▁弱体\",\n        -12.678483963012695\n      ],\n      [\n        \"▁近海\",\n        -12.67857551574707\n      ],\n      [\n        \"▁ナウ\",\n        -12.678638458251953\n      ],\n      [\n        \"▁ボトム\",\n        -12.678693771362305\n      ],\n      [\n        \"▁察知\",\n        -12.678750991821289\n      ],\n      [\n        \"▁松前\",\n        -12.678799629211426\n      ],\n      [\n        \"▁アワー\",\n        -12.67881965637207\n      ],\n      [\n        \"▁霧島\",\n        -12.67891788482666\n      ],\n      [\n        \"加藤\",\n        -12.678976058959961\n      ],\n      [\n        \"▁異母\",\n        -12.679097175598145\n      ],\n      [\n        \"▁除籍\",\n        -12.679179191589355\n      ],\n      [\n        \"▁懇談\",\n        -12.67931842803955\n      ],\n      [\n        \"▁激戦\",\n        -12.679405212402344\n      ],\n      [\n        \"海軍\",\n        -12.67947006225586\n      ],\n      [\n        \"屯\",\n        -12.679498672485352\n      ],\n      [\n        \"▁バトン\",\n        -12.679633140563965\n      ],\n      [\n        \"ツィア\",\n        -12.679670333862305\n      ],\n      [\n        \"▁闇金\",\n        -12.6798095703125\n      ],\n      [\n        \"任意\",\n        -12.679875373840332\n      ],\n      [\n        \"▁嵯峨\",\n        -12.679886817932129\n      ],\n      [\n        \"フライ\",\n        -12.679948806762695\n      ],\n      [\n        \"▁1877\",\n        -12.679986000061035\n      ],\n      [\n        \"▁デイヴィッド\",\n        -12.680075645446777\n      ],\n      [\n        \"▁唾液\",\n        -12.680075645446777\n      ],\n      [\n        \"▁マグネット\",\n        -12.680206298828125\n      ],\n      [\n        \"抗うつ薬\",\n        -12.680265426635742\n      ],\n      [\n        \"▁泳\",\n        -12.680266380310059\n      ],\n      [\n        \"oco\",\n        -12.680290222167969\n      ],\n      [\n        \"ケラ\",\n        -12.680364608764648\n      ],\n      [\n        \"ライナー\",\n        -12.68037223815918\n      ],\n      [\n        \"ISE\",\n        -12.68052864074707\n      ],\n      [\n        \"▁ウォレット\",\n        -12.680717468261719\n      ],\n      [\n        \"▁羽毛\",\n        -12.68075180053711\n      ],\n      [\n        \"▁悪用\",\n        -12.680819511413574\n      ],\n      [\n        \"九郎\",\n        -12.680839538574219\n      ],\n      [\n        \"▁Big\",\n        -12.6808500289917\n      ],\n      [\n        \"▁嘔吐\",\n        -12.681023597717285\n      ],\n      [\n        \"▁当たり前に\",\n        -12.681059837341309\n      ],\n      [\n        \"▁ばかりです\",\n        -12.681108474731445\n      ],\n      [\n        \"▁BBQ\",\n        -12.681146621704102\n      ],\n      [\n        \"▁不眠\",\n        -12.68128776550293\n      ],\n      [\n        \"▁WH\",\n        -12.681307792663574\n      ],\n      [\n        \"▁轟\",\n        -12.681355476379395\n      ],\n      [\n        \"▁けが\",\n        -12.681380271911621\n      ],\n      [\n        \"▁もたらして\",\n        -12.681432723999023\n      ],\n      [\n        \"内部\",\n        -12.681486129760742\n      ],\n      [\n        \"▁古今\",\n        -12.681489944458008\n      ],\n      [\n        \"▁レクリエーション\",\n        -12.681782722473145\n      ],\n      [\n        \"▁ブロガー\",\n        -12.68181324005127\n      ],\n      [\n        \"▁ロブ\",\n        -12.68193244934082\n      ],\n      [\n        \"▁沸騰\",\n        -12.681977272033691\n      ],\n      [\n        \"予選\",\n        -12.68203353881836\n      ],\n      [\n        \"巧\",\n        -12.682146072387695\n      ],\n      [\n        \"▁ウェルター\",\n        -12.682241439819336\n      ],\n      [\n        \"楓\",\n        -12.682352066040039\n      ],\n      [\n        \"▁分科\",\n        -12.682367324829102\n      ],\n      [\n        \"▁右派\",\n        -12.682378768920898\n      ],\n      [\n        \"sky\",\n        -12.682433128356934\n      ],\n      [\n        \"▁儲か\",\n        -12.682433128356934\n      ],\n      [\n        \"▁のぼる\",\n        -12.68244743347168\n      ],\n      [\n        \"通販\",\n        -12.682528495788574\n      ],\n      [\n        \"▁鶏肉\",\n        -12.682599067687988\n      ],\n      [\n        \"▁SOUL\",\n        -12.682604789733887\n      ],\n      [\n        \"▁根底\",\n        -12.682719230651855\n      ],\n      [\n        \"▁盗み\",\n        -12.682723045349121\n      ],\n      [\n        \"▁フォレスト\",\n        -12.682758331298828\n      ],\n      [\n        \"▁Society\",\n        -12.68292236328125\n      ],\n      [\n        \"慈\",\n        -12.682926177978516\n      ],\n      [\n        \"姉妹\",\n        -12.68295669555664\n      ],\n      [\n        \"摘\",\n        -12.683079719543457\n      ],\n      [\n        \"▁ワニ\",\n        -12.68310832977295\n      ],\n      [\n        \"機械\",\n        -12.68315315246582\n      ],\n      [\n        \"▁不要です\",\n        -12.683199882507324\n      ],\n      [\n        \"▁休ま\",\n        -12.683231353759766\n      ],\n      [\n        \"玩\",\n        -12.683300971984863\n      ],\n      [\n        \"▁断った\",\n        -12.683333396911621\n      ],\n      [\n        \"目標\",\n        -12.683470726013184\n      ],\n      [\n        \"▁密接な\",\n        -12.683613777160645\n      ],\n      [\n        \"▁ハンバーガー\",\n        -12.683682441711426\n      ],\n      [\n        \"競技\",\n        -12.683732032775879\n      ],\n      [\n        \"▁迷った\",\n        -12.683852195739746\n      ],\n      [\n        \"▁流体\",\n        -12.683918952941895\n      ],\n      [\n        \"Com\",\n        -12.683948516845703\n      ],\n      [\n        \"▁まんこ\",\n        -12.683950424194336\n      ],\n      [\n        \"▁憧れて\",\n        -12.683980941772461\n      ],\n      [\n        \"▁大通り\",\n        -12.68403148651123\n      ],\n      [\n        \"大野\",\n        -12.684242248535156\n      ],\n      [\n        \"隼\",\n        -12.68425178527832\n      ],\n      [\n        \"▁弾いて\",\n        -12.684274673461914\n      ],\n      [\n        \"©\",\n        -12.684287071228027\n      ],\n      [\n        \"▁佐川\",\n        -12.684370994567871\n      ],\n      [\n        \"▁北見\",\n        -12.684419631958008\n      ],\n      [\n        \"▁Galaxy\",\n        -12.684443473815918\n      ],\n      [\n        \"▁Min\",\n        -12.68450927734375\n      ],\n      [\n        \"▁笑わ\",\n        -12.684779167175293\n      ],\n      [\n        \"昂\",\n        -12.684823989868164\n      ],\n      [\n        \"nan\",\n        -12.684956550598145\n      ],\n      [\n        \"壕\",\n        -12.685014724731445\n      ],\n      [\n        \"▁無くなった\",\n        -12.685036659240723\n      ],\n      [\n        \"▁囲む\",\n        -12.685171127319336\n      ],\n      [\n        \"▁官報\",\n        -12.685190200805664\n      ],\n      [\n        \"▁Comments\",\n        -12.685215950012207\n      ],\n      [\n        \"ARE\",\n        -12.685294151306152\n      ],\n      [\n        \"▁刻み\",\n        -12.685405731201172\n      ],\n      [\n        \"ips\",\n        -12.685440063476562\n      ],\n      [\n        \"rew\",\n        -12.685571670532227\n      ],\n      [\n        \"▁孤児\",\n        -12.685585975646973\n      ],\n      [\n        \"▁えっ\",\n        -12.685604095458984\n      ],\n      [\n        \"▁洋書\",\n        -12.685614585876465\n      ],\n      [\n        \"ッロ\",\n        -12.685638427734375\n      ],\n      [\n        \"議会\",\n        -12.685713768005371\n      ],\n      [\n        \"▁Cu\",\n        -12.685746192932129\n      ],\n      [\n        \"▁ハンデ\",\n        -12.685839653015137\n      ],\n      [\n        \"hiro\",\n        -12.685900688171387\n      ],\n      [\n        \"▁出兵\",\n        -12.68598461151123\n      ],\n      [\n        \"mus\",\n        -12.685985565185547\n      ],\n      [\n        \"キヤ\",\n        -12.686036109924316\n      ],\n      [\n        \"揮\",\n        -12.68605899810791\n      ],\n      [\n        \"rip\",\n        -12.686129570007324\n      ],\n      [\n        \"▁マスメディア\",\n        -12.686199188232422\n      ],\n      [\n        \"フラワー\",\n        -12.686199188232422\n      ],\n      [\n        \"びた\",\n        -12.686283111572266\n      ],\n      [\n        \"▁バラード\",\n        -12.686333656311035\n      ],\n      [\n        \"▁指南\",\n        -12.686384201049805\n      ],\n      [\n        \"ポップ\",\n        -12.686453819274902\n      ],\n      [\n        \"▁カンヌ\",\n        -12.686467170715332\n      ],\n      [\n        \"別に\",\n        -12.686530113220215\n      ],\n      [\n        \"鯛\",\n        -12.686538696289062\n      ],\n      [\n        \"懇\",\n        -12.686728477478027\n      ],\n      [\n        \"▁ツッコミ\",\n        -12.686729431152344\n      ],\n      [\n        \"場合\",\n        -12.686753273010254\n      ],\n      [\n        \"手術\",\n        -12.68686580657959\n      ],\n      [\n        \"▁Games\",\n        -12.686893463134766\n      ],\n      [\n        \"▁Tri\",\n        -12.687010765075684\n      ],\n      [\n        \"▁イワ\",\n        -12.687151908874512\n      ],\n      [\n        \"▁マンコ\",\n        -12.687219619750977\n      ],\n      [\n        \"▁尽くし\",\n        -12.687226295471191\n      ],\n      [\n        \"▁前衛\",\n        -12.687244415283203\n      ],\n      [\n        \"▁ジャマイカ\",\n        -12.687302589416504\n      ],\n      [\n        \"▁倒壊\",\n        -12.687313079833984\n      ],\n      [\n        \"▁欠か\",\n        -12.68738842010498\n      ],\n      [\n        \"▁男児\",\n        -12.687399864196777\n      ],\n      [\n        \"▁病床\",\n        -12.687469482421875\n      ],\n      [\n        \"▁モナコ\",\n        -12.687494277954102\n      ],\n      [\n        \"▁宝暦\",\n        -12.687792778015137\n      ],\n      [\n        \"▁耐える\",\n        -12.687814712524414\n      ],\n      [\n        \"既存\",\n        -12.68795108795166\n      ],\n      [\n        \"▁Del\",\n        -12.68802547454834\n      ],\n      [\n        \"▁フィオナ\",\n        -12.688066482543945\n      ],\n      [\n        \"▁ベラルーシ\",\n        -12.688066482543945\n      ],\n      [\n        \"▁クリーク\",\n        -12.688089370727539\n      ],\n      [\n        \"▁史実\",\n        -12.68812084197998\n      ],\n      [\n        \"▁クロニクル\",\n        -12.688257217407227\n      ],\n      [\n        \"▁メルボルン\",\n        -12.688257217407227\n      ],\n      [\n        \"槌\",\n        -12.688257217407227\n      ],\n      [\n        \"ピロ\",\n        -12.688318252563477\n      ],\n      [\n        \"olf\",\n        -12.688360214233398\n      ],\n      [\n        \"▁ミシェル\",\n        -12.688393592834473\n      ],\n      [\n        \"▁View\",\n        -12.688459396362305\n      ],\n      [\n        \"ステップ\",\n        -12.68860149383545\n      ],\n      [\n        \"宜\",\n        -12.688610076904297\n      ],\n      [\n        \"▁元気で\",\n        -12.688688278198242\n      ],\n      [\n        \"▁時速\",\n        -12.688802719116211\n      ],\n      [\n        \"▁翌朝\",\n        -12.688822746276855\n      ],\n      [\n        \"▁Sal\",\n        -12.68883228302002\n      ],\n      [\n        \"▁坂井\",\n        -12.688884735107422\n      ],\n      [\n        \"▁張る\",\n        -12.688941955566406\n      ],\n      [\n        \"▁後払い\",\n        -12.688955307006836\n      ],\n      [\n        \"▁バレンシア\",\n        -12.689021110534668\n      ],\n      [\n        \"▁スプーン\",\n        -12.689213752746582\n      ],\n      [\n        \"▁コールド\",\n        -12.689240455627441\n      ],\n      [\n        \"魔法\",\n        -12.689249038696289\n      ],\n      [\n        \"法人\",\n        -12.68925666809082\n      ],\n      [\n        \"ヴォル\",\n        -12.6892671585083\n      ],\n      [\n        \"▁万葉\",\n        -12.689273834228516\n      ],\n      [\n        \"▁ナイン\",\n        -12.689301490783691\n      ],\n      [\n        \"▁倒した\",\n        -12.689458847045898\n      ],\n      [\n        \"▁還\",\n        -12.689573287963867\n      ],\n      [\n        \"▁1879\",\n        -12.689701080322266\n      ],\n      [\n        \"▁礼儀\",\n        -12.689844131469727\n      ],\n      [\n        \"▁極上\",\n        -12.690099716186523\n      ],\n      [\n        \"フェア\",\n        -12.69013500213623\n      ],\n      [\n        \"▁騒が\",\n        -12.69017505645752\n      ],\n      [\n        \"▁SHOP\",\n        -12.69021987915039\n      ],\n      [\n        \"うーん\",\n        -12.690317153930664\n      ],\n      [\n        \"ald\",\n        -12.690322875976562\n      ],\n      [\n        \"▁推し進め\",\n        -12.690362930297852\n      ],\n      [\n        \"▁アッシュ\",\n        -12.690557479858398\n      ],\n      [\n        \"ゾル\",\n        -12.690608978271484\n      ],\n      [\n        \"兼ね\",\n        -12.690622329711914\n      ],\n      [\n        \"▁発砲\",\n        -12.690765380859375\n      ],\n      [\n        \"筆者\",\n        -12.690898895263672\n      ],\n      [\n        \"専用\",\n        -12.690969467163086\n      ],\n      [\n        \"▁クリントン\",\n        -12.691035270690918\n      ],\n      [\n        \"ales\",\n        -12.691095352172852\n      ],\n      [\n        \"▁平ら\",\n        -12.691120147705078\n      ],\n      [\n        \"▁ウルグアイ\",\n        -12.691126823425293\n      ],\n      [\n        \"▁心得\",\n        -12.69119930267334\n      ],\n      [\n        \"▁〟\",\n        -12.691263198852539\n      ],\n      [\n        \"▁当方\",\n        -12.691302299499512\n      ],\n      [\n        \"▁index\",\n        -12.691319465637207\n      ],\n      [\n        \"ティクス\",\n        -12.691433906555176\n      ],\n      [\n        \"▁ミント\",\n        -12.691459655761719\n      ],\n      [\n        \"▁たるみ\",\n        -12.691533088684082\n      ],\n      [\n        \"▁川内\",\n        -12.691587448120117\n      ],\n      [\n        \"▁フレア\",\n        -12.691612243652344\n      ],\n      [\n        \"▁加古川\",\n        -12.691701889038086\n      ],\n      [\n        \"▁昆布\",\n        -12.691701889038086\n      ],\n      [\n        \"▁おっさん\",\n        -12.691704750061035\n      ],\n      [\n        \"▁一途\",\n        -12.691742897033691\n      ],\n      [\n        \"▁多量\",\n        -12.691757202148438\n      ],\n      [\n        \"▁就寝\",\n        -12.691912651062012\n      ],\n      [\n        \"ヴェイ\",\n        -12.691920280456543\n      ],\n      [\n        \"▁ステート\",\n        -12.691924095153809\n      ],\n      [\n        \"rec\",\n        -12.691947937011719\n      ],\n      [\n        \"▁ビーフ\",\n        -12.692009925842285\n      ],\n      [\n        \"▁来たら\",\n        -12.692066192626953\n      ],\n      [\n        \"▁久しぶり\",\n        -12.692083358764648\n      ],\n      [\n        \"ツアー\",\n        -12.692137718200684\n      ],\n      [\n        \"▁公約\",\n        -12.692157745361328\n      ],\n      [\n        \"▁ゼリー\",\n        -12.692187309265137\n      ],\n      [\n        \"▁棄却\",\n        -12.692276954650879\n      ],\n      [\n        \"1889\",\n        -12.692378044128418\n      ],\n      [\n        \"▁スロ\",\n        -12.692460060119629\n      ],\n      [\n        \"▁トリノ\",\n        -12.692461013793945\n      ],\n      [\n        \"▁つぶやき\",\n        -12.692468643188477\n      ],\n      [\n        \"▁ž\",\n        -12.692469596862793\n      ],\n      [\n        \"▁オペレーター\",\n        -12.692660331726074\n      ],\n      [\n        \"▁疎開\",\n        -12.692744255065918\n      ],\n      [\n        \"cus\",\n        -12.692764282226562\n      ],\n      [\n        \"▁リピート\",\n        -12.692852973937988\n      ],\n      [\n        \"ao\",\n        -12.69294261932373\n      ],\n      [\n        \"▁引き締め\",\n        -12.693094253540039\n      ],\n      [\n        \"▁応急\",\n        -12.693126678466797\n      ],\n      [\n        \"▁分家\",\n        -12.693181037902832\n      ],\n      [\n        \"▁ムーブメント\",\n        -12.693236351013184\n      ],\n      [\n        \"▁アーバン\",\n        -12.693272590637207\n      ],\n      [\n        \"吻\",\n        -12.693428039550781\n      ],\n      [\n        \"▁ルドルフ\",\n        -12.693428993225098\n      ],\n      [\n        \"稜\",\n        -12.693619728088379\n      ],\n      [\n        \"▁めぐみ\",\n        -12.693764686584473\n      ],\n      [\n        \"▁正午\",\n        -12.693795204162598\n      ],\n      [\n        \"▁許せ\",\n        -12.693848609924316\n      ],\n      [\n        \"▁End\",\n        -12.69388484954834\n      ],\n      [\n        \"青山\",\n        -12.693900108337402\n      ],\n      [\n        \"▁刺身\",\n        -12.69392204284668\n      ],\n      [\n        \"▁絶えず\",\n        -12.693947792053223\n      ],\n      [\n        \"時計\",\n        -12.693949699401855\n      ],\n      [\n        \"▁ソフトボール\",\n        -12.693990707397461\n      ],\n      [\n        \"▁官庁\",\n        -12.693991661071777\n      ],\n      [\n        \"▁別々に\",\n        -12.694007873535156\n      ],\n      [\n        \"ova\",\n        -12.694120407104492\n      ],\n      [\n        \"▁フラグ\",\n        -12.69417667388916\n      ],\n      [\n        \"DF\",\n        -12.694330215454102\n      ],\n      [\n        \"▁魔導\",\n        -12.694445610046387\n      ],\n      [\n        \"▁鑑み\",\n        -12.694562911987305\n      ],\n      [\n        \"▁界隈\",\n        -12.69467544555664\n      ],\n      [\n        \"▁流行って\",\n        -12.694753646850586\n      ],\n      [\n        \"▁download\",\n        -12.694966316223145\n      ],\n      [\n        \"▁ユーティリティ\",\n        -12.694966316223145\n      ],\n      [\n        \"▁ガンガン\",\n        -12.69515323638916\n      ],\n      [\n        \"湘\",\n        -12.695158004760742\n      ],\n      [\n        \"視聴\",\n        -12.695323944091797\n      ],\n      [\n        \"▁2,500\",\n        -12.695355415344238\n      ],\n      [\n        \"成長\",\n        -12.695388793945312\n      ],\n      [\n        \"▁保温\",\n        -12.695515632629395\n      ],\n      [\n        \"▁篠原\",\n        -12.695542335510254\n      ],\n      [\n        \"ผ\",\n        -12.69554328918457\n      ],\n      [\n        \"▁キャロル\",\n        -12.695544242858887\n      ],\n      [\n        \"▁1863\",\n        -12.695562362670898\n      ],\n      [\n        \"▁納豆\",\n        -12.695569038391113\n      ],\n      [\n        \"aru\",\n        -12.695707321166992\n      ],\n      [\n        \"庶\",\n        -12.695731163024902\n      ],\n      [\n        \"▁カウンタ\",\n        -12.69587230682373\n      ],\n      [\n        \"▁奔走\",\n        -12.695927619934082\n      ],\n      [\n        \"lie\",\n        -12.695985794067383\n      ],\n      [\n        \"​\",\n        -12.696059226989746\n      ],\n      [\n        \"匿\",\n        -12.696102142333984\n      ],\n      [\n        \"▁Op\",\n        -12.696189880371094\n      ],\n      [\n        \"▁サイレント\",\n        -12.696195602416992\n      ],\n      [\n        \"▁占有\",\n        -12.696197509765625\n      ],\n      [\n        \"▁思春期\",\n        -12.696398735046387\n      ],\n      [\n        \"▁クルーゼ\",\n        -12.696429252624512\n      ],\n      [\n        \"▁国府\",\n        -12.696455955505371\n      ],\n      [\n        \"▁書式\",\n        -12.696808815002441\n      ],\n      [\n        \"ヒン\",\n        -12.696964263916016\n      ],\n      [\n        \"▁企\",\n        -12.696966171264648\n      ],\n      [\n        \"ウィル\",\n        -12.696975708007812\n      ],\n      [\n        \"▁洋食\",\n        -12.697037696838379\n      ],\n      [\n        \"▁飛車\",\n        -12.697123527526855\n      ],\n      [\n        \"バニ\",\n        -12.697187423706055\n      ],\n      [\n        \"特殊\",\n        -12.697237968444824\n      ],\n      [\n        \"▁元祖\",\n        -12.697253227233887\n      ],\n      [\n        \"陪\",\n        -12.69727611541748\n      ],\n      [\n        \"▁グラミー\",\n        -12.697347640991211\n      ],\n      [\n        \"▁セーラー\",\n        -12.697440147399902\n      ],\n      [\n        \"▁物足りな\",\n        -12.697468757629395\n      ],\n      [\n        \"▁困惑\",\n        -12.697469711303711\n      ],\n      [\n        \"▁福知山\",\n        -12.697469711303711\n      ],\n      [\n        \"▁害虫\",\n        -12.69752311706543\n      ],\n      [\n        \"▁天野\",\n        -12.697611808776855\n      ],\n      [\n        \"朱\",\n        -12.697613716125488\n      ],\n      [\n        \"窪\",\n        -12.697617530822754\n      ],\n      [\n        \"▁杉山\",\n        -12.697653770446777\n      ],\n      [\n        \"▁スパイダー\",\n        -12.697752952575684\n      ],\n      [\n        \"▁ポテト\",\n        -12.697855949401855\n      ],\n      [\n        \"栄養\",\n        -12.697904586791992\n      ],\n      [\n        \"需\",\n        -12.697911262512207\n      ],\n      [\n        \"嘆\",\n        -12.69797420501709\n      ],\n      [\n        \"▁御前\",\n        -12.698027610778809\n      ],\n      [\n        \"▁デリケート\",\n        -12.698047637939453\n      ],\n      [\n        \"▁余計に\",\n        -12.698047637939453\n      ],\n      [\n        \"▁替えて\",\n        -12.698263168334961\n      ],\n      [\n        \"ニェ\",\n        -12.698278427124023\n      ],\n      [\n        \"数学\",\n        -12.69827938079834\n      ],\n      [\n        \"▁嘱託\",\n        -12.698433876037598\n      ],\n      [\n        \"▁要した\",\n        -12.69844913482666\n      ],\n      [\n        \"▁通気\",\n        -12.698505401611328\n      ],\n      [\n        \"▁love\",\n        -12.69865608215332\n      ],\n      [\n        \"▁春日井\",\n        -12.698721885681152\n      ],\n      [\n        \"▁ライブラリー\",\n        -12.698728561401367\n      ],\n      [\n        \"▁駐輪場\",\n        -12.698820114135742\n      ],\n      [\n        \"▁ぶち\",\n        -12.698945045471191\n      ],\n      [\n        \"▁ヒップ\",\n        -12.69914436340332\n      ],\n      [\n        \"▁レポ\",\n        -12.699164390563965\n      ],\n      [\n        \"▁Link\",\n        -12.699183464050293\n      ],\n      [\n        \"▁覗き\",\n        -12.699207305908203\n      ],\n      [\n        \"▁マーベル\",\n        -12.699214935302734\n      ],\n      [\n        \"▁ペナルティ\",\n        -12.699315071105957\n      ],\n      [\n        \"kt\",\n        -12.699345588684082\n      ],\n      [\n        \"▁紀行\",\n        -12.699464797973633\n      ],\n      [\n        \"中学生\",\n        -12.69968032836914\n      ],\n      [\n        \"▁Express\",\n        -12.699807167053223\n      ],\n      [\n        \"▁歌曲\",\n        -12.699841499328613\n      ],\n      [\n        \"▁カルト\",\n        -12.6998872756958\n      ],\n      [\n        \"▁失格\",\n        -12.699894905090332\n      ],\n      [\n        \"▁ドロー\",\n        -12.700071334838867\n      ],\n      [\n        \"▁目立って\",\n        -12.700116157531738\n      ],\n      [\n        \"▁バロック\",\n        -12.70012378692627\n      ],\n      [\n        \"▁湿気\",\n        -12.700139999389648\n      ],\n      [\n        \"REAL\",\n        -12.700174331665039\n      ],\n      [\n        \"業界\",\n        -12.700191497802734\n      ],\n      [\n        \"入って\",\n        -12.700386047363281\n      ],\n      [\n        \"▁接収\",\n        -12.700456619262695\n      ],\n      [\n        \"▁THC\",\n        -12.700540542602539\n      ],\n      [\n        \"▁アベ\",\n        -12.700554847717285\n      ],\n      [\n        \"▁正直な\",\n        -12.70057487487793\n      ],\n      [\n        \"ディッシュ\",\n        -12.700586318969727\n      ],\n      [\n        \"▁外傷\",\n        -12.700663566589355\n      ],\n      [\n        \"▁描け\",\n        -12.70080280303955\n      ],\n      [\n        \"カブト\",\n        -12.700843811035156\n      ],\n      [\n        \"▁石碑\",\n        -12.70092487335205\n      ],\n      [\n        \"こんなに\",\n        -12.701054573059082\n      ],\n      [\n        \"▁道のり\",\n        -12.70110034942627\n      ],\n      [\n        \"▁GUI\",\n        -12.701146125793457\n      ],\n      [\n        \"▁ひげ\",\n        -12.701168060302734\n      ],\n      [\n        \"▁クーラー\",\n        -12.701172828674316\n      ],\n      [\n        \"備考\",\n        -12.701197624206543\n      ],\n      [\n        \"ウエ\",\n        -12.701215744018555\n      ],\n      [\n        \"Alexa\",\n        -12.701269149780273\n      ],\n      [\n        \"カビ\",\n        -12.701448440551758\n      ],\n      [\n        \"▁稲葉\",\n        -12.701459884643555\n      ],\n      [\n        \"実家\",\n        -12.701556205749512\n      ],\n      [\n        \"PT\",\n        -12.701594352722168\n      ],\n      [\n        \"▁メシ\",\n        -12.701605796813965\n      ],\n      [\n        \"▁粘り\",\n        -12.701739311218262\n      ],\n      [\n        \"▁苦しく\",\n        -12.701822280883789\n      ],\n      [\n        \"▁またがる\",\n        -12.701896667480469\n      ],\n      [\n        \"鷺\",\n        -12.702107429504395\n      ],\n      [\n        \"生物\",\n        -12.702180862426758\n      ],\n      [\n        \"▁リポーター\",\n        -12.702260971069336\n      ],\n      [\n        \"控\",\n        -12.702298164367676\n      ],\n      [\n        \"▁とどまり\",\n        -12.702309608459473\n      ],\n      [\n        \"在学\",\n        -12.702392578125\n      ],\n      [\n        \"▁値する\",\n        -12.702491760253906\n      ],\n      [\n        \"▁太く\",\n        -12.70261287689209\n      ],\n      [\n        \"▁WIN\",\n        -12.702646255493164\n      ],\n      [\n        \"▁柔術\",\n        -12.702688217163086\n      ],\n      [\n        \"▁満開\",\n        -12.70275592803955\n      ],\n      [\n        \"▁ヨット\",\n        -12.702781677246094\n      ],\n      [\n        \"ali\",\n        -12.702939987182617\n      ],\n      [\n        \"▁増減\",\n        -12.70297908782959\n      ],\n      [\n        \"γ\",\n        -12.703076362609863\n      ],\n      [\n        \"▁おっしゃる\",\n        -12.703079223632812\n      ],\n      [\n        \"小金井\",\n        -12.703146934509277\n      ],\n      [\n        \"TEC\",\n        -12.703189849853516\n      ],\n      [\n        \"▁盛んで\",\n        -12.703368186950684\n      ],\n      [\n        \"目次\",\n        -12.70343017578125\n      ],\n      [\n        \"▁SUV\",\n        -12.703454971313477\n      ],\n      [\n        \"▁1862\",\n        -12.703459739685059\n      ],\n      [\n        \"氣\",\n        -12.70346450805664\n      ],\n      [\n        \"▁アサヒ\",\n        -12.703511238098145\n      ],\n      [\n        \"▁ビットコイン\",\n        -12.703658103942871\n      ],\n      [\n        \"▁無用\",\n        -12.703697204589844\n      ],\n      [\n        \"るべき\",\n        -12.7037992477417\n      ],\n      [\n        \"▁キース\",\n        -12.703848838806152\n      ],\n      [\n        \"▁しまわ\",\n        -12.704129219055176\n      ],\n      [\n        \"▁富んだ\",\n        -12.70423412322998\n      ],\n      [\n        \"▁掴み\",\n        -12.704241752624512\n      ],\n      [\n        \"晃\",\n        -12.70424747467041\n      ],\n      [\n        \"発表\",\n        -12.704344749450684\n      ],\n      [\n        \"北朝鮮\",\n        -12.704428672790527\n      ],\n      [\n        \"▁まちづくり\",\n        -12.704434394836426\n      ],\n      [\n        \"▁むすめ\",\n        -12.704434394836426\n      ],\n      [\n        \"▁合作\",\n        -12.704648971557617\n      ],\n      [\n        \"ヒャ\",\n        -12.704751968383789\n      ],\n      [\n        \"屋根\",\n        -12.704766273498535\n      ],\n      [\n        \"エース\",\n        -12.70482063293457\n      ],\n      [\n        \"▁Hz\",\n        -12.704850196838379\n      ],\n      [\n        \"▁透け\",\n        -12.704861640930176\n      ],\n      [\n        \"▁降った\",\n        -12.704891204833984\n      ],\n      [\n        \"気持ち\",\n        -12.704936027526855\n      ],\n      [\n        \"▁志賀\",\n        -12.70495319366455\n      ],\n      [\n        \"▁仕上げる\",\n        -12.705015182495117\n      ],\n      [\n        \"▁相次いだ\",\n        -12.70501708984375\n      ],\n      [\n        \"膠\",\n        -12.70501708984375\n      ],\n      [\n        \"▁甲州\",\n        -12.705080032348633\n      ],\n      [\n        \"▁アルバート\",\n        -12.705100059509277\n      ],\n      [\n        \"ette\",\n        -12.705169677734375\n      ],\n      [\n        \"▁勝敗\",\n        -12.705238342285156\n      ],\n      [\n        \"▁規律\",\n        -12.705599784851074\n      ],\n      [\n        \"▁RED\",\n        -12.705610275268555\n      ],\n      [\n        \"▁エックス\",\n        -12.705620765686035\n      ],\n      [\n        \"▁棄権\",\n        -12.705794334411621\n      ],\n      [\n        \"▁学費\",\n        -12.70585823059082\n      ],\n      [\n        \"▁廃墟\",\n        -12.705992698669434\n      ],\n      [\n        \"▁嬲\",\n        -12.706192970275879\n      ],\n      [\n        \"ミュージック\",\n        -12.70620346069336\n      ],\n      [\n        \"▁PSP\",\n        -12.706221580505371\n      ],\n      [\n        \"web\",\n        -12.706239700317383\n      ],\n      [\n        \"▁望月\",\n        -12.706284523010254\n      ],\n      [\n        \"▁勝てる\",\n        -12.706303596496582\n      ],\n      [\n        \"▁壊れた\",\n        -12.706315040588379\n      ],\n      [\n        \"市民\",\n        -12.706405639648438\n      ],\n      [\n        \"▁いのち\",\n        -12.706510543823242\n      ],\n      [\n        \"▁見なし\",\n        -12.706657409667969\n      ],\n      [\n        \"▁古本\",\n        -12.706686019897461\n      ],\n      [\n        \"▁赤穂\",\n        -12.70671272277832\n      ],\n      [\n        \"▁ちか\",\n        -12.706742286682129\n      ],\n      [\n        \"onic\",\n        -12.706801414489746\n      ],\n      [\n        \"▁頑張れ\",\n        -12.706844329833984\n      ],\n      [\n        \"▁もらわ\",\n        -12.707025527954102\n      ],\n      [\n        \"▁羽織\",\n        -12.707130432128906\n      ],\n      [\n        \"ally\",\n        -12.707237243652344\n      ],\n      [\n        \"▁入党\",\n        -12.70724868774414\n      ],\n      [\n        \"▁Suica\",\n        -12.707380294799805\n      ],\n      [\n        \"▁唐津\",\n        -12.707412719726562\n      ],\n      [\n        \"▁値下げ\",\n        -12.707586288452148\n      ],\n      [\n        \"▁綺麗で\",\n        -12.70766544342041\n      ],\n      [\n        \"IBA\",\n        -12.707671165466309\n      ],\n      [\n        \"▁キラー\",\n        -12.707845687866211\n      ],\n      [\n        \"▁順で\",\n        -12.707889556884766\n      ],\n      [\n        \"▁オンデマンド\",\n        -12.707935333251953\n      ],\n      [\n        \"▁亡き\",\n        -12.707937240600586\n      ],\n      [\n        \"▁気楽に\",\n        -12.707939147949219\n      ],\n      [\n        \"▁太り\",\n        -12.708013534545898\n      ],\n      [\n        \"▁戦法\",\n        -12.708024978637695\n      ],\n      [\n        \"▁アルジェリア\",\n        -12.708130836486816\n      ],\n      [\n        \"▁便利で\",\n        -12.708352088928223\n      ],\n      [\n        \"ร\",\n        -12.708362579345703\n      ],\n      [\n        \"展示\",\n        -12.708402633666992\n      ],\n      [\n        \"諭\",\n        -12.708471298217773\n      ],\n      [\n        \"▁≪\",\n        -12.708477020263672\n      ],\n      [\n        \"▁ちなんだ\",\n        -12.708520889282227\n      ],\n      [\n        \"▁サンクトペテルブルク\",\n        -12.708587646484375\n      ],\n      [\n        \"▁アダプタ\",\n        -12.708614349365234\n      ],\n      [\n        \"ドライバー\",\n        -12.708667755126953\n      ],\n      [\n        \"▁アッパー\",\n        -12.708752632141113\n      ],\n      [\n        \"▁伝播\",\n        -12.708757400512695\n      ],\n      [\n        \"休日\",\n        -12.708767890930176\n      ],\n      [\n        \"oni\",\n        -12.7087984085083\n      ],\n      [\n        \"▁ひし\",\n        -12.708822250366211\n      ],\n      [\n        \"▁スギ\",\n        -12.708901405334473\n      ],\n      [\n        \"雇\",\n        -12.708937644958496\n      ],\n      [\n        \"▁交わし\",\n        -12.709074974060059\n      ],\n      [\n        \"▁番外\",\n        -12.709084510803223\n      ],\n      [\n        \"eek\",\n        -12.709122657775879\n      ],\n      [\n        \"▁水銀\",\n        -12.709157943725586\n      ],\n      [\n        \"Life\",\n        -12.709205627441406\n      ],\n      [\n        \"ディーズ\",\n        -12.709219932556152\n      ],\n      [\n        \"▁故人\",\n        -12.709234237670898\n      ],\n      [\n        \"▁産み\",\n        -12.709271430969238\n      ],\n      [\n        \"▁マフィア\",\n        -12.709318161010742\n      ],\n      [\n        \"定義\",\n        -12.709367752075195\n      ],\n      [\n        \"▁頒布\",\n        -12.709495544433594\n      ],\n      [\n        \"▁引数\",\n        -12.709515571594238\n      ],\n      [\n        \"励\",\n        -12.709527015686035\n      ],\n      [\n        \"▁カーン\",\n        -12.709534645080566\n      ],\n      [\n        \"▁ペドロ\",\n        -12.709611892700195\n      ],\n      [\n        \"▁キャサリン\",\n        -12.70969009399414\n      ],\n      [\n        \"▁別れた\",\n        -12.709722518920898\n      ],\n      [\n        \"注文\",\n        -12.709773063659668\n      ],\n      [\n        \"▁インターホン\",\n        -12.709776878356934\n      ],\n      [\n        \"▁かぐや\",\n        -12.709898948669434\n      ],\n      [\n        \"▁活字\",\n        -12.709979057312012\n      ],\n      [\n        \"相続\",\n        -12.710001945495605\n      ],\n      [\n        \"▁論者\",\n        -12.710140228271484\n      ],\n      [\n        \"▁Lv\",\n        -12.710165977478027\n      ],\n      [\n        \"lb\",\n        -12.710175514221191\n      ],\n      [\n        \"▁流派\",\n        -12.710393905639648\n      ],\n      [\n        \"体重\",\n        -12.710519790649414\n      ],\n      [\n        \"▁1883\",\n        -12.710556983947754\n      ],\n      [\n        \"▁支配人\",\n        -12.710598945617676\n      ],\n      [\n        \"渇\",\n        -12.71066665649414\n      ],\n      [\n        \"uff\",\n        -12.710784912109375\n      ],\n      [\n        \"▁肛門\",\n        -12.710862159729004\n      ],\n      [\n        \"▁粘膜\",\n        -12.71088981628418\n      ],\n      [\n        \"▁神父\",\n        -12.711019515991211\n      ],\n      [\n        \"▁オタ\",\n        -12.7110595703125\n      ],\n      [\n        \"▁フライング\",\n        -12.711078643798828\n      ],\n      [\n        \"▁積雪\",\n        -12.711163520812988\n      ],\n      [\n        \"▁ジェーン\",\n        -12.711182594299316\n      ],\n      [\n        \"墳丘\",\n        -12.711216926574707\n      ],\n      [\n        \"▁偽り\",\n        -12.711238861083984\n      ],\n      [\n        \"▁楽な\",\n        -12.711256980895996\n      ],\n      [\n        \"1916\",\n        -12.71166706085205\n      ],\n      [\n        \"▁ペルシャ\",\n        -12.7117338180542\n      ],\n      [\n        \"▁肥後\",\n        -12.711771965026855\n      ],\n      [\n        \"▁耕作\",\n        -12.711838722229004\n      ],\n      [\n        \"▁GHQ\",\n        -12.711840629577637\n      ],\n      [\n        \"中島\",\n        -12.711860656738281\n      ],\n      [\n        \"elle\",\n        -12.71194076538086\n      ],\n      [\n        \"▁始めよう\",\n        -12.711997032165527\n      ],\n      [\n        \"▁毛皮\",\n        -12.712164878845215\n      ],\n      [\n        \"▁Pan\",\n        -12.712272644042969\n      ],\n      [\n        \"▁ゆい\",\n        -12.712318420410156\n      ],\n      [\n        \"nit\",\n        -12.712702751159668\n      ],\n      [\n        \"▁明かして\",\n        -12.712748527526855\n      ],\n      [\n        \"吏\",\n        -12.71287727355957\n      ],\n      [\n        \"▁異端\",\n        -12.713001251220703\n      ],\n      [\n        \"▁リフレ\",\n        -12.713092803955078\n      ],\n      [\n        \"櫛\",\n        -12.713210105895996\n      ],\n      [\n        \"蹟\",\n        -12.713210105895996\n      ],\n      [\n        \"▁飼料\",\n        -12.713223457336426\n      ],\n      [\n        \"シタ\",\n        -12.713233947753906\n      ],\n      [\n        \"▁あがって\",\n        -12.71330451965332\n      ],\n      [\n        \"▁貸金\",\n        -12.713401794433594\n      ],\n      [\n        \"▁ヒアリング\",\n        -12.71340560913086\n      ],\n      [\n        \"▁いくらか\",\n        -12.713562965393066\n      ],\n      [\n        \"▁ジャワ\",\n        -12.713563919067383\n      ],\n      [\n        \"泡\",\n        -12.713616371154785\n      ],\n      [\n        \"▁クジラ\",\n        -12.713640213012695\n      ],\n      [\n        \"well\",\n        -12.713656425476074\n      ],\n      [\n        \"▁西南\",\n        -12.713705062866211\n      ],\n      [\n        \"▁9000\",\n        -12.713708877563477\n      ],\n      [\n        \"MENT\",\n        -12.713724136352539\n      ],\n      [\n        \"2,000\",\n        -12.713800430297852\n      ],\n      [\n        \"▁nm\",\n        -12.713850021362305\n      ],\n      [\n        \"▁不祥事\",\n        -12.71385669708252\n      ],\n      [\n        \"▁ルビー\",\n        -12.713946342468262\n      ],\n      [\n        \"▁直下\",\n        -12.713951110839844\n      ],\n      [\n        \"▁万国\",\n        -12.713957786560059\n      ],\n      [\n        \"▁たんぱく\",\n        -12.713994026184082\n      ],\n      [\n        \"▁祭壇\",\n        -12.71410846710205\n      ],\n      [\n        \"▁キュア\",\n        -12.714146614074707\n      ],\n      [\n        \"vision\",\n        -12.714238166809082\n      ],\n      [\n        \"工場\",\n        -12.714303016662598\n      ],\n      [\n        \"▁ネリー\",\n        -12.714445114135742\n      ],\n      [\n        \"▁基質\",\n        -12.71462345123291\n      ],\n      [\n        \"▁ラオス\",\n        -12.71462631225586\n      ],\n      [\n        \"下限\",\n        -12.71463680267334\n      ],\n      [\n        \"word\",\n        -12.714752197265625\n      ],\n      [\n        \"▁宿主\",\n        -12.714778900146484\n      ],\n      [\n        \"▁企て\",\n        -12.714783668518066\n      ],\n      [\n        \"▁BY\",\n        -12.714805603027344\n      ],\n      [\n        \"モク\",\n        -12.7149076461792\n      ],\n      [\n        \"▁レパートリー\",\n        -12.714974403381348\n      ],\n      [\n        \"▁無力\",\n        -12.715008735656738\n      ],\n      [\n        \"▁凹\",\n        -12.71501636505127\n      ],\n      [\n        \"排\",\n        -12.715452194213867\n      ],\n      [\n        \"▁開山\",\n        -12.715597152709961\n      ],\n      [\n        \"▁ウェーブ\",\n        -12.71561336517334\n      ],\n      [\n        \"ドラゴン\",\n        -12.715683937072754\n      ],\n      [\n        \"▁有効である\",\n        -12.715715408325195\n      ],\n      [\n        \"▁透析\",\n        -12.715764999389648\n      ],\n      [\n        \"▁エステル\",\n        -12.715829849243164\n      ],\n      [\n        \"重なる\",\n        -12.7159423828125\n      ],\n      [\n        \"▁完封\",\n        -12.715997695922852\n      ],\n      [\n        \"▁弾力\",\n        -12.716146469116211\n      ],\n      [\n        \"sor\",\n        -12.716181755065918\n      ],\n      [\n        \"▁稔\",\n        -12.716198921203613\n      ],\n      [\n        \"結論\",\n        -12.716207504272461\n      ],\n      [\n        \"尺\",\n        -12.716273307800293\n      ],\n      [\n        \"▁真っ白\",\n        -12.716310501098633\n      ],\n      [\n        \"▁津山\",\n        -12.716341972351074\n      ],\n      [\n        \"▁グラント\",\n        -12.716348648071289\n      ],\n      [\n        \"▁慈善\",\n        -12.716365814208984\n      ],\n      [\n        \"▁赤羽\",\n        -12.71643352508545\n      ],\n      [\n        \"表面\",\n        -12.71656608581543\n      ],\n      [\n        \"▁切除\",\n        -12.716638565063477\n      ],\n      [\n        \"▁ベンガル\",\n        -12.716642379760742\n      ],\n      [\n        \"▁考えたら\",\n        -12.71666145324707\n      ],\n      [\n        \"芋\",\n        -12.716852188110352\n      ],\n      [\n        \"▁平衡\",\n        -12.716878890991211\n      ],\n      [\n        \"▁カオス\",\n        -12.716894149780273\n      ],\n      [\n        \"▁公害\",\n        -12.716936111450195\n      ],\n      [\n        \"▁前立腺\",\n        -12.716938018798828\n      ],\n      [\n        \"▁なぞ\",\n        -12.716986656188965\n      ],\n      [\n        \"履\",\n        -12.717005729675293\n      ],\n      [\n        \"鼠\",\n        -12.717135429382324\n      ],\n      [\n        \"スーツ\",\n        -12.717151641845703\n      ],\n      [\n        \"殺し\",\n        -12.717341423034668\n      ],\n      [\n        \"▁ホームラン\",\n        -12.717536926269531\n      ],\n      [\n        \"▁フォルム\",\n        -12.717543601989746\n      ],\n      [\n        \"▁伸びた\",\n        -12.717595100402832\n      ],\n      [\n        \"山号\",\n        -12.71774673461914\n      ],\n      [\n        \"フィリピン\",\n        -12.717841148376465\n      ],\n      [\n        \"▁賭博\",\n        -12.71792221069336\n      ],\n      [\n        \"利根川\",\n        -12.717935562133789\n      ],\n      [\n        \"▁ハマって\",\n        -12.718026161193848\n      ],\n      [\n        \"▁後編\",\n        -12.718132019042969\n      ],\n      [\n        \"▁鵜\",\n        -12.718223571777344\n      ],\n      [\n        \"▁アンディ\",\n        -12.718235969543457\n      ],\n      [\n        \"といって\",\n        -12.718238830566406\n      ],\n      [\n        \"▁開票\",\n        -12.718344688415527\n      ],\n      [\n        \"駅名\",\n        -12.71838665008545\n      ],\n      [\n        \"▁到底\",\n        -12.718512535095215\n      ],\n      [\n        \"▁ヴェルディ\",\n        -12.718567848205566\n      ],\n      [\n        \"チュール\",\n        -12.71865463256836\n      ],\n      [\n        \"▁余剰\",\n        -12.718720436096191\n      ],\n      [\n        \"▁平穏\",\n        -12.718849182128906\n      ],\n      [\n        \"▁軟骨\",\n        -12.718873023986816\n      ],\n      [\n        \"▁お邪魔\",\n        -12.71890640258789\n      ],\n      [\n        \"ティーノ\",\n        -12.718968391418457\n      ],\n      [\n        \"▁不明に\",\n        -12.71919059753418\n      ],\n      [\n        \"aa\",\n        -12.719292640686035\n      ],\n      [\n        \"▁ENU\",\n        -12.719295501708984\n      ],\n      [\n        \"▁クリミア\",\n        -12.719405174255371\n      ],\n      [\n        \"▁観賞\",\n        -12.719423294067383\n      ],\n      [\n        \"錫\",\n        -12.719497680664062\n      ],\n      [\n        \"灰\",\n        -12.719502449035645\n      ],\n      [\n        \"OUR\",\n        -12.71955394744873\n      ],\n      [\n        \"▁書院\",\n        -12.71962833404541\n      ],\n      [\n        \"▁Association\",\n        -12.719694137573242\n      ],\n      [\n        \"百合\",\n        -12.719741821289062\n      ],\n      [\n        \"長期\",\n        -12.719780921936035\n      ],\n      [\n        \"▁こうとう\",\n        -12.719878196716309\n      ],\n      [\n        \"▁塗布\",\n        -12.719929695129395\n      ],\n      [\n        \"▁取消\",\n        -12.71994686126709\n      ],\n      [\n        \"▁超越\",\n        -12.719971656799316\n      ],\n      [\n        \"rap\",\n        -12.719983100891113\n      ],\n      [\n        \"▁悪性\",\n        -12.720170974731445\n      ],\n      [\n        \"▁グノ\",\n        -12.720200538635254\n      ],\n      [\n        \"▁特製\",\n        -12.720475196838379\n      ],\n      [\n        \"▁コロニー\",\n        -12.720487594604492\n      ],\n      [\n        \"▁天明\",\n        -12.720505714416504\n      ],\n      [\n        \"▁法華\",\n        -12.720520973205566\n      ],\n      [\n        \"1908\",\n        -12.72072696685791\n      ],\n      [\n        \"▁久保田\",\n        -12.720818519592285\n      ],\n      [\n        \"叫\",\n        -12.720854759216309\n      ],\n      [\n        \"▁沼田\",\n        -12.720903396606445\n      ],\n      [\n        \"畔\",\n        -12.721033096313477\n      ],\n      [\n        \"咸\",\n        -12.721076011657715\n      ],\n      [\n        \"▁殴り\",\n        -12.721168518066406\n      ],\n      [\n        \"▁胸部\",\n        -12.721294403076172\n      ],\n      [\n        \"▁あそこ\",\n        -12.721303939819336\n      ],\n      [\n        \"▁色気\",\n        -12.721431732177734\n      ],\n      [\n        \"▁カテ\",\n        -12.721525192260742\n      ],\n      [\n        \"ó\",\n        -12.721538543701172\n      ],\n      [\n        \"地下\",\n        -12.721632957458496\n      ],\n      [\n        \"攻撃\",\n        -12.721701622009277\n      ],\n      [\n        \"▁助産\",\n        -12.721858978271484\n      ],\n      [\n        \"▁ピクセル\",\n        -12.721912384033203\n      ],\n      [\n        \"iga\",\n        -12.721940040588379\n      ],\n      [\n        \"学習\",\n        -12.721972465515137\n      ],\n      [\n        \"あらゆる\",\n        -12.722015380859375\n      ],\n      [\n        \"朴\",\n        -12.72205638885498\n      ],\n      [\n        \"▁上手い\",\n        -12.72231388092041\n      ],\n      [\n        \"▁優良な\",\n        -12.722389221191406\n      ],\n      [\n        \"▁下級\",\n        -12.722419738769531\n      ],\n      [\n        \"▁可能であった\",\n        -12.722479820251465\n      ],\n      [\n        \"▁宮中\",\n        -12.722586631774902\n      ],\n      [\n        \"▁バルーン\",\n        -12.722649574279785\n      ],\n      [\n        \"▁太もも\",\n        -12.72265625\n      ],\n      [\n        \"扶\",\n        -12.72265625\n      ],\n      [\n        \"pu\",\n        -12.722686767578125\n      ],\n      [\n        \"▁ミケ\",\n        -12.722779273986816\n      ],\n      [\n        \"マネー\",\n        -12.722797393798828\n      ],\n      [\n        \"▁未亡人\",\n        -12.722853660583496\n      ],\n      [\n        \"radi\",\n        -12.72288990020752\n      ],\n      [\n        \"▁軽快\",\n        -12.722965240478516\n      ],\n      [\n        \"▁母方\",\n        -12.723031044006348\n      ],\n      [\n        \"▁責務\",\n        -12.723052978515625\n      ],\n      [\n        \"▁ペースト\",\n        -12.723068237304688\n      ],\n      [\n        \"▁放浪\",\n        -12.72309684753418\n      ],\n      [\n        \"▁開港\",\n        -12.723398208618164\n      ],\n      [\n        \"▁ブリュッセル\",\n        -12.723454475402832\n      ],\n      [\n        \"▁学業\",\n        -12.723647117614746\n      ],\n      [\n        \"▁とどまる\",\n        -12.723651885986328\n      ],\n      [\n        \"▁WORK\",\n        -12.723836898803711\n      ],\n      [\n        \"▁呪術\",\n        -12.723869323730469\n      ],\n      [\n        \"ドライ\",\n        -12.724137306213379\n      ],\n      [\n        \"今朝\",\n        -12.724205017089844\n      ],\n      [\n        \"▁父母\",\n        -12.724226951599121\n      ],\n      [\n        \"怨\",\n        -12.724239349365234\n      ],\n      [\n        \"▁銭湯\",\n        -12.72429370880127\n      ],\n      [\n        \"～～～\",\n        -12.724384307861328\n      ],\n      [\n        \"▁幼馴染\",\n        -12.72443675994873\n      ],\n      [\n        \"▁延ばし\",\n        -12.724515914916992\n      ],\n      [\n        \"彰\",\n        -12.72454833984375\n      ],\n      [\n        \"握\",\n        -12.724593162536621\n      ],\n      [\n        \"矩\",\n        -12.724635124206543\n      ],\n      [\n        \"▁ジャンボ\",\n        -12.72485637664795\n      ],\n      [\n        \"▁フェー\",\n        -12.725043296813965\n      ],\n      [\n        \"▁奈々\",\n        -12.725065231323242\n      ],\n      [\n        \"▁口頭\",\n        -12.72509765625\n      ],\n      [\n        \"▁カーペット\",\n        -12.725129127502441\n      ],\n      [\n        \"▁無くなり\",\n        -12.725177764892578\n      ],\n      [\n        \"▁大変だった\",\n        -12.72522258758545\n      ],\n      [\n        \"▁吹く\",\n        -12.7256441116333\n      ],\n      [\n        \"▁802\",\n        -12.725820541381836\n      ],\n      [\n        \"▁サンドイッチ\",\n        -12.725824356079102\n      ],\n      [\n        \"▁茶道\",\n        -12.726066589355469\n      ],\n      [\n        \"▁反則\",\n        -12.726107597351074\n      ],\n      [\n        \"八幡\",\n        -12.726119041442871\n      ],\n      [\n        \"1907\",\n        -12.72616195678711\n      ],\n      [\n        \"▁阿弥陀\",\n        -12.726420402526855\n      ],\n      [\n        \"▁置き場\",\n        -12.726451873779297\n      ],\n      [\n        \"▁煙草\",\n        -12.72651481628418\n      ],\n      [\n        \"暑い\",\n        -12.726624488830566\n      ],\n      [\n        \"▁ヴァージョン\",\n        -12.726862907409668\n      ],\n      [\n        \"渋谷\",\n        -12.726893424987793\n      ],\n      [\n        \"オミ\",\n        -12.72714614868164\n      ],\n      [\n        \"▁有効です\",\n        -12.727170944213867\n      ],\n      [\n        \"▁車載\",\n        -12.727270126342773\n      ],\n      [\n        \"ject\",\n        -12.727293968200684\n      ],\n      [\n        \"▁子音\",\n        -12.727302551269531\n      ],\n      [\n        \"▁飢え\",\n        -12.727472305297852\n      ],\n      [\n        \"nce\",\n        -12.72754192352295\n      ],\n      [\n        \"▁馳せ\",\n        -12.727664947509766\n      ],\n      [\n        \"350\",\n        -12.727679252624512\n      ],\n      [\n        \"▁バイナリ\",\n        -12.727768898010254\n      ],\n      [\n        \"▁不可能に\",\n        -12.727788925170898\n      ],\n      [\n        \"鮭\",\n        -12.72780990600586\n      ],\n      [\n        \"▁ルーフ\",\n        -12.727867126464844\n      ],\n      [\n        \"屋敷\",\n        -12.72808837890625\n      ],\n      [\n        \"▁申し入れ\",\n        -12.728090286254883\n      ],\n      [\n        \"▁マニアック\",\n        -12.728103637695312\n      ],\n      [\n        \"▁宇多\",\n        -12.7282133102417\n      ],\n      [\n        \"▁蒲田\",\n        -12.728214263916016\n      ],\n      [\n        \"民間\",\n        -12.72823715209961\n      ],\n      [\n        \"▁悲鳴\",\n        -12.728421211242676\n      ],\n      [\n        \"▁桑名\",\n        -12.728473663330078\n      ],\n      [\n        \"▁見守る\",\n        -12.728608131408691\n      ],\n      [\n        \"ement\",\n        -12.728620529174805\n      ],\n      [\n        \"road\",\n        -12.728662490844727\n      ],\n      [\n        \"▁選べば\",\n        -12.728666305541992\n      ],\n      [\n        \"▁生年\",\n        -12.728713989257812\n      ],\n      [\n        \"随所\",\n        -12.728754043579102\n      ],\n      [\n        \"▁済ま\",\n        -12.728926658630371\n      ],\n      [\n        \"▁導いて\",\n        -12.729000091552734\n      ],\n      [\n        \"▁LGBT\",\n        -12.729008674621582\n      ],\n      [\n        \"▁情緒\",\n        -12.729049682617188\n      ],\n      [\n        \"▁総監\",\n        -12.729129791259766\n      ],\n      [\n        \"▁朝鮮民主主義人民共和国\",\n        -12.729169845581055\n      ],\n      [\n        \"APP\",\n        -12.729244232177734\n      ],\n      [\n        \"モンゴル\",\n        -12.72928237915039\n      ],\n      [\n        \"ギング\",\n        -12.729329109191895\n      ],\n      [\n        \"▁みなす\",\n        -12.729618072509766\n      ],\n      [\n        \"挺\",\n        -12.729734420776367\n      ],\n      [\n        \"▁フェルディナン\",\n        -12.729802131652832\n      ],\n      [\n        \"▁全編\",\n        -12.729842185974121\n      ],\n      [\n        \"墳\",\n        -12.729857444763184\n      ],\n      [\n        \"▁痩せる\",\n        -12.72989559173584\n      ],\n      [\n        \"range\",\n        -12.729928970336914\n      ],\n      [\n        \"▁Anniversary\",\n        -12.729998588562012\n      ],\n      [\n        \"▁適性\",\n        -12.730013847351074\n      ],\n      [\n        \"▁ロータス\",\n        -12.730046272277832\n      ],\n      [\n        \"▁インターン\",\n        -12.730056762695312\n      ],\n      [\n        \"▁戸塚\",\n        -12.730056762695312\n      ],\n      [\n        \"reat\",\n        -12.730057716369629\n      ],\n      [\n        \"▁金星\",\n        -12.730132102966309\n      ],\n      [\n        \"メイク\",\n        -12.730252265930176\n      ],\n      [\n        \"▁堀江\",\n        -12.73035717010498\n      ],\n      [\n        \"▁そろえ\",\n        -12.73038101196289\n      ],\n      [\n        \"▁パンデミック\",\n        -12.73039722442627\n      ],\n      [\n        \"▁嫌がらせ\",\n        -12.73039722442627\n      ],\n      [\n        \"▁時系列\",\n        -12.73039722442627\n      ],\n      [\n        \"コンビニ\",\n        -12.730419158935547\n      ],\n      [\n        \"gle\",\n        -12.730488777160645\n      ],\n      [\n        \"まして\",\n        -12.730550765991211\n      ],\n      [\n        \"▁イチゴ\",\n        -12.730637550354004\n      ],\n      [\n        \"▁主翼\",\n        -12.7306547164917\n      ],\n      [\n        \"▁ゴードン\",\n        -12.730731010437012\n      ],\n      [\n        \"▁山東\",\n        -12.730857849121094\n      ],\n      [\n        \"魚沼\",\n        -12.73095417022705\n      ],\n      [\n        \"▁信条\",\n        -12.731029510498047\n      ],\n      [\n        \"▁有明\",\n        -12.731033325195312\n      ],\n      [\n        \"▁滝川\",\n        -12.731098175048828\n      ],\n      [\n        \"▁黒く\",\n        -12.7311372756958\n      ],\n      [\n        \"▁ホント\",\n        -12.731234550476074\n      ],\n      [\n        \"ヶ崎\",\n        -12.73125171661377\n      ],\n      [\n        \"オフィス\",\n        -12.73143482208252\n      ],\n      [\n        \"▁č\",\n        -12.731598854064941\n      ],\n      [\n        \"▁走れ\",\n        -12.731626510620117\n      ],\n      [\n        \"▁デビル\",\n        -12.731729507446289\n      ],\n      [\n        \"▁様々です\",\n        -12.731935501098633\n      ],\n      [\n        \"▁吉村\",\n        -12.732078552246094\n      ],\n      [\n        \"▁Gold\",\n        -12.73215103149414\n      ],\n      [\n        \"本格\",\n        -12.732186317443848\n      ],\n      [\n        \"懐\",\n        -12.732234001159668\n      ],\n      [\n        \"トリン\",\n        -12.7324800491333\n      ],\n      [\n        \"▁シンクロ\",\n        -12.732492446899414\n      ],\n      [\n        \"作家\",\n        -12.732625007629395\n      ],\n      [\n        \"▁半田\",\n        -12.732787132263184\n      ],\n      [\n        \"▁五島\",\n        -12.732844352722168\n      ],\n      [\n        \"▁必要だった\",\n        -12.732879638671875\n      ],\n      [\n        \"▁下回る\",\n        -12.732993125915527\n      ],\n      [\n        \"▁休息\",\n        -12.73305892944336\n      ],\n      [\n        \"▁野望\",\n        -12.733098983764648\n      ],\n      [\n        \"▁葬式\",\n        -12.733110427856445\n      ],\n      [\n        \"▁ミツ\",\n        -12.733183860778809\n      ],\n      [\n        \"▁敢えて\",\n        -12.733190536499023\n      ],\n      [\n        \"牡\",\n        -12.733190536499023\n      ],\n      [\n        \"▁HOUSE\",\n        -12.733196258544922\n      ],\n      [\n        \"OVER\",\n        -12.73321533203125\n      ],\n      [\n        \"ARI\",\n        -12.733220100402832\n      ],\n      [\n        \"▁放り\",\n        -12.73327922821045\n      ],\n      [\n        \"▁返上\",\n        -12.73330020904541\n      ],\n      [\n        \"▁あたかも\",\n        -12.733390808105469\n      ],\n      [\n        \"▁細分\",\n        -12.733465194702148\n      ],\n      [\n        \"汚\",\n        -12.733471870422363\n      ],\n      [\n        \"▁第一人者\",\n        -12.733590126037598\n      ],\n      [\n        \"▁パイズリ\",\n        -12.733591079711914\n      ],\n      [\n        \"▁オールインワン\",\n        -12.733990669250488\n      ],\n      [\n        \"▁海浜\",\n        -12.73404312133789\n      ],\n      [\n        \"嬉\",\n        -12.734161376953125\n      ],\n      [\n        \"†\",\n        -12.734189987182617\n      ],\n      [\n        \"▁船員\",\n        -12.73419189453125\n      ],\n      [\n        \"種類\",\n        -12.734206199645996\n      ],\n      [\n        \"▁美脚\",\n        -12.734553337097168\n      ],\n      [\n        \"アリス\",\n        -12.734556198120117\n      ],\n      [\n        \"▁旺盛\",\n        -12.734590530395508\n      ],\n      [\n        \"▁黎明\",\n        -12.734591484069824\n      ],\n      [\n        \"▁架かる\",\n        -12.734790802001953\n      ],\n      [\n        \"▁騙し\",\n        -12.734888076782227\n      ],\n      [\n        \"▁運休\",\n        -12.734905242919922\n      ],\n      [\n        \"▁知行\",\n        -12.734914779663086\n      ],\n      [\n        \"▁フューチャー\",\n        -12.734992027282715\n      ],\n      [\n        \"▁伝染\",\n        -12.73504638671875\n      ],\n      [\n        \"ソフ\",\n        -12.735115051269531\n      ],\n      [\n        \"hor\",\n        -12.735133171081543\n      ],\n      [\n        \"隔\",\n        -12.735212326049805\n      ],\n      [\n        \"洗い\",\n        -12.73533821105957\n      ],\n      [\n        \"♂\",\n        -12.735391616821289\n      ],\n      [\n        \"▁載せる\",\n        -12.735416412353516\n      ],\n      [\n        \"▁前項\",\n        -12.735495567321777\n      ],\n      [\n        \"Go\",\n        -12.735511779785156\n      ],\n      [\n        \"▁マサ\",\n        -12.735514640808105\n      ],\n      [\n        \"最寄り\",\n        -12.735658645629883\n      ],\n      [\n        \"んぷ\",\n        -12.735828399658203\n      ],\n      [\n        \"nim\",\n        -12.73582935333252\n      ],\n      [\n        \"▁フレーバー\",\n        -12.735857009887695\n      ],\n      [\n        \"とりわけ\",\n        -12.735859870910645\n      ],\n      [\n        \"▁築造\",\n        -12.735926628112793\n      ],\n      [\n        \"▁泊まり\",\n        -12.736005783081055\n      ],\n      [\n        \"軒\",\n        -12.736055374145508\n      ],\n      [\n        \"▁素数\",\n        -12.736133575439453\n      ],\n      [\n        \"▁対等\",\n        -12.736149787902832\n      ],\n      [\n        \"▁シェイクスピア\",\n        -12.73619270324707\n      ],\n      [\n        \"▁ワルシャワ\",\n        -12.736392974853516\n      ],\n      [\n        \"▁碁\",\n        -12.736455917358398\n      ],\n      [\n        \"▁ポチ\",\n        -12.736565589904785\n      ],\n      [\n        \"▁ホステス\",\n        -12.736593246459961\n      ],\n      [\n        \"天気\",\n        -12.736684799194336\n      ],\n      [\n        \"fect\",\n        -12.736825942993164\n      ],\n      [\n        \"▁モレ\",\n        -12.73684024810791\n      ],\n      [\n        \"果たして\",\n        -12.736879348754883\n      ],\n      [\n        \"NEX\",\n        -12.736888885498047\n      ],\n      [\n        \"▁悪徳\",\n        -12.737138748168945\n      ],\n      [\n        \"▁ミリタリー\",\n        -12.737404823303223\n      ],\n      [\n        \"濁\",\n        -12.737479209899902\n      ],\n      [\n        \"▁礎\",\n        -12.737536430358887\n      ],\n      [\n        \"TBS\",\n        -12.737554550170898\n      ],\n      [\n        \"▁銘打\",\n        -12.737642288208008\n      ],\n      [\n        \"▁山村\",\n        -12.737789154052734\n      ],\n      [\n        \"▁アルテ\",\n        -12.738203048706055\n      ],\n      [\n        \"デレ\",\n        -12.738283157348633\n      ],\n      [\n        \"すごく\",\n        -12.738411903381348\n      ],\n      [\n        \"▁エーカー\",\n        -12.738436698913574\n      ],\n      [\n        \"PORT\",\n        -12.73846435546875\n      ],\n      [\n        \"▁マネージメント\",\n        -12.738600730895996\n      ],\n      [\n        \"▁修業\",\n        -12.738604545593262\n      ],\n      [\n        \"オカ\",\n        -12.738656044006348\n      ],\n      [\n        \"▁門前\",\n        -12.738676071166992\n      ],\n      [\n        \"ウズベキスタン\",\n        -12.738801956176758\n      ],\n      [\n        \"▁鳩山\",\n        -12.738889694213867\n      ],\n      [\n        \"▁村長\",\n        -12.739165306091309\n      ],\n      [\n        \"▁コーポレート\",\n        -12.739203453063965\n      ],\n      [\n        \"▁バルカン\",\n        -12.73933219909668\n      ],\n      [\n        \"▁欠く\",\n        -12.73941421508789\n      ],\n      [\n        \"巌\",\n        -12.739605903625488\n      ],\n      [\n        \"▁景勝\",\n        -12.739786148071289\n      ],\n      [\n        \"▁琵琶湖\",\n        -12.739816665649414\n      ],\n      [\n        \"▁戻れ\",\n        -12.739896774291992\n      ],\n      [\n        \"▁電荷\",\n        -12.73990249633789\n      ],\n      [\n        \"▁直人\",\n        -12.740309715270996\n      ],\n      [\n        \"▁曲がり\",\n        -12.74039077758789\n      ],\n      [\n        \"▁FREE\",\n        -12.74046802520752\n      ],\n      [\n        \"▁ヴュルテンベルク\",\n        -12.740813255310059\n      ],\n      [\n        \"▁ガンバ\",\n        -12.740880966186523\n      ],\n      [\n        \"ware\",\n        -12.741053581237793\n      ],\n      [\n        \"▁管弦楽\",\n        -12.741302490234375\n      ],\n      [\n        \"Qu\",\n        -12.741320610046387\n      ],\n      [\n        \"▁ひがし\",\n        -12.741375923156738\n      ],\n      [\n        \"▁味わえ\",\n        -12.741528511047363\n      ],\n      [\n        \"▁呑\",\n        -12.741584777832031\n      ],\n      [\n        \"▁アンソニー\",\n        -12.741704940795898\n      ],\n      [\n        \"叔\",\n        -12.7418212890625\n      ],\n      [\n        \"ポスト\",\n        -12.742098808288574\n      ],\n      [\n        \"▁ヒンドゥー\",\n        -12.742231369018555\n      ],\n      [\n        \"ぱん\",\n        -12.74232006072998\n      ],\n      [\n        \"dai\",\n        -12.742369651794434\n      ],\n      [\n        \"▁オシ\",\n        -12.742587089538574\n      ],\n      [\n        \"ヴィッツ\",\n        -12.742598533630371\n      ],\n      [\n        \"磐\",\n        -12.742724418640137\n      ],\n      [\n        \"▁二重\",\n        -12.742796897888184\n      ],\n      [\n        \"▁アングル\",\n        -12.742886543273926\n      ],\n      [\n        \"精品\",\n        -12.742900848388672\n      ],\n      [\n        \"▁カリスマ\",\n        -12.74303150177002\n      ],\n      [\n        \"デモ\",\n        -12.74310302734375\n      ],\n      [\n        \"▁酒場\",\n        -12.743135452270508\n      ],\n      [\n        \"▁コナミ\",\n        -12.743237495422363\n      ],\n      [\n        \"eld\",\n        -12.74330997467041\n      ],\n      [\n        \"alo\",\n        -12.743349075317383\n      ],\n      [\n        \"子育て\",\n        -12.743361473083496\n      ],\n      [\n        \"▁ひとつひとつ\",\n        -12.74350357055664\n      ],\n      [\n        \"MX\",\n        -12.743528366088867\n      ],\n      [\n        \"▁薄れ\",\n        -12.74365234375\n      ],\n      [\n        \"▁尚書\",\n        -12.743990898132324\n      ],\n      [\n        \"uma\",\n        -12.744013786315918\n      ],\n      [\n        \"▁帰化\",\n        -12.744308471679688\n      ],\n      [\n        \"▁メイキング\",\n        -12.744343757629395\n      ],\n      [\n        \"ij\",\n        -12.744389533996582\n      ],\n      [\n        \"移動\",\n        -12.744505882263184\n      ],\n      [\n        \"▁天平\",\n        -12.744607925415039\n      ],\n      [\n        \"▁要項\",\n        -12.744675636291504\n      ],\n      [\n        \"ito\",\n        -12.744705200195312\n      ],\n      [\n        \"▁せめて\",\n        -12.744739532470703\n      ],\n      [\n        \"▁ヘルパー\",\n        -12.744840621948242\n      ],\n      [\n        \"lc\",\n        -12.7449312210083\n      ],\n      [\n        \"▁ネクスト\",\n        -12.744978904724121\n      ],\n      [\n        \"For\",\n        -12.745173454284668\n      ],\n      [\n        \"▁クーパー\",\n        -12.745206832885742\n      ],\n      [\n        \"キーワード\",\n        -12.74526309967041\n      ],\n      [\n        \"▁本庄\",\n        -12.745322227478027\n      ],\n      [\n        \"▁小浜\",\n        -12.745370864868164\n      ],\n      [\n        \"チョン\",\n        -12.745372772216797\n      ],\n      [\n        \"▁違え\",\n        -12.745386123657227\n      ],\n      [\n        \"▁荒野\",\n        -12.745413780212402\n      ],\n      [\n        \"ゾーン\",\n        -12.745506286621094\n      ],\n      [\n        \"▁過ご\",\n        -12.745560646057129\n      ],\n      [\n        \"▁アライメント\",\n        -12.745656967163086\n      ],\n      [\n        \"買取\",\n        -12.745661735534668\n      ],\n      [\n        \"▁ひざ\",\n        -12.745762825012207\n      ],\n      [\n        \"▁つなげる\",\n        -12.745819091796875\n      ],\n      [\n        \"▁1850\",\n        -12.745902061462402\n      ],\n      [\n        \"▁Count\",\n        -12.745935440063477\n      ],\n      [\n        \"積み\",\n        -12.746228218078613\n      ],\n      [\n        \"襄\",\n        -12.746264457702637\n      ],\n      [\n        \"▁われ\",\n        -12.746280670166016\n      ],\n      [\n        \"EO\",\n        -12.74632453918457\n      ],\n      [\n        \"おまけに\",\n        -12.746384620666504\n      ],\n      [\n        \"幾\",\n        -12.74640941619873\n      ],\n      [\n        \"▁カヴァー\",\n        -12.746541023254395\n      ],\n      [\n        \"▁繰り出\",\n        -12.746614456176758\n      ],\n      [\n        \"▁遠距離\",\n        -12.746708869934082\n      ],\n      [\n        \"▁自走\",\n        -12.746726989746094\n      ],\n      [\n        \"▁ケージ\",\n        -12.746787071228027\n      ],\n      [\n        \"▁松永\",\n        -12.746803283691406\n      ],\n      [\n        \"▁争奪\",\n        -12.746875762939453\n      ],\n      [\n        \"▁コモ\",\n        -12.747082710266113\n      ],\n      [\n        \"▁湖南\",\n        -12.747082710266113\n      ],\n      [\n        \"▁IIA\",\n        -12.747140884399414\n      ],\n      [\n        \"▁NBC\",\n        -12.747152328491211\n      ],\n      [\n        \"una\",\n        -12.747365951538086\n      ],\n      [\n        \"▁半袖\",\n        -12.747380256652832\n      ],\n      [\n        \"▁平井\",\n        -12.74743366241455\n      ],\n      [\n        \"▁エレガント\",\n        -12.747479438781738\n      ],\n      [\n        \"▁片岡\",\n        -12.747482299804688\n      ],\n      [\n        \"▁天狗\",\n        -12.747528076171875\n      ],\n      [\n        \"▁明神\",\n        -12.747559547424316\n      ],\n      [\n        \"▁綾瀬\",\n        -12.747662544250488\n      ],\n      [\n        \"祠\",\n        -12.747682571411133\n      ],\n      [\n        \"▁足場\",\n        -12.747748374938965\n      ],\n      [\n        \"▁世俗\",\n        -12.747791290283203\n      ],\n      [\n        \"リッヒ\",\n        -12.74787712097168\n      ],\n      [\n        \"▁テロリスト\",\n        -12.747986793518066\n      ],\n      [\n        \"▁入れ替える\",\n        -12.74799919128418\n      ],\n      [\n        \"▁書評\",\n        -12.74805736541748\n      ],\n      [\n        \"▁搬入\",\n        -12.748087882995605\n      ],\n      [\n        \"▁踏んで\",\n        -12.748089790344238\n      ],\n      [\n        \"▁生き残り\",\n        -12.748153686523438\n      ],\n      [\n        \"ski\",\n        -12.748220443725586\n      ],\n      [\n        \"▁些細な\",\n        -12.748291015625\n      ],\n      [\n        \"本稿\",\n        -12.748398780822754\n      ],\n      [\n        \"用途\",\n        -12.748438835144043\n      ],\n      [\n        \"▁ワーカー\",\n        -12.748441696166992\n      ],\n      [\n        \"▁川端\",\n        -12.748552322387695\n      ],\n      [\n        \"▁メカニック\",\n        -12.749009132385254\n      ],\n      [\n        \"▁ほんとに\",\n        -12.749053955078125\n      ],\n      [\n        \"▁愉し\",\n        -12.7491455078125\n      ],\n      [\n        \"寒い\",\n        -12.749152183532715\n      ],\n      [\n        \"▁逸品\",\n        -12.74919605255127\n      ],\n      [\n        \"▁詰める\",\n        -12.749204635620117\n      ],\n      [\n        \"▁戸建\",\n        -12.749284744262695\n      ],\n      [\n        \"▁パレット\",\n        -12.749381065368652\n      ],\n      [\n        \"▁布教\",\n        -12.749407768249512\n      ],\n      [\n        \"▁円墳\",\n        -12.749428749084473\n      ],\n      [\n        \"▁大黒\",\n        -12.749460220336914\n      ],\n      [\n        \"▁逃げた\",\n        -12.749462127685547\n      ],\n      [\n        \"▁SUN\",\n        -12.749485969543457\n      ],\n      [\n        \"離婚\",\n        -12.749527931213379\n      ],\n      [\n        \"▁リウマチ\",\n        -12.749711990356445\n      ],\n      [\n        \"▁不規則\",\n        -12.749711990356445\n      ],\n      [\n        \"▁久久\",\n        -12.749732971191406\n      ],\n      [\n        \"▁思えて\",\n        -12.749800682067871\n      ],\n      [\n        \"▁問い合せ\",\n        -12.74991512298584\n      ],\n      [\n        \"▁賢明\",\n        -12.75024700164795\n      ],\n      [\n        \"▁地雷\",\n        -12.750303268432617\n      ],\n      [\n        \"ッツォ\",\n        -12.750391960144043\n      ],\n      [\n        \"▁開園\",\n        -12.750481605529785\n      ],\n      [\n        \"▁支払った\",\n        -12.750486373901367\n      ],\n      [\n        \"▁地層\",\n        -12.750580787658691\n      ],\n      [\n        \"▁1865\",\n        -12.750629425048828\n      ],\n      [\n        \"篤\",\n        -12.750711441040039\n      ],\n      [\n        \"▁JD\",\n        -12.75080394744873\n      ],\n      [\n        \"▁KR\",\n        -12.750890731811523\n      ],\n      [\n        \"▁強風\",\n        -12.751047134399414\n      ],\n      [\n        \"▁701\",\n        -12.75104808807373\n      ],\n      [\n        \"▁部局\",\n        -12.751059532165527\n      ],\n      [\n        \"▁避けた\",\n        -12.751127243041992\n      ],\n      [\n        \"▁出逢い\",\n        -12.751134872436523\n      ],\n      [\n        \"▁銚子\",\n        -12.751338005065918\n      ],\n      [\n        \"▁談話\",\n        -12.751365661621094\n      ],\n      [\n        \"▁ウルス\",\n        -12.751482963562012\n      ],\n      [\n        \"▁紙面\",\n        -12.75149154663086\n      ],\n      [\n        \"▁流行り\",\n        -12.75155258178711\n      ],\n      [\n        \"ニックス\",\n        -12.7515869140625\n      ],\n      [\n        \"▁天守\",\n        -12.751794815063477\n      ],\n      [\n        \"一線\",\n        -12.751805305480957\n      ],\n      [\n        \"カスティーリャ\",\n        -12.751949310302734\n      ],\n      [\n        \"▁譲って\",\n        -12.752022743225098\n      ],\n      [\n        \"▁円筒\",\n        -12.752115249633789\n      ],\n      [\n        \"析\",\n        -12.752119064331055\n      ],\n      [\n        \"ディズニー\",\n        -12.752150535583496\n      ],\n      [\n        \"▁塩素\",\n        -12.752218246459961\n      ],\n      [\n        \"▁巫女\",\n        -12.75235652923584\n      ],\n      [\n        \"▁GIRL\",\n        -12.752388000488281\n      ],\n      [\n        \"SY\",\n        -12.752442359924316\n      ],\n      [\n        \"▁ブタ\",\n        -12.752464294433594\n      ],\n      [\n        \"▁ブレーブス\",\n        -12.752763748168945\n      ],\n      [\n        \"▁十分で\",\n        -12.752897262573242\n      ],\n      [\n        \"▁Paul\",\n        -12.753022193908691\n      ],\n      [\n        \"▁アナリティクス\",\n        -12.75317096710205\n      ],\n      [\n        \"▁コンプライアンス\",\n        -12.75317096710205\n      ],\n      [\n        \"▁口臭\",\n        -12.753186225891113\n      ],\n      [\n        \"▁コンペ\",\n        -12.753205299377441\n      ],\n      [\n        \"▁あく\",\n        -12.75329303741455\n      ],\n      [\n        \"▁ギルド\",\n        -12.753314971923828\n      ],\n      [\n        \"▁着想\",\n        -12.753337860107422\n      ],\n      [\n        \"§\",\n        -12.753375053405762\n      ],\n      [\n        \"再び\",\n        -12.753464698791504\n      ],\n      [\n        \"▁野郎\",\n        -12.753495216369629\n      ],\n      [\n        \"怖\",\n        -12.753581047058105\n      ],\n      [\n        \"▁美乳\",\n        -12.753636360168457\n      ],\n      [\n        \"▁リビア\",\n        -12.753702163696289\n      ],\n      [\n        \"ふた\",\n        -12.753713607788086\n      ],\n      [\n        \"▁段落\",\n        -12.753719329833984\n      ],\n      [\n        \"▁映る\",\n        -12.753775596618652\n      ],\n      [\n        \"諡\",\n        -12.753783226013184\n      ],\n      [\n        \"▁綴り\",\n        -12.754026412963867\n      ],\n      [\n        \"680\",\n        -12.754149436950684\n      ],\n      [\n        \"▁袴\",\n        -12.754190444946289\n      ],\n      [\n        \"▁垣間見\",\n        -12.75439453125\n      ],\n      [\n        \"▁ボンド\",\n        -12.754497528076172\n      ],\n      [\n        \"げき\",\n        -12.75460433959961\n      ],\n      [\n        \"▁ジャンクション\",\n        -12.754732131958008\n      ],\n      [\n        \"▁査読\",\n        -12.754804611206055\n      ],\n      [\n        \"イック\",\n        -12.75487232208252\n      ],\n      [\n        \"db\",\n        -12.754944801330566\n      ],\n      [\n        \"▁報知\",\n        -12.7550048828125\n      ],\n      [\n        \"▁EXILE\",\n        -12.75500774383545\n      ],\n      [\n        \"▁KDDI\",\n        -12.75500774383545\n      ],\n      [\n        \"▁遊撃手\",\n        -12.75500774383545\n      ],\n      [\n        \"etter\",\n        -12.755084991455078\n      ],\n      [\n        \"促\",\n        -12.755091667175293\n      ],\n      [\n        \"▁Port\",\n        -12.755141258239746\n      ],\n      [\n        \"▁Edge\",\n        -12.755215644836426\n      ],\n      [\n        \"▁なにより\",\n        -12.75555419921875\n      ],\n      [\n        \"▁充当\",\n        -12.755578994750977\n      ],\n      [\n        \"妓\",\n        -12.755620956420898\n      ],\n      [\n        \"堺\",\n        -12.755646705627441\n      ],\n      [\n        \"▁いずみ\",\n        -12.755712509155273\n      ],\n      [\n        \"▁ガッ\",\n        -12.75588607788086\n      ],\n      [\n        \"▁相手方\",\n        -12.755951881408691\n      ],\n      [\n        \"▁仕切\",\n        -12.755996704101562\n      ],\n      [\n        \"ゴールド\",\n        -12.755999565124512\n      ],\n      [\n        \"▁汚い\",\n        -12.756025314331055\n      ],\n      [\n        \"太后\",\n        -12.756097793579102\n      ],\n      [\n        \"▁自営\",\n        -12.75620174407959\n      ],\n      [\n        \"蒔\",\n        -12.756438255310059\n      ],\n      [\n        \"肺\",\n        -12.756471633911133\n      ],\n      [\n        \"▁明瞭\",\n        -12.756647109985352\n      ],\n      [\n        \"▁満席\",\n        -12.756834030151367\n      ],\n      [\n        \"hl\",\n        -12.756837844848633\n      ],\n      [\n        \"▁叔母\",\n        -12.756847381591797\n      ],\n      [\n        \"渚\",\n        -12.756847381591797\n      ],\n      [\n        \"▁暫く\",\n        -12.75684928894043\n      ],\n      [\n        \"IK\",\n        -12.756892204284668\n      ],\n      [\n        \"▁高砂\",\n        -12.756935119628906\n      ],\n      [\n        \"▁カタール\",\n        -12.75700569152832\n      ],\n      [\n        \"▁新造\",\n        -12.757177352905273\n      ],\n      [\n        \"▁借用\",\n        -12.75733757019043\n      ],\n      [\n        \"▁離党\",\n        -12.757408142089844\n      ],\n      [\n        \"長男\",\n        -12.757413864135742\n      ],\n      [\n        \"anta\",\n        -12.757455825805664\n      ],\n      [\n        \"▁鳴き声\",\n        -12.757461547851562\n      ],\n      [\n        \"▁免税\",\n        -12.757493019104004\n      ],\n      [\n        \"呉\",\n        -12.757502555847168\n      ],\n      [\n        \"因み\",\n        -12.757513046264648\n      ],\n      [\n        \"▁data\",\n        -12.757594108581543\n      ],\n      [\n        \"▁トレンチ\",\n        -12.757600784301758\n      ],\n      [\n        \"▁カンパ\",\n        -12.75765323638916\n      ],\n      [\n        \"▁開運\",\n        -12.75770378112793\n      ],\n      [\n        \"票\",\n        -12.757709503173828\n      ],\n      [\n        \"ウイルス\",\n        -12.757843971252441\n      ],\n      [\n        \"▁ヘルマン\",\n        -12.757844924926758\n      ],\n      [\n        \"▁初等\",\n        -12.757882118225098\n      ],\n      [\n        \"▁引け\",\n        -12.75797176361084\n      ],\n      [\n        \"冒頭\",\n        -12.757996559143066\n      ],\n      [\n        \"沿\",\n        -12.758118629455566\n      ],\n      [\n        \"▁破滅\",\n        -12.758133888244629\n      ],\n      [\n        \"委員\",\n        -12.758146286010742\n      ],\n      [\n        \"moto\",\n        -12.758185386657715\n      ],\n      [\n        \"▁栄え\",\n        -12.758288383483887\n      ],\n      [\n        \"▁間際\",\n        -12.75833511352539\n      ],\n      [\n        \"▁丁度\",\n        -12.758431434631348\n      ],\n      [\n        \"TEL\",\n        -12.758501052856445\n      ],\n      [\n        \"UKI\",\n        -12.758644104003906\n      ],\n      [\n        \"らぬ\",\n        -12.758668899536133\n      ],\n      [\n        \"▁イデオロギー\",\n        -12.75869083404541\n      ],\n      [\n        \"▁コロコロ\",\n        -12.758706092834473\n      ],\n      [\n        \"ビタミン\",\n        -12.758792877197266\n      ],\n      [\n        \"▁裁量\",\n        -12.758816719055176\n      ],\n      [\n        \"▁歯車\",\n        -12.758825302124023\n      ],\n      [\n        \"ECT\",\n        -12.75882625579834\n      ],\n      [\n        \"▁カーター\",\n        -12.758835792541504\n      ],\n      [\n        \"▁Key\",\n        -12.758880615234375\n      ],\n      [\n        \"▁窃盗\",\n        -12.758895874023438\n      ],\n      [\n        \"▁供述\",\n        -12.75894546508789\n      ],\n      [\n        \"▁ストール\",\n        -12.759092330932617\n      ],\n      [\n        \"▁大胆な\",\n        -12.759101867675781\n      ],\n      [\n        \"▁NGO\",\n        -12.759150505065918\n      ],\n      [\n        \"▁禁断\",\n        -12.759178161621094\n      ],\n      [\n        \"▁フタ\",\n        -12.759256362915039\n      ],\n      [\n        \"▁鉱石\",\n        -12.759678840637207\n      ],\n      [\n        \"茜\",\n        -12.759716033935547\n      ],\n      [\n        \"鉾\",\n        -12.759716033935547\n      ],\n      [\n        \"▁油断\",\n        -12.75971794128418\n      ],\n      [\n        \"▁欠ける\",\n        -12.759803771972656\n      ],\n      [\n        \"コスト\",\n        -12.759810447692871\n      ],\n      [\n        \"念のため\",\n        -12.759921073913574\n      ],\n      [\n        \"▁茹で\",\n        -12.75992202758789\n      ],\n      [\n        \"猛\",\n        -12.759976387023926\n      ],\n      [\n        \"▁ゆか\",\n        -12.759988784790039\n      ],\n      [\n        \"▁坂道\",\n        -12.760102272033691\n      ],\n      [\n        \"▁必要であり\",\n        -12.760193824768066\n      ],\n      [\n        \"ダメ\",\n        -12.76025104522705\n      ],\n      [\n        \"クレイ\",\n        -12.760276794433594\n      ],\n      [\n        \"▁グルジア\",\n        -12.760376930236816\n      ],\n      [\n        \"▁紀州\",\n        -12.760392189025879\n      ],\n      [\n        \"▁何だか\",\n        -12.760437965393066\n      ],\n      [\n        \"ony\",\n        -12.760451316833496\n      ],\n      [\n        \"▁浅井\",\n        -12.760704040527344\n      ],\n      [\n        \"▁漠然と\",\n        -12.7607421875\n      ],\n      [\n        \"▁警部\",\n        -12.760746002197266\n      ],\n      [\n        \"▁座敷\",\n        -12.760890007019043\n      ],\n      [\n        \"▁見積も\",\n        -12.760934829711914\n      ],\n      [\n        \"人工\",\n        -12.760951042175293\n      ],\n      [\n        \"OH\",\n        -12.761075973510742\n      ],\n      [\n        \"▁まともな\",\n        -12.761157989501953\n      ],\n      [\n        \"マヌエル\",\n        -12.761165618896484\n      ],\n      [\n        \"last\",\n        -12.761177062988281\n      ],\n      [\n        \"▁フアン\",\n        -12.761262893676758\n      ],\n      [\n        \"▁定量\",\n        -12.761354446411133\n      ],\n      [\n        \"括弧\",\n        -12.761438369750977\n      ],\n      [\n        \"▁1866\",\n        -12.761443138122559\n      ],\n      [\n        \"ask\",\n        -12.761484146118164\n      ],\n      [\n        \"昨今\",\n        -12.761507034301758\n      ],\n      [\n        \"▁出所\",\n        -12.76155948638916\n      ],\n      [\n        \"▁新婚\",\n        -12.761619567871094\n      ],\n      [\n        \"結構\",\n        -12.761879920959473\n      ],\n      [\n        \"▁青汁\",\n        -12.762079238891602\n      ],\n      [\n        \"ブロー\",\n        -12.762173652648926\n      ],\n      [\n        \"▁長持ち\",\n        -12.76235580444336\n      ],\n      [\n        \"▁Research\",\n        -12.76242733001709\n      ],\n      [\n        \"▁ムル\",\n        -12.762505531311035\n      ],\n      [\n        \"▁狭山\",\n        -12.762506484985352\n      ],\n      [\n        \"▁トレーラー\",\n        -12.762675285339355\n      ],\n      [\n        \"▁シティー\",\n        -12.76275634765625\n      ],\n      [\n        \"▁ストレーター\",\n        -12.762842178344727\n      ],\n      [\n        \"斐\",\n        -12.762985229492188\n      ],\n      [\n        \"悔\",\n        -12.763189315795898\n      ],\n      [\n        \"▁風合い\",\n        -12.763200759887695\n      ],\n      [\n        \"▁廉価\",\n        -12.763212203979492\n      ],\n      [\n        \"▁敦賀\",\n        -12.763277053833008\n      ],\n      [\n        \"▁オンリー\",\n        -12.763405799865723\n      ],\n      [\n        \"▁顕著に\",\n        -12.763411521911621\n      ],\n      [\n        \"兜\",\n        -12.763622283935547\n      ],\n      [\n        \"▁告げた\",\n        -12.763778686523438\n      ],\n      [\n        \"Category\",\n        -12.763910293579102\n      ],\n      [\n        \"▁試聴\",\n        -12.764058113098145\n      ],\n      [\n        \"▁代引\",\n        -12.764079093933105\n      ],\n      [\n        \"注目\",\n        -12.76431655883789\n      ],\n      [\n        \"▁ウォルター\",\n        -12.764357566833496\n      ],\n      [\n        \"逐\",\n        -12.76444149017334\n      ],\n      [\n        \"▁小室\",\n        -12.76446533203125\n      ],\n      [\n        \"▁DeNA\",\n        -12.764542579650879\n      ],\n      [\n        \"▁プロポーズ\",\n        -12.764859199523926\n      ],\n      [\n        \"殊\",\n        -12.765022277832031\n      ],\n      [\n        \"▁奪って\",\n        -12.765091896057129\n      ],\n      [\n        \"▁水位\",\n        -12.765161514282227\n      ],\n      [\n        \"▁沈め\",\n        -12.76541805267334\n      ],\n      [\n        \"▁おでかけ\",\n        -12.765481948852539\n      ],\n      [\n        \"▁切れた\",\n        -12.765671730041504\n      ],\n      [\n        \"樺\",\n        -12.765684127807617\n      ],\n      [\n        \"▁遭難\",\n        -12.765891075134277\n      ],\n      [\n        \"▁ペニス\",\n        -12.765908241271973\n      ],\n      [\n        \"前半\",\n        -12.76591968536377\n      ],\n      [\n        \"▁増毛\",\n        -12.766067504882812\n      ],\n      [\n        \"▁売れた\",\n        -12.76608657836914\n      ],\n      [\n        \"▁呪文\",\n        -12.766226768493652\n      ],\n      [\n        \"\",\n        -12.766510009765625\n      ],\n      [\n        \"▁カザフスタン\",\n        -12.766510009765625\n      ],\n      [\n        \"▁悟り\",\n        -12.766623497009277\n      ],\n      [\n        \"▁奥行\",\n        -12.766633987426758\n      ],\n      [\n        \"▁岩国\",\n        -12.766868591308594\n      ],\n      [\n        \"渾\",\n        -12.766923904418945\n      ],\n      [\n        \"▁山林\",\n        -12.767035484313965\n      ],\n      [\n        \"ARC\",\n        -12.767070770263672\n      ],\n      [\n        \"▁困ら\",\n        -12.767136573791504\n      ],\n      [\n        \"▁終身\",\n        -12.767287254333496\n      ],\n      [\n        \"▁ロベルト\",\n        -12.767373085021973\n      ],\n      [\n        \"▁デイヴィス\",\n        -12.767379760742188\n      ],\n      [\n        \"▁スーツケース\",\n        -12.767383575439453\n      ],\n      [\n        \"憑\",\n        -12.767541885375977\n      ],\n      [\n        \"▁Robert\",\n        -12.76755428314209\n      ],\n      [\n        \"▁ブースター\",\n        -12.767616271972656\n      ],\n      [\n        \"▁MEN\",\n        -12.767657279968262\n      ],\n      [\n        \"▁ふさ\",\n        -12.767720222473145\n      ],\n      [\n        \"▁爬虫類\",\n        -12.76775074005127\n      ],\n      [\n        \"▁\",\n        -12.767777442932129\n      ],\n      [\n        \"▁無理やり\",\n        -12.767824172973633\n      ],\n      [\n        \"AVE\",\n        -12.767904281616211\n      ],\n      [\n        \"و\",\n        -12.76795768737793\n      ],\n      [\n        \"僅\",\n        -12.768113136291504\n      ],\n      [\n        \"tics\",\n        -12.768148422241211\n      ],\n      [\n        \"▁試練\",\n        -12.768213272094727\n      ],\n      [\n        \"AMA\",\n        -12.768317222595215\n      ],\n      [\n        \"▁VMware\",\n        -12.76837158203125\n      ],\n      [\n        \"▁乱交\",\n        -12.768391609191895\n      ],\n      [\n        \"▁深海\",\n        -12.768491744995117\n      ],\n      [\n        \"▁毎朝\",\n        -12.768514633178711\n      ],\n      [\n        \"▁ソフィア\",\n        -12.768664360046387\n      ],\n      [\n        \"タリア\",\n        -12.768705368041992\n      ],\n      [\n        \"▁丸く\",\n        -12.76885986328125\n      ],\n      [\n        \"▁海鮮\",\n        -12.768928527832031\n      ],\n      [\n        \"▁提訴\",\n        -12.76899242401123\n      ],\n      [\n        \"▁づらく\",\n        -12.768993377685547\n      ],\n      [\n        \"▁陽気\",\n        -12.769186019897461\n      ],\n      [\n        \"ピコ\",\n        -12.769207954406738\n      ],\n      [\n        \"▁がちだ\",\n        -12.769335746765137\n      ],\n      [\n        \"▁スティーヴ\",\n        -12.769412994384766\n      ],\n      [\n        \"▁Green\",\n        -12.769418716430664\n      ],\n      [\n        \"apa\",\n        -12.769453048706055\n      ],\n      [\n        \"▁選別\",\n        -12.769471168518066\n      ],\n      [\n        \"▁宮古\",\n        -12.769515991210938\n      ],\n      [\n        \"▁Huawei\",\n        -12.769821166992188\n      ],\n      [\n        \"▁気力\",\n        -12.769989013671875\n      ],\n      [\n        \"▁ドラゴンクエスト\",\n        -12.770041465759277\n      ],\n      [\n        \"▁変容\",\n        -12.770166397094727\n      ],\n      [\n        \"シネマ\",\n        -12.770381927490234\n      ],\n      [\n        \"▁下北沢\",\n        -12.7704439163208\n      ],\n      [\n        \"▁結社\",\n        -12.770491600036621\n      ],\n      [\n        \"▁空腹\",\n        -12.77057933807373\n      ],\n      [\n        \"仮想\",\n        -12.77061653137207\n      ],\n      [\n        \"▁換金\",\n        -12.770652770996094\n      ],\n      [\n        \"public\",\n        -12.770658493041992\n      ],\n      [\n        \"▁角質\",\n        -12.770661354064941\n      ],\n      [\n        \"及\",\n        -12.770706176757812\n      ],\n      [\n        \"▁権現\",\n        -12.770805358886719\n      ],\n      [\n        \"▁関ヶ原\",\n        -12.770885467529297\n      ],\n      [\n        \"▁潮流\",\n        -12.770906448364258\n      ],\n      [\n        \"みず\",\n        -12.770916938781738\n      ],\n      [\n        \"▁公用\",\n        -12.770917892456055\n      ],\n      [\n        \"ソフトウェア\",\n        -12.770956993103027\n      ],\n      [\n        \"▁トリミング\",\n        -12.770991325378418\n      ],\n      [\n        \"▁本棚\",\n        -12.771044731140137\n      ],\n      [\n        \"็\",\n        -12.771065711975098\n      ],\n      [\n        \"▁トラフィック\",\n        -12.771065711975098\n      ],\n      [\n        \"▁岩倉\",\n        -12.771117210388184\n      ],\n      [\n        \"▁相姦\",\n        -12.771150588989258\n      ],\n      [\n        \"▁rpm\",\n        -12.77127456665039\n      ],\n      [\n        \"▁装填\",\n        -12.771276473999023\n      ],\n      [\n        \"▁変速\",\n        -12.771313667297363\n      ],\n      [\n        \"ガミ\",\n        -12.771434783935547\n      ],\n      [\n        \"▁若林\",\n        -12.7715482711792\n      ],\n      [\n        \"毅\",\n        -12.771642684936523\n      ],\n      [\n        \"▁花園\",\n        -12.77178955078125\n      ],\n      [\n        \"影響\",\n        -12.771865844726562\n      ],\n      [\n        \"▁いちいち\",\n        -12.771967887878418\n      ],\n      [\n        \"▁パトロール\",\n        -12.772104263305664\n      ],\n      [\n        \"▁ドジャース\",\n        -12.77210521697998\n      ],\n      [\n        \"▁点火\",\n        -12.772109985351562\n      ],\n      [\n        \"▁擦り\",\n        -12.772112846374512\n      ],\n      [\n        \"▁分かれた\",\n        -12.772239685058594\n      ],\n      [\n        \"▁but\",\n        -12.772350311279297\n      ],\n      [\n        \"▁アザ\",\n        -12.772436141967773\n      ],\n      [\n        \"セミ\",\n        -12.772502899169922\n      ],\n      [\n        \"▁曹操\",\n        -12.772527694702148\n      ],\n      [\n        \"▁his\",\n        -12.772537231445312\n      ],\n      [\n        \"▁低地\",\n        -12.772541999816895\n      ],\n      [\n        \"賦\",\n        -12.772727012634277\n      ],\n      [\n        \"▁島々\",\n        -12.772741317749023\n      ],\n      [\n        \"やっと\",\n        -12.772876739501953\n      ],\n      [\n        \"▁払え\",\n        -12.772892951965332\n      ],\n      [\n        \"▁末尾\",\n        -12.77292251586914\n      ],\n      [\n        \"ぶき\",\n        -12.772997856140137\n      ],\n      [\n        \"▁ジョイント\",\n        -12.773421287536621\n      ],\n      [\n        \"パッケージ\",\n        -12.773524284362793\n      ],\n      [\n        \"▁充填\",\n        -12.773560523986816\n      ],\n      [\n        \"ほんと\",\n        -12.773591995239258\n      ],\n      [\n        \"▁立教\",\n        -12.773691177368164\n      ],\n      [\n        \"会津\",\n        -12.77371597290039\n      ],\n      [\n        \"鳥取\",\n        -12.773866653442383\n      ],\n      [\n        \"▁芳香\",\n        -12.773935317993164\n      ],\n      [\n        \"▁守山\",\n        -12.774249076843262\n      ],\n      [\n        \"▁触手\",\n        -12.774385452270508\n      ],\n      [\n        \"両者\",\n        -12.774452209472656\n      ],\n      [\n        \"▁変色\",\n        -12.774459838867188\n      ],\n      [\n        \"oka\",\n        -12.7746000289917\n      ],\n      [\n        \"▁オアシス\",\n        -12.7746000289917\n      ],\n      [\n        \"▁フレイ\",\n        -12.774658203125\n      ],\n      [\n        \"印刷\",\n        -12.774789810180664\n      ],\n      [\n        \"ソース\",\n        -12.77481746673584\n      ],\n      [\n        \"▁リポート\",\n        -12.774906158447266\n      ],\n      [\n        \"▁テトラ\",\n        -12.774916648864746\n      ],\n      [\n        \"▁拠出\",\n        -12.775020599365234\n      ],\n      [\n        \"▁交点\",\n        -12.775128364562988\n      ],\n      [\n        \"福寺\",\n        -12.775195121765137\n      ],\n      [\n        \"櫓\",\n        -12.775224685668945\n      ],\n      [\n        \"社員\",\n        -12.775224685668945\n      ],\n      [\n        \"▁構文\",\n        -12.775226593017578\n      ],\n      [\n        \"斬新な\",\n        -12.775246620178223\n      ],\n      [\n        \"鍵\",\n        -12.775413513183594\n      ],\n      [\n        \"▁望んだ\",\n        -12.775423049926758\n      ],\n      [\n        \"▁Education\",\n        -12.775433540344238\n      ],\n      [\n        \"▁ツル\",\n        -12.775739669799805\n      ],\n      [\n        \"▁類型\",\n        -12.775810241699219\n      ],\n      [\n        \"▁進級\",\n        -12.775903701782227\n      ],\n      [\n        \"▁フェーズ\",\n        -12.775943756103516\n      ],\n      [\n        \"▁弾く\",\n        -12.776049613952637\n      ],\n      [\n        \"▁サミュエル\",\n        -12.7760591506958\n      ],\n      [\n        \"▁慰霊\",\n        -12.7760591506958\n      ],\n      [\n        \"費用\",\n        -12.776074409484863\n      ],\n      [\n        \"▁タレ\",\n        -12.776076316833496\n      ],\n      [\n        \"▁¤\",\n        -12.776193618774414\n      ],\n      [\n        \"ANS\",\n        -12.77621841430664\n      ],\n      [\n        \"▁書こう\",\n        -12.776226997375488\n      ],\n      [\n        \"▁ピッツバーグ\",\n        -12.77647590637207\n      ],\n      [\n        \"雁\",\n        -12.77647590637207\n      ],\n      [\n        \"▁美里\",\n        -12.776504516601562\n      ],\n      [\n        \"▁忙しくて\",\n        -12.776529312133789\n      ],\n      [\n        \"▁ミラクル\",\n        -12.776937484741211\n      ],\n      [\n        \"▁about\",\n        -12.77710247039795\n      ],\n      [\n        \"▁頑丈\",\n        -12.77710247039795\n      ],\n      [\n        \"▁根岸\",\n        -12.77717399597168\n      ],\n      [\n        \"オオ\",\n        -12.777250289916992\n      ],\n      [\n        \"▁散乱\",\n        -12.777251243591309\n      ],\n      [\n        \"▁着いて\",\n        -12.777303695678711\n      ],\n      [\n        \"缶\",\n        -12.777307510375977\n      ],\n      [\n        \"ベク\",\n        -12.777369499206543\n      ],\n      [\n        \"▁カラーリング\",\n        -12.777397155761719\n      ],\n      [\n        \"▁Ru\",\n        -12.77747917175293\n      ],\n      [\n        \"▁水色\",\n        -12.777573585510254\n      ],\n      [\n        \"資料\",\n        -12.77757453918457\n      ],\n      [\n        \"女優\",\n        -12.77768611907959\n      ],\n      [\n        \"▁防具\",\n        -12.777725219726562\n      ],\n      [\n        \"デュタステリド\",\n        -12.777729034423828\n      ],\n      [\n        \"▁File\",\n        -12.777851104736328\n      ],\n      [\n        \"▁ローレンス\",\n        -12.777853012084961\n      ],\n      [\n        \"あたたか\",\n        -12.77785587310791\n      ],\n      [\n        \"▁樋口\",\n        -12.777938842773438\n      ],\n      [\n        \"▁google\",\n        -12.777945518493652\n      ],\n      [\n        \"▁ハングル\",\n        -12.77800464630127\n      ],\n      [\n        \"▁絶縁\",\n        -12.778020858764648\n      ],\n      [\n        \"▁照会\",\n        -12.77805233001709\n      ],\n      [\n        \"▁talk\",\n        -12.77808952331543\n      ],\n      [\n        \"▁コンテ\",\n        -12.778139114379883\n      ],\n      [\n        \"盾\",\n        -12.778151512145996\n      ],\n      [\n        \"rat\",\n        -12.77819538116455\n      ],\n      [\n        \"▁乳房\",\n        -12.778299331665039\n      ],\n      [\n        \"公立\",\n        -12.778422355651855\n      ],\n      [\n        \"▁操る\",\n        -12.778425216674805\n      ],\n      [\n        \"名鉄\",\n        -12.779035568237305\n      ],\n      [\n        \"▁おさめ\",\n        -12.77907657623291\n      ],\n      [\n        \"▁みゆき\",\n        -12.779088973999023\n      ],\n      [\n        \"▁大映\",\n        -12.779401779174805\n      ],\n      [\n        \"▁WAVE\",\n        -12.779532432556152\n      ],\n      [\n        \"▁Ann\",\n        -12.779589653015137\n      ],\n      [\n        \"▁参詣\",\n        -12.779626846313477\n      ],\n      [\n        \"▁フリゲート\",\n        -12.779632568359375\n      ],\n      [\n        \"閥\",\n        -12.779662132263184\n      ],\n      [\n        \"▁翻弄\",\n        -12.779821395874023\n      ],\n      [\n        \"▁前向きな\",\n        -12.77982234954834\n      ],\n      [\n        \"▁繊細\",\n        -12.77983570098877\n      ],\n      [\n        \"▁ひか\",\n        -12.780081748962402\n      ],\n      [\n        \"run\",\n        -12.78011417388916\n      ],\n      [\n        \"▁転じて\",\n        -12.780150413513184\n      ],\n      [\n        \"▁上半身\",\n        -12.78023910522461\n      ],\n      [\n        \"▁無数の\",\n        -12.780241012573242\n      ],\n      [\n        \"▁多摩川\",\n        -12.780261993408203\n      ],\n      [\n        \"街道\",\n        -12.780328750610352\n      ],\n      [\n        \"▁東京電力\",\n        -12.780380249023438\n      ],\n      [\n        \"VM\",\n        -12.780401229858398\n      ],\n      [\n        \"▁涼子\",\n        -12.780410766601562\n      ],\n      [\n        \"▁スプラ\",\n        -12.78061294555664\n      ],\n      [\n        \"▁スパーク\",\n        -12.780670166015625\n      ],\n      [\n        \"▁久留\",\n        -12.780712127685547\n      ],\n      [\n        \"▁SEA\",\n        -12.780817985534668\n      ],\n      [\n        \"痛み\",\n        -12.780876159667969\n      ],\n      [\n        \"鐘\",\n        -12.780879974365234\n      ],\n      [\n        \"bn\",\n        -12.780952453613281\n      ],\n      [\n        \"▁バッファロー\",\n        -12.78096866607666\n      ],\n      [\n        \"縦\",\n        -12.781096458435059\n      ],\n      [\n        \"スコット\",\n        -12.7811918258667\n      ],\n      [\n        \"▁ノーザン\",\n        -12.781205177307129\n      ],\n      [\n        \"▁ラブコメ\",\n        -12.78128719329834\n      ],\n      [\n        \"▁王権\",\n        -12.781392097473145\n      ],\n      [\n        \"▁揶揄\",\n        -12.78149700164795\n      ],\n      [\n        \"▁あがる\",\n        -12.781542778015137\n      ],\n      [\n        \"▁盛況\",\n        -12.781546592712402\n      ],\n      [\n        \"▁捧げる\",\n        -12.781551361083984\n      ],\n      [\n        \"mun\",\n        -12.781750679016113\n      ],\n      [\n        \"▁ブロード\",\n        -12.7818603515625\n      ],\n      [\n        \"▁インポート\",\n        -12.781956672668457\n      ],\n      [\n        \"▁並べる\",\n        -12.78200912475586\n      ],\n      [\n        \"mix\",\n        -12.782039642333984\n      ],\n      [\n        \"▁尋ねた\",\n        -12.782173156738281\n      ],\n      [\n        \"▁キャンバス\",\n        -12.782201766967773\n      ],\n      [\n        \"だいがく\",\n        -12.782201766967773\n      ],\n      [\n        \"▁エフエム\",\n        -12.782343864440918\n      ],\n      [\n        \"▁賑わい\",\n        -12.782546043395996\n      ],\n      [\n        \"▁迷宮\",\n        -12.782547950744629\n      ],\n      [\n        \"▁ボールペン\",\n        -12.782573699951172\n      ],\n      [\n        \"▁突き止め\",\n        -12.78262710571289\n      ],\n      [\n        \"▁無意味\",\n        -12.782649993896484\n      ],\n      [\n        \"▁初旬\",\n        -12.7827730178833\n      ],\n      [\n        \"スコア\",\n        -12.782918930053711\n      ],\n      [\n        \"▁ユリウス\",\n        -12.782958984375\n      ],\n      [\n        \"▁fr\",\n        -12.783040046691895\n      ],\n      [\n        \"▁背負って\",\n        -12.783095359802246\n      ],\n      [\n        \"毘\",\n        -12.783174514770508\n      ],\n      [\n        \"▁比べれば\",\n        -12.783207893371582\n      ],\n      [\n        \"▁アンコール\",\n        -12.783257484436035\n      ],\n      [\n        \"▁そうだった\",\n        -12.783281326293945\n      ],\n      [\n        \"クレア\",\n        -12.783489227294922\n      ],\n      [\n        \"▁ソファー\",\n        -12.783602714538574\n      ],\n      [\n        \"当たり前です\",\n        -12.783674240112305\n      ],\n      [\n        \"▁測る\",\n        -12.78367805480957\n      ],\n      [\n        \"▁成就\",\n        -12.783738136291504\n      ],\n      [\n        \"▁サンプリング\",\n        -12.783805847167969\n      ],\n      [\n        \"▁広範な\",\n        -12.783805847167969\n      ],\n      [\n        \"▁優駿\",\n        -12.784034729003906\n      ],\n      [\n        \"▁ウエディング\",\n        -12.784070014953613\n      ],\n      [\n        \"▁ハイウェイ\",\n        -12.784071922302246\n      ],\n      [\n        \"▁ゴミ箱\",\n        -12.784072875976562\n      ],\n      [\n        \"OBI\",\n        -12.7841796875\n      ],\n      [\n        \"▁上手な\",\n        -12.784200668334961\n      ],\n      [\n        \"箔\",\n        -12.784226417541504\n      ],\n      [\n        \"▁オーロラ\",\n        -12.784228324890137\n      ],\n      [\n        \"テーブル\",\n        -12.784232139587402\n      ],\n      [\n        \"▁Cha\",\n        -12.784279823303223\n      ],\n      [\n        \"▁class\",\n        -12.784481048583984\n      ],\n      [\n        \"ZU\",\n        -12.78465461730957\n      ],\n      [\n        \"▁回顧\",\n        -12.784817695617676\n      ],\n      [\n        \"ヴォイ\",\n        -12.784834861755371\n      ],\n      [\n        \"▁フュージョン\",\n        -12.784857749938965\n      ],\n      [\n        \"iano\",\n        -12.784971237182617\n      ],\n      [\n        \"▁特異な\",\n        -12.785054206848145\n      ],\n      [\n        \"▁洗脳\",\n        -12.785093307495117\n      ],\n      [\n        \"▁FUJI\",\n        -12.7852783203125\n      ],\n      [\n        \"▁岸和田\",\n        -12.785296440124512\n      ],\n      [\n        \"mann\",\n        -12.785307884216309\n      ],\n      [\n        \"ゲラ\",\n        -12.785320281982422\n      ],\n      [\n        \"▁不可能である\",\n        -12.785327911376953\n      ],\n      [\n        \"▁見せつけ\",\n        -12.78555679321289\n      ],\n      [\n        \"古く\",\n        -12.78568172454834\n      ],\n      [\n        \"▁亀山\",\n        -12.785730361938477\n      ],\n      [\n        \"▁広げた\",\n        -12.785801887512207\n      ],\n      [\n        \"▁苫小牧\",\n        -12.785910606384277\n      ],\n      [\n        \"▁挑んだ\",\n        -12.78591251373291\n      ],\n      [\n        \"っかい\",\n        -12.785930633544922\n      ],\n      [\n        \"(3)\",\n        -12.785978317260742\n      ],\n      [\n        \"▁サーフ\",\n        -12.786028861999512\n      ],\n      [\n        \"▁広範囲\",\n        -12.786042213439941\n      ],\n      [\n        \"▁馬券\",\n        -12.786199569702148\n      ],\n      [\n        \"▁イヴ\",\n        -12.786296844482422\n      ],\n      [\n        \"rou\",\n        -12.786338806152344\n      ],\n      [\n        \"▁旗揚げ\",\n        -12.786357879638672\n      ],\n      [\n        \"650\",\n        -12.78646183013916\n      ],\n      [\n        \"▁ゲルマン\",\n        -12.786482810974121\n      ],\n      [\n        \"▁彼方\",\n        -12.78654956817627\n      ],\n      [\n        \"面接\",\n        -12.786633491516113\n      ],\n      [\n        \"▁goose\",\n        -12.786693572998047\n      ],\n      [\n        \"俳\",\n        -12.78674030303955\n      ],\n      [\n        \"▁ナイジェリア\",\n        -12.786752700805664\n      ],\n      [\n        \"▁セーフティ\",\n        -12.786773681640625\n      ],\n      [\n        \"▁Phil\",\n        -12.786796569824219\n      ],\n      [\n        \"▁サンパウロ\",\n        -12.786964416503906\n      ],\n      [\n        \"▁贈り\",\n        -12.786966323852539\n      ],\n      [\n        \"▁カナディアン\",\n        -12.786979675292969\n      ],\n      [\n        \"1906\",\n        -12.786992073059082\n      ],\n      [\n        \"▁聞いたら\",\n        -12.787028312683105\n      ],\n      [\n        \"▁アレク\",\n        -12.787124633789062\n      ],\n      [\n        \"▁鍛冶\",\n        -12.787175178527832\n      ],\n      [\n        \"non\",\n        -12.787181854248047\n      ],\n      [\n        \"▁豊かで\",\n        -12.78722095489502\n      ],\n      [\n        \"併\",\n        -12.787354469299316\n      ],\n      [\n        \"▁迎え入れ\",\n        -12.78737735748291\n      ],\n      [\n        \"▁日替わり\",\n        -12.787385940551758\n      ],\n      [\n        \"▁濃縮\",\n        -12.78740406036377\n      ],\n      [\n        \"shima\",\n        -12.787430763244629\n      ],\n      [\n        \"▁別人\",\n        -12.787447929382324\n      ],\n      [\n        \"▁厳格\",\n        -12.78765869140625\n      ],\n      [\n        \"ポーランド\",\n        -12.787675857543945\n      ],\n      [\n        \"▁佐久間\",\n        -12.78769588470459\n      ],\n      [\n        \"▁KADOKAWA\",\n        -12.78780746459961\n      ],\n      [\n        \"▁検閲\",\n        -12.78781795501709\n      ],\n      [\n        \"悦\",\n        -12.787894248962402\n      ],\n      [\n        \"▁乗せる\",\n        -12.78791618347168\n      ],\n      [\n        \"▁軍需\",\n        -12.787952423095703\n      ],\n      [\n        \"▁実地\",\n        -12.788007736206055\n      ],\n      [\n        \"▁リマスター\",\n        -12.788020133972168\n      ],\n      [\n        \"▁ネルソン\",\n        -12.788025856018066\n      ],\n      [\n        \"craft\",\n        -12.788154602050781\n      ],\n      [\n        \"▁不適\",\n        -12.788241386413574\n      ],\n      [\n        \"ハシ\",\n        -12.788241386413574\n      ],\n      [\n        \"▁スポンジ\",\n        -12.788248062133789\n      ],\n      [\n        \"▁要し\",\n        -12.788318634033203\n      ],\n      [\n        \"▁簡略\",\n        -12.788440704345703\n      ],\n      [\n        \"ヶ岳\",\n        -12.788476943969727\n      ],\n      [\n        \"久しぶりに\",\n        -12.788531303405762\n      ],\n      [\n        \"▁ショーン\",\n        -12.788708686828613\n      ],\n      [\n        \"�\",\n        -12.788741111755371\n      ],\n      [\n        \"tis\",\n        -12.788808822631836\n      ],\n      [\n        \"▁勤めた\",\n        -12.788866996765137\n      ],\n      [\n        \"▁魔物\",\n        -12.788912773132324\n      ],\n      [\n        \"bert\",\n        -12.788965225219727\n      ],\n      [\n        \"▁富岡\",\n        -12.788969039916992\n      ],\n      [\n        \"メンタル\",\n        -12.78900146484375\n      ],\n      [\n        \"▁打線\",\n        -12.789024353027344\n      ],\n      [\n        \"▁隣人\",\n        -12.789177894592285\n      ],\n      [\n        \"▁Prince\",\n        -12.789290428161621\n      ],\n      [\n        \"サロン\",\n        -12.789444923400879\n      ],\n      [\n        \"▁George\",\n        -12.789497375488281\n      ],\n      [\n        \"外題\",\n        -12.789497375488281\n      ],\n      [\n        \"▁隷下\",\n        -12.789498329162598\n      ],\n      [\n        \"▁イレブン\",\n        -12.789709091186523\n      ],\n      [\n        \"▁ソーセージ\",\n        -12.789709091186523\n      ],\n      [\n        \"▁ハーモニー\",\n        -12.789709091186523\n      ],\n      [\n        \"▁ルクセンブルク\",\n        -12.789709091186523\n      ],\n      [\n        \"▁ウェスタン\",\n        -12.789761543273926\n      ],\n      [\n        \"▁坂上\",\n        -12.78976821899414\n      ],\n      [\n        \"▁フォーマル\",\n        -12.789880752563477\n      ],\n      [\n        \"卯\",\n        -12.78991985321045\n      ],\n      [\n        \"▁悲惨な\",\n        -12.789920806884766\n      ],\n      [\n        \"▁有望\",\n        -12.789920806884766\n      ],\n      [\n        \"▁応じる\",\n        -12.789924621582031\n      ],\n      [\n        \"スタンフォード\",\n        -12.790138244628906\n      ],\n      [\n        \"▁Hello\",\n        -12.790166854858398\n      ],\n      [\n        \"マット\",\n        -12.79026985168457\n      ],\n      [\n        \"▁インターンシップ\",\n        -12.79035472869873\n      ],\n      [\n        \"▁脱却\",\n        -12.79040241241455\n      ],\n      [\n        \"▁IEC\",\n        -12.790436744689941\n      ],\n      [\n        \"ゆり\",\n        -12.790449142456055\n      ],\n      [\n        \"▁城跡\",\n        -12.790483474731445\n      ],\n      [\n        \"凪\",\n        -12.790555000305176\n      ],\n      [\n        \"▁SAN\",\n        -12.790596008300781\n      ],\n      [\n        \"1905\",\n        -12.790672302246094\n      ],\n      [\n        \"ヌイ\",\n        -12.790691375732422\n      ],\n      [\n        \"▁David\",\n        -12.790775299072266\n      ],\n      [\n        \"分離\",\n        -12.790794372558594\n      ],\n      [\n        \"▁避妊\",\n        -12.791190147399902\n      ],\n      [\n        \"▁吸う\",\n        -12.791240692138672\n      ],\n      [\n        \"▁思い浮かべ\",\n        -12.791274070739746\n      ],\n      [\n        \"希望\",\n        -12.791397094726562\n      ],\n      [\n        \"▁クズ\",\n        -12.791399955749512\n      ],\n      [\n        \"▁紫色\",\n        -12.791418075561523\n      ],\n      [\n        \"▁マッシュ\",\n        -12.79145622253418\n      ],\n      [\n        \"▁マシュー\",\n        -12.791484832763672\n      ],\n      [\n        \"▁逸脱\",\n        -12.791633605957031\n      ],\n      [\n        \"国土\",\n        -12.791753768920898\n      ],\n      [\n        \"俵\",\n        -12.791925430297852\n      ],\n      [\n        \"▁マテリアル\",\n        -12.792037963867188\n      ],\n      [\n        \"奪\",\n        -12.792052268981934\n      ],\n      [\n        \"NB\",\n        -12.792243957519531\n      ],\n      [\n        \"ape\",\n        -12.792261123657227\n      ],\n      [\n        \"ワナ\",\n        -12.792440414428711\n      ],\n      [\n        \"主題\",\n        -12.792498588562012\n      ],\n      [\n        \"Al\",\n        -12.792533874511719\n      ],\n      [\n        \"▁GOOD\",\n        -12.792533874511719\n      ],\n      [\n        \"▁方策\",\n        -12.792651176452637\n      ],\n      [\n        \"▁踏む\",\n        -12.792675018310547\n      ],\n      [\n        \"▁すぐさま\",\n        -12.792859077453613\n      ],\n      [\n        \"▁署長\",\n        -12.792925834655762\n      ],\n      [\n        \"▁常備\",\n        -12.792936325073242\n      ],\n      [\n        \"テックス\",\n        -12.793087005615234\n      ],\n      [\n        \"▁片山\",\n        -12.793120384216309\n      ],\n      [\n        \"▁浦安\",\n        -12.793182373046875\n      ],\n      [\n        \"孟\",\n        -12.793310165405273\n      ],\n      [\n        \"▁ビク\",\n        -12.793432235717773\n      ],\n      [\n        \"▁交わした\",\n        -12.793437004089355\n      ],\n      [\n        \"てゐる\",\n        -12.793466567993164\n      ],\n      [\n        \"▁松阪\",\n        -12.793631553649902\n      ],\n      [\n        \"厨\",\n        -12.793734550476074\n      ],\n      [\n        \"▁寄せる\",\n        -12.793802261352539\n      ],\n      [\n        \"▁争わ\",\n        -12.793829917907715\n      ],\n      [\n        \"▁女装\",\n        -12.79389762878418\n      ],\n      [\n        \"▁Back\",\n        -12.793925285339355\n      ],\n      [\n        \"▁薬用\",\n        -12.793936729431152\n      ],\n      [\n        \"▁伝わ\",\n        -12.794063568115234\n      ],\n      [\n        \"偉\",\n        -12.794185638427734\n      ],\n      [\n        \"▁横田\",\n        -12.79419994354248\n      ],\n      [\n        \"▁共闘\",\n        -12.794260025024414\n      ],\n      [\n        \"▁ホワイトニング\",\n        -12.79427433013916\n      ],\n      [\n        \"▁溶液\",\n        -12.79439640045166\n      ],\n      [\n        \"hn\",\n        -12.794453620910645\n      ],\n      [\n        \"▁望め\",\n        -12.794490814208984\n      ],\n      [\n        \"ベッド\",\n        -12.794517517089844\n      ],\n      [\n        \"▁怒る\",\n        -12.794600486755371\n      ],\n      [\n        \"▁Heart\",\n        -12.794861793518066\n      ],\n      [\n        \"キャンプ\",\n        -12.794900894165039\n      ],\n      [\n        \"▁箕面\",\n        -12.79500961303711\n      ],\n      [\n        \"▁Angel\",\n        -12.795022010803223\n      ],\n      [\n        \"AVI\",\n        -12.795042037963867\n      ],\n      [\n        \"▁レンタ\",\n        -12.795249938964844\n      ],\n      [\n        \"モイ\",\n        -12.795309066772461\n      ],\n      [\n        \"▁見直\",\n        -12.795374870300293\n      ],\n      [\n        \"eno\",\n        -12.795421600341797\n      ],\n      [\n        \"▁ブンデスリーガ\",\n        -12.79543399810791\n      ],\n      [\n        \"伍\",\n        -12.79543399810791\n      ],\n      [\n        \"▁緯度\",\n        -12.795434951782227\n      ],\n      [\n        \"▁OPEN\",\n        -12.795502662658691\n      ],\n      [\n        \"▁チェルシー\",\n        -12.795538902282715\n      ],\n      [\n        \"▁無機\",\n        -12.795680046081543\n      ],\n      [\n        \"phone\",\n        -12.7959566116333\n      ],\n      [\n        \"▁高官\",\n        -12.795976638793945\n      ],\n      [\n        \"▁オウム\",\n        -12.79603385925293\n      ],\n      [\n        \"モーター\",\n        -12.79605770111084\n      ],\n      [\n        \"▁原文\",\n        -12.796117782592773\n      ],\n      [\n        \"▁濃厚な\",\n        -12.796130180358887\n      ],\n      [\n        \"▁木々\",\n        -12.796154022216797\n      ],\n      [\n        \"▁試算\",\n        -12.796161651611328\n      ],\n      [\n        \"▁Pat\",\n        -12.79620361328125\n      ],\n      [\n        \"▁テロップ\",\n        -12.796204566955566\n      ],\n      [\n        \"▁思わぬ\",\n        -12.796263694763184\n      ],\n      [\n        \"▁農耕\",\n        -12.796304702758789\n      ],\n      [\n        \"▁How\",\n        -12.796311378479004\n      ],\n      [\n        \"▁選曲\",\n        -12.796314239501953\n      ],\n      [\n        \"▁まみれ\",\n        -12.796351432800293\n      ],\n      [\n        \"gram\",\n        -12.796408653259277\n      ],\n      [\n        \"▁叙任\",\n        -12.796428680419922\n      ],\n      [\n        \"〔\",\n        -12.796439170837402\n      ],\n      [\n        \"▁ルーズベルト\",\n        -12.79649829864502\n      ],\n      [\n        \"▁共催\",\n        -12.796509742736816\n      ],\n      [\n        \"▁外貨\",\n        -12.796526908874512\n      ],\n      [\n        \"770\",\n        -12.796588897705078\n      ],\n      [\n        \"abel\",\n        -12.796675682067871\n      ],\n      [\n        \"▁真面目な\",\n        -12.796720504760742\n      ],\n      [\n        \"▁対価\",\n        -12.79679012298584\n      ],\n      [\n        \"▁伴わ\",\n        -12.796830177307129\n      ],\n      [\n        \"▁和室\",\n        -12.79686164855957\n      ],\n      [\n        \"▁エヴァ\",\n        -12.796921730041504\n      ],\n      [\n        \"イエス\",\n        -12.797059059143066\n      ],\n      [\n        \"▁エルミンヌ\",\n        -12.797136306762695\n      ],\n      [\n        \"傳\",\n        -12.797136306762695\n      ],\n      [\n        \"▁讃え\",\n        -12.797202110290527\n      ],\n      [\n        \"▁慌て\",\n        -12.797215461730957\n      ],\n      [\n        \"▁エナジー\",\n        -12.797350883483887\n      ],\n      [\n        \"開き\",\n        -12.797404289245605\n      ],\n      [\n        \"確か\",\n        -12.797406196594238\n      ],\n      [\n        \"▁ワケ\",\n        -12.797516822814941\n      ],\n      [\n        \"▁レスポンス\",\n        -12.797562599182129\n      ],\n      [\n        \"▁根元\",\n        -12.797563552856445\n      ],\n      [\n        \"▁プランニング\",\n        -12.797661781311035\n      ],\n      [\n        \"▁あおい\",\n        -12.797769546508789\n      ],\n      [\n        \"スキル\",\n        -12.797782897949219\n      ],\n      [\n        \"▁正規の\",\n        -12.797879219055176\n      ],\n      [\n        \"▁VHS\",\n        -12.797944068908691\n      ],\n      [\n        \"ネスト\",\n        -12.797947883605957\n      ],\n      [\n        \"▁クア\",\n        -12.798011779785156\n      ],\n      [\n        \"▁接待\",\n        -12.798236846923828\n      ],\n      [\n        \"▁カーキ\",\n        -12.798296928405762\n      ],\n      [\n        \"▁抗原\",\n        -12.798306465148926\n      ],\n      [\n        \"Cloud\",\n        -12.798410415649414\n      ],\n      [\n        \"▁つないで\",\n        -12.798421859741211\n      ],\n      [\n        \"喝\",\n        -12.798628807067871\n      ],\n      [\n        \"▁譲り受け\",\n        -12.79863452911377\n      ],\n      [\n        \"▁0120\",\n        -12.798770904541016\n      ],\n      [\n        \"▁持ちかけ\",\n        -12.798788070678711\n      ],\n      [\n        \"▁ペルソナ\",\n        -12.798842430114746\n      ],\n      [\n        \"ガモ\",\n        -12.798843383789062\n      ],\n      [\n        \"▁割って\",\n        -12.798853874206543\n      ],\n      [\n        \"▁旅人\",\n        -12.798858642578125\n      ],\n      [\n        \"ホット\",\n        -12.79903793334961\n      ],\n      [\n        \"▁Beat\",\n        -12.799286842346191\n      ],\n      [\n        \"ison\",\n        -12.799312591552734\n      ],\n      [\n        \"▁野心\",\n        -12.7993745803833\n      ],\n      [\n        \"▁見直して\",\n        -12.799463272094727\n      ],\n      [\n        \"勿論\",\n        -12.799463272094727\n      ],\n      [\n        \"REN\",\n        -12.799484252929688\n      ],\n      [\n        \"▁巡航\",\n        -12.79954719543457\n      ],\n      [\n        \"▁上洛\",\n        -12.799715042114258\n      ],\n      [\n        \"ERO\",\n        -12.79975414276123\n      ],\n      [\n        \"▁富豪\",\n        -12.799765586853027\n      ],\n      [\n        \"▁旅客機\",\n        -12.79979419708252\n      ],\n      [\n        \"▁大々的\",\n        -12.799909591674805\n      ],\n      [\n        \"▁課せ\",\n        -12.799912452697754\n      ],\n      [\n        \"▁かぎり\",\n        -12.79992389678955\n      ],\n      [\n        \"待ち\",\n        -12.799932479858398\n      ],\n      [\n        \"汝\",\n        -12.800097465515137\n      ],\n      [\n        \"▁隕石\",\n        -12.80012321472168\n      ],\n      [\n        \"▁余分な\",\n        -12.800124168395996\n      ],\n      [\n        \"▁掴む\",\n        -12.800124168395996\n      ],\n      [\n        \"▁cente\",\n        -12.800186157226562\n      ],\n      [\n        \"▁ルアー\",\n        -12.800209999084473\n      ],\n      [\n        \"▁無印\",\n        -12.800261497497559\n      ],\n      [\n        \"▁格付け\",\n        -12.800312042236328\n      ],\n      [\n        \"▁ZIP\",\n        -12.800335884094238\n      ],\n      [\n        \"▁新春\",\n        -12.80044174194336\n      ],\n      [\n        \"▁お守り\",\n        -12.80056381225586\n      ],\n      [\n        \"▁踊って\",\n        -12.800581932067871\n      ],\n      [\n        \"▁遊歩道\",\n        -12.800765037536621\n      ],\n      [\n        \"▁取り決め\",\n        -12.80077075958252\n      ],\n      [\n        \"▁プラモデル\",\n        -12.800811767578125\n      ],\n      [\n        \"▁実数\",\n        -12.80081558227539\n      ],\n      [\n        \"▁イサ\",\n        -12.800976753234863\n      ],\n      [\n        \"▁CBC\",\n        -12.801143646240234\n      ],\n      [\n        \"違う\",\n        -12.801191329956055\n      ],\n      [\n        \"▁ヘビ\",\n        -12.801273345947266\n      ],\n      [\n        \"▁新星\",\n        -12.801337242126465\n      ],\n      [\n        \"▁キネマ\",\n        -12.801408767700195\n      ],\n      [\n        \"▁例文\",\n        -12.801444053649902\n      ],\n      [\n        \"▁溺れ\",\n        -12.801501274108887\n      ],\n      [\n        \"▁譲る\",\n        -12.801676750183105\n      ],\n      [\n        \"▁CENTE\",\n        -12.80186653137207\n      ],\n      [\n        \"▁1861\",\n        -12.801876068115234\n      ],\n      [\n        \"▁座った\",\n        -12.802130699157715\n      ],\n      [\n        \"▁作製\",\n        -12.802141189575195\n      ],\n      [\n        \"ゴット\",\n        -12.802251815795898\n      ],\n      [\n        \"就職\",\n        -12.80234432220459\n      ],\n      [\n        \"潜伏\",\n        -12.802361488342285\n      ],\n      [\n        \"▁ちび\",\n        -12.802370071411133\n      ],\n      [\n        \"▁見極める\",\n        -12.80245590209961\n      ],\n      [\n        \"▁バーク\",\n        -12.802645683288574\n      ],\n      [\n        \"▁高揚\",\n        -12.802671432495117\n      ],\n      [\n        \"▁スライム\",\n        -12.802691459655762\n      ],\n      [\n        \"▁宇野\",\n        -12.802846908569336\n      ],\n      [\n        \"▁河南\",\n        -12.80285358428955\n      ],\n      [\n        \"φ\",\n        -12.802905082702637\n      ],\n      [\n        \"▁算数\",\n        -12.802909851074219\n      ],\n      [\n        \"▁挙式\",\n        -12.803013801574707\n      ],\n      [\n        \"連載\",\n        -12.803033828735352\n      ],\n      [\n        \"香川\",\n        -12.803047180175781\n      ],\n      [\n        \"▁散布\",\n        -12.803048133850098\n      ],\n      [\n        \"▁監察\",\n        -12.803118705749512\n      ],\n      [\n        \"▁詰めた\",\n        -12.803119659423828\n      ],\n      [\n        \"▁ジョル\",\n        -12.803247451782227\n      ],\n      [\n        \"▁部類\",\n        -12.803298950195312\n      ],\n      [\n        \"▁ペンネーム\",\n        -12.803333282470703\n      ],\n      [\n        \"▁叩く\",\n        -12.803548812866211\n      ],\n      [\n        \"▁30,000\",\n        -12.803722381591797\n      ],\n      [\n        \"gra\",\n        -12.803750991821289\n      ],\n      [\n        \"▁ホントに\",\n        -12.804099082946777\n      ],\n      [\n        \"▁NEO\",\n        -12.8041353225708\n      ],\n      [\n        \"▁生き残る\",\n        -12.804190635681152\n      ],\n      [\n        \"▁検挙\",\n        -12.804239273071289\n      ],\n      [\n        \"▁居宅\",\n        -12.804304122924805\n      ],\n      [\n        \"センター\",\n        -12.804327964782715\n      ],\n      [\n        \"▁***\",\n        -12.804405212402344\n      ],\n      [\n        \"▁あだ名\",\n        -12.80440616607666\n      ],\n      [\n        \"▁即ち\",\n        -12.804415702819824\n      ],\n      [\n        \"慶應\",\n        -12.804418563842773\n      ],\n      [\n        \"帥\",\n        -12.804780006408691\n      ],\n      [\n        \"▁天然ガス\",\n        -12.804801940917969\n      ],\n      [\n        \"Search\",\n        -12.804811477661133\n      ],\n      [\n        \"祈\",\n        -12.804819107055664\n      ],\n      [\n        \"チャート\",\n        -12.804884910583496\n      ],\n      [\n        \"ナージャ\",\n        -12.804905891418457\n      ],\n      [\n        \"IPS\",\n        -12.804966926574707\n      ],\n      [\n        \"▁Audi\",\n        -12.80496883392334\n      ],\n      [\n        \"▁わくわく\",\n        -12.805049896240234\n      ],\n      [\n        \"▁West\",\n        -12.805071830749512\n      ],\n      [\n        \"▁完治\",\n        -12.805464744567871\n      ],\n      [\n        \"▁罹患\",\n        -12.805479049682617\n      ],\n      [\n        \"RV\",\n        -12.80563735961914\n      ],\n      [\n        \"ゆえに\",\n        -12.805717468261719\n      ],\n      [\n        \"もしかすると\",\n        -12.805930137634277\n      ],\n      [\n        \"▁死因\",\n        -12.805949211120605\n      ],\n      [\n        \"▁税抜\",\n        -12.806092262268066\n      ],\n      [\n        \"▁ルター\",\n        -12.806262016296387\n      ],\n      [\n        \"▁無限の\",\n        -12.806276321411133\n      ],\n      [\n        \"ショア\",\n        -12.806278228759766\n      ],\n      [\n        \"▁慕容\",\n        -12.806354522705078\n      ],\n      [\n        \"▁相応しい\",\n        -12.806408882141113\n      ],\n      [\n        \"メジャー\",\n        -12.806443214416504\n      ],\n      [\n        \"rag\",\n        -12.806596755981445\n      ],\n      [\n        \"▁掛けた\",\n        -12.806596755981445\n      ],\n      [\n        \"練習\",\n        -12.806650161743164\n      ],\n      [\n        \"ní\",\n        -12.806679725646973\n      ],\n      [\n        \"▁チェコスロバキア\",\n        -12.806770324707031\n      ],\n      [\n        \"透明\",\n        -12.806928634643555\n      ],\n      [\n        \"▁コンピューティング\",\n        -12.806983947753906\n      ],\n      [\n        \"▁加水\",\n        -12.80699634552002\n      ],\n      [\n        \"敷地\",\n        -12.807104110717773\n      ],\n      [\n        \"靖\",\n        -12.807229042053223\n      ],\n      [\n        \"▁不変\",\n        -12.807534217834473\n      ],\n      [\n        \"井上\",\n        -12.80762767791748\n      ],\n      [\n        \"▁発して\",\n        -12.807657241821289\n      ],\n      [\n        \"▁ひね\",\n        -12.807686805725098\n      ],\n      [\n        \"▁青銅\",\n        -12.80771255493164\n      ],\n      [\n        \"▁照準\",\n        -12.80789566040039\n      ],\n      [\n        \"▁洋子\",\n        -12.807924270629883\n      ],\n      [\n        \"▁いまいち\",\n        -12.807999610900879\n      ],\n      [\n        \"ONG\",\n        -12.808090209960938\n      ],\n      [\n        \"▁白馬\",\n        -12.80814266204834\n      ],\n      [\n        \"point\",\n        -12.808171272277832\n      ],\n      [\n        \"▁ふんだんに\",\n        -12.808490753173828\n      ],\n      [\n        \"▁宝くじ\",\n        -12.808530807495117\n      ],\n      [\n        \"▁クワ\",\n        -12.808639526367188\n      ],\n      [\n        \"▁あざ\",\n        -12.808666229248047\n      ],\n      [\n        \"▁難航\",\n        -12.808822631835938\n      ],\n      [\n        \"祇\",\n        -12.808921813964844\n      ],\n      [\n        \"▁旧暦\",\n        -12.809133529663086\n      ],\n      [\n        \"▁遅らせ\",\n        -12.809168815612793\n      ],\n      [\n        \"▁防寒\",\n        -12.809226989746094\n      ],\n      [\n        \"▁玄米\",\n        -12.809281349182129\n      ],\n      [\n        \"▁砂浜\",\n        -12.809324264526367\n      ],\n      [\n        \"▁ハンセン\",\n        -12.809757232666016\n      ],\n      [\n        \"▁ダブリン\",\n        -12.809915542602539\n      ],\n      [\n        \"▁雲南\",\n        -12.81005573272705\n      ],\n      [\n        \"▁健在\",\n        -12.810222625732422\n      ],\n      [\n        \"廣\",\n        -12.810271263122559\n      ],\n      [\n        \"lation\",\n        -12.810296058654785\n      ],\n      [\n        \"地区\",\n        -12.810481071472168\n      ],\n      [\n        \"▁ケイト\",\n        -12.810505867004395\n      ],\n      [\n        \"瑛\",\n        -12.810863494873047\n      ],\n      [\n        \"腱\",\n        -12.810863494873047\n      ],\n      [\n        \"▁ノーフォーク\",\n        -12.810885429382324\n      ],\n      [\n        \"受験\",\n        -12.810935020446777\n      ],\n      [\n        \"▁ふわふわ\",\n        -12.811079025268555\n      ],\n      [\n        \"▁従兄弟\",\n        -12.811145782470703\n      ],\n      [\n        \"▁雇い\",\n        -12.811164855957031\n      ],\n      [\n        \"贈\",\n        -12.811326026916504\n      ],\n      [\n        \"▁ディスコ\",\n        -12.811381340026855\n      ],\n      [\n        \"DV\",\n        -12.811437606811523\n      ],\n      [\n        \"▁華艶\",\n        -12.811527252197266\n      ],\n      [\n        \"▁書写\",\n        -12.811546325683594\n      ],\n      [\n        \"α\",\n        -12.811576843261719\n      ],\n      [\n        \"▁コツコツ\",\n        -12.811727523803711\n      ],\n      [\n        \"▁カカオ\",\n        -12.811729431152344\n      ],\n      [\n        \"ソーム\",\n        -12.811742782592773\n      ],\n      [\n        \"▁向く\",\n        -12.811874389648438\n      ],\n      [\n        \"在线\",\n        -12.812012672424316\n      ],\n      [\n        \"▁空想\",\n        -12.812334060668945\n      ],\n      [\n        \"劣等\",\n        -12.812417030334473\n      ],\n      [\n        \"▁谷口\",\n        -12.812482833862305\n      ],\n      [\n        \"▁霊園\",\n        -12.812528610229492\n      ],\n      [\n        \"峻\",\n        -12.812592506408691\n      ],\n      [\n        \"▁ウケ\",\n        -12.812617301940918\n      ],\n      [\n        \"▁取り出す\",\n        -12.812655448913574\n      ],\n      [\n        \"有名な\",\n        -12.812666893005371\n      ],\n      [\n        \"▁Tur\",\n        -12.812702178955078\n      ],\n      [\n        \"▁アットホーム\",\n        -12.81283187866211\n      ],\n      [\n        \"▁こぼれ\",\n        -12.812833786010742\n      ],\n      [\n        \"ループ\",\n        -12.812843322753906\n      ],\n      [\n        \"▁あつた\",\n        -12.812957763671875\n      ],\n      [\n        \"▁EURO\",\n        -12.812976837158203\n      ],\n      [\n        \"▁積立\",\n        -12.812982559204102\n      ],\n      [\n        \"どく\",\n        -12.813011169433594\n      ],\n      [\n        \"▁ロジック\",\n        -12.813029289245605\n      ],\n      [\n        \"▁電報\",\n        -12.813243865966797\n      ],\n      [\n        \"meth\",\n        -12.813455581665039\n      ],\n      [\n        \"渠\",\n        -12.813458442687988\n      ],\n      [\n        \"そば\",\n        -12.813472747802734\n      ],\n      [\n        \"▁hp\",\n        -12.81357479095459\n      ],\n      [\n        \"惨\",\n        -12.81359577178955\n      ],\n      [\n        \"▁若葉\",\n        -12.813643455505371\n      ],\n      [\n        \"▁不二\",\n        -12.813652038574219\n      ],\n      [\n        \"▁クレーター\",\n        -12.813815116882324\n      ],\n      [\n        \"▁von\",\n        -12.8139066696167\n      ],\n      [\n        \"▁闘士\",\n        -12.81401252746582\n      ],\n      [\n        \"ホフ\",\n        -12.814051628112793\n      ],\n      [\n        \"▁安易に\",\n        -12.814107894897461\n      ],\n      [\n        \"▁セブ\",\n        -12.814139366149902\n      ],\n      [\n        \"召\",\n        -12.814140319824219\n      ],\n      [\n        \"全く\",\n        -12.814199447631836\n      ],\n      [\n        \"▁コスモス\",\n        -12.814273834228516\n      ],\n      [\n        \"劇中\",\n        -12.814336776733398\n      ],\n      [\n        \"ネーター\",\n        -12.814393997192383\n      ],\n      [\n        \"▁異物\",\n        -12.814452171325684\n      ],\n      [\n        \"寛永\",\n        -12.814507484436035\n      ],\n      [\n        \"ete\",\n        -12.814554214477539\n      ],\n      [\n        \"▁怪人\",\n        -12.814562797546387\n      ],\n      [\n        \"▁ペリー\",\n        -12.814657211303711\n      ],\n      [\n        \"指導\",\n        -12.814689636230469\n      ],\n      [\n        \"▁囚われ\",\n        -12.814974784851074\n      ],\n      [\n        \"▁ユタ\",\n        -12.815102577209473\n      ],\n      [\n        \"▁北海\",\n        -12.815109252929688\n      ],\n      [\n        \"La\",\n        -12.815122604370117\n      ],\n      [\n        \"▁甚大な\",\n        -12.815192222595215\n      ],\n      [\n        \"▁東村山\",\n        -12.815194129943848\n      ],\n      [\n        \"▁Syll\",\n        -12.815206527709961\n      ],\n      [\n        \"▁増築\",\n        -12.815325736999512\n      ],\n      [\n        \"▁易く\",\n        -12.815376281738281\n      ],\n      [\n        \"▁日日新聞\",\n        -12.815409660339355\n      ],\n      [\n        \"▁電極\",\n        -12.81542682647705\n      ],\n      [\n        \"▁奥羽\",\n        -12.815622329711914\n      ],\n      [\n        \"▁Science\",\n        -12.81562614440918\n      ],\n      [\n        \"▁コンピレーション\",\n        -12.81562614440918\n      ],\n      [\n        \"▁左京\",\n        -12.815661430358887\n      ],\n      [\n        \"osa\",\n        -12.815725326538086\n      ],\n      [\n        \"▁Season\",\n        -12.815849304199219\n      ],\n      [\n        \"▁経口\",\n        -12.815909385681152\n      ],\n      [\n        \"▁貫く\",\n        -12.816248893737793\n      ],\n      [\n        \"リーニ\",\n        -12.816268920898438\n      ],\n      [\n        \"▁インスタント\",\n        -12.816413879394531\n      ],\n      [\n        \"nov\",\n        -12.816452026367188\n      ],\n      [\n        \"1909\",\n        -12.816513061523438\n      ],\n      [\n        \"亡くな\",\n        -12.816579818725586\n      ],\n      [\n        \"▁志す\",\n        -12.816591262817383\n      ],\n      [\n        \"▁街路\",\n        -12.816635131835938\n      ],\n      [\n        \"▁レーニン\",\n        -12.816655158996582\n      ],\n      [\n        \"▁集う\",\n        -12.816781044006348\n      ],\n      [\n        \"–\",\n        -12.816818237304688\n      ],\n      [\n        \"▁ビクトリア\",\n        -12.816939353942871\n      ],\n      [\n        \"▁乗り場\",\n        -12.817001342773438\n      ],\n      [\n        \"7000\",\n        -12.817078590393066\n      ],\n      [\n        \"アイス\",\n        -12.817144393920898\n      ],\n      [\n        \"网\",\n        -12.817146301269531\n      ],\n      [\n        \"▁運んだ\",\n        -12.817148208618164\n      ],\n      [\n        \"▁ジキル\",\n        -12.817463874816895\n      ],\n      [\n        \"金属\",\n        -12.817501068115234\n      ],\n      [\n        \"ガイド\",\n        -12.817602157592773\n      ],\n      [\n        \"INA\",\n        -12.817645072937012\n      ],\n      [\n        \"▁なんば\",\n        -12.817710876464844\n      ],\n      [\n        \"▁直子\",\n        -12.817710876464844\n      ],\n      [\n        \"▁シードル\",\n        -12.817763328552246\n      ],\n      [\n        \"▁手話\",\n        -12.817763328552246\n      ],\n      [\n        \"▁canada\",\n        -12.817809104919434\n      ],\n      [\n        \"▁コネ\",\n        -12.817827224731445\n      ],\n      [\n        \"▁倍増\",\n        -12.817856788635254\n      ],\n      [\n        \"近隣\",\n        -12.817971229553223\n      ],\n      [\n        \"▁ビルディング\",\n        -12.818049430847168\n      ],\n      [\n        \"巴\",\n        -12.818138122558594\n      ],\n      [\n        \"▁落成\",\n        -12.81824779510498\n      ],\n      [\n        \"▁心配です\",\n        -12.81843090057373\n      ],\n      [\n        \"咬\",\n        -12.818450927734375\n      ],\n      [\n        \"▁Code\",\n        -12.818511009216309\n      ],\n      [\n        \"體\",\n        -12.818574905395508\n      ],\n      [\n        \"▁怪し\",\n        -12.818628311157227\n      ],\n      [\n        \"▁オカマ\",\n        -12.818804740905762\n      ],\n      [\n        \"眩\",\n        -12.818885803222656\n      ],\n      [\n        \"中心\",\n        -12.818888664245605\n      ],\n      [\n        \"GG\",\n        -12.818899154663086\n      ],\n      [\n        \"▁参院\",\n        -12.818915367126465\n      ],\n      [\n        \"▁断る\",\n        -12.81900691986084\n      ],\n      [\n        \"▁極度\",\n        -12.819024085998535\n      ],\n      [\n        \"幼名\",\n        -12.819134712219238\n      ],\n      [\n        \"▁真実の\",\n        -12.819242477416992\n      ],\n      [\n        \"▁トリップ\",\n        -12.819250106811523\n      ],\n      [\n        \"教会\",\n        -12.819270133972168\n      ],\n      [\n        \"▁粛清\",\n        -12.819321632385254\n      ],\n      [\n        \"▁おにぎり\",\n        -12.819324493408203\n      ],\n      [\n        \"▁田畑\",\n        -12.819337844848633\n      ],\n      [\n        \"野菜\",\n        -12.819376945495605\n      ],\n      [\n        \"CTFL\",\n        -12.819443702697754\n      ],\n      [\n        \"スイス\",\n        -12.819536209106445\n      ],\n      [\n        \"▁ジーン\",\n        -12.819578170776367\n      ],\n      [\n        \"▁モダンな\",\n        -12.819740295410156\n      ],\n      [\n        \"▁天竜\",\n        -12.819743156433105\n      ],\n      [\n        \"各国\",\n        -12.819940567016602\n      ],\n      [\n        \"eh\",\n        -12.819948196411133\n      ],\n      [\n        \"▁年月日\",\n        -12.819963455200195\n      ],\n      [\n        \"▁マグネシウム\",\n        -12.819974899291992\n      ],\n      [\n        \"▁乗っ取\",\n        -12.819988250732422\n      ],\n      [\n        \"▁邦画\",\n        -12.820056915283203\n      ],\n      [\n        \"ORD\",\n        -12.820155143737793\n      ],\n      [\n        \"▁松村\",\n        -12.820159912109375\n      ],\n      [\n        \"▁パコパコ\",\n        -12.82019329071045\n      ],\n      [\n        \"▁心掛けて\",\n        -12.820194244384766\n      ],\n      [\n        \"▁Program\",\n        -12.820219993591309\n      ],\n      [\n        \"sho\",\n        -12.820490837097168\n      ],\n      [\n        \"▁王道\",\n        -12.820499420166016\n      ],\n      [\n        \"本貫\",\n        -12.820524215698242\n      ],\n      [\n        \"▁長浜\",\n        -12.820528984069824\n      ],\n      [\n        \"かろう\",\n        -12.820578575134277\n      ],\n      [\n        \"▁論点\",\n        -12.820606231689453\n      ],\n      [\n        \"MV\",\n        -12.820725440979004\n      ],\n      [\n        \"▁HOT\",\n        -12.821078300476074\n      ],\n      [\n        \"▁察し\",\n        -12.821091651916504\n      ],\n      [\n        \"▁的確な\",\n        -12.82132339477539\n      ],\n      [\n        \"▁立ち会\",\n        -12.82137393951416\n      ],\n      [\n        \"▁先立って\",\n        -12.821537017822266\n      ],\n      [\n        \"相対\",\n        -12.821707725524902\n      ],\n      [\n        \"▁走者\",\n        -12.821720123291016\n      ],\n      [\n        \"▁ヴォルフ\",\n        -12.821880340576172\n      ],\n      [\n        \"▁Des\",\n        -12.821903228759766\n      ],\n      [\n        \"▁ハンカチ\",\n        -12.821938514709473\n      ],\n      [\n        \"▁レーフ\",\n        -12.821941375732422\n      ],\n      [\n        \"▁千種\",\n        -12.82197380065918\n      ],\n      [\n        \"▁酒類\",\n        -12.822098731994629\n      ],\n      [\n        \"▁理屈\",\n        -12.822195053100586\n      ],\n      [\n        \"▁柔らか\",\n        -12.822306632995605\n      ],\n      [\n        \"▁RECORDS\",\n        -12.822375297546387\n      ],\n      [\n        \"▁移入\",\n        -12.822447776794434\n      ],\n      [\n        \"マルチ\",\n        -12.822498321533203\n      ],\n      [\n        \"▁ルイジアナ\",\n        -12.822593688964844\n      ],\n      [\n        \"▁遭った\",\n        -12.822598457336426\n      ],\n      [\n        \"▁受精\",\n        -12.822672843933105\n      ],\n      [\n        \"▁ゼウス\",\n        -12.82268238067627\n      ],\n      [\n        \"なんといっても\",\n        -12.8228120803833\n      ],\n      [\n        \"▁ひととき\",\n        -12.822815895080566\n      ],\n      [\n        \"▁DREAM\",\n        -12.822824478149414\n      ],\n      [\n        \"▁ヘッドホン\",\n        -12.822931289672852\n      ],\n      [\n        \"for\",\n        -12.823053359985352\n      ],\n      [\n        \"レンツ\",\n        -12.823084831237793\n      ],\n      [\n        \"Net\",\n        -12.823100090026855\n      ],\n      [\n        \"▁満月\",\n        -12.82310676574707\n      ],\n      [\n        \"▁スパム\",\n        -12.823138236999512\n      ],\n      [\n        \"▁濡れた\",\n        -12.823330879211426\n      ],\n      [\n        \"▁Run\",\n        -12.823342323303223\n      ],\n      [\n        \"▁救世\",\n        -12.823343276977539\n      ],\n      [\n        \"▁求職\",\n        -12.823345184326172\n      ],\n      [\n        \"▁公文書\",\n        -12.823468208312988\n      ],\n      [\n        \"素晴らしい\",\n        -12.823631286621094\n      ],\n      [\n        \"西洋\",\n        -12.823654174804688\n      ],\n      [\n        \"嫡\",\n        -12.82368278503418\n      ],\n      [\n        \"▁item\",\n        -12.82369327545166\n      ],\n      [\n        \"▁襲った\",\n        -12.823737144470215\n      ],\n      [\n        \"▁悔しい\",\n        -12.823929786682129\n      ],\n      [\n        \"内閣\",\n        -12.824089050292969\n      ],\n      [\n        \"爽\",\n        -12.824106216430664\n      ],\n      [\n        \"崇\",\n        -12.824280738830566\n      ],\n      [\n        \"▁ポニーキャニオン\",\n        -12.82434368133545\n      ],\n      [\n        \"▁花束\",\n        -12.824437141418457\n      ],\n      [\n        \"▁条文\",\n        -12.824542045593262\n      ],\n      [\n        \"中学校\",\n        -12.824678421020508\n      ],\n      [\n        \"探り\",\n        -12.824695587158203\n      ],\n      [\n        \"頷\",\n        -12.824780464172363\n      ],\n      [\n        \"▁灌漑\",\n        -12.82478141784668\n      ],\n      [\n        \"▁議案\",\n        -12.82500171661377\n      ],\n      [\n        \"▁容積\",\n        -12.825037956237793\n      ],\n      [\n        \"▁組曲\",\n        -12.825196266174316\n      ],\n      [\n        \"頚\",\n        -12.82521915435791\n      ],\n      [\n        \"蔡\",\n        -12.825438499450684\n      ],\n      [\n        \"▁吐き気\",\n        -12.825511932373047\n      ],\n      [\n        \"▁晴れて\",\n        -12.82555866241455\n      ],\n      [\n        \"▁パイレーツ\",\n        -12.825657844543457\n      ],\n      [\n        \"▁商談\",\n        -12.825743675231934\n      ],\n      [\n        \"▁急進\",\n        -12.82584285736084\n      ],\n      [\n        \"▁チンポ\",\n        -12.825888633728027\n      ],\n      [\n        \"▁資する\",\n        -12.826190948486328\n      ],\n      [\n        \"▁動植物\",\n        -12.826348304748535\n      ],\n      [\n        \"▁ATP\",\n        -12.826502799987793\n      ],\n      [\n        \"替わって\",\n        -12.826526641845703\n      ],\n      [\n        \"▁ハプスブルク\",\n        -12.826534271240234\n      ],\n      [\n        \"▁悲報\",\n        -12.826589584350586\n      ],\n      [\n        \"▁生き残った\",\n        -12.826776504516602\n      ],\n      [\n        \"▁エコノミー\",\n        -12.826973915100098\n      ],\n      [\n        \"リーダー\",\n        -12.827018737792969\n      ],\n      [\n        \"▁ビーコン\",\n        -12.827049255371094\n      ],\n      [\n        \"▁型番\",\n        -12.82720947265625\n      ],\n      [\n        \"upp\",\n        -12.827217102050781\n      ],\n      [\n        \"▁タイマー\",\n        -12.827234268188477\n      ],\n      [\n        \"▁手形\",\n        -12.827272415161133\n      ],\n      [\n        \"▁エネ\",\n        -12.827338218688965\n      ],\n      [\n        \"▁スキップ\",\n        -12.827554702758789\n      ],\n      [\n        \"ental\",\n        -12.827570915222168\n      ],\n      [\n        \"▁カヌー\",\n        -12.8275728225708\n      ],\n      [\n        \"▁Park\",\n        -12.827595710754395\n      ],\n      [\n        \"▁身内\",\n        -12.827699661254883\n      ],\n      [\n        \"▁脱ぎ\",\n        -12.827779769897461\n      ],\n      [\n        \"儒\",\n        -12.827851295471191\n      ],\n      [\n        \"▁長方形\",\n        -12.827853202819824\n      ],\n      [\n        \"▁スワン\",\n        -12.827863693237305\n      ],\n      [\n        \"▁懸賞\",\n        -12.827885627746582\n      ],\n      [\n        \"▁隠岐\",\n        -12.827888488769531\n      ],\n      [\n        \"▁溶岩\",\n        -12.827900886535645\n      ],\n      [\n        \"▁集客\",\n        -12.827930450439453\n      ],\n      [\n        \"▁Report\",\n        -12.827993392944336\n      ],\n      [\n        \"▁義父\",\n        -12.828043937683105\n      ],\n      [\n        \"1890\",\n        -12.828105926513672\n      ],\n      [\n        \"▁不快な\",\n        -12.828184127807617\n      ],\n      [\n        \"▁慣例\",\n        -12.828291893005371\n      ],\n      [\n        \"▁慣れる\",\n        -12.828505516052246\n      ],\n      [\n        \"発見\",\n        -12.828593254089355\n      ],\n      [\n        \"▁勤労\",\n        -12.828756332397461\n      ],\n      [\n        \"▁051\",\n        -12.82895278930664\n      ],\n      [\n        \"▁バリュー\",\n        -12.828990936279297\n      ],\n      [\n        \"▁利子\",\n        -12.82901382446289\n      ],\n      [\n        \"何より\",\n        -12.8290376663208\n      ],\n      [\n        \"▁床下\",\n        -12.829081535339355\n      ],\n      [\n        \"▁微細\",\n        -12.829092979431152\n      ],\n      [\n        \"▁タカラ\",\n        -12.82910442352295\n      ],\n      [\n        \"▁竹本\",\n        -12.829313278198242\n      ],\n      [\n        \"▁天理\",\n        -12.829529762268066\n      ],\n      [\n        \"▁代償\",\n        -12.829543113708496\n      ],\n      [\n        \"▁兼ね備えた\",\n        -12.829573631286621\n      ],\n      [\n        \"叙\",\n        -12.829604148864746\n      ],\n      [\n        \"信頼\",\n        -12.830044746398926\n      ],\n      [\n        \"オープニング\",\n        -12.830047607421875\n      ],\n      [\n        \"▁通わ\",\n        -12.830098152160645\n      ],\n      [\n        \"▁諦める\",\n        -12.830367088317871\n      ],\n      [\n        \"弊\",\n        -12.830450057983398\n      ],\n      [\n        \"▁順調\",\n        -12.83050537109375\n      ],\n      [\n        \"▁有給\",\n        -12.830509185791016\n      ],\n      [\n        \"▁切り替えて\",\n        -12.83071231842041\n      ],\n      [\n        \"在庫\",\n        -12.83080768585205\n      ],\n      [\n        \"▁和紙\",\n        -12.830887794494629\n      ],\n      [\n        \"▁ティッシュ\",\n        -12.83090591430664\n      ],\n      [\n        \"嵌\",\n        -12.830931663513184\n      ],\n      [\n        \"睡眠\",\n        -12.830949783325195\n      ],\n      [\n        \"▁免れた\",\n        -12.830977439880371\n      ],\n      [\n        \"▁フィッシャー\",\n        -12.831002235412598\n      ],\n      [\n        \"▁LEAGUE\",\n        -12.831151962280273\n      ],\n      [\n        \"グモ\",\n        -12.831258773803711\n      ],\n      [\n        \"▁高浜\",\n        -12.831321716308594\n      ],\n      [\n        \"▁一晩\",\n        -12.831559181213379\n      ],\n      [\n        \"▁鎮痛\",\n        -12.831643104553223\n      ],\n      [\n        \"注釈\",\n        -12.831652641296387\n      ],\n      [\n        \"有難い\",\n        -12.831826210021973\n      ],\n      [\n        \"▁片隅\",\n        -12.831878662109375\n      ],\n      [\n        \"▁昼寝\",\n        -12.831889152526855\n      ],\n      [\n        \"▁達也\",\n        -12.832005500793457\n      ],\n      [\n        \"▁舞踏\",\n        -12.832073211669922\n      ],\n      [\n        \"▁始祖\",\n        -12.832296371459961\n      ],\n      [\n        \"▁彦根\",\n        -12.832554817199707\n      ],\n      [\n        \"▁浮遊\",\n        -12.832768440246582\n      ],\n      [\n        \"ل\",\n        -12.832917213439941\n      ],\n      [\n        \"▁クンニ\",\n        -12.832929611206055\n      ],\n      [\n        \"▁桔梗\",\n        -12.833137512207031\n      ],\n      [\n        \"繁殖\",\n        -12.833168983459473\n      ],\n      [\n        \"▁増額\",\n        -12.833349227905273\n      ],\n      [\n        \"▁一眼レフ\",\n        -12.833358764648438\n      ],\n      [\n        \"▁ピンと\",\n        -12.833426475524902\n      ],\n      [\n        \"瀬戸\",\n        -12.833588600158691\n      ],\n      [\n        \"▁・・)\",\n        -12.833629608154297\n      ],\n      [\n        \"▁Software\",\n        -12.833800315856934\n      ],\n      [\n        \"▁いろは\",\n        -12.833806991577148\n      ],\n      [\n        \"▁公的な\",\n        -12.833964347839355\n      ],\n      [\n        \"▁With\",\n        -12.833976745605469\n      ],\n      [\n        \"▁フラメッテ\",\n        -12.83402156829834\n      ],\n      [\n        \"▁被写体\",\n        -12.83424186706543\n      ],\n      [\n        \"▁実演\",\n        -12.834293365478516\n      ],\n      [\n        \"▁誤認\",\n        -12.83430290222168\n      ],\n      [\n        \"天保\",\n        -12.834315299987793\n      ],\n      [\n        \"▁交友\",\n        -12.834330558776855\n      ],\n      [\n        \"omb\",\n        -12.834339141845703\n      ],\n      [\n        \"▁帯びた\",\n        -12.834421157836914\n      ],\n      [\n        \"んこう\",\n        -12.834451675415039\n      ],\n      [\n        \"決して\",\n        -12.834479331970215\n      ],\n      [\n        \"之内\",\n        -12.834599494934082\n      ],\n      [\n        \"ちゃんと\",\n        -12.834731101989746\n      ],\n      [\n        \"▁重んじ\",\n        -12.83474349975586\n      ],\n      [\n        \"侠\",\n        -12.834905624389648\n      ],\n      [\n        \"▁障壁\",\n        -12.834906578063965\n      ],\n      [\n        \"ずく\",\n        -12.834999084472656\n      ],\n      [\n        \"▁気持\",\n        -12.835041046142578\n      ],\n      [\n        \"▁いっぱいの\",\n        -12.835171699523926\n      ],\n      [\n        \"▁What\",\n        -12.83522891998291\n      ],\n      [\n        \"▁CAU\",\n        -12.835312843322754\n      ],\n      [\n        \"▁オリオン\",\n        -12.83536434173584\n      ],\n      [\n        \"▁回廊\",\n        -12.835375785827637\n      ],\n      [\n        \"ノ内\",\n        -12.83553409576416\n      ],\n      [\n        \"▁義母\",\n        -12.835638999938965\n      ],\n      [\n        \"そそ\",\n        -12.835670471191406\n      ],\n      [\n        \"▁入省\",\n        -12.835712432861328\n      ],\n      [\n        \"▁コンペティション\",\n        -12.835790634155273\n      ],\n      [\n        \"▁アドニス\",\n        -12.835855484008789\n      ],\n      [\n        \"▁あさひ\",\n        -12.835890769958496\n      ],\n      [\n        \"😊\",\n        -12.836012840270996\n      ],\n      [\n        \"▁植木\",\n        -12.836200714111328\n      ],\n      [\n        \"▁見破る\",\n        -12.836236000061035\n      ],\n      [\n        \"朋\",\n        -12.836286544799805\n      ],\n      [\n        \"フランク\",\n        -12.836434364318848\n      ],\n      [\n        \"▁聴衆\",\n        -12.836480140686035\n      ],\n      [\n        \"▁夏目\",\n        -12.836481094360352\n      ],\n      [\n        \"▁ただいま\",\n        -12.836522102355957\n      ],\n      [\n        \"サポート\",\n        -12.836658477783203\n      ],\n      [\n        \"▁いすゞ\",\n        -12.836677551269531\n      ],\n      [\n        \"▁明かり\",\n        -12.836763381958008\n      ],\n      [\n        \"▁デビッド\",\n        -12.836820602416992\n      ],\n      [\n        \"▁欠乏\",\n        -12.836908340454102\n      ],\n      [\n        \"▁伝わった\",\n        -12.837027549743652\n      ],\n      [\n        \"▁東大阪\",\n        -12.837047576904297\n      ],\n      [\n        \"▁裁定\",\n        -12.837057113647461\n      ],\n      [\n        \"▁再戦\",\n        -12.837119102478027\n      ],\n      [\n        \"▁親父\",\n        -12.837215423583984\n      ],\n      [\n        \"▁宮古島\",\n        -12.837289810180664\n      ],\n      [\n        \"強者\",\n        -12.83730697631836\n      ],\n      [\n        \"▁ファイナンシャル\",\n        -12.837342262268066\n      ],\n      [\n        \"楯\",\n        -12.837342262268066\n      ],\n      [\n        \"砥\",\n        -12.837342262268066\n      ],\n      [\n        \"▁快挙\",\n        -12.837387084960938\n      ],\n      [\n        \"浮\",\n        -12.837533950805664\n      ],\n      [\n        \"▁ロースター\",\n        -12.837535858154297\n      ],\n      [\n        \"▁ニンニク\",\n        -12.837563514709473\n      ],\n      [\n        \"acy\",\n        -12.837567329406738\n      ],\n      [\n        \"▁State\",\n        -12.83775520324707\n      ],\n      [\n        \"斧\",\n        -12.837785720825195\n      ],\n      [\n        \"▁都督\",\n        -12.838143348693848\n      ],\n      [\n        \"▁涼しい\",\n        -12.838163375854492\n      ],\n      [\n        \"渡辺\",\n        -12.838271141052246\n      ],\n      [\n        \"←\",\n        -12.838295936584473\n      ],\n      [\n        \"▁兄妹\",\n        -12.838311195373535\n      ],\n      [\n        \"▁ヴェーチェ\",\n        -12.838422775268555\n      ],\n      [\n        \"▁うなぎ\",\n        -12.83849048614502\n      ],\n      [\n        \"巷\",\n        -12.83867359161377\n      ],\n      [\n        \"▁草案\",\n        -12.838723182678223\n      ],\n      [\n        \"▁トラップ\",\n        -12.838876724243164\n      ],\n      [\n        \"▁おおい\",\n        -12.838929176330566\n      ],\n      [\n        \"▁上告\",\n        -12.838963508605957\n      ],\n      [\n        \"▁エグゼクティブ\",\n        -12.839118003845215\n      ],\n      [\n        \"▁ETC\",\n        -12.839154243469238\n      ],\n      [\n        \"▁苗字\",\n        -12.839208602905273\n      ],\n      [\n        \"▁収まる\",\n        -12.8394775390625\n      ],\n      [\n        \"▁ネタバレ\",\n        -12.83956241607666\n      ],\n      [\n        \"▁文春\",\n        -12.839601516723633\n      ],\n      [\n        \"シリア\",\n        -12.839609146118164\n      ],\n      [\n        \"▁かかわり\",\n        -12.839795112609863\n      ],\n      [\n        \"捻\",\n        -12.840004920959473\n      ],\n      [\n        \"▁有害な\",\n        -12.840005874633789\n      ],\n      [\n        \"▁崩れて\",\n        -12.840024948120117\n      ],\n      [\n        \"入社\",\n        -12.840097427368164\n      ],\n      [\n        \"▁ウィッグ\",\n        -12.840130805969238\n      ],\n      [\n        \"杏\",\n        -12.840132713317871\n      ],\n      [\n        \"IRA\",\n        -12.840144157409668\n      ],\n      [\n        \"▁フィリ\",\n        -12.840187072753906\n      ],\n      [\n        \"▁CAN\",\n        -12.840222358703613\n      ],\n      [\n        \"▁カリブ海\",\n        -12.840229034423828\n      ],\n      [\n        \"▁ガッツ\",\n        -12.840254783630371\n      ],\n      [\n        \"ーヴル\",\n        -12.840314865112305\n      ],\n      [\n        \"祭り\",\n        -12.84031867980957\n      ],\n      [\n        \"▁尋問\",\n        -12.84045124053955\n      ],\n      [\n        \"▁得です\",\n        -12.840523719787598\n      ],\n      [\n        \"▁延喜\",\n        -12.840537071228027\n      ],\n      [\n        \"リッド\",\n        -12.840566635131836\n      ],\n      [\n        \"▁キレイな\",\n        -12.840853691101074\n      ],\n      [\n        \"近い\",\n        -12.840899467468262\n      ],\n      [\n        \"volution\",\n        -12.841118812561035\n      ],\n      [\n        \"喫\",\n        -12.841146469116211\n      ],\n      [\n        \"▁こめて\",\n        -12.841193199157715\n      ],\n      [\n        \"材料\",\n        -12.841232299804688\n      ],\n      [\n        \"▁整った\",\n        -12.841338157653809\n      ],\n      [\n        \"騰\",\n        -12.841462135314941\n      ],\n      [\n        \"1904\",\n        -12.841489791870117\n      ],\n      [\n        \"▁肩書き\",\n        -12.841729164123535\n      ],\n      [\n        \"▁Over\",\n        -12.841760635375977\n      ],\n      [\n        \"▁フライパン\",\n        -12.84197998046875\n      ],\n      [\n        \"▁ジャガイモ\",\n        -12.842009544372559\n      ],\n      [\n        \"▁生没\",\n        -12.842018127441406\n      ],\n      [\n        \"▁スタック\",\n        -12.842039108276367\n      ],\n      [\n        \"late\",\n        -12.842074394226074\n      ],\n      [\n        \"記念\",\n        -12.8421049118042\n      ],\n      [\n        \"▁平方キロメートル\",\n        -12.842232704162598\n      ],\n      [\n        \"▁足らず\",\n        -12.842233657836914\n      ],\n      [\n        \"毎\",\n        -12.84223747253418\n      ],\n      [\n        \"ブック\",\n        -12.84238052368164\n      ],\n      [\n        \"▁ぴったりな\",\n        -12.842497825622559\n      ],\n      [\n        \"▁滅び\",\n        -12.842631340026855\n      ],\n      [\n        \"▁ひも\",\n        -12.842679023742676\n      ],\n      [\n        \"▁一本化\",\n        -12.842682838439941\n      ],\n      [\n        \"拓\",\n        -12.84271240234375\n      ],\n      [\n        \"▁スイカ\",\n        -12.842732429504395\n      ],\n      [\n        \"▁帰投\",\n        -12.842750549316406\n      ],\n      [\n        \"▁後遺症\",\n        -12.842901229858398\n      ],\n      [\n        \"▁毀損\",\n        -12.842901229858398\n      ],\n      [\n        \"前日\",\n        -12.842902183532715\n      ],\n      [\n        \"▁隠蔽\",\n        -12.84290885925293\n      ],\n      [\n        \"黎\",\n        -12.843123435974121\n      ],\n      [\n        \"▁赴く\",\n        -12.843125343322754\n      ],\n      [\n        \"▁ユーナ\",\n        -12.84313678741455\n      ],\n      [\n        \"オーストリア\",\n        -12.843229293823242\n      ],\n      [\n        \"▁とどまって\",\n        -12.843355178833008\n      ],\n      [\n        \"▁マッド\",\n        -12.843449592590332\n      ],\n      [\n        \"▁漁船\",\n        -12.843506813049316\n      ],\n      [\n        \"▁良ければ\",\n        -12.843534469604492\n      ],\n      [\n        \"▁Digital\",\n        -12.843570709228516\n      ],\n      [\n        \"▁盛り上がる\",\n        -12.843570709228516\n      ],\n      [\n        \"囁\",\n        -12.843570709228516\n      ],\n      [\n        \"▁マグカップ\",\n        -12.843595504760742\n      ],\n      [\n        \"▁シラバス\",\n        -12.84361743927002\n      ],\n      [\n        \"▁ユニクロ\",\n        -12.843732833862305\n      ],\n      [\n        \"全部\",\n        -12.844137191772461\n      ],\n      [\n        \"▁探究\",\n        -12.844255447387695\n      ],\n      [\n        \"▁賞品\",\n        -12.844316482543945\n      ],\n      [\n        \"▁客船\",\n        -12.844359397888184\n      ],\n      [\n        \"down\",\n        -12.844364166259766\n      ],\n      [\n        \"▁涼しく\",\n        -12.844374656677246\n      ],\n      [\n        \"▁飛来\",\n        -12.844404220581055\n      ],\n      [\n        \"▁強固な\",\n        -12.844463348388672\n      ],\n      [\n        \"▁畠山\",\n        -12.844467163085938\n      ],\n      [\n        \"war\",\n        -12.844478607177734\n      ],\n      [\n        \"廻\",\n        -12.844620704650879\n      ],\n      [\n        \"▁Collection\",\n        -12.844686508178711\n      ],\n      [\n        \"▁エタノール\",\n        -12.844686508178711\n      ],\n      [\n        \"亨\",\n        -12.844686508178711\n      ],\n      [\n        \"▁BOOKS\",\n        -12.844955444335938\n      ],\n      [\n        \"廃止\",\n        -12.845069885253906\n      ],\n      [\n        \"▁肉食\",\n        -12.845132827758789\n      ],\n      [\n        \"▁INTERFACE\",\n        -12.845133781433105\n      ],\n      [\n        \"▁モンキー\",\n        -12.845263481140137\n      ],\n      [\n        \"▁FBI\",\n        -12.845288276672363\n      ],\n      [\n        \"▁VOL\",\n        -12.845290184020996\n      ],\n      [\n        \"▁泌尿器\",\n        -12.845356941223145\n      ],\n      [\n        \"▁紡績\",\n        -12.845368385314941\n      ],\n      [\n        \"地図\",\n        -12.845379829406738\n      ],\n      [\n        \"インストール\",\n        -12.845402717590332\n      ],\n      [\n        \"機体\",\n        -12.845402717590332\n      ],\n      [\n        \"▁自負\",\n        -12.845537185668945\n      ],\n      [\n        \"▁FAQ\",\n        -12.845540046691895\n      ],\n      [\n        \"ローグ\",\n        -12.845664024353027\n      ],\n      [\n        \"▁津島\",\n        -12.845666885375977\n      ],\n      [\n        \"クリーン\",\n        -12.84569263458252\n      ],\n      [\n        \"邪\",\n        -12.845719337463379\n      ],\n      [\n        \"ウォン\",\n        -12.845803260803223\n      ],\n      [\n        \"▁Little\",\n        -12.845804214477539\n      ],\n      [\n        \"▁ケベック\",\n        -12.845914840698242\n      ],\n      [\n        \"▁東横\",\n        -12.845945358276367\n      ],\n      [\n        \"▁根源\",\n        -12.845976829528809\n      ],\n      [\n        \"▁スラヴ\",\n        -12.845993041992188\n      ],\n      [\n        \"▁役柄\",\n        -12.846020698547363\n      ],\n      [\n        \"▁ちなむ\",\n        -12.846029281616211\n      ],\n      [\n        \"▁焼いた\",\n        -12.846142768859863\n      ],\n      [\n        \"▁大雪\",\n        -12.846159934997559\n      ],\n      [\n        \"▁執着\",\n        -12.846172332763672\n      ],\n      [\n        \"訂\",\n        -12.846230506896973\n      ],\n      [\n        \"▁VPN\",\n        -12.846253395080566\n      ],\n      [\n        \"anna\",\n        -12.846346855163574\n      ],\n      [\n        \"▁君臨\",\n        -12.846358299255371\n      ],\n      [\n        \"トルコ\",\n        -12.846610069274902\n      ],\n      [\n        \"▁圧勝\",\n        -12.846619606018066\n      ],\n      [\n        \"▁千鳥\",\n        -12.846993446350098\n      ],\n      [\n        \"bal\",\n        -12.8471097946167\n      ],\n      [\n        \"▁こわ\",\n        -12.847186088562012\n      ],\n      [\n        \"機関\",\n        -12.84721565246582\n      ],\n      [\n        \"▁SMAP\",\n        -12.847262382507324\n      ],\n      [\n        \"▁藤枝\",\n        -12.847360610961914\n      ],\n      [\n        \"倍\",\n        -12.847386360168457\n      ],\n      [\n        \"▁ジェイソン\",\n        -12.847578048706055\n      ],\n      [\n        \"▁リコチェット\",\n        -12.84759521484375\n      ],\n      [\n        \"▁見当たら\",\n        -12.84759521484375\n      ],\n      [\n        \"▁チェスター\",\n        -12.847780227661133\n      ],\n      [\n        \"▁トレーリング\",\n        -12.847861289978027\n      ],\n      [\n        \"▁クラウス\",\n        -12.847870826721191\n      ],\n      [\n        \"▁返り\",\n        -12.847906112670898\n      ],\n      [\n        \"▁解か\",\n        -12.847926139831543\n      ],\n      [\n        \"▁錯覚\",\n        -12.848043441772461\n      ],\n      [\n        \"千代\",\n        -12.84805965423584\n      ],\n      [\n        \"答え\",\n        -12.848098754882812\n      ],\n      [\n        \"HAN\",\n        -12.848121643066406\n      ],\n      [\n        \"▁セーター\",\n        -12.848265647888184\n      ],\n      [\n        \"▁お披露目\",\n        -12.848267555236816\n      ],\n      [\n        \"▁ソマリア\",\n        -12.848340034484863\n      ],\n      [\n        \"坪\",\n        -12.848416328430176\n      ],\n      [\n        \"▁芥川\",\n        -12.848492622375488\n      ],\n      [\n        \"Soft\",\n        -12.848519325256348\n      ],\n      [\n        \"▁終わ\",\n        -12.848590850830078\n      ],\n      [\n        \"バイオ\",\n        -12.848610877990723\n      ],\n      [\n        \"▁三郷\",\n        -12.848647117614746\n      ],\n      [\n        \"▁トウモロコシ\",\n        -12.848715782165527\n      ],\n      [\n        \"ULL\",\n        -12.848881721496582\n      ],\n      [\n        \"▁親和\",\n        -12.848906517028809\n      ],\n      [\n        \"▁細心の\",\n        -12.848939895629883\n      ],\n      [\n        \"▁率いた\",\n        -12.848943710327148\n      ],\n      [\n        \"▁複線\",\n        -12.849279403686523\n      ],\n      [\n        \"▁明智\",\n        -12.849353790283203\n      ],\n      [\n        \"HIRO\",\n        -12.849425315856934\n      ],\n      [\n        \"▁うるさい\",\n        -12.84950065612793\n      ],\n      [\n        \"▁Line\",\n        -12.849597930908203\n      ],\n      [\n        \"▁ヨルダン\",\n        -12.849613189697266\n      ],\n      [\n        \"▁不服\",\n        -12.84962272644043\n      ],\n      [\n        \"ody\",\n        -12.849663734436035\n      ],\n      [\n        \"▁マイホーム\",\n        -12.849693298339844\n      ],\n      [\n        \"▁知育\",\n        -12.84975814819336\n      ],\n      [\n        \"▁ユニバース\",\n        -12.84985637664795\n      ],\n      [\n        \"▁あかり\",\n        -12.849982261657715\n      ],\n      [\n        \"▁STYLE\",\n        -12.850062370300293\n      ],\n      [\n        \"▁吟味\",\n        -12.850062370300293\n      ],\n      [\n        \"電動車\",\n        -12.850074768066406\n      ],\n      [\n        \"▁演芸\",\n        -12.850119590759277\n      ],\n      [\n        \"▁HIV\",\n        -12.850143432617188\n      ],\n      [\n        \"▁ちく\",\n        -12.850200653076172\n      ],\n      [\n        \"医学\",\n        -12.850247383117676\n      ],\n      [\n        \"▁喘息\",\n        -12.850287437438965\n      ],\n      [\n        \"▁野戦\",\n        -12.850379943847656\n      ],\n      [\n        \"卷\",\n        -12.85051155090332\n      ],\n      [\n        \"オム\",\n        -12.850536346435547\n      ],\n      [\n        \"▁賑わっ\",\n        -12.850549697875977\n      ],\n      [\n        \"▁ソレ\",\n        -12.850586891174316\n      ],\n      [\n        \"REP\",\n        -12.85058879852295\n      ],\n      [\n        \"▁GPU\",\n        -12.850759506225586\n      ],\n      [\n        \"▁真っ赤\",\n        -12.850796699523926\n      ],\n      [\n        \"▁隠れ家\",\n        -12.850923538208008\n      ],\n      [\n        \"濠\",\n        -12.850961685180664\n      ],\n      [\n        \"▁クラウドファンディング\",\n        -12.85118579864502\n      ],\n      [\n        \"▁光秀\",\n        -12.851247787475586\n      ],\n      [\n        \"▁争った\",\n        -12.85128116607666\n      ],\n      [\n        \"▁萩原\",\n        -12.851358413696289\n      ],\n      [\n        \"仰\",\n        -12.851522445678711\n      ],\n      [\n        \"▁肥大\",\n        -12.851533889770508\n      ],\n      [\n        \"▁簿記\",\n        -12.851536750793457\n      ],\n      [\n        \"▁光源\",\n        -12.851602554321289\n      ],\n      [\n        \"▁画題\",\n        -12.851726531982422\n      ],\n      [\n        \"▁西条\",\n        -12.851744651794434\n      ],\n      [\n        \"▁ウォーム\",\n        -12.851791381835938\n      ],\n      [\n        \"▁ドラクエ\",\n        -12.851861000061035\n      ],\n      [\n        \"▁およぶ\",\n        -12.851863861083984\n      ],\n      [\n        \"▁ラッパー\",\n        -12.851941108703613\n      ],\n      [\n        \"プログラム\",\n        -12.851971626281738\n      ],\n      [\n        \"憶\",\n        -12.851995468139648\n      ],\n      [\n        \"烏\",\n        -12.852028846740723\n      ],\n      [\n        \"ニョン\",\n        -12.85203742980957\n      ],\n      [\n        \"▁淡い\",\n        -12.85206127166748\n      ],\n      [\n        \"▁Enterprise\",\n        -12.852086067199707\n      ],\n      [\n        \"▁Sub\",\n        -12.852289199829102\n      ],\n      [\n        \"▁秒間\",\n        -12.852302551269531\n      ],\n      [\n        \"▁迷わ\",\n        -12.852316856384277\n      ],\n      [\n        \"▁スモール\",\n        -12.852350234985352\n      ],\n      [\n        \"▁税法\",\n        -12.852483749389648\n      ],\n      [\n        \"粗\",\n        -12.852533340454102\n      ],\n      [\n        \"▁イングリッシュ\",\n        -12.85253620147705\n      ],\n      [\n        \"▁ネーミング\",\n        -12.852537155151367\n      ],\n      [\n        \"▁処遇\",\n        -12.852559089660645\n      ],\n      [\n        \"艦名\",\n        -12.85274887084961\n      ],\n      [\n        \"▁ひっ\",\n        -12.852790832519531\n      ],\n      [\n        \"▁ニッケル\",\n        -12.852791786193848\n      ],\n      [\n        \"法科\",\n        -12.85289192199707\n      ],\n      [\n        \"▁呼び掛け\",\n        -12.852934837341309\n      ],\n      [\n        \"▁ウィンブルドン\",\n        -12.852986335754395\n      ],\n      [\n        \"▁バイデン\",\n        -12.852996826171875\n      ],\n      [\n        \"arr\",\n        -12.853036880493164\n      ],\n      [\n        \"テープ\",\n        -12.853148460388184\n      ],\n      [\n        \"ヨガ\",\n        -12.853279113769531\n      ],\n      [\n        \"▁ふしぎ\",\n        -12.853437423706055\n      ],\n      [\n        \"▁架橋\",\n        -12.853439331054688\n      ],\n      [\n        \"ã\",\n        -12.853628158569336\n      ],\n      [\n        \"▁民生\",\n        -12.853636741638184\n      ],\n      [\n        \"▁貧血\",\n        -12.853663444519043\n      ],\n      [\n        \"▁思いっきり\",\n        -12.853809356689453\n      ],\n      [\n        \"▁絶品\",\n        -12.853874206542969\n      ],\n      [\n        \"不思議\",\n        -12.854044914245605\n      ],\n      [\n        \"▁名跡\",\n        -12.854045867919922\n      ],\n      [\n        \"din\",\n        -12.854236602783203\n      ],\n      [\n        \"▁仕切り\",\n        -12.854389190673828\n      ],\n      [\n        \"▁行程\",\n        -12.854435920715332\n      ],\n      [\n        \"どんなに\",\n        -12.854476928710938\n      ],\n      [\n        \"▁Girls\",\n        -12.854575157165527\n      ],\n      [\n        \"▁トリガー\",\n        -12.854701042175293\n      ],\n      [\n        \"▁チューナー\",\n        -12.854782104492188\n      ],\n      [\n        \"▁抗生物質\",\n        -12.855015754699707\n      ],\n      [\n        \"▁タロット\",\n        -12.855036735534668\n      ],\n      [\n        \"URA\",\n        -12.855097770690918\n      ],\n      [\n        \"▁川村\",\n        -12.855164527893066\n      ],\n      [\n        \"呼応\",\n        -12.855196952819824\n      ],\n      [\n        \"▁賃料\",\n        -12.855241775512695\n      ],\n      [\n        \"▁ストックホルム\",\n        -12.855249404907227\n      ],\n      [\n        \"出産\",\n        -12.855284690856934\n      ],\n      [\n        \"▁あふれて\",\n        -12.855313301086426\n      ],\n      [\n        \"▁ウニ\",\n        -12.855340957641602\n      ],\n      [\n        \"▁鉄砲\",\n        -12.855356216430664\n      ],\n      [\n        \"▁歳暮\",\n        -12.855374336242676\n      ],\n      [\n        \"▁アトランティック\",\n        -12.855467796325684\n      ],\n      [\n        \"▁分かち\",\n        -12.85547161102295\n      ],\n      [\n        \"ais\",\n        -12.855737686157227\n      ],\n      [\n        \"▁慰め\",\n        -12.855745315551758\n      ],\n      [\n        \"▁うめ\",\n        -12.855819702148438\n      ],\n      [\n        \"▁隠れた\",\n        -12.85605525970459\n      ],\n      [\n        \"▁龍馬\",\n        -12.856064796447754\n      ],\n      [\n        \"▁アグリ\",\n        -12.856204986572266\n      ],\n      [\n        \"▁グリコ\",\n        -12.856212615966797\n      ],\n      [\n        \"▁ナレーター\",\n        -12.856330871582031\n      ],\n      [\n        \"▁当てはま\",\n        -12.856350898742676\n      ],\n      [\n        \"▁京橋\",\n        -12.856391906738281\n      ],\n      [\n        \"GY\",\n        -12.856424331665039\n      ],\n      [\n        \"▁常用\",\n        -12.856514930725098\n      ],\n      [\n        \"▁園児\",\n        -12.85651683807373\n      ],\n      [\n        \"保存\",\n        -12.856520652770996\n      ],\n      [\n        \"トランス\",\n        -12.856542587280273\n      ],\n      [\n        \"▁エンブレム\",\n        -12.856596946716309\n      ],\n      [\n        \"▁藤岡\",\n        -12.856648445129395\n      ],\n      [\n        \"▁モニタ\",\n        -12.856668472290039\n      ],\n      [\n        \"iya\",\n        -12.85672664642334\n      ],\n      [\n        \"▁金髪\",\n        -12.856890678405762\n      ],\n      [\n        \"レーティス\",\n        -12.856905937194824\n      ],\n      [\n        \"▁心斎橋\",\n        -12.85727596282959\n      ],\n      [\n        \"▁有意義な\",\n        -12.85727596282959\n      ],\n      [\n        \"▁ふか\",\n        -12.857415199279785\n      ],\n      [\n        \"▁手がかり\",\n        -12.857431411743164\n      ],\n      [\n        \"裸\",\n        -12.8574800491333\n      ],\n      [\n        \"▁亀裂\",\n        -12.85754680633545\n      ],\n      [\n        \"▁骨髄\",\n        -12.857560157775879\n      ],\n      [\n        \"逢\",\n        -12.857726097106934\n      ],\n      [\n        \"▁ギャラクシー\",\n        -12.857728004455566\n      ],\n      [\n        \"疇\",\n        -12.857728004455566\n      ],\n      [\n        \"苔\",\n        -12.857823371887207\n      ],\n      [\n        \"▁立派\",\n        -12.857827186584473\n      ],\n      [\n        \"▁ひらがな\",\n        -12.857954025268555\n      ],\n      [\n        \"lar\",\n        -12.858022689819336\n      ],\n      [\n        \"▁Arm\",\n        -12.858070373535156\n      ],\n      [\n        \"クエスト\",\n        -12.85816764831543\n      ],\n      [\n        \"▁貯まって\",\n        -12.858221054077148\n      ],\n      [\n        \"▁くず\",\n        -12.858266830444336\n      ],\n      [\n        \"▁仕上げた\",\n        -12.85837173461914\n      ],\n      [\n        \"廠\",\n        -12.858388900756836\n      ],\n      [\n        \"▁PayPay\",\n        -12.858407020568848\n      ],\n      [\n        \"扉\",\n        -12.85841178894043\n      ],\n      [\n        \"▁たのし\",\n        -12.858448028564453\n      ],\n      [\n        \"給与\",\n        -12.858478546142578\n      ],\n      [\n        \"girl\",\n        -12.858646392822266\n      ],\n      [\n        \"▁根幹\",\n        -12.858765602111816\n      ],\n      [\n        \"▁カルタゴ\",\n        -12.85886001586914\n      ],\n      [\n        \"▁丸ごと\",\n        -12.858875274658203\n      ],\n      [\n        \"▁いっぱいです\",\n        -12.858895301818848\n      ],\n      [\n        \"▁法要\",\n        -12.858968734741211\n      ],\n      [\n        \"▁カワイイ\",\n        -12.859086990356445\n      ],\n      [\n        \"▁引き抜\",\n        -12.859101295471191\n      ],\n      [\n        \"エクス\",\n        -12.859244346618652\n      ],\n      [\n        \"▁DOS\",\n        -12.859301567077637\n      ],\n      [\n        \"▁享受\",\n        -12.85931396484375\n      ],\n      [\n        \"▁ユニーク\",\n        -12.85952091217041\n      ],\n      [\n        \"▁歩け\",\n        -12.859631538391113\n      ],\n      [\n        \"▁罪悪\",\n        -12.85975456237793\n      ],\n      [\n        \"▁改める\",\n        -12.859760284423828\n      ],\n      [\n        \"▁下層\",\n        -12.85976505279541\n      ],\n      [\n        \"▁マッピング\",\n        -12.860017776489258\n      ],\n      [\n        \"▁ガイドブック\",\n        -12.860027313232422\n      ],\n      [\n        \"▁熱田\",\n        -12.860086441040039\n      ],\n      [\n        \"▁kcal\",\n        -12.86009693145752\n      ],\n      [\n        \"ベート\",\n        -12.860157012939453\n      ],\n      [\n        \"▁主治医\",\n        -12.860220909118652\n      ],\n      [\n        \"▁懇願\",\n        -12.860220909118652\n      ],\n      [\n        \"▁競艇\",\n        -12.860458374023438\n      ],\n      [\n        \"▁ぶっかけ\",\n        -12.860469818115234\n      ],\n      [\n        \"▁ときどき\",\n        -12.86050796508789\n      ],\n      [\n        \"▁視認\",\n        -12.860553741455078\n      ],\n      [\n        \"▁MOVIE\",\n        -12.860674858093262\n      ],\n      [\n        \"▁ラグジュアリー\",\n        -12.860674858093262\n      ],\n      [\n        \"▁流した\",\n        -12.860803604125977\n      ],\n      [\n        \"▁近傍\",\n        -12.86091423034668\n      ],\n      [\n        \"▁帰ら\",\n        -12.861248970031738\n      ],\n      [\n        \"▁御座います\",\n        -12.861355781555176\n      ],\n      [\n        \"▁デジカメ\",\n        -12.861366271972656\n      ],\n      [\n        \"▁不利な\",\n        -12.861376762390137\n      ],\n      [\n        \"rem\",\n        -12.861466407775879\n      ],\n      [\n        \"GER\",\n        -12.8615083694458\n      ],\n      [\n        \"▁両替\",\n        -12.861557006835938\n      ],\n      [\n        \"▁Mbps\",\n        -12.86158275604248\n      ],\n      [\n        \"▁ショコラ\",\n        -12.861583709716797\n      ],\n      [\n        \"▁Che\",\n        -12.861624717712402\n      ],\n      [\n        \"▁仕込\",\n        -12.861708641052246\n      ],\n      [\n        \"▁増やした\",\n        -12.861781120300293\n      ],\n      [\n        \"有限\",\n        -12.861796379089355\n      ],\n      [\n        \"▁ジェームス\",\n        -12.861809730529785\n      ],\n      [\n        \"▁わたくし\",\n        -12.862037658691406\n      ],\n      [\n        \"▁ロフト\",\n        -12.862040519714355\n      ],\n      [\n        \"▁義経\",\n        -12.862041473388672\n      ],\n      [\n        \"▁漁獲\",\n        -12.862052917480469\n      ],\n      [\n        \"▁健太\",\n        -12.862120628356934\n      ],\n      [\n        \"▁XML\",\n        -12.862197875976562\n      ],\n      [\n        \"締め\",\n        -12.862399101257324\n      ],\n      [\n        \"▁必須です\",\n        -12.862417221069336\n      ],\n      [\n        \"▁全裸\",\n        -12.862527847290039\n      ],\n      [\n        \"▁サウロ\",\n        -12.86257553100586\n      ],\n      [\n        \"无码\",\n        -12.862947463989258\n      ],\n      [\n        \"橙\",\n        -12.862947463989258\n      ],\n      [\n        \"▁握った\",\n        -12.862969398498535\n      ],\n      [\n        \"▁埋まっ\",\n        -12.86301326751709\n      ],\n      [\n        \"▁Entertainment\",\n        -12.863174438476562\n      ],\n      [\n        \"rade\",\n        -12.863316535949707\n      ],\n      [\n        \"▁エージェンシー\",\n        -12.863402366638184\n      ],\n      [\n        \"▁妨げる\",\n        -12.863419532775879\n      ],\n      [\n        \"▁頑張った\",\n        -12.863428115844727\n      ],\n      [\n        \"▁ブレン\",\n        -12.863482475280762\n      ],\n      [\n        \"▁見送ら\",\n        -12.863526344299316\n      ],\n      [\n        \"カク\",\n        -12.863777160644531\n      ],\n      [\n        \"aaS\",\n        -12.863877296447754\n      ],\n      [\n        \"VAL\",\n        -12.864118576049805\n      ],\n      [\n        \"▁キヤノン\",\n        -12.864313125610352\n      ],\n      [\n        \"▁無差別\",\n        -12.864314079284668\n      ],\n      [\n        \"3,000\",\n        -12.864316940307617\n      ],\n      [\n        \"▁version\",\n        -12.864336013793945\n      ],\n      [\n        \"▁直訳\",\n        -12.864462852478027\n      ],\n      [\n        \"夕方\",\n        -12.864522933959961\n      ],\n      [\n        \"歓\",\n        -12.864584922790527\n      ],\n      [\n        \"論文\",\n        -12.864606857299805\n      ],\n      [\n        \"▁柏木\",\n        -12.864609718322754\n      ],\n      [\n        \"▁メタリック\",\n        -12.86467170715332\n      ],\n      [\n        \"▁憲政\",\n        -12.864699363708496\n      ],\n      [\n        \"ping\",\n        -12.864741325378418\n      ],\n      [\n        \"轢\",\n        -12.864768981933594\n      ],\n      [\n        \"▁親身\",\n        -12.864840507507324\n      ],\n      [\n        \"乙女\",\n        -12.86486530303955\n      ],\n      [\n        \"設置\",\n        -12.865174293518066\n      ],\n      [\n        \"メディ\",\n        -12.865206718444824\n      ],\n      [\n        \"▁ガーディアン\",\n        -12.86526107788086\n      ],\n      [\n        \"▁テクスチャ\",\n        -12.865306854248047\n      ],\n      [\n        \"▁ドロン\",\n        -12.865338325500488\n      ],\n      [\n        \"▁チャーター\",\n        -12.865448951721191\n      ],\n      [\n        \"▁受け取\",\n        -12.865457534790039\n      ],\n      [\n        \"▁赤松\",\n        -12.865487098693848\n      ],\n      [\n        \"▁左右する\",\n        -12.86549186706543\n      ],\n      [\n        \"▁缶詰\",\n        -12.865499496459961\n      ],\n      [\n        \"▁現物\",\n        -12.865541458129883\n      ],\n      [\n        \"▁広まり\",\n        -12.865581512451172\n      ],\n      [\n        \"▁リーズナブルな\",\n        -12.865652084350586\n      ],\n      [\n        \"▁オシャレな\",\n        -12.865655899047852\n      ],\n      [\n        \"▁ヘルニア\",\n        -12.865680694580078\n      ],\n      [\n        \"▁湧いて\",\n        -12.865818977355957\n      ],\n      [\n        \"▁スリッパ\",\n        -12.865866661071777\n      ],\n      [\n        \"EU\",\n        -12.86589527130127\n      ],\n      [\n        \"▁アッシリア\",\n        -12.865917205810547\n      ],\n      [\n        \"▁食道\",\n        -12.865935325622559\n      ],\n      [\n        \"▁アクト\",\n        -12.865957260131836\n      ],\n      [\n        \"▁パース\",\n        -12.866033554077148\n      ],\n      [\n        \"弐\",\n        -12.866137504577637\n      ],\n      [\n        \"リオス\",\n        -12.8662109375\n      ],\n      [\n        \"▁引き上げる\",\n        -12.866318702697754\n      ],\n      [\n        \"▁子女\",\n        -12.866378784179688\n      ],\n      [\n        \"Д\",\n        -12.866438865661621\n      ],\n      [\n        \"▁Def\",\n        -12.866490364074707\n      ],\n      [\n        \"▁モテる\",\n        -12.866517066955566\n      ],\n      [\n        \"▁レノン\",\n        -12.866605758666992\n      ],\n      [\n        \"▁軍曹\",\n        -12.866621971130371\n      ],\n      [\n        \"綺\",\n        -12.8668212890625\n      ],\n      [\n        \"▁ヒマラヤ\",\n        -12.866822242736816\n      ],\n      [\n        \"▁上回った\",\n        -12.86682415008545\n      ],\n      [\n        \"azz\",\n        -12.866850852966309\n      ],\n      [\n        \"いつか\",\n        -12.8668851852417\n      ],\n      [\n        \"鴨\",\n        -12.866887092590332\n      ],\n      [\n        \"▁守った\",\n        -12.866987228393555\n      ],\n      [\n        \"皮膚\",\n        -12.8671293258667\n      ],\n      [\n        \"▁由紀\",\n        -12.867207527160645\n      ],\n      [\n        \"プロペシア\",\n        -12.86735725402832\n      ],\n      [\n        \"成功\",\n        -12.867462158203125\n      ],\n      [\n        \"▁Photoshop\",\n        -12.867511749267578\n      ],\n      [\n        \"▁ホリデー\",\n        -12.867537498474121\n      ],\n      [\n        \"gent\",\n        -12.86754035949707\n      ],\n      [\n        \"580\",\n        -12.867635726928711\n      ],\n      [\n        \"▁初恋\",\n        -12.86767864227295\n      ],\n      [\n        \"▁云々\",\n        -12.867751121520996\n      ],\n      [\n        \"▁田口\",\n        -12.867779731750488\n      ],\n      [\n        \"▁皇女\",\n        -12.867912292480469\n      ],\n      [\n        \"▁懇親\",\n        -12.867964744567871\n      ],\n      [\n        \"ごたえ\",\n        -12.867995262145996\n      ],\n      [\n        \"▁制式\",\n        -12.868067741394043\n      ],\n      [\n        \"▁揺れる\",\n        -12.868102073669434\n      ],\n      [\n        \"▁幼年\",\n        -12.868258476257324\n      ],\n      [\n        \"▁インターハイ\",\n        -12.868400573730469\n      ],\n      [\n        \"▁James\",\n        -12.868429183959961\n      ],\n      [\n        \"▁Radio\",\n        -12.868485450744629\n      ],\n      [\n        \"▁爽快\",\n        -12.868650436401367\n      ],\n      [\n        \"詐\",\n        -12.868879318237305\n      ],\n      [\n        \"鯖\",\n        -12.868879318237305\n      ],\n      [\n        \"▁競泳\",\n        -12.868886947631836\n      ],\n      [\n        \"▁見出す\",\n        -12.868921279907227\n      ],\n      [\n        \"▁命題\",\n        -12.86895751953125\n      ],\n      [\n        \"emi\",\n        -12.868988990783691\n      ],\n      [\n        \"▁便座\",\n        -12.869145393371582\n      ],\n      [\n        \"付いた\",\n        -12.869145393371582\n      ],\n      [\n        \"▁蒸発\",\n        -12.869173049926758\n      ],\n      [\n        \"ident\",\n        -12.869182586669922\n      ],\n      [\n        \"▁念仏\",\n        -12.869376182556152\n      ],\n      [\n        \"クシャ\",\n        -12.86951732635498\n      ],\n      [\n        \"▁同好\",\n        -12.869532585144043\n      ],\n      [\n        \"▁思えた\",\n        -12.869576454162598\n      ],\n      [\n        \"▁インド洋\",\n        -12.869772911071777\n      ],\n      [\n        \"▁汽車\",\n        -12.869795799255371\n      ],\n      [\n        \"▁飛び出して\",\n        -12.869812965393066\n      ],\n      [\n        \"ブロック\",\n        -12.869917869567871\n      ],\n      [\n        \"▁Mag\",\n        -12.869956016540527\n      ],\n      [\n        \"繊\",\n        -12.870024681091309\n      ],\n      [\n        \"▁ギョウ\",\n        -12.870028495788574\n      ],\n      [\n        \"▁ムック\",\n        -12.870104789733887\n      ],\n      [\n        \"輿\",\n        -12.87010669708252\n      ],\n      [\n        \"tus\",\n        -12.870193481445312\n      ],\n      [\n        \"卿\",\n        -12.870245933532715\n      ],\n      [\n        \"▁通例\",\n        -12.870514869689941\n      ],\n      [\n        \"クティブ\",\n        -12.870514869689941\n      ],\n      [\n        \"▁ダニー\",\n        -12.870573043823242\n      ],\n      [\n        \"▁ギミック\",\n        -12.870579719543457\n      ],\n      [\n        \"▁取りやめ\",\n        -12.870621681213379\n      ],\n      [\n        \"ボイス\",\n        -12.870641708374023\n      ],\n      [\n        \"▁プレーン\",\n        -12.870667457580566\n      ],\n      [\n        \"▁豊臣秀吉\",\n        -12.870712280273438\n      ],\n      [\n        \"▁遺骨\",\n        -12.870722770690918\n      ],\n      [\n        \"三菱\",\n        -12.870962142944336\n      ],\n      [\n        \"じゃあ\",\n        -12.870975494384766\n      ],\n      [\n        \"achi\",\n        -12.871025085449219\n      ],\n      [\n        \"▁囲い\",\n        -12.871031761169434\n      ],\n      [\n        \"▁寒冷\",\n        -12.871047973632812\n      ],\n      [\n        \"▁飛ばし\",\n        -12.87106704711914\n      ],\n      [\n        \"▁四半期\",\n        -12.871170997619629\n      ],\n      [\n        \"▁白黒\",\n        -12.871222496032715\n      ],\n      [\n        \"▁Jack\",\n        -12.871304512023926\n      ],\n      [\n        \"引き続き\",\n        -12.87139892578125\n      ],\n      [\n        \"▁取り戻した\",\n        -12.871456146240234\n      ],\n      [\n        \"▁くさ\",\n        -12.871476173400879\n      ],\n      [\n        \"講師\",\n        -12.87160873413086\n      ],\n      [\n        \"race\",\n        -12.871614456176758\n      ],\n      [\n        \"▁ニューオーリンズ\",\n        -12.87162971496582\n      ],\n      [\n        \"▁フェラチオ\",\n        -12.871650695800781\n      ],\n      [\n        \"▁遊具\",\n        -12.871663093566895\n      ],\n      [\n        \"Do\",\n        -12.871673583984375\n      ],\n      [\n        \"背番号\",\n        -12.871746063232422\n      ],\n      [\n        \"▁講堂\",\n        -12.871771812438965\n      ],\n      [\n        \"▁由美\",\n        -12.871810913085938\n      ],\n      [\n        \"▁三輪\",\n        -12.871829986572266\n      ],\n      [\n        \"vert\",\n        -12.87186336517334\n      ],\n      [\n        \"▁触る\",\n        -12.871976852416992\n      ],\n      [\n        \"WBO\",\n        -12.872097969055176\n      ],\n      [\n        \"▁LTD\",\n        -12.872100830078125\n      ],\n      [\n        \"▁エミー\",\n        -12.872150421142578\n      ],\n      [\n        \"▁つかむ\",\n        -12.872153282165527\n      ],\n      [\n        \"BD\",\n        -12.872197151184082\n      ],\n      [\n        \"▁ガンマ\",\n        -12.872299194335938\n      ],\n      [\n        \"och\",\n        -12.872318267822266\n      ],\n      [\n        \"▁大破\",\n        -12.872504234313965\n      ],\n      [\n        \"▁工兵\",\n        -12.8727388381958\n      ],\n      [\n        \"▁乳幼児\",\n        -12.872793197631836\n      ],\n      [\n        \"▁はずである\",\n        -12.872807502746582\n      ],\n      [\n        \"6,000\",\n        -12.87282657623291\n      ],\n      [\n        \"▁立ち向かう\",\n        -12.87289047241211\n      ],\n      [\n        \"▁オレンジ色\",\n        -12.872931480407715\n      ],\n      [\n        \"▁Pop\",\n        -12.873003959655762\n      ],\n      [\n        \"話題\",\n        -12.873099327087402\n      ],\n      [\n        \"▁スコー\",\n        -12.873218536376953\n      ],\n      [\n        \"▁画策\",\n        -12.873239517211914\n      ],\n      [\n        \"池田\",\n        -12.87340259552002\n      ],\n      [\n        \"宵\",\n        -12.873467445373535\n      ],\n      [\n        \"▁挟んだ\",\n        -12.873469352722168\n      ],\n      [\n        \"▁Series\",\n        -12.873485565185547\n      ],\n      [\n        \"NR\",\n        -12.873571395874023\n      ],\n      [\n        \"▁じんじゃ\",\n        -12.873574256896973\n      ],\n      [\n        \"▁宣教\",\n        -12.873628616333008\n      ],\n      [\n        \"新たに\",\n        -12.87384033203125\n      ],\n      [\n        \"▁買い時\",\n        -12.87392520904541\n      ],\n      [\n        \"▁Advanced\",\n        -12.873927116394043\n      ],\n      [\n        \"▁侮辱\",\n        -12.873927116394043\n      ],\n      [\n        \"▁備蓄\",\n        -12.873927116394043\n      ],\n      [\n        \"▁面影\",\n        -12.87394905090332\n      ],\n      [\n        \"漢和\",\n        -12.873997688293457\n      ],\n      [\n        \"▁陰性\",\n        -12.874056816101074\n      ],\n      [\n        \"沖資\",\n        -12.874113082885742\n      ],\n      [\n        \"▁エスカレーター\",\n        -12.874387741088867\n      ],\n      [\n        \"ヴュ\",\n        -12.874509811401367\n      ],\n      [\n        \"▁形質\",\n        -12.874524116516113\n      ],\n      [\n        \"▁default\",\n        -12.874617576599121\n      ],\n      [\n        \"彌\",\n        -12.874617576599121\n      ],\n      [\n        \"▁適宜\",\n        -12.874629974365234\n      ],\n      [\n        \"▁Boy\",\n        -12.874768257141113\n      ],\n      [\n        \"▁温かく\",\n        -12.87476921081543\n      ],\n      [\n        \"汲\",\n        -12.874845504760742\n      ],\n      [\n        \"▁洞察\",\n        -12.874863624572754\n      ],\n      [\n        \"▁欠損\",\n        -12.874879837036133\n      ],\n      [\n        \"▁キャプチャ\",\n        -12.874902725219727\n      ],\n      [\n        \"▁ロビンソン\",\n        -12.874974250793457\n      ],\n      [\n        \"▁狂気\",\n        -12.875090599060059\n      ],\n      [\n        \"験\",\n        -12.875090599060059\n      ],\n      [\n        \"きゃ\",\n        -12.875444412231445\n      ],\n      [\n        \"▁SPECIAL\",\n        -12.87553882598877\n      ],\n      [\n        \"▁飢饉\",\n        -12.87553882598877\n      ],\n      [\n        \"紘\",\n        -12.87553882598877\n      ],\n      [\n        \"▁埋もれ\",\n        -12.875545501708984\n      ],\n      [\n        \"資格\",\n        -12.875568389892578\n      ],\n      [\n        \"▁被って\",\n        -12.875609397888184\n      ],\n      [\n        \"▁差し引\",\n        -12.875616073608398\n      ],\n      [\n        \"商業\",\n        -12.875713348388672\n      ],\n      [\n        \"you\",\n        -12.875760078430176\n      ],\n      [\n        \"薙\",\n        -12.87576961517334\n      ],\n      [\n        \"▁オスカー\",\n        -12.875782012939453\n      ],\n      [\n        \"▁道筋\",\n        -12.875930786132812\n      ],\n      [\n        \"▁張った\",\n        -12.875967025756836\n      ],\n      [\n        \"▁つかみ\",\n        -12.87612247467041\n      ],\n      [\n        \"▁あがった\",\n        -12.876229286193848\n      ],\n      [\n        \"▁Happy\",\n        -12.876230239868164\n      ],\n      [\n        \"▁備品\",\n        -12.876233100891113\n      ],\n      [\n        \"▁おしっこ\",\n        -12.876235008239746\n      ],\n      [\n        \"▁永続\",\n        -12.876314163208008\n      ],\n      [\n        \"▁固めた\",\n        -12.876348495483398\n      ],\n      [\n        \"▁個数\",\n        -12.8764009475708\n      ],\n      [\n        \"▁落ち着く\",\n        -12.876461029052734\n      ],\n      [\n        \"▁准将\",\n        -12.876485824584961\n      ],\n      [\n        \"ras\",\n        -12.876565933227539\n      ],\n      [\n        \"▁ファームウェア\",\n        -12.876727104187012\n      ],\n      [\n        \"▁フレンドリー\",\n        -12.876754760742188\n      ],\n      [\n        \"▁適当\",\n        -12.876840591430664\n      ],\n      [\n        \"160\",\n        -12.876914024353027\n      ],\n      [\n        \"▁外れる\",\n        -12.876927375793457\n      ],\n      [\n        \"出仕\",\n        -12.877135276794434\n      ],\n      [\n        \"▁頓挫\",\n        -12.877152442932129\n      ],\n      [\n        \"▁ミート\",\n        -12.877230644226074\n      ],\n      [\n        \"rep\",\n        -12.877394676208496\n      ],\n      [\n        \"▁メッツ\",\n        -12.877397537231445\n      ],\n      [\n        \"▁競い\",\n        -12.877419471740723\n      ],\n      [\n        \"▁JCT\",\n        -12.877592086791992\n      ],\n      [\n        \"▁汲み\",\n        -12.877615928649902\n      ],\n      [\n        \"クロリス\",\n        -12.877705574035645\n      ],\n      [\n        \"▁脅し\",\n        -12.877872467041016\n      ],\n      [\n        \"▁居留\",\n        -12.877877235412598\n      ],\n      [\n        \"▁Show\",\n        -12.878079414367676\n      ],\n      [\n        \"▁モーリス\",\n        -12.878108024597168\n      ],\n      [\n        \"▁見失\",\n        -12.878289222717285\n      ],\n      [\n        \"▁IBF\",\n        -12.878305435180664\n      ],\n      [\n        \"牙\",\n        -12.878472328186035\n      ],\n      [\n        \"そろそろ\",\n        -12.878482818603516\n      ],\n      [\n        \"▁聖なる\",\n        -12.878557205200195\n      ],\n      [\n        \"渋\",\n        -12.87856674194336\n      ],\n      [\n        \"▁低速\",\n        -12.878649711608887\n      ],\n      [\n        \"mil\",\n        -12.87869930267334\n      ],\n      [\n        \"▁監獄\",\n        -12.87877082824707\n      ],\n      [\n        \"▁1848\",\n        -12.878804206848145\n      ],\n      [\n        \"CHE\",\n        -12.878815650939941\n      ],\n      [\n        \"▁耐熱\",\n        -12.878908157348633\n      ],\n      [\n        \"▁働け\",\n        -12.878915786743164\n      ],\n      [\n        \"▁曖昧な\",\n        -12.878971099853516\n      ],\n      [\n        \"二手房\",\n        -12.87900161743164\n      ],\n      [\n        \"療\",\n        -12.879072189331055\n      ],\n      [\n        \"▁only\",\n        -12.879159927368164\n      ],\n      [\n        \"高級\",\n        -12.879168510437012\n      ],\n      [\n        \"▁Manager\",\n        -12.879231452941895\n      ],\n      [\n        \"▁債券\",\n        -12.879231452941895\n      ],\n      [\n        \"俗に\",\n        -12.879283905029297\n      ],\n      [\n        \"▁アカデミア\",\n        -12.879463195800781\n      ],\n      [\n        \"允\",\n        -12.879463195800781\n      ],\n      [\n        \"▁退いた\",\n        -12.879520416259766\n      ],\n      [\n        \"▁目印\",\n        -12.879530906677246\n      ],\n      [\n        \"▁なかろう\",\n        -12.879533767700195\n      ],\n      [\n        \"耕\",\n        -12.879603385925293\n      ],\n      [\n        \"▁坂口\",\n        -12.879654884338379\n      ],\n      [\n        \"▁滑らかな\",\n        -12.879709243774414\n      ],\n      [\n        \"tric\",\n        -12.879753112792969\n      ],\n      [\n        \"▁姉ちゃん\",\n        -12.879782676696777\n      ],\n      [\n        \"変更\",\n        -12.879918098449707\n      ],\n      [\n        \"▁House\",\n        -12.880022048950195\n      ],\n      [\n        \"▁Summer\",\n        -12.880157470703125\n      ],\n      [\n        \"▁コースター\",\n        -12.880202293395996\n      ],\n      [\n        \"▁サニー\",\n        -12.880260467529297\n      ],\n      [\n        \"▁あみ\",\n        -12.880277633666992\n      ],\n      [\n        \"room\",\n        -12.88028335571289\n      ],\n      [\n        \"▁春日部\",\n        -12.880326271057129\n      ],\n      [\n        \"▁門人\",\n        -12.880497932434082\n      ],\n      [\n        \"▁潰れ\",\n        -12.880516052246094\n      ],\n      [\n        \"雫\",\n        -12.880620002746582\n      ],\n      [\n        \"▁すこし\",\n        -12.880660057067871\n      ],\n      [\n        \"▁点滴\",\n        -12.880690574645996\n      ],\n      [\n        \"▁マギカ\",\n        -12.880852699279785\n      ],\n      [\n        \"▁思ひ\",\n        -12.881065368652344\n      ],\n      [\n        \"▁過敏\",\n        -12.881150245666504\n      ],\n      [\n        \"OOK\",\n        -12.881158828735352\n      ],\n      [\n        \"▁武藤\",\n        -12.881193161010742\n      ],\n      [\n        \"禎\",\n        -12.881315231323242\n      ],\n      [\n        \"▁塁打\",\n        -12.881376266479492\n      ],\n      [\n        \"┗\",\n        -12.881546974182129\n      ],\n      [\n        \"▁ミシュラン\",\n        -12.881546974182129\n      ],\n      [\n        \"▁税関\",\n        -12.881711959838867\n      ],\n      [\n        \"▁見つめる\",\n        -12.8817720413208\n      ],\n      [\n        \"▁叫ぶ\",\n        -12.881779670715332\n      ],\n      [\n        \"▁立証\",\n        -12.881817817687988\n      ],\n      [\n        \"▁ゴルファー\",\n        -12.881834983825684\n      ],\n      [\n        \"LIN\",\n        -12.882183074951172\n      ],\n      [\n        \"梵\",\n        -12.882242202758789\n      ],\n      [\n        \"视频\",\n        -12.882242202758789\n      ],\n      [\n        \"▁キプロス\",\n        -12.882244110107422\n      ],\n      [\n        \"検査\",\n        -12.8822603225708\n      ],\n      [\n        \"▁like\",\n        -12.882506370544434\n      ],\n      [\n        \"▁無言\",\n        -12.882522583007812\n      ],\n      [\n        \"▁元首\",\n        -12.882728576660156\n      ],\n      [\n        \"▁律令\",\n        -12.882753372192383\n      ],\n      [\n        \"▁バッド\",\n        -12.882843017578125\n      ],\n      [\n        \"▁いっしょ\",\n        -12.882869720458984\n      ],\n      [\n        \"▁満たした\",\n        -12.883191108703613\n      ],\n      [\n        \"喧\",\n        -12.883402824401855\n      ],\n      [\n        \"▁掴んで\",\n        -12.883403778076172\n      ],\n      [\n        \"▁巨額\",\n        -12.883467674255371\n      ],\n      [\n        \"▁恒久\",\n        -12.883758544921875\n      ],\n      [\n        \"pat\",\n        -12.883777618408203\n      ],\n      [\n        \"▁ヘッドライト\",\n        -12.88379955291748\n      ],\n      [\n        \"OLO\",\n        -12.884072303771973\n      ],\n      [\n        \"asp\",\n        -12.884125709533691\n      ],\n      [\n        \"▁小売店\",\n        -12.884230613708496\n      ],\n      [\n        \"▁ドーナツ\",\n        -12.884331703186035\n      ],\n      [\n        \"▁ウエスタン\",\n        -12.884358406066895\n      ],\n      [\n        \"▁皮革\",\n        -12.884385108947754\n      ],\n      [\n        \"▁説いた\",\n        -12.884507179260254\n      ],\n      [\n        \"▁疲弊\",\n        -12.884564399719238\n      ],\n      [\n        \"▁スピリッツ\",\n        -12.884584426879883\n      ],\n      [\n        \"▁没落\",\n        -12.884674072265625\n      ],\n      [\n        \"NEW\",\n        -12.8847074508667\n      ],\n      [\n        \"沖\",\n        -12.88476848602295\n      ],\n      [\n        \"▁グラフィー\",\n        -12.884778022766113\n      ],\n      [\n        \"フジテレビ\",\n        -12.884786605834961\n      ],\n      [\n        \"▁information\",\n        -12.884797096252441\n      ],\n      [\n        \"▁種々の\",\n        -12.88479995727539\n      ],\n      [\n        \"▁政宗\",\n        -12.885014533996582\n      ],\n      [\n        \"民主\",\n        -12.885079383850098\n      ],\n      [\n        \"▁宝永\",\n        -12.885160446166992\n      ],\n      [\n        \"▁赤道\",\n        -12.885232925415039\n      ],\n      [\n        \"▁ハピ\",\n        -12.885250091552734\n      ],\n      [\n        \"▁取り立て\",\n        -12.885334968566895\n      ],\n      [\n        \"uka\",\n        -12.88538932800293\n      ],\n      [\n        \"▁コントラ\",\n        -12.88545036315918\n      ],\n      [\n        \"南部\",\n        -12.885455131530762\n      ],\n      [\n        \"▁仲良し\",\n        -12.88549518585205\n      ],\n      [\n        \"▁叩いて\",\n        -12.88549518585205\n      ],\n      [\n        \"▁LLC\",\n        -12.885499954223633\n      ],\n      [\n        \"▁学べ\",\n        -12.885510444641113\n      ],\n      [\n        \"▁決闘\",\n        -12.885536193847656\n      ],\n      [\n        \"▁ハードコア\",\n        -12.885546684265137\n      ],\n      [\n        \"▁吉備\",\n        -12.886075019836426\n      ],\n      [\n        \"▁ウルトラマン\",\n        -12.886208534240723\n      ],\n      [\n        \"▁キャブ\",\n        -12.886421203613281\n      ],\n      [\n        \"▁如何に\",\n        -12.886663436889648\n      ],\n      [\n        \"▁葛西\",\n        -12.886807441711426\n      ],\n      [\n        \"ř\",\n        -12.886892318725586\n      ],\n      [\n        \"主催\",\n        -12.886926651000977\n      ],\n      [\n        \"▁とうきょう\",\n        -12.886941909790039\n      ],\n      [\n        \"▁マルウェア\",\n        -12.887067794799805\n      ],\n      [\n        \"▁配電\",\n        -12.887160301208496\n      ],\n      [\n        \"▁おかしな\",\n        -12.887537002563477\n      ],\n      [\n        \"滴\",\n        -12.887771606445312\n      ],\n      [\n        \"▁ユーリ\",\n        -12.887797355651855\n      ],\n      [\n        \"▁大牟田\",\n        -12.887825012207031\n      ],\n      [\n        \"導入\",\n        -12.888026237487793\n      ],\n      [\n        \"▁感受性\",\n        -12.888057708740234\n      ],\n      [\n        \"▁盛り上げて\",\n        -12.8881196975708\n      ],\n      [\n        \"▁NWA\",\n        -12.888175964355469\n      ],\n      [\n        \"悼\",\n        -12.888272285461426\n      ],\n      [\n        \"aint\",\n        -12.888293266296387\n      ],\n      [\n        \"ORA\",\n        -12.888638496398926\n      ],\n      [\n        \"▁極楽\",\n        -12.888679504394531\n      ],\n      [\n        \"夫婦\",\n        -12.88873291015625\n      ],\n      [\n        \"▁ジャッキー\",\n        -12.889018058776855\n      ],\n      [\n        \"▁試料\",\n        -12.889039039611816\n      ],\n      [\n        \"▁神事\",\n        -12.889039993286133\n      ],\n      [\n        \"▁ヨハネス\",\n        -12.889156341552734\n      ],\n      [\n        \"▁近道\",\n        -12.889228820800781\n      ],\n      [\n        \"kyo\",\n        -12.889291763305664\n      ],\n      [\n        \"▁MAC\",\n        -12.889305114746094\n      ],\n      [\n        \"▁朝刊\",\n        -12.88940715789795\n      ],\n      [\n        \"▁Company\",\n        -12.889458656311035\n      ],\n      [\n        \"alig\",\n        -12.889530181884766\n      ],\n      [\n        \"▁仲裁\",\n        -12.889575004577637\n      ],\n      [\n        \"▁急流\",\n        -12.889643669128418\n      ],\n      [\n        \"▁ウラジーミ\",\n        -12.88969612121582\n      ],\n      [\n        \"▁HMV\",\n        -12.889699935913086\n      ],\n      [\n        \"▁本殿\",\n        -12.889873504638672\n      ],\n      [\n        \"file\",\n        -12.889910697937012\n      ],\n      [\n        \"▁ガンダルフ\",\n        -12.889925956726074\n      ],\n      [\n        \"阪急\",\n        -12.890019416809082\n      ],\n      [\n        \"▁怯え\",\n        -12.890108108520508\n      ],\n      [\n        \"ジョウ\",\n        -12.890114784240723\n      ],\n      [\n        \"▁謡曲\",\n        -12.890159606933594\n      ],\n      [\n        \"会議\",\n        -12.89018440246582\n      ],\n      [\n        \"▁吉原\",\n        -12.890235900878906\n      ],\n      [\n        \"▁ウェー\",\n        -12.890268325805664\n      ],\n      [\n        \"▁推力\",\n        -12.890337944030762\n      ],\n      [\n        \"▁なじみ\",\n        -12.890400886535645\n      ],\n      [\n        \"割り\",\n        -12.890521049499512\n      ],\n      [\n        \"▁モカ\",\n        -12.890603065490723\n      ],\n      [\n        \"▁縮め\",\n        -12.890705108642578\n      ],\n      [\n        \"▁ジョーク\",\n        -12.891128540039062\n      ],\n      [\n        \"▁イブン\",\n        -12.891156196594238\n      ],\n      [\n        \"▁リヴァプール\",\n        -12.891328811645508\n      ],\n      [\n        \"▁サリー\",\n        -12.891419410705566\n      ],\n      [\n        \"▁モンスターズ\",\n        -12.891457557678223\n      ],\n      [\n        \"▁アウディ\",\n        -12.891472816467285\n      ],\n      [\n        \"▁試した\",\n        -12.89150333404541\n      ],\n      [\n        \"▁ホノルル\",\n        -12.891563415527344\n      ],\n      [\n        \"▁見守り\",\n        -12.891565322875977\n      ],\n      [\n        \"▁jpg\",\n        -12.891566276550293\n      ],\n      [\n        \"▁尊厳\",\n        -12.891603469848633\n      ],\n      [\n        \"▁吐き出\",\n        -12.89166259765625\n      ],\n      [\n        \"次いで\",\n        -12.891764640808105\n      ],\n      [\n        \"▁休館\",\n        -12.891789436340332\n      ],\n      [\n        \"ī\",\n        -12.891797065734863\n      ],\n      [\n        \"▁荒らし\",\n        -12.891853332519531\n      ],\n      [\n        \"採用\",\n        -12.89189338684082\n      ],\n      [\n        \"乱闘\",\n        -12.891924858093262\n      ],\n      [\n        \"head\",\n        -12.891946792602539\n      ],\n      [\n        \"▁石狩\",\n        -12.89197063446045\n      ],\n      [\n        \"▁マッカーサー\",\n        -12.8920316696167\n      ],\n      [\n        \"isa\",\n        -12.892158508300781\n      ],\n      [\n        \"スミス\",\n        -12.892306327819824\n      ],\n      [\n        \"美しい\",\n        -12.892324447631836\n      ],\n      [\n        \"あくまで\",\n        -12.892467498779297\n      ],\n      [\n        \"▁ガイア\",\n        -12.892488479614258\n      ],\n      [\n        \"▁宗像\",\n        -12.892502784729004\n      ],\n      [\n        \"▁祈って\",\n        -12.892502784729004\n      ],\n      [\n        \"▁ヒロシ\",\n        -12.892587661743164\n      ],\n      [\n        \"▁手放し\",\n        -12.89267349243164\n      ],\n      [\n        \"▁複雑で\",\n        -12.892685890197754\n      ],\n      [\n        \"▁輪郭\",\n        -12.892791748046875\n      ],\n      [\n        \"ities\",\n        -12.892792701721191\n      ],\n      [\n        \"▁乱暴\",\n        -12.892806053161621\n      ],\n      [\n        \"▁テレフォン\",\n        -12.89284610748291\n      ],\n      [\n        \"▁福原\",\n        -12.892849922180176\n      ],\n      [\n        \"▁媚薬\",\n        -12.892969131469727\n      ],\n      [\n        \"▁政友\",\n        -12.893057823181152\n      ],\n      [\n        \"▁ジョギング\",\n        -12.893223762512207\n      ],\n      [\n        \"▁滞納\",\n        -12.8932466506958\n      ],\n      [\n        \"▁宮田\",\n        -12.89328670501709\n      ],\n      [\n        \"▁崩して\",\n        -12.893314361572266\n      ],\n      [\n        \"▁イーグル\",\n        -12.893315315246582\n      ],\n      [\n        \"透\",\n        -12.893402099609375\n      ],\n      [\n        \"▁生協\",\n        -12.89343547821045\n      ],\n      [\n        \"▁タトゥー\",\n        -12.893446922302246\n      ],\n      [\n        \"▁has\",\n        -12.893575668334961\n      ],\n      [\n        \"チャク\",\n        -12.893630981445312\n      ],\n      [\n        \"▁パルマ\",\n        -12.893718719482422\n      ],\n      [\n        \"▁歩む\",\n        -12.893749237060547\n      ],\n      [\n        \"▁ローマ字\",\n        -12.893750190734863\n      ],\n      [\n        \"利益\",\n        -12.893797874450684\n      ],\n      [\n        \"▁破裂\",\n        -12.893939971923828\n      ],\n      [\n        \"▁ポルト\",\n        -12.894014358520508\n      ],\n      [\n        \"GEN\",\n        -12.89406681060791\n      ],\n      [\n        \"▁シム\",\n        -12.894316673278809\n      ],\n      [\n        \"▁全勝\",\n        -12.894387245178223\n      ],\n      [\n        \"同様の\",\n        -12.89444637298584\n      ],\n      [\n        \"▁すべ\",\n        -12.894529342651367\n      ],\n      [\n        \"▁連なる\",\n        -12.8945951461792\n      ],\n      [\n        \"▁立ち入り\",\n        -12.894599914550781\n      ],\n      [\n        \"▁biz\",\n        -12.894632339477539\n      ],\n      [\n        \"▁久慈\",\n        -12.894658088684082\n      ],\n      [\n        \"ネズミ\",\n        -12.894693374633789\n      ],\n      [\n        \"▁ジャイアント\",\n        -12.894845962524414\n      ],\n      [\n        \"▁奥深\",\n        -12.894948959350586\n      ],\n      [\n        \"▁パンチラ\",\n        -12.89498519897461\n      ],\n      [\n        \"▁適時\",\n        -12.895034790039062\n      ],\n      [\n        \"ソウル\",\n        -12.895074844360352\n      ],\n      [\n        \"▁滅多に\",\n        -12.895081520080566\n      ],\n      [\n        \"▁診て\",\n        -12.895108222961426\n      ],\n      [\n        \"ホルム\",\n        -12.895149230957031\n      ],\n      [\n        \"▁離さ\",\n        -12.895280838012695\n      ],\n      [\n        \"たわら\",\n        -12.895284652709961\n      ],\n      [\n        \"悪い\",\n        -12.895389556884766\n      ],\n      [\n        \"▁霊場\",\n        -12.895391464233398\n      ],\n      [\n        \"▁充分な\",\n        -12.895419120788574\n      ],\n      [\n        \"▁神輿\",\n        -12.895466804504395\n      ],\n      [\n        \"▁浅く\",\n        -12.895482063293457\n      ],\n      [\n        \"▁ボルチモア\",\n        -12.895550727844238\n      ],\n      [\n        \"▁蛋白\",\n        -12.895550727844238\n      ],\n      [\n        \"▁優子\",\n        -12.895602226257324\n      ],\n      [\n        \"RES\",\n        -12.895697593688965\n      ],\n      [\n        \"▁トラックバック\",\n        -12.89573860168457\n      ],\n      [\n        \"▁燃える\",\n        -12.895785331726074\n      ],\n      [\n        \"▁ぐるなび\",\n        -12.89578628540039\n      ],\n      [\n        \"▁ジョジョ\",\n        -12.895829200744629\n      ],\n      [\n        \"大統領\",\n        -12.895866394042969\n      ],\n      [\n        \"〇〇\",\n        -12.896087646484375\n      ],\n      [\n        \"▁定ま\",\n        -12.896105766296387\n      ],\n      [\n        \"▁防火\",\n        -12.89621353149414\n      ],\n      [\n        \"気なく\",\n        -12.896321296691895\n      ],\n      [\n        \"▁Hu\",\n        -12.896332740783691\n      ],\n      [\n        \"▁プロミス\",\n        -12.89645004272461\n      ],\n      [\n        \"へん\",\n        -12.896450996398926\n      ],\n      [\n        \"▁阿南\",\n        -12.896500587463379\n      ],\n      [\n        \"▁オオカミ\",\n        -12.896501541137695\n      ],\n      [\n        \"▁筒井\",\n        -12.896501541137695\n      ],\n      [\n        \"▁ケンカ\",\n        -12.89663028717041\n      ],\n      [\n        \"▁コネチカット\",\n        -12.896726608276367\n      ],\n      [\n        \"ロイヤル\",\n        -12.896818161010742\n      ],\n      [\n        \"▁座長\",\n        -12.896923065185547\n      ],\n      [\n        \"▁いい加減\",\n        -12.89696216583252\n      ],\n      [\n        \"宍\",\n        -12.89696216583252\n      ],\n      [\n        \"▁唱えた\",\n        -12.897021293640137\n      ],\n      [\n        \"▁無双\",\n        -12.8970365524292\n      ],\n      [\n        \"(^^;\",\n        -12.897211074829102\n      ],\n      [\n        \"グレイ\",\n        -12.89749526977539\n      ],\n      [\n        \"▁空挺\",\n        -12.897510528564453\n      ],\n      [\n        \"▁ソリューションズ\",\n        -12.897518157958984\n      ],\n      [\n        \"▁堕ち\",\n        -12.897669792175293\n      ],\n      [\n        \"▁捕鯨\",\n        -12.897671699523926\n      ],\n      [\n        \"▁マネジャー\",\n        -12.897726058959961\n      ],\n      [\n        \"▁伺って\",\n        -12.897909164428711\n      ],\n      [\n        \"例年\",\n        -12.898168563842773\n      ],\n      [\n        \"飲食\",\n        -12.898207664489746\n      ],\n      [\n        \"asi\",\n        -12.898353576660156\n      ],\n      [\n        \"▁震源\",\n        -12.898375511169434\n      ],\n      [\n        \"緋\",\n        -12.898375511169434\n      ],\n      [\n        \"▁右下\",\n        -12.898637771606445\n      ],\n      [\n        \"▁介した\",\n        -12.898674964904785\n      ],\n      [\n        \"ロバート\",\n        -12.898717880249023\n      ],\n      [\n        \"空気\",\n        -12.898825645446777\n      ],\n      [\n        \"unch\",\n        -12.898892402648926\n      ],\n      [\n        \"▁馬主\",\n        -12.898955345153809\n      ],\n      [\n        \"Li\",\n        -12.898993492126465\n      ],\n      [\n        \"▁ココロ\",\n        -12.899202346801758\n      ],\n      [\n        \"▁バファローズ\",\n        -12.89931869506836\n      ],\n      [\n        \"▁PCR\",\n        -12.89934253692627\n      ],\n      [\n        \"鳩\",\n        -12.899432182312012\n      ],\n      [\n        \"棲\",\n        -12.899433135986328\n      ],\n      [\n        \"▁貧乳\",\n        -12.899556159973145\n      ],\n      [\n        \"▁王政\",\n        -12.899559020996094\n      ],\n      [\n        \"▁吠え\",\n        -12.899615287780762\n      ],\n      [\n        \"sha\",\n        -12.899687767028809\n      ],\n      [\n        \"▁watch\",\n        -12.899723052978516\n      ],\n      [\n        \"▁セクハラ\",\n        -12.89979076385498\n      ],\n      [\n        \"OKU\",\n        -12.89983081817627\n      ],\n      [\n        \"▁待ち受け\",\n        -12.899868965148926\n      ],\n      [\n        \"ウナギ\",\n        -12.89993953704834\n      ],\n      [\n        \"▁存命\",\n        -12.900338172912598\n      ],\n      [\n        \"蜀\",\n        -12.90049934387207\n      ],\n      [\n        \"▁京セラ\",\n        -12.900580406188965\n      ],\n      [\n        \"▁著述\",\n        -12.900588989257812\n      ],\n      [\n        \"▁付帯\",\n        -12.900721549987793\n      ],\n      [\n        \"▁仏壇\",\n        -12.900923728942871\n      ],\n      [\n        \"▁入線\",\n        -12.901008605957031\n      ],\n      [\n        \"▁集配\",\n        -12.90116024017334\n      ],\n      [\n        \"▁兆候\",\n        -12.901208877563477\n      ],\n      [\n        \"金沢\",\n        -12.901263236999512\n      ],\n      [\n        \"▁たちまち\",\n        -12.901301383972168\n      ],\n      [\n        \"早い\",\n        -12.90145206451416\n      ],\n      [\n        \"▁結びついて\",\n        -12.901518821716309\n      ],\n      [\n        \"▁転出\",\n        -12.90157413482666\n      ],\n      [\n        \"▁採決\",\n        -12.901588439941406\n      ],\n      [\n        \"▁乗合\",\n        -12.901603698730469\n      ],\n      [\n        \"1902\",\n        -12.901673316955566\n      ],\n      [\n        \"▁四球\",\n        -12.901854515075684\n      ],\n      [\n        \"辿\",\n        -12.901908874511719\n      ],\n      [\n        \"ヘルツェゴビナ\",\n        -12.901917457580566\n      ],\n      [\n        \"▁済んだ\",\n        -12.90194320678711\n      ],\n      [\n        \"▁損益\",\n        -12.901994705200195\n      ],\n      [\n        \"▁イースタン\",\n        -12.902036666870117\n      ],\n      [\n        \"匂\",\n        -12.902151107788086\n      ],\n      [\n        \"▁真剣\",\n        -12.902312278747559\n      ],\n      [\n        \"▁ディタ\",\n        -12.902379035949707\n      ],\n      [\n        \"à\",\n        -12.902390480041504\n      ],\n      [\n        \"▁Vita\",\n        -12.902412414550781\n      ],\n      [\n        \"▁断って\",\n        -12.90247631072998\n      ],\n      [\n        \"▁動かさ\",\n        -12.902560234069824\n      ],\n      [\n        \"移籍\",\n        -12.902560234069824\n      ],\n      [\n        \"sport\",\n        -12.902640342712402\n      ],\n      [\n        \"遂\",\n        -12.902776718139648\n      ],\n      [\n        \"▁打ち破\",\n        -12.902849197387695\n      ],\n      [\n        \"▁触ら\",\n        -12.902934074401855\n      ],\n      [\n        \"▁パノラマ\",\n        -12.903100967407227\n      ],\n      [\n        \"▁力強く\",\n        -12.90310287475586\n      ],\n      [\n        \"▁見送り\",\n        -12.90310287475586\n      ],\n      [\n        \"ゲット\",\n        -12.90314769744873\n      ],\n      [\n        \"▁フランコ\",\n        -12.903522491455078\n      ],\n      [\n        \"▁相乗\",\n        -12.903597831726074\n      ],\n      [\n        \"▁ブレイン\",\n        -12.903804779052734\n      ],\n      [\n        \"▁幼なじみ\",\n        -12.90381145477295\n      ],\n      [\n        \"▁賑やか\",\n        -12.903853416442871\n      ],\n      [\n        \"後述\",\n        -12.90391731262207\n      ],\n      [\n        \"▁焦り\",\n        -12.903950691223145\n      ],\n      [\n        \"▁絡め\",\n        -12.904003143310547\n      ],\n      [\n        \"▁共作\",\n        -12.90402889251709\n      ],\n      [\n        \"連合\",\n        -12.904033660888672\n      ],\n      [\n        \"値段\",\n        -12.904051780700684\n      ],\n      [\n        \"▁修得\",\n        -12.904208183288574\n      ],\n      [\n        \"leg\",\n        -12.904417037963867\n      ],\n      [\n        \"▁字体\",\n        -12.904434204101562\n      ],\n      [\n        \"佛\",\n        -12.904522895812988\n      ],\n      [\n        \"▁シミュレータ\",\n        -12.904528617858887\n      ],\n      [\n        \"虚\",\n        -12.90466022491455\n      ],\n      [\n        \"\",\n        -12.904760360717773\n      ],\n      [\n        \"▁元号\",\n        -12.904850959777832\n      ],\n      [\n        \"▁準ずる\",\n        -12.904952049255371\n      ],\n      [\n        \"▁ポイ\",\n        -12.90495491027832\n      ],\n      [\n        \"works\",\n        -12.904985427856445\n      ],\n      [\n        \"▁カーニバル\",\n        -12.904997825622559\n      ],\n      [\n        \"▁邦題\",\n        -12.905069351196289\n      ],\n      [\n        \"FR\",\n        -12.905163764953613\n      ],\n      [\n        \"▁スカパー\",\n        -12.90518569946289\n      ],\n      [\n        \"▁宮川\",\n        -12.90554428100586\n      ],\n      [\n        \"姑\",\n        -12.905709266662598\n      ],\n      [\n        \"▁ヤンキー\",\n        -12.90576457977295\n      ],\n      [\n        \"社長\",\n        -12.905769348144531\n      ],\n      [\n        \"▁陶磁器\",\n        -12.905946731567383\n      ],\n      [\n        \"imi\",\n        -12.906010627746582\n      ],\n      [\n        \"▁アーモンド\",\n        -12.906063079833984\n      ],\n      [\n        \"▁引っ張って\",\n        -12.906145095825195\n      ],\n      [\n        \"濡\",\n        -12.906203269958496\n      ],\n      [\n        \"▁たどり\",\n        -12.906238555908203\n      ],\n      [\n        \"追加\",\n        -12.906414985656738\n      ],\n      [\n        \"▁七五三\",\n        -12.906421661376953\n      ],\n      [\n        \"▁習志野\",\n        -12.906421661376953\n      ],\n      [\n        \"▁シスター\",\n        -12.906454086303711\n      ],\n      [\n        \"▁天空\",\n        -12.906522750854492\n      ],\n      [\n        \"▁盛り上げ\",\n        -12.906534194946289\n      ],\n      [\n        \"▁果樹\",\n        -12.906539916992188\n      ],\n      [\n        \"▁百姓\",\n        -12.9065523147583\n      ],\n      [\n        \"北京\",\n        -12.90665054321289\n      ],\n      [\n        \"做\",\n        -12.906660079956055\n      ],\n      [\n        \"▁絡んで\",\n        -12.906661987304688\n      ],\n      [\n        \"▁暗闇\",\n        -12.906673431396484\n      ],\n      [\n        \"▁形容\",\n        -12.906749725341797\n      ],\n      [\n        \"▁混み\",\n        -12.906839370727539\n      ],\n      [\n        \"▁上乗せ\",\n        -12.90689754486084\n      ],\n      [\n        \"▁抱っこ\",\n        -12.90689754486084\n      ],\n      [\n        \"▁冴え\",\n        -12.906928062438965\n      ],\n      [\n        \"▁ポーカー\",\n        -12.907114028930664\n      ],\n      [\n        \"1903\",\n        -12.907227516174316\n      ],\n      [\n        \"ating\",\n        -12.907317161560059\n      ],\n      [\n        \"▁キツい\",\n        -12.907374382019043\n      ],\n      [\n        \"▁安永\",\n        -12.907402038574219\n      ],\n      [\n        \"余談\",\n        -12.90743350982666\n      ],\n      [\n        \"主要な\",\n        -12.907499313354492\n      ],\n      [\n        \"ニャー\",\n        -12.907560348510742\n      ],\n      [\n        \"▁標榜\",\n        -12.907611846923828\n      ],\n      [\n        \"唯一\",\n        -12.907655715942383\n      ],\n      [\n        \"▁水彩\",\n        -12.907692909240723\n      ],\n      [\n        \"グランド\",\n        -12.907936096191406\n      ],\n      [\n        \"▁Journal\",\n        -12.908086776733398\n      ],\n      [\n        \"パートナー\",\n        -12.908146858215332\n      ],\n      [\n        \"性格\",\n        -12.908517837524414\n      ],\n      [\n        \"劇団\",\n        -12.90860652923584\n      ],\n      [\n        \"近所\",\n        -12.908705711364746\n      ],\n      [\n        \"▁金魚\",\n        -12.908949851989746\n      ],\n      [\n        \"▁RGB\",\n        -12.909075736999512\n      ],\n      [\n        \"▁凝ら\",\n        -12.90914249420166\n      ],\n      [\n        \"▁身元\",\n        -12.909263610839844\n      ],\n      [\n        \"▁親権\",\n        -12.909375190734863\n      ],\n      [\n        \"▁指紋\",\n        -12.909388542175293\n      ],\n      [\n        \"▁精油\",\n        -12.909414291381836\n      ],\n      [\n        \"▁名護\",\n        -12.909453392028809\n      ],\n      [\n        \"▁ゴリラ\",\n        -12.909517288208008\n      ],\n      [\n        \"kei\",\n        -12.9096097946167\n      ],\n      [\n        \"▁鳴る\",\n        -12.909660339355469\n      ],\n      [\n        \"デスク\",\n        -12.909685134887695\n      ],\n      [\n        \"▁王冠\",\n        -12.909700393676758\n      ],\n      [\n        \"▁ふたたび\",\n        -12.909753799438477\n      ],\n      [\n        \"ネック\",\n        -12.909822463989258\n      ],\n      [\n        \"▁丸亀\",\n        -12.909910202026367\n      ],\n      [\n        \"出張\",\n        -12.909913063049316\n      ],\n      [\n        \"按\",\n        -12.909992218017578\n      ],\n      [\n        \"▁PTA\",\n        -12.909995079040527\n      ],\n      [\n        \"要は\",\n        -12.910324096679688\n      ],\n      [\n        \"軍事\",\n        -12.910374641418457\n      ],\n      [\n        \"▁答申\",\n        -12.910470008850098\n      ],\n      [\n        \"そうそう\",\n        -12.91051959991455\n      ],\n      [\n        \"債務\",\n        -12.910552024841309\n      ],\n      [\n        \"WF\",\n        -12.910587310791016\n      ],\n      [\n        \"坑\",\n        -12.910676956176758\n      ],\n      [\n        \"▁ウインド\",\n        -12.910687446594238\n      ],\n      [\n        \"噺\",\n        -12.9107084274292\n      ],\n      [\n        \"遜\",\n        -12.9107084274292\n      ],\n      [\n        \"▁一塁\",\n        -12.910780906677246\n      ],\n      [\n        \"▁きっぷ\",\n        -12.910989761352539\n      ],\n      [\n        \"前身\",\n        -12.911027908325195\n      ],\n      [\n        \"▁無くなる\",\n        -12.911084175109863\n      ],\n      [\n        \"▁アイオワ\",\n        -12.911186218261719\n      ],\n      [\n        \"▁酢酸\",\n        -12.911465644836426\n      ],\n      [\n        \"▁閉ざ\",\n        -12.911555290222168\n      ],\n      [\n        \"▁休戦\",\n        -12.911768913269043\n      ],\n      [\n        \"▁聴け\",\n        -12.911832809448242\n      ],\n      [\n        \"キッチン\",\n        -12.911988258361816\n      ],\n      [\n        \"グローバル\",\n        -12.912113189697266\n      ],\n      [\n        \"遼\",\n        -12.912117958068848\n      ],\n      [\n        \"▁乗り越える\",\n        -12.912128448486328\n      ],\n      [\n        \"ates\",\n        -12.912139892578125\n      ],\n      [\n        \"▁怒鳴\",\n        -12.912140846252441\n      ],\n      [\n        \"▁残虐\",\n        -12.912165641784668\n      ],\n      [\n        \"▁QB\",\n        -12.91229248046875\n      ],\n      [\n        \"▁幕僚\",\n        -12.912457466125488\n      ],\n      [\n        \"▁2563\",\n        -12.912572860717773\n      ],\n      [\n        \"arc\",\n        -12.912692070007324\n      ],\n      [\n        \"▁能代\",\n        -12.912702560424805\n      ],\n      [\n        \"▁秋元\",\n        -12.912845611572266\n      ],\n      [\n        \"▁緻密\",\n        -12.912858009338379\n      ],\n      [\n        \"▁湖畔\",\n        -12.912910461425781\n      ],\n      [\n        \"▁八十\",\n        -12.912940979003906\n      ],\n      [\n        \"添え\",\n        -12.913137435913086\n      ],\n      [\n        \"ワット\",\n        -12.913228988647461\n      ],\n      [\n        \"スクール\",\n        -12.91327953338623\n      ],\n      [\n        \"▁リプレイ\",\n        -12.913302421569824\n      ],\n      [\n        \"搾\",\n        -12.913331985473633\n      ],\n      [\n        \"縣\",\n        -12.913336753845215\n      ],\n      [\n        \"▁ボルドー\",\n        -12.91336727142334\n      ],\n      [\n        \"gh\",\n        -12.913437843322754\n      ],\n      [\n        \"▁決め手\",\n        -12.913506507873535\n      ],\n      [\n        \"ピンク\",\n        -12.913776397705078\n      ],\n      [\n        \"▁留めて\",\n        -12.913939476013184\n      ],\n      [\n        \"▁STUDIO\",\n        -12.914054870605469\n      ],\n      [\n        \"▁悪し\",\n        -12.914097785949707\n      ],\n      [\n        \"▁インスタンス\",\n        -12.914114952087402\n      ],\n      [\n        \"▁GET\",\n        -12.914121627807617\n      ],\n      [\n        \"▁掛川\",\n        -12.91413402557373\n      ],\n      [\n        \"▁チャック\",\n        -12.914188385009766\n      ],\n      [\n        \"エアコン\",\n        -12.914203643798828\n      ],\n      [\n        \"▁費やす\",\n        -12.91422176361084\n      ],\n      [\n        \"▁食べたり\",\n        -12.9142484664917\n      ],\n      [\n        \"拾\",\n        -12.914255142211914\n      ],\n      [\n        \"▁低音\",\n        -12.914281845092773\n      ],\n      [\n        \"▁ボリビア\",\n        -12.914295196533203\n      ],\n      [\n        \"▁挙がっ\",\n        -12.914348602294922\n      ],\n      [\n        \"▁デハ\",\n        -12.914401054382324\n      ],\n      [\n        \"VEL\",\n        -12.91445255279541\n      ],\n      [\n        \"▁矢印\",\n        -12.914461135864258\n      ],\n      [\n        \"▁正室\",\n        -12.914754867553711\n      ],\n      [\n        \"ブリッジ\",\n        -12.914770126342773\n      ],\n      [\n        \"アイルランド\",\n        -12.91477108001709\n      ],\n      [\n        \"▁八千代\",\n        -12.914847373962402\n      ],\n      [\n        \"▁学童\",\n        -12.914877891540527\n      ],\n      [\n        \"▁六角\",\n        -12.915060043334961\n      ],\n      [\n        \"▁50,000\",\n        -12.91537857055664\n      ],\n      [\n        \"▁不透明\",\n        -12.915411949157715\n      ],\n      [\n        \"▁辞めた\",\n        -12.915428161621094\n      ],\n      [\n        \"▁雑記\",\n        -12.915604591369629\n      ],\n      [\n        \"▁可否\",\n        -12.915608406066895\n      ],\n      [\n        \"▁譜面\",\n        -12.915635108947754\n      ],\n      [\n        \"▁懲戒\",\n        -12.915732383728027\n      ],\n      [\n        \"▁SPORTS\",\n        -12.91573429107666\n      ],\n      [\n        \"▁ケント\",\n        -12.915770530700684\n      ],\n      [\n        \"▁Great\",\n        -12.915804862976074\n      ],\n      [\n        \"▁電解\",\n        -12.915812492370605\n      ],\n      [\n        \"▁華族\",\n        -12.91591739654541\n      ],\n      [\n        \"▁焙煎\",\n        -12.915971755981445\n      ],\n      [\n        \"▁ルックス\",\n        -12.916533470153809\n      ],\n      [\n        \"ハール\",\n        -12.916604042053223\n      ],\n      [\n        \"▁清朝\",\n        -12.916647911071777\n      ],\n      [\n        \"ねこ\",\n        -12.91688346862793\n      ],\n      [\n        \"▁きのこ\",\n        -12.916949272155762\n      ],\n      [\n        \"とっても\",\n        -12.916953086853027\n      ],\n      [\n        \"▁柏崎\",\n        -12.916982650756836\n      ],\n      [\n        \"▁Pack\",\n        -12.917106628417969\n      ],\n      [\n        \"▁民報\",\n        -12.91711139678955\n      ],\n      [\n        \"パーソナリティ\",\n        -12.917177200317383\n      ],\n      [\n        \"▁電線\",\n        -12.917281150817871\n      ],\n      [\n        \"▁宇和島\",\n        -12.917412757873535\n      ],\n      [\n        \"▁右京\",\n        -12.917705535888672\n      ],\n      [\n        \"彼氏\",\n        -12.917732238769531\n      ],\n      [\n        \"▁炊飯\",\n        -12.917893409729004\n      ],\n      [\n        \"eur\",\n        -12.917976379394531\n      ],\n      [\n        \"▁確かめて\",\n        -12.918013572692871\n      ],\n      [\n        \"▁パレス\",\n        -12.918062210083008\n      ],\n      [\n        \"▁片道\",\n        -12.918137550354004\n      ],\n      [\n        \"▁オムニバス\",\n        -12.918148040771484\n      ],\n      [\n        \"アカウント\",\n        -12.918401718139648\n      ],\n      [\n        \"▁常滑\",\n        -12.91844654083252\n      ],\n      [\n        \"▁発芽\",\n        -12.918564796447754\n      ],\n      [\n        \"▁車掌\",\n        -12.918570518493652\n      ],\n      [\n        \"760\",\n        -12.91857624053955\n      ],\n      [\n        \"▁病状\",\n        -12.918652534484863\n      ],\n      [\n        \"▁音節\",\n        -12.918720245361328\n      ],\n      [\n        \"▁あぁ\",\n        -12.918797492980957\n      ],\n      [\n        \"▁数百万\",\n        -12.91882610321045\n      ],\n      [\n        \"レーザー\",\n        -12.918927192687988\n      ],\n      [\n        \"▁割譲\",\n        -12.918950080871582\n      ],\n      [\n        \"▁チューン\",\n        -12.918997764587402\n      ],\n      [\n        \"▁官吏\",\n        -12.919022560119629\n      ],\n      [\n        \"▁同棲\",\n        -12.919093132019043\n      ],\n      [\n        \"比較的\",\n        -12.91915225982666\n      ],\n      [\n        \"▁微小\",\n        -12.919193267822266\n      ],\n      [\n        \"▁三部作\",\n        -12.919337272644043\n      ],\n      [\n        \"▁逗子\",\n        -12.919337272644043\n      ],\n      [\n        \"▁無意識に\",\n        -12.919437408447266\n      ],\n      [\n        \"▁モデリング\",\n        -12.919464111328125\n      ],\n      [\n        \"▁大理石\",\n        -12.919577598571777\n      ],\n      [\n        \"恭\",\n        -12.919591903686523\n      ],\n      [\n        \"イスラエル\",\n        -12.919614791870117\n      ],\n      [\n        \"委\",\n        -12.919617652893066\n      ],\n      [\n        \"▁偶然に\",\n        -12.919625282287598\n      ],\n      [\n        \"▁ゲッ\",\n        -12.91964340209961\n      ],\n      [\n        \"▁吉良\",\n        -12.919707298278809\n      ],\n      [\n        \"▁ガバナンス\",\n        -12.919817924499512\n      ],\n      [\n        \"▁アトラス\",\n        -12.919886589050293\n      ],\n      [\n        \"Rotten\",\n        -12.920062065124512\n      ],\n      [\n        \"▁有償\",\n        -12.920161247253418\n      ],\n      [\n        \"人類\",\n        -12.920211791992188\n      ],\n      [\n        \"▁風速\",\n        -12.920289039611816\n      ],\n      [\n        \"▁汚職\",\n        -12.920401573181152\n      ],\n      [\n        \"ザメ\",\n        -12.92040729522705\n      ],\n      [\n        \"施術\",\n        -12.920612335205078\n      ],\n      [\n        \"借り\",\n        -12.920652389526367\n      ],\n      [\n        \"▁フェルナンド\",\n        -12.920781135559082\n      ],\n      [\n        \"▁サイレン\",\n        -12.92080307006836\n      ],\n      [\n        \"▁静電気\",\n        -12.920830726623535\n      ],\n      [\n        \"▁サメ\",\n        -12.92087173461914\n      ],\n      [\n        \"芸術\",\n        -12.920944213867188\n      ],\n      [\n        \"▁最高です\",\n        -12.9209623336792\n      ],\n      [\n        \"▁コペンハーゲン\",\n        -12.921022415161133\n      ],\n      [\n        \"▁ハラスメント\",\n        -12.921022415161133\n      ],\n      [\n        \"蜂\",\n        -12.92104434967041\n      ],\n      [\n        \"▁官能\",\n        -12.921059608459473\n      ],\n      [\n        \"▁抱きしめ\",\n        -12.92129898071289\n      ],\n      [\n        \"▁三塁\",\n        -12.92149829864502\n      ],\n      [\n        \"蝋\",\n        -12.921504974365234\n      ],\n      [\n        \"▁宮島\",\n        -12.921573638916016\n      ],\n      [\n        \"扱わ\",\n        -12.921656608581543\n      ],\n      [\n        \"▁狭義\",\n        -12.921720504760742\n      ],\n      [\n        \"▁住ま\",\n        -12.921723365783691\n      ],\n      [\n        \"▁ぼんやり\",\n        -12.921746253967285\n      ],\n      [\n        \"▁至近\",\n        -12.92184066772461\n      ],\n      [\n        \"▁ルーク\",\n        -12.921884536743164\n      ],\n      [\n        \"include\",\n        -12.921993255615234\n      ],\n      [\n        \"克\",\n        -12.92203140258789\n      ],\n      [\n        \"KEY\",\n        -12.922111511230469\n      ],\n      [\n        \"▁正則\",\n        -12.922141075134277\n      ],\n      [\n        \"セルフ\",\n        -12.922200202941895\n      ],\n      [\n        \"酢\",\n        -12.922289848327637\n      ],\n      [\n        \"▁がんばり\",\n        -12.922311782836914\n      ],\n      [\n        \"▁三昧\",\n        -12.922319412231445\n      ],\n      [\n        \"ben\",\n        -12.922369003295898\n      ],\n      [\n        \"▁引き取り\",\n        -12.922415733337402\n      ],\n      [\n        \"永禄\",\n        -12.92242431640625\n      ],\n      [\n        \"▁縫製\",\n        -12.922470092773438\n      ],\n      [\n        \"▁警護\",\n        -12.922471046447754\n      ],\n      [\n        \"▁アウグスト\",\n        -12.922712326049805\n      ],\n      [\n        \"掻\",\n        -12.922951698303223\n      ],\n      [\n        \"NER\",\n        -12.923171043395996\n      ],\n      [\n        \"SDP\",\n        -12.923367500305176\n      ],\n      [\n        \"¦\",\n        -12.923436164855957\n      ],\n      [\n        \"▁マイナビ\",\n        -12.923543930053711\n      ],\n      [\n        \"▁乳液\",\n        -12.923798561096191\n      ],\n      [\n        \"実験\",\n        -12.923819541931152\n      ],\n      [\n        \"▁macOS\",\n        -12.923919677734375\n      ],\n      [\n        \"▁パジャマ\",\n        -12.923920631408691\n      ],\n      [\n        \"▁試用\",\n        -12.923925399780273\n      ],\n      [\n        \"▁チカラ\",\n        -12.923966407775879\n      ],\n      [\n        \"▁ベイビー\",\n        -12.924152374267578\n      ],\n      [\n        \"▁白金\",\n        -12.92420768737793\n      ],\n      [\n        \"▁転入\",\n        -12.924362182617188\n      ],\n      [\n        \"▁アイスホッケー\",\n        -12.92440414428711\n      ],\n      [\n        \"▁盛んな\",\n        -12.924421310424805\n      ],\n      [\n        \"▁ハーツ\",\n        -12.924541473388672\n      ],\n      [\n        \"▁メッセンジャー\",\n        -12.92464542388916\n      ],\n      [\n        \"▁結束\",\n        -12.92473030090332\n      ],\n      [\n        \"▁堀川\",\n        -12.924731254577637\n      ],\n      [\n        \"▁刃物\",\n        -12.92502498626709\n      ],\n      [\n        \"▁大學\",\n        -12.92512321472168\n      ],\n      [\n        \"▁租税\",\n        -12.925129890441895\n      ],\n      [\n        \"stand\",\n        -12.925222396850586\n      ],\n      [\n        \"▁竹中\",\n        -12.925280570983887\n      ],\n      [\n        \"ステッド\",\n        -12.925374031066895\n      ],\n      [\n        \"▁イマイチ\",\n        -12.925385475158691\n      ],\n      [\n        \"▁焼却\",\n        -12.925406455993652\n      ],\n      [\n        \"▁まとまり\",\n        -12.925537109375\n      ],\n      [\n        \"元禄\",\n        -12.925578117370605\n      ],\n      [\n        \"▁弊害\",\n        -12.925614356994629\n      ],\n      [\n        \"▁城郭\",\n        -12.925625801086426\n      ],\n      [\n        \"▁隣国\",\n        -12.925854682922363\n      ],\n      [\n        \"杜\",\n        -12.925947189331055\n      ],\n      [\n        \"▁トピックス\",\n        -12.925948143005371\n      ],\n      [\n        \"≦\",\n        -12.926098823547363\n      ],\n      [\n        \"▁呆れ\",\n        -12.926108360290527\n      ],\n      [\n        \"▁失速\",\n        -12.926477432250977\n      ],\n      [\n        \"▁ワープ\",\n        -12.926513671875\n      ],\n      [\n        \"▁木工\",\n        -12.926549911499023\n      ],\n      [\n        \"▁代議員\",\n        -12.926583290100098\n      ],\n      [\n        \"▁解いて\",\n        -12.926684379577637\n      ],\n      [\n        \"陸上\",\n        -12.926764488220215\n      ],\n      [\n        \"▁ステラ\",\n        -12.926791191101074\n      ],\n      [\n        \"▁這い\",\n        -12.926830291748047\n      ],\n      [\n        \"▁累積\",\n        -12.927068710327148\n      ],\n      [\n        \"▁無敵\",\n        -12.927190780639648\n      ],\n      [\n        \"uel\",\n        -12.927200317382812\n      ],\n      [\n        \"山頂\",\n        -12.927248001098633\n      ],\n      [\n        \"▁プログラマ\",\n        -12.927297592163086\n      ],\n      [\n        \"キリスト教\",\n        -12.927412986755371\n      ],\n      [\n        \"▁試食\",\n        -12.927568435668945\n      ],\n      [\n        \"▁LTE\",\n        -12.927638053894043\n      ],\n      [\n        \"嗅\",\n        -12.927796363830566\n      ],\n      [\n        \"1898\",\n        -12.92781925201416\n      ],\n      [\n        \"ラーゼ\",\n        -12.927919387817383\n      ],\n      [\n        \"▁宮沢\",\n        -12.92795467376709\n      ],\n      [\n        \"よろしければ\",\n        -12.928040504455566\n      ],\n      [\n        \"▁無知\",\n        -12.928086280822754\n      ],\n      [\n        \"▁Arc\",\n        -12.928146362304688\n      ],\n      [\n        \"メッセージ\",\n        -12.928146362304688\n      ],\n      [\n        \"▁くらべ\",\n        -12.92814826965332\n      ],\n      [\n        \"▁カルドナ\",\n        -12.928285598754883\n      ],\n      [\n        \"▁バニラ\",\n        -12.928291320800781\n      ],\n      [\n        \"▁Mini\",\n        -12.928349494934082\n      ],\n      [\n        \"゚\",\n        -12.928388595581055\n      ],\n      [\n        \"ako\",\n        -12.928434371948242\n      ],\n      [\n        \"▁混沌\",\n        -12.92852783203125\n      ],\n      [\n        \"▁キャンベル\",\n        -12.928669929504395\n      ],\n      [\n        \"▁相次ぎ\",\n        -12.928768157958984\n      ],\n      [\n        \"▁修飾\",\n        -12.9288330078125\n      ],\n      [\n        \"▁なめらか\",\n        -12.92885684967041\n      ],\n      [\n        \"ザキ\",\n        -12.92888355255127\n      ],\n      [\n        \"▁フィリップス\",\n        -12.928905487060547\n      ],\n      [\n        \"▁模範\",\n        -12.929011344909668\n      ],\n      [\n        \"▁名高い\",\n        -12.929059028625488\n      ],\n      [\n        \"▁ポッター\",\n        -12.929158210754395\n      ],\n      [\n        \"▁美咲\",\n        -12.929179191589355\n      ],\n      [\n        \"認定\",\n        -12.929348945617676\n      ],\n      [\n        \"▁スペクトラム\",\n        -12.929692268371582\n      ],\n      [\n        \"▁ハイエンド\",\n        -12.929716110229492\n      ],\n      [\n        \"▁マルチメディア\",\n        -12.929821968078613\n      ],\n      [\n        \"▁プーチン\",\n        -12.92982292175293\n      ],\n      [\n        \"唇\",\n        -12.929862976074219\n      ],\n      [\n        \"マシン\",\n        -12.92998218536377\n      ],\n      [\n        \"▁眺望\",\n        -12.929984092712402\n      ],\n      [\n        \"▁春樹\",\n        -12.930126190185547\n      ],\n      [\n        \"▁青島\",\n        -12.930144309997559\n      ],\n      [\n        \"▁ボンバー\",\n        -12.930158615112305\n      ],\n      [\n        \"▁半角\",\n        -12.930306434631348\n      ],\n      [\n        \"▁マッカートニー\",\n        -12.93047046661377\n      ],\n      [\n        \"▁大晦日\",\n        -12.93047046661377\n      ],\n      [\n        \"▁クーペ\",\n        -12.930620193481445\n      ],\n      [\n        \"▁切開\",\n        -12.930621147155762\n      ],\n      [\n        \"回答\",\n        -12.93066120147705\n      ],\n      [\n        \"斜\",\n        -12.930838584899902\n      ],\n      [\n        \"覚え\",\n        -12.930902481079102\n      ],\n      [\n        \"▁石材\",\n        -12.930930137634277\n      ],\n      [\n        \"▁スティール\",\n        -12.930963516235352\n      ],\n      [\n        \"▁快く\",\n        -12.931032180786133\n      ],\n      [\n        \"▁意気\",\n        -12.931124687194824\n      ],\n      [\n        \"▁シャーマン\",\n        -12.931154251098633\n      ],\n      [\n        \"oci\",\n        -12.931219100952148\n      ],\n      [\n        \"▁埋蔵\",\n        -12.931262969970703\n      ],\n      [\n        \"▁恐ろし\",\n        -12.931313514709473\n      ],\n      [\n        \"ブルグ\",\n        -12.931448936462402\n      ],\n      [\n        \"▁断食\",\n        -12.93145751953125\n      ],\n      [\n        \"▁SONY\",\n        -12.93146800994873\n      ],\n      [\n        \"▁支柱\",\n        -12.931498527526855\n      ],\n      [\n        \"kura\",\n        -12.931519508361816\n      ],\n      [\n        \"▁延暦\",\n        -12.931520462036133\n      ],\n      [\n        \"▁アバター\",\n        -12.931572914123535\n      ],\n      [\n        \"▁広める\",\n        -12.931662559509277\n      ],\n      [\n        \"▁カルア\",\n        -12.931679725646973\n      ],\n      [\n        \"▁冷たく\",\n        -12.931756973266602\n      ],\n      [\n        \"▁フランケン\",\n        -12.931798934936523\n      ],\n      [\n        \"プラザ\",\n        -12.931957244873047\n      ],\n      [\n        \"エンヌ\",\n        -12.931962013244629\n      ],\n      [\n        \"弾頭\",\n        -12.932045936584473\n      ],\n      [\n        \"▁説話\",\n        -12.932046890258789\n      ],\n      [\n        \"派遣\",\n        -12.932114601135254\n      ],\n      [\n        \"▁実名\",\n        -12.93211555480957\n      ],\n      [\n        \"▁サタデー\",\n        -12.932175636291504\n      ],\n      [\n        \"▁賢者\",\n        -12.932183265686035\n      ],\n      [\n        \"navi\",\n        -12.932245254516602\n      ],\n      [\n        \"▁産んだ\",\n        -12.932268142700195\n      ],\n      [\n        \"憲法\",\n        -12.932374000549316\n      ],\n      [\n        \"▁推察\",\n        -12.932443618774414\n      ],\n      [\n        \"▁序列\",\n        -12.932472229003906\n      ],\n      [\n        \"▁蜘蛛\",\n        -12.932662963867188\n      ],\n      [\n        \"▁花柄\",\n        -12.932692527770996\n      ],\n      [\n        \"該\",\n        -12.932723999023438\n      ],\n      [\n        \"賭\",\n        -12.933018684387207\n      ],\n      [\n        \"▁片づけ\",\n        -12.933101654052734\n      ],\n      [\n        \"▁エベレスト\",\n        -12.933151245117188\n      ],\n      [\n        \"討ち\",\n        -12.933238983154297\n      ],\n      [\n        \"▁フラグメント\",\n        -12.933429718017578\n      ],\n      [\n        \"▁コントラスト\",\n        -12.933759689331055\n      ],\n      [\n        \"▁里見\",\n        -12.933792114257812\n      ],\n      [\n        \"▁結構です\",\n        -12.933802604675293\n      ],\n      [\n        \"▁ジェネレーション\",\n        -12.933883666992188\n      ],\n      [\n        \"▁空室\",\n        -12.933992385864258\n      ],\n      [\n        \"兵員\",\n        -12.934083938598633\n      ],\n      [\n        \"▁Zoom\",\n        -12.934377670288086\n      ],\n      [\n        \"▁岩波\",\n        -12.934507369995117\n      ],\n      [\n        \"▁七尾\",\n        -12.934733390808105\n      ],\n      [\n        \"東洋\",\n        -12.9347505569458\n      ],\n      [\n        \"▁ライプツィヒ\",\n        -12.934861183166504\n      ],\n      [\n        \"理想\",\n        -12.934880256652832\n      ],\n      [\n        \"▁ロースト\",\n        -12.935014724731445\n      ],\n      [\n        \"▁アロール\",\n        -12.935086250305176\n      ],\n      [\n        \"▁野良\",\n        -12.935792922973633\n      ],\n      [\n        \"▁android\",\n        -12.935839653015137\n      ],\n      [\n        \"▁隼人\",\n        -12.93584156036377\n      ],\n      [\n        \"先月\",\n        -12.935868263244629\n      ],\n      [\n        \"シンプル\",\n        -12.93594741821289\n      ],\n      [\n        \"▁脇役\",\n        -12.936034202575684\n      ],\n      [\n        \"▁なさって\",\n        -12.936141014099121\n      ],\n      [\n        \"rick\",\n        -12.936169624328613\n      ],\n      [\n        \"▁怪談\",\n        -12.93659782409668\n      ],\n      [\n        \"▁タンカー\",\n        -12.936622619628906\n      ],\n      [\n        \"▁コラーダ\",\n        -12.936820030212402\n      ],\n      [\n        \"▁路地\",\n        -12.936833381652832\n      ],\n      [\n        \"▁愛宕\",\n        -12.936842918395996\n      ],\n      [\n        \"udo\",\n        -12.936931610107422\n      ],\n      [\n        \"▁和美\",\n        -12.937030792236328\n      ],\n      [\n        \"簡単な\",\n        -12.937116622924805\n      ],\n      [\n        \"▁田んぼ\",\n        -12.937152862548828\n      ],\n      [\n        \"ウクライナ\",\n        -12.93724536895752\n      ],\n      [\n        \"▁ギムレット\",\n        -12.937309265136719\n      ],\n      [\n        \"苺\",\n        -12.937309265136719\n      ],\n      [\n        \"ヶ島\",\n        -12.937317848205566\n      ],\n      [\n        \"▁粘着\",\n        -12.937402725219727\n      ],\n      [\n        \"▁白紙\",\n        -12.937405586242676\n      ],\n      [\n        \"▁レンジャーズ\",\n        -12.937493324279785\n      ],\n      [\n        \"▁ラトビア\",\n        -12.937554359436035\n      ],\n      [\n        \"報道\",\n        -12.937613487243652\n      ],\n      [\n        \"▁便利だ\",\n        -12.937615394592285\n      ],\n      [\n        \"国鉄\",\n        -12.937623977661133\n      ],\n      [\n        \"メリット\",\n        -12.937676429748535\n      ],\n      [\n        \"▁奉公\",\n        -12.937719345092773\n      ],\n      [\n        \"▁盛り込んだ\",\n        -12.937799453735352\n      ],\n      [\n        \"列車\",\n        -12.937833786010742\n      ],\n      [\n        \"▁GRE\",\n        -12.937848091125488\n      ],\n      [\n        \"▁菜園\",\n        -12.937952995300293\n      ],\n      [\n        \"▁アルフレッド\",\n        -12.93805980682373\n      ],\n      [\n        \"▁こまめに\",\n        -12.938289642333984\n      ],\n      [\n        \"▁寄港\",\n        -12.938356399536133\n      ],\n      [\n        \"▁段差\",\n        -12.938379287719727\n      ],\n      [\n        \"▁周防\",\n        -12.938464164733887\n      ],\n      [\n        \"ATSU\",\n        -12.938608169555664\n      ],\n      [\n        \"▁NMB\",\n        -12.938679695129395\n      ],\n      [\n        \"ようやく\",\n        -12.938705444335938\n      ],\n      [\n        \"▁Miss\",\n        -12.93874740600586\n      ],\n      [\n        \"ç\",\n        -12.938761711120605\n      ],\n      [\n        \"蛍\",\n        -12.938779830932617\n      ],\n      [\n        \"▁ダイアログ\",\n        -12.938789367675781\n      ],\n      [\n        \"エチレン\",\n        -12.938881874084473\n      ],\n      [\n        \"▁楽しもう\",\n        -12.938908576965332\n      ],\n      [\n        \"▁Style\",\n        -12.938921928405762\n      ],\n      [\n        \"▁ダンプ\",\n        -12.938946723937988\n      ],\n      [\n        \"▁アウェー\",\n        -12.93902587890625\n      ],\n      [\n        \"▁合図\",\n        -12.93908977508545\n      ],\n      [\n        \"▁あすか\",\n        -12.939102172851562\n      ],\n      [\n        \"▁木目\",\n        -12.939239501953125\n      ],\n      [\n        \"▁コメンテーター\",\n        -12.939270973205566\n      ],\n      [\n        \"▁粉砕\",\n        -12.939300537109375\n      ],\n      [\n        \"▁帝王\",\n        -12.939480781555176\n      ],\n      [\n        \"¨\",\n        -12.9395170211792\n      ],\n      [\n        \"▁齋藤\",\n        -12.9395170211792\n      ],\n      [\n        \"Script\",\n        -12.939518928527832\n      ],\n      [\n        \"▁傾倒\",\n        -12.939533233642578\n      ],\n      [\n        \"世間\",\n        -12.939544677734375\n      ],\n      [\n        \"▁壊して\",\n        -12.939592361450195\n      ],\n      [\n        \"多数\",\n        -12.939602851867676\n      ],\n      [\n        \"インスタ\",\n        -12.939711570739746\n      ],\n      [\n        \"olar\",\n        -12.939746856689453\n      ],\n      [\n        \"▁審理\",\n        -12.939760208129883\n      ],\n      [\n        \"▁満期\",\n        -12.939787864685059\n      ],\n      [\n        \"▁MacBook\",\n        -12.939827919006348\n      ],\n      [\n        \"▁右腕\",\n        -12.939842224121094\n      ],\n      [\n        \"▁クリエイト\",\n        -12.940008163452148\n      ],\n      [\n        \"▁利回り\",\n        -12.940032005310059\n      ],\n      [\n        \"BLE\",\n        -12.940169334411621\n      ],\n      [\n        \"▁DARK\",\n        -12.940230369567871\n      ],\n      [\n        \"ADA\",\n        -12.940289497375488\n      ],\n      [\n        \"▁映って\",\n        -12.94030475616455\n      ],\n      [\n        \"▁将兵\",\n        -12.940400123596191\n      ],\n      [\n        \"▁あべ\",\n        -12.940425872802734\n      ],\n      [\n        \"縛\",\n        -12.940449714660645\n      ],\n      [\n        \"▁体現\",\n        -12.940651893615723\n      ],\n      [\n        \"批評\",\n        -12.940715789794922\n      ],\n      [\n        \"570\",\n        -12.940802574157715\n      ],\n      [\n        \"▁バリュ\",\n        -12.940875053405762\n      ],\n      [\n        \"▁仕草\",\n        -12.940961837768555\n      ],\n      [\n        \"▁広々\",\n        -12.940984725952148\n      ],\n      [\n        \"▁両論\",\n        -12.941137313842773\n      ],\n      [\n        \"stra\",\n        -12.941161155700684\n      ],\n      [\n        \"▁乱用\",\n        -12.941177368164062\n      ],\n      [\n        \"σ\",\n        -12.941238403320312\n      ],\n      [\n        \"▁味噌汁\",\n        -12.941258430480957\n      ],\n      [\n        \"ml\",\n        -12.941550254821777\n      ],\n      [\n        \"▁寝返\",\n        -12.94167423248291\n      ],\n      [\n        \"▁ギガ\",\n        -12.941732406616211\n      ],\n      [\n        \"▁羽目\",\n        -12.942007064819336\n      ],\n      [\n        \"不倫\",\n        -12.942032814025879\n      ],\n      [\n        \"勝手な\",\n        -12.942160606384277\n      ],\n      [\n        \"瘤\",\n        -12.942222595214844\n      ],\n      [\n        \"なるほど\",\n        -12.942278861999512\n      ],\n      [\n        \"全員\",\n        -12.942359924316406\n      ],\n      [\n        \"▁冷やし\",\n        -12.942464828491211\n      ],\n      [\n        \"溺\",\n        -12.942605018615723\n      ],\n      [\n        \"美味しい\",\n        -12.942641258239746\n      ],\n      [\n        \"▁血縁\",\n        -12.942706108093262\n      ],\n      [\n        \"▁グラデーション\",\n        -12.94271469116211\n      ],\n      [\n        \"▁Dance\",\n        -12.942730903625488\n      ],\n      [\n        \"▁絶妙な\",\n        -12.942780494689941\n      ],\n      [\n        \"▁浅間\",\n        -12.942977905273438\n      ],\n      [\n        \"▁See\",\n        -12.94300365447998\n      ],\n      [\n        \"▁食い込\",\n        -12.943038940429688\n      ],\n      [\n        \"▁趣向\",\n        -12.943242073059082\n      ],\n      [\n        \"▁少額\",\n        -12.943259239196777\n      ],\n      [\n        \"TURE\",\n        -12.943324089050293\n      ],\n      [\n        \"▁まんま\",\n        -12.943402290344238\n      ],\n      [\n        \"▁銃弾\",\n        -12.943411827087402\n      ],\n      [\n        \"罵\",\n        -12.94345474243164\n      ],\n      [\n        \"▁呑み\",\n        -12.94347095489502\n      ],\n      [\n        \"ザンヌ\",\n        -12.943471908569336\n      ],\n      [\n        \"▁サムスン\",\n        -12.943479537963867\n      ],\n      [\n        \"▁財界\",\n        -12.943613052368164\n      ],\n      [\n        \"▁ドラゴンズ\",\n        -12.94366455078125\n      ],\n      [\n        \"たしかに\",\n        -12.943696975708008\n      ],\n      [\n        \"投票\",\n        -12.943703651428223\n      ],\n      [\n        \"ization\",\n        -12.943790435791016\n      ],\n      [\n        \"登山\",\n        -12.943831443786621\n      ],\n      [\n        \"▁取って代わ\",\n        -12.943893432617188\n      ],\n      [\n        \"▁参与\",\n        -12.944001197814941\n      ],\n      [\n        \"aster\",\n        -12.944072723388672\n      ],\n      [\n        \"ela\",\n        -12.94432258605957\n      ],\n      [\n        \"▁砲台\",\n        -12.944404602050781\n      ],\n      [\n        \"▁ウィンダム\",\n        -12.944493293762207\n      ],\n      [\n        \"それなのに\",\n        -12.944828987121582\n      ],\n      [\n        \"▁買物\",\n        -12.944901466369629\n      ],\n      [\n        \"▁あそび\",\n        -12.944934844970703\n      ],\n      [\n        \"▁ブルゴーニュ\",\n        -12.944934844970703\n      ],\n      [\n        \"▁オセアニア\",\n        -12.945181846618652\n      ],\n      [\n        \"ラツィオーネ\",\n        -12.945189476013184\n      ],\n      [\n        \"顧客\",\n        -12.945197105407715\n      ],\n      [\n        \"≧\",\n        -12.945428848266602\n      ],\n      [\n        \"▁クロスオーバー\",\n        -12.945486068725586\n      ],\n      [\n        \"逝\",\n        -12.94564151763916\n      ],\n      [\n        \"▁煉瓦\",\n        -12.94567584991455\n      ],\n      [\n        \"なんでも\",\n        -12.945706367492676\n      ],\n      [\n        \"▁KBS\",\n        -12.945775032043457\n      ],\n      [\n        \"▁街頭\",\n        -12.945852279663086\n      ],\n      [\n        \"▁気仙沼\",\n        -12.9459228515625\n      ],\n      [\n        \"芹\",\n        -12.9459228515625\n      ],\n      [\n        \"▁偶数\",\n        -12.945923805236816\n      ],\n      [\n        \"▁Michael\",\n        -12.946170806884766\n      ],\n      [\n        \"▁リヨン\",\n        -12.946182250976562\n      ],\n      [\n        \"海岸\",\n        -12.946306228637695\n      ],\n      [\n        \"▁釜石\",\n        -12.946338653564453\n      ],\n      [\n        \"▁増した\",\n        -12.946495056152344\n      ],\n      [\n        \"▁COMIC\",\n        -12.946560859680176\n      ],\n      [\n        \"hin\",\n        -12.946581840515137\n      ],\n      [\n        \"甫\",\n        -12.946664810180664\n      ],\n      [\n        \"▁売った\",\n        -12.946749687194824\n      ],\n      [\n        \"▁moon\",\n        -12.946769714355469\n      ],\n      [\n        \"▁Cons\",\n        -12.946869850158691\n      ],\n      [\n        \"▁茅ヶ崎\",\n        -12.946918487548828\n      ],\n      [\n        \"▁引き立て\",\n        -12.94714641571045\n      ],\n      [\n        \"▁定型\",\n        -12.947239875793457\n      ],\n      [\n        \"▁Engine\",\n        -12.947408676147461\n      ],\n      [\n        \"▁プレイステーション\",\n        -12.947427749633789\n      ],\n      [\n        \"ワシントン\",\n        -12.947428703308105\n      ],\n      [\n        \"▁顔写真\",\n        -12.947524070739746\n      ],\n      [\n        \"▁軽視\",\n        -12.947554588317871\n      ],\n      [\n        \"▁稚内\",\n        -12.94765567779541\n      ],\n      [\n        \"▁経典\",\n        -12.947714805603027\n      ],\n      [\n        \"ッツィ\",\n        -12.947770118713379\n      ],\n      [\n        \"▁生姜\",\n        -12.947855949401855\n      ],\n      [\n        \"四国\",\n        -12.947920799255371\n      ],\n      [\n        \"▁ルック\",\n        -12.947927474975586\n      ],\n      [\n        \"ヘキサ\",\n        -12.948041915893555\n      ],\n      [\n        \"▁百科\",\n        -12.948051452636719\n      ],\n      [\n        \"▁License\",\n        -12.948150634765625\n      ],\n      [\n        \"▁闘病\",\n        -12.948214530944824\n      ],\n      [\n        \"▁返せ\",\n        -12.948342323303223\n      ],\n      [\n        \"itz\",\n        -12.948410987854004\n      ],\n      [\n        \"胴\",\n        -12.948429107666016\n      ],\n      [\n        \"▁極秘\",\n        -12.948484420776367\n      ],\n      [\n        \"▁アヘル\",\n        -12.948511123657227\n      ],\n      [\n        \"▁洛陽\",\n        -12.94864559173584\n      ],\n      [\n        \"▁Luc\",\n        -12.948747634887695\n      ],\n      [\n        \"▁脳卒中\",\n        -12.948893547058105\n      ],\n      [\n        \"▁ベリニ\",\n        -12.948919296264648\n      ],\n      [\n        \"▁ほのか\",\n        -12.948949813842773\n      ],\n      [\n        \"▁アミューズメント\",\n        -12.949141502380371\n      ],\n      [\n        \"▁捏造\",\n        -12.949141502380371\n      ],\n      [\n        \"▁委嘱\",\n        -12.949143409729004\n      ],\n      [\n        \"▁Smart\",\n        -12.949219703674316\n      ],\n      [\n        \"▁比重\",\n        -12.949380874633789\n      ],\n      [\n        \"FOR\",\n        -12.949430465698242\n      ],\n      [\n        \"▁まるごと\",\n        -12.949434280395508\n      ],\n      [\n        \"aid\",\n        -12.949437141418457\n      ],\n      [\n        \"▁ハルゲル\",\n        -12.949506759643555\n      ],\n      [\n        \"▁弱者\",\n        -12.949518203735352\n      ],\n      [\n        \"▁Tomatoes\",\n        -12.949886322021484\n      ],\n      [\n        \"藪\",\n        -12.949886322021484\n      ],\n      [\n        \"▁ただちに\",\n        -12.949888229370117\n      ],\n      [\n        \"楽しみ\",\n        -12.949928283691406\n      ],\n      [\n        \"550\",\n        -12.950056076049805\n      ],\n      [\n        \"▁鉄骨\",\n        -12.95007610321045\n      ],\n      [\n        \"鋒\",\n        -12.95013427734375\n      ],\n      [\n        \"▁交替\",\n        -12.950167655944824\n      ],\n      [\n        \"いきなり\",\n        -12.950461387634277\n      ],\n      [\n        \"▁サプライ\",\n        -12.95051383972168\n      ],\n      [\n        \"▁General\",\n        -12.950634956359863\n      ],\n      [\n        \"QUE\",\n        -12.950654029846191\n      ],\n      [\n        \"▁常温\",\n        -12.950835227966309\n      ],\n      [\n        \"▁覇権\",\n        -12.950879096984863\n      ],\n      [\n        \"▁散々\",\n        -12.950896263122559\n      ],\n      [\n        \"▁薄型\",\n        -12.951050758361816\n      ],\n      [\n        \"方法\",\n        -12.951099395751953\n      ],\n      [\n        \"▁Just\",\n        -12.951107025146484\n      ],\n      [\n        \"麟\",\n        -12.951126098632812\n      ],\n      [\n        \"▁後見人\",\n        -12.951136589050293\n      ],\n      [\n        \"▁ボビー\",\n        -12.951155662536621\n      ],\n      [\n        \"旬\",\n        -12.951187133789062\n      ],\n      [\n        \"▁雷撃\",\n        -12.951214790344238\n      ],\n      [\n        \"lio\",\n        -12.951299667358398\n      ],\n      [\n        \"▁芽生え\",\n        -12.951387405395508\n      ],\n      [\n        \"▁抗がん\",\n        -12.951436996459961\n      ],\n      [\n        \"▁占めた\",\n        -12.95154857635498\n      ],\n      [\n        \"▁旭日\",\n        -12.95161247253418\n      ],\n      [\n        \"▁かなって\",\n        -12.951628684997559\n      ],\n      [\n        \"現存\",\n        -12.951761245727539\n      ],\n      [\n        \"▁プルー\",\n        -12.951837539672852\n      ],\n      [\n        \"▁日立製作所\",\n        -12.951873779296875\n      ],\n      [\n        \"▁深層\",\n        -12.951923370361328\n      ],\n      [\n        \"▁坊主\",\n        -12.952032089233398\n      ],\n      [\n        \"▁白血病\",\n        -12.95212173461914\n      ],\n      [\n        \"▁一掃\",\n        -12.95213508605957\n      ],\n      [\n        \"▁もらえれば\",\n        -12.952187538146973\n      ],\n      [\n        \"▁さわやか\",\n        -12.952213287353516\n      ],\n      [\n        \"▁ナオ\",\n        -12.952360153198242\n      ],\n      [\n        \"▁打ち出し\",\n        -12.95252799987793\n      ],\n      [\n        \"▁ばい\",\n        -12.952567100524902\n      ],\n      [\n        \"▁オンタリオ\",\n        -12.952619552612305\n      ],\n      [\n        \"▁華麗な\",\n        -12.952620506286621\n      ],\n      [\n        \"萩\",\n        -12.95268440246582\n      ],\n      [\n        \"もに\",\n        -12.952828407287598\n      ],\n      [\n        \"フスキ\",\n        -12.95284652709961\n      ],\n      [\n        \"公益\",\n        -12.952879905700684\n      ],\n      [\n        \"▁ヴェストファーレン\",\n        -12.953117370605469\n      ],\n      [\n        \"シテ\",\n        -12.95313835144043\n      ],\n      [\n        \"▁大納言\",\n        -12.95336627960205\n      ],\n      [\n        \"ディスク\",\n        -12.953506469726562\n      ],\n      [\n        \"▁ジョゼフ\",\n        -12.95362663269043\n      ],\n      [\n        \"▁彫り\",\n        -12.953648567199707\n      ],\n      [\n        \"▁横切\",\n        -12.953680992126465\n      ],\n      [\n        \"▁ゴマ\",\n        -12.953750610351562\n      ],\n      [\n        \"▁つなげて\",\n        -12.953875541687012\n      ],\n      [\n        \"▁由紀夫\",\n        -12.953934669494629\n      ],\n      [\n        \"▁Long\",\n        -12.953981399536133\n      ],\n      [\n        \"▁隆起\",\n        -12.954106330871582\n      ],\n      [\n        \"レンタル\",\n        -12.954116821289062\n      ],\n      [\n        \"▁尊氏\",\n        -12.954202651977539\n      ],\n      [\n        \"▁アルベルト\",\n        -12.95433235168457\n      ],\n      [\n        \"▁ベーコン\",\n        -12.954347610473633\n      ],\n      [\n        \"▁和也\",\n        -12.954350471496582\n      ],\n      [\n        \"▁満ちて\",\n        -12.954434394836426\n      ],\n      [\n        \"▁カタチ\",\n        -12.954562187194824\n      ],\n      [\n        \"▁文系\",\n        -12.954584121704102\n      ],\n      [\n        \"▁グスタフ\",\n        -12.954614639282227\n      ],\n      [\n        \"▁湧水\",\n        -12.95461654663086\n      ],\n      [\n        \"市販\",\n        -12.954642295837402\n      ],\n      [\n        \"▁搾取\",\n        -12.954861640930176\n      ],\n      [\n        \"▁潤滑\",\n        -12.954885482788086\n      ],\n      [\n        \"▁桑田\",\n        -12.954896926879883\n      ],\n      [\n        \"マイケル\",\n        -12.95510482788086\n      ],\n      [\n        \"▁プロパガンダ\",\n        -12.955111503601074\n      ],\n      [\n        \"▁撥水\",\n        -12.95511245727539\n      ],\n      [\n        \"▁感知\",\n        -12.955183029174805\n      ],\n      [\n        \"▁掻き\",\n        -12.955362319946289\n      ],\n      [\n        \"賃貸\",\n        -12.955451965332031\n      ],\n      [\n        \"▁POS\",\n        -12.95569133758545\n      ],\n      [\n        \"▁スキーム\",\n        -12.95571517944336\n      ],\n      [\n        \"正在播放\",\n        -12.955860137939453\n      ],\n      [\n        \"▁祭礼\",\n        -12.955896377563477\n      ],\n      [\n        \"楊\",\n        -12.955951690673828\n      ],\n      [\n        \"▁軽度\",\n        -12.956155776977539\n      ],\n      [\n        \"フォーク\",\n        -12.956184387207031\n      ],\n      [\n        \"▁まわし\",\n        -12.956215858459473\n      ],\n      [\n        \"▁振り分け\",\n        -12.956463813781738\n      ],\n      [\n        \"▁武蔵国\",\n        -12.956576347351074\n      ],\n      [\n        \"外観\",\n        -12.956589698791504\n      ],\n      [\n        \"ーニョ\",\n        -12.956665992736816\n      ],\n      [\n        \"応援\",\n        -12.956745147705078\n      ],\n      [\n        \"▁バンパー\",\n        -12.956850051879883\n      ],\n      [\n        \"▁明朝\",\n        -12.956851959228516\n      ],\n      [\n        \"▁集大成\",\n        -12.956859588623047\n      ],\n      [\n        \"▁PLAY\",\n        -12.956971168518066\n      ],\n      [\n        \"高等\",\n        -12.956974029541016\n      ],\n      [\n        \"▁めまい\",\n        -12.957099914550781\n      ],\n      [\n        \"▁悪夢\",\n        -12.957132339477539\n      ],\n      [\n        \"禅寺\",\n        -12.957351684570312\n      ],\n      [\n        \"▁戸惑い\",\n        -12.957359313964844\n      ],\n      [\n        \"▁漏えい\",\n        -12.957366943359375\n      ],\n      [\n        \"▁飛ばす\",\n        -12.957498550415039\n      ],\n      [\n        \"▁Land\",\n        -12.957902908325195\n      ],\n      [\n        \"▁使おう\",\n        -12.95794677734375\n      ],\n      [\n        \"Yahoo\",\n        -12.957966804504395\n      ],\n      [\n        \"▁休め\",\n        -12.957968711853027\n      ],\n      [\n        \"▁インフォ\",\n        -12.957971572875977\n      ],\n      [\n        \"ニッシュ\",\n        -12.95812702178955\n      ],\n      [\n        \"▁レオナルド\",\n        -12.958131790161133\n      ],\n      [\n        \"▁効いた\",\n        -12.958227157592773\n      ],\n      [\n        \"▁有識\",\n        -12.958270072937012\n      ],\n      [\n        \"▁ボーカリスト\",\n        -12.958359718322754\n      ],\n      [\n        \"▁遭って\",\n        -12.95836067199707\n      ],\n      [\n        \"BOY\",\n        -12.958415031433105\n      ],\n      [\n        \"▁JUN\",\n        -12.958420753479004\n      ],\n      [\n        \"▁RSS\",\n        -12.958454132080078\n      ],\n      [\n        \"oop\",\n        -12.958585739135742\n      ],\n      [\n        \"IRT\",\n        -12.958601951599121\n      ],\n      [\n        \"▁天ぷら\",\n        -12.958609580993652\n      ],\n      [\n        \"▁下さって\",\n        -12.958612442016602\n      ],\n      [\n        \"▁純度\",\n        -12.958643913269043\n      ],\n      [\n        \"▁自害\",\n        -12.958669662475586\n      ],\n      [\n        \"imp\",\n        -12.959264755249023\n      ],\n      [\n        \"▁林道\",\n        -12.95932388305664\n      ],\n      [\n        \"▁ゲーマー\",\n        -12.959407806396484\n      ],\n      [\n        \"DX\",\n        -12.959431648254395\n      ],\n      [\n        \"▁献身\",\n        -12.95950984954834\n      ],\n      [\n        \"▁わいせつ\",\n        -12.959611892700195\n      ],\n      [\n        \"▁真剣な\",\n        -12.959716796875\n      ],\n      [\n        \"銀座\",\n        -12.959741592407227\n      ],\n      [\n        \"ify\",\n        -12.960125923156738\n      ],\n      [\n        \"▁散見\",\n        -12.96021842956543\n      ],\n      [\n        \"吸\",\n        -12.960227012634277\n      ],\n      [\n        \"▁オヤジ\",\n        -12.960365295410156\n      ],\n      [\n        \"▁なんらか\",\n        -12.960616111755371\n      ],\n      [\n        \"▁鮮やか\",\n        -12.960665702819824\n      ],\n      [\n        \"▁温める\",\n        -12.96090316772461\n      ],\n      [\n        \"有効\",\n        -12.961071014404297\n      ],\n      [\n        \"▁魔界\",\n        -12.96135425567627\n      ],\n      [\n        \"近世\",\n        -12.961448669433594\n      ],\n      [\n        \"▁ラミナー\",\n        -12.961620330810547\n      ],\n      [\n        \"ハノーファー\",\n        -12.96162223815918\n      ],\n      [\n        \"▁欠落\",\n        -12.961716651916504\n      ],\n      [\n        \"▁学説\",\n        -12.961780548095703\n      ],\n      [\n        \"▁WEST\",\n        -12.961819648742676\n      ],\n      [\n        \"▁キュン\",\n        -12.961883544921875\n      ],\n      [\n        \"▁載せた\",\n        -12.961921691894531\n      ],\n      [\n        \"無線\",\n        -12.96213436126709\n      ],\n      [\n        \"▁秀樹\",\n        -12.962327003479004\n      ],\n      [\n        \"▁蒲生\",\n        -12.96237564086914\n      ],\n      [\n        \"カタログ\",\n        -12.9625244140625\n      ],\n      [\n        \"▁(*^^*)\",\n        -12.962623596191406\n      ],\n      [\n        \"▁神仏\",\n        -12.962674140930176\n      ],\n      [\n        \"迫り\",\n        -12.962746620178223\n      ],\n      [\n        \"ヴァール\",\n        -12.962803840637207\n      ],\n      [\n        \"▁流布\",\n        -12.962855339050293\n      ],\n      [\n        \"host\",\n        -12.963064193725586\n      ],\n      [\n        \"▁巻いて\",\n        -12.963082313537598\n      ],\n      [\n        \"▁過大\",\n        -12.963135719299316\n      ],\n      [\n        \"▁電装\",\n        -12.963274955749512\n      ],\n      [\n        \"グラード\",\n        -12.963294982910156\n      ],\n      [\n        \"有料\",\n        -12.963446617126465\n      ],\n      [\n        \"ウォル\",\n        -12.963491439819336\n      ],\n      [\n        \"▁実技\",\n        -12.96359920501709\n      ],\n      [\n        \"▁柏原\",\n        -12.963603019714355\n      ],\n      [\n        \"▁みなとみらい\",\n        -12.963629722595215\n      ],\n      [\n        \"▁呼べる\",\n        -12.963640213012695\n      ],\n      [\n        \"▁浴びせ\",\n        -12.963790893554688\n      ],\n      [\n        \"▁電位\",\n        -12.964058876037598\n      ],\n      [\n        \"▁呼びかけた\",\n        -12.964526176452637\n      ],\n      [\n        \"フルーツ\",\n        -12.96454906463623\n      ],\n      [\n        \"▁明確で\",\n        -12.964566230773926\n      ],\n      [\n        \"▁ジャンヌ\",\n        -12.964599609375\n      ],\n      [\n        \"OMO\",\n        -12.964615821838379\n      ],\n      [\n        \"▁デニス\",\n        -12.964675903320312\n      ],\n      [\n        \"▁ウェイン\",\n        -12.965009689331055\n      ],\n      [\n        \"▁しなやか\",\n        -12.965028762817383\n      ],\n      [\n        \"▁はじまる\",\n        -12.965209007263184\n      ],\n      [\n        \"▁尾翼\",\n        -12.96522331237793\n      ],\n      [\n        \"▁WOWOW\",\n        -12.965392112731934\n      ],\n      [\n        \"▁甲賀\",\n        -12.965404510498047\n      ],\n      [\n        \"▁ETF\",\n        -12.965494155883789\n      ],\n      [\n        \"読者\",\n        -12.965597152709961\n      ],\n      [\n        \"▁飲める\",\n        -12.965653419494629\n      ],\n      [\n        \"▁繰り上げ\",\n        -12.965707778930664\n      ],\n      [\n        \"▁のぞみ\",\n        -12.965743064880371\n      ],\n      [\n        \"▁サーモン\",\n        -12.965822219848633\n      ],\n      [\n        \"▁退位\",\n        -12.965836524963379\n      ],\n      [\n        \"▁嫡子\",\n        -12.965900421142578\n      ],\n      [\n        \"下ろし\",\n        -12.965983390808105\n      ],\n      [\n        \"高度\",\n        -12.966036796569824\n      ],\n      [\n        \"▁台帳\",\n        -12.966263771057129\n      ],\n      [\n        \"▁献立\",\n        -12.966323852539062\n      ],\n      [\n        \"▁チューリップ\",\n        -12.966414451599121\n      ],\n      [\n        \"▁吸って\",\n        -12.966550827026367\n      ],\n      [\n        \"▁ナイス\",\n        -12.966644287109375\n      ],\n      [\n        \"▁海苔\",\n        -12.96679973602295\n      ],\n      [\n        \"▁ベーカリー\",\n        -12.96690559387207\n      ],\n      [\n        \"▁Specialist\",\n        -12.966930389404297\n      ],\n      [\n        \"▁柳川\",\n        -12.966933250427246\n      ],\n      [\n        \"▁黒澤\",\n        -12.966965675354004\n      ],\n      [\n        \"▁自費\",\n        -12.96701717376709\n      ],\n      [\n        \"▁平氏\",\n        -12.96702766418457\n      ],\n      [\n        \"▁カンタン\",\n        -12.967083930969238\n      ],\n      [\n        \"▁ウィメンズ\",\n        -12.967214584350586\n      ],\n      [\n        \"▁クレストン\",\n        -12.967297554016113\n      ],\n      [\n        \"▁金貨\",\n        -12.967389106750488\n      ],\n      [\n        \"竈\",\n        -12.96741008758545\n      ],\n      [\n        \"body\",\n        -12.967595100402832\n      ],\n      [\n        \"捷\",\n        -12.967662811279297\n      ],\n      [\n        \"▁忘年\",\n        -12.967663764953613\n      ],\n      [\n        \"榎\",\n        -12.967913627624512\n      ],\n      [\n        \"▁磁石\",\n        -12.967918395996094\n      ],\n      [\n        \"▁ブロンズ\",\n        -12.96792221069336\n      ],\n      [\n        \"▁奇数\",\n        -12.967986106872559\n      ],\n      [\n        \"ワイド\",\n        -12.968199729919434\n      ],\n      [\n        \"▁モヤモヤ\",\n        -12.96842098236084\n      ],\n      [\n        \"▁起こせる\",\n        -12.96842098236084\n      ],\n      [\n        \"▁防げ\",\n        -12.968448638916016\n      ],\n      [\n        \"▁下さり\",\n        -12.968562126159668\n      ],\n      [\n        \"▁格別\",\n        -12.968684196472168\n      ],\n      [\n        \"窺\",\n        -12.968926429748535\n      ],\n      [\n        \"▁素顔\",\n        -12.968961715698242\n      ],\n      [\n        \"▁乳児\",\n        -12.969085693359375\n      ],\n      [\n        \"ر\",\n        -12.9691801071167\n      ],\n      [\n        \"▁振り込み\",\n        -12.969199180603027\n      ],\n      [\n        \"▁ジオン\",\n        -12.969362258911133\n      ],\n      [\n        \"▁鬼太郎\",\n        -12.969413757324219\n      ],\n      [\n        \"▁童謡\",\n        -12.969432830810547\n      ],\n      [\n        \"▁光栄\",\n        -12.969571113586426\n      ],\n      [\n        \"闇\",\n        -12.969622611999512\n      ],\n      [\n        \"邑\",\n        -12.969640731811523\n      ],\n      [\n        \"灌\",\n        -12.969686508178711\n      ],\n      [\n        \"▁巨匠\",\n        -12.969966888427734\n      ],\n      [\n        \"▁占星術\",\n        -12.970192909240723\n      ],\n      [\n        \"▁touch\",\n        -12.970312118530273\n      ],\n      [\n        \"▁入港\",\n        -12.970335960388184\n      ],\n      [\n        \"ミントン\",\n        -12.970417022705078\n      ],\n      [\n        \"▁GOLD\",\n        -12.970476150512695\n      ],\n      [\n        \"▁無ければ\",\n        -12.9705171585083\n      ],\n      [\n        \"分の一\",\n        -12.97053050994873\n      ],\n      [\n        \"▁繋ぎ\",\n        -12.97070026397705\n      ],\n      [\n        \"arri\",\n        -12.970837593078613\n      ],\n      [\n        \"▁農作\",\n        -12.970871925354004\n      ],\n      [\n        \"喉\",\n        -12.970914840698242\n      ],\n      [\n        \"▁波及\",\n        -12.971014022827148\n      ],\n      [\n        \"▁桜木\",\n        -12.971386909484863\n      ],\n      [\n        \"tim\",\n        -12.971439361572266\n      ],\n      [\n        \"▁1854\",\n        -12.971574783325195\n      ],\n      [\n        \"▁石室\",\n        -12.97159481048584\n      ],\n      [\n        \"Poste\",\n        -12.971732139587402\n      ],\n      [\n        \"▁乗じて\",\n        -12.971802711486816\n      ],\n      [\n        \"▁水温\",\n        -12.971891403198242\n      ],\n      [\n        \"会話\",\n        -12.971891403198242\n      ],\n      [\n        \"‎\",\n        -12.971966743469238\n      ],\n      [\n        \"▁1858\",\n        -12.972063064575195\n      ],\n      [\n        \"▁大変でした\",\n        -12.972090721130371\n      ],\n      [\n        \"▁植栽\",\n        -12.972222328186035\n      ],\n      [\n        \"▁フーズ\",\n        -12.97272777557373\n      ],\n      [\n        \"▁穏やかに\",\n        -12.972728729248047\n      ],\n      [\n        \"痘\",\n        -12.972728729248047\n      ],\n      [\n        \"aven\",\n        -12.972743034362793\n      ],\n      [\n        \"▁先導\",\n        -12.972938537597656\n      ],\n      [\n        \"▁生ずる\",\n        -12.97296142578125\n      ],\n      [\n        \"▁ケルト\",\n        -12.972986221313477\n      ],\n      [\n        \"▁攻城\",\n        -12.972987174987793\n      ],\n      [\n        \"共通\",\n        -12.973039627075195\n      ],\n      [\n        \"▁成虫\",\n        -12.973047256469727\n      ],\n      [\n        \"▁バイアス\",\n        -12.973149299621582\n      ],\n      [\n        \"▁遠ざか\",\n        -12.973187446594238\n      ],\n      [\n        \"▁スワローズ\",\n        -12.973254203796387\n      ],\n      [\n        \"▁ベイスターズ\",\n        -12.973490715026855\n      ],\n      [\n        \"▁ラファエル\",\n        -12.973490715026855\n      ],\n      [\n        \"▁ミシン\",\n        -12.973514556884766\n      ],\n      [\n        \"▁フラッグ\",\n        -12.973583221435547\n      ],\n      [\n        \"▁フィナンシャル\",\n        -12.97374439239502\n      ],\n      [\n        \"▁服従\",\n        -12.973752975463867\n      ],\n      [\n        \"▁骨董\",\n        -12.973784446716309\n      ],\n      [\n        \"▁未婚\",\n        -12.973841667175293\n      ],\n      [\n        \"飽\",\n        -12.97399616241455\n      ],\n      [\n        \"▁激励\",\n        -12.974029541015625\n      ],\n      [\n        \"▁デュエット\",\n        -12.974039077758789\n      ],\n      [\n        \"デッド\",\n        -12.974150657653809\n      ],\n      [\n        \"戦時\",\n        -12.974185943603516\n      ],\n      [\n        \"▁以西\",\n        -12.974255561828613\n      ],\n      [\n        \"▁違憲\",\n        -12.974273681640625\n      ],\n      [\n        \"▁降臨\",\n        -12.974273681640625\n      ],\n      [\n        \"▁脱線\",\n        -12.974382400512695\n      ],\n      [\n        \"▁埠頭\",\n        -12.974507331848145\n      ],\n      [\n        \"吟\",\n        -12.974507331848145\n      ],\n      [\n        \"▁異変\",\n        -12.974597930908203\n      ],\n      [\n        \"▁トッピング\",\n        -12.974644660949707\n      ],\n      [\n        \"此\",\n        -12.974749565124512\n      ],\n      [\n        \"枢\",\n        -12.974777221679688\n      ],\n      [\n        \"▁ネガティブ\",\n        -12.97497272491455\n      ],\n      [\n        \"▁マクラーレン\",\n        -12.975016593933105\n      ],\n      [\n        \"勒\",\n        -12.975016593933105\n      ],\n      [\n        \"▁襲来\",\n        -12.975018501281738\n      ],\n      [\n        \"▁壊し\",\n        -12.975044250488281\n      ],\n      [\n        \"▁ものまね\",\n        -12.975278854370117\n      ],\n      [\n        \"▁渡来\",\n        -12.975293159484863\n      ],\n      [\n        \"編成\",\n        -12.97531795501709\n      ],\n      [\n        \"▁ほぐし\",\n        -12.975336074829102\n      ],\n      [\n        \"▁新婦\",\n        -12.97541332244873\n      ],\n      [\n        \"1901\",\n        -12.975472450256348\n      ],\n      [\n        \"▁スプレッド\",\n        -12.97552490234375\n      ],\n      [\n        \"▁藝術\",\n        -12.97552490234375\n      ],\n      [\n        \"▁エッグ\",\n        -12.975683212280273\n      ],\n      [\n        \"▁無理です\",\n        -12.97573184967041\n      ],\n      [\n        \"死後\",\n        -12.975793838500977\n      ],\n      [\n        \"携\",\n        -12.976014137268066\n      ],\n      [\n        \"暢\",\n        -12.976034164428711\n      ],\n      [\n        \"▁マイヤー\",\n        -12.976058959960938\n      ],\n      [\n        \"▁滝沢\",\n        -12.976099967956543\n      ],\n      [\n        \"ATH\",\n        -12.976127624511719\n      ],\n      [\n        \"博士\",\n        -12.976276397705078\n      ],\n      [\n        \"▁わがまま\",\n        -12.976292610168457\n      ],\n      [\n        \"普通に\",\n        -12.976400375366211\n      ],\n      [\n        \"hap\",\n        -12.97641658782959\n      ],\n      [\n        \"▁美浜\",\n        -12.976457595825195\n      ],\n      [\n        \"恐縮\",\n        -12.976510047912598\n      ],\n      [\n        \"▁傾き\",\n        -12.976513862609863\n      ],\n      [\n        \"▁体裁\",\n        -12.976594924926758\n      ],\n      [\n        \"▁要衝\",\n        -12.97663402557373\n      ],\n      [\n        \"チュラ\",\n        -12.976666450500488\n      ],\n      [\n        \"後年\",\n        -12.976702690124512\n      ],\n      [\n        \"▁坂田\",\n        -12.976704597473145\n      ],\n      [\n        \"▁ズー\",\n        -12.97671127319336\n      ],\n      [\n        \"Apache\",\n        -12.976801872253418\n      ],\n      [\n        \"▁ストライカー\",\n        -12.976801872253418\n      ],\n      [\n        \"▁ルーカス\",\n        -12.977005004882812\n      ],\n      [\n        \"偏\",\n        -12.977046012878418\n      ],\n      [\n        \"▁学研\",\n        -12.977084159851074\n      ],\n      [\n        \"▁延岡\",\n        -12.977121353149414\n      ],\n      [\n        \"▁複写\",\n        -12.977343559265137\n      ],\n      [\n        \"▁発泡\",\n        -12.977398872375488\n      ],\n      [\n        \"▁ドライヤー\",\n        -12.977447509765625\n      ],\n      [\n        \"AME\",\n        -12.977555274963379\n      ],\n      [\n        \"▁1859\",\n        -12.977688789367676\n      ],\n      [\n        \"▁つなげ\",\n        -12.977790832519531\n      ],\n      [\n        \"▁玉ねぎ\",\n        -12.977819442749023\n      ],\n      [\n        \"struct\",\n        -12.977887153625488\n      ],\n      [\n        \"▁随筆\",\n        -12.97807502746582\n      ],\n      [\n        \"raz\",\n        -12.978165626525879\n      ],\n      [\n        \"近距離\",\n        -12.978169441223145\n      ],\n      [\n        \"▁Micro\",\n        -12.97817611694336\n      ],\n      [\n        \"▁CAP\",\n        -12.978269577026367\n      ],\n      [\n        \"▁ヒューズ\",\n        -12.978296279907227\n      ],\n      [\n        \"▁手がけ\",\n        -12.978363990783691\n      ],\n      [\n        \"▁装い\",\n        -12.978364944458008\n      ],\n      [\n        \"シィ\",\n        -12.97840404510498\n      ],\n      [\n        \"▁幕内\",\n        -12.978452682495117\n      ],\n      [\n        \"▁摂り\",\n        -12.97857666015625\n      ],\n      [\n        \"▁筑前\",\n        -12.978588104248047\n      ],\n      [\n        \"メンタ\",\n        -12.978601455688477\n      ],\n      [\n        \"経緯\",\n        -12.978666305541992\n      ],\n      [\n        \"▁海抜\",\n        -12.978757858276367\n      ],\n      [\n        \"▁マツコ\",\n        -12.978833198547363\n      ],\n      [\n        \"▁ゲオルク\",\n        -12.978840827941895\n      ],\n      [\n        \"▁ヘルシンキ\",\n        -12.978840827941895\n      ],\n      [\n        \"▁ビギナー\",\n        -12.978846549987793\n      ],\n      [\n        \"凍\",\n        -12.978862762451172\n      ],\n      [\n        \"▁ヤギ\",\n        -12.979016304016113\n      ],\n      [\n        \"▁恥じ\",\n        -12.979100227355957\n      ],\n      [\n        \"▁結衣\",\n        -12.979133605957031\n      ],\n      [\n        \"4,000\",\n        -12.979297637939453\n      ],\n      [\n        \"▁切替\",\n        -12.979307174682617\n      ],\n      [\n        \"ogo\",\n        -12.979382514953613\n      ],\n      [\n        \"▁SBI\",\n        -12.979506492614746\n      ],\n      [\n        \"▁打楽器\",\n        -12.979708671569824\n      ],\n      [\n        \"▁飛ばして\",\n        -12.979713439941406\n      ],\n      [\n        \"▁マネージャ\",\n        -12.979754447937012\n      ],\n      [\n        \"▁こだわ\",\n        -12.979809761047363\n      ],\n      [\n        \"▁Information\",\n        -12.979863166809082\n      ],\n      [\n        \"▁励んで\",\n        -12.979864120483398\n      ],\n      [\n        \"▁襲う\",\n        -12.979869842529297\n      ],\n      [\n        \"▁エントランス\",\n        -12.979899406433105\n      ],\n      [\n        \"▁縦断\",\n        -12.98002815246582\n      ],\n      [\n        \"▁労組\",\n        -12.980182647705078\n      ],\n      [\n        \"シンプルな\",\n        -12.980222702026367\n      ],\n      [\n        \"▁チョーク\",\n        -12.98026180267334\n      ],\n      [\n        \"じけん\",\n        -12.98029899597168\n      ],\n      [\n        \"▁リニア\",\n        -12.980408668518066\n      ],\n      [\n        \"▁プチプラ\",\n        -12.98044490814209\n      ],\n      [\n        \"PAR\",\n        -12.980552673339844\n      ],\n      [\n        \"▁待った\",\n        -12.980613708496094\n      ],\n      [\n        \"▁刈り\",\n        -12.9806489944458\n      ],\n      [\n        \"▁羨まし\",\n        -12.980673789978027\n      ],\n      [\n        \"▁物販\",\n        -12.98077392578125\n      ],\n      [\n        \"▁三陸\",\n        -12.980775833129883\n      ],\n      [\n        \"▁担い手\",\n        -12.980830192565918\n      ],\n      [\n        \"▁ブート\",\n        -12.9808349609375\n      ],\n      [\n        \"▁クロード\",\n        -12.980905532836914\n      ],\n      [\n        \"▁里親\",\n        -12.980953216552734\n      ],\n      [\n        \"▁Image\",\n        -12.980972290039062\n      ],\n      [\n        \"▁嫌う\",\n        -12.980984687805176\n      ],\n      [\n        \"▁堕落\",\n        -12.9811429977417\n      ],\n      [\n        \"女の子\",\n        -12.981191635131836\n      ],\n      [\n        \"予想\",\n        -12.981237411499023\n      ],\n      [\n        \"風俗\",\n        -12.981353759765625\n      ],\n      [\n        \"▁洋風\",\n        -12.981422424316406\n      ],\n      [\n        \"▁シンシナティ\",\n        -12.98165512084961\n      ],\n      [\n        \"サウスカロライナ\",\n        -12.98165512084961\n      ],\n      [\n        \"腎\",\n        -12.981706619262695\n      ],\n      [\n        \"▁オルガ\",\n        -12.981842041015625\n      ],\n      [\n        \"▁疫病\",\n        -12.981910705566406\n      ],\n      [\n        \"▁ハイテク\",\n        -12.981911659240723\n      ],\n      [\n        \"▁現像\",\n        -12.982132911682129\n      ],\n      [\n        \"▁効き\",\n        -12.98226547241211\n      ],\n      [\n        \"▁技士\",\n        -12.982321739196777\n      ],\n      [\n        \"til\",\n        -12.982416152954102\n      ],\n      [\n        \"▁アウトプット\",\n        -12.982423782348633\n      ],\n      [\n        \"▁賀茂\",\n        -12.98242473602295\n      ],\n      [\n        \"vil\",\n        -12.982438087463379\n      ],\n      [\n        \"▁踏み入れ\",\n        -12.982545852661133\n      ],\n      [\n        \"意識\",\n        -12.982561111450195\n      ],\n      [\n        \"▁喋り\",\n        -12.982569694519043\n      ],\n      [\n        \"▁義務づけ\",\n        -12.982587814331055\n      ],\n      [\n        \"喩\",\n        -12.982641220092773\n      ],\n      [\n        \"EVER\",\n        -12.982813835144043\n      ],\n      [\n        \"▁特約\",\n        -12.982820510864258\n      ],\n      [\n        \"UMI\",\n        -12.98310375213623\n      ],\n      [\n        \"▁ジーニアス\",\n        -12.983193397521973\n      ],\n      [\n        \"▁混成\",\n        -12.983455657958984\n      ],\n      [\n        \"▁まとまって\",\n        -12.983478546142578\n      ],\n      [\n        \"▁深谷\",\n        -12.983481407165527\n      ],\n      [\n        \"450\",\n        -12.983527183532715\n      ],\n      [\n        \"▁しあわせ\",\n        -12.9837064743042\n      ],\n      [\n        \"nh\",\n        -12.983785629272461\n      ],\n      [\n        \"篭\",\n        -12.983963012695312\n      ],\n      [\n        \"▁持ち味\",\n        -12.984126091003418\n      ],\n      [\n        \"▁スターター\",\n        -12.984143257141113\n      ],\n      [\n        \"▁ブラインド\",\n        -12.984169960021973\n      ],\n      [\n        \"▁フェンダー\",\n        -12.984620094299316\n      ],\n      [\n        \"▁score\",\n        -12.984655380249023\n      ],\n      [\n        \"Torrent\",\n        -12.984733581542969\n      ],\n      [\n        \"▁アンソロジー\",\n        -12.984733581542969\n      ],\n      [\n        \"wood\",\n        -12.98473834991455\n      ],\n      [\n        \"▁ゾイド\",\n        -12.9847993850708\n      ],\n      [\n        \"ランジェ\",\n        -12.98481559753418\n      ],\n      [\n        \"▁難点\",\n        -12.984832763671875\n      ],\n      [\n        \"▁離職\",\n        -12.984963417053223\n      ],\n      [\n        \"▁心霊\",\n        -12.985004425048828\n      ],\n      [\n        \"▁山荘\",\n        -12.985225677490234\n      ],\n      [\n        \"釣り\",\n        -12.985443115234375\n      ],\n      [\n        \"▁扶桑\",\n        -12.985505104064941\n      ],\n      [\n        \"▁Note\",\n        -12.985522270202637\n      ],\n      [\n        \"▁情景\",\n        -12.985577583312988\n      ],\n      [\n        \"Edit\",\n        -12.985647201538086\n      ],\n      [\n        \"▁卓上\",\n        -12.98568058013916\n      ],\n      [\n        \"级\",\n        -12.985762596130371\n      ],\n      [\n        \"▁必需\",\n        -12.985767364501953\n      ],\n      [\n        \"▁Ever\",\n        -12.985877990722656\n      ],\n      [\n        \"大きく\",\n        -12.985883712768555\n      ],\n      [\n        \"▁摘発\",\n        -12.9860200881958\n      ],\n      [\n        \"uo\",\n        -12.986181259155273\n      ],\n      [\n        \"▁告訴\",\n        -12.98627758026123\n      ],\n      [\n        \"▁売場\",\n        -12.986355781555176\n      ],\n      [\n        \"▁揃える\",\n        -12.986956596374512\n      ],\n      [\n        \"▁(^-^)\",\n        -12.987049102783203\n      ],\n      [\n        \"▁わりと\",\n        -12.98707389831543\n      ],\n      [\n        \"▁ハープ\",\n        -12.987091064453125\n      ],\n      [\n        \"競馬\",\n        -12.987237930297852\n      ],\n      [\n        \"▁溶かし\",\n        -12.987298011779785\n      ],\n      [\n        \"▁取り下げ\",\n        -12.987334251403809\n      ],\n      [\n        \"▁高裁\",\n        -12.987340927124023\n      ],\n      [\n        \"▁平壌\",\n        -12.987347602844238\n      ],\n      [\n        \"蒸\",\n        -12.987401008605957\n      ],\n      [\n        \"——\",\n        -12.98741340637207\n      ],\n      [\n        \"lac\",\n        -12.987458229064941\n      ],\n      [\n        \"▁救った\",\n        -12.987548828125\n      ],\n      [\n        \"▁カウボーイ\",\n        -12.987579345703125\n      ],\n      [\n        \"irt\",\n        -12.987593650817871\n      ],\n      [\n        \"▁Azure\",\n        -12.987822532653809\n      ],\n      [\n        \"▁真摯に\",\n        -12.987822532653809\n      ],\n      [\n        \"楽しい\",\n        -12.987991333007812\n      ],\n      [\n        \"▁ダクト\",\n        -12.98808765411377\n      ],\n      [\n        \"ハタ\",\n        -12.988375663757324\n      ],\n      [\n        \"駿\",\n        -12.988398551940918\n      ],\n      [\n        \"▁スライス\",\n        -12.988399505615234\n      ],\n      [\n        \"▁養う\",\n        -12.98853874206543\n      ],\n      [\n        \"基督教\",\n        -12.988595962524414\n      ],\n      [\n        \"▁ブランチ\",\n        -12.988801002502441\n      ],\n      [\n        \"▁夜勤\",\n        -12.98902416229248\n      ],\n      [\n        \"cat\",\n        -12.989089012145996\n      ],\n      [\n        \"▁二階堂\",\n        -12.98911190032959\n      ],\n      [\n        \"認知\",\n        -12.98940372467041\n      ],\n      [\n        \"▁ひかる\",\n        -12.989456176757812\n      ],\n      [\n        \"ヒェン\",\n        -12.989481925964355\n      ],\n      [\n        \"▁追いや\",\n        -12.989532470703125\n      ],\n      [\n        \"▁取りまとめ\",\n        -12.989729881286621\n      ],\n      [\n        \"ユダヤ\",\n        -12.98974323272705\n      ],\n      [\n        \"▁ばか\",\n        -12.989855766296387\n      ],\n      [\n        \"▁網走\",\n        -12.98994255065918\n      ],\n      [\n        \"▁研鑽\",\n        -12.99040412902832\n      ],\n      [\n        \"▁異国\",\n        -12.990455627441406\n      ],\n      [\n        \"従前\",\n        -12.990530014038086\n      ],\n      [\n        \"▁運勢\",\n        -12.990610122680664\n      ],\n      [\n        \"滲\",\n        -12.99066162109375\n      ],\n      [\n        \"▁見習い\",\n        -12.990662574768066\n      ],\n      [\n        \"▁狩野\",\n        -12.990981101989746\n      ],\n      [\n        \"▁本誌\",\n        -12.99108600616455\n      ],\n      [\n        \"▁武雄\",\n        -12.991127967834473\n      ],\n      [\n        \"▁移築\",\n        -12.991227149963379\n      ],\n      [\n        \"▁悪口\",\n        -12.99138355255127\n      ],\n      [\n        \"▁浩二\",\n        -12.9913911819458\n      ],\n      [\n        \"OV\",\n        -12.991476058959961\n      ],\n      [\n        \"▁打開\",\n        -12.991477012634277\n      ],\n      [\n        \"▁原価\",\n        -12.991558074951172\n      ],\n      [\n        \"▁おおさか\",\n        -12.991701126098633\n      ],\n      [\n        \"▁専売\",\n        -12.991790771484375\n      ],\n      [\n        \"▁憲兵\",\n        -12.992033958435059\n      ],\n      [\n        \"ヴィクト\",\n        -12.992218017578125\n      ],\n      [\n        \"▁レジスタ\",\n        -12.99232292175293\n      ],\n      [\n        \"▁アンドレア\",\n        -12.992379188537598\n      ],\n      [\n        \"▁淡々と\",\n        -12.992490768432617\n      ],\n      [\n        \"▁ディック\",\n        -12.992574691772461\n      ],\n      [\n        \"速力\",\n        -12.992704391479492\n      ],\n      [\n        \"▁押し上げ\",\n        -12.992924690246582\n      ],\n      [\n        \"▁難病\",\n        -12.99295711517334\n      ],\n      [\n        \"▁HTTP\",\n        -12.993001937866211\n      ],\n      [\n        \"▁傷つける\",\n        -12.993228912353516\n      ],\n      [\n        \"▁空洞\",\n        -12.993229866027832\n      ],\n      [\n        \"▁巧みに\",\n        -12.993249893188477\n      ],\n      [\n        \"▁試乗\",\n        -12.993349075317383\n      ],\n      [\n        \"▁成約\",\n        -12.993355751037598\n      ],\n      [\n        \"▁養父\",\n        -12.993420600891113\n      ],\n      [\n        \"▁アディダス\",\n        -12.993509292602539\n      ],\n      [\n        \"▁子連れ\",\n        -12.993509292602539\n      ],\n      [\n        \"ピーター\",\n        -12.993657112121582\n      ],\n      [\n        \"スロット\",\n        -12.99371337890625\n      ],\n      [\n        \"ODE\",\n        -12.993766784667969\n      ],\n      [\n        \"▁VII\",\n        -12.993829727172852\n      ],\n      [\n        \"▁不当な\",\n        -12.993849754333496\n      ],\n      [\n        \"▁ガリア\",\n        -12.993959426879883\n      ],\n      [\n        \"諾\",\n        -12.993988990783691\n      ],\n      [\n        \"▁たどり着いた\",\n        -12.994028091430664\n      ],\n      [\n        \"▁混じって\",\n        -12.994028091430664\n      ],\n      [\n        \"▁Sports\",\n        -12.994032859802246\n      ],\n      [\n        \"▁マルシェ\",\n        -12.994096755981445\n      ],\n      [\n        \"▁網膜\",\n        -12.9942045211792\n      ],\n      [\n        \"(*^\",\n        -12.994248390197754\n      ],\n      [\n        \"トゥン\",\n        -12.994449615478516\n      ],\n      [\n        \"▁漬物\",\n        -12.994548797607422\n      ],\n      [\n        \"▁放ってお\",\n        -12.994566917419434\n      ],\n      [\n        \"▁おむつ\",\n        -12.994733810424805\n      ],\n      [\n        \"▁思い浮か\",\n        -12.994784355163574\n      ],\n      [\n        \"▁ルイヴィトン\",\n        -12.994806289672852\n      ],\n      [\n        \"▁ボウリング\",\n        -12.9948091506958\n      ],\n      [\n        \"▁スケベ\",\n        -12.994823455810547\n      ],\n      [\n        \"▁さかのぼる\",\n        -12.994842529296875\n      ],\n      [\n        \"ぜんぜん\",\n        -12.994893074035645\n      ],\n      [\n        \"▁参議\",\n        -12.994929313659668\n      ],\n      [\n        \"ORN\",\n        -12.99494457244873\n      ],\n      [\n        \"596\",\n        -12.995020866394043\n      ],\n      [\n        \"畏\",\n        -12.995063781738281\n      ],\n      [\n        \"▁監事\",\n        -12.995068550109863\n      ],\n      [\n        \"▁GIF\",\n        -12.995165824890137\n      ],\n      [\n        \"餌\",\n        -12.995227813720703\n      ],\n      [\n        \"print\",\n        -12.995445251464844\n      ],\n      [\n        \"▁便器\",\n        -12.995498657226562\n      ],\n      [\n        \"ไ\",\n        -12.995585441589355\n      ],\n      [\n        \"▁レクチャー\",\n        -12.995586395263672\n      ],\n      [\n        \"▁論じた\",\n        -12.995765686035156\n      ],\n      [\n        \"▁断然\",\n        -12.995782852172852\n      ],\n      [\n        \"忘れ\",\n        -12.995782852172852\n      ],\n      [\n        \"物理\",\n        -12.995784759521484\n      ],\n      [\n        \"北米\",\n        -12.995810508728027\n      ],\n      [\n        \"スワフ\",\n        -12.995841026306152\n      ],\n      [\n        \"▁しゅん\",\n        -12.99588680267334\n      ],\n      [\n        \"▁形容詞\",\n        -12.996118545532227\n      ],\n      [\n        \"▁特捜\",\n        -12.996648788452148\n      ],\n      [\n        \"▁夕刊\",\n        -12.99673843383789\n      ],\n      [\n        \"matic\",\n        -12.996758460998535\n      ],\n      [\n        \"▁杉本\",\n        -12.996868133544922\n      ],\n      [\n        \"▁桃太郎\",\n        -12.996915817260742\n      ],\n      [\n        \"▁天堂\",\n        -12.997142791748047\n      ],\n      [\n        \"アルデヒド\",\n        -12.99714469909668\n      ],\n      [\n        \"クリーム\",\n        -12.997444152832031\n      ],\n      [\n        \"マイクロ\",\n        -12.997517585754395\n      ],\n      [\n        \"歯科\",\n        -12.997567176818848\n      ],\n      [\n        \"▁オブジェ\",\n        -12.997705459594727\n      ],\n      [\n        \"蘇\",\n        -12.997763633728027\n      ],\n      [\n        \"hol\",\n        -12.997865676879883\n      ],\n      [\n        \"▁萎縮\",\n        -12.997925758361816\n      ],\n      [\n        \"vy\",\n        -12.997964859008789\n      ],\n      [\n        \"▁問答\",\n        -12.997991561889648\n      ],\n      [\n        \"小型\",\n        -12.997992515563965\n      ],\n      [\n        \"▁行えば\",\n        -12.998010635375977\n      ],\n      [\n        \"▁段々\",\n        -12.998026847839355\n      ],\n      [\n        \"▁バースデー\",\n        -12.998209953308105\n      ],\n      [\n        \"▁パーソン\",\n        -12.99832534790039\n      ],\n      [\n        \"▁さっさと\",\n        -12.998446464538574\n      ],\n      [\n        \"▁ボロボロ\",\n        -12.998452186584473\n      ],\n      [\n        \"▁襲って\",\n        -12.998462677001953\n      ],\n      [\n        \"ゾール\",\n        -12.9986572265625\n      ],\n      [\n        \"scape\",\n        -12.998772621154785\n      ],\n      [\n        \"譚\",\n        -12.998902320861816\n      ],\n      [\n        \"▁つばさ\",\n        -12.99898624420166\n      ],\n      [\n        \"デット\",\n        -12.999051094055176\n      ],\n      [\n        \"▁真偽\",\n        -12.999078750610352\n      ],\n      [\n        \"▁正方形\",\n        -12.999228477478027\n      ],\n      [\n        \"▁着心地\",\n        -12.999228477478027\n      ],\n      [\n        \"叢\",\n        -12.999228477478027\n      ],\n      [\n        \"▁イエズ\",\n        -12.999232292175293\n      ],\n      [\n        \"AIL\",\n        -12.999234199523926\n      ],\n      [\n        \"▁辰巳\",\n        -12.999241828918457\n      ],\n      [\n        \"尋\",\n        -12.99943733215332\n      ],\n      [\n        \"褐\",\n        -12.999488830566406\n      ],\n      [\n        \"▁Kids\",\n        -12.999505043029785\n      ],\n      [\n        \"▁summer\",\n        -12.999750137329102\n      ],\n      [\n        \"▁疑似\",\n        -12.999770164489746\n      ],\n      [\n        \"▁廃校\",\n        -12.999837875366211\n      ],\n      [\n        \"着陸\",\n        -12.999917030334473\n      ],\n      [\n        \"珪\",\n        -13.00001049041748\n      ],\n      [\n        \"▁暗記\",\n        -13.000012397766113\n      ],\n      [\n        \"ific\",\n        -13.000075340270996\n      ],\n      [\n        \"▁十和田\",\n        -13.000082015991211\n      ],\n      [\n        \"▁会津若松\",\n        -13.000271797180176\n      ],\n      [\n        \"んどう\",\n        -13.00029182434082\n      ],\n      [\n        \"宿泊\",\n        -13.00030517578125\n      ],\n      [\n        \"▁Order\",\n        -13.000316619873047\n      ],\n      [\n        \"▁過ち\",\n        -13.000323295593262\n      ],\n      [\n        \"▁通年\",\n        -13.00047492980957\n      ],\n      [\n        \"▁チャーチル\",\n        -13.000534057617188\n      ],\n      [\n        \"▁フリル\",\n        -13.000677108764648\n      ],\n      [\n        \"靭\",\n        -13.000794410705566\n      ],\n      [\n        \"▁オースティン\",\n        -13.00087833404541\n      ],\n      [\n        \"ズィー\",\n        -13.000996589660645\n      ],\n      [\n        \"混血\",\n        -13.001035690307617\n      ],\n      [\n        \"ฏ\",\n        -13.001055717468262\n      ],\n      [\n        \"▁sca\",\n        -13.001129150390625\n      ],\n      [\n        \"▁リピーター\",\n        -13.001199722290039\n      ],\n      [\n        \"▁東岸\",\n        -13.001205444335938\n      ],\n      [\n        \"▁ソムリエ\",\n        -13.00131607055664\n      ],\n      [\n        \"▁カーナビ\",\n        -13.001521110534668\n      ],\n      [\n        \"▁ニーチェ\",\n        -13.001548767089844\n      ],\n      [\n        \"▁North\",\n        -13.00158405303955\n      ],\n      [\n        \"▁今更\",\n        -13.001585006713867\n      ],\n      [\n        \"▁SKE\",\n        -13.001694679260254\n      ],\n      [\n        \"▁エキストラ\",\n        -13.001818656921387\n      ],\n      [\n        \"▁現われ\",\n        -13.002047538757324\n      ],\n      [\n        \"▁アクセサリ\",\n        -13.002076148986816\n      ],\n      [\n        \"▁ヴァリ\",\n        -13.002114295959473\n      ],\n      [\n        \"▁遅刻\",\n        -13.002135276794434\n      ],\n      [\n        \"▁イントロ\",\n        -13.002175331115723\n      ],\n      [\n        \"▁絡む\",\n        -13.002364158630371\n      ],\n      [\n        \"rian\",\n        -13.002370834350586\n      ],\n      [\n        \"▁密教\",\n        -13.002435684204102\n      ],\n      [\n        \"▁怒った\",\n        -13.00243854522705\n      ],\n      [\n        \"▁モーガン\",\n        -13.002492904663086\n      ],\n      [\n        \"▁ありのまま\",\n        -13.002623558044434\n      ],\n      [\n        \"▁アンバサダー\",\n        -13.002885818481445\n      ],\n      [\n        \"♬\",\n        -13.002885818481445\n      ],\n      [\n        \"▁TPP\",\n        -13.002888679504395\n      ],\n      [\n        \"▁AMD\",\n        -13.003000259399414\n      ],\n      [\n        \"▁更年期\",\n        -13.00314712524414\n      ],\n      [\n        \"芙\",\n        -13.00314712524414\n      ],\n      [\n        \"▁自民\",\n        -13.003190040588379\n      ],\n      [\n        \"ピーク\",\n        -13.003244400024414\n      ],\n      [\n        \"▁果汁\",\n        -13.00343132019043\n      ],\n      [\n        \"紹介\",\n        -13.003434181213379\n      ],\n      [\n        \"▁吐き\",\n        -13.003478050231934\n      ],\n      [\n        \"▁叶う\",\n        -13.003575325012207\n      ],\n      [\n        \"凡\",\n        -13.003581047058105\n      ],\n      [\n        \"▁Year\",\n        -13.00365924835205\n      ],\n      [\n        \"壽\",\n        -13.003669738769531\n      ],\n      [\n        \"▁がっかり\",\n        -13.003768920898438\n      ],\n      [\n        \"▁税額\",\n        -13.003790855407715\n      ],\n      [\n        \"▁アラバマ\",\n        -13.004194259643555\n      ],\n      [\n        \"古典\",\n        -13.004231452941895\n      ],\n      [\n        \"ギリシャ\",\n        -13.00429630279541\n      ],\n      [\n        \"▁固い\",\n        -13.004301071166992\n      ],\n      [\n        \"▁厳密な\",\n        -13.004456520080566\n      ],\n      [\n        \"▁有り難\",\n        -13.004555702209473\n      ],\n      [\n        \"▁論議\",\n        -13.004594802856445\n      ],\n      [\n        \"hal\",\n        -13.00475025177002\n      ],\n      [\n        \"▁醍醐\",\n        -13.00495719909668\n      ],\n      [\n        \"▁謎解き\",\n        -13.00498104095459\n      ],\n      [\n        \"罷免\",\n        -13.004982948303223\n      ],\n      [\n        \"▁バッチリ\",\n        -13.005041122436523\n      ],\n      [\n        \"NBA\",\n        -13.005081176757812\n      ],\n      [\n        \"OTH\",\n        -13.005130767822266\n      ],\n      [\n        \"▁根強い\",\n        -13.00516414642334\n      ],\n      [\n        \"▁吹いて\",\n        -13.005253791809082\n      ],\n      [\n        \"▁酷く\",\n        -13.005309104919434\n      ],\n      [\n        \"採\",\n        -13.005424499511719\n      ],\n      [\n        \"シャール\",\n        -13.005637168884277\n      ],\n      [\n        \"栃\",\n        -13.00563907623291\n      ],\n      [\n        \"部活\",\n        -13.005712509155273\n      ],\n      [\n        \"▁いっそう\",\n        -13.005716323852539\n      ],\n      [\n        \"▁メトロポリタン\",\n        -13.005767822265625\n      ],\n      [\n        \"▁酷似\",\n        -13.005767822265625\n      ],\n      [\n        \"當\",\n        -13.005767822265625\n      ],\n      [\n        \"▁モリス\",\n        -13.005768775939941\n      ],\n      [\n        \"▁Check\",\n        -13.005813598632812\n      ],\n      [\n        \"wiki\",\n        -13.005864143371582\n      ],\n      [\n        \"▁ポジティブな\",\n        -13.005916595458984\n      ],\n      [\n        \"ICHI\",\n        -13.006024360656738\n      ],\n      [\n        \"馴\",\n        -13.006204605102539\n      ],\n      [\n        \"トランプ\",\n        -13.006243705749512\n      ],\n      [\n        \"acc\",\n        -13.006285667419434\n      ],\n      [\n        \"▁spring\",\n        -13.00631046295166\n      ],\n      [\n        \"其\",\n        -13.006537437438965\n      ],\n      [\n        \"▁目覚まし\",\n        -13.006573677062988\n      ],\n      [\n        \"EIT\",\n        -13.006641387939453\n      ],\n      [\n        \"▁謙虚\",\n        -13.00682544708252\n      ],\n      [\n        \"▁強大な\",\n        -13.007086753845215\n      ],\n      [\n        \"▁MASTER\",\n        -13.007107734680176\n      ],\n      [\n        \"▁ワースト\",\n        -13.007173538208008\n      ],\n      [\n        \"▁埴輪\",\n        -13.007344245910645\n      ],\n      [\n        \"▁project\",\n        -13.007366180419922\n      ],\n      [\n        \"▁こなせる\",\n        -13.007630348205566\n      ],\n      [\n        \"アンドロ\",\n        -13.007704734802246\n      ],\n      [\n        \"享保\",\n        -13.007723808288574\n      ],\n      [\n        \"▁東邦\",\n        -13.007850646972656\n      ],\n      [\n        \"逃げ\",\n        -13.007946014404297\n      ],\n      [\n        \"▁不意\",\n        -13.008007049560547\n      ],\n      [\n        \"▁アーマー\",\n        -13.008025169372559\n      ],\n      [\n        \"▁勇敢\",\n        -13.00814437866211\n      ],\n      [\n        \"MOS\",\n        -13.008173942565918\n      ],\n      [\n        \"char\",\n        -13.008261680603027\n      ],\n      [\n        \"▁桃花\",\n        -13.008289337158203\n      ],\n      [\n        \"▁sex\",\n        -13.00836181640625\n      ],\n      [\n        \"楢\",\n        -13.00839614868164\n      ],\n      [\n        \"▁由利\",\n        -13.00844669342041\n      ],\n      [\n        \"▁Kiss\",\n        -13.008661270141602\n      ],\n      [\n        \"▁Control\",\n        -13.008666038513184\n      ],\n      [\n        \"OSHI\",\n        -13.008715629577637\n      ],\n      [\n        \"▁吹雪\",\n        -13.008723258972168\n      ],\n      [\n        \"kh\",\n        -13.008914947509766\n      ],\n      [\n        \"▁因む\",\n        -13.008919715881348\n      ],\n      [\n        \"瓦\",\n        -13.008925437927246\n      ],\n      [\n        \"而\",\n        -13.008962631225586\n      ],\n      [\n        \"▁リネン\",\n        -13.00899600982666\n      ],\n      [\n        \"硬\",\n        -13.009072303771973\n      ],\n      [\n        \"▁文様\",\n        -13.009073257446289\n      ],\n      [\n        \"予定\",\n        -13.009111404418945\n      ],\n      [\n        \"▁執拗\",\n        -13.00918960571289\n      ],\n      [\n        \"▁カフェイン\",\n        -13.009382247924805\n      ],\n      [\n        \"▁負け越し\",\n        -13.009543418884277\n      ],\n      [\n        \"▁償却\",\n        -13.009712219238281\n      ],\n      [\n        \"▁水漏れ\",\n        -13.009712219238281\n      ],\n      [\n        \"▁繋いで\",\n        -13.009712219238281\n      ],\n      [\n        \"mission\",\n        -13.009714126586914\n      ],\n      [\n        \"▁合算\",\n        -13.010047912597656\n      ],\n      [\n        \"確認\",\n        -13.010068893432617\n      ],\n      [\n        \"▁目隠し\",\n        -13.01024055480957\n      ],\n      [\n        \"▁健太郎\",\n        -13.01025390625\n      ],\n      [\n        \"兎\",\n        -13.010265350341797\n      ],\n      [\n        \"んかん\",\n        -13.010302543640137\n      ],\n      [\n        \"IAN\",\n        -13.010333061218262\n      ],\n      [\n        \"▁戻した\",\n        -13.010429382324219\n      ],\n      [\n        \"国連\",\n        -13.010488510131836\n      ],\n      [\n        \"▁フォルクスワーゲン\",\n        -13.010502815246582\n      ],\n      [\n        \"▁エルンスト\",\n        -13.010503768920898\n      ],\n      [\n        \"▁別表\",\n        -13.010506629943848\n      ],\n      [\n        \"▁労使\",\n        -13.010560035705566\n      ],\n      [\n        \"cher\",\n        -13.010621070861816\n      ],\n      [\n        \"モーニング\",\n        -13.0106840133667\n      ],\n      [\n        \"▁むつ\",\n        -13.010736465454102\n      ],\n      [\n        \"室町\",\n        -13.01081657409668\n      ],\n      [\n        \"▁カットソー\",\n        -13.010884284973145\n      ],\n      [\n        \"みなさま\",\n        -13.011062622070312\n      ],\n      [\n        \"偽\",\n        -13.01120376586914\n      ],\n      [\n        \"ないしは\",\n        -13.011321067810059\n      ],\n      [\n        \"▁すみれ\",\n        -13.011371612548828\n      ],\n      [\n        \"状態\",\n        -13.011489868164062\n      ],\n      [\n        \"▁新編\",\n        -13.011507987976074\n      ],\n      [\n        \"▁海老名\",\n        -13.011551856994629\n      ],\n      [\n        \"▁ハッシュタグ\",\n        -13.011567115783691\n      ],\n      [\n        \"▁お好み焼き\",\n        -13.011573791503906\n      ],\n      [\n        \"▁para\",\n        -13.011587142944336\n      ],\n      [\n        \"▁賢治\",\n        -13.011690139770508\n      ],\n      [\n        \"▁めざす\",\n        -13.011821746826172\n      ],\n      [\n        \"▁組み合わさ\",\n        -13.011821746826172\n      ],\n      [\n        \"▁猛暑\",\n        -13.011850357055664\n      ],\n      [\n        \"▁扮し\",\n        -13.011886596679688\n      ],\n      [\n        \"▁section\",\n        -13.01193618774414\n      ],\n      [\n        \"キュウ\",\n        -13.01209545135498\n      ],\n      [\n        \"皆さま\",\n        -13.012142181396484\n      ],\n      [\n        \"▁異論\",\n        -13.012166976928711\n      ],\n      [\n        \"▁減税\",\n        -13.012239456176758\n      ],\n      [\n        \"▁銀貨\",\n        -13.012242317199707\n      ],\n      [\n        \"而上\",\n        -13.012247085571289\n      ],\n      [\n        \"table\",\n        -13.012324333190918\n      ],\n      [\n        \"▁相鉄\",\n        -13.01235294342041\n      ],\n      [\n        \"将軍\",\n        -13.012415885925293\n      ],\n      [\n        \"▁放電\",\n        -13.012476921081543\n      ],\n      [\n        \"▁励ま\",\n        -13.012508392333984\n      ],\n      [\n        \"▁ニュルンベルク\",\n        -13.012614250183105\n      ],\n      [\n        \"city\",\n        -13.012743949890137\n      ],\n      [\n        \"▁好物\",\n        -13.0128755569458\n      ],\n      [\n        \"λ\",\n        -13.012882232666016\n      ],\n      [\n        \"▁二十四\",\n        -13.013072967529297\n      ],\n      [\n        \"▁ハプニング\",\n        -13.013407707214355\n      ],\n      [\n        \"▁靖国\",\n        -13.01341438293457\n      ],\n      [\n        \"駐\",\n        -13.013623237609863\n      ],\n      [\n        \"▁author\",\n        -13.013668060302734\n      ],\n      [\n        \"▁劇作家\",\n        -13.01370620727539\n      ],\n      [\n        \"ロボット\",\n        -13.013724327087402\n      ],\n      [\n        \"▁聞こえた\",\n        -13.01382827758789\n      ],\n      [\n        \"▁実話\",\n        -13.013875007629395\n      ],\n      [\n        \"É\",\n        -13.013936042785645\n      ],\n      [\n        \"▁三菱電機\",\n        -13.013936996459961\n      ],\n      [\n        \"▁不都合\",\n        -13.013936996459961\n      ],\n      [\n        \"▁色紙\",\n        -13.014135360717773\n      ],\n      [\n        \"▁揖斐\",\n        -13.014201164245605\n      ],\n      [\n        \"▁菅野\",\n        -13.014223098754883\n      ],\n      [\n        \"太夫\",\n        -13.014378547668457\n      ],\n      [\n        \"▁嫌気\",\n        -13.014423370361328\n      ],\n      [\n        \"謹慎\",\n        -13.0144681930542\n      ],\n      [\n        \"▁鋭く\",\n        -13.014505386352539\n      ],\n      [\n        \"翻訳\",\n        -13.0145263671875\n      ],\n      [\n        \"於\",\n        -13.014548301696777\n      ],\n      [\n        \"RING\",\n        -13.014647483825684\n      ],\n      [\n        \"▁キャビネット\",\n        -13.014730453491211\n      ],\n      [\n        \"どういう\",\n        -13.014792442321777\n      ],\n      [\n        \"▁発せ\",\n        -13.014795303344727\n      ],\n      [\n        \"▁てんかん\",\n        -13.014887809753418\n      ],\n      [\n        \"▁溜まり\",\n        -13.014996528625488\n      ],\n      [\n        \"▁容易な\",\n        -13.015092849731445\n      ],\n      [\n        \"▁眠気\",\n        -13.015268325805664\n      ],\n      [\n        \"▁難関\",\n        -13.015271186828613\n      ],\n      [\n        \"免费\",\n        -13.015310287475586\n      ],\n      [\n        \"▁JCB\",\n        -13.015380859375\n      ],\n      [\n        \"▁夕張\",\n        -13.015385627746582\n      ],\n      [\n        \"▁中高年\",\n        -13.015459060668945\n      ],\n      [\n        \"▁円錐\",\n        -13.015460014343262\n      ],\n      [\n        \"▁Para\",\n        -13.01546859741211\n      ],\n      [\n        \"災害\",\n        -13.015640258789062\n      ],\n      [\n        \"▁言い回し\",\n        -13.0160551071167\n      ],\n      [\n        \"蓬\",\n        -13.0160551071167\n      ],\n      [\n        \"▁フライヤー\",\n        -13.016261100769043\n      ],\n      [\n        \"▁バーコード\",\n        -13.016324996948242\n      ],\n      [\n        \"▁京極\",\n        -13.01638412475586\n      ],\n      [\n        \"▁別居\",\n        -13.016487121582031\n      ],\n      [\n        \"▁マダム\",\n        -13.01655101776123\n      ],\n      [\n        \"▁潰瘍\",\n        -13.016586303710938\n      ],\n      [\n        \"▁Street\",\n        -13.016587257385254\n      ],\n      [\n        \"chen\",\n        -13.016697883605957\n      ],\n      [\n        \"map\",\n        -13.016763687133789\n      ],\n      [\n        \"音声\",\n        -13.016871452331543\n      ],\n      [\n        \"▁着付け\",\n        -13.016873359680176\n      ],\n      [\n        \"▁Wind\",\n        -13.01710033416748\n      ],\n      [\n        \"▁プエルトリコ\",\n        -13.017382621765137\n      ],\n      [\n        \"▁吸着\",\n        -13.017550468444824\n      ],\n      [\n        \"▁平気で\",\n        -13.017858505249023\n      ],\n      [\n        \"▁便所\",\n        -13.017877578735352\n      ],\n      [\n        \"▁タブー\",\n        -13.017900466918945\n      ],\n      [\n        \"▁出汁\",\n        -13.017949104309082\n      ],\n      [\n        \"▁バークレー\",\n        -13.01796817779541\n      ],\n      [\n        \"▁臨み\",\n        -13.018067359924316\n      ],\n      [\n        \"▁列強\",\n        -13.018193244934082\n      ],\n      [\n        \"▁レディー\",\n        -13.018462181091309\n      ],\n      [\n        \"▁早世\",\n        -13.01870059967041\n      ],\n      [\n        \"梯\",\n        -13.018707275390625\n      ],\n      [\n        \"▁不可欠です\",\n        -13.01871395111084\n      ],\n      [\n        \"Ω\",\n        -13.018976211547852\n      ],\n      [\n        \"▁HDMI\",\n        -13.01904296875\n      ],\n      [\n        \"杖\",\n        -13.019074440002441\n      ],\n      [\n        \"提供\",\n        -13.019092559814453\n      ],\n      [\n        \"▁腹筋\",\n        -13.019207000732422\n      ],\n      [\n        \"▁Institute\",\n        -13.019242286682129\n      ],\n      [\n        \"▁ブダペスト\",\n        -13.019242286682129\n      ],\n      [\n        \"采\",\n        -13.019242286682129\n      ],\n      [\n        \"格安\",\n        -13.019329071044922\n      ],\n      [\n        \"最低\",\n        -13.01943588256836\n      ],\n      [\n        \"皇帝\",\n        -13.019465446472168\n      ],\n      [\n        \"▁レンダリング\",\n        -13.019508361816406\n      ],\n      [\n        \"▁節句\",\n        -13.019516944885254\n      ],\n      [\n        \"ader\",\n        -13.019554138183594\n      ],\n      [\n        \"▁境遇\",\n        -13.019561767578125\n      ],\n      [\n        \"▁ブラザース\",\n        -13.019774436950684\n      ],\n      [\n        \"▁疼痛\",\n        -13.019774436950684\n      ],\n      [\n        \"媚\",\n        -13.019774436950684\n      ],\n      [\n        \"▁不可能です\",\n        -13.01977825164795\n      ],\n      [\n        \"合併\",\n        -13.01999568939209\n      ],\n      [\n        \"ケ丘\",\n        -13.020000457763672\n      ],\n      [\n        \"跋\",\n        -13.020040512084961\n      ],\n      [\n        \"▁食塩\",\n        -13.020088195800781\n      ],\n      [\n        \"▁タモリ\",\n        -13.020271301269531\n      ],\n      [\n        \"▁マルセイユ\",\n        -13.020306587219238\n      ],\n      [\n        \"▁飼う\",\n        -13.020548820495605\n      ],\n      [\n        \"▁封建\",\n        -13.020613670349121\n      ],\n      [\n        \"▁脱水\",\n        -13.02070140838623\n      ],\n      [\n        \"▁加担\",\n        -13.020862579345703\n      ],\n      [\n        \"▁桜花\",\n        -13.020944595336914\n      ],\n      [\n        \"▁持ち出し\",\n        -13.020999908447266\n      ],\n      [\n        \"▁ソケット\",\n        -13.021289825439453\n      ],\n      [\n        \"▁SEED\",\n        -13.021329879760742\n      ],\n      [\n        \"▁アラート\",\n        -13.021586418151855\n      ],\n      [\n        \"駅前\",\n        -13.021617889404297\n      ],\n      [\n        \"▁拡幅\",\n        -13.021638870239258\n      ],\n      [\n        \"▁託児\",\n        -13.021686553955078\n      ],\n      [\n        \"▁具現\",\n        -13.022039413452148\n      ],\n      [\n        \"▁ストーム\",\n        -13.022141456604004\n      ],\n      [\n        \"▁民政\",\n        -13.022377014160156\n      ],\n      [\n        \"▁上半期\",\n        -13.022439002990723\n      ],\n      [\n        \"▁歓喜\",\n        -13.022467613220215\n      ],\n      [\n        \"▁パラレル\",\n        -13.022562026977539\n      ],\n      [\n        \"▁傾い\",\n        -13.02260971069336\n      ],\n      [\n        \"▁靭帯\",\n        -13.022706031799316\n      ],\n      [\n        \"▁Basic\",\n        -13.022746086120605\n      ],\n      [\n        \"▁リスニング\",\n        -13.022770881652832\n      ],\n      [\n        \"できれば\",\n        -13.022838592529297\n      ],\n      [\n        \"▁六甲\",\n        -13.022849082946777\n      ],\n      [\n        \"▁ニコラス\",\n        -13.023061752319336\n      ],\n      [\n        \"oun\",\n        -13.023340225219727\n      ],\n      [\n        \"▁緑化\",\n        -13.023369789123535\n      ],\n      [\n        \"プライベート\",\n        -13.023369789123535\n      ],\n      [\n        \"▁スムージー\",\n        -13.023507118225098\n      ],\n      [\n        \"▁天満\",\n        -13.023521423339844\n      ],\n      [\n        \"▁チンギス\",\n        -13.02352523803711\n      ],\n      [\n        \"探偵\",\n        -13.023642539978027\n      ],\n      [\n        \"いつでも\",\n        -13.023763656616211\n      ],\n      [\n        \"秤\",\n        -13.023774147033691\n      ],\n      [\n        \"▁スタイリッシュな\",\n        -13.024042129516602\n      ],\n      [\n        \"OVA\",\n        -13.024150848388672\n      ],\n      [\n        \"▁コミット\",\n        -13.024264335632324\n      ],\n      [\n        \"▁マリファナ\",\n        -13.024309158325195\n      ],\n      [\n        \"▁うれしく\",\n        -13.024606704711914\n      ],\n      [\n        \"▁未完成\",\n        -13.024759292602539\n      ],\n      [\n        \"▁どこまでも\",\n        -13.024845123291016\n      ],\n      [\n        \"▁由緒\",\n        -13.024965286254883\n      ],\n      [\n        \"JAPAN\",\n        -13.024989128112793\n      ],\n      [\n        \"▁スピリット\",\n        -13.02513599395752\n      ],\n      [\n        \"▁ハローワーク\",\n        -13.025145530700684\n      ],\n      [\n        \"串\",\n        -13.025259971618652\n      ],\n      [\n        \"▁料亭\",\n        -13.025513648986816\n      ],\n      [\n        \"怜\",\n        -13.025646209716797\n      ],\n      [\n        \"茸\",\n        -13.025646209716797\n      ],\n      [\n        \"▁First\",\n        -13.025647163391113\n      ],\n      [\n        \"ネックス\",\n        -13.025677680969238\n      ],\n      [\n        \"▁クロマ\",\n        -13.025694847106934\n      ],\n      [\n        \"▁うず\",\n        -13.025739669799805\n      ],\n      [\n        \"▁線維\",\n        -13.025901794433594\n      ],\n      [\n        \"▁壱岐\",\n        -13.025914192199707\n      ],\n      [\n        \"ency\",\n        -13.026098251342773\n      ],\n      [\n        \"por\",\n        -13.026203155517578\n      ],\n      [\n        \"inal\",\n        -13.026274681091309\n      ],\n      [\n        \"▁着ける\",\n        -13.026329040527344\n      ],\n      [\n        \"▁フォルダー\",\n        -13.026357650756836\n      ],\n      [\n        \"弧\",\n        -13.026445388793945\n      ],\n      [\n        \"▁推論\",\n        -13.0265531539917\n      ],\n      [\n        \"▁長久手\",\n        -13.026719093322754\n      ],\n      [\n        \"▁刑罰\",\n        -13.027008056640625\n      ],\n      [\n        \"▁セイバー\",\n        -13.027135848999023\n      ],\n      [\n        \"▁邦楽\",\n        -13.027307510375977\n      ],\n      [\n        \"▁野鳥\",\n        -13.027337074279785\n      ],\n      [\n        \"▁べから\",\n        -13.027383804321289\n      ],\n      [\n        \"オリコン\",\n        -13.027485847473145\n      ],\n      [\n        \"▁五反田\",\n        -13.027522087097168\n      ],\n      [\n        \"▁剥がれ\",\n        -13.027544975280762\n      ],\n      [\n        \"クイーン\",\n        -13.027589797973633\n      ],\n      [\n        \"一覧\",\n        -13.02762508392334\n      ],\n      [\n        \"▁惨敗\",\n        -13.027807235717773\n      ],\n      [\n        \"▁食パン\",\n        -13.02780818939209\n      ],\n      [\n        \"▁禁書\",\n        -13.027931213378906\n      ],\n      [\n        \"▁宿舎\",\n        -13.0282564163208\n      ],\n      [\n        \"▁放流\",\n        -13.028266906738281\n      ],\n      [\n        \"field\",\n        -13.028404235839844\n      ],\n      [\n        \"▁近視\",\n        -13.02883243560791\n      ],\n      [\n        \"▁FOX\",\n        -13.028844833374023\n      ],\n      [\n        \"▁根室\",\n        -13.028849601745605\n      ],\n      [\n        \"▁なでしこ\",\n        -13.028863906860352\n      ],\n      [\n        \"▁ファイナリスト\",\n        -13.028863906860352\n      ],\n      [\n        \"泳\",\n        -13.028975486755371\n      ],\n      [\n        \"▁面倒だ\",\n        -13.028993606567383\n      ],\n      [\n        \"▁谷間\",\n        -13.029003143310547\n      ],\n      [\n        \"▁ダンボール\",\n        -13.029004096984863\n      ],\n      [\n        \"軟\",\n        -13.029035568237305\n      ],\n      [\n        \"emb\",\n        -13.029058456420898\n      ],\n      [\n        \"クライアント\",\n        -13.029059410095215\n      ],\n      [\n        \"文章\",\n        -13.029060363769531\n      ],\n      [\n        \"莫\",\n        -13.029132843017578\n      ],\n      [\n        \"▁悔い\",\n        -13.029298782348633\n      ],\n      [\n        \"▁ティル\",\n        -13.029465675354004\n      ],\n      [\n        \"▁電通\",\n        -13.029579162597656\n      ],\n      [\n        \"▁ラルフ\",\n        -13.02961254119873\n      ],\n      [\n        \"▁たどり着く\",\n        -13.029670715332031\n      ],\n      [\n        \"ヘッダー\",\n        -13.029858589172363\n      ],\n      [\n        \"nor\",\n        -13.029923439025879\n      ],\n      [\n        \"ペリパトス\",\n        -13.029938697814941\n      ],\n      [\n        \"▁ベクター\",\n        -13.03000259399414\n      ],\n      [\n        \"綾\",\n        -13.030126571655273\n      ],\n      [\n        \"kk\",\n        -13.03020191192627\n      ],\n      [\n        \"▁費やして\",\n        -13.030208587646484\n      ],\n      [\n        \"▁見返り\",\n        -13.0302095413208\n      ],\n      [\n        \"▁揺さぶ\",\n        -13.0302152633667\n      ],\n      [\n        \"慶応\",\n        -13.030241966247559\n      ],\n      [\n        \"もかも\",\n        -13.030325889587402\n      ],\n      [\n        \"▁健闘\",\n        -13.030336380004883\n      ],\n      [\n        \"uv\",\n        -13.030448913574219\n      ],\n      [\n        \"暮らし\",\n        -13.030448913574219\n      ],\n      [\n        \"▁盛り上げる\",\n        -13.030476570129395\n      ],\n      [\n        \"▁サンリオ\",\n        -13.030723571777344\n      ],\n      [\n        \"▁rose\",\n        -13.030844688415527\n      ],\n      [\n        \"エチル\",\n        -13.03084945678711\n      ],\n      [\n        \"▁削って\",\n        -13.030915260314941\n      ],\n      [\n        \"プライバシー\",\n        -13.030940055847168\n      ],\n      [\n        \"▁但馬\",\n        -13.031015396118164\n      ],\n      [\n        \"▁サーブ\",\n        -13.0311279296875\n      ],\n      [\n        \"改めて\",\n        -13.031128883361816\n      ],\n      [\n        \"▁枢機卿\",\n        -13.03128433227539\n      ],\n      [\n        \"▁兼ねる\",\n        -13.031292915344238\n      ],\n      [\n        \"▁キャノン\",\n        -13.031296730041504\n      ],\n      [\n        \"OSE\",\n        -13.031367301940918\n      ],\n      [\n        \"緩\",\n        -13.031468391418457\n      ],\n      [\n        \"失敗\",\n        -13.031510353088379\n      ],\n      [\n        \"▁ジョナサン\",\n        -13.031553268432617\n      ],\n      [\n        \"▁揃う\",\n        -13.03155517578125\n      ],\n      [\n        \"▁一向に\",\n        -13.031560897827148\n      ],\n      [\n        \"▁豊前\",\n        -13.03157901763916\n      ],\n      [\n        \"▁ジッパー\",\n        -13.031615257263184\n      ],\n      [\n        \"臨床\",\n        -13.031781196594238\n      ],\n      [\n        \"▁ボトムス\",\n        -13.031783103942871\n      ],\n      [\n        \"IKA\",\n        -13.031805038452148\n      ],\n      [\n        \"▁囃子\",\n        -13.032093048095703\n      ],\n      [\n        \"▁割り振\",\n        -13.032149314880371\n      ],\n      [\n        \"▁クライミング\",\n        -13.032158851623535\n      ],\n      [\n        \"▁メイクアップ\",\n        -13.032222747802734\n      ],\n      [\n        \"▁ヴァレ\",\n        -13.032246589660645\n      ],\n      [\n        \"ヴェール\",\n        -13.032257080078125\n      ],\n      [\n        \"▁柔らかな\",\n        -13.032275199890137\n      ],\n      [\n        \"重要な\",\n        -13.03229808807373\n      ],\n      [\n        \"▁ユーラシア\",\n        -13.03236198425293\n      ],\n      [\n        \"訛\",\n        -13.03236198425293\n      ],\n      [\n        \"ちっと\",\n        -13.032384872436523\n      ],\n      [\n        \"学位\",\n        -13.032388687133789\n      ],\n      [\n        \"幕末\",\n        -13.032437324523926\n      ],\n      [\n        \"▁ターナー\",\n        -13.032465934753418\n      ],\n      [\n        \"▁イスタンブール\",\n        -13.032630920410156\n      ],\n      [\n        \"▁ジャニ\",\n        -13.032919883728027\n      ],\n      [\n        \"goo\",\n        -13.032984733581543\n      ],\n      [\n        \"▁エネミー\",\n        -13.033206939697266\n      ],\n      [\n        \"▁辛口\",\n        -13.033280372619629\n      ],\n      [\n        \"文庫\",\n        -13.033329963684082\n      ],\n      [\n        \"▁決行\",\n        -13.033356666564941\n      ],\n      [\n        \"植生\",\n        -13.033422470092773\n      ],\n      [\n        \"▁永住\",\n        -13.033430099487305\n      ],\n      [\n        \"▁希薄\",\n        -13.033474922180176\n      ],\n      [\n        \"▁降車\",\n        -13.033479690551758\n      ],\n      [\n        \"▁エクステ\",\n        -13.033493041992188\n      ],\n      [\n        \"▁向いた\",\n        -13.033513069152832\n      ],\n      [\n        \"▁艦首\",\n        -13.033693313598633\n      ],\n      [\n        \"▁吸気\",\n        -13.033803939819336\n      ],\n      [\n        \"▁毒素\",\n        -13.033842086791992\n      ],\n      [\n        \"目の前\",\n        -13.033929824829102\n      ],\n      [\n        \"▁Hey\",\n        -13.034111976623535\n      ],\n      [\n        \"▁モニュメント\",\n        -13.034250259399414\n      ],\n      [\n        \"▁五十嵐\",\n        -13.034265518188477\n      ],\n      [\n        \"▁アニメーター\",\n        -13.034341812133789\n      ],\n      [\n        \"ヶ原\",\n        -13.034517288208008\n      ],\n      [\n        \"葦\",\n        -13.034520149230957\n      ],\n      [\n        \"釉\",\n        -13.0347900390625\n      ],\n      [\n        \"480\",\n        -13.034951210021973\n      ],\n      [\n        \"rig\",\n        -13.034961700439453\n      ],\n      [\n        \"▁マヨネーズ\",\n        -13.03506088256836\n      ],\n      [\n        \"嘲\",\n        -13.03506088256836\n      ],\n      [\n        \"▁慣行\",\n        -13.035062789916992\n      ],\n      [\n        \"▁銅像\",\n        -13.035252571105957\n      ],\n      [\n        \"▁Hulu\",\n        -13.035346031188965\n      ],\n      [\n        \"▁直属\",\n        -13.035383224487305\n      ],\n      [\n        \"▁葉酸\",\n        -13.035459518432617\n      ],\n      [\n        \"共同\",\n        -13.03564453125\n      ],\n      [\n        \"綜\",\n        -13.035871505737305\n      ],\n      [\n        \"▁叫んだ\",\n        -13.03587818145752\n      ],\n      [\n        \"▁渦巻\",\n        -13.035914421081543\n      ],\n      [\n        \"▁術後\",\n        -13.0360689163208\n      ],\n      [\n        \"▁各務原\",\n        -13.03614330291748\n      ],\n      [\n        \"▁二塁\",\n        -13.03618049621582\n      ],\n      [\n        \"▁コミカル\",\n        -13.03626823425293\n      ],\n      [\n        \"▁口説\",\n        -13.036382675170898\n      ],\n      [\n        \"▁creat\",\n        -13.036416053771973\n      ],\n      [\n        \"▁ことごとく\",\n        -13.036418914794922\n      ],\n      [\n        \"春日\",\n        -13.036498069763184\n      ],\n      [\n        \"▁シロップ\",\n        -13.036520004272461\n      ],\n      [\n        \"▁IOC\",\n        -13.036595344543457\n      ],\n      [\n        \"▁出征\",\n        -13.0369234085083\n      ],\n      [\n        \"▁送受信\",\n        -13.037495613098145\n      ],\n      [\n        \"▁流量\",\n        -13.037697792053223\n      ],\n      [\n        \"BEAMS\",\n        -13.037769317626953\n      ],\n      [\n        \"系譜\",\n        -13.037809371948242\n      ],\n      [\n        \"ぶっちゃけ\",\n        -13.037839889526367\n      ],\n      [\n        \"▁豊岡\",\n        -13.037842750549316\n      ],\n      [\n        \"▁コソボ\",\n        -13.038037300109863\n      ],\n      [\n        \"▁糾弾\",\n        -13.038037300109863\n      ],\n      [\n        \"▁ストロー\",\n        -13.0382080078125\n      ],\n      [\n        \"▁引き金\",\n        -13.03834056854248\n      ],\n      [\n        \"ن\",\n        -13.038579940795898\n      ],\n      [\n        \"▁ブラケット\",\n        -13.038581848144531\n      ],\n      [\n        \"▁くらし\",\n        -13.038589477539062\n      ],\n      [\n        \"掴\",\n        -13.038670539855957\n      ],\n      [\n        \"ゴールデン\",\n        -13.03868293762207\n      ],\n      [\n        \"▁自我\",\n        -13.038702011108398\n      ],\n      [\n        \"▁溶媒\",\n        -13.038859367370605\n      ],\n      [\n        \"▁必勝\",\n        -13.038923263549805\n      ],\n      [\n        \"▁割当\",\n        -13.038928985595703\n      ],\n      [\n        \"bj\",\n        -13.038930892944336\n      ],\n      [\n        \"▁明かす\",\n        -13.0390043258667\n      ],\n      [\n        \"▁着衣\",\n        -13.039033889770508\n      ],\n      [\n        \"▁加筆\",\n        -13.039052963256836\n      ],\n      [\n        \"▁パステル\",\n        -13.039112091064453\n      ],\n      [\n        \"▁トーキョー\",\n        -13.039121627807617\n      ],\n      [\n        \"感謝\",\n        -13.039158821105957\n      ],\n      [\n        \"▁佐々\",\n        -13.039249420166016\n      ],\n      [\n        \"▁パルプ\",\n        -13.039323806762695\n      ],\n      [\n        \"諏訪\",\n        -13.039387702941895\n      ],\n      [\n        \"▁素朴な\",\n        -13.039393424987793\n      ],\n      [\n        \"匡\",\n        -13.039393424987793\n      ],\n      [\n        \"抜本\",\n        -13.03957748413086\n      ],\n      [\n        \"膝\",\n        -13.039660453796387\n      ],\n      [\n        \"▁昇降\",\n        -13.039726257324219\n      ],\n      [\n        \"▁ナイツ\",\n        -13.039921760559082\n      ],\n      [\n        \"インドネシア\",\n        -13.039934158325195\n      ],\n      [\n        \"▁振込み\",\n        -13.039937019348145\n      ],\n      [\n        \"▁此の\",\n        -13.039960861206055\n      ],\n      [\n        \"▁ばれ\",\n        -13.040000915527344\n      ],\n      [\n        \"▁丹羽\",\n        -13.040027618408203\n      ],\n      [\n        \"▁立ち去\",\n        -13.040048599243164\n      ],\n      [\n        \"▁殿下\",\n        -13.040050506591797\n      ],\n      [\n        \"▁削ら\",\n        -13.040337562561035\n      ],\n      [\n        \"▁井原\",\n        -13.040373802185059\n      ],\n      [\n        \"テヘル\",\n        -13.040413856506348\n      ],\n      [\n        \"▁オーボエ\",\n        -13.04047966003418\n      ],\n      [\n        \"▁みせた\",\n        -13.040557861328125\n      ],\n      [\n        \"▁尻尾\",\n        -13.04068374633789\n      ],\n      [\n        \"罹\",\n        -13.040751457214355\n      ],\n      [\n        \"左腕\",\n        -13.040945053100586\n      ],\n      [\n        \"▁暴風\",\n        -13.041004180908203\n      ],\n      [\n        \"▁備中\",\n        -13.041013717651367\n      ],\n      [\n        \"▁花巻\",\n        -13.041056632995605\n      ],\n      [\n        \"▁主君\",\n        -13.041158676147461\n      ],\n      [\n        \"vol\",\n        -13.041260719299316\n      ],\n      [\n        \"▁ガブリエル\",\n        -13.041295051574707\n      ],\n      [\n        \"なるべく\",\n        -13.041304588317871\n      ],\n      [\n        \"▁益田\",\n        -13.04133129119873\n      ],\n      [\n        \"▁Room\",\n        -13.041333198547363\n      ],\n      [\n        \"▁車輛\",\n        -13.041343688964844\n      ],\n      [\n        \"▁スレイヤー\",\n        -13.041621208190918\n      ],\n      [\n        \"▁遅滞\",\n        -13.041845321655273\n      ],\n      [\n        \"危険\",\n        -13.041850090026855\n      ],\n      [\n        \"ジャパン\",\n        -13.041863441467285\n      ],\n      [\n        \"古くから\",\n        -13.041887283325195\n      ],\n      [\n        \"▁ひっくり返\",\n        -13.042384147644043\n      ],\n      [\n        \"lam\",\n        -13.042431831359863\n      ],\n      [\n        \"▁シャンパン\",\n        -13.042533874511719\n      ],\n      [\n        \"▁ランタン\",\n        -13.04254150390625\n      ],\n      [\n        \"▁六十\",\n        -13.042558670043945\n      ],\n      [\n        \"▁鴨川\",\n        -13.04258918762207\n      ],\n      [\n        \"比較\",\n        -13.042657852172852\n      ],\n      [\n        \"▁劇的な\",\n        -13.042927742004395\n      ],\n      [\n        \"▁レクサス\",\n        -13.043200492858887\n      ],\n      [\n        \"▁群衆\",\n        -13.043246269226074\n      ],\n      [\n        \"ヴィング\",\n        -13.043292999267578\n      ],\n      [\n        \"▁有益\",\n        -13.04329776763916\n      ],\n      [\n        \"▁ヤバい\",\n        -13.043475151062012\n      ],\n      [\n        \"▁スカイツリー\",\n        -13.043745994567871\n      ],\n      [\n        \"▁コンバータ\",\n        -13.043753623962402\n      ],\n      [\n        \"▁下げた\",\n        -13.0437593460083\n      ],\n      [\n        \"▁英検\",\n        -13.04378604888916\n      ],\n      [\n        \"▁にんにく\",\n        -13.044017791748047\n      ],\n      [\n        \"▁足柄\",\n        -13.04405403137207\n      ],\n      [\n        \"▁残骸\",\n        -13.044054985046387\n      ],\n      [\n        \"▁Audio\",\n        -13.044164657592773\n      ],\n      [\n        \"▁ナイル\",\n        -13.044210433959961\n      ],\n      [\n        \"▁沈着\",\n        -13.044224739074707\n      ],\n      [\n        \"PAC\",\n        -13.04430103302002\n      ],\n      [\n        \"▁ガーニッシュ\",\n        -13.0443115234375\n      ],\n      [\n        \"▁貯める\",\n        -13.044561386108398\n      ],\n      [\n        \"▁ケミカル\",\n        -13.044563293457031\n      ],\n      [\n        \"▁コネクト\",\n        -13.044595718383789\n      ],\n      [\n        \"▁加増\",\n        -13.044706344604492\n      ],\n      [\n        \"▁サラブレッド\",\n        -13.044836044311523\n      ],\n      [\n        \"▁因縁\",\n        -13.044875144958496\n      ],\n      [\n        \"lay\",\n        -13.045013427734375\n      ],\n      [\n        \"1896\",\n        -13.045096397399902\n      ],\n      [\n        \"シンガポール\",\n        -13.045149803161621\n      ],\n      [\n        \"▁Camp\",\n        -13.045356750488281\n      ],\n      [\n        \"輌\",\n        -13.045358657836914\n      ],\n      [\n        \"茉\",\n        -13.045382499694824\n      ],\n      [\n        \"クワガタ\",\n        -13.045431137084961\n      ],\n      [\n        \"署\",\n        -13.045583724975586\n      ],\n      [\n        \"▁肥前\",\n        -13.04587173461914\n      ],\n      [\n        \"▁ふんわり\",\n        -13.045928955078125\n      ],\n      [\n        \"▁裏腹に\",\n        -13.045928955078125\n      ],\n      [\n        \"studio\",\n        -13.045931816101074\n      ],\n      [\n        \"▁マキノ\",\n        -13.045945167541504\n      ],\n      [\n        \"▁剥離\",\n        -13.045968055725098\n      ],\n      [\n        \"予算\",\n        -13.046051025390625\n      ],\n      [\n        \"UNE\",\n        -13.046119689941406\n      ],\n      [\n        \"▁和牛\",\n        -13.046167373657227\n      ],\n      [\n        \"uis\",\n        -13.046228408813477\n      ],\n      [\n        \"かといって\",\n        -13.046241760253906\n      ],\n      [\n        \"評判\",\n        -13.04631519317627\n      ],\n      [\n        \"▁ハムスター\",\n        -13.046334266662598\n      ],\n      [\n        \"増援\",\n        -13.046371459960938\n      ],\n      [\n        \"▁潜んで\",\n        -13.046460151672363\n      ],\n      [\n        \"▁レントゲン\",\n        -13.046476364135742\n      ],\n      [\n        \"▁ロペス\",\n        -13.046476364135742\n      ],\n      [\n        \"LIVE\",\n        -13.04676342010498\n      ],\n      [\n        \"▁サブタイトル\",\n        -13.047150611877441\n      ],\n      [\n        \"▁フリークス\",\n        -13.047179222106934\n      ],\n      [\n        \"▁カブス\",\n        -13.047264099121094\n      ],\n      [\n        \"▁競売\",\n        -13.047380447387695\n      ],\n      [\n        \"▁カウンティ\",\n        -13.04739761352539\n      ],\n      [\n        \"▁ウェッ\",\n        -13.047409057617188\n      ],\n      [\n        \"逃して\",\n        -13.047540664672852\n      ],\n      [\n        \"▁頑固\",\n        -13.047569274902344\n      ],\n      [\n        \"昼間\",\n        -13.047572135925293\n      ],\n      [\n        \"▁急逝\",\n        -13.047607421875\n      ],\n      [\n        \"▁ハッシュ\",\n        -13.047698020935059\n      ],\n      [\n        \"▁リモワ\",\n        -13.047843933105469\n      ],\n      [\n        \"▁ショッパー\",\n        -13.047908782958984\n      ],\n      [\n        \"本尊\",\n        -13.048059463500977\n      ],\n      [\n        \"▁弁論\",\n        -13.048165321350098\n      ],\n      [\n        \"▁治験\",\n        -13.04842472076416\n      ],\n      [\n        \"▁拾って\",\n        -13.048450469970703\n      ],\n      [\n        \"▁苦難\",\n        -13.048521995544434\n      ],\n      [\n        \"▁図案\",\n        -13.04871654510498\n      ],\n      [\n        \"小野田\",\n        -13.04874324798584\n      ],\n      [\n        \"motion\",\n        -13.048748970031738\n      ],\n      [\n        \"▁ジャッジ\",\n        -13.048891067504883\n      ],\n      [\n        \"乙\",\n        -13.048966407775879\n      ],\n      [\n        \"▁Shin\",\n        -13.049031257629395\n      ],\n      [\n        \"▁覚書\",\n        -13.049195289611816\n      ],\n      [\n        \"❤\",\n        -13.049212455749512\n      ],\n      [\n        \"▁失効\",\n        -13.049250602722168\n      ],\n      [\n        \"▁ストッキング\",\n        -13.049284934997559\n      ],\n      [\n        \"豊富な\",\n        -13.049286842346191\n      ],\n      [\n        \"▁支度\",\n        -13.049409866333008\n      ],\n      [\n        \"▁渡部\",\n        -13.049519538879395\n      ],\n      [\n        \"▁雨天\",\n        -13.049598693847656\n      ],\n      [\n        \"▁ささやか\",\n        -13.049607276916504\n      ],\n      [\n        \"▁シャーシ\",\n        -13.049668312072754\n      ],\n      [\n        \"▁弾性\",\n        -13.049683570861816\n      ],\n      [\n        \"▁ベンジャミン\",\n        -13.049760818481445\n      ],\n      [\n        \"▁不気味\",\n        -13.049760818481445\n      ],\n      [\n        \"▁過疎\",\n        -13.04976749420166\n      ],\n      [\n        \"キャッシング\",\n        -13.049918174743652\n      ],\n      [\n        \"Works\",\n        -13.049995422363281\n      ],\n      [\n        \"┣\",\n        -13.050034523010254\n      ],\n      [\n        \"洗顔\",\n        -13.05019474029541\n      ],\n      [\n        \"▁せんしゅ\",\n        -13.050261497497559\n      ],\n      [\n        \"▁ブエノスアイレス\",\n        -13.050309181213379\n      ],\n      [\n        \"▁support\",\n        -13.050310134887695\n      ],\n      [\n        \"▁挑み\",\n        -13.050312042236328\n      ],\n      [\n        \"▁意気込み\",\n        -13.05031681060791\n      ],\n      [\n        \"▁守ろう\",\n        -13.050407409667969\n      ],\n      [\n        \"▁ホープ\",\n        -13.05068302154541\n      ],\n      [\n        \"フィンランド\",\n        -13.050722122192383\n      ],\n      [\n        \"▁バタバタ\",\n        -13.050858497619629\n      ],\n      [\n        \"▁払拭\",\n        -13.050858497619629\n      ],\n      [\n        \"▁洋菓子\",\n        -13.050858497619629\n      ],\n      [\n        \"iva\",\n        -13.05087947845459\n      ],\n      [\n        \"▁(*´\",\n        -13.050909042358398\n      ],\n      [\n        \"至上\",\n        -13.051008224487305\n      ],\n      [\n        \"スカヤ\",\n        -13.051072120666504\n      ],\n      [\n        \"ディオン\",\n        -13.051115036010742\n      ],\n      [\n        \"淮\",\n        -13.051132202148438\n      ],\n      [\n        \"▁ジェイコブ\",\n        -13.051139831542969\n      ],\n      [\n        \"▁登頂\",\n        -13.051190376281738\n      ],\n      [\n        \"▁合奏\",\n        -13.051281929016113\n      ],\n      [\n        \"受付\",\n        -13.051323890686035\n      ],\n      [\n        \"¸\",\n        -13.051406860351562\n      ],\n      [\n        \"鄧\",\n        -13.051411628723145\n      ],\n      [\n        \"▁ストリップ\",\n        -13.051445960998535\n      ],\n      [\n        \"▁環礁\",\n        -13.051458358764648\n      ],\n      [\n        \"▁気遣い\",\n        -13.051682472229004\n      ],\n      [\n        \"▁絡ま\",\n        -13.051751136779785\n      ],\n      [\n        \"褒\",\n        -13.05180835723877\n      ],\n      [\n        \"射砲\",\n        -13.051855087280273\n      ],\n      [\n        \"輸入\",\n        -13.05189323425293\n      ],\n      [\n        \"▁生まれ変わり\",\n        -13.051918983459473\n      ],\n      [\n        \"▁恥ずかしく\",\n        -13.051949501037598\n      ],\n      [\n        \"勃\",\n        -13.051956176757812\n      ],\n      [\n        \"▁呼び寄せ\",\n        -13.052057266235352\n      ],\n      [\n        \"▁ワイワイ\",\n        -13.052062034606934\n      ],\n      [\n        \"すべり\",\n        -13.0520658493042\n      ],\n      [\n        \"▁ブラウ\",\n        -13.052179336547852\n      ],\n      [\n        \"▁edit\",\n        -13.05218505859375\n      ],\n      [\n        \"▁漂流\",\n        -13.052186012268066\n      ],\n      [\n        \"1897\",\n        -13.052240371704102\n      ],\n      [\n        \"▁リッチモンド\",\n        -13.052260398864746\n      ],\n      [\n        \"グラフィック\",\n        -13.052331924438477\n      ],\n      [\n        \"▁VISA\",\n        -13.052436828613281\n      ],\n      [\n        \"アリストテレス\",\n        -13.052506446838379\n      ],\n      [\n        \"▁大将軍\",\n        -13.052640914916992\n      ],\n      [\n        \"▁育む\",\n        -13.05267333984375\n      ],\n      [\n        \"ε\",\n        -13.05278205871582\n      ],\n      [\n        \"▁漱石\",\n        -13.05278205871582\n      ],\n      [\n        \"▁補聴器\",\n        -13.05278205871582\n      ],\n      [\n        \"▁譲った\",\n        -13.052802085876465\n      ],\n      [\n        \"マーケティング\",\n        -13.052886009216309\n      ],\n      [\n        \"\",\n        -13.053056716918945\n      ],\n      [\n        \"⭐\",\n        -13.053056716918945\n      ],\n      [\n        \"親王\",\n        -13.053132057189941\n      ],\n      [\n        \"ROOM\",\n        -13.053167343139648\n      ],\n      [\n        \"カトリック\",\n        -13.053736686706543\n      ],\n      [\n        \"恐らく\",\n        -13.05374526977539\n      ],\n      [\n        \"▁ブックレット\",\n        -13.053768157958984\n      ],\n      [\n        \"▁屋久島\",\n        -13.053882598876953\n      ],\n      [\n        \"蝕\",\n        -13.053882598876953\n      ],\n      [\n        \"堪\",\n        -13.05423641204834\n      ],\n      [\n        \"▁くださ\",\n        -13.05429458618164\n      ],\n      [\n        \"要所\",\n        -13.054430961608887\n      ],\n      [\n        \"▁受動\",\n        -13.054448127746582\n      ],\n      [\n        \"▁持ち上が\",\n        -13.054654121398926\n      ],\n      [\n        \"亥\",\n        -13.054709434509277\n      ],\n      [\n        \"趙\",\n        -13.054830551147461\n      ],\n      [\n        \"▁イヤリング\",\n        -13.05521297454834\n      ],\n      [\n        \"ZEN\",\n        -13.055277824401855\n      ],\n      [\n        \"▁乾杯\",\n        -13.0552978515625\n      ],\n      [\n        \"▁否決\",\n        -13.055349349975586\n      ],\n      [\n        \"▁近況\",\n        -13.055360794067383\n      ],\n      [\n        \"ビッグ\",\n        -13.055397033691406\n      ],\n      [\n        \"臥\",\n        -13.055536270141602\n      ],\n      [\n        \"鮫\",\n        -13.055536270141602\n      ],\n      [\n        \"▁松崎\",\n        -13.056066513061523\n      ],\n      [\n        \"▁うんざり\",\n        -13.056087493896484\n      ],\n      [\n        \"半年\",\n        -13.056129455566406\n      ],\n      [\n        \"▁特務\",\n        -13.05627155303955\n      ],\n      [\n        \"売上\",\n        -13.056278228759766\n      ],\n      [\n        \"類似\",\n        -13.056288719177246\n      ],\n      [\n        \"▁セーラームーン\",\n        -13.056368827819824\n      ],\n      [\n        \"▁災い\",\n        -13.056379318237305\n      ],\n      [\n        \"▁労災\",\n        -13.056398391723633\n      ],\n      [\n        \"▁平戸\",\n        -13.05642032623291\n      ],\n      [\n        \"▁治虫\",\n        -13.05660629272461\n      ],\n      [\n        \"▁抵触\",\n        -13.056639671325684\n      ],\n      [\n        \"▁星雲\",\n        -13.056639671325684\n      ],\n      [\n        \"▁アニソン\",\n        -13.056742668151855\n      ],\n      [\n        \"懸\",\n        -13.056766510009766\n      ],\n      [\n        \"▁Spotify\",\n        -13.056916236877441\n      ],\n      [\n        \"▁女房\",\n        -13.05703067779541\n      ],\n      [\n        \"▁楽天ブックス\",\n        -13.0571928024292\n      ],\n      [\n        \"▁転機\",\n        -13.057208061218262\n      ],\n      [\n        \"▁許した\",\n        -13.057251930236816\n      ],\n      [\n        \"▁羞恥\",\n        -13.05746841430664\n      ],\n      [\n        \"OLD\",\n        -13.057519912719727\n      ],\n      [\n        \"▁アイドラッグ\",\n        -13.057519912719727\n      ],\n      [\n        \"▁美穂\",\n        -13.057611465454102\n      ],\n      [\n        \"▁受諾\",\n        -13.057767868041992\n      ],\n      [\n        \"▁老眼\",\n        -13.057771682739258\n      ],\n      [\n        \"ザクラ\",\n        -13.057887077331543\n      ],\n      [\n        \"新しく\",\n        -13.057891845703125\n      ],\n      [\n        \"1880\",\n        -13.057994842529297\n      ],\n      [\n        \"懲\",\n        -13.05802059173584\n      ],\n      [\n        \"▁乗換\",\n        -13.05811882019043\n      ],\n      [\n        \"▁歌集\",\n        -13.058199882507324\n      ],\n      [\n        \"▁ディテール\",\n        -13.058233261108398\n      ],\n      [\n        \"oke\",\n        -13.05856990814209\n      ],\n      [\n        \"▁敗走\",\n        -13.058574676513672\n      ],\n      [\n        \"▁直系\",\n        -13.058584213256836\n      ],\n      [\n        \"▁編制\",\n        -13.058670997619629\n      ],\n      [\n        \"▁ウィンド\",\n        -13.058794975280762\n      ],\n      [\n        \"▁曹洞宗\",\n        -13.05885124206543\n      ],\n      [\n        \"店頭\",\n        -13.058867454528809\n      ],\n      [\n        \"atio\",\n        -13.05896282196045\n      ],\n      [\n        \"▁ミュン\",\n        -13.059185981750488\n      ],\n      [\n        \"近畿\",\n        -13.059297561645508\n      ],\n      [\n        \"▁イメクラ\",\n        -13.059405326843262\n      ],\n      [\n        \"▁寄り添い\",\n        -13.059405326843262\n      ],\n      [\n        \"▁again\",\n        -13.059408187866211\n      ],\n      [\n        \"▁精鋭\",\n        -13.059566497802734\n      ],\n      [\n        \"View\",\n        -13.059568405151367\n      ],\n      [\n        \"▁遅かった\",\n        -13.059608459472656\n      ],\n      [\n        \"▁微妙\",\n        -13.059615135192871\n      ],\n      [\n        \"▁打球\",\n        -13.059776306152344\n      ],\n      [\n        \"▁砂利\",\n        -13.059782028198242\n      ],\n      [\n        \"▁設営\",\n        -13.05996036529541\n      ],\n      [\n        \"▁夢見て\",\n        -13.059962272644043\n      ],\n      [\n        \"▁ホワイトハウス\",\n        -13.060132026672363\n      ],\n      [\n        \"▁Face\",\n        -13.060243606567383\n      ],\n      [\n        \"▁常盤\",\n        -13.060434341430664\n      ],\n      [\n        \"▁好投\",\n        -13.060453414916992\n      ],\n      [\n        \"▁マディソン\",\n        -13.060514450073242\n      ],\n      [\n        \"▁tokyo\",\n        -13.060572624206543\n      ],\n      [\n        \"▁毛布\",\n        -13.060700416564941\n      ],\n      [\n        \"チーノ\",\n        -13.060729026794434\n      ],\n      [\n        \"▁牡蠣\",\n        -13.060791015625\n      ],\n      [\n        \"▁ヘレン\",\n        -13.060871124267578\n      ],\n      [\n        \"iu\",\n        -13.0609769821167\n      ],\n      [\n        \"▁賞与\",\n        -13.061044692993164\n      ],\n      [\n        \"▁反感\",\n        -13.061062812805176\n      ],\n      [\n        \"シルバー\",\n        -13.06112003326416\n      ],\n      [\n        \"挽\",\n        -13.0613431930542\n      ],\n      [\n        \"๑\",\n        -13.061345100402832\n      ],\n      [\n        \"▁チルドレン\",\n        -13.061345100402832\n      ],\n      [\n        \"メチル\",\n        -13.061422348022461\n      ],\n      [\n        \"▁参道\",\n        -13.06159782409668\n      ],\n      [\n        \"▁税込み\",\n        -13.061644554138184\n      ],\n      [\n        \"▁赴いた\",\n        -13.061909675598145\n      ],\n      [\n        \"▁振り込\",\n        -13.062027931213379\n      ],\n      [\n        \"コンテンツ\",\n        -13.062359809875488\n      ],\n      [\n        \"rel\",\n        -13.062397003173828\n      ],\n      [\n        \"▁安達\",\n        -13.062410354614258\n      ],\n      [\n        \"▁議題\",\n        -13.062457084655762\n      ],\n      [\n        \"▁振袖\",\n        -13.062472343444824\n      ],\n      [\n        \"▁頑張\",\n        -13.062503814697266\n      ],\n      [\n        \"\",\n        -13.06273365020752\n      ],\n      [\n        \"▁ダメです\",\n        -13.062798500061035\n      ],\n      [\n        \"管理人\",\n        -13.062888145446777\n      ],\n      [\n        \"▁ニコル\",\n        -13.06292724609375\n      ],\n      [\n        \"▁創成\",\n        -13.063020706176758\n      ],\n      [\n        \"▁ボギー\",\n        -13.063033103942871\n      ],\n      [\n        \"▁追贈\",\n        -13.06303596496582\n      ],\n      [\n        \"▁Space\",\n        -13.063037872314453\n      ],\n      [\n        \"▁要綱\",\n        -13.063200950622559\n      ],\n      [\n        \"▁パッと\",\n        -13.06325626373291\n      ],\n      [\n        \"▁バイアグラ\",\n        -13.063289642333984\n      ],\n      [\n        \"スペース\",\n        -13.063433647155762\n      ],\n      [\n        \"▁見込んで\",\n        -13.063567161560059\n      ],\n      [\n        \"鍾\",\n        -13.063567161560059\n      ],\n      [\n        \"▁ストロング\",\n        -13.063599586486816\n      ],\n      [\n        \"▁航続\",\n        -13.063862800598145\n      ],\n      [\n        \"▁HERO\",\n        -13.063875198364258\n      ],\n      [\n        \"lite\",\n        -13.063897132873535\n      ],\n      [\n        \"ロサンゼルス\",\n        -13.064042091369629\n      ],\n      [\n        \"▁桟橋\",\n        -13.064123153686523\n      ],\n      [\n        \"▁定款\",\n        -13.064188003540039\n      ],\n      [\n        \"▁Soul\",\n        -13.064334869384766\n      ],\n      [\n        \"▁スクラップ\",\n        -13.064401626586914\n      ],\n      [\n        \"アイテム\",\n        -13.064602851867676\n      ],\n      [\n        \"▁杉浦\",\n        -13.064640045166016\n      ],\n      [\n        \"▁ファントム\",\n        -13.064663887023926\n      ],\n      [\n        \"▁想起\",\n        -13.064682006835938\n      ],\n      [\n        \"申し訳\",\n        -13.064884185791016\n      ],\n      [\n        \"▁甲信越\",\n        -13.064958572387695\n      ],\n      [\n        \"▁孵化\",\n        -13.065237045288086\n      ],\n      [\n        \"殷\",\n        -13.065237045288086\n      ],\n      [\n        \"▁限りなく\",\n        -13.065494537353516\n      ],\n      [\n        \"م\",\n        -13.065515518188477\n      ],\n      [\n        \"宅配\",\n        -13.065815925598145\n      ],\n      [\n        \"▁スペクトラ\",\n        -13.065896987915039\n      ],\n      [\n        \"▁付け根\",\n        -13.066061973571777\n      ],\n      [\n        \"じゅつ\",\n        -13.066084861755371\n      ],\n      [\n        \"iri\",\n        -13.066204071044922\n      ],\n      [\n        \"▁WWF\",\n        -13.066267013549805\n      ],\n      [\n        \"レッスン\",\n        -13.066300392150879\n      ],\n      [\n        \"▁入れ替わり\",\n        -13.066351890563965\n      ],\n      [\n        \"佐久\",\n        -13.06655216217041\n      ],\n      [\n        \"▁飛んだ\",\n        -13.066823959350586\n      ],\n      [\n        \"牝\",\n        -13.066908836364746\n      ],\n      [\n        \"▁安楽\",\n        -13.066910743713379\n      ],\n      [\n        \"▁企図\",\n        -13.06694221496582\n      ],\n      [\n        \"▁オカルト\",\n        -13.066969871520996\n      ],\n      [\n        \"▁兆し\",\n        -13.066975593566895\n      ],\n      [\n        \"▁小道具\",\n        -13.06746768951416\n      ],\n      [\n        \"▁民進党\",\n        -13.06746768951416\n      ],\n      [\n        \"▁親切に\",\n        -13.067691802978516\n      ],\n      [\n        \"▁泣か\",\n        -13.067752838134766\n      ],\n      [\n        \"▁呉服\",\n        -13.067935943603516\n      ],\n      [\n        \"セフレ\",\n        -13.06796932220459\n      ],\n      [\n        \"▁未解決\",\n        -13.068025588989258\n      ],\n      [\n        \"▁越中\",\n        -13.068188667297363\n      ],\n      [\n        \"▁暴落\",\n        -13.06838321685791\n      ],\n      [\n        \"▁絞め\",\n        -13.068581581115723\n      ],\n      [\n        \"▁アインシュタイン\",\n        -13.068584442138672\n      ],\n      [\n        \"▁ほしく\",\n        -13.068695068359375\n      ],\n      [\n        \"▁必死\",\n        -13.068708419799805\n      ],\n      [\n        \"▁読み書き\",\n        -13.06883716583252\n      ],\n      [\n        \"▁丁寧で\",\n        -13.068915367126465\n      ],\n      [\n        \"▁泳ぐ\",\n        -13.068942070007324\n      ],\n      [\n        \"▁ともなう\",\n        -13.069143295288086\n      ],\n      [\n        \"▁信憑性\",\n        -13.069143295288086\n      ],\n      [\n        \"▁捕え\",\n        -13.069236755371094\n      ],\n      [\n        \"▁離反\",\n        -13.069253921508789\n      ],\n      [\n        \"▁似顔絵\",\n        -13.06942367553711\n      ],\n      [\n        \"verse\",\n        -13.069558143615723\n      ],\n      [\n        \"▁ブーケ\",\n        -13.06958293914795\n      ],\n      [\n        \"▁マルティン\",\n        -13.069674491882324\n      ],\n      [\n        \"▁リーズナブル\",\n        -13.069738388061523\n      ],\n      [\n        \"▁昼夜\",\n        -13.069828987121582\n      ],\n      [\n        \"▁韓流\",\n        -13.069897651672363\n      ],\n      [\n        \"▁プラットホーム\",\n        -13.069982528686523\n      ],\n      [\n        \"連絡\",\n        -13.070013999938965\n      ],\n      [\n        \"▁閉校\",\n        -13.070101737976074\n      ],\n      [\n        \"PRESS\",\n        -13.070120811462402\n      ],\n      [\n        \"▁リコール\",\n        -13.070137977600098\n      ],\n      [\n        \"ANK\",\n        -13.070144653320312\n      ],\n      [\n        \"▁NCS\",\n        -13.070204734802246\n      ],\n      [\n        \"▁Cyber\",\n        -13.070266723632812\n      ],\n      [\n        \"tribut\",\n        -13.07030963897705\n      ],\n      [\n        \"漕\",\n        -13.070542335510254\n      ],\n      [\n        \"ホーフ\",\n        -13.070600509643555\n      ],\n      [\n        \"▁決ま\",\n        -13.07071304321289\n      ],\n      [\n        \"▁真っ直ぐ\",\n        -13.070822715759277\n      ],\n      [\n        \"▁United\",\n        -13.070830345153809\n      ],\n      [\n        \"▁夕日\",\n        -13.070952415466309\n      ],\n      [\n        \"▁吐く\",\n        -13.071112632751465\n      ],\n      [\n        \"▁乳製品\",\n        -13.071170806884766\n      ],\n      [\n        \"▁あぶ\",\n        -13.071224212646484\n      ],\n      [\n        \"▁折々\",\n        -13.071603775024414\n      ],\n      [\n        \"▁スペンサー\",\n        -13.071662902832031\n      ],\n      [\n        \"▁伸長\",\n        -13.071695327758789\n      ],\n      [\n        \"要職\",\n        -13.07170295715332\n      ],\n      [\n        \"▁ブレイブ\",\n        -13.071775436401367\n      ],\n      [\n        \"▁成り立\",\n        -13.071942329406738\n      ],\n      [\n        \"▁長州藩\",\n        -13.071943283081055\n      ],\n      [\n        \"まもなく\",\n        -13.072210311889648\n      ],\n      [\n        \"KAI\",\n        -13.072257041931152\n      ],\n      [\n        \"呆\",\n        -13.072266578674316\n      ],\n      [\n        \"▁バッチ\",\n        -13.07227897644043\n      ],\n      [\n        \"▁GNU\",\n        -13.072328567504883\n      ],\n      [\n        \"▁損ね\",\n        -13.072339057922363\n      ],\n      [\n        \"kawa\",\n        -13.072410583496094\n      ],\n      [\n        \"▁サンライズ\",\n        -13.072495460510254\n      ],\n      [\n        \"鸞\",\n        -13.072504997253418\n      ],\n      [\n        \"ヒョウ\",\n        -13.072518348693848\n      ],\n      [\n        \"∇\",\n        -13.072784423828125\n      ],\n      [\n        \"▁プラセンタ\",\n        -13.072785377502441\n      ],\n      [\n        \"▁闘う\",\n        -13.073050498962402\n      ],\n      [\n        \"▁久喜\",\n        -13.07308292388916\n      ],\n      [\n        \"いなる\",\n        -13.073123931884766\n      ],\n      [\n        \"▁Last\",\n        -13.073153495788574\n      ],\n      [\n        \"▁茶会\",\n        -13.073348999023438\n      ],\n      [\n        \"▁稲垣\",\n        -13.073468208312988\n      ],\n      [\n        \"▁チワワ\",\n        -13.074189186096191\n      ],\n      [\n        \"▁叫んで\",\n        -13.074190139770508\n      ],\n      [\n        \"▁侍従\",\n        -13.074240684509277\n      ],\n      [\n        \"▁素敵です\",\n        -13.074297904968262\n      ],\n      [\n        \"▁UNIX\",\n        -13.074393272399902\n      ],\n      [\n        \"▁Virtual\",\n        -13.074470520019531\n      ],\n      [\n        \"▁呈する\",\n        -13.074470520019531\n      ],\n      [\n        \"妾\",\n        -13.074470520019531\n      ],\n      [\n        \"▁断続\",\n        -13.074540138244629\n      ],\n      [\n        \"▁電器\",\n        -13.074563980102539\n      ],\n      [\n        \"▁奪回\",\n        -13.074564933776855\n      ],\n      [\n        \"▁さらけ\",\n        -13.074660301208496\n      ],\n      [\n        \"▁皐月\",\n        -13.074751853942871\n      ],\n      [\n        \"敷金\",\n        -13.074814796447754\n      ],\n      [\n        \"kit\",\n        -13.0748291015625\n      ],\n      [\n        \"▁ファイアー\",\n        -13.074956893920898\n      ],\n      [\n        \"▁食肉\",\n        -13.07502269744873\n      ],\n      [\n        \"▁広まっ\",\n        -13.075045585632324\n      ],\n      [\n        \"▁飯島\",\n        -13.075091361999512\n      ],\n      [\n        \"絞\",\n        -13.07517147064209\n      ],\n      [\n        \"▁シクロ\",\n        -13.075200080871582\n      ],\n      [\n        \"▁ロドリゲス\",\n        -13.075313568115234\n      ],\n      [\n        \"▁鮮明に\",\n        -13.07534408569336\n      ],\n      [\n        \"▁ダーツ\",\n        -13.075349807739258\n      ],\n      [\n        \"日暮里\",\n        -13.075361251831055\n      ],\n      [\n        \"▁シュミット\",\n        -13.075432777404785\n      ],\n      [\n        \"▁たたき\",\n        -13.07553768157959\n      ],\n      [\n        \"USB\",\n        -13.07556438446045\n      ],\n      [\n        \"▁デベロッパー\",\n        -13.075594902038574\n      ],\n      [\n        \"▁ミュウミュウ\",\n        -13.075594902038574\n      ],\n      [\n        \"誅\",\n        -13.075594902038574\n      ],\n      [\n        \"クチン\",\n        -13.075620651245117\n      ],\n      [\n        \"▁仕込み\",\n        -13.075641632080078\n      ],\n      [\n        \"iwa\",\n        -13.07579517364502\n      ],\n      [\n        \"850\",\n        -13.07588005065918\n      ],\n      [\n        \"chem\",\n        -13.075949668884277\n      ],\n      [\n        \"ひゃく\",\n        -13.075970649719238\n      ],\n      [\n        \"▁カンナビノイド\",\n        -13.07615852355957\n      ],\n      [\n        \"雌\",\n        -13.076176643371582\n      ],\n      [\n        \"傾\",\n        -13.076301574707031\n      ],\n      [\n        \"▁ヒカル\",\n        -13.076315879821777\n      ],\n      [\n        \"▁保養\",\n        -13.076363563537598\n      ],\n      [\n        \"▁ジャンパー\",\n        -13.076407432556152\n      ],\n      [\n        \"▁誇った\",\n        -13.07658863067627\n      ],\n      [\n        \"▁トリニティ\",\n        -13.077019691467285\n      ],\n      [\n        \"▁唐揚げ\",\n        -13.077042579650879\n      ],\n      [\n        \"本営\",\n        -13.077187538146973\n      ],\n      [\n        \"▁矢先\",\n        -13.07719612121582\n      ],\n      [\n        \"閲\",\n        -13.077260971069336\n      ],\n      [\n        \"▁浪費\",\n        -13.077332496643066\n      ],\n      [\n        \"pla\",\n        -13.077448844909668\n      ],\n      [\n        \"1899\",\n        -13.077458381652832\n      ],\n      [\n        \"▁アライアンス\",\n        -13.077567100524902\n      ],\n      [\n        \"址\",\n        -13.077567100524902\n      ],\n      [\n        \"▁Girl\",\n        -13.077840805053711\n      ],\n      [\n        \"ソビエト\",\n        -13.078165054321289\n      ],\n      [\n        \"自民党\",\n        -13.078165054321289\n      ],\n      [\n        \"▁贈答\",\n        -13.078426361083984\n      ],\n      [\n        \"▁生還\",\n        -13.078682899475098\n      ],\n      [\n        \"蚕\",\n        -13.07868480682373\n      ],\n      [\n        \"曙\",\n        -13.078695297241211\n      ],\n      [\n        \"▁油脂\",\n        -13.078764915466309\n      ],\n      [\n        \"彷\",\n        -13.07897663116455\n      ],\n      [\n        \"▁遭う\",\n        -13.078977584838867\n      ],\n      [\n        \"blog\",\n        -13.079069137573242\n      ],\n      [\n        \"▁コンシェルジュ\",\n        -13.07926082611084\n      ],\n      [\n        \"▁トンプソン\",\n        -13.07926082611084\n      ],\n      [\n        \"▁モンテネグロ\",\n        -13.07926082611084\n      ],\n      [\n        \"▁満塁\",\n        -13.079354286193848\n      ],\n      [\n        \"およそ\",\n        -13.079490661621094\n      ],\n      [\n        \"▁PCMAX\",\n        -13.079676628112793\n      ],\n      [\n        \"▁不向き\",\n        -13.079747200012207\n      ],\n      [\n        \"▁カツオ\",\n        -13.080307960510254\n      ],\n      [\n        \"▁っぷり\",\n        -13.080403327941895\n      ],\n      [\n        \"▁交感神経\",\n        -13.080673217773438\n      ],\n      [\n        \"▁三十三\",\n        -13.080709457397461\n      ],\n      [\n        \"少女\",\n        -13.080738067626953\n      ],\n      [\n        \"▁リサイタル\",\n        -13.08095645904541\n      ],\n      [\n        \"▁パウンド\",\n        -13.080957412719727\n      ],\n      [\n        \"▁JFL\",\n        -13.081225395202637\n      ],\n      [\n        \"▁鳴らす\",\n        -13.081311225891113\n      ],\n      [\n        \"hem\",\n        -13.081321716308594\n      ],\n      [\n        \"▁追随\",\n        -13.081588745117188\n      ],\n      [\n        \"▁マスキング\",\n        -13.081639289855957\n      ],\n      [\n        \"▁DNS\",\n        -13.081729888916016\n      ],\n      [\n        \"£\",\n        -13.081805229187012\n      ],\n      [\n        \"▁ドッキング\",\n        -13.081900596618652\n      ],\n      [\n        \"OUT\",\n        -13.082037925720215\n      ],\n      [\n        \"▁ドナウ\",\n        -13.082075119018555\n      ],\n      [\n        \"▁ラバウル\",\n        -13.082088470458984\n      ],\n      [\n        \"▁深度\",\n        -13.082146644592285\n      ],\n      [\n        \"クラシック\",\n        -13.082300186157227\n      ],\n      [\n        \"▁身延\",\n        -13.082342147827148\n      ],\n      [\n        \"rich\",\n        -13.082344055175781\n      ],\n      [\n        \"酌\",\n        -13.082372665405273\n      ],\n      [\n        \"▁窮地\",\n        -13.08237361907959\n      ],\n      [\n        \"▁百選\",\n        -13.082404136657715\n      ],\n      [\n        \"▁中日ドラゴンズ\",\n        -13.082655906677246\n      ],\n      [\n        \"▁板垣\",\n        -13.082663536071777\n      ],\n      [\n        \"9,000\",\n        -13.082695007324219\n      ],\n      [\n        \"▁オッズ\",\n        -13.082754135131836\n      ],\n      [\n        \"▁挿し\",\n        -13.082829475402832\n      ],\n      [\n        \"bat\",\n        -13.082883834838867\n      ],\n      [\n        \"▁クルーザー\",\n        -13.0828857421875\n      ],\n      [\n        \"皇后\",\n        -13.083016395568848\n      ],\n      [\n        \"▁精査\",\n        -13.083025932312012\n      ],\n      [\n        \"なのに\",\n        -13.083270072937012\n      ],\n      [\n        \"▁騎馬\",\n        -13.083337783813477\n      ],\n      [\n        \"晴らし\",\n        -13.083490371704102\n      ],\n      [\n        \"▁プリペイド\",\n        -13.083505630493164\n      ],\n      [\n        \"エネルギー\",\n        -13.083582878112793\n      ],\n      [\n        \"▁おさえ\",\n        -13.083585739135742\n      ],\n      [\n        \"▁無休\",\n        -13.083634376525879\n      ],\n      [\n        \"▁ガリシア\",\n        -13.083656311035156\n      ],\n      [\n        \"Unicode\",\n        -13.083658218383789\n      ],\n      [\n        \"▁聞き入れ\",\n        -13.08366584777832\n      ],\n      [\n        \"▁みやげ\",\n        -13.083674430847168\n      ],\n      [\n        \"▁Snow\",\n        -13.083765983581543\n      ],\n      [\n        \"▁せいぜい\",\n        -13.083789825439453\n      ],\n      [\n        \"グレード\",\n        -13.08391284942627\n      ],\n      [\n        \"▁Services\",\n        -13.083932876586914\n      ],\n      [\n        \"▁瑕疵\",\n        -13.084074020385742\n      ],\n      [\n        \"▁守れ\",\n        -13.08411979675293\n      ],\n      [\n        \"▁銃器\",\n        -13.084195137023926\n      ],\n      [\n        \"▁日産自動車\",\n        -13.084385871887207\n      ],\n      [\n        \"▁Arch\",\n        -13.0845947265625\n      ],\n      [\n        \"▁拍車\",\n        -13.08464241027832\n      ],\n      [\n        \"レストラン\",\n        -13.084856986999512\n      ],\n      [\n        \"▁1,100\",\n        -13.084931373596191\n      ],\n      [\n        \"▁疑念\",\n        -13.08497428894043\n      ],\n      [\n        \"force\",\n        -13.085034370422363\n      ],\n      [\n        \"▁降雨\",\n        -13.085039138793945\n      ],\n      [\n        \"▁壊す\",\n        -13.08514404296875\n      ],\n      [\n        \"▁賛美\",\n        -13.085211753845215\n      ],\n      [\n        \"▁郷里\",\n        -13.085222244262695\n      ],\n      [\n        \"宝塚\",\n        -13.085301399230957\n      ],\n      [\n        \"サウンド\",\n        -13.085302352905273\n      ],\n      [\n        \"たまたま\",\n        -13.085320472717285\n      ],\n      [\n        \"▁発声\",\n        -13.08534049987793\n      ],\n      [\n        \"▁ガルシア\",\n        -13.085803031921387\n      ],\n      [\n        \"震災\",\n        -13.085922241210938\n      ],\n      [\n        \"偲\",\n        -13.08606243133545\n      ],\n      [\n        \"▁ヴァレン\",\n        -13.086074829101562\n      ],\n      [\n        \"▁ハウジング\",\n        -13.086101531982422\n      ],\n      [\n        \"▁アルツハイマー\",\n        -13.086346626281738\n      ],\n      [\n        \"▁助長\",\n        -13.086386680603027\n      ],\n      [\n        \"▁イージー\",\n        -13.086458206176758\n      ],\n      [\n        \"ウェスト\",\n        -13.08651065826416\n      ],\n      [\n        \"▁近づいた\",\n        -13.08715534210205\n      ],\n      [\n        \"アレクサンドリア\",\n        -13.087485313415527\n      ],\n      [\n        \"▁取り掛か\",\n        -13.087713241577148\n      ],\n      [\n        \"▁インテリジェント\",\n        -13.087769508361816\n      ],\n      [\n        \"ATO\",\n        -13.087841033935547\n      ],\n      [\n        \"▁爽やか\",\n        -13.087843894958496\n      ],\n      [\n        \"▁密閉\",\n        -13.087850570678711\n      ],\n      [\n        \"壬\",\n        -13.088053703308105\n      ],\n      [\n        \"▁チュートリアル\",\n        -13.088054656982422\n      ],\n      [\n        \"窩\",\n        -13.088054656982422\n      ],\n      [\n        \"▁design\",\n        -13.088075637817383\n      ],\n      [\n        \"筋肉\",\n        -13.08808708190918\n      ],\n      [\n        \"▁膀胱\",\n        -13.088339805603027\n      ],\n      [\n        \"長生き\",\n        -13.088519096374512\n      ],\n      [\n        \"▁寝屋川\",\n        -13.088624954223633\n      ],\n      [\n        \"▁段ボール\",\n        -13.088652610778809\n      ],\n      [\n        \"意味\",\n        -13.08871078491211\n      ],\n      [\n        \"ウォーター\",\n        -13.088841438293457\n      ],\n      [\n        \"▁color\",\n        -13.088871955871582\n      ],\n      [\n        \"▁加圧\",\n        -13.088948249816895\n      ],\n      [\n        \"▁スルタン\",\n        -13.089070320129395\n      ],\n      [\n        \"▁カージナルス\",\n        -13.089195251464844\n      ],\n      [\n        \"▁空爆\",\n        -13.08923625946045\n      ],\n      [\n        \"不慮\",\n        -13.089322090148926\n      ],\n      [\n        \"▁よしもと\",\n        -13.089325904846191\n      ],\n      [\n        \"▁自決\",\n        -13.089447021484375\n      ],\n      [\n        \"▁応対\",\n        -13.089911460876465\n      ],\n      [\n        \"▁処方箋\",\n        -13.09006118774414\n      ],\n      [\n        \"`*)\",\n        -13.090073585510254\n      ],\n      [\n        \"謹\",\n        -13.09033489227295\n      ],\n      [\n        \"▁入れ歯\",\n        -13.090335845947266\n      ],\n      [\n        \"引越\",\n        -13.0904541015625\n      ],\n      [\n        \"REE\",\n        -13.090532302856445\n      ],\n      [\n        \"▁連打\",\n        -13.090666770935059\n      ],\n      [\n        \"▁スマッシュ\",\n        -13.090740203857422\n      ],\n      [\n        \"架線\",\n        -13.090786933898926\n      ],\n      [\n        \"気象\",\n        -13.090828895568848\n      ],\n      [\n        \"▁読めば\",\n        -13.09084701538086\n      ],\n      [\n        \"メモリ\",\n        -13.090922355651855\n      ],\n      [\n        \"▁稼いだ\",\n        -13.090935707092285\n      ],\n      [\n        \"▁別個\",\n        -13.091132164001465\n      ],\n      [\n        \"▁献金\",\n        -13.091153144836426\n      ],\n      [\n        \"▁河岸\",\n        -13.091198921203613\n      ],\n      [\n        \"▁ドレスデン\",\n        -13.091264724731445\n      ],\n      [\n        \"▁割り切り\",\n        -13.091292381286621\n      ],\n      [\n        \"佐々木\",\n        -13.091336250305176\n      ],\n      [\n        \"▁洗濯物\",\n        -13.091442108154297\n      ],\n      [\n        \"▁乱入\",\n        -13.091453552246094\n      ],\n      [\n        \"▁コピペ\",\n        -13.091480255126953\n      ],\n      [\n        \"▁鯖江\",\n        -13.09148120880127\n      ],\n      [\n        \"オプション\",\n        -13.091623306274414\n      ],\n      [\n        \"▁進駐\",\n        -13.091784477233887\n      ],\n      [\n        \"▁申し付け\",\n        -13.091800689697266\n      ],\n      [\n        \"▁和装\",\n        -13.091825485229492\n      ],\n      [\n        \"オイル\",\n        -13.091845512390137\n      ],\n      [\n        \"▁カエサル\",\n        -13.09205150604248\n      ],\n      [\n        \"▁抗酸化\",\n        -13.09205150604248\n      ],\n      [\n        \"▁頑張ろう\",\n        -13.092106819152832\n      ],\n      [\n        \"土曜日\",\n        -13.092201232910156\n      ],\n      [\n        \"▁Asia\",\n        -13.092286109924316\n      ],\n      [\n        \"陥\",\n        -13.092411994934082\n      ],\n      [\n        \"体調\",\n        -13.092706680297852\n      ],\n      [\n        \"▁銃身\",\n        -13.09278678894043\n      ],\n      [\n        \"苦労\",\n        -13.09280014038086\n      ],\n      [\n        \"留学\",\n        -13.092901229858398\n      ],\n      [\n        \"▁ソプラノ\",\n        -13.092910766601562\n      ],\n      [\n        \"▁盗賊\",\n        -13.092936515808105\n      ],\n      [\n        \"▁落葉\",\n        -13.093015670776367\n      ],\n      [\n        \"▁打ち出した\",\n        -13.093165397644043\n      ],\n      [\n        \"ival\",\n        -13.093210220336914\n      ],\n      [\n        \"▁正恩\",\n        -13.093232154846191\n      ],\n      [\n        \"▁ポリマー\",\n        -13.093280792236328\n      ],\n      [\n        \"▁病変\",\n        -13.093335151672363\n      ],\n      [\n        \"▁平民\",\n        -13.09338092803955\n      ],\n      [\n        \"▁飢餓\",\n        -13.093482971191406\n      ],\n      [\n        \"▁キツネ\",\n        -13.093484878540039\n      ],\n      [\n        \"▁推挙\",\n        -13.09351634979248\n      ],\n      [\n        \"▁崇敬\",\n        -13.093517303466797\n      ],\n      [\n        \"畝\",\n        -13.093770027160645\n      ],\n      [\n        \"▁肝心の\",\n        -13.094056129455566\n      ],\n      [\n        \"▁赤ん坊\",\n        -13.094056129455566\n      ],\n      [\n        \"▁Tool\",\n        -13.094098091125488\n      ],\n      [\n        \"▁定格\",\n        -13.094124794006348\n      ],\n      [\n        \"▁立て直し\",\n        -13.09414291381836\n      ],\n      [\n        \"▁沈む\",\n        -13.094267845153809\n      ],\n      [\n        \"ISO\",\n        -13.0942964553833\n      ],\n      [\n        \"▁Road\",\n        -13.094331741333008\n      ],\n      [\n        \"▁ぎん\",\n        -13.094407081604004\n      ],\n      [\n        \"▁プラネット\",\n        -13.094658851623535\n      ],\n      [\n        \"ür\",\n        -13.094847679138184\n      ],\n      [\n        \"▁併せ\",\n        -13.094888687133789\n      ],\n      [\n        \"▁予知\",\n        -13.094921112060547\n      ],\n      [\n        \"pre\",\n        -13.094926834106445\n      ],\n      [\n        \"▁聖歌\",\n        -13.094934463500977\n      ],\n      [\n        \"berry\",\n        -13.095130920410156\n      ],\n      [\n        \"▁枯渇\",\n        -13.095203399658203\n      ],\n      [\n        \"▁生まれ育った\",\n        -13.095203399658203\n      ],\n      [\n        \"▁オーラル\",\n        -13.09521198272705\n      ],\n      [\n        \"▁取り替え\",\n        -13.095293998718262\n      ],\n      [\n        \"▁縁組\",\n        -13.095338821411133\n      ],\n      [\n        \"ello\",\n        -13.095362663269043\n      ],\n      [\n        \"乏\",\n        -13.095479011535645\n      ],\n      [\n        \"▁ウレタン\",\n        -13.095490455627441\n      ],\n      [\n        \"▁こたつ\",\n        -13.09549331665039\n      ],\n      [\n        \"▁放牧\",\n        -13.095588684082031\n      ],\n      [\n        \"´∀`\",\n        -13.095707893371582\n      ],\n      [\n        \"▁York\",\n        -13.095783233642578\n      ],\n      [\n        \"▁ファイヤー\",\n        -13.095800399780273\n      ],\n      [\n        \"RIN\",\n        -13.096014022827148\n      ],\n      [\n        \"▁結論付け\",\n        -13.096028327941895\n      ],\n      [\n        \"▁暮らせる\",\n        -13.096065521240234\n      ],\n      [\n        \"▁改易\",\n        -13.096126556396484\n      ],\n      [\n        \"疾\",\n        -13.096351623535156\n      ],\n      [\n        \"Sourc\",\n        -13.09653377532959\n      ],\n      [\n        \"▁特選\",\n        -13.0966157913208\n      ],\n      [\n        \"▁送れる\",\n        -13.096824645996094\n      ],\n      [\n        \"▁取り除き\",\n        -13.096927642822266\n      ],\n      [\n        \"▁グラハム\",\n        -13.097023010253906\n      ],\n      [\n        \"可愛い\",\n        -13.09711742401123\n      ],\n      [\n        \"▁草加\",\n        -13.097146987915039\n      ],\n      [\n        \"スタイル\",\n        -13.097171783447266\n      ],\n      [\n        \"▁トロンボーン\",\n        -13.097214698791504\n      ],\n      [\n        \"嗜\",\n        -13.097214698791504\n      ],\n      [\n        \"退き\",\n        -13.097421646118164\n      ],\n      [\n        \"▁博文\",\n        -13.097480773925781\n      ],\n      [\n        \"▁PARCO\",\n        -13.097790718078613\n      ],\n      [\n        \"寅\",\n        -13.097989082336426\n      ],\n      [\n        \"▁菊花\",\n        -13.098189353942871\n      ],\n      [\n        \"▁RAW\",\n        -13.098241806030273\n      ],\n      [\n        \"▁コンパイラ\",\n        -13.098368644714355\n      ],\n      [\n        \"▁お参り\",\n        -13.098374366760254\n      ],\n      [\n        \"▁デンバー\",\n        -13.098465919494629\n      ],\n      [\n        \"▁声援\",\n        -13.098748207092285\n      ],\n      [\n        \"▁沈んで\",\n        -13.098857879638672\n      ],\n      [\n        \"プレミアム\",\n        -13.098857879638672\n      ],\n      [\n        \"▁御家人\",\n        -13.098942756652832\n      ],\n      [\n        \"▁筑豊\",\n        -13.098942756652832\n      ],\n      [\n        \"▁於ける\",\n        -13.098984718322754\n      ],\n      [\n        \"▁中津川\",\n        -13.09924030303955\n      ],\n      [\n        \"▁Movie\",\n        -13.099258422851562\n      ],\n      [\n        \"▁水俣\",\n        -13.099685668945312\n      ],\n      [\n        \"▁差額\",\n        -13.09971809387207\n      ],\n      [\n        \"▁落とし穴\",\n        -13.099858283996582\n      ],\n      [\n        \"▁ハワイアン\",\n        -13.099881172180176\n      ],\n      [\n        \"暉\",\n        -13.10009479522705\n      ],\n      [\n        \"▁腹痛\",\n        -13.100220680236816\n      ],\n      [\n        \"▁関門\",\n        -13.100531578063965\n      ],\n      [\n        \"▁効き目\",\n        -13.10074234008789\n      ],\n      [\n        \"蕃\",\n        -13.100959777832031\n      ],\n      [\n        \"▁しんどい\",\n        -13.100995063781738\n      ],\n      [\n        \"▁磨いて\",\n        -13.101123809814453\n      ],\n      [\n        \"▁摂食\",\n        -13.10119342803955\n      ],\n      [\n        \"▁脚色\",\n        -13.101197242736816\n      ],\n      [\n        \"▁みずから\",\n        -13.101303100585938\n      ],\n      [\n        \"▁スパイラル\",\n        -13.101675987243652\n      ],\n      [\n        \"難しい\",\n        -13.101788520812988\n      ],\n      [\n        \"NTT\",\n        -13.102203369140625\n      ],\n      [\n        \"▁寄席\",\n        -13.102229118347168\n      ],\n      [\n        \"▁ランドセル\",\n        -13.102276802062988\n      ],\n      [\n        \"▁インバータ\",\n        -13.102310180664062\n      ],\n      [\n        \"▁直進\",\n        -13.102322578430176\n      ],\n      [\n        \"▁落城\",\n        -13.102322578430176\n      ],\n      [\n        \"寇\",\n        -13.10240364074707\n      ],\n      [\n        \"▁北魏\",\n        -13.102437973022461\n      ],\n      [\n        \"nik\",\n        -13.10268783569336\n      ],\n      [\n        \"反応\",\n        -13.102733612060547\n      ],\n      [\n        \"▁切腹\",\n        -13.102860450744629\n      ],\n      [\n        \"▁福建\",\n        -13.102949142456055\n      ],\n      [\n        \"▁被疑者\",\n        -13.102982521057129\n      ],\n      [\n        \"▁亜目\",\n        -13.103006362915039\n      ],\n      [\n        \"▁錦糸\",\n        -13.103068351745605\n      ],\n      [\n        \"▁クエリ\",\n        -13.103069305419922\n      ],\n      [\n        \"▁試着\",\n        -13.1032075881958\n      ],\n      [\n        \"紳\",\n        -13.103269577026367\n      ],\n      [\n        \"▁コンベンション\",\n        -13.103271484375\n      ],\n      [\n        \"▁相次ぐ\",\n        -13.103271484375\n      ],\n      [\n        \"▁酪農\",\n        -13.103271484375\n      ],\n      [\n        \"配送\",\n        -13.10339069366455\n      ],\n      [\n        \"ized\",\n        -13.10340404510498\n      ],\n      [\n        \"park\",\n        -13.103509902954102\n      ],\n      [\n        \"▁被験者\",\n        -13.103561401367188\n      ],\n      [\n        \"▁見なす\",\n        -13.103592872619629\n      ],\n      [\n        \"uh\",\n        -13.103608131408691\n      ],\n      [\n        \"サンシア\",\n        -13.103631019592285\n      ],\n      [\n        \"▁まつ毛\",\n        -13.103816032409668\n      ],\n      [\n        \"▁ウィスコンシ\",\n        -13.103850364685059\n      ],\n      [\n        \"▁レフェリー\",\n        -13.103850364685059\n      ],\n      [\n        \"▁オリエンタル\",\n        -13.104140281677246\n      ],\n      [\n        \"▁引き締ま\",\n        -13.104143142700195\n      ],\n      [\n        \"固定\",\n        -13.104209899902344\n      ],\n      [\n        \"▁裂け\",\n        -13.104288101196289\n      ],\n      [\n        \"アマチュア\",\n        -13.104391098022461\n      ],\n      [\n        \"▁札所\",\n        -13.104405403137207\n      ],\n      [\n        \"▁ラベンダー\",\n        -13.104430198669434\n      ],\n      [\n        \"▁祝賀\",\n        -13.10444164276123\n      ],\n      [\n        \"▁巡査\",\n        -13.10448932647705\n      ],\n      [\n        \"▁TEE\",\n        -13.10453987121582\n      ],\n      [\n        \"青年\",\n        -13.104562759399414\n      ],\n      [\n        \"▁リテラ\",\n        -13.10484790802002\n      ],\n      [\n        \"捜\",\n        -13.104955673217773\n      ],\n      [\n        \"м\",\n        -13.105008125305176\n      ],\n      [\n        \"▁アクシデント\",\n        -13.105009078979492\n      ],\n      [\n        \"▁高千穂\",\n        -13.105009078979492\n      ],\n      [\n        \"躯\",\n        -13.105009078979492\n      ],\n      [\n        \"▁帳簿\",\n        -13.105016708374023\n      ],\n      [\n        \"錆\",\n        -13.105290412902832\n      ],\n      [\n        \"▁ケンコー\",\n        -13.105292320251465\n      ],\n      [\n        \"▁模試\",\n        -13.10529899597168\n      ],\n      [\n        \"▁立ち寄った\",\n        -13.105299949645996\n      ],\n      [\n        \"▁ジョルジュ\",\n        -13.105345726013184\n      ],\n      [\n        \"全曲\",\n        -13.105488777160645\n      ],\n      [\n        \"ポルトガル\",\n        -13.105559349060059\n      ],\n      [\n        \"▁好ましい\",\n        -13.105850219726562\n      ],\n      [\n        \"Europe\",\n        -13.106175422668457\n      ],\n      [\n        \"▁覚まし\",\n        -13.106293678283691\n      ],\n      [\n        \"▁さとみ\",\n        -13.106411933898926\n      ],\n      [\n        \"訪問\",\n        -13.106459617614746\n      ],\n      [\n        \"商科\",\n        -13.106544494628906\n      ],\n      [\n        \"▁パウル\",\n        -13.106654167175293\n      ],\n      [\n        \"来週\",\n        -13.10665512084961\n      ],\n      [\n        \"オーネ\",\n        -13.10672378540039\n      ],\n      [\n        \"淳\",\n        -13.106730461120605\n      ],\n      [\n        \"締\",\n        -13.106794357299805\n      ],\n      [\n        \"職業\",\n        -13.106889724731445\n      ],\n      [\n        \"▁ノズル\",\n        -13.10690975189209\n      ],\n      [\n        \"普\",\n        -13.10692024230957\n      ],\n      [\n        \"MAS\",\n        -13.10693359375\n      ],\n      [\n        \"mine\",\n        -13.10697078704834\n      ],\n      [\n        \"日曜日\",\n        -13.107022285461426\n      ],\n      [\n        \"▁function\",\n        -13.107040405273438\n      ],\n      [\n        \"▁ジャーナリズム\",\n        -13.107040405273438\n      ],\n      [\n        \"▁続投\",\n        -13.107099533081055\n      ],\n      [\n        \"険\",\n        -13.107230186462402\n      ],\n      [\n        \"▁叩か\",\n        -13.107331275939941\n      ],\n      [\n        \"▁おろか\",\n        -13.107401847839355\n      ],\n      [\n        \"幼稚園\",\n        -13.1076078414917\n      ],\n      [\n        \"▁ぶつかり\",\n        -13.107621192932129\n      ],\n      [\n        \"▁恵那\",\n        -13.107743263244629\n      ],\n      [\n        \"▁Health\",\n        -13.107911109924316\n      ],\n      [\n        \"▁passwor\",\n        -13.107915878295898\n      ],\n      [\n        \"▁ジェネレータ\",\n        -13.108149528503418\n      ],\n      [\n        \"忘\",\n        -13.108431816101074\n      ],\n      [\n        \"▁榎本\",\n        -13.108495712280273\n      ],\n      [\n        \"▁チューリッヒ\",\n        -13.108502388000488\n      ],\n      [\n        \"▁試写\",\n        -13.108537673950195\n      ],\n      [\n        \"pad\",\n        -13.108650207519531\n      ],\n      [\n        \"▁秀忠\",\n        -13.108753204345703\n      ],\n      [\n        \"▁交わす\",\n        -13.108915328979492\n      ],\n      [\n        \"▁込もう\",\n        -13.109137535095215\n      ],\n      [\n        \"卜\",\n        -13.109365463256836\n      ],\n      [\n        \"▁比企\",\n        -13.10937213897705\n      ],\n      [\n        \"▁加重\",\n        -13.109405517578125\n      ],\n      [\n        \"880\",\n        -13.109665870666504\n      ],\n      [\n        \"▁執った\",\n        -13.109901428222656\n      ],\n      [\n        \"▁故事\",\n        -13.110318183898926\n      ],\n      [\n        \"報告\",\n        -13.110396385192871\n      ],\n      [\n        \"▁対向\",\n        -13.110522270202637\n      ],\n      [\n        \"▁チュニジア\",\n        -13.110530853271484\n      ],\n      [\n        \"▁テイルズ\",\n        -13.110845565795898\n      ],\n      [\n        \"▁高野山\",\n        -13.110933303833008\n      ],\n      [\n        \"▁釣れ\",\n        -13.110990524291992\n      ],\n      [\n        \"取水\",\n        -13.111083984375\n      ],\n      [\n        \"Ζ\",\n        -13.111113548278809\n      ],\n      [\n        \"呼吸\",\n        -13.111137390136719\n      ],\n      [\n        \"▁振った\",\n        -13.111254692077637\n      ],\n      [\n        \"LEX\",\n        -13.111260414123535\n      ],\n      [\n        \"▁JAM\",\n        -13.111263275146484\n      ],\n      [\n        \"▁居室\",\n        -13.11128044128418\n      ],\n      [\n        \"EACH\",\n        -13.111374855041504\n      ],\n      [\n        \"▁併記\",\n        -13.111562728881836\n      ],\n      [\n        \"▁イヴァン\",\n        -13.111661911010742\n      ],\n      [\n        \"▁弾劾\",\n        -13.111991882324219\n      ],\n      [\n        \"oki\",\n        -13.11209487915039\n      ],\n      [\n        \"▁ジョシュ\",\n        -13.11221694946289\n      ],\n      [\n        \"▁擬似\",\n        -13.11228084564209\n      ],\n      [\n        \"▁winter\",\n        -13.112281799316406\n      ],\n      [\n        \"▁踏んだ\",\n        -13.112313270568848\n      ],\n      [\n        \"▁デコレーション\",\n        -13.112322807312012\n      ],\n      [\n        \"▁Model\",\n        -13.112434387207031\n      ],\n      [\n        \"▁渤海\",\n        -13.11257266998291\n      ],\n      [\n        \"▁外構\",\n        -13.113130569458008\n      ],\n      [\n        \"▁飛び降り\",\n        -13.113157272338867\n      ],\n      [\n        \"▁貯まる\",\n        -13.113212585449219\n      ],\n      [\n        \"▁唐辛子\",\n        -13.113449096679688\n      ],\n      [\n        \"▁応力\",\n        -13.113519668579102\n      ],\n      [\n        \"▁急速\",\n        -13.113727569580078\n      ],\n      [\n        \"List\",\n        -13.11373519897461\n      ],\n      [\n        \"クウェート\",\n        -13.113743782043457\n      ],\n      [\n        \"妖\",\n        -13.11407470703125\n      ],\n      [\n        \"▁劣勢\",\n        -13.11415958404541\n      ],\n      [\n        \"コーポレーション\",\n        -13.11436939239502\n      ],\n      [\n        \"▁バッファ\",\n        -13.114459991455078\n      ],\n      [\n        \"▁好転\",\n        -13.114497184753418\n      ],\n      [\n        \"ちょっとした\",\n        -13.114521980285645\n      ],\n      [\n        \"▁変調\",\n        -13.1145658493042\n      ],\n      [\n        \"▁CHANNEL\",\n        -13.114912033081055\n      ],\n      [\n        \"▁ケビン\",\n        -13.114968299865723\n      ],\n      [\n        \"▁チート\",\n        -13.115082740783691\n      ],\n      [\n        \"▁彩色\",\n        -13.11508560180664\n      ],\n      [\n        \"蔽\",\n        -13.115194320678711\n      ],\n      [\n        \"▁癒や\",\n        -13.115256309509277\n      ],\n      [\n        \"▁花序\",\n        -13.115375518798828\n      ],\n      [\n        \"▁マーキュリー\",\n        -13.115497589111328\n      ],\n      [\n        \"▁浮いて\",\n        -13.115630149841309\n      ],\n      [\n        \"藁\",\n        -13.115790367126465\n      ],\n      [\n        \"▁随一\",\n        -13.11579704284668\n      ],\n      [\n        \"▁ピストル\",\n        -13.115802764892578\n      ],\n      [\n        \"▁安佐\",\n        -13.116036415100098\n      ],\n      [\n        \"▁座談\",\n        -13.116079330444336\n      ],\n      [\n        \"▁ブランデンブルク\",\n        -13.116083145141602\n      ],\n      [\n        \"▁須磨\",\n        -13.116114616394043\n      ],\n      [\n        \"▁Walk\",\n        -13.1163330078125\n      ],\n      [\n        \"▁技量\",\n        -13.116351127624512\n      ],\n      [\n        \"▁屏風\",\n        -13.116375923156738\n      ],\n      [\n        \"▁確執\",\n        -13.116375923156738\n      ],\n      [\n        \"mart\",\n        -13.116461753845215\n      ],\n      [\n        \"▁モーメント\",\n        -13.116933822631836\n      ],\n      [\n        \"▁染料\",\n        -13.116998672485352\n      ],\n      [\n        \"▁必死で\",\n        -13.117042541503906\n      ],\n      [\n        \"▁恩師\",\n        -13.117084503173828\n      ],\n      [\n        \"厭\",\n        -13.117256164550781\n      ],\n      [\n        \"▁参政\",\n        -13.117365837097168\n      ],\n      [\n        \"▁脱いで\",\n        -13.117453575134277\n      ],\n      [\n        \"▁幽閉\",\n        -13.117570877075195\n      ],\n      [\n        \"▁音符\",\n        -13.11772632598877\n      ],\n      [\n        \"▁アントワー\",\n        -13.117851257324219\n      ],\n      [\n        \"▁カーソル\",\n        -13.117851257324219\n      ],\n      [\n        \"ッツェ\",\n        -13.11793327331543\n      ],\n      [\n        \"▁細身\",\n        -13.117997169494629\n      ],\n      [\n        \"涌\",\n        -13.118136405944824\n      ],\n      [\n        \"▁切ない\",\n        -13.118206977844238\n      ],\n      [\n        \"▁スラング\",\n        -13.118280410766602\n      ],\n      [\n        \"▁浸か\",\n        -13.11851692199707\n      ],\n      [\n        \"▁がちに\",\n        -13.11857795715332\n      ],\n      [\n        \"oda\",\n        -13.11868953704834\n      ],\n      [\n        \"▁凶悪\",\n        -13.118724822998047\n      ],\n      [\n        \"▽\",\n        -13.118803024291992\n      ],\n      [\n        \"▁div\",\n        -13.118828773498535\n      ],\n      [\n        \"▁NTR\",\n        -13.118898391723633\n      ],\n      [\n        \"▁岡部\",\n        -13.1189546585083\n      ],\n      [\n        \"¯\",\n        -13.119017601013184\n      ],\n      [\n        \"▁向こう側\",\n        -13.119044303894043\n      ],\n      [\n        \"▁Make\",\n        -13.11916732788086\n      ],\n      [\n        \"▁謙信\",\n        -13.119171142578125\n      ],\n      [\n        \",000,000\",\n        -13.119308471679688\n      ],\n      [\n        \"キホーテ\",\n        -13.119312286376953\n      ],\n      [\n        \"▁突っ込んで\",\n        -13.119528770446777\n      ],\n      [\n        \"▁蒲郡\",\n        -13.119606971740723\n      ],\n      [\n        \"シズム\",\n        -13.11962890625\n      ],\n      [\n        \"1895\",\n        -13.119723320007324\n      ],\n      [\n        \"▁敬老\",\n        -13.119733810424805\n      ],\n      [\n        \"▁手渡し\",\n        -13.119877815246582\n      ],\n      [\n        \"▁議定書\",\n        -13.11989974975586\n      ],\n      [\n        \"▁Victor\",\n        -13.12024211883545\n      ],\n      [\n        \"▁取り締まり\",\n        -13.120268821716309\n      ],\n      [\n        \"枚\",\n        -13.120284080505371\n      ],\n      [\n        \"▁いつしか\",\n        -13.12031078338623\n      ],\n      [\n        \"▁デフレ\",\n        -13.120360374450684\n      ],\n      [\n        \"▁instagram\",\n        -13.120488166809082\n      ],\n      [\n        \"▁悪質\",\n        -13.120601654052734\n      ],\n      [\n        \"▁ほんとうに\",\n        -13.120782852172852\n      ],\n      [\n        \"▁オマージュ\",\n        -13.120782852172852\n      ],\n      [\n        \"▁トライアングル\",\n        -13.120782852172852\n      ],\n      [\n        \"▁行き詰ま\",\n        -13.120792388916016\n      ],\n      [\n        \"iber\",\n        -13.120890617370605\n      ],\n      [\n        \"▁ランジェリー\",\n        -13.121082305908203\n      ],\n      [\n        \"ぎょ\",\n        -13.121089935302734\n      ],\n      [\n        \"▁泣いた\",\n        -13.121129035949707\n      ],\n      [\n        \"▁取ろう\",\n        -13.121559143066406\n      ],\n      [\n        \"辣\",\n        -13.12166690826416\n      ],\n      [\n        \"▁ロープウェイ\",\n        -13.121755599975586\n      ],\n      [\n        \"▁降雪\",\n        -13.121774673461914\n      ],\n      [\n        \"▁リアクション\",\n        -13.121800422668457\n      ],\n      [\n        \"▁言い伝え\",\n        -13.121962547302246\n      ],\n      [\n        \"▁陳情\",\n        -13.122138023376465\n      ],\n      [\n        \"¡\",\n        -13.1222562789917\n      ],\n      [\n        \"▁マドンナ\",\n        -13.1222562789917\n      ],\n      [\n        \"▁間に合\",\n        -13.122488975524902\n      ],\n      [\n        \"掟\",\n        -13.122550964355469\n      ],\n      [\n        \"▁落書き\",\n        -13.122659683227539\n      ],\n      [\n        \"▁懸命に\",\n        -13.122845649719238\n      ],\n      [\n        \"▁幻覚\",\n        -13.122950553894043\n      ],\n      [\n        \"▁Film\",\n        -13.123043060302734\n      ],\n      [\n        \"▁スタント\",\n        -13.123051643371582\n      ],\n      [\n        \"▁リポジトリ\",\n        -13.123141288757324\n      ],\n      [\n        \"ウァ\",\n        -13.123188018798828\n      ],\n      [\n        \"▁皇居\",\n        -13.123279571533203\n      ],\n      [\n        \"▁早起き\",\n        -13.123435974121094\n      ],\n      [\n        \"▁ボカロ\",\n        -13.12343978881836\n      ],\n      [\n        \"▁商務\",\n        -13.123554229736328\n      ],\n      [\n        \"冬期\",\n        -13.123822212219238\n      ],\n      [\n        \"án\",\n        -13.123825073242188\n      ],\n      [\n        \"胃\",\n        -13.123851776123047\n      ],\n      [\n        \"仲間\",\n        -13.1239652633667\n      ],\n      [\n        \"oca\",\n        -13.124109268188477\n      ],\n      [\n        \"▁イチロー\",\n        -13.124218940734863\n      ],\n      [\n        \"枕\",\n        -13.12443733215332\n      ],\n      [\n        \"▁デイトナ\",\n        -13.124619483947754\n      ],\n      [\n        \"パスワード\",\n        -13.124811172485352\n      ],\n      [\n        \"▁武漢\",\n        -13.124927520751953\n      ],\n      [\n        \"▁振り返った\",\n        -13.124940872192383\n      ],\n      [\n        \"ヘイト\",\n        -13.124954223632812\n      ],\n      [\n        \"▁ランドマーク\",\n        -13.124959945678711\n      ],\n      [\n        \"▁振り付け\",\n        -13.125349998474121\n      ],\n      [\n        \"▁原付\",\n        -13.12541389465332\n      ],\n      [\n        \"麓\",\n        -13.125428199768066\n      ],\n      [\n        \"❗\",\n        -13.125504493713379\n      ],\n      [\n        \"諫\",\n        -13.125504493713379\n      ],\n      [\n        \"鱗\",\n        -13.125641822814941\n      ],\n      [\n        \"状況\",\n        -13.12578296661377\n      ],\n      [\n        \"▁牽制\",\n        -13.125800132751465\n      ],\n      [\n        \"侮\",\n        -13.125800132751465\n      ],\n      [\n        \"space\",\n        -13.125986099243164\n      ],\n      [\n        \"▁停め\",\n        -13.126082420349121\n      ],\n      [\n        \"奔\",\n        -13.126093864440918\n      ],\n      [\n        \"▁伽藍\",\n        -13.126096725463867\n      ],\n      [\n        \"榮\",\n        -13.126096725463867\n      ],\n      [\n        \"▁ミッドフィールダー\",\n        -13.126392364501953\n      ],\n      [\n        \"▁傲慢\",\n        -13.126392364501953\n      ],\n      [\n        \"▁サイパン\",\n        -13.126542091369629\n      ],\n      [\n        \"▁至福\",\n        -13.126786231994629\n      ],\n      [\n        \"▁ウィザード\",\n        -13.126843452453613\n      ],\n      [\n        \"▁オークリー\",\n        -13.126862525939941\n      ],\n      [\n        \"▁払い戻し\",\n        -13.126985549926758\n      ],\n      [\n        \"▁ぐるぐる\",\n        -13.127281188964844\n      ],\n      [\n        \"▁捻出\",\n        -13.127283096313477\n      ],\n      [\n        \"▁茶碗\",\n        -13.127297401428223\n      ],\n      [\n        \"▁干支\",\n        -13.127324104309082\n      ],\n      [\n        \"▁弦楽器\",\n        -13.127346992492676\n      ],\n      [\n        \"アルプス\",\n        -13.127381324768066\n      ],\n      [\n        \"▁true\",\n        -13.127684593200684\n      ],\n      [\n        \"操作\",\n        -13.12790584564209\n      ],\n      [\n        \"▁葉っぱ\",\n        -13.127923965454102\n      ],\n      [\n        \"▁納言\",\n        -13.1279935836792\n      ],\n      [\n        \"▁ウインドウ\",\n        -13.128016471862793\n      ],\n      [\n        \"脅\",\n        -13.128165245056152\n      ],\n      [\n        \"聚\",\n        -13.12817096710205\n      ],\n      [\n        \"形式\",\n        -13.128182411193848\n      ],\n      [\n        \"▁アンゴラ\",\n        -13.128186225891113\n      ],\n      [\n        \"ヶ浜\",\n        -13.128305435180664\n      ],\n      [\n        \"▁エディンバラ\",\n        -13.128467559814453\n      ],\n      [\n        \"▁見捨て\",\n        -13.12846851348877\n      ],\n      [\n        \"Metacritic\",\n        -13.128764152526855\n      ],\n      [\n        \"▁Friend\",\n        -13.128764152526855\n      ],\n      [\n        \"▁ドーピング\",\n        -13.128808975219727\n      ],\n      [\n        \"▁琴平\",\n        -13.12883472442627\n      ],\n      [\n        \"▁久美子\",\n        -13.128836631774902\n      ],\n      [\n        \"▁リバティ\",\n        -13.128878593444824\n      ],\n      [\n        \"▁セグンダ\",\n        -13.129060745239258\n      ],\n      [\n        \"▁who\",\n        -13.129172325134277\n      ],\n      [\n        \"掲\",\n        -13.12934398651123\n      ],\n      [\n        \"▁エメラルド\",\n        -13.12935733795166\n      ],\n      [\n        \"▁儒学\",\n        -13.129358291625977\n      ],\n      [\n        \"錐\",\n        -13.129430770874023\n      ],\n      [\n        \"▁鬼灯\",\n        -13.12944507598877\n      ],\n      [\n        \"▁presents\",\n        -13.129523277282715\n      ],\n      [\n        \"消防\",\n        -13.12957763671875\n      ],\n      [\n        \"▁昇華\",\n        -13.12961196899414\n      ],\n      [\n        \"cell\",\n        -13.129629135131836\n      ],\n      [\n        \"▁ひっそり\",\n        -13.129654884338379\n      ],\n      [\n        \"▁Championship\",\n        -13.129655838012695\n      ],\n      [\n        \"ッチョ\",\n        -13.129666328430176\n      ],\n      [\n        \"▁降ろし\",\n        -13.129705429077148\n      ],\n      [\n        \"▁ナンバーワン\",\n        -13.12993335723877\n      ],\n      [\n        \"▁請け\",\n        -13.129997253417969\n      ],\n      [\n        \"▁キャラバン\",\n        -13.130009651184082\n      ],\n      [\n        \"▁スタミナ\",\n        -13.130011558532715\n      ],\n      [\n        \"地下鉄\",\n        -13.130155563354492\n      ],\n      [\n        \"▁ハノイ\",\n        -13.130169868469238\n      ],\n      [\n        \"▁葡萄\",\n        -13.1302490234375\n      ],\n      [\n        \"LIGHT\",\n        -13.130263328552246\n      ],\n      [\n        \"▁GATE\",\n        -13.130465507507324\n      ],\n      [\n        \"▁ヤバイ\",\n        -13.13049030303955\n      ],\n      [\n        \"▁折りたたむ\",\n        -13.130546569824219\n      ],\n      [\n        \"▁飛翔\",\n        -13.130572319030762\n      ],\n      [\n        \"▁顔料\",\n        -13.13057804107666\n      ],\n      [\n        \"▁逃す\",\n        -13.130821228027344\n      ],\n      [\n        \"Time\",\n        -13.13087272644043\n      ],\n      [\n        \"取引\",\n        -13.131308555603027\n      ],\n      [\n        \"▁観衆\",\n        -13.131361961364746\n      ],\n      [\n        \"About\",\n        -13.131607055664062\n      ],\n      [\n        \"▁プラトン\",\n        -13.13170051574707\n      ],\n      [\n        \"▁謀反\",\n        -13.131736755371094\n      ],\n      [\n        \"ビョ\",\n        -13.131970405578613\n      ],\n      [\n        \"▁リペア\",\n        -13.132002830505371\n      ],\n      [\n        \"▁クライスラー\",\n        -13.132034301757812\n      ],\n      [\n        \"マインドフルネス\",\n        -13.132034301757812\n      ],\n      [\n        \"▁理容\",\n        -13.132158279418945\n      ],\n      [\n        \"▁キャラメル\",\n        -13.13228988647461\n      ],\n      [\n        \"▁篠山\",\n        -13.132591247558594\n      ],\n      [\n        \"郊\",\n        -13.13260555267334\n      ],\n      [\n        \"▁ミディアム\",\n        -13.13262939453125\n      ],\n      [\n        \"▁争点\",\n        -13.132692337036133\n      ],\n      [\n        \"▁除名\",\n        -13.132820129394531\n      ],\n      [\n        \"▁Platform\",\n        -13.132927894592285\n      ],\n      [\n        \"▁うれしかった\",\n        -13.132927894592285\n      ],\n      [\n        \"▁スイミング\",\n        -13.132964134216309\n      ],\n      [\n        \"プロモーション\",\n        -13.133125305175781\n      ],\n      [\n        \"Build\",\n        -13.1332426071167\n      ],\n      [\n        \"▁投降\",\n        -13.133306503295898\n      ],\n      [\n        \"ellow\",\n        -13.133355140686035\n      ],\n      [\n        \"貯\",\n        -13.133382797241211\n      ],\n      [\n        \"▁鮮度\",\n        -13.133524894714355\n      ],\n      [\n        \"▁クエン酸\",\n        -13.133822441101074\n      ],\n      [\n        \"劫\",\n        -13.133822441101074\n      ],\n      [\n        \"狸\",\n        -13.133822441101074\n      ],\n      [\n        \"▁ミハイル\",\n        -13.134119987487793\n      ],\n      [\n        \"▁浙江\",\n        -13.134119987487793\n      ],\n      [\n        \"▁香辛料\",\n        -13.134119987487793\n      ],\n      [\n        \"▁たどる\",\n        -13.134122848510742\n      ],\n      [\n        \"▁カシオ\",\n        -13.13416576385498\n      ],\n      [\n        \"疱\",\n        -13.134418487548828\n      ],\n      [\n        \"ヴィット\",\n        -13.1344633102417\n      ],\n      [\n        \"▁エイター\",\n        -13.134692192077637\n      ],\n      [\n        \"▁パンタグラフ\",\n        -13.134716987609863\n      ],\n      [\n        \"▁ダウンベスト\",\n        -13.134817123413086\n      ],\n      [\n        \"▁ソリッド\",\n        -13.135085105895996\n      ],\n      [\n        \"未経験\",\n        -13.135258674621582\n      ],\n      [\n        \"▁Final\",\n        -13.135401725769043\n      ],\n      [\n        \"▁スチュワート\",\n        -13.13591194152832\n      ],\n      [\n        \"▁合祀\",\n        -13.135939598083496\n      ],\n      [\n        \"開始\",\n        -13.135940551757812\n      ],\n      [\n        \"OKI\",\n        -13.13613224029541\n      ],\n      [\n        \"▁交野\",\n        -13.136157035827637\n      ],\n      [\n        \"復古\",\n        -13.136186599731445\n      ],\n      [\n        \"▁浮き彫り\",\n        -13.136211395263672\n      ],\n      [\n        \"顧\",\n        -13.13643741607666\n      ],\n      [\n        \"▁ゆうちょ\",\n        -13.136480331420898\n      ],\n      [\n        \"▁開墾\",\n        -13.136518478393555\n      ],\n      [\n        \"▁open\",\n        -13.13652515411377\n      ],\n      [\n        \"交換\",\n        -13.136544227600098\n      ],\n      [\n        \"▁ロマンティック\",\n        -13.136585235595703\n      ],\n      [\n        \"▁義昭\",\n        -13.136768341064453\n      ],\n      [\n        \"▁Album\",\n        -13.136809349060059\n      ],\n      [\n        \"▁絨毯\",\n        -13.136809349060059\n      ],\n      [\n        \"▁引きずり\",\n        -13.136810302734375\n      ],\n      [\n        \"▁TYPE\",\n        -13.136811256408691\n      ],\n      [\n        \"▁侵食\",\n        -13.13692569732666\n      ],\n      [\n        \"▁印字\",\n        -13.13693618774414\n      ],\n      [\n        \"iOS\",\n        -13.137396812438965\n      ],\n      [\n        \"▁ワーグナー\",\n        -13.137408256530762\n      ],\n      [\n        \"▁雨漏り\",\n        -13.137408256530762\n      ],\n      [\n        \"璃\",\n        -13.137408256530762\n      ],\n      [\n        \"▁天台宗\",\n        -13.138007164001465\n      ],\n      [\n        \"▁泳いで\",\n        -13.138025283813477\n      ],\n      [\n        \"▁即効\",\n        -13.13806438446045\n      ],\n      [\n        \"▁joi\",\n        -13.138110160827637\n      ],\n      [\n        \"ault\",\n        -13.138184547424316\n      ],\n      [\n        \"▁歓声\",\n        -13.138365745544434\n      ],\n      [\n        \"▁重なった\",\n        -13.13843822479248\n      ],\n      [\n        \"▁Earth\",\n        -13.138607025146484\n      ],\n      [\n        \"講演\",\n        -13.138676643371582\n      ],\n      [\n        \"▁キャッシュレス\",\n        -13.13869571685791\n      ],\n      [\n        \"再生\",\n        -13.138720512390137\n      ],\n      [\n        \"▁清涼\",\n        -13.138768196105957\n      ],\n      [\n        \"▁変則\",\n        -13.138901710510254\n      ],\n      [\n        \"▁伺う\",\n        -13.138908386230469\n      ],\n      [\n        \"▁衣裳\",\n        -13.138909339904785\n      ],\n      [\n        \"與\",\n        -13.139205932617188\n      ],\n      [\n        \"滞\",\n        -13.13941764831543\n      ],\n      [\n        \"▁浴槽\",\n        -13.139518737792969\n      ],\n      [\n        \"楠\",\n        -13.13973331451416\n      ],\n      [\n        \"▁叢書\",\n        -13.139806747436523\n      ],\n      [\n        \"自在に\",\n        -13.140032768249512\n      ],\n      [\n        \"エジプト\",\n        -13.140061378479004\n      ],\n      [\n        \"遊び\",\n        -13.140376091003418\n      ],\n      [\n        \"ú\",\n        -13.140405654907227\n      ],\n      [\n        \"▁トランジスタ\",\n        -13.140406608581543\n      ],\n      [\n        \"▁ショパン\",\n        -13.140567779541016\n      ],\n      [\n        \"▁発起人\",\n        -13.140706062316895\n      ],\n      [\n        \"▁スロープ\",\n        -13.140759468078613\n      ],\n      [\n        \"ゆっくり\",\n        -13.140765190124512\n      ],\n      [\n        \"▁引き揚げ\",\n        -13.140841484069824\n      ],\n      [\n        \"▁ステキな\",\n        -13.141008377075195\n      ],\n      [\n        \"▁難解\",\n        -13.141075134277344\n      ],\n      [\n        \"▁防いで\",\n        -13.141151428222656\n      ],\n      [\n        \"退職\",\n        -13.141165733337402\n      ],\n      [\n        \"▁時計回り\",\n        -13.141277313232422\n      ],\n      [\n        \"▁サハラ\",\n        -13.1412992477417\n      ],\n      [\n        \"▁きめ細か\",\n        -13.14130687713623\n      ],\n      [\n        \"▁ハーモニカ\",\n        -13.14130687713623\n      ],\n      [\n        \"▁途方\",\n        -13.14130973815918\n      ],\n      [\n        \"たくさん\",\n        -13.141531944274902\n      ],\n      [\n        \"▁SHIN\",\n        -13.141777992248535\n      ],\n      [\n        \"▁エクスペリエンス\",\n        -13.141908645629883\n      ],\n      [\n        \"poli\",\n        -13.1420259475708\n      ],\n      [\n        \"▁読み聞かせ\",\n        -13.14220905303955\n      ],\n      [\n        \"頭角\",\n        -13.142330169677734\n      ],\n      [\n        \"▁塗った\",\n        -13.142388343811035\n      ],\n      [\n        \"▁朝日新聞社\",\n        -13.14296817779541\n      ],\n      [\n        \"▁曳航\",\n        -13.143112182617188\n      ],\n      [\n        \"▁義兄\",\n        -13.143258094787598\n      ],\n      [\n        \"▁Form\",\n        -13.143293380737305\n      ],\n      [\n        \"▁ヤコブ\",\n        -13.143420219421387\n      ],\n      [\n        \"▁ハザード\",\n        -13.143714904785156\n      ],\n      [\n        \"呈\",\n        -13.14372730255127\n      ],\n      [\n        \"ベルギー\",\n        -13.14376163482666\n      ],\n      [\n        \"▁置け\",\n        -13.143800735473633\n      ],\n      [\n        \"伝説\",\n        -13.143832206726074\n      ],\n      [\n        \"▁パラグアイ\",\n        -13.144015312194824\n      ],\n      [\n        \"▁減衰\",\n        -13.144062995910645\n      ],\n      [\n        \"▁ファクター\",\n        -13.144373893737793\n      ],\n      [\n        \"▁係員\",\n        -13.144556045532227\n      ],\n      [\n        \"▁四万十\",\n        -13.14461898803711\n      ],\n      [\n        \"▁length\",\n        -13.144927024841309\n      ],\n      [\n        \"▁アミノ\",\n        -13.145299911499023\n      ],\n      [\n        \"▁ワイナリー\",\n        -13.145523071289062\n      ],\n      [\n        \"▁細やかな\",\n        -13.145623207092285\n      ],\n      [\n        \"▁IEEE\",\n        -13.14582633972168\n      ],\n      [\n        \"▁ミキサー\",\n        -13.145917892456055\n      ],\n      [\n        \"▁要点\",\n        -13.145918846130371\n      ],\n      [\n        \"嘗\",\n        -13.146126747131348\n      ],\n      [\n        \"瞬く間に\",\n        -13.146126747131348\n      ],\n      [\n        \"膵\",\n        -13.146127700805664\n      ],\n      [\n        \"▁癒す\",\n        -13.146431922912598\n      ],\n      [\n        \"漠\",\n        -13.146709442138672\n      ],\n      [\n        \"▁Standard\",\n        -13.14673137664795\n      ],\n      [\n        \"▁ステーショナリー\",\n        -13.14673137664795\n      ],\n      [\n        \"▁ホッケー\",\n        -13.146774291992188\n      ],\n      [\n        \"▁ダーウィン\",\n        -13.146808624267578\n      ],\n      [\n        \"XY\",\n        -13.14696979522705\n      ],\n      [\n        \"▁ブルターニュ\",\n        -13.14703369140625\n      ],\n      [\n        \"▁ルージュ\",\n        -13.147056579589844\n      ],\n      [\n        \"▁ネイチャー\",\n        -13.147141456604004\n      ],\n      [\n        \"♫\",\n        -13.14733600616455\n      ],\n      [\n        \"▁サプライヤー\",\n        -13.147652626037598\n      ],\n      [\n        \"﻿\",\n        -13.147656440734863\n      ],\n      [\n        \"盃\",\n        -13.148242950439453\n      ],\n      [\n        \"▁img\",\n        -13.14836311340332\n      ],\n      [\n        \"Adobe\",\n        -13.148571014404297\n      ],\n      [\n        \"▁異例\",\n        -13.149093627929688\n      ],\n      [\n        \"▁起草\",\n        -13.149105072021484\n      ],\n      [\n        \"▁Limited\",\n        -13.149151802062988\n      ],\n      [\n        \"▁アテナイ\",\n        -13.149151802062988\n      ],\n      [\n        \"デンマーク\",\n        -13.149324417114258\n      ],\n      [\n        \"▁シェイプ\",\n        -13.14965534210205\n      ],\n      [\n        \"▁chocolate\",\n        -13.149757385253906\n      ],\n      [\n        \"▁マンツーマン\",\n        -13.149757385253906\n      ],\n      [\n        \"▁アラゴン\",\n        -13.149919509887695\n      ],\n      [\n        \"▁加味\",\n        -13.150094032287598\n      ],\n      [\n        \"▁豊洲\",\n        -13.150142669677734\n      ],\n      [\n        \"▁防音\",\n        -13.15017032623291\n      ],\n      [\n        \"▁しくみ\",\n        -13.150222778320312\n      ],\n      [\n        \"脚部\",\n        -13.150259971618652\n      ],\n      [\n        \"娼\",\n        -13.15036392211914\n      ],\n      [\n        \"▁フィアット\",\n        -13.15036678314209\n      ],\n      [\n        \"もしくは\",\n        -13.15040397644043\n      ],\n      [\n        \"▁乏しく\",\n        -13.150667190551758\n      ],\n      [\n        \"▁関白\",\n        -13.150701522827148\n      ],\n      [\n        \"修理\",\n        -13.150761604309082\n      ],\n      [\n        \"▁聖霊\",\n        -13.150797843933105\n      ],\n      [\n        \"▁繁盛\",\n        -13.151029586791992\n      ],\n      [\n        \"▁ウェット\",\n        -13.15103530883789\n      ],\n      [\n        \"▁コンビネーション\",\n        -13.151037216186523\n      ],\n      [\n        \"武器\",\n        -13.151152610778809\n      ],\n      [\n        \"▁立ち向か\",\n        -13.151165008544922\n      ],\n      [\n        \"▁寄り添う\",\n        -13.151273727416992\n      ],\n      [\n        \"▁硝子\",\n        -13.151276588439941\n      ],\n      [\n        \"□\",\n        -13.151322364807129\n      ],\n      [\n        \"国产\",\n        -13.151327133178711\n      ],\n      [\n        \"▁介助\",\n        -13.151399612426758\n      ],\n      [\n        \"果実\",\n        -13.15141773223877\n      ],\n      [\n        \"▁バトラー\",\n        -13.151479721069336\n      ],\n      [\n        \"▁アイゼン\",\n        -13.151493072509766\n      ],\n      [\n        \"▁ロイター\",\n        -13.151727676391602\n      ],\n      [\n        \"▁エントリ\",\n        -13.151836395263672\n      ],\n      [\n        \"▁エクアドル\",\n        -13.151881217956543\n      ],\n      [\n        \"▁にっぽん\",\n        -13.15202522277832\n      ],\n      [\n        \"▁販路\",\n        -13.15218734741211\n      ],\n      [\n        \"コロンビア\",\n        -13.152239799499512\n      ],\n      [\n        \"▁助監督\",\n        -13.152578353881836\n      ],\n      [\n        \"▁真鍮\",\n        -13.152806282043457\n      ],\n      [\n        \"▁凝固\",\n        -13.152826309204102\n      ],\n      [\n        \"▁テンプル\",\n        -13.152913093566895\n      ],\n      [\n        \"丙\",\n        -13.153097152709961\n      ],\n      [\n        \"▁ランディング\",\n        -13.153148651123047\n      ],\n      [\n        \"ナショナル\",\n        -13.15328598022461\n      ],\n      [\n        \"▁経常\",\n        -13.15342903137207\n      ],\n      [\n        \"語源\",\n        -13.153486251831055\n      ],\n      [\n        \"▁病態\",\n        -13.153564453125\n      ],\n      [\n        \"ification\",\n        -13.15368366241455\n      ],\n      [\n        \"灸\",\n        -13.153705596923828\n      ],\n      [\n        \"▁振り向\",\n        -13.153753280639648\n      ],\n      [\n        \"▁主計\",\n        -13.153763771057129\n      ],\n      [\n        \"スミレ\",\n        -13.153966903686523\n      ],\n      [\n        \"テイル\",\n        -13.154021263122559\n      ],\n      [\n        \"久留米\",\n        -13.154082298278809\n      ],\n      [\n        \"▁転覆\",\n        -13.154324531555176\n      ],\n      [\n        \"バージニア\",\n        -13.154388427734375\n      ],\n      [\n        \"lad\",\n        -13.15458869934082\n      ],\n      [\n        \"結成\",\n        -13.154620170593262\n      ],\n      [\n        \"▁当てはめ\",\n        -13.154635429382324\n      ],\n      [\n        \"ブラウン\",\n        -13.154681205749512\n      ],\n      [\n        \"支払い\",\n        -13.154746055603027\n      ],\n      [\n        \"▁雑音\",\n        -13.154926300048828\n      ],\n      [\n        \"▁翔太\",\n        -13.155044555664062\n      ],\n      [\n        \"系統\",\n        -13.155097007751465\n      ],\n      [\n        \"▁撲滅\",\n        -13.155227661132812\n      ],\n      [\n        \"賠\",\n        -13.155227661132812\n      ],\n      [\n        \"▁行き届い\",\n        -13.155259132385254\n      ],\n      [\n        \"フェニル\",\n        -13.15545654296875\n      ],\n      [\n        \"▁中南米\",\n        -13.155534744262695\n      ],\n      [\n        \"▁忠告\",\n        -13.155794143676758\n      ],\n      [\n        \"tract\",\n        -13.155941009521484\n      ],\n      [\n        \"▁くすみ\",\n        -13.15597152709961\n      ],\n      [\n        \"▁助かっ\",\n        -13.156192779541016\n      ],\n      [\n        \"▁2・3\",\n        -13.156315803527832\n      ],\n      [\n        \"▁any\",\n        -13.156355857849121\n      ],\n      [\n        \"▁ジョアン\",\n        -13.15639591217041\n      ],\n      [\n        \"â\",\n        -13.156447410583496\n      ],\n      [\n        \"診療\",\n        -13.156551361083984\n      ],\n      [\n        \"▁親睦\",\n        -13.156577110290527\n      ],\n      [\n        \"▁かっこよ\",\n        -13.156648635864258\n      ],\n      [\n        \"▁宣誓\",\n        -13.156773567199707\n      ],\n      [\n        \"▁そびえ\",\n        -13.156786918640137\n      ],\n      [\n        \"▁復員\",\n        -13.15693473815918\n      ],\n      [\n        \"▁おやじ\",\n        -13.15707015991211\n      ],\n      [\n        \"▁食育\",\n        -13.15710163116455\n      ],\n      [\n        \"▁阿久\",\n        -13.157154083251953\n      ],\n      [\n        \"▁盗んだ\",\n        -13.157157897949219\n      ],\n      [\n        \"ソフトバンク\",\n        -13.157163619995117\n      ],\n      [\n        \"彭\",\n        -13.157362937927246\n      ],\n      [\n        \"燕\",\n        -13.157462120056152\n      ],\n      [\n        \"▁殺傷\",\n        -13.157573699951172\n      ],\n      [\n        \"仏教\",\n        -13.157646179199219\n      ],\n      [\n        \"▁Public\",\n        -13.157669067382812\n      ],\n      [\n        \"ネーデルラント\",\n        -13.157669067382812\n      ],\n      [\n        \"CTION\",\n        -13.157713890075684\n      ],\n      [\n        \"▁屈折\",\n        -13.15774154663086\n      ],\n      [\n        \"▁空席\",\n        -13.157760620117188\n      ],\n      [\n        \"▁カフカ\",\n        -13.157803535461426\n      ],\n      [\n        \"▁古文書\",\n        -13.157974243164062\n      ],\n      [\n        \"▁砂丘\",\n        -13.158099174499512\n      ],\n      [\n        \"▁照れ\",\n        -13.158269882202148\n      ],\n      [\n        \"▁千秋楽\",\n        -13.158279418945312\n      ],\n      [\n        \"▁めざまし\",\n        -13.158281326293945\n      ],\n      [\n        \"▁ゲッター\",\n        -13.158437728881836\n      ],\n      [\n        \"▁洗車\",\n        -13.158478736877441\n      ],\n      [\n        \"▁利権\",\n        -13.158535957336426\n      ],\n      [\n        \"▁カトラリー\",\n        -13.158585548400879\n      ],\n      [\n        \"▁官公庁\",\n        -13.158585548400879\n      ],\n      [\n        \"▁ぐっ\",\n        -13.158918380737305\n      ],\n      [\n        \"▁ビジター\",\n        -13.159198760986328\n      ],\n      [\n        \"▁フェイシャル\",\n        -13.159238815307617\n      ],\n      [\n        \"▁アタシ\",\n        -13.159364700317383\n      ],\n      [\n        \"▁ウエイト\",\n        -13.159553527832031\n      ],\n      [\n        \"▁リスボン\",\n        -13.159567832946777\n      ],\n      [\n        \"▁キャッスル\",\n        -13.159597396850586\n      ],\n      [\n        \"▁Magic\",\n        -13.159627914428711\n      ],\n      [\n        \"▁アドリア\",\n        -13.159712791442871\n      ],\n      [\n        \"▁ノルマンディー\",\n        -13.159809112548828\n      ],\n      [\n        \"▁多方面\",\n        -13.159809112548828\n      ],\n      [\n        \"▁進呈\",\n        -13.159826278686523\n      ],\n      [\n        \"▁菩提寺\",\n        -13.159878730773926\n      ],\n      [\n        \"宇都宮\",\n        -13.159927368164062\n      ],\n      [\n        \"▁儒教\",\n        -13.160115242004395\n      ],\n      [\n        \"▁August\",\n        -13.160116195678711\n      ],\n      [\n        \"▁貴金属\",\n        -13.160151481628418\n      ],\n      [\n        \"lash\",\n        -13.160212516784668\n      ],\n      [\n        \"lg\",\n        -13.160469055175781\n      ],\n      [\n        \"▁千尋\",\n        -13.160481452941895\n      ],\n      [\n        \"▁卵巣\",\n        -13.160538673400879\n      ],\n      [\n        \"Select\",\n        -13.160650253295898\n      ],\n      [\n        \"▁Creative\",\n        -13.160737991333008\n      ],\n      [\n        \"▁猪木\",\n        -13.160823822021484\n      ],\n      [\n        \"勅\",\n        -13.160839080810547\n      ],\n      [\n        \"▁帰ろう\",\n        -13.160931587219238\n      ],\n      [\n        \"堕\",\n        -13.161033630371094\n      ],\n      [\n        \"▁Community\",\n        -13.16103458404541\n      ],\n      [\n        \"▁無関心\",\n        -13.16103458404541\n      ],\n      [\n        \"▁誓約\",\n        -13.161035537719727\n      ],\n      [\n        \"▁陳列\",\n        -13.161128997802734\n      ],\n      [\n        \"▁噛む\",\n        -13.161224365234375\n      ],\n      [\n        \"ロビン\",\n        -13.161290168762207\n      ],\n      [\n        \"▁レジスタンス\",\n        -13.161357879638672\n      ],\n      [\n        \"▁木蓮\",\n        -13.161585807800293\n      ],\n      [\n        \"▁!!️\",\n        -13.161662101745605\n      ],\n      [\n        \"▁江ノ島\",\n        -13.161955833435059\n      ],\n      [\n        \"▁井伊\",\n        -13.16207218170166\n      ],\n      [\n        \"▁モラル\",\n        -13.162075996398926\n      ],\n      [\n        \"▁ジブリ\",\n        -13.162463188171387\n      ],\n      [\n        \"▁万年筆\",\n        -13.162568092346191\n      ],\n      [\n        \"▁アドセンス\",\n        -13.162601470947266\n      ],\n      [\n        \"▁焼きそば\",\n        -13.162610054016113\n      ],\n      [\n        \"▁武勇\",\n        -13.162671089172363\n      ],\n      [\n        \"わずか\",\n        -13.162742614746094\n      ],\n      [\n        \"▁アベンジャーズ\",\n        -13.162875175476074\n      ],\n      [\n        \"▁兼ね備え\",\n        -13.162927627563477\n      ],\n      [\n        \"ré\",\n        -13.162975311279297\n      ],\n      [\n        \"▁Motor\",\n        -13.163018226623535\n      ],\n      [\n        \"▁除草\",\n        -13.163057327270508\n      ],\n      [\n        \"▁贈った\",\n        -13.163122177124023\n      ],\n      [\n        \"▁太宰府\",\n        -13.163201332092285\n      ],\n      [\n        \"▁心拍\",\n        -13.163341522216797\n      ],\n      [\n        \"▁噴水\",\n        -13.163445472717285\n      ],\n      [\n        \"ester\",\n        -13.163787841796875\n      ],\n      [\n        \"▁誰しも\",\n        -13.163792610168457\n      ],\n      [\n        \"abe\",\n        -13.164285659790039\n      ],\n      [\n        \"▁coach\",\n        -13.164299964904785\n      ],\n      [\n        \"▁恵美\",\n        -13.164385795593262\n      ],\n      [\n        \"▁ユニコーン\",\n        -13.164434432983398\n      ],\n      [\n        \"誘\",\n        -13.164557456970215\n      ],\n      [\n        \"▁沈んだ\",\n        -13.16456413269043\n      ],\n      [\n        \"独自の\",\n        -13.164567947387695\n      ],\n      [\n        \"SKA\",\n        -13.164572715759277\n      ],\n      [\n        \"▁ロッシ\",\n        -13.164624214172363\n      ],\n      [\n        \"▁吹き飛ば\",\n        -13.16472053527832\n      ],\n      [\n        \"▁温帯\",\n        -13.164861679077148\n      ],\n      [\n        \"iku\",\n        -13.164868354797363\n      ],\n      [\n        \"統計\",\n        -13.164949417114258\n      ],\n      [\n        \"▁助かる\",\n        -13.165099143981934\n      ],\n      [\n        \"▁豆乳\",\n        -13.16517162322998\n      ],\n      [\n        \"墜\",\n        -13.165325164794922\n      ],\n      [\n        \"▁敷いて\",\n        -13.165377616882324\n      ],\n      [\n        \"▁節税\",\n        -13.165410995483398\n      ],\n      [\n        \"▁mixi\",\n        -13.165627479553223\n      ],\n      [\n        \"タクシー\",\n        -13.165639877319336\n      ],\n      [\n        \"▁固執\",\n        -13.165651321411133\n      ],\n      [\n        \"▁残党\",\n        -13.165827751159668\n      ],\n      [\n        \"STEP\",\n        -13.16617488861084\n      ],\n      [\n        \"cade\",\n        -13.166184425354004\n      ],\n      [\n        \"▁ブサイク\",\n        -13.166258811950684\n      ],\n      [\n        \"灼\",\n        -13.166258811950684\n      ],\n      [\n        \"電源\",\n        -13.166482925415039\n      ],\n      [\n        \"▁グアテマラ\",\n        -13.166566848754883\n      ],\n      [\n        \"▁蓄電池\",\n        -13.166566848754883\n      ],\n      [\n        \"▁俳人\",\n        -13.166569709777832\n      ],\n      [\n        \"▁干拓\",\n        -13.166576385498047\n      ],\n      [\n        \"▁やむなく\",\n        -13.166641235351562\n      ],\n      [\n        \"自爆\",\n        -13.166677474975586\n      ],\n      [\n        \"危害\",\n        -13.166743278503418\n      ],\n      [\n        \"ů\",\n        -13.166875839233398\n      ],\n      [\n        \"▁心構え\",\n        -13.166875839233398\n      ],\n      [\n        \"嘴\",\n        -13.166875839233398\n      ],\n      [\n        \"▁After\",\n        -13.166900634765625\n      ],\n      [\n        \"もはや\",\n        -13.16705322265625\n      ],\n      [\n        \"御門\",\n        -13.167059898376465\n      ],\n      [\n        \"dict\",\n        -13.16708755493164\n      ],\n      [\n        \"▁イニシャル\",\n        -13.167183876037598\n      ],\n      [\n        \"▁絶叫\",\n        -13.16720962524414\n      ],\n      [\n        \"▁振舞\",\n        -13.16726303100586\n      ],\n      [\n        \"▁サイコロ\",\n        -13.167556762695312\n      ],\n      [\n        \"rab\",\n        -13.167593002319336\n      ],\n      [\n        \"机\",\n        -13.167675018310547\n      ],\n      [\n        \"▁緑茶\",\n        -13.16780948638916\n      ],\n      [\n        \"裔\",\n        -13.167973518371582\n      ],\n      [\n        \"セミナー\",\n        -13.168105125427246\n      ],\n      [\n        \"▁チャップリン\",\n        -13.168108940124512\n      ],\n      [\n        \"▁丁寧\",\n        -13.16812515258789\n      ],\n      [\n        \"▁Peter\",\n        -13.16834545135498\n      ],\n      [\n        \"▁妙高\",\n        -13.168461799621582\n      ],\n      [\n        \"▁駆け抜け\",\n        -13.168465614318848\n      ],\n      [\n        \"▁毛髪\",\n        -13.168648719787598\n      ],\n      [\n        \"▁蛇口\",\n        -13.168869972229004\n      ],\n      [\n        \"▁ペンシル\",\n        -13.168895721435547\n      ],\n      [\n        \"のりば\",\n        -13.16905689239502\n      ],\n      [\n        \"▁こもった\",\n        -13.169347763061523\n      ],\n      [\n        \"▁朝夕\",\n        -13.169376373291016\n      ],\n      [\n        \"aba\",\n        -13.169414520263672\n      ],\n      [\n        \"ペディア\",\n        -13.169540405273438\n      ],\n      [\n        \"▁吸入\",\n        -13.16992473602295\n      ],\n      [\n        \"馮\",\n        -13.169962882995605\n      ],\n      [\n        \"真っ暗\",\n        -13.169978141784668\n      ],\n      [\n        \"▁ぴあ\",\n        -13.170066833496094\n      ],\n      [\n        \"▁挟む\",\n        -13.170273780822754\n      ],\n      [\n        \"▁膨れ\",\n        -13.1703462600708\n      ],\n      [\n        \"▁トゥルー\",\n        -13.170394897460938\n      ],\n      [\n        \"敢\",\n        -13.170557022094727\n      ],\n      [\n        \"敦\",\n        -13.170763969421387\n      ],\n      [\n        \"▁リザーブ\",\n        -13.170892715454102\n      ],\n      [\n        \"▁実弟\",\n        -13.171001434326172\n      ],\n      [\n        \"▁湿原\",\n        -13.171049118041992\n      ],\n      [\n        \"▁被弾\",\n        -13.17113971710205\n      ],\n      [\n        \"▁スカイライン\",\n        -13.171265602111816\n      ],\n      [\n        \"▁know\",\n        -13.171420097351074\n      ],\n      [\n        \"屑\",\n        -13.171510696411133\n      ],\n      [\n        \"▁天童\",\n        -13.171677589416504\n      ],\n      [\n        \"限定\",\n        -13.171793937683105\n      ],\n      [\n        \"Map\",\n        -13.172157287597656\n      ],\n      [\n        \"▁垂水\",\n        -13.17216968536377\n      ],\n      [\n        \"▁バイヤー\",\n        -13.172258377075195\n      ],\n      [\n        \"▁誓う\",\n        -13.172442436218262\n      ],\n      [\n        \"▁フッ素\",\n        -13.172472953796387\n      ],\n      [\n        \"▁Eye\",\n        -13.172672271728516\n      ],\n      [\n        \"▁借地\",\n        -13.17302131652832\n      ],\n      [\n        \"▁ミルウォーキー\",\n        -13.173060417175293\n      ],\n      [\n        \"▁バチカン\",\n        -13.17306137084961\n      ],\n      [\n        \"▁Quick\",\n        -13.173121452331543\n      ],\n      [\n        \"▁独奏\",\n        -13.173224449157715\n      ],\n      [\n        \"▁バイオリン\",\n        -13.173295021057129\n      ],\n      [\n        \"湛\",\n        -13.173371315002441\n      ],\n      [\n        \"募\",\n        -13.173416137695312\n      ],\n      [\n        \"▁右折\",\n        -13.173431396484375\n      ],\n      [\n        \"ディスコグラフィ\",\n        -13.173603057861328\n      ],\n      [\n        \"▁延々と\",\n        -13.17373275756836\n      ],\n      [\n        \"姜\",\n        -13.173738479614258\n      ],\n      [\n        \"▁否認\",\n        -13.173741340637207\n      ],\n      [\n        \"xxx\",\n        -13.17388916015625\n      ],\n      [\n        \"▁叙事詩\",\n        -13.173992156982422\n      ],\n      [\n        \"雍\",\n        -13.173992156982422\n      ],\n      [\n        \"▁摘出\",\n        -13.173994064331055\n      ],\n      [\n        \"▁暗黙\",\n        -13.174006462097168\n      ],\n      [\n        \"▁近寄\",\n        -13.174236297607422\n      ],\n      [\n        \"煕\",\n        -13.174302101135254\n      ],\n      [\n        \"▁思い通りに\",\n        -13.174925804138184\n      ],\n      [\n        \"▁ウォーレン\",\n        -13.175100326538086\n      ],\n      [\n        \"▁巡業\",\n        -13.175203323364258\n      ],\n      [\n        \"anda\",\n        -13.175225257873535\n      ],\n      [\n        \"津軽\",\n        -13.175370216369629\n      ],\n      [\n        \"▁暴言\",\n        -13.175389289855957\n      ],\n      [\n        \"▁太政官\",\n        -13.175545692443848\n      ],\n      [\n        \"▁遠ざけ\",\n        -13.175556182861328\n      ],\n      [\n        \"▁マリーンズ\",\n        -13.175702095031738\n      ],\n      [\n        \"▁武豊\",\n        -13.175755500793457\n      ],\n      [\n        \"あわせて\",\n        -13.175796508789062\n      ],\n      [\n        \"洪\",\n        -13.175797462463379\n      ],\n      [\n        \"▁出没\",\n        -13.175804138183594\n      ],\n      [\n        \"▁休職\",\n        -13.176053047180176\n      ],\n      [\n        \"▁ルーレット\",\n        -13.176074981689453\n      ],\n      [\n        \"▁season\",\n        -13.176177024841309\n      ],\n      [\n        \"だいたい\",\n        -13.17626667022705\n      ],\n      [\n        \"▁ロックンロール\",\n        -13.17647933959961\n      ],\n      [\n        \"▁アーノルド\",\n        -13.176480293273926\n      ],\n      [\n        \"▁ファシズム\",\n        -13.176522254943848\n      ],\n      [\n        \"▁埋立\",\n        -13.1765775680542\n      ],\n      [\n        \"▁スポーク\",\n        -13.176651954650879\n      ],\n      [\n        \"璧\",\n        -13.176780700683594\n      ],\n      [\n        \"▁峡谷\",\n        -13.17679214477539\n      ],\n      [\n        \"▁毎時\",\n        -13.176933288574219\n      ],\n      [\n        \"▁終息\",\n        -13.17695140838623\n      ],\n      [\n        \"アーティスト\",\n        -13.177050590515137\n      ],\n      [\n        \" \",\n        -13.177102088928223\n      ],\n      [\n        \"▁レコーズ\",\n        -13.177103996276855\n      ],\n      [\n        \"dig\",\n        -13.17717456817627\n      ],\n      [\n        \"▁ワンセグ\",\n        -13.177412986755371\n      ],\n      [\n        \"▁猛烈な\",\n        -13.177412986755371\n      ],\n      [\n        \"なんとなく\",\n        -13.177473068237305\n      ],\n      [\n        \"▁橿原\",\n        -13.177724838256836\n      ],\n      [\n        \"〆\",\n        -13.177724838256836\n      ],\n      [\n        \"▁慎太郎\",\n        -13.177886009216309\n      ],\n      [\n        \"▁レイカーズ\",\n        -13.178115844726562\n      ],\n      [\n        \"yuki\",\n        -13.17821216583252\n      ],\n      [\n        \"▁エドガー\",\n        -13.178449630737305\n      ],\n      [\n        \"▁ハイドロ\",\n        -13.178494453430176\n      ],\n      [\n        \"颯\",\n        -13.178972244262695\n      ],\n      [\n        \"▁ワルツ\",\n        -13.178979873657227\n      ],\n      [\n        \"▁黒ずみ\",\n        -13.178979873657227\n      ],\n      [\n        \"▁緩め\",\n        -13.179106712341309\n      ],\n      [\n        \"▁フィリーズ\",\n        -13.179161071777344\n      ],\n      [\n        \"昨\",\n        -13.179252624511719\n      ],\n      [\n        \"▁リユース\",\n        -13.179285049438477\n      ],\n      [\n        \"▁擬人\",\n        -13.179288864135742\n      ],\n      [\n        \"AKB\",\n        -13.179591178894043\n      ],\n      [\n        \"苅\",\n        -13.179908752441406\n      ],\n      [\n        \"▁ネバダ\",\n        -13.179909706115723\n      ],\n      [\n        \"▁ヴィーナス\",\n        -13.17995834350586\n      ],\n      [\n        \"放射\",\n        -13.1800537109375\n      ],\n      [\n        \"諦\",\n        -13.180157661437988\n      ],\n      [\n        \"hydro\",\n        -13.18022346496582\n      ],\n      [\n        \"▁めぐ\",\n        -13.1803560256958\n      ],\n      [\n        \"▁強烈\",\n        -13.18040943145752\n      ],\n      [\n        \"糠\",\n        -13.180534362792969\n      ],\n      [\n        \"▁TEAM\",\n        -13.180594444274902\n      ],\n      [\n        \"▁瑠璃\",\n        -13.180846214294434\n      ],\n      [\n        \"▁スクリュー\",\n        -13.180981636047363\n      ],\n      [\n        \"▁敷居\",\n        -13.181289672851562\n      ],\n      [\n        \"▁尺度\",\n        -13.181353569030762\n      ],\n      [\n        \"▁従四位\",\n        -13.181471824645996\n      ],\n      [\n        \"▁イベリア\",\n        -13.181472778320312\n      ],\n      [\n        \"粟\",\n        -13.182089805603027\n      ],\n      [\n        \"▁交尾\",\n        -13.18210506439209\n      ],\n      [\n        \"設備\",\n        -13.18227767944336\n      ],\n      [\n        \"▁ファルコン\",\n        -13.182286262512207\n      ],\n      [\n        \"▁フレッド\",\n        -13.183042526245117\n      ],\n      [\n        \"▁乱舞\",\n        -13.18327522277832\n      ],\n      [\n        \"▁乖離\",\n        -13.183350563049316\n      ],\n      [\n        \"▁レズビアン\",\n        -13.18336009979248\n      ],\n      [\n        \"▁South\",\n        -13.183371543884277\n      ],\n      [\n        \"▁険し\",\n        -13.183380126953125\n      ],\n      [\n        \"▁樹林\",\n        -13.183469772338867\n      ],\n      [\n        \"▁見せかけ\",\n        -13.183574676513672\n      ],\n      [\n        \"▁葛城\",\n        -13.183592796325684\n      ],\n      [\n        \"▁多治見\",\n        -13.183664321899414\n      ],\n      [\n        \"▁Charles\",\n        -13.183679580688477\n      ],\n      [\n        \"▁立ち読み\",\n        -13.183812141418457\n      ],\n      [\n        \"▁転任\",\n        -13.183853149414062\n      ],\n      [\n        \"▁泊まる\",\n        -13.18393325805664\n      ],\n      [\n        \"hir\",\n        -13.184053421020508\n      ],\n      [\n        \"黙\",\n        -13.18423843383789\n      ],\n      [\n        \"▁マイノリティ\",\n        -13.18429183959961\n      ],\n      [\n        \"▁気管支\",\n        -13.18429183959961\n      ],\n      [\n        \"在外\",\n        -13.184537887573242\n      ],\n      [\n        \"▁示談\",\n        -13.184606552124023\n      ],\n      [\n        \"槍\",\n        -13.184617042541504\n      ],\n      [\n        \"著名な\",\n        -13.18461799621582\n      ],\n      [\n        \"▁改番\",\n        -13.18487548828125\n      ],\n      [\n        \"▁Thomas\",\n        -13.184919357299805\n      ],\n      [\n        \"▁協業\",\n        -13.184928894042969\n      ],\n      [\n        \"▁遷都\",\n        -13.184988021850586\n      ],\n      [\n        \"▁装束\",\n        -13.185281753540039\n      ],\n      [\n        \"▁ロッジ\",\n        -13.185632705688477\n      ],\n      [\n        \"▁いけたら\",\n        -13.185676574707031\n      ],\n      [\n        \"▁帝都\",\n        -13.185821533203125\n      ],\n      [\n        \"謙\",\n        -13.185883522033691\n      ],\n      [\n        \"▁ナショナリズム\",\n        -13.186175346374512\n      ],\n      [\n        \"娩\",\n        -13.186175346374512\n      ],\n      [\n        \"汽\",\n        -13.186175346374512\n      ],\n      [\n        \"▁マリノス\",\n        -13.186271667480469\n      ],\n      [\n        \"▁ブレーメン\",\n        -13.186491012573242\n      ],\n      [\n        \"(^^)\",\n        -13.186503410339355\n      ],\n      [\n        \"▁様々である\",\n        -13.186574935913086\n      ],\n      [\n        \"▁不確実\",\n        -13.186650276184082\n      ],\n      [\n        \"▁休校\",\n        -13.186662673950195\n      ],\n      [\n        \"▁Richard\",\n        -13.18680477142334\n      ],\n      [\n        \"▁総じて\",\n        -13.18681526184082\n      ],\n      [\n        \"▁交番\",\n        -13.186936378479004\n      ],\n      [\n        \"▁疑わしい\",\n        -13.186944961547852\n      ],\n      [\n        \"更改\",\n        -13.186968803405762\n      ],\n      [\n        \"▁サクセス\",\n        -13.187118530273438\n      ],\n      [\n        \"▁Classic\",\n        -13.18712043762207\n      ],\n      [\n        \"▁プログラマー\",\n        -13.18713665008545\n      ],\n      [\n        \"▁御覧\",\n        -13.187383651733398\n      ],\n      [\n        \"把\",\n        -13.187434196472168\n      ],\n      [\n        \"プロデューサー\",\n        -13.187467575073242\n      ],\n      [\n        \"期待\",\n        -13.187651634216309\n      ],\n      [\n        \"由来\",\n        -13.187681198120117\n      ],\n      [\n        \"▁新発田\",\n        -13.187750816345215\n      ],\n      [\n        \"▁誇張\",\n        -13.187827110290527\n      ],\n      [\n        \"▁オードリー\",\n        -13.187978744506836\n      ],\n      [\n        \"▁コサック\",\n        -13.187992095947266\n      ],\n      [\n        \"▁Cafe\",\n        -13.188036918640137\n      ],\n      [\n        \"覗\",\n        -13.188057899475098\n      ],\n      [\n        \"あくまでも\",\n        -13.18821907043457\n      ],\n      [\n        \"▁帝京\",\n        -13.188281059265137\n      ],\n      [\n        \"▁マジカル\",\n        -13.188333511352539\n      ],\n      [\n        \"799\",\n        -13.188488960266113\n      ],\n      [\n        \"ウエスト\",\n        -13.188804626464844\n      ],\n      [\n        \"▁威嚇\",\n        -13.189008712768555\n      ],\n      [\n        \"玄関\",\n        -13.189455032348633\n      ],\n      [\n        \"▁プリメーラ\",\n        -13.1896390914917\n      ],\n      [\n        \"視点\",\n        -13.189746856689453\n      ],\n      [\n        \"▁廃絶\",\n        -13.189868927001953\n      ],\n      [\n        \"▁鶴橋\",\n        -13.189891815185547\n      ],\n      [\n        \"▁フランチェスコ\",\n        -13.18995475769043\n      ],\n      [\n        \"▁有能な\",\n        -13.18997859954834\n      ],\n      [\n        \"▁持病\",\n        -13.190115928649902\n      ],\n      [\n        \"▁Touch\",\n        -13.190326690673828\n      ],\n      [\n        \"action\",\n        -13.190457344055176\n      ],\n      [\n        \"RAD\",\n        -13.190499305725098\n      ],\n      [\n        \"▁接骨\",\n        -13.19050121307373\n      ],\n      [\n        \"▁払った\",\n        -13.190545082092285\n      ],\n      [\n        \"▁はちみつ\",\n        -13.19058609008789\n      ],\n      [\n        \"蟻\",\n        -13.19058609008789\n      ],\n      [\n        \"▁Sweet\",\n        -13.19058895111084\n      ],\n      [\n        \"▁取り調べ\",\n        -13.190590858459473\n      ],\n      [\n        \"斎藤\",\n        -13.190627098083496\n      ],\n      [\n        \"恐れ入り\",\n        -13.190694808959961\n      ],\n      [\n        \"▁退避\",\n        -13.190960884094238\n      ],\n      [\n        \"▁海藻\",\n        -13.190980911254883\n      ],\n      [\n        \"起源\",\n        -13.191134452819824\n      ],\n      [\n        \"▁撤収\",\n        -13.191217422485352\n      ],\n      [\n        \"▁揉み\",\n        -13.191219329833984\n      ],\n      [\n        \"ford\",\n        -13.191372871398926\n      ],\n      [\n        \"▁Marketing\",\n        -13.191533088684082\n      ],\n      [\n        \"▁ピラティス\",\n        -13.191533088684082\n      ],\n      [\n        \"▁暇つぶし\",\n        -13.191849708557129\n      ],\n      [\n        \"info\",\n        -13.191902160644531\n      ],\n      [\n        \"▁浜辺\",\n        -13.192153930664062\n      ],\n      [\n        \"▁妊活\",\n        -13.19216537475586\n      ],\n      [\n        \"グラスゴー\",\n        -13.192238807678223\n      ],\n      [\n        \"▁発布\",\n        -13.192248344421387\n      ],\n      [\n        \"MLB\",\n        -13.192386627197266\n      ],\n      [\n        \"執\",\n        -13.192428588867188\n      ],\n      [\n        \"ū\",\n        -13.192481994628906\n      ],\n      [\n        \"▁サブスクリプション\",\n        -13.192481994628906\n      ],\n      [\n        \"鞍\",\n        -13.192558288574219\n      ],\n      [\n        \"▁シュトラウス\",\n        -13.192797660827637\n      ],\n      [\n        \"▁招致\",\n        -13.192813873291016\n      ],\n      [\n        \"▁感慨\",\n        -13.192822456359863\n      ],\n      [\n        \"▁貫いて\",\n        -13.19287395477295\n      ],\n      [\n        \"▁フランドル\",\n        -13.192949295043945\n      ],\n      [\n        \"▁アルティメット\",\n        -13.193114280700684\n      ],\n      [\n        \"▁勧請\",\n        -13.193114280700684\n      ],\n      [\n        \"▁スクーター\",\n        -13.193267822265625\n      ],\n      [\n        \"サンプル\",\n        -13.193290710449219\n      ],\n      [\n        \"All\",\n        -13.193552017211914\n      ],\n      [\n        \"▁服飾\",\n        -13.193652153015137\n      ],\n      [\n        \"▁見下ろす\",\n        -13.193747520446777\n      ],\n      [\n        \"▁乾いた\",\n        -13.19375228881836\n      ],\n      [\n        \"計算\",\n        -13.193985939025879\n      ],\n      [\n        \"▁ディレクション\",\n        -13.194064140319824\n      ],\n      [\n        \"箋\",\n        -13.194304466247559\n      ],\n      [\n        \"▁ニホン\",\n        -13.194685935974121\n      ],\n      [\n        \"him\",\n        -13.19473648071289\n      ],\n      [\n        \"悲観\",\n        -13.194900512695312\n      ],\n      [\n        \"ï\",\n        -13.195014953613281\n      ],\n      [\n        \"コンスタンティノープル\",\n        -13.195014953613281\n      ],\n      [\n        \"▁宿命\",\n        -13.195079803466797\n      ],\n      [\n        \"▁活かせる\",\n        -13.195332527160645\n      ],\n      [\n        \"筑摩\",\n        -13.195357322692871\n      ],\n      [\n        \"▁悟空\",\n        -13.195466995239258\n      ],\n      [\n        \"▁発育\",\n        -13.195535659790039\n      ],\n      [\n        \"▁菌類\",\n        -13.195613861083984\n      ],\n      [\n        \" \",\n        -13.195650100708008\n      ],\n      [\n        \"抑\",\n        -13.195940971374512\n      ],\n      [\n        \"▁大騒ぎ\",\n        -13.195966720581055\n      ],\n      [\n        \"▁密輸\",\n        -13.19601058959961\n      ],\n      [\n        \"蓋骨\",\n        -13.196011543273926\n      ],\n      [\n        \"▁施主\",\n        -13.196121215820312\n      ],\n      [\n        \"▁裾野\",\n        -13.196338653564453\n      ],\n      [\n        \"▁チャペル\",\n        -13.196478843688965\n      ],\n      [\n        \"▁ボイコット\",\n        -13.196614265441895\n      ],\n      [\n        \"▁訃報\",\n        -13.196919441223145\n      ],\n      [\n        \"▁逓信\",\n        -13.197237968444824\n      ],\n      [\n        \"▁^^;\",\n        -13.197265625\n      ],\n      [\n        \"▁血栓\",\n        -13.197371482849121\n      ],\n      [\n        \"▁効用\",\n        -13.19748592376709\n      ],\n      [\n        \"▁バウンド\",\n        -13.1976318359375\n      ],\n      [\n        \"▁デモンストレーション\",\n        -13.19787311553955\n      ],\n      [\n        \"▁円滑な\",\n        -13.197874069213867\n      ],\n      [\n        \"▁前もって\",\n        -13.197883605957031\n      ],\n      [\n        \"憧\",\n        -13.198079109191895\n      ],\n      [\n        \"▁損なう\",\n        -13.1981782913208\n      ],\n      [\n        \"▁新疆\",\n        -13.198274612426758\n      ],\n      [\n        \"▁ステファン\",\n        -13.198375701904297\n      ],\n      [\n        \"うれし\",\n        -13.198823928833008\n      ],\n      [\n        \"▁慶喜\",\n        -13.198951721191406\n      ],\n      [\n        \"▁野獣\",\n        -13.199119567871094\n      ],\n      [\n        \"▁サターン\",\n        -13.199403762817383\n      ],\n      [\n        \"▁メンフィス\",\n        -13.199464797973633\n      ],\n      [\n        \"▁親御さん\",\n        -13.199464797973633\n      ],\n      [\n        \"堡\",\n        -13.199464797973633\n      ],\n      [\n        \"▁難聴\",\n        -13.19955062866211\n      ],\n      [\n        \"▁ミセス\",\n        -13.199746131896973\n      ],\n      [\n        \"努\",\n        -13.19978141784668\n      ],\n      [\n        \"▁すばやく\",\n        -13.199783325195312\n      ],\n      [\n        \"▁蒙古\",\n        -13.199784278869629\n      ],\n      [\n        \"きちんと\",\n        -13.199919700622559\n      ],\n      [\n        \"憂\",\n        -13.199921607971191\n      ],\n      [\n        \"▁農協\",\n        -13.199974060058594\n      ],\n      [\n        \"▁ザーメン\",\n        -13.200429916381836\n      ],\n      [\n        \"▁浄土宗\",\n        -13.20048999786377\n      ],\n      [\n        \"▁花びら\",\n        -13.201061248779297\n      ],\n      [\n        \"▁喰ら\",\n        -13.201131820678711\n      ],\n      [\n        \"風邪\",\n        -13.201297760009766\n      ],\n      [\n        \"▁政変\",\n        -13.201411247253418\n      ],\n      [\n        \"▁ツーリズム\",\n        -13.201440811157227\n      ],\n      [\n        \"▁開演\",\n        -13.201494216918945\n      ],\n      [\n        \"隙\",\n        -13.201529502868652\n      ],\n      [\n        \"耗\",\n        -13.20168399810791\n      ],\n      [\n        \"amadana\",\n        -13.201698303222656\n      ],\n      [\n        \"▁スリラー\",\n        -13.201895713806152\n      ],\n      [\n        \"▁酷評\",\n        -13.202335357666016\n      ],\n      [\n        \"▁サファイア\",\n        -13.202550888061523\n      ],\n      [\n        \"▁Week\",\n        -13.20263671875\n      ],\n      [\n        \"脆\",\n        -13.202654838562012\n      ],\n      [\n        \"▁spli\",\n        -13.202729225158691\n      ],\n      [\n        \"埋め\",\n        -13.202740669250488\n      ],\n      [\n        \"▁キャビン\",\n        -13.20283317565918\n      ],\n      [\n        \"▁ふとん\",\n        -13.20290756225586\n      ],\n      [\n        \"述懐\",\n        -13.203315734863281\n      ],\n      [\n        \"▁淹れ\",\n        -13.203326225280762\n      ],\n      [\n        \"深夜\",\n        -13.203371047973633\n      ],\n      [\n        \"▁クレイジー\",\n        -13.203431129455566\n      ],\n      [\n        \"▁成り立ち\",\n        -13.203465461730957\n      ],\n      [\n        \"▁☆☆☆\",\n        -13.203614234924316\n      ],\n      [\n        \"りょく\",\n        -13.203700065612793\n      ],\n      [\n        \"某\",\n        -13.20378303527832\n      ],\n      [\n        \"批判\",\n        -13.20378589630127\n      ],\n      [\n        \"▁スタッド\",\n        -13.203934669494629\n      ],\n      [\n        \"▁バビロニア\",\n        -13.204254150390625\n      ],\n      [\n        \"▁知り合う\",\n        -13.204408645629883\n      ],\n      [\n        \"part\",\n        -13.204427719116211\n      ],\n      [\n        \"▁突きつけ\",\n        -13.204510688781738\n      ],\n      [\n        \"▁PIECE\",\n        -13.204574584960938\n      ],\n      [\n        \"▁ワトソン\",\n        -13.204575538635254\n      ],\n      [\n        \"▁イブニング\",\n        -13.204894065856934\n      ],\n      [\n        \"▁和睦\",\n        -13.205063819885254\n      ],\n      [\n        \"▁Festival\",\n        -13.205214500427246\n      ],\n      [\n        \"▁費やした\",\n        -13.205217361450195\n      ],\n      [\n        \"▁貝殻\",\n        -13.205243110656738\n      ],\n      [\n        \"▁Under\",\n        -13.205276489257812\n      ],\n      [\n        \"▁1,300\",\n        -13.205538749694824\n      ],\n      [\n        \"\",\n        -13.205855369567871\n      ],\n      [\n        \"SIDE\",\n        -13.205951690673828\n      ],\n      [\n        \"申込\",\n        -13.206075668334961\n      ],\n      [\n        \"▁TCG\",\n        -13.206199645996094\n      ],\n      [\n        \"▁啓示\",\n        -13.206238746643066\n      ],\n      [\n        \"▁SoftBank\",\n        -13.206497192382812\n      ],\n      [\n        \"赤血球\",\n        -13.206500053405762\n      ],\n      [\n        \"▁醍醐味\",\n        -13.206525802612305\n      ],\n      [\n        \"▁言おう\",\n        -13.206674575805664\n      ],\n      [\n        \"ジャイアンツ\",\n        -13.206690788269043\n      ],\n      [\n        \"研修\",\n        -13.206780433654785\n      ],\n      [\n        \"spir\",\n        -13.206805229187012\n      ],\n      [\n        \"▁忌避\",\n        -13.206829071044922\n      ],\n      [\n        \"▁ジークヴァル\",\n        -13.206846237182617\n      ],\n      [\n        \"▁codice\",\n        -13.206864356994629\n      ],\n      [\n        \"▁ベオグラード\",\n        -13.207139015197754\n      ],\n      [\n        \"▁画廊\",\n        -13.207231521606445\n      ],\n      [\n        \"▁トラッキング\",\n        -13.207249641418457\n      ],\n      [\n        \"ason\",\n        -13.207369804382324\n      ],\n      [\n        \"樽\",\n        -13.207396507263184\n      ],\n      [\n        \"▁デトックス\",\n        -13.207460403442383\n      ],\n      [\n        \"査定\",\n        -13.207584381103516\n      ],\n      [\n        \"▁衰弱\",\n        -13.207780838012695\n      ],\n      [\n        \"▁前倒し\",\n        -13.207781791687012\n      ],\n      [\n        \"▁キャンピング\",\n        -13.20781421661377\n      ],\n      [\n        \"roll\",\n        -13.208257675170898\n      ],\n      [\n        \"返品\",\n        -13.208273887634277\n      ],\n      [\n        \"▁島嶼\",\n        -13.208474159240723\n      ],\n      [\n        \"▁メラニン\",\n        -13.208475112915039\n      ],\n      [\n        \"▁必至\",\n        -13.208757400512695\n      ],\n      [\n        \"▁おいしかった\",\n        -13.2089204788208\n      ],\n      [\n        \"burg\",\n        -13.209037780761719\n      ],\n      [\n        \"池袋\",\n        -13.209089279174805\n      ],\n      [\n        \"▁ハッキング\",\n        -13.209249496459961\n      ],\n      [\n        \"▁Architectur\",\n        -13.209300994873047\n      ],\n      [\n        \"▁榴弾\",\n        -13.20938777923584\n      ],\n      [\n        \"▁辞し\",\n        -13.209518432617188\n      ],\n      [\n        \"コミュニケーション\",\n        -13.209604263305664\n      ],\n      [\n        \"▁ブリストル\",\n        -13.209710121154785\n      ],\n      [\n        \"▁林檎\",\n        -13.209712028503418\n      ],\n      [\n        \"▁束縛\",\n        -13.209716796875\n      ],\n      [\n        \"▁トランジット\",\n        -13.209724426269531\n      ],\n      [\n        \"▁ミッドナイト\",\n        -13.209757804870605\n      ],\n      [\n        \"▁パーティション\",\n        -13.209843635559082\n      ],\n      [\n        \"トーマス\",\n        -13.209850311279297\n      ],\n      [\n        \"▁穏健\",\n        -13.210031509399414\n      ],\n      [\n        \"靱\",\n        -13.210031509399414\n      ],\n      [\n        \"gress\",\n        -13.210298538208008\n      ],\n      [\n        \"▁アロマテラピー\",\n        -13.21035385131836\n      ],\n      [\n        \"蝶\",\n        -13.210573196411133\n      ],\n      [\n        \"▁引渡し\",\n        -13.210677146911621\n      ],\n      [\n        \"▁懸け\",\n        -13.210678100585938\n      ],\n      [\n        \"後醍醐天皇\",\n        -13.210997581481934\n      ],\n      [\n        \"1892\",\n        -13.211151123046875\n      ],\n      [\n        \"おしゃれ\",\n        -13.211227416992188\n      ],\n      [\n        \"▁WiMAX\",\n        -13.211343765258789\n      ],\n      [\n        \"耀\",\n        -13.211642265319824\n      ],\n      [\n        \"▁究明\",\n        -13.21164321899414\n      ],\n      [\n        \"萼\",\n        -13.21196460723877\n      ],\n      [\n        \"郵\",\n        -13.212918281555176\n      ],\n      [\n        \"💦\",\n        -13.212932586669922\n      ],\n      [\n        \"ญ\",\n        -13.213255882263184\n      ],\n      [\n        \"叛\",\n        -13.214224815368652\n      ],\n      [\n        \"愚\",\n        -13.214530944824219\n      ],\n      [\n        \"嬌\",\n        -13.214548110961914\n      ],\n      [\n        \"掠\",\n        -13.214872360229492\n      ],\n      [\n        \"煉\",\n        -13.215195655822754\n      ],\n      [\n        \"抽\",\n        -13.215462684631348\n      ],\n      [\n        \"\",\n        -13.215843200683594\n      ],\n      [\n        \"虔\",\n        -13.216166496276855\n      ],\n      [\n        \"迦\",\n        -13.216166496276855\n      ],\n      [\n        \"惠\",\n        -13.21778678894043\n      ],\n      [\n        \"稼\",\n        -13.218404769897461\n      ],\n      [\n        \"у\",\n        -13.21876049041748\n      ],\n      [\n        \"担\",\n        -13.220108032226562\n      ],\n      [\n        \"班\",\n        -13.220368385314941\n      ],\n      [\n        \"猟\",\n        -13.22102165222168\n      ],\n      [\n        \"弼\",\n        -13.221362113952637\n      ],\n      [\n        \"贄\",\n        -13.221362113952637\n      ],\n      [\n        \"蕨\",\n        -13.224949836730957\n      ],\n      [\n        \"庚\",\n        -13.225276947021484\n      ],\n      [\n        \"ゑ\",\n        -13.225930213928223\n      ],\n      [\n        \"侵\",\n        -13.226950645446777\n      ],\n      [\n        \"鉛\",\n        -13.227590560913086\n      ],\n      [\n        \"艸\",\n        -13.228550910949707\n      ],\n      [\n        \"艶\",\n        -13.22857666015625\n      ],\n      [\n        \"秩\",\n        -13.229534149169922\n      ],\n      [\n        \"霜\",\n        -13.230586051940918\n      ],\n      [\n        \"暫\",\n        -13.2315034866333\n      ],\n      [\n        \"俸\",\n        -13.233648300170898\n      ],\n      [\n        \"π\",\n        -13.235461235046387\n      ],\n      [\n        \"豫\",\n        -13.235461235046387\n      ],\n      [\n        \"穣\",\n        -13.236452102661133\n      ],\n      [\n        \"俯\",\n        -13.236780166625977\n      ],\n      [\n        \"鼎\",\n        -13.238435745239258\n      ],\n      [\n        \"冶\",\n        -13.239762306213379\n      ],\n      [\n        \"鴉\",\n        -13.239762306213379\n      ],\n      [\n        \"矛\",\n        -13.242419242858887\n      ],\n      [\n        \"เ\",\n        -13.243926048278809\n      ],\n      [\n        \"欣\",\n        -13.24608325958252\n      ],\n      [\n        \"汪\",\n        -13.24608325958252\n      ],\n      [\n        \"爛\",\n        -13.24608325958252\n      ],\n      [\n        \"埋\",\n        -13.247064590454102\n      ],\n      [\n        \"患\",\n        -13.247221946716309\n      ],\n      [\n        \"佃\",\n        -13.247419357299805\n      ],\n      [\n        \"莢\",\n        -13.248756408691406\n      ],\n      [\n        \"痒\",\n        -13.250094413757324\n      ],\n      [\n        \"瞼\",\n        -13.25110149383545\n      ],\n      [\n        \"肇\",\n        -13.25580883026123\n      ],\n      [\n        \"羨\",\n        -13.256423950195312\n      ],\n      [\n        \"笹\",\n        -13.257447242736816\n      ],\n      [\n        \"苫\",\n        -13.257832527160645\n      ],\n      [\n        \"邱\",\n        -13.258170127868652\n      ],\n      [\n        \"衙\",\n        -13.25986099243164\n      ],\n      [\n        \"弛\",\n        -13.260198593139648\n      ],\n      [\n        \"憐\",\n        -13.263200759887695\n      ],\n      [\n        \"糊\",\n        -13.265289306640625\n      ],\n      [\n        \"酬\",\n        -13.26629638671875\n      ],\n      [\n        \"埃\",\n        -13.26630973815918\n      ],\n      [\n        \"塑\",\n        -13.26699161529541\n      ],\n      [\n        \"痩\",\n        -13.267292976379395\n      ],\n      [\n        \"餓\",\n        -13.267332077026367\n      ],\n      [\n        \"ヱ\",\n        -13.268013954162598\n      ],\n      [\n        \"魅\",\n        -13.268109321594238\n      ],\n      [\n        \"舗\",\n        -13.268165588378906\n      ],\n      [\n        \"搬\",\n        -13.268335342407227\n      ],\n      [\n        \"浸\",\n        -13.268342018127441\n      ],\n      [\n        \"賄\",\n        -13.26839828491211\n      ],\n      [\n        \"粥\",\n        -13.270404815673828\n      ],\n      [\n        \"仔\",\n        -13.271499633789062\n      ],\n      [\n        \"≪\",\n        -13.272191047668457\n      ],\n      [\n        \"什\",\n        -13.27280044555664\n      ],\n      [\n        \"餡\",\n        -13.272801399230957\n      ],\n      [\n        \"ν\",\n        -13.273833274841309\n      ],\n      [\n        \"噴\",\n        -13.273897171020508\n      ],\n      [\n        \"堯\",\n        -13.274859428405762\n      ],\n      [\n        \"鋸\",\n        -13.275203704833984\n      ],\n      [\n        \"饗\",\n        -13.275891304016113\n      ],\n      [\n        \"逼\",\n        -13.277267456054688\n      ],\n      [\n        \"祢\",\n        -13.278645515441895\n      ],\n      [\n        \"喚\",\n        -13.278984069824219\n      ],\n      [\n        \"僑\",\n        -13.279335021972656\n      ],\n      [\n        \"均\",\n        -13.27964973449707\n      ],\n      [\n        \"係\",\n        -13.280773162841797\n      ],\n      [\n        \"緊\",\n        -13.280898094177246\n      ],\n      [\n        \"桝\",\n        -13.28417682647705\n      ],\n      [\n        \"揉\",\n        -13.286059379577637\n      ],\n      [\n        \"玖\",\n        -13.286606788635254\n      ],\n      [\n        \"ي\",\n        -13.287997245788574\n      ],\n      [\n        \"挟\",\n        -13.288616180419922\n      ],\n      [\n        \"桁\",\n        -13.290661811828613\n      ],\n      [\n        \"彬\",\n        -13.291483879089355\n      ],\n      [\n        \"β\",\n        -13.29312801361084\n      ],\n      [\n        \"危\",\n        -13.294157028198242\n      ],\n      [\n        \"韋\",\n        -13.295682907104492\n      ],\n      [\n        \"💕\",\n        -13.29603385925293\n      ],\n      [\n        \"妄\",\n        -13.297086715698242\n      ],\n      [\n        \"柿\",\n        -13.299497604370117\n      ],\n      [\n        \"煩\",\n        -13.30024242401123\n      ],\n      [\n        \"鰻\",\n        -13.300604820251465\n      ],\n      [\n        \"靡\",\n        -13.302369117736816\n      ],\n      [\n        \"怯\",\n        -13.302800178527832\n      ],\n      [\n        \"苻\",\n        -13.303428649902344\n      ],\n      [\n        \"焦\",\n        -13.305157661437988\n      ],\n      [\n        \"勾\",\n        -13.305196762084961\n      ],\n      [\n        \"膨\",\n        -13.306523323059082\n      ],\n      [\n        \"∴\",\n        -13.30661392211914\n      ],\n      [\n        \"й\",\n        -13.308743476867676\n      ],\n      [\n        \"挫\",\n        -13.309453964233398\n      ],\n      [\n        \"孕\",\n        -13.309454917907715\n      ],\n      [\n        \"蘆\",\n        -13.310166358947754\n      ],\n      [\n        \"硫\",\n        -13.311945915222168\n      ],\n      [\n        \"傅\",\n        -13.31230354309082\n      ],\n      [\n        \"蕩\",\n        -13.313015937805176\n      ],\n      [\n        \"Δ\",\n        -13.313373565673828\n      ],\n      [\n        \"淋\",\n        -13.313373565673828\n      ],\n      [\n        \"槇\",\n        -13.314087867736816\n      ],\n      [\n        \"契\",\n        -13.314767837524414\n      ],\n      [\n        \"醤\",\n        -13.317307472229004\n      ],\n      [\n        \"耽\",\n        -13.317666053771973\n      ],\n      [\n        \"鉤\",\n        -13.318024635314941\n      ],\n      [\n        \"含\",\n        -13.319204330444336\n      ],\n      [\n        \"祀\",\n        -13.319442749023438\n      ],\n      [\n        \"硝\",\n        -13.320175170898438\n      ],\n      [\n        \"蛙\",\n        -13.320537567138672\n      ],\n      [\n        \"━\",\n        -13.321383476257324\n      ],\n      [\n        \"暁\",\n        -13.321747779846191\n      ],\n      [\n        \"蕾\",\n        -13.32450008392334\n      ],\n      [\n        \"濤\",\n        -13.324861526489258\n      ],\n      [\n        \"畷\",\n        -13.324861526489258\n      ],\n      [\n        \"冪\",\n        -13.32630729675293\n      ],\n      [\n        \"邊\",\n        -13.32664966583252\n      ],\n      [\n        \"据\",\n        -13.326857566833496\n      ],\n      [\n        \"△\",\n        -13.328301429748535\n      ],\n      [\n        \"〞\",\n        -13.328478813171387\n      ],\n      [\n        \"橘\",\n        -13.330862045288086\n      ],\n      [\n        \"虹\",\n        -13.331594467163086\n      ],\n      [\n        \"軋\",\n        -13.331746101379395\n      ],\n      [\n        \"距\",\n        -13.332097053527832\n      ],\n      [\n        \"Â\",\n        -13.332472801208496\n      ],\n      [\n        \"ฟ\",\n        -13.333929061889648\n      ],\n      [\n        \"遁\",\n        -13.333929061889648\n      ],\n      [\n        \"鋏\",\n        -13.334294319152832\n      ],\n      [\n        \"粘\",\n        -13.335981369018555\n      ],\n      [\n        \"榊\",\n        -13.336482048034668\n      ],\n      [\n        \"鰐\",\n        -13.336483001708984\n      ],\n      [\n        \"勘\",\n        -13.337096214294434\n      ],\n      [\n        \"舜\",\n        -13.337214469909668\n      ],\n      [\n        \"ñ\",\n        -13.337944984436035\n      ],\n      [\n        \"唸\",\n        -13.338311195373535\n      ],\n      [\n        \"賤\",\n        -13.339044570922852\n      ],\n      [\n        \"殆\",\n        -13.339776992797852\n      ],\n      [\n        \"賈\",\n        -13.340143203735352\n      ],\n      [\n        \"但\",\n        -13.340906143188477\n      ],\n      [\n        \"樂\",\n        -13.341243743896484\n      ],\n      [\n        \"狗\",\n        -13.343361854553223\n      ],\n      [\n        \"悠\",\n        -13.343391418457031\n      ],\n      [\n        \"關\",\n        -13.343448638916016\n      ],\n      [\n        \"臀\",\n        -13.347502708435059\n      ],\n      [\n        \"玲\",\n        -13.347853660583496\n      ],\n      [\n        \"虞\",\n        -13.348980903625488\n      ],\n      [\n        \"践\",\n        -13.351130485534668\n      ],\n      [\n        \"廓\",\n        -13.353057861328125\n      ],\n      [\n        \"欄\",\n        -13.353079795837402\n      ],\n      [\n        \"吃\",\n        -13.353429794311523\n      ],\n      [\n        \"簾\",\n        -13.354172706604004\n      ],\n      [\n        \"卸\",\n        -13.354207038879395\n      ],\n      [\n        \"繕\",\n        -13.355265617370605\n      ],\n      [\n        \"腋\",\n        -13.355289459228516\n      ],\n      [\n        \"萬\",\n        -13.356081008911133\n      ],\n      [\n        \"箏\",\n        -13.357897758483887\n      ],\n      [\n        \"紆\",\n        -13.358644485473633\n      ],\n      [\n        \"疏\",\n        -13.359018325805664\n      ],\n      [\n        \"糞\",\n        -13.359090805053711\n      ],\n      [\n        \"眞\",\n        -13.359467506408691\n      ],\n      [\n        \"套\",\n        -13.360139846801758\n      ],\n      [\n        \"稀\",\n        -13.360198974609375\n      ],\n      [\n        \"睨\",\n        -13.360512733459473\n      ],\n      [\n        \"丑\",\n        -13.362011909484863\n      ],\n      [\n        \"謡\",\n        -13.362987518310547\n      ],\n      [\n        \"脊\",\n        -13.363136291503906\n      ],\n      [\n        \"宥\",\n        -13.36351203918457\n      ],\n      [\n        \"柊\",\n        -13.3665189743042\n      ],\n      [\n        \"别\",\n        -13.36689567565918\n      ],\n      [\n        \"醒\",\n        -13.36801528930664\n      ],\n      [\n        \"苞\",\n        -13.37104606628418\n      ],\n      [\n        \"藍\",\n        -13.371981620788574\n      ],\n      [\n        \"註\",\n        -13.37218189239502\n      ],\n      [\n        \"貪\",\n        -13.372939109802246\n      ],\n      [\n        \"貼\",\n        -13.372957229614258\n      ],\n      [\n        \"惜\",\n        -13.373045921325684\n      ],\n      [\n        \"嚥\",\n        -13.373697280883789\n      ],\n      [\n        \"线\",\n        -13.375094413757324\n      ],\n      [\n        \"屠\",\n        -13.376354217529297\n      ],\n      [\n        \"漿\",\n        -13.377495765686035\n      ],\n      [\n        \"ฒ\",\n        -13.377876281738281\n      ],\n      [\n        \"酉\",\n        -13.380927085876465\n      ],\n      [\n        \"砦\",\n        -13.383109092712402\n      ],\n      [\n        \"鰹\",\n        -13.383220672607422\n      ],\n      [\n        \"犠\",\n        -13.385519981384277\n      ],\n      [\n        \"惰\",\n        -13.386287689208984\n      ],\n      [\n        \"緻\",\n        -13.386287689208984\n      ],\n      [\n        \"ب\",\n        -13.386672019958496\n      ],\n      [\n        \"謬\",\n        -13.387439727783203\n      ],\n      [\n        \"脩\",\n        -13.387825012207031\n      ],\n      [\n        \"犀\",\n        -13.388209342956543\n      ],\n      [\n        \"盲\",\n        -13.388901710510254\n      ],\n      [\n        \"岬\",\n        -13.39046859741211\n      ],\n      [\n        \"釣\",\n        -13.391789436340332\n      ],\n      [\n        \"捲\",\n        -13.394383430480957\n      ],\n      [\n        \"甕\",\n        -13.395933151245117\n      ],\n      [\n        \"慕\",\n        -13.398666381835938\n      ],\n      [\n        \"呑\",\n        -13.398686408996582\n      ],\n      [\n        \"鰓\",\n        -13.399039268493652\n      ],\n      [\n        \"∵\",\n        -13.400595664978027\n      ],\n      [\n        \"琳\",\n        -13.401374816894531\n      ],\n      [\n        \"瘡\",\n        -13.401764869689941\n      ],\n      [\n        \"ß\",\n        -13.402154922485352\n      ],\n      [\n        \"檻\",\n        -13.402935028076172\n      ],\n      [\n        \"竺\",\n        -13.402935028076172\n      ],\n      [\n        \"\",\n        -13.403716087341309\n      ],\n      [\n        \"馨\",\n        -13.405281066894531\n      ],\n      [\n        \"屍\",\n        -13.405672073364258\n      ],\n      [\n        \"姚\",\n        -13.4060640335083\n      ],\n      [\n        \"諒\",\n        -13.4080228805542\n      ],\n      [\n        \"賑\",\n        -13.409065246582031\n      ],\n      [\n        \"穢\",\n        -13.409594535827637\n      ],\n      [\n        \"猶\",\n        -13.409987449645996\n      ],\n      [\n        \"禿\",\n        -13.409987449645996\n      ],\n      [\n        \"扁\",\n        -13.410773277282715\n      ],\n      [\n        \"捌\",\n        -13.410773277282715\n      ],\n      [\n        \"蝉\",\n        -13.411954879760742\n      ],\n      [\n        \"ใ\",\n        -13.412348747253418\n      ],\n      [\n        \"紐\",\n        -13.412477493286133\n      ],\n      [\n        \"醸\",\n        -13.412662506103516\n      ],\n      [\n        \"葵\",\n        -13.413272857666016\n      ],\n      [\n        \"鬱\",\n        -13.413662910461426\n      ],\n      [\n        \"壷\",\n        -13.415111541748047\n      ],\n      [\n        \"贖\",\n        -13.415902137756348\n      ],\n      [\n        \"♀\",\n        -13.416297912597656\n      ],\n      [\n        \"ت\",\n        -13.418277740478516\n      ],\n      [\n        \"謁\",\n        -13.419466972351074\n      ],\n      [\n        \"凧\",\n        -13.419864654541016\n      ],\n      [\n        \"猪\",\n        -13.42406940460205\n      ],\n      [\n        \"舶\",\n        -13.424543380737305\n      ],\n      [\n        \"捺\",\n        -13.425838470458984\n      ],\n      [\n        \"叩\",\n        -13.427013397216797\n      ],\n      [\n        \"閻\",\n        -13.428237915039062\n      ],\n      [\n        \"拿\",\n        -13.428638458251953\n      ],\n      [\n        \"佇\",\n        -13.431446075439453\n      ],\n      [\n        \"殉\",\n        -13.431446075439453\n      ],\n      [\n        \"巽\",\n        -13.434664726257324\n      ],\n      [\n        \"捉\",\n        -13.435419082641602\n      ],\n      [\n        \"惚\",\n        -13.4357271194458\n      ],\n      [\n        \"繭\",\n        -13.436278343200684\n      ],\n      [\n        \"招\",\n        -13.437827110290527\n      ],\n      [\n        \"紬\",\n        -13.437893867492676\n      ],\n      [\n        \"誇\",\n        -13.438628196716309\n      ],\n      [\n        \"\",\n        -13.439107894897461\n      ],\n      [\n        \"擁\",\n        -13.442209243774414\n      ],\n      [\n        \"芥\",\n        -13.445196151733398\n      ],\n      [\n        \"卍\",\n        -13.445198059082031\n      ],\n      [\n        \"椒\",\n        -13.445598602294922\n      ],\n      [\n        \"綴\",\n        -13.44637393951416\n      ],\n      [\n        \"ê\",\n        -13.446420669555664\n      ],\n      [\n        \"萱\",\n        -13.44682788848877\n      ],\n      [\n        \"爲\",\n        -13.447234153747559\n      ],\n      [\n        \"謄\",\n        -13.448869705200195\n      ],\n      [\n        \"閤\",\n        -13.448869705200195\n      ],\n      [\n        \"眉\",\n        -13.449286460876465\n      ],\n      [\n        \"唾\",\n        -13.449687957763672\n      ],\n      [\n        \"猥\",\n        -13.450508117675781\n      ],\n      [\n        \"蔦\",\n        -13.45214557647705\n      ],\n      [\n        \"紡\",\n        -13.45302677154541\n      ],\n      [\n        \"倹\",\n        -13.453786849975586\n      ],\n      [\n        \"矯\",\n        -13.455018997192383\n      ],\n      [\n        \"襖\",\n        -13.455431938171387\n      ],\n      [\n        \"徐\",\n        -13.455924034118652\n      ],\n      [\n        \"燭\",\n        -13.456665992736816\n      ],\n      [\n        \"璋\",\n        -13.45707893371582\n      ],\n      [\n        \"撥\",\n        -13.459553718566895\n      ],\n      [\n        \"獅\",\n        -13.46079158782959\n      ],\n      [\n        \"凱\",\n        -13.4620361328125\n      ],\n      [\n        \"旛\",\n        -13.4620361328125\n      ],\n      [\n        \"娶\",\n        -13.464523315429688\n      ],\n      [\n        \"〓\",\n        -13.465770721435547\n      ],\n      [\n        \"謎\",\n        -13.46845531463623\n      ],\n      [\n        \"螺\",\n        -13.469518661499023\n      ],\n      [\n        \"喘\",\n        -13.472862243652344\n      ],\n      [\n        \"¿\",\n        -13.474119186401367\n      ],\n      [\n        \"忽\",\n        -13.474119186401367\n      ],\n      [\n        \"裾\",\n        -13.47605037689209\n      ],\n      [\n        \"沸\",\n        -13.477320671081543\n      ],\n      [\n        \"范\",\n        -13.47916316986084\n      ],\n      [\n        \"δ\",\n        -13.480006217956543\n      ],\n      [\n        \"鍛\",\n        -13.48033618927002\n      ],\n      [\n        \"姻\",\n        -13.480405807495117\n      ],\n      [\n        \"贋\",\n        -13.481271743774414\n      ],\n      [\n        \"埴\",\n        -13.482115745544434\n      ],\n      [\n        \"斤\",\n        -13.482538223266602\n      ],\n      [\n        \"踊\",\n        -13.482827186584473\n      ],\n      [\n        \"詠\",\n        -13.484106063842773\n      ],\n      [\n        \"ธ\",\n        -13.485926628112793\n      ],\n      [\n        \"穆\",\n        -13.485926628112793\n      ],\n      [\n        \"賽\",\n        -13.488049507141113\n      ],\n      [\n        \"酵\",\n        -13.489664077758789\n      ],\n      [\n        \"蹊\",\n        -13.489751815795898\n      ],\n      [\n        \"Σ\",\n        -13.491029739379883\n      ],\n      [\n        \"癬\",\n        -13.491029739379883\n      ],\n      [\n        \"芦\",\n        -13.491411209106445\n      ],\n      [\n        \"侑\",\n        -13.491456031799316\n      ],\n      [\n        \"侶\",\n        -13.491870880126953\n      ],\n      [\n        \"榛\",\n        -13.491881370544434\n      ],\n      [\n        \"淫\",\n        -13.492271423339844\n      ],\n      [\n        \"哨\",\n        -13.49359130859375\n      ],\n      [\n        \"椀\",\n        -13.4940185546875\n      ],\n      [\n        \"肴\",\n        -13.4940185546875\n      ],\n      [\n        \"柑\",\n        -13.49573040008545\n      ],\n      [\n        \"怠\",\n        -13.496575355529785\n      ],\n      [\n        \"}\",\n        -13.496583938598633\n      ],\n      [\n        \"ы\",\n        -13.497445106506348\n      ],\n      [\n        \"я\",\n        -13.49787425994873\n      ],\n      [\n        \"竣\",\n        -13.49787425994873\n      ],\n      [\n        \"鞠\",\n        -13.49787425994873\n      ],\n      [\n        \"п\",\n        -13.498732566833496\n      ],\n      [\n        \"髭\",\n        -13.498749732971191\n      ],\n      [\n        \"鎌\",\n        -13.499116897583008\n      ],\n      [\n        \"瀋\",\n        -13.504334449768066\n      ],\n      [\n        \"彡\",\n        -13.506497383117676\n      ],\n      [\n        \"甦\",\n        -13.507363319396973\n      ],\n      [\n        \"圃\",\n        -13.508665084838867\n      ],\n      [\n        \"圳\",\n        -13.513885498046875\n      ],\n      [\n        \"錘\",\n        -13.513885498046875\n      ],\n      [\n        \"嘘\",\n        -13.516668319702148\n      ],\n      [\n        \"游\",\n        -13.517380714416504\n      ],\n      [\n        \"焔\",\n        -13.51781940460205\n      ],\n      [\n        \"禽\",\n        -13.518257141113281\n      ],\n      [\n        \"κ\",\n        -13.518694877624512\n      ],\n      [\n        \"竄\",\n        -13.519133567810059\n      ],\n      [\n        \"繰\",\n        -13.51976203918457\n      ],\n      [\n        \"發\",\n        -13.5204496383667\n      ],\n      [\n        \"█\",\n        -13.520889282226562\n      ],\n      [\n        \"б\",\n        -13.521327018737793\n      ],\n      [\n        \"璽\",\n        -13.521768569946289\n      ],\n      [\n        \"貶\",\n        -13.523088455200195\n      ],\n      [\n        \"脛\",\n        -13.523528099060059\n      ],\n      [\n        \"鶯\",\n        -13.523528099060059\n      ],\n      [\n        \"萌\",\n        -13.525510787963867\n      ],\n      [\n        \"慌\",\n        -13.52571964263916\n      ],\n      [\n        \"甑\",\n        -13.526174545288086\n      ],\n      [\n        \"葱\",\n        -13.526174545288086\n      ],\n      [\n        \"圭\",\n        -13.526863098144531\n      ],\n      [\n        \"د\",\n        -13.527057647705078\n      ],\n      [\n        \"ь\",\n        -13.527941703796387\n      ],\n      [\n        \"›\",\n        -13.528827667236328\n      ],\n      [\n        \"凹\",\n        -13.531390190124512\n      ],\n      [\n        \"刷\",\n        -13.534429550170898\n      ],\n      [\n        \"傍\",\n        -13.534430503845215\n      ],\n      [\n        \"ι\",\n        -13.5346040725708\n      ],\n      [\n        \"竪\",\n        -13.535490989685059\n      ],\n      [\n        \"س\",\n        -13.536382675170898\n      ],\n      [\n        \"曰\",\n        -13.536808013916016\n      ],\n      [\n        \"掾\",\n        -13.538616180419922\n      ],\n      [\n        \"拉\",\n        -13.541302680969238\n      ],\n      [\n        \"г\",\n        -13.541749954223633\n      ],\n      [\n        \"撲\",\n        -13.542563438415527\n      ],\n      [\n        \"禍\",\n        -13.542577743530273\n      ],\n      [\n        \"窯\",\n        -13.546207427978516\n      ],\n      [\n        \"茅\",\n        -13.546623229980469\n      ],\n      [\n        \"趣\",\n        -13.546639442443848\n      ],\n      [\n        \"襟\",\n        -13.551673889160156\n      ],\n      [\n        \"蒼\",\n        -13.552127838134766\n      ],\n      [\n        \"欅\",\n        -13.553481101989746\n      ],\n      [\n        \"观\",\n        -13.557121276855469\n      ],\n      [\n        \"−\",\n        -13.557168006896973\n      ],\n      [\n        \"刹\",\n        -13.562599182128906\n      ],\n      [\n        \"稽\",\n        -13.565339088439941\n      ],\n      [\n        \"媛\",\n        -13.567508697509766\n      ],\n      [\n        \"薫\",\n        -13.568251609802246\n      ],\n      [\n        \"壌\",\n        -13.572540283203125\n      ],\n      [\n        \"坦\",\n        -13.575431823730469\n      ],\n      [\n        \"趾\",\n        -13.575505256652832\n      ],\n      [\n        \"ก\",\n        -13.581809043884277\n      ],\n      [\n        \"冨\",\n        -13.583224296569824\n      ],\n      [\n        \"蜜\",\n        -13.585105895996094\n      ],\n      [\n        \"甚\",\n        -13.58554458618164\n      ],\n      [\n        \"撤\",\n        -13.586701393127441\n      ],\n      [\n        \"寓\",\n        -13.586702346801758\n      ],\n      [\n        \"訟\",\n        -13.58811092376709\n      ],\n      [\n        \"較\",\n        -13.593238830566406\n      ],\n      [\n        \"咽\",\n        -13.594709396362305\n      ],\n      [\n        \"炒\",\n        -13.595538139343262\n      ],\n      [\n        \"砺\",\n        -13.596129417419434\n      ],\n      [\n        \"堰\",\n        -13.601298332214355\n      ],\n      [\n        \"齋\",\n        -13.601828575134277\n      ],\n      [\n        \"茨\",\n        -13.602682113647461\n      ],\n      [\n        \"械\",\n        -13.602911949157715\n      ],\n      [\n        \"豹\",\n        -13.60373592376709\n      ],\n      [\n        \"幽\",\n        -13.604182243347168\n      ],\n      [\n        \"催\",\n        -13.604828834533691\n      ],\n      [\n        \"遥\",\n        -13.605144500732422\n      ],\n      [\n        \"肋\",\n        -13.605168342590332\n      ],\n      [\n        \"⁄\",\n        -13.605645179748535\n      ],\n      [\n        \"倭\",\n        -13.606600761413574\n      ],\n      [\n        \"馳\",\n        -13.607430458068848\n      ],\n      [\n        \"♪\",\n        -13.608038902282715\n      ],\n      [\n        \"諮\",\n        -13.608039855957031\n      ],\n      [\n        \"妬\",\n        -13.608040809631348\n      ],\n      [\n        \"駕\",\n        -13.609474182128906\n      ],\n      [\n        \"萎\",\n        -13.61043930053711\n      ],\n      [\n        \"旺\",\n        -13.610919952392578\n      ],\n      [\n        \"桟\",\n        -13.610919952392578\n      ],\n      [\n        \"裟\",\n        -13.611882209777832\n      ],\n      [\n        \"朔\",\n        -13.61434268951416\n      ],\n      [\n        \"产\",\n        -13.615174293518066\n      ],\n      [\n        \"慎\",\n        -13.618219375610352\n      ],\n      [\n        \"唯\",\n        -13.619485855102539\n      ],\n      [\n        \"貿\",\n        -13.619609832763672\n      ],\n      [\n        \"凛\",\n        -13.621662139892578\n      ],\n      [\n        \"å\",\n        -13.622654914855957\n      ],\n      [\n        \"呪\",\n        -13.627556800842285\n      ],\n      [\n        \"汰\",\n        -13.627646446228027\n      ],\n      [\n        \"∞\",\n        -13.630024909973145\n      ],\n      [\n        \"蹴\",\n        -13.638455390930176\n      ],\n      [\n        \"釧\",\n        -13.641173362731934\n      ],\n      [\n        \"祷\",\n        -13.641664505004883\n      ],\n      [\n        \"斥\",\n        -13.645134925842285\n      ],\n      [\n        \"些\",\n        -13.645145416259766\n      ],\n      [\n        \"溢\",\n        -13.645968437194824\n      ],\n      [\n        \"瞑\",\n        -13.647136688232422\n      ],\n      [\n        \"貰\",\n        -13.65246868133545\n      ],\n      [\n        \"憎\",\n        -13.655001640319824\n      ],\n      [\n        \"薦\",\n        -13.66061019897461\n      ],\n      [\n        \"窒\",\n        -13.661174774169922\n      ],\n      [\n        \"鯨\",\n        -13.666743278503418\n      ],\n      [\n        \"梱\",\n        -13.668286323547363\n      ],\n      [\n        \"麹\",\n        -13.669828414916992\n      ],\n      [\n        \"′\",\n        -13.674417495727539\n      ],\n      [\n        \"碧\",\n        -13.677538871765137\n      ],\n      [\n        \"恥\",\n        -13.677557945251465\n      ],\n      [\n        \"穫\",\n        -13.679537773132324\n      ],\n      [\n        \"絹\",\n        -13.679641723632812\n      ],\n      [\n        \"勿\",\n        -13.681062698364258\n      ],\n      [\n        \"贅\",\n        -13.682645797729492\n      ],\n      [\n        \"☺\",\n        -13.684196472167969\n      ],\n      [\n        \"曝\",\n        -13.686238288879395\n      ],\n      [\n        \"肖\",\n        -13.697210311889648\n      ],\n      [\n        \"鄭\",\n        -13.698505401611328\n      ],\n      [\n        \"准\",\n        -13.699034690856934\n      ],\n      [\n        \"梶\",\n        -13.700590133666992\n      ],\n      [\n        \"’\",\n        -13.702214241027832\n      ],\n      [\n        \"喪\",\n        -13.702214241027832\n      ],\n      [\n        \"燻\",\n        -13.70246410369873\n      ],\n      [\n        \"峨\",\n        -13.705101013183594\n      ],\n      [\n        \"且\",\n        -13.706146240234375\n      ],\n      [\n        \"披\",\n        -13.707216262817383\n      ],\n      [\n        \"紺\",\n        -13.70914077758789\n      ],\n      [\n        \"冴\",\n        -13.717787742614746\n      ],\n      [\n        \"葡\",\n        -13.718391418457031\n      ],\n      [\n        \"餐\",\n        -13.722136497497559\n      ],\n      [\n        \"忙\",\n        -13.722527503967285\n      ],\n      [\n        \"應\",\n        -13.731832504272461\n      ],\n      [\n        \"倶\",\n        -13.734574317932129\n      ],\n      [\n        \"湧\",\n        -13.735126495361328\n      ],\n      [\n        \"儲\",\n        -13.737449645996094\n      ],\n      [\n        \"偵\",\n        -13.740564346313477\n      ],\n      [\n        \"毀\",\n        -13.741674423217773\n      ],\n      [\n        \"聡\",\n        -13.742295265197754\n      ],\n      [\n        \"芯\",\n        -13.746171951293945\n      ],\n      [\n        \"‍\",\n        -13.74661922454834\n      ],\n      [\n        \"阜\",\n        -13.747708320617676\n      ],\n      [\n        \"抹\",\n        -13.74771785736084\n      ],\n      [\n        \"剰\",\n        -13.748212814331055\n      ],\n      [\n        \"逗\",\n        -13.751026153564453\n      ],\n      [\n        \"疲\",\n        -13.75217342376709\n      ],\n      [\n        \"晦\",\n        -13.75324535369873\n      ],\n      [\n        \"狛\",\n        -13.75601863861084\n      ],\n      [\n        \"零\",\n        -13.758440017700195\n      ],\n      [\n        \"蕉\",\n        -13.763830184936523\n      ],\n      [\n        \"崖\",\n        -13.769726753234863\n      ],\n      [\n        \"遵\",\n        -13.77000904083252\n      ],\n      [\n        \"无\",\n        -13.770009994506836\n      ],\n      [\n        \"碁\",\n        -13.78000259399414\n      ],\n      [\n        \"揖\",\n        -13.783056259155273\n      ],\n      [\n        \"费\",\n        -13.786953926086426\n      ],\n      [\n        \"菩\",\n        -13.78763484954834\n      ],\n      [\n        \"堆\",\n        -13.791656494140625\n      ],\n      [\n        \"挨\",\n        -13.795696258544922\n      ],\n      [\n        \"揺\",\n        -13.796154975891113\n      ],\n      [\n        \"漆\",\n        -13.799100875854492\n      ],\n      [\n        \"巫\",\n        -13.79917049407959\n      ],\n      [\n        \"箸\",\n        -13.800902366638184\n      ],\n      [\n        \"ป\",\n        -13.806778907775879\n      ],\n      [\n        \"蟹\",\n        -13.807341575622559\n      ],\n      [\n        \"琢\",\n        -13.807906150817871\n      ],\n      [\n        \"匹\",\n        -13.808547019958496\n      ],\n      [\n        \"購\",\n        -13.813136100769043\n      ],\n      [\n        \"拶\",\n        -13.813194274902344\n      ],\n      [\n        \"斬\",\n        -13.815032005310059\n      ],\n      [\n        \"吊\",\n        -13.816255569458008\n      ],\n      [\n        \"郁\",\n        -13.816255569458008\n      ],\n      [\n        \"擲\",\n        -13.820873260498047\n      ],\n      [\n        \"搭\",\n        -13.82800006866455\n      ],\n      [\n        \"畿\",\n        -13.829755783081055\n      ],\n      [\n        \"椿\",\n        -13.830639839172363\n      ],\n      [\n        \"捧\",\n        -13.844849586486816\n      ],\n      [\n        \"蔓\",\n        -13.849746704101562\n      ],\n      [\n        \"◯\",\n        -13.851994514465332\n      ],\n      [\n        \"雛\",\n        -13.85319709777832\n      ],\n      [\n        \"循\",\n        -13.853416442871094\n      ],\n      [\n        \"遙\",\n        -13.853951454162598\n      ],\n      [\n        \"袈\",\n        -13.854028701782227\n      ],\n      [\n        \"荊\",\n        -13.857097625732422\n      ],\n      [\n        \"牲\",\n        -13.857712745666504\n      ],\n      [\n        \"洒\",\n        -13.858943939208984\n      ],\n      [\n        \"簿\",\n        -13.85953426361084\n      ],\n      [\n        \"狙\",\n        -13.866278648376465\n      ],\n      [\n        \"屏\",\n        -13.873836517333984\n      ],\n      [\n        \"牽\",\n        -13.873836517333984\n      ],\n      [\n        \"痢\",\n        -13.877902030944824\n      ],\n      [\n        \"沃\",\n        -13.878223419189453\n      ],\n      [\n        \"凝\",\n        -13.884501457214355\n      ],\n      [\n        \"瘍\",\n        -13.886420249938965\n      ],\n      [\n        \"梢\",\n        -13.890725135803223\n      ],\n      [\n        \"曼\",\n        -13.891497611999512\n      ],\n      [\n        \"飢\",\n        -13.891938209533691\n      ],\n      [\n        \"熾\",\n        -13.898521423339844\n      ],\n      [\n        \"糾\",\n        -13.911420822143555\n      ],\n      [\n        \"$\",\n        -13.914992332458496\n      ],\n      [\n        \"洩\",\n        -13.918583869934082\n      ],\n      [\n        \"珂\",\n        -13.921205520629883\n      ],\n      [\n        \"廿\",\n        -13.92186164855957\n      ],\n      [\n        \"酪\",\n        -13.92580509185791\n      ],\n      [\n        \"逓\",\n        -13.929763793945312\n      ],\n      [\n        \"臆\",\n        -13.949124336242676\n      ],\n      [\n        \"宙\",\n        -13.95175838470459\n      ],\n      [\n        \"%\",\n        -13.95246696472168\n      ],\n      [\n        \"柵\",\n        -13.96619987487793\n      ],\n      [\n        \"榴\",\n        -13.967491149902344\n      ],\n      [\n        \"甥\",\n        -13.967582702636719\n      ],\n      [\n        \"噂\",\n        -13.973135948181152\n      ],\n      [\n        \"措\",\n        -13.978537559509277\n      ],\n      [\n        \"囃\",\n        -13.982708930969238\n      ],\n      [\n        \"·\",\n        -13.985745429992676\n      ],\n      [\n        \"矮\",\n        -13.98620319366455\n      ],\n      [\n        \"尖\",\n        -13.986437797546387\n      ],\n      [\n        \"愉\",\n        -13.98815631866455\n      ],\n      [\n        \"疼\",\n        -13.99251937866211\n      ],\n      [\n        \"裳\",\n        -13.996036529541016\n      ],\n      [\n        \"￣\",\n        -13.999945640563965\n      ],\n      [\n        \"纂\",\n        -14.013781547546387\n      ],\n      [\n        \"或\",\n        -14.014342308044434\n      ],\n      [\n        \"沫\",\n        -14.016733169555664\n      ],\n      [\n        \"ヵ\",\n        -14.016743659973145\n      ],\n      [\n        \"杭\",\n        -14.027464866638184\n      ],\n      [\n        \"韮\",\n        -14.028351783752441\n      ],\n      [\n        \"迄\",\n        -14.04677963256836\n      ],\n      [\n        \"咄\",\n        -14.048250198364258\n      ],\n      [\n        \"桔\",\n        -14.05123233795166\n      ],\n      [\n        \"奄\",\n        -14.054221153259277\n      ],\n      [\n        \"傭\",\n        -14.057220458984375\n      ],\n      [\n        \"窃\",\n        -14.058725357055664\n      ],\n      [\n        \"炸\",\n        -14.059477806091309\n      ],\n      [\n        \"拗\",\n        -14.073873519897461\n      ],\n      [\n        \"嘱\",\n        -14.078471183776855\n      ],\n      [\n        \"唆\",\n        -14.078474998474121\n      ],\n      [\n        \"彿\",\n        -14.080779075622559\n      ],\n      [\n        \"伎\",\n        -14.085403442382812\n      ],\n      [\n        \"噌\",\n        -14.08689022064209\n      ],\n      [\n        \"崗\",\n        -14.086950302124023\n      ],\n      [\n        \"≫\",\n        -14.08731460571289\n      ],\n      [\n        \"椅\",\n        -14.08927059173584\n      ],\n      [\n        \"茹\",\n        -14.08927059173584\n      ],\n      [\n        \"冗\",\n        -14.090825080871582\n      ],\n      [\n        \"肘\",\n        -14.092007637023926\n      ],\n      [\n        \"ศ\",\n        -14.095149040222168\n      ],\n      [\n        \"哺\",\n        -14.100190162658691\n      ],\n      [\n        \"∀\",\n        -14.101542472839355\n      ],\n      [\n        \"朧\",\n        -14.104631423950195\n      ],\n      [\n        \"剖\",\n        -14.108034133911133\n      ],\n      [\n        \"瞳\",\n        -14.112602233886719\n      ],\n      [\n        \"騨\",\n        -14.120772361755371\n      ],\n      [\n        \"咎\",\n        -14.131956100463867\n      ],\n      [\n        \"吠\",\n        -14.135086059570312\n      ],\n      [\n        \"惣\",\n        -14.13526725769043\n      ],\n      [\n        \"泌\",\n        -14.13651180267334\n      ],\n      [\n        \"涯\",\n        -14.143689155578613\n      ],\n      [\n        \"焉\",\n        -14.154128074645996\n      ],\n      [\n        \"咳\",\n        -14.154274940490723\n      ],\n      [\n        \"μ\",\n        -14.161813735961914\n      ],\n      [\n        \"覆\",\n        -14.164271354675293\n      ],\n      [\n        \"昧\",\n        -14.166324615478516\n      ],\n      [\n        \"〕\",\n        -14.166869163513184\n      ],\n      [\n        \"蝦\",\n        -14.170836448669434\n      ],\n      [\n        \"嵯\",\n        -14.17251968383789\n      ],\n      [\n        \"燥\",\n        -14.174190521240234\n      ],\n      [\n        \"證\",\n        -14.17420768737793\n      ],\n      [\n        \"昏\",\n        -14.18265151977539\n      ],\n      [\n        \"培\",\n        -14.183053016662598\n      ],\n      [\n        \"捗\",\n        -14.184372901916504\n      ],\n      [\n        \"纏\",\n        -14.189062118530273\n      ],\n      [\n        \"蠣\",\n        -14.200727462768555\n      ],\n      [\n        \"噛\",\n        -14.202127456665039\n      ],\n      [\n        \"梗\",\n        -14.215575218200684\n      ],\n      [\n        \"稔\",\n        -14.218008041381836\n      ],\n      [\n        \"云\",\n        -14.220608711242676\n      ],\n      [\n        \"彙\",\n        -14.22134017944336\n      ],\n      [\n        \"肛\",\n        -14.221753120422363\n      ],\n      [\n        \"碗\",\n        -14.227921485900879\n      ],\n      [\n        \"浙\",\n        -14.228860855102539\n      ],\n      [\n        \"赴\",\n        -14.22984790802002\n      ],\n      [\n        \"迂\",\n        -14.247762680053711\n      ],\n      [\n        \"批\",\n        -14.260542869567871\n      ],\n      [\n        \"琶\",\n        -14.265179634094238\n      ],\n      [\n        \"拘\",\n        -14.270949363708496\n      ],\n      [\n        \"疎\",\n        -14.274696350097656\n      ],\n      [\n        \"濾\",\n        -14.27820873260498\n      ],\n      [\n        \"醐\",\n        -14.281023025512695\n      ],\n      [\n        \"醍\",\n        -14.285731315612793\n      ],\n      [\n        \"邉\",\n        -14.29044246673584\n      ],\n      [\n        \"檜\",\n        -14.291808128356934\n      ],\n      [\n        \"濫\",\n        -14.293310165405273\n      ],\n      [\n        \"æ\",\n        -14.297568321228027\n      ],\n      [\n        \"琵\",\n        -14.298076629638672\n      ],\n      [\n        \"耆\",\n        -14.301888465881348\n      ],\n      [\n        \"釘\",\n        -14.30433177947998\n      ],\n      [\n        \"凸\",\n        -14.310140609741211\n      ],\n      [\n        \"‘\",\n        -14.311141014099121\n      ],\n      [\n        \"视\",\n        -14.320301055908203\n      ],\n      [\n        \"筐\",\n        -14.32716178894043\n      ],\n      [\n        \"♡\",\n        -14.334845542907715\n      ],\n      [\n        \"肯\",\n        -14.338043212890625\n      ],\n      [\n        \"爬\",\n        -14.342029571533203\n      ],\n      [\n        \"蛋\",\n        -14.346031188964844\n      ],\n      [\n        \"嶼\",\n        -14.352913856506348\n      ],\n      [\n        \"填\",\n        -14.357078552246094\n      ],\n      [\n        \"栽\",\n        -14.360157012939453\n      ],\n      [\n        \"扮\",\n        -14.36037826538086\n      ],\n      [\n        \"菖\",\n        -14.363221168518066\n      ],\n      [\n        \"騙\",\n        -14.367328643798828\n      ],\n      [\n        \"皐\",\n        -14.375534057617188\n      ],\n      [\n        \"荼\",\n        -14.390095710754395\n      ],\n      [\n        \"惹\",\n        -14.39244270324707\n      ],\n      [\n        \"墾\",\n        -14.394264221191406\n      ],\n      [\n        \"孵\",\n        -14.39851188659668\n      ],\n      [\n        \"綻\",\n        -14.40273380279541\n      ],\n      [\n        \"遮\",\n        -14.407364845275879\n      ],\n      [\n        \"遭\",\n        -14.41016674041748\n      ],\n      [\n        \"弄\",\n        -14.411677360534668\n      ],\n      [\n        \"嬢\",\n        -14.421427726745605\n      ],\n      [\n        \"鵜\",\n        -14.421448707580566\n      ],\n      [\n        \"薪\",\n        -14.439041137695312\n      ],\n      [\n        \"叶\",\n        -14.443531036376953\n      ],\n      [\n        \"攣\",\n        -14.446114540100098\n      ],\n      [\n        \"弔\",\n        -14.4501953125\n      ],\n      [\n        \"絨\",\n        -14.458377838134766\n      ],\n      [\n        \"訣\",\n        -14.46173095703125\n      ],\n      [\n        \"諜\",\n        -14.46285343170166\n      ],\n      [\n        \"〝\",\n        -14.464884757995605\n      ],\n      [\n        \"腑\",\n        -14.469658851623535\n      ],\n      [\n        \"蚊\",\n        -14.471738815307617\n      ],\n      [\n        \"宕\",\n        -14.476377487182617\n      ],\n      [\n        \"焙\",\n        -14.478775024414062\n      ],\n      [\n        \"姪\",\n        -14.48442554473877\n      ],\n      [\n        \"筈\",\n        -14.486750602722168\n      ],\n      [\n        \"塀\",\n        -14.489079475402832\n      ],\n      [\n        \"ม\",\n        -14.492584228515625\n      ],\n      [\n        \"凰\",\n        -14.494933128356934\n      ],\n      [\n        \"痺\",\n        -14.5029296875\n      ],\n      [\n        \"渦\",\n        -14.503172874450684\n      ],\n      [\n        \"摯\",\n        -14.504283905029297\n      ],\n      [\n        \"│\",\n        -14.509103775024414\n      ],\n      [\n        \"冑\",\n        -14.524429321289062\n      ],\n      [\n        \"傲\",\n        -14.526850700378418\n      ],\n      [\n        \"諧\",\n        -14.529255867004395\n      ],\n      [\n        \"荏\",\n        -14.534080505371094\n      ],\n      [\n        \"翻\",\n        -14.552862167358398\n      ],\n      [\n        \"芭\",\n        -14.554866790771484\n      ],\n      [\n        \"棘\",\n        -14.556615829467773\n      ],\n      [\n        \"嗟\",\n        -14.561062812805176\n      ],\n      [\n        \"胚\",\n        -14.562873840332031\n      ],\n      [\n        \"讐\",\n        -14.568536758422852\n      ],\n      [\n        \"婁\",\n        -14.57608699798584\n      ],\n      [\n        \"鹸\",\n        -14.578503608703613\n      ],\n      [\n        \"弩\",\n        -14.579883575439453\n      ],\n      [\n        \"珊\",\n        -14.586236953735352\n      ],\n      [\n        \"邁\",\n        -14.587512016296387\n      ],\n      [\n        \"瀕\",\n        -14.596328735351562\n      ],\n      [\n        \"鈍\",\n        -14.601265907287598\n      ],\n      [\n        \"繍\",\n        -14.60423755645752\n      ],\n      [\n        \"阻\",\n        -14.606498718261719\n      ],\n      [\n        \"銚\",\n        -14.608141899108887\n      ],\n      [\n        \"膚\",\n        -14.63183879852295\n      ],\n      [\n        \"頬\",\n        -14.635775566101074\n      ],\n      [\n        \"娯\",\n        -14.635887145996094\n      ],\n      [\n        \"嘩\",\n        -14.63588809967041\n      ],\n      [\n        \"薇\",\n        -14.638570785522461\n      ],\n      [\n        \"剪\",\n        -14.639914512634277\n      ],\n      [\n        \"妥\",\n        -14.641191482543945\n      ],\n      [\n        \"疆\",\n        -14.643594741821289\n      ],\n      [\n        \"宛\",\n        -14.643898010253906\n      ],\n      [\n        \"袴\",\n        -14.650741577148438\n      ],\n      [\n        \"遽\",\n        -14.664387702941895\n      ],\n      [\n        \"┃\",\n        -14.665935516357422\n      ],\n      [\n        \"醜\",\n        -14.674321174621582\n      ],\n      [\n        \"彗\",\n        -14.676904678344727\n      ],\n      [\n        \"攘\",\n        -14.690959930419922\n      ],\n      [\n        \"秒\",\n        -14.691283226013184\n      ],\n      [\n        \"陝\",\n        -14.692376136779785\n      ],\n      [\n        \"轟\",\n        -14.69273567199707\n      ],\n      [\n        \"夭\",\n        -14.7138671875\n      ],\n      [\n        \"舵\",\n        -14.714404106140137\n      ],\n      [\n        \"蕎\",\n        -14.719676971435547\n      ],\n      [\n        \"酎\",\n        -14.724039077758789\n      ],\n      [\n        \"眺\",\n        -14.726947784423828\n      ],\n      [\n        \"凌\",\n        -14.732050895690918\n      ],\n      [\n        \"歪\",\n        -14.733570098876953\n      ],\n      [\n        \"膣\",\n        -14.73656940460205\n      ],\n      [\n        \"隕\",\n        -14.738795280456543\n      ],\n      [\n        \"码\",\n        -14.74924373626709\n      ],\n      [\n        \"踪\",\n        -14.75524616241455\n      ],\n      [\n        \"漂\",\n        -14.766850471496582\n      ],\n      [\n        \"糟\",\n        -14.770471572875977\n      ],\n      [\n        \"漸\",\n        -14.773075103759766\n      ],\n      [\n        \"隘\",\n        -14.775070190429688\n      ],\n      [\n        \"捏\",\n        -14.778164863586426\n      ],\n      [\n        \"剥\",\n        -14.782401084899902\n      ],\n      [\n        \"痙\",\n        -14.782808303833008\n      ],\n      [\n        \"嘔\",\n        -14.789034843444824\n      ],\n      [\n        \"麒\",\n        -14.79216194152832\n      ],\n      [\n        \"拐\",\n        -14.796858787536621\n      ],\n      [\n        \"揆\",\n        -14.800548553466797\n      ],\n      [\n        \"鎧\",\n        -14.80295181274414\n      ],\n      [\n        \"餃\",\n        -14.809536933898926\n      ],\n      [\n        \"訊\",\n        -14.814188003540039\n      ],\n      [\n        \"°\",\n        -14.814188957214355\n      ],\n      [\n        \"企\",\n        -14.825390815734863\n      ],\n      [\n        \"嫉\",\n        -14.835368156433105\n      ],\n      [\n        \"瑚\",\n        -14.845229148864746\n      ],\n      [\n        \"輛\",\n        -14.85322380065918\n      ],\n      [\n        \"✨\",\n        -14.874055862426758\n      ],\n      [\n        \"仇\",\n        -14.884391784667969\n      ],\n      [\n        \"舐\",\n        -14.889005661010742\n      ],\n      [\n        \"楕\",\n        -14.89257526397705\n      ],\n      [\n        \"礎\",\n        -14.89300537109375\n      ],\n      [\n        \"愕\",\n        -14.899518013000488\n      ],\n      [\n        \"薔\",\n        -14.903018951416016\n      ],\n      [\n        \"粧\",\n        -14.916532516479492\n      ],\n      [\n        \"漱\",\n        -14.918891906738281\n      ],\n      [\n        \"墟\",\n        -14.924206733703613\n      ],\n      [\n        \"渥\",\n        -14.938640594482422\n      ],\n      [\n        \"絆\",\n        -14.956169128417969\n      ],\n      [\n        \"ا\",\n        -14.978750228881836\n      ],\n      [\n        \"衷\",\n        -14.990981101989746\n      ],\n      [\n        \"罷\",\n        -14.99648380279541\n      ],\n      [\n        \"瞰\",\n        -15.002273559570312\n      ],\n      [\n        \"琥\",\n        -15.01003360748291\n      ],\n      [\n        \"堵\",\n        -15.011916160583496\n      ],\n      [\n        \"薨\",\n        -15.023758888244629\n      ],\n      [\n        \"橿\",\n        -15.04168701171875\n      ],\n      [\n        \"詫\",\n        -15.055856704711914\n      ],\n      [\n        \"妨\",\n        -15.057886123657227\n      ],\n      [\n        \"訃\",\n        -15.064044952392578\n      ],\n      [\n        \"殴\",\n        -15.068272590637207\n      ],\n      [\n        \"珈\",\n        -15.08062744140625\n      ],\n      [\n        \"瑕\",\n        -15.084815979003906\n      ],\n      [\n        \"顆\",\n        -15.089021682739258\n      ],\n      [\n        \"疵\",\n        -15.110321998596191\n      ],\n      [\n        \"謗\",\n        -15.116801261901855\n      ],\n      [\n        \"慨\",\n        -15.1209716796875\n      ],\n      [\n        \"瞭\",\n        -15.129806518554688\n      ],\n      [\n        \"聘\",\n        -15.140911102294922\n      ],\n      [\n        \"埠\",\n        -15.145374298095703\n      ],\n      [\n        \"隻\",\n        -15.150660514831543\n      ],\n      [\n        \"ง\",\n        -15.175832748413086\n      ],\n      [\n        \"频\",\n        -15.17708683013916\n      ],\n      [\n        \"羞\",\n        -15.181700706481934\n      ],\n      [\n        \"ว\",\n        -15.182809829711914\n      ],\n      [\n        \"渤\",\n        -15.184015274047852\n      ],\n      [\n        \"จ\",\n        -15.18514633178711\n      ],\n      [\n        \"ด\",\n        -15.187488555908203\n      ],\n      [\n        \"ห\",\n        -15.192188262939453\n      ],\n      [\n        \"沌\",\n        -15.212203979492188\n      ],\n      [\n        \"〉\",\n        -15.223291397094727\n      ],\n      [\n        \"泄\",\n        -15.229039192199707\n      ],\n      [\n        \"頁\",\n        -15.235516548156738\n      ],\n      [\n        \"├\",\n        -15.240448951721191\n      ],\n      [\n        \"榜\",\n        -15.24615478515625\n      ],\n      [\n        \"冤\",\n        -15.248601913452148\n      ],\n      [\n        \"曖\",\n        -15.248631477355957\n      ],\n      [\n        \"琲\",\n        -15.256075859069824\n      ],\n      [\n        \"膀\",\n        -15.261069297790527\n      ],\n      [\n        \"淘\",\n        -15.278746604919434\n      ],\n      [\n        \"♥\",\n        -15.283384323120117\n      ],\n      [\n        \"鞄\",\n        -15.293760299682617\n      ],\n      [\n        \"叱\",\n        -15.296371459960938\n      ],\n      [\n        \"鍮\",\n        -15.296629905700684\n      ],\n      [\n        \"‐\",\n        -15.309530258178711\n      ],\n      [\n        \"跨\",\n        -15.312182426452637\n      ],\n      [\n        \"蜘\",\n        -15.31242847442627\n      ],\n      [\n        \"胱\",\n        -15.325691223144531\n      ],\n      [\n        \"罠\",\n        -15.406828880310059\n      ],\n      [\n        \"漑\",\n        -15.41209602355957\n      ],\n      [\n        \"姶\",\n        -15.415011405944824\n      ],\n      [\n        \"穿\",\n        -15.415626525878906\n      ],\n      [\n        \"拷\",\n        -15.420867919921875\n      ],\n      [\n        \"頒\",\n        -15.426758766174316\n      ],\n      [\n        \"庇\",\n        -15.433457374572754\n      ],\n      [\n        \"誹\",\n        -15.43864631652832\n      ],\n      [\n        \"倦\",\n        -15.456745147705078\n      ],\n      [\n        \"窄\",\n        -15.46284294128418\n      ],\n      [\n        \"¤\",\n        -15.470102310180664\n      ],\n      [\n        \"迭\",\n        -15.478272438049316\n      ],\n      [\n        \"殲\",\n        -15.516324996948242\n      ],\n      [\n        \"淹\",\n        -15.519238471984863\n      ],\n      [\n        \"顛\",\n        -15.529333114624023\n      ],\n      [\n        \"珀\",\n        -15.542512893676758\n      ],\n      [\n        \"匈\",\n        -15.545835494995117\n      ],\n      [\n        \"酋\",\n        -15.562613487243652\n      ],\n      [\n        \"遡\",\n        -15.564634323120117\n      ],\n      [\n        \"斡\",\n        -15.569405555725098\n      ],\n      [\n        \"蛛\",\n        -15.569405555725098\n      ],\n      [\n        \"倣\",\n        -15.588857650756836\n      ],\n      [\n        \"鹵\",\n        -15.600549697875977\n      ],\n      [\n        \"└\",\n        -15.606526374816895\n      ],\n      [\n        \"喋\",\n        -15.631767272949219\n      ],\n      [\n        \"濯\",\n        -15.665892601013184\n      ],\n      [\n        \"陛\",\n        -15.700262069702148\n      ],\n      [\n        \"雰\",\n        -15.73583984375\n      ],\n      [\n        \"煽\",\n        -15.752070426940918\n      ],\n      [\n        \"苛\",\n        -15.768730163574219\n      ],\n      [\n        \"亢\",\n        -15.798100471496582\n      ],\n      [\n        \"萄\",\n        -15.819746971130371\n      ],\n      [\n        \"諏\",\n        -15.897053718566895\n      ],\n      [\n        \"饉\",\n        -15.920982360839844\n      ],\n      [\n        \"晒\",\n        -15.927383422851562\n      ],\n      [\n        \"峙\",\n        -15.930635452270508\n      ],\n      [\n        \"氾\",\n        -15.93071460723877\n      ],\n      [\n        \"戮\",\n        -15.94051742553711\n      ],\n      [\n        \"鑽\",\n        -15.970610618591309\n      ],\n      [\n        \"饅\",\n        -16.044530868530273\n      ],\n      [\n        \"劾\",\n        -16.049970626831055\n      ],\n      [\n        \"躇\",\n        -16.089357376098633\n      ],\n      [\n        \"­\",\n        -16.1043643951416\n      ],\n      [\n        \"祉\",\n        -16.11249351501465\n      ],\n      [\n        \"恣\",\n        -16.11842918395996\n      ],\n      [\n        \"艤\",\n        -16.130298614501953\n      ],\n      [\n        \"擢\",\n        -16.142303466796875\n      ],\n      [\n        \"ā\",\n        -16.164804458618164\n      ],\n      [\n        \"毯\",\n        -16.211088180541992\n      ],\n      [\n        \"咥\",\n        -16.270925521850586\n      ],\n      [\n        \"蒐\",\n        -16.29193878173828\n      ],\n      [\n        \"賂\",\n        -16.29897689819336\n      ],\n      [\n        \"⌒\",\n        -16.348995208740234\n      ],\n      [\n        \"揄\",\n        -16.38759994506836\n      ],\n      [\n        \"檎\",\n        -16.395315170288086\n      ],\n      [\n        \"惧\",\n        -16.395347595214844\n      ],\n      [\n        \"憾\",\n        -16.403146743774414\n      ],\n      [\n        \"嚇\",\n        -16.41103172302246\n      ],\n      [\n        \"乖\",\n        -16.426977157592773\n      ],\n      [\n        \"肪\",\n        -16.4596004486084\n      ],\n      [\n        \"逮\",\n        -16.459627151489258\n      ],\n      [\n        \"傀\",\n        -16.476367950439453\n      ],\n      [\n        \"揶\",\n        -16.555355072021484\n      ],\n      [\n        \"±\",\n        -16.56560516357422\n      ],\n      [\n        \"　\",\n        -16.705135345458984\n      ],\n      [\n        \"徊\",\n        -16.71331214904785\n      ],\n      [\n        \"〟\",\n        -16.782949447631836\n      ],\n      [\n        \"︎\",\n        -16.818248748779297\n      ],\n      [\n        \"儡\",\n        -16.85067367553711\n      ],\n      [\n        \"゙\",\n        -16.905803680419922\n      ],\n      [\n        \"®\",\n        -17.140445709228516\n      ],\n      [\n        \"謳\",\n        -17.15711212158203\n      ],\n      [\n        \"\",\n        -17.382352828979492\n      ],\n      [\n        \"拮\",\n        -17.433551788330078\n      ],\n      [\n        \"┈\",\n        -17.447589874267578\n      ],\n      [\n        \"娠\",\n        -17.45577049255371\n      ],\n      [\n        \"综\",\n        -17.525489807128906\n      ],\n      [\n        \"脫\",\n        -17.928848266601562\n      ],\n      [\n        \"徘\",\n        -18.18313980102539\n      ],\n      [\n        \"\",\n        -18.50208854675293\n      ],\n      [\n        \"\",\n        -18.568756103515625\n      ],\n      [\n        \"ย\",\n        -18.568756103515625\n      ],\n      [\n        \"\",\n        -18.80044174194336\n      ],\n      [\n        \"嬲\",\n        -19.370323181152344\n      ],\n      [\n        \"น\",\n        -19.53699493408203\n      ],\n      [\n        \"บ\",\n        -19.53699493408203\n      ],\n      [\n        \"พ\",\n        -19.73699951171875\n      ],\n      [\n        \"č\",\n        -19.987009048461914\n      ],\n      [\n        \"ิ\",\n        -19.987009048461914\n      ],\n      [\n        \"\",\n        -20.32036590576172\n      ],\n      [\n        \"อ\",\n        -20.820444107055664\n      ],\n      [\n        \"่\",\n        -20.820444107055664\n      ],\n      [\n        \"\",\n        -21.820039749145508\n      ],\n      [\n        \"ณ\",\n        -21.820140838623047\n      ],\n      [\n        \"\",\n        -21.820240020751953\n      ],\n      [\n        \"ํ\",\n        -21.82033920288086\n      ],\n      [\n        \"ู\",\n        -21.8204402923584\n      ],\n      [\n        \"躊\",\n        -21.820539474487305\n      ],\n      [\n        \"ุ\",\n        -21.820640563964844\n      ],\n      [\n        \"ี\",\n        -21.82073974609375\n      ],\n      [\n        \"้\",\n        -21.82084083557129\n      ],\n      [\n        \"š\",\n        -21.820940017700195\n      ],\n      [\n        \"ž\",\n        -21.820940017700195\n      ],\n      [\n        \"ล\",\n        -21.820940017700195\n      ],\n      [\n        \"ะ\",\n        -21.820940017700195\n      ],\n      [\n        \"์\",\n        -21.820940017700195\n      ]\n    ]\n  }"
  },
  {
    "path": "BertVits.md",
    "content": "# BertVits及Vits使用指南\n- 1、按照要求安装模型\n- 2、安装Cleaner（[下载地址](https://github.com/NaruseMioShirakana/TextCleaner/releases)，将文件夹“G2P”解压到Exe路径）\n- 3、将Bert文件夹复制到Exe路径，其中的子文件夹可以放置我发布的Bert模型，也可以啥都不放（如果不放模型就不能用Bert模型，但是不影响正常推理，就是效果可能会大打折扣）\n- 4、按照自己的需要配置字典（Dict）文件\n- 5、编写输入，载入程序推理\n\n## BasicDict.json\n    字典的作用就是将软件自动处理出来的文本替换为你使用的模型的Symbol，而字典文件的作用就是规定这个替换规则，字典文件是如同BasicDict.json的文件，其中由非常多的键值对组成，其中的Key就是待替换文本，而Value就是替换后的文本。\n\n## VitsInputTemplate.json\n```jsonc\n//Json需要是数组类型\n[\n    {\n            \"Tokens\": \"私は誰？\",//必填，进入Bert的文本\n            \"Seq\": [\"w\",\"a\",\"t\",\"a\",\"s\",\"h\",\"i\",\"w\",\"a\",\"d\",\"a\",\"r\",\"e\",\"?\"],//选填，音素组成的序列，如果不填会根据Tokens自动生成\n            \"Tones\": [0,0,0,0,0,0,0,0,0,0,0,0,0],//选填，音调序列，必须与音素序列等长\n            \"Durations\": [2,5,2,5,2,2,5,2,5,2,5,2,5],//选填，音素时长序列，必须与音素序列等长\n            \"Language\": [0,0,0,0,0,0,0,0,0,0,0,0,0],//选填，语言序列，必须与音素序列等长\n            \"SpeakerMix\": [1,0,0],//选填，角色混合比例，决定对应下标角色音色的混合比例\n            \"EmotionPrompt\": [\"sad\", \"happy\"],//选填，情感参数，有情感模型的情况下可用\n            \"NoiseScale\": 0.666,//选填，噪声修正因子\n            \"LengthScale\": 1.1,//选填，时长修正因子\n            \"DurationPredictorNoiseScale\": 0.333,//选填，随机时长预测器噪声修正因子\n            \"FactorDpSdp\": 0.6,//选填，时长预测器和随机时长预测器的混合比例\n            \"GateThreshold\": 0.777,//选填，Tacotron2 EOS阈值\n            \"MaxDecodeStep\": 114514,//选填，Tacotron2 最大解码步数\n            \"Seed\": 1919810,//选填，种子\n            \"SpeakerId\": 2,//选填，角色ID（若SpeakerMix为空则使用）\n            \"RestTime\": 1.0,//选填，决定与上一个片段的时间间隔（单位为秒），若为负数则表示切断音频并输出一个新的\n            \"PlaceHolderSymbol\": \"|\",//选填，当Seq为String时，隔开两个音素的记号\n            \"LanguageID\": \"JP\",//选填，语言（ZH，JP或EN）\n            \"G2PAdditionalInfo\": \"/[Japanese2]\"//选填，Cleaner额外参数\n        },\n]\n```"
  },
  {
    "path": "CMakeLists.txt",
    "content": "﻿# CMakeList.txt: 顶层 CMake 项目文件，在此处执行全局配置\n# 并包含子项目。\n#\ncmake_minimum_required (VERSION 3.8)\n# 如果支持，请为 MSVC 编译器启用热重载。\nif (POLICY CMP0141)\n  cmake_policy(SET CMP0141 NEW)\n  set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT \"$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>\")\nendif()\n\nproject (\"DragonianSpeech\")\n\nset(FISHSPEECHCPP_BUILD_DEMO ON)\n\nadd_subdirectory (\"fish-speech.cpp\")\n"
  },
  {
    "path": "CMakePresets.json",
    "content": "﻿{\n    \"version\": 3,\n    \"configurePresets\": [\n        {\n            \"name\": \"windows-base\",\n            \"hidden\": true,\n            \"generator\": \"Ninja\",\n            \"binaryDir\": \"${sourceDir}/out/build/${presetName}\",\n            \"installDir\": \"${sourceDir}/out/install/${presetName}\",\n            \"cacheVariables\": {\n                \"CMAKE_C_COMPILER\": \"cl.exe\",\n                \"CMAKE_CXX_COMPILER\": \"cl.exe\"\n            },\n            \"condition\": {\n                \"type\": \"equals\",\n                \"lhs\": \"${hostSystemName}\",\n                \"rhs\": \"Windows\"\n            }\n        },\n        {\n            \"name\": \"x64-debug\",\n            \"displayName\": \"x64 Debug\",\n            \"inherits\": \"windows-base\",\n            \"architecture\": {\n                \"value\": \"x64\",\n                \"strategy\": \"external\"\n            },\n            \"cacheVariables\": {\n                \"CMAKE_BUILD_TYPE\": \"Debug\"\n            }\n        },\n        {\n            \"name\": \"x64-release\",\n            \"displayName\": \"x64 Release\",\n            \"inherits\": \"x64-debug\",\n            \"cacheVariables\": {\n                \"CMAKE_BUILD_TYPE\": \"Release\"\n            }\n        },\n        {\n            \"name\": \"x86-debug\",\n            \"displayName\": \"x86 Debug\",\n            \"inherits\": \"windows-base\",\n            \"architecture\": {\n                \"value\": \"x86\",\n                \"strategy\": \"external\"\n            },\n            \"cacheVariables\": {\n                \"CMAKE_BUILD_TYPE\": \"Debug\"\n            }\n        },\n        {\n            \"name\": \"x86-release\",\n            \"displayName\": \"x86 Release\",\n            \"inherits\": \"x86-debug\",\n            \"cacheVariables\": {\n                \"CMAKE_BUILD_TYPE\": \"Release\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "CSharpDemo/CSharpDemo.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>enable</Nullable>\n    <AllowUnsafeBlocks>True</AllowUnsafeBlocks>\n    <Configurations>Debug;Release</Configurations>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\DotNetApi\\DotNetApi.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\n      <DesignTime>True</DesignTime>\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Update=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "CSharpDemo/Program.cs",
    "content": "﻿using LibSvcApi;\n\nLibSvc.LibSvcHparams Config = new();\nConfig.TensorExtractor = \"DiffusionSvc\";\nConfig.SamplingRate = 44100;\nConfig.HopSize = 512;\nConfig.HubertPath = \"D:\\\\VSGIT\\\\MoeVoiceStudioSvc - Core - Cmd\\\\x64\\\\Debug\\\\hubert\\\\vec-768-layer-12.onnx\";\nConfig.SpeakerCount = 2;\nConfig.HiddenUnitKDims = 768;\nConfig.EnableCharaMix = 1;\nConfig.EnableVolume = 1;\nConfig.MelBins = 128;\nConfig.DiffusionSvc.After = \"D:\\\\VSGIT\\\\MoeVoiceStudioSvc - Core - Cmd\\\\x64\\\\Debug\\\\Models\\\\ShallowDiffusion\\\\ShallowDiffusion_after.onnx\";\nConfig.DiffusionSvc.Alpha = \"D:\\\\VSGIT\\\\MoeVoiceStudioSvc - Core - Cmd\\\\x64\\\\Debug\\\\Models\\\\ShallowDiffusion\\\\ShallowDiffusion_alpha.onnx\";\nConfig.DiffusionSvc.Encoder = \"D:\\\\VSGIT\\\\MoeVoiceStudioSvc - Core - Cmd\\\\x64\\\\Debug\\\\Models\\\\ShallowDiffusion\\\\ShallowDiffusion_encoder.onnx\";\nConfig.DiffusionSvc.Denoise = \"D:\\\\VSGIT\\\\MoeVoiceStudioSvc - Core - Cmd\\\\x64\\\\Debug\\\\Models\\\\ShallowDiffusion\\\\ShallowDiffusion_denoise.onnx\";\nConfig.DiffusionSvc.Naive = \"D:\\\\VSGIT\\\\MoeVoiceStudioSvc - Core - Cmd\\\\x64\\\\Debug\\\\Models\\\\ShallowDiffusion\\\\ShallowDiffusion_naive.onnx\";\nConfig.DiffusionSvc.Pred = \"D:\\\\VSGIT\\\\MoeVoiceStudioSvc - Core - Cmd\\\\x64\\\\Debug\\\\Models\\\\ShallowDiffusion\\\\ShallowDiffusion_pred.onnx\";\nvoid PrintProgress(ulong arg1, ulong arg2)\n{\n    Console.WriteLine(arg1 * 100.0 / 10);\n}\n\nLibSvc.CallbackProgress Callback = new LibSvc.CallbackProgress(PrintProgress);\n\nUnionModel Model = LibSvc.Factory.LoadUnionSvcModel(\n    ref Config, ref Callback,\n    0, 0, 8\n);\n\nstring AudioPath = \"input.wav\";\nInt16Vector Audio = LibSvc.Factory.ReadAudio(ref AudioPath, 48000);\nConsole.WriteLine(Audio.Size());\n\nLibSvc.SlicerSettings slicerSettings = new();\nUInt64Vector SlicePos = LibSvc.Factory.SliceAudio(ref Audio, ref slicerSettings);\nSlicePos.Resize(3);\nConsole.WriteLine(SlicePos.Size());\n\nSlices slices = LibSvc.Factory.Preprocess(ref Audio, ref SlicePos);\nConsole.WriteLine(slices.Size());\n\nstring VocoderPath = \"D:\\\\VSGIT\\\\MoeVoiceStudioSvc - Core - Cmd\\\\x64\\\\Debug\\\\hifigan\\\\nsf_hifigan.onnx\";\nVocoderModel Vocoder = LibSvc.Factory.LoadVocoderModel(ref VocoderPath);\n\nLibSvc.Params _params = new();\n_params.Step = 100;\n_params.Pndm = 10;\n_params.SetVocoder(ref Vocoder);\nulong Proc = 0;\nSlice slice = slices[1];\nAudio = Model.Inference(slice, ref _params, ref Proc);\nConsole.WriteLine((double)slice.SrcLength() * Config.SamplingRate / slicerSettings.SamplingRate);\nConsole.WriteLine(Audio.Size());\nCallback(1, 2);\nGC.KeepAlive(Callback);\nGC.KeepAlive(Vocoder);\n\nLibSvc.Factory.WriteAudio(Audio, \"Out1.wav\", Config.SamplingRate);\nAudio.Insert(ref Audio);\nLibSvc.Factory.WriteAudio(Audio, \"Out2.wav\", Config.SamplingRate);"
  },
  {
    "path": "CSharpDemo/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     此代码由工具生成。\n//     运行时版本:4.0.30319.42000\n//\n//     对此文件的更改可能会导致不正确的行为，并且如果\n//     重新生成代码，这些更改将会丢失。\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace CSharpDemo.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   一个强类型的资源类，用于查找本地化的字符串等。\n    /// </summary>\n    // 此类是由 StronglyTypedResourceBuilder\n    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。\n    // 若要添加或移除成员，请编辑 .ResX 文件，然后重新运行 ResGen\n    // (以 /str 作为命令选项)，或重新生成 VS 项目。\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   返回此类使用的缓存的 ResourceManager 实例。\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"CSharpDemo.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   重写当前线程的 CurrentUICulture 属性，对\n        ///   使用此强类型资源类的所有资源查找执行重写。\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "CSharpDemo/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n\t<!-- \n\t\tMicrosoft ResX Schema\n\n\t\tVersion 1.3\n\n\t\tThe primary goals of this format is to allow a simple XML format \n\t\tthat is mostly human readable. The generation and parsing of the \n\t\tvarious data types are done through the TypeConverter classes \n\t\tassociated with the data types.\n\n\t\tExample:\n\n\t\t... ado.net/XML headers & schema ...\n\t\t<resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n\t\t<resheader name=\"version\">1.3</resheader>\n\t\t<resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n\t\t<resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n\t\t<data name=\"Name1\">this is my long string</data>\n\t\t<data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n\t\t<data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n\t\t\t[base64 mime encoded serialized .NET Framework object]\n\t\t</data>\n\t\t<data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n\t\t\t[base64 mime encoded string representing a byte array form of the .NET Framework object]\n\t\t</data>\n\n\t\tThere are any number of \"resheader\" rows that contain simple \n\t\tname/value pairs.\n\n\t\tEach data row contains a name, and value. The row also contains a \n\t\ttype or mimetype. Type corresponds to a .NET class that support \n\t\ttext/value conversion through the TypeConverter architecture. \n\t\tClasses that don't support this are serialized and stored with the \n\t\tmimetype set.\n\n\t\tThe mimetype is used for serialized objects, and tells the \n\t\tResXResourceReader how to depersist the object. This is currently not \n\t\textensible. For a given mimetype the value must be set accordingly:\n\n\t\tNote - application/x-microsoft.net.object.binary.base64 is the format \n\t\tthat the ResXResourceWriter will generate, however the reader can \n\t\tread any of the formats listed below.\n\n\t\tmimetype: application/x-microsoft.net.object.binary.base64\n\t\tvalue   : The object must be serialized with \n\t\t\t: System.Serialization.Formatters.Binary.BinaryFormatter\n\t\t\t: and then encoded with base64 encoding.\n\n\t\tmimetype: application/x-microsoft.net.object.soap.base64\n\t\tvalue   : The object must be serialized with \n\t\t\t: System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n\t\t\t: and then encoded with base64 encoding.\n\n\t\tmimetype: application/x-microsoft.net.object.bytearray.base64\n\t\tvalue   : The object must be serialized into a byte array \n\t\t\t: using a System.ComponentModel.TypeConverter\n\t\t\t: and then encoded with base64 encoding.\n\t-->\n\t\n\t<xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n\t\t<xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n\t\t\t<xsd:complexType>\n\t\t\t\t<xsd:choice maxOccurs=\"unbounded\">\n\t\t\t\t\t<xsd:element name=\"data\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t\t<xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t\t<xsd:element name=\"resheader\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t</xsd:choice>\n\t\t\t</xsd:complexType>\n\t\t</xsd:element>\n\t</xsd:schema>\n\t<resheader name=\"resmimetype\">\n\t\t<value>text/microsoft-resx</value>\n\t</resheader>\n\t<resheader name=\"version\">\n\t\t<value>1.3</value>\n\t</resheader>\n\t<resheader name=\"reader\">\n\t\t<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<resheader name=\"writer\">\n\t\t<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n</root>"
  },
  {
    "path": "CSharpDemo/Properties/launchSettings.json",
    "content": "{\n  \"profiles\": {\n    \"CSharpDemo\": {\n      \"commandName\": \"Project\",\n      \"nativeDebugging\": true\n    }\n  }\n}"
  },
  {
    "path": "CSharpDemo/README.md",
    "content": "<div align=\"center\">\n\n![image](logo/logo256(AIGen).png)\n# DragonianVoice\n[中文](README.md) | [English](README_en.md)\n\n</div>\n\n> 本仓库已经暂时停止了UI项目的维护，以后可能会成为一个纯Lib项目。\n\n> 本仓库为：1、TTS（Tacotron2、Vits、EmotionalVits、BERTVits2、GPtSoVits）；2、SVC（SoVitsSvc、RVC、DiffusionSvc、FishDiffusion、ReflowSvc）；3、SVS（DiffSinger） 的Onnx框架推理仓库，目前支持C/Cpp/C#调用。\n\n> 本仓库的最新版本已经与 [fish-speech](https://github.com/fishaudio/fish-speech) 联动，使用ggml框架重写fish-speech，组成fish-speech.cpp子项目\n\n> 注意：支持SVS的分支：[MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudio) [MoeVoiceStudioCore](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore)\n\n> 关于Cuda支持的相关问题可以前往 [OnnxRuntime官方仓库](https://github.com/microsoft/onnxruntime/releases) 查看\n\n> 经过实验，Dml会导致Onnx中一些不支持的算子在使用时并不会报错，而是会返回一个不可预料的结果，所以会导致SoVits3.0和SoVits4.0在DmlEP上的推理结果错误。不过最新的SoVits仓库中的Onnx导出已经替换了这些算子，故SoVits3.0和SoVits4.0恢复支持Dml使用，但是要使用最新（2023/7/17）版本的SoVitsOnnx导出重新导出Onnx模型\n\n> 由于Diffusion和Reflow模型的特性，如果你推理的总步数大于模型训练时最大的步数（实际步数=总步数/加速倍率，这个总步数不是推理时实际走过的步数，而是K_Step），会导致输出音频炸掉或者出现非常大的噪声，所以建议在推理前请仔细观察自己模型配置文件中的MaxStep（或K_Step_Max） \n\n<details><summary><b>支持的Net：</b></summary>\n    \n- [DeepLearningExamples](https://github.com/NVIDIA/DeepLearningExamples)\n- [Vits](https://github.com/jaywalnut310/vits)\n- [EmotionalVits](https://github.com/innnky/emotional-vits)\n- [BertVits2](https://github.com/fishaudio/Bert-VITS2)\n- [SoVitsSvc (v2/v3/v4)](https://github.com/svc-develop-team/so-vits-svc)\n- [RVC](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)\n- [DiffSvc](https://github.com/prophesier/diff-SVC)\n- [DiffusionSvc (v1/v2)](https://github.com/CNChTu/Diffusion-SVC)\n- [FishDiffusion](https://github.com/fishaudio/fish-diffusion)\n- [ReflowSvc](https://github.com/prophesier/diff-SVC)\n- [DiffSinger](https://github.com/openvpi/DiffSinger)\n- [FCPE](https://github.com/CNChTu/MelPE)\n- [RMVPE](https://github.com/yxlllc/RMVPE)\n\n</details>\n\n## 目录\n- [协议](#用户协议)\n  - [免责声明](#免责声明) \n- [说明](#说明)\n  - [分支说明](#分支)\n- [FAQ问答](#faq)\n  - Q: [项目名的来历是什么？](#q-项目名的来历)\n  - Q: [这个项目到底有什么作用?](#q-这个项目到底有什么作用)\n  - Q: [该项目以后会收费吗?](#q-该项目以后会收费吗)\n  - Q: [是否提供有偿模型代训练?](#q-是否提供有偿模型代训练)\n  - Q: [电子垃圾评判标准是什么?](#q-电子垃圾评判标准是什么)\n  - Q: [技术支持?](#q-技术支持)\n- [注意事项](#注意事项)\n- [使用方法](#使用方法)\n- [模型配置](#模型配置)\n  - [前置模型](#前置模型) \n  - [配置文件](#配置文件)\n- [支持的项目](#支持的项目)\n- [其他设置](#其他设置)\n  - [Symbol](#symbol)\n  - [Cleaner](#cleaner)\n- [本地编译](#本地编译)\n- [依赖列表](#依赖列表)\n- [相关法规](#-相关法规)\n\n## 用户协议：\n### 使用该项目你必须同意以下条款，若不同意则禁止使用该项目：\n1. 你必须自行承担由于使用该项目而造成的一切后果。\n2. 禁止出售该程序。\n3. 使用该项目时，你必须自觉遵守当地的法律法规，禁止使用该项目从事违法活动。\n4. 禁止用于任何商业游戏、低创游戏[^1]以及Galgame制作，不反对无偿的精品游戏制作以及Mod制作。\n5. 禁止使用该项目及该项目衍生物以及发布模型等制作各种电子垃圾[^2] (例如AIGalgame，AI游戏制作等)。\n6. 禁止一切政治相关内容。\n7. 你使用该项目生成的一切内容均与该项目开发者无关。\n8. 本项目开发者主张使用者不具有其所生成“音频本身”的版权，应当划归公共领域；而音频背后涉及到的歌词、乐曲的版权所有者均为该歌词、乐曲的版权所有方。\n\n[^1]: 低创的评判标准为: 大量使用AI生成的任何内容，原创内容较低，意义不明，内容质量低下等。\n[^2]: 电子垃圾评判标准: 1、原创度。自己的东西在整个项目中的比例（对于AI来说，使用完全由你独立训练模型的创作属于你自己；使用他人模型的创作属于别人）。涵盖的方面包括但不限于程序、美工、音频、策划等等。例如，套用Unity等引擎模板换皮属于电子垃圾。\n\n## 免责声明\n本项目为**开源、离线的项目，本项目的所有开发者以及维护者（以下简称贡献者）对本项目没有控制力**。本项目的贡献者从未向任何组织或个人提供包括但不限于数据集提取、数据集加工、算力支持、训练支持、推理等一切形式的帮助；本项目的贡献者不知晓也无法知晓使用者使用该项目的用途。故一切基于本项目合成的音频都与本项目贡献者无关。**一切由此造成的问题由使用者自行承担**。\n\n本项目本身不具备任何语音合成的功能，只是用于启动使用者自行训练并自行制作为Onnx模型的模型，且模型的训练与Onnx模型的制作均与本项目的贡献者无关，均为使用者自己的行为，本项目贡献者未参与一切使用者的模型训练与制作。\n\n本项目为完全离线状态下运行，无法采集任何用户信息，也无法获取用户的输入数据，故本项目贡献者对用户的一切输入以及模型不知情，因此不对任何用户输入负责。\n\n**本项目也没有附带任何模型，任何二次发布所附带的模型以及用于此项目的模型均与此项目开发者无关。**\n\n## 说明\n本项目目前已完全支持自行调用其中方法来实现命令行推理或其他软件，欢迎大家向本项目提PR\n\n作者的其他项目：[AiToolKits](https://github.com/NaruseMioShirakana/ShirakanaNoAiToolKits)\n\n如果想要参加开发，可以加入QQ群:263805400或直接提PR\n\n**模型需要转换为ONNX模型，详情见你选择的项目的源仓库，PTH模型不能直接使用！！！！！！！！！！！！！**\n\n## 分支\n本项目的各分支:\n- [MoeVoiceStudioCore(主分支)](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore) 项目核心\n- [MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudio) 本项目的简单GUI实现 基于qt\n- [MoeSSV2](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/V2) 旧版MoeSSV2版本存档\n- [MoeSSV1](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/V2) 旧版MoeSSV1版本存档\n\n## FAQ\n### Q: 项目名的来历？\n<details><summary>A: </b></summary>\n\n> XP至上主义者狂喜，有谁不喜欢龙娘呢\n\n</details>\n\n### Q: 这个项目到底有什么作用？\n<details><summary>A: </b></summary>\n\n> 这个项目的开发初衷主要是实现无需环境部属各个语音合成项目，而现在打算制作为一个SVC的辅助编辑器。\n> \n> 由于这个项目毕竟是一个\"个人的\" \"不专业\"的项目，所以在您拥有更专业的软件，或者您是Python Cli爱好者，又或者您是相关领域大佬。我自知本软件不够专业且很大可能无法满足您的需求甚至对您没有用处。\n> \n> 本项目并不是不可替代的项目，相反的本项目的功能您可以使用各种工具替代，我没有奢望本项目成为相关领域的领军项目，我只是怀着一腔热情继续着该项目的开发。但是热情总有消散的一天，但是该项目承诺在我的开   > 发热情完全消散之前会一直保持维护（不管有没有人使用，就算用户数目为0）\n> \n> 本项目在设计上可能存在着各种各样的问题，所以也是需要大家积极的点炒饭来帮助我完善功能的，大部分对于功能和体验的优化我都会接受。\n\n</details>\n\n### Q: 该项目以后会收费吗？\n<details><summary>A: </b></summary>\n\n> 该项目永久开源免费，如果在其他地方存在本项目的收费版本，请立即举报且不要购买，本项目永久免费。如果想用疯狂星期四塞满白叶，可以前往爱发癫 https://afdian.net/a/NaruseMioShirakana\n> \n</details>\n\n### Q: 是否提供有偿模型代训练？\n<details><summary>A: </b></summary>\n\n> 不提供，训练模型比较简单，没必要花冤枉钱，按照网上教程一步一步走就可以了。\n\n</details>\n\n\n### Q: 电子垃圾评判标准是什么？\n<details><summary>A: </b></summary>\n\n> 1. 原创度。自己的东西在整个项目中的比例（对于AI来说，使用完全由你独立训练模型的创作属于你自己；使用他人模型的创作属于别人）。涵盖的方面包括但不限于程序、美工、音频、策划等等。举个例子，套用Unity等引擎模板换皮属于电子垃圾。\n> 2. 开发者态度。作者开发的态度是不是捞一波流量和钱走人或单纯虚荣。比方说打了无数的tag，像什么“国产”“首个”“最强”“自制”这种引流宣传，结果是非常烂或是平庸的东西，且作者明显没有好好制作该项目的想法，属于电子垃圾。\n> 3. 反对一切使用未授权的数据集训练出来的AI模型商用的行为。 \n\n</details>\n\n### Q: 技术支持？\n<details><summary>A: </b></summary>\n\n> 如果能够确定你做的不是电子垃圾，同时合法合规，没有严重的政治错误，我会提供一些力所能及的技术支持。 \n\n</details>\n\n## 注意事项\n### 由于OnnxRuntime引发的问题\n不支持中文路径？实际上项目本体是支持中文路径的，不过2023年3月前版本的OnnxRuntime是不支持中文路径的，因为这些版本的OnnxRuntime使用了Win32Api的A系列函数，A系列函数都是不支持非ANSI编码的路径的。这个问题并不是我能够解决的也不是我应该解决的，只有微软官方才可以修复这个BUG，不过好在最新的OnnxRuntime使用了W系列函数，解决了中文路径问题。\n\n### Cuda版本问题\n由于Cuda有着极差的兼容性，导致一个基于Cuda的程序在使用时，必须安装和编译该程序时相同或是未修改Api最近版本的Cuda。这个问题只能等英伟达公司重视兼容性了。\n\n## 使用方法\nMoeVoiceStudioCore以Lib的形式提供 使用C++语言调用\n\n按需引用以下对应的类\n```cpp\n#include <Modules/Models/header/Tacotron.hpp>\n#include <Modules/Models/header/Vits.hpp>\n#include <Modules/Models/header/VitsSvc.hpp>\n#include <Modules/Models/header/DiffSvc.hpp>\n#include <Modules/Models/header/DiffSinger.hpp>\n\nInferClass::Tacotron2;\nInferClass::Vits;\nInferClass::VitsSvc;\nInferClass::DiffusionSvc;\nInferClass::DiffusionSinger;\n\n/*\n构造函数第一个是配置文件json\n第二个是进度条回调\n第三个是参数回调 (若为TTS 此参数为空即可)\n第四个参数为设备\n使用调用Inference函数即可\n*/\n```\n模型配置请参见[#模型配置](#模型配置)\n\ndemo: [RVC命令行示例](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore/CMD-RVC-Onnx-Inference)\n\n## 模型配置\n### 前置模型\n#### 与所支持的几个项目无关 为深度学习领域的通用模型\n停止更新（由于下载和上传速度）: [Vocoder & HiddenUnitBert](https://github.com/NaruseMioShirakana/RequireMent-Model-For-MoeSS) \n\n停止更新（由于HuggingFace被墙） : [HuggingFace](https://huggingface.co/NaruseMioShirakana/MoeSS-SUBModel) \n\n最新仓库：[Openi](https://openi.pcl.ac.cn/Shirakana/SubModel)\n\n自己导出前置：\n- HuBert：`input_names`应该为`[\"source\"]`，`output_names`应该为`[\"embed\"]`，`dynamic_axes`应当为`{\"source\":[0,2],}`\n- Diffusion模型使用的hifigan：`input_names`应该为`[\"c\",\"f0\"]`，`output_names`应该为`[\"audio\"]`，`dynamic_axes`应当为`{\"c\":[0,1],\"f0\":[0,1],}`\n- Tacotron2使用的hifigan：`input_names`应该为`[\"x\"]`，`output_names`应该为`[\"audio\"]`，`dynamic_axes`应当为`{\"x\":[0,1],}`\n\nVec模型和Hubert模型放在Hubert文件夹下，Hifigan模型放在Hifigan文件夹下\n如需使用FCPE或RMVPE这两个F0预测器，则需要在根目录创建F0Predictor文件夹并将onnx模型放置在其中\n\n## 配置文件\n- 本项目标准化了模型读取模块，模型保存在Mods文件夹下的子文件夹中。`xxx.json` 为模型的配置文件，需要自行按照模板编写，同时需要自行将模型转换为Onnx。\n\n#### 通用参数(不管是啥模型都必须填的，不填就不识别)：\n- `Folder`：保存模型的文件夹名\n- `Name`：模型在UI中的显示名称\n- `Type`：模型类别\n- `Rate`：采样率（必须和你训练时候的一模一样，不明白原因建议去学计算机音频相关的知识）\n\n### 配置示例\n\n<details><summary>Tacotron2:</summary>\n\n```jsonc\n{\n    \"Folder\" : \"Atri\",\n    \"Name\" : \"亚托莉-Tacotron2\",\n    \"Type\" : \"Tacotron2\",\n    \"Rate\" : 22050,\n    \"Symbol\" : \"_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n    \"Cleaner\" : \"\",\n    \"AddBlank\": false,\n    \"Hifigan\": \"hifigan\"\n}\n//Symbol：模型的Symbol，不知道Symbol是啥的建议多看几个视频了解了解TTS的基础知识，这一项在Tacotron2中必须填。\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\n//Hifigan：Hifigan模型名，必须填且必须将在前置模型中下载到的hifigan放置到hifigan文件夹\n//AddBlank：是否在音素之间插0作为分隔\n```\n\n</details>\n<details><summary>Vits:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"SummerPockets\",\n    \"Name\" : \"SummerPocketsReflectionBlue\",\n    \"Type\" : \"Vits\",\n    \"Rate\" : 22050,\n    \"Symbol\" : \"_,.!?-~…AEINOQUabdefghijkmnoprstuvwyzʃʧʦ↓↑ \",\n    \"Cleaner\" : \"\",\n    \"AddBlank\": true,\n    \"Emotional\" : true,\n    \"EmotionalPath\" : \"all_emotions\",\n    \"Characters\" : [\"鳴瀬しろは\",\"空門蒼\",\"鷹原うみ\",\"紬ヴェンダース\",\"神山識\",\"水織静久\",\"野村美希\",\"久島鴎\",\"岬鏡子\"]\n}\n//Symbol：模型的Symbol，不知道Symbol是啥的建议多看几个视频了解了解TTS的基础知识，这一项在Vits中必须填。\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\n//AddBlank：是否在音素之间插0作为分隔（大多数Vits模型必须为true）\n//Emotional：是否加入情感向量\n//EmotionalPath：情感向量npy文件名\n```\n</details>\n<details><summary>Pits:</summary>\n\n```jsonc\n{\n    \"Folder\" : \"SummerPockets\",\n    \"Name\" : \"SummerPocketsReflectionBlue\",\n    \"Type\" : \"Pits\",\n    \"Rate\" : 22050,\n    \"Symbol\" : \"_,.!?-~…AEINOQUabdefghijkmnoprstuvwyzʃʧʦ↓↑ \",\n    \"Cleaner\" : \"\",\n    \"AddBlank\": true,\n    \"Emotional\" : true,\n    \"EmotionalPath\" : \"all_emotions\",\n    \"Characters\" : [\"鳴瀬しろは\",\"空門蒼\",\"鷹原うみ\",\"紬ヴェンダース\",\"神山識\",\"水織静久\",\"野村美希\",\"久島鴎\",\"岬鏡子\"]\n}\n//Symbol：模型的Symbol，不知道Symbol是啥的建议多看几个视频了解了解TTS的基础知识，这一项在Vits中必须填。\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\n//AddBlank：是否在音素之间插0作为分隔（大多数Pits模型必须为true）\n//Emotional：是否加入情感向量\n//EmotionalPath：情感向量npy文件名\n```\n    \n</details>\n<details><summary>RVC:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"NyaruTaffy\",\n    \"Name\" : \"NyaruTaffy\",\n    \"Type\" : \"RVC\",\n    \"Rate\" : 40000,\n    \"Hop\" : 320,\n    \"Cleaner\" : \"\",\n    \"Hubert\": \"hubert4.0\",\n    \"Diffusion\": false,\n    \"CharaMix\": true,\n    \"Volume\": false,\n    \"SoVits2\": true,\n    \"ShallowDiffusion\" : \"NyaruTaffy\"\n    \"HiddenSize\": 256,\n    \"Cluster\": \"Index\"\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\n}\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\n//Diffusion：是否为DDSP仓库下的扩散模型\n//CharaMix：是否使用角色混合轨道\n//ShallowDiffusion：SoVits浅扩散模型，须填写ShallowDiffusion模型配置文件名（不带后缀和完整路径），小显存或内存下速度巨慢，效果未知，请根据实际情况决定是否使用）\n//Volume：该模型是否有音量Emb\n//HiddenSize：Vec模型的尺寸（768/256）\n//Cluster：聚类类型，包括\"KMeans\"和\"Index\"，KMeans需要前往SoVits仓库将KMeans文件导出为可用格式，放置到模型文件夹；Index同理，需要前往SoVits仓库导出为可用格式（如果是RVC的单角色Index只需要改名为Index-0.index）然后放置到模型文件夹下（有几个角色就有几个Index文件）\n```\n</details>\n<details><summary>SoVits_3.0_32k:</summary>\n\n```jsonc\n{\n    \"Folder\" : \"NyaruTaffySo\",\n    \"Name\" : \"NyaruTaffy-SoVits\",\n    \"Type\" : \"SoVits\",\n    \"Rate\" : 32000,\n    \"Hop\" : 320,\n    \"Cleaner\" : \"\",\n    \"Hubert\": \"hubert\",\n    \"SoVits3\": true,\n    \"ShallowDiffusion\" : \"NyaruTaffy\"\n    \"Diffusion\": false,\n    \"CharaMix\": true,\n    \"Volume\": false,\n    \"HiddenSize\": 256,\n    \"Cluster\": \"KMeans\"\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\n}\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\n//Diffusion：是否为DDSP仓库下的扩散模型\n//ShallowDiffusion：SoVits浅扩散模型，须填写ShallowDiffusion模型配置文件名（不带后缀和完整路径），小显存或内存下速度巨慢，效果未知，请根据实际情况决定是否使用）\n//CharaMix：是否使用角色混合轨道\n//Volume：该模型是否有音量Emb\n//HiddenSize：Vec模型的尺寸（768/256）\n//Cluster：聚类类型，包括\"KMeans\"和\"Index\"，KMeans需要前往SoVits仓库将KMeans文件导出为可用格式，放置到模型文件夹；Index同理，需要前往SoVits仓库导出为可用格式（如果是RVC的单角色Index只需要改名为Index-0.index）然后放置到模型文件夹下（有几个角色就有几个Index文件）\n```\n    \n</details>\n<details><summary>SoVits_3.0_48k:</summary>\n\n```jsonc\n{\n    \"Folder\" : \"NyaruTaffySo\",\n    \"Name\" : \"NyaruTaffy-SoVits\",\n    \"Type\" : \"SoVits\",\n    \"Rate\" : 48000,\n    \"Hop\" : 320,\n    \"Cleaner\" : \"\",\n    \"Hubert\": \"hubert\",\n    \"SoVits3\": true,\n    \"ShallowDiffusion\" : \"NyaruTaffy\"\n    \"Diffusion\": false,\n    \"CharaMix\": true,\n    \"Volume\": false,\n    \"HiddenSize\": 256,\n    \"Cluster\": \"KMeans\"\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\n}\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\n//Diffusion：是否为DDSP仓库下的扩散模型\n//ShallowDiffusion：SoVits浅扩散模型，须填写ShallowDiffusion模型配置文件名（不带后缀和完整路径），小显存或内存下速度巨慢，效果未知，请根据实际情况决定是否使用）\n//CharaMix：是否使用角色混合轨道\n//Volume：该模型是否有音量Emb\n//HiddenSize：Vec模型的尺寸（768/256）\n//Cluster：聚类类型，包括\"KMeans\"和\"Index\"，KMeans需要前往SoVits仓库将KMeans文件导出为可用格式，放置到模型文件夹；Index同理，需要前往SoVits仓库导出为可用格式（如果是RVC的单角色Index只需要改名为Index-0.index）然后放置到模型文件夹下（有几个角色就有几个Index文件）\n```\n    \n</details>\n<details><summary>SoVits_4.0:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"NyaruTaffySo\",\n    \"Name\" : \"NyaruTaffy-SoVits\",\n    \"Type\" : \"SoVits\",\n    \"Rate\" : 44100,\n    \"Hop\" : 512,\n    \"Cleaner\" : \"\",\n    \"Hubert\": \"hubert4.0\",\n    \"SoVits4.0V2\": false,\n    \"ShallowDiffusion\" : \"NyaruTaffy\"\n    \"Diffusion\" : false,\n    \"CharaMix\" : true,\n    \"Volume\" : false,\n    \"HiddenSize\" : 256,\n    \"Cluster\" : \"KMeans\"\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\n}\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\n//Diffusion：是否为DDSP仓库下的扩散模型\n//ShallowDiffusion：SoVits浅扩散模型，须填写ShallowDiffusion模型配置文件名（不带后缀和完整路径），小显存或内存下速度巨慢，效果未知，请根据实际情况决定是否使用）\n//CharaMix：是否使用角色混合轨道\n//Volume：该模型是否有音量Emb\n//HiddenSize：Vec模型的尺寸（768/256）\n//Cluster：聚类类型，包括\"KMeans\"和\"Index\"，KMeans需要前往SoVits仓库将KMeans文件导出为可用格式，放置到模型文件夹；Index同理，需要前往SoVits仓库导出为可用格式（如果是RVC的单角色Index只需要改名为Index-0.index）然后放置到模型文件夹下（有几个角色就有几个Index文件）\n//SoVits4.0V2: 是否为SoVits4.0V2模型\n```\n    \n</details>\n<details><summary>DiffSVC:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"DiffShiroha\",\n    \"Name\" : \"白羽\",\n    \"Type\" : \"DiffSvc\",\n    \"Rate\" : 44100,\n    \"Hop\" : 512,\n    \"MelBins\" : 128,\n    \"Cleaner\" : \"\",\n    \"Hifigan\": \"nsf_hifigan\",\n    \"Hubert\": \"hubert\",\n    \"Characters\" : [],\n    \"Pndm\" : 100,\n    \"Diffusion\": false,\n    \"CharaMix\": true,\n    \"Volume\": false,\n    \"HiddenSize\": 256,\n    \"V2\" : true\n}\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\n//MelBins：模型的MelBins，不知道MelBins是啥的建议多看几个视频了解了解梅尔基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\n//Hifigan：Hifigan模型名，必须填且必须将在前置模型中下载到的nsf_hifigan放置到hifigan文件夹\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\n//Pndm：加速倍数，如果是V1模型则必填且必须为导出时设置的加速倍率\n//V2：是否为V2模型，V2模型就是后来我分4个模块导出的那个\n//Diffusion：是否为DDSP仓库下的扩散模型\n//CharaMix：是否使用角色混合轨道\n//Volume：该模型是否有音量Emb\n//HiddenSize：Vec模型的尺寸（768/256）\n```\n    \n</details>\n<details><summary>DiffSinger:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"utagoe\",\n    \"Name\" : \"utagoe\",\n    \"Type\" : \"DiffSinger\",\n    \"Rate\" : 44100,\n    \"Hop\" : 512,\n    \"Cleaner\" : \"\",\n    \"Hifigan\": \"singer_nsf_hifigan\",\n    \"Characters\" : [],\n    \"MelBins\" : 128\n}\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\n//Hifigan：Hifigan模型名，必须填且必须将在前置模型中下载到的singer_nsf_hifigan放置到hifigan文件夹\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\n//MelBins：模型的MelBins，不知道MelBins是啥的建议多看几个视频了解了解梅尔基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\n```\n\n</details>\n<details><summary>BertVits:</summary>\n    \n```jsonc\n{\n    \"Folder\": \"HimenoSena\",\n    \"Name\": \"HimenoSena\",\n    \"Type\": \"BertVits\",\n    \"Symbol\": [\n        \"_\",\n        \"AA\",\n        \"E\",\n        \"EE\",\n        \"En\",\n        \"N\",\n        \"OO\",\n        \"V\",\n        \"a\",\n        \"a:\",\n        \"aa\",\n        \"ae\",\n        \"ah\",\n        \"ai\",\n        \"an\",\n        \"ang\",\n        \"ao\",\n        \"aw\",\n        \"ay\",\n        \"b\",\n        \"by\",\n        \"c\",\n        \"ch\",\n        \"d\",\n        \"dh\",\n        \"dy\",\n        \"e\",\n        \"e:\",\n        \"eh\",\n        \"ei\",\n        \"en\",\n        \"eng\",\n        \"er\",\n        \"ey\",\n        \"f\",\n        \"g\",\n        \"gy\",\n        \"h\",\n        \"hh\",\n        \"hy\",\n        \"i\",\n        \"i0\",\n        \"i:\",\n        \"ia\",\n        \"ian\",\n        \"iang\",\n        \"iao\",\n        \"ie\",\n        \"ih\",\n        \"in\",\n        \"ing\",\n        \"iong\",\n        \"ir\",\n        \"iu\",\n        \"iy\",\n        \"j\",\n        \"jh\",\n        \"k\",\n        \"ky\",\n        \"l\",\n        \"m\",\n        \"my\",\n        \"n\",\n        \"ng\",\n        \"ny\",\n        \"o\",\n        \"o:\",\n        \"ong\",\n        \"ou\",\n        \"ow\",\n        \"oy\",\n        \"p\",\n        \"py\",\n        \"q\",\n        \"r\",\n        \"ry\",\n        \"s\",\n        \"sh\",\n        \"t\",\n        \"th\",\n        \"ts\",\n        \"ty\",\n        \"u\",\n        \"u:\",\n        \"ua\",\n        \"uai\",\n        \"uan\",\n        \"uang\",\n        \"uh\",\n        \"ui\",\n        \"un\",\n        \"uo\",\n        \"uw\",\n        \"v\",\n        \"van\",\n        \"ve\",\n        \"vn\",\n        \"w\",\n        \"x\",\n        \"y\",\n        \"z\",\n        \"zh\",\n        \"zy\",\n        \"!\",\n        \"?\",\n        \"\\u2026\",\n        \",\",\n        \".\",\n        \"'\",\n        \"-\",\n        \"SP\",\n        \"UNK\"\n    ],\n    \"Cleaner\": \"\",\n    \"Rate\": 44100,\n    \"CharaMix\": true,\n    \"Characters\": [\n        \"\\u56fd\\u89c1\\u83dc\\u5b50\",\n        \"\\u59ec\\u91ce\\u661f\\u594f\",\n        \"\\u65b0\\u5802\\u5f69\\u97f3\",\n        \"\\u56db\\u6761\\u51db\\u9999\",\n        \"\\u5c0f\\u97a0\\u7531\\u4f9d\"\n    ],\n    \"LanguageMap\": {\n        \"ZH\": [\n            0,\n            0\n        ],\n        \"JP\": [\n            1,\n            6\n        ],\n        \"EN\": [\n            2,\n            8\n        ]\n    },\n    \"Dict\": \"BasicDict\",\n    \"BertPath\": [\n        \"chinese-roberta-wwm-ext-large\",\n        \"deberta-v2-large-japanese\",\n        \"bert-base-japanese-v3\"\n    ]\n}\n```\n    \n</details>\n\n## 支持的项目\n```cmake\n// ${xxx}是什么意思大家应该都知道吧，总之以下是多个不同项目需要的模型文件（需要放置在对应的模型文件夹下）。\n// Tacotron2：\n    ${Folder}_decoder_iter.onnx\n    ${Folder}_encoder.onnx\n    ${Folder}_postnet.onnx\n// Vits:    单角色VITS\n    ${Folder}_dec.onnx\n    ${Folder}_flow.onnx\n    ${Folder}_enc_p.onnx\n    ${Folder}_dp.onnx \n// Vits:   多角色VITS\n    ${Folder}_dec.onnx\n    ${Folder}_emb.onnx\n    ${Folder}_flow.onnx\n    ${Folder}_enc_p.onnx\n    ${Folder}_dp.onnx\n// SoVits:\n    ${Folder}_SoVits.onnx\n// RVC:\n    ${Folder}_RVC.onnx\n// DiffSvc:\n    ${Folder}_diffSvc.onnx\n// DiffSvc: V2\n    ${Folder}_encoder.onnx\n    ${Folder}_denoise.onnx\n    ${Folder}_pred.onnx\n    ${Folder}_after.onnx\n// DiffSinger: OpenVpiVersion\n    ${Folder}_diffSinger.onnx\n// DiffSinger: \n    ${Folder}_encoder.onnx\n    ${Folder}_denoise.onnx\n    ${Folder}_pred.onnx\n    ${Folder}_after.onnx\n```\n## 其他设置\n### Symbol\n\n    例如：_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n    打开你训练模型的项目，打开text\\symbol.py，如图按照划线的List顺序将上面的4个字符串连接即可\n![image](https://user-images.githubusercontent.com/40709280/183290732-dcb93323-1061-431b-aafa-c285a3ec5e82.png)\n\n### Cleaner\n```cxx\n/*\nCleaner请放置于根目录的Cleaners文件夹内，应该是一个按照要求定义的动态库（.dll），dll应当命名为Cleaner名，Cleaner名即为模型定义Json文件中Cleaner一栏填写的内容。\n所有的插件dll需要定义以下函数，函数名必须为PluginMain，Dll名必须为插件名（或Cleaner名）：\n*/\nconst wchar_t* PluginMain(const wchar_t*);\n// 该接口只要求输入输出一致，并不要求功能一致，也就是说，你可以在改Dll中实现任何想要的功能，比方说ChatGpt，机器翻译等等。\n// 以ChatGpt为例，PluginMain函数传入了一个输入字符串input，将该输入传入ChatGpt，再将ChatGpt的输出传入PluginMain，最后返回输出。\nwchar_t* PluginMain(wchar_t* input){\n    wchar_t* tmpOutput = ChatGpt(input);\n    return Clean(tmpOutput);\n}\n// 注意：导出dll时请使用 extern \"C\" 关键字来防止C++语言的破坏性命名。\n```\n\n## 本地编译\n```cxx\ngit clone https://github.com/NaruseMioShirakana/MoeVoiceStudio.git\n//自行配置OnnxRuntime和FFMPEG的Dll\n//使用VisualStudio构建\n```\n\n## 依赖列表\n- [FFmpeg](https://ffmpeg.org/)\n- [World](https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder)\n- [rapidJson](https://github.com/Tencent/rapidjson)\n- [mecab](https://github.com/taku910/mecab)\n- [yyjson](https://github.com/ibireme/yyjson)\n- [onnxruntime](https://github.com/microsoft/onnxruntime)\n- [faiss](https://github.com/facebookresearch/faiss)\n- [中文词典](https://www.zdic.net/)\n\n## 📚 相关法规\n\n#### 使用该项目的任何组织或个人都应当遵守包括但不限于以下的法律。\n\n#### 《民法典》\n\n##### 第一千零一十九条 \n\n任何组织或者个人不得以丑化、污损，或者利用信息技术手段伪造等方式侵害他人的肖像权。未经肖像权人同意，不得制作、使用、公开肖像权人的肖像，但是法律另有规定的除外。\n未经肖像权人同意，肖像作品权利人不得以发表、复制、发行、出租、展览等方式使用或者公开肖像权人的肖像。\n对自然人声音的保护，参照适用肖像权保护的有关规定。\n\n#####  第一千零二十四条 \n\n【名誉权】民事主体享有名誉权。任何组织或者个人不得以侮辱、诽谤等方式侵害他人的名誉权。  \n\n#####  第一千零二十七条\n\n【作品侵害名誉权】行为人发表的文学、艺术作品以真人真事或者特定人为描述对象，含有侮辱、诽谤内容，侵害他人名誉权的，受害人有权依法请求该行为人承担民事责任。\n行为人发表的文学、艺术作品不以特定人为描述对象，仅其中的情节与该特定人的情况相似的，不承担民事责任。  \n\n#### 《[中华人民共和国宪法](http://www.gov.cn/guoqing/2018-03/22/content_5276318.htm)》\n\n#### 《[中华人民共和国刑法](http://gongbao.court.gov.cn/Details/f8e30d0689b23f57bfc782d21035c3.html?sw=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%88%91%E6%B3%95)》\n\n#### 《[中华人民共和国民法典](http://gongbao.court.gov.cn/Details/51eb6750b8361f79be8f90d09bc202.html)》\n\n#\n\nMoeSS使用的图像素材来源于：\n- [SummerPockets](http://key.visualarts.gr.jp/summer/)\n\n## 💪 感谢所有贡献者的努力\n<a href=\"https://github.com/NaruseMioShirakana/MoeSS/graphs/contributors\" target=\"_blank\">\n  <img src=\"https://contrib.rocks/image?repo=NaruseMioShirakana/MoeSS\" />\n</a>\n\n"
  },
  {
    "path": "CSharpDemo/README_en.md",
    "content": "## Note: TTS & SVS Support：[MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudio) [MoeVoiceStudioCore](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore).\n\n# MoeVoiceStudio\n| [Chinese](README.md) | [English](README_en.md)\n\nThis project is a voice assistant software focused on the Otaku subculture and targeted at anime fans.\n\n<details><summary><b>Supported Frameworks:</b></summary>\n    \n- [DeepLearningExamples](https://github.com/NVIDIA/DeepLearningExamples)\n- [VITS](https://github.com/jaywalnut310/vits)\n- [SoVits](https://github.com/svc-develop-team/so-vits-svc)\n- [DiffSvc](https://github.com/prophesier/diff-SVC)\n- [DiffSinger](https://github.com/openvpi/DiffSinger)\n- [RVC](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)\n- [FishDiffusion](https://github.com/fishaudio/fish-diffusion)\n    \n</details>\n\n## Contents\n- [User Agreement](#user-agreement)\n  - [Disclaimer](#disclaimer) \n- [Description](#description)\n  - [Branches](#branches)\n- [FAQ](#faq)\n  - Q: [What is the purpose of this project?](#q-what-is-the-purpose-of-this-project)\n  - Q: [Will this project charge fees in the future?](#q-will-this-project-be-charged-in-the-future)\n  - Q: [Do you provide paid model training?](#q-do-you-provide-paid-model-training)\n  - Q: [What are the criteria for digital garbage?](#q-what-are-the-criteria-for-digital-garbage)\n  - Q: [Technical support?](#q-technical-support)\n- [Notes](#notes)\n- [Usage](#usage)\n- [Model Configuration](#model-configuration)\n  - [Pre-models](#pre-models) \n  - [Configuration File](#configuration-file)\n- [Supported Projects](#supported-projects)\n- [Other Settings](#other-settings)\n  - [Symbol](#symbol)\n  - [Cleaner](#cleaner)\n- [Build](#build)\n- [List of dependencies](#list-of-dependencies)\n- [Relevant Regulations](#relevant-regulations)\n\n## User Agreement:\n### To use this project, you must agree to the following terms. If you do not agree, you are prohibited from using this project:\n1. You must bear all the consequences caused by using this project.\n2. It is forbidden to sell this program.\n3. When using this project, you must conscientiously abide by local laws and regulations, and it is forbidden to use this project for illegal activities.\n4. It is forbidden to use for any commercial games, low-creation games[^1], and Galgame production, but non-commercial high-quality game and Mod production are acceptable.\n5. It is forbidden to use this project and its derivatives, and the release of models, etc., to produce various electronic wastes[^2] (such as AIGalgame, AI game production, etc.).\n6. All political-related content is prohibited.\n7. All content generated by using this project has nothing to do with the developers of this project.\n\n\n[^1]: The criteria for low creativity are: any content generated in large amounts by AI, with low original content, unclear meaning, low quality of content, etc.\n\n[^2]: Criteria for digital garbage are: Originality. The proportion of your own work in the entire project (for AI, creations using models trained completely independently by you belong to you; creations using others' models belong to others). Aspects covered include but are not limited to programming, art, audio, planning, etc. For example, reskinning using templates from engines like Unity is considered digital garbage.\n\n## Disclaimer\nThis project is an **open-source, offline project. All developers and maintainers (hereinafter referred to as contributors) of this project have no control over it**. The contributors to this project have never provided any form of help to any organization or individual, including but not limited to data set extraction, data set processing, computational power support, training support, inference, etc. The contributors of this project are unaware and cannot be aware of the purpose of the user's use of the project. Therefore, all audio synthesized based on this project is unrelated to the contributors of this project. **Any problems arising from this will be borne by the users themselves**.\n\nThis project itself does not have any speech synthesis capabilities, all functions need to be trained by the user themselves and convert into Onnx models, and the training of the model and Converted Onnx models are unrelated to the contributors of this project, all are the actions of the user themselves, and the contributors of this project have not participated in any user's model training and production.\n\nThis project runs completely offline, it cannot collect any user information, nor can it get user input data, so the contributors of this project are unaware of all user input and the model, and therefore are not responsible for any user input.\n\n**This project does not come with any models, any models attached to any secondary release and models used for this project are unrelated to the developers of this project.**\n\n## Description\nThis project currently fully supports calling its own methods to achieve command-line inference or other software, and everyone is welcome to contribute PRs to this project.\n\nThe author's other projects: [AiToolKits](https://github.com/NaruseMioShirakana/ShirakanaNoAiToolKits)\n\nIf you want to participate in development, you can join QQ group: 263805400 or directly open Push Requests.\n\n**Models need to be converted into ONNX models, the program for converting ONNX has already been pulled to each project's source repository, PTH cannot be used directly!!!!!!!!!!!!!!!!!!!**\n\n## Branches\nThe branches of this project:\n- [MoeVoiceStudioCore(main branch)](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore) Project core\n- [MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudio) A simple GUI implementation of this project based on QT\n- [MoeSSV2](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/V2) Old version of MoeSS V2 version archive\n- [MoeSSV1](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/V1) Old version of MoeSS V1 version archive\n\n## FAQ\n### Q: What is the purpose of this project?\n<details><summary>A: </b></summary>\n\n> The original intention of this project's development is mainly to implement various speech synthesis projects without the need for environment deployment, and now it is planned to be made into an auxiliary editor of SVC. Because this project is after all a \"personal\" \"non-professional\" project, so if you have more professional software, or you are a Python Cli lover, or you are a big shot in the relevant field. I know that this software is not professional enough and is very likely to be unable to meet your needs or even useless to you. This project is not an irreplaceable project, on the contrary, you can use various tools to replace the functions of this project, I have no extravagant hopes that this project will become a leading project in the relevant field, I am just continuing the development of this project with enthusiasm. But passion always has a day to dissipate, but the project promises to keep maintenance as long as my development passion has not completely dissipated (regardless of whether there are any users, even if the number of users is 0).\n> \n> There may be various problems in the design of this project, so we also need everyone to actively point out to help me improve the functionality. Most optimizations for functionality and experience I will accept.\n> \n> Finally, let me say one more thing about my view of this project: MoeSS and MoeVS are relying on the defense.\n\n</details>\n\n### Q: Will this project be charged in the future?\n<details><summary>A: </b></summary>\n\n> This project will remain open-source and free forever, if there are paid versions of this project elsewhere, please report immediately and do not purchase, this project is always free. If you want to donate the developer, you can go to Shirakana's Afdian site: https://afdian.net/a/NaruseMioShirakana .\n\n</details>\n\n### Q: Do you provide paid model training?\n<details><summary>A: </b></summary>\n\n> No, training models is relatively simple, there is no need to waste money, just follow the online tutorials step by step. \n\n</details>\n\n### Q: What are the criteria for digital garbage?\n<details><summary>A: </b></summary>\n\n> Originality. Your own work's proportion in the entire project (for AI, creations using completely independently trained models by you belong to you; creations using models from others belong to others). This includes but is not limited to programming, art, audio, planning, etc. For example, reskinning using templates from engines like Unity is considered digital garbage.\nDeveloper's attitude. Whether the author's development attitude is to gain traffic and money and leave, or purely vanity. For example, using a lot of tags like \"domestic\", \"first\", \"strongest\", \"homemade\" for traffic attraction, but the result is very bad or mediocre work, and the author obviously does not have a good idea to make the project, this is considered digital garbage.\nWe oppose all commercial use of AI models trained using unauthorized datasets.\n\n</details>\n\n### Q: Technical support?\n<details><summary>A: </b></summary>\n\n> If I can confirm that what you're doing is not digital garbage, is legal and compliant, and does not have serious political errors, I will provide some technical support within my capacity.\n\n</details>\n\n## Notes\n### Due to issues raised by OnnxRuntime\nFor using GPU (CUDA) version, please install CUDA driver version between 11.0 and 12.0, and CUDNN dynamic library version below 83.0, following the tutorials available online.\n\nWhy such requirements? That would be a question for NVIDIA, the company behind CUDA, CUDNN, and the OnnxRuntime officials. Both issues are caused by certain features of CUDA driver and problems with OnnxRuntime.\n\nWhat's the reason for the previous versions not supporting Chinese paths? Actually, it's just a manifestation of the above issue. The project itself supports Chinese paths, but its underlying OnnxRuntime doesn't, because the Windows version of OnnxRuntime uses the A series functions of Win32Api, and the A series functions do not support paths with non-ANSI encoding. This issue is not something I can solve, nor should I. Only when the OnnxRuntime officials fix this bug can it be resolved. Fortunately, the latest OnnxRuntime uses W series functions, solving this problem with Chinese paths.\n\nErrors popping up when loading the model are caused by the above issues (mainly due to not installing CUDA and CUDNN or not installing them as required). If these issues are triggered, you can go to the Onnx official repository's Issue page at https://github.com/microsoft/onnxruntime to find solutions.\n\nIt's recommended to use the CPU version, as its inference speed is quite impressive and it doesn't have other problems.\n\n## Usage\nMoeVoiceStudioCore is provided as a library, to be called with C++.\n\nRefer to the following corresponding classes as needed:\n```cpp\n#include <Modules/Models/header/Tacotron.hpp>\n#include <Modules/Models/header/Vits.hpp>\n#include <Modules/Models/header/VitsSvc.hpp>\n#include <Modules/Models/header/DiffSvc.hpp>\n#include <Modules/Models/header/DiffSinger.hpp>\n\nInferClass::Tacotron2;\nInferClass::Vits;\nInferClass::VitsSvc;\nInferClass::DiffusionSvc;\nInferClass::DiffusionSinger;\n\n/*\nThe first parameter of the constructor is the JSON configuration file,\nthe second one is a callback for the progress bar,\nthe third one is a callback for parameters (if for TTS, this can be left empty),\nand the fourth one is the device.\nYou can call the Inference function to use it.\n*/\n```\nFor model configuration, please refer to [#Model Configuration](#Model Configuration)\n\nDemo: [RVC command-line example](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore/CMD-RVC-Onnx-Inference)\n\n## Model Configuration\n### Pre-models\n#### Not related to the few projects we support, they are universal models in the deep learning domain\nStopped updating (due to download and upload speeds): [Vocoder & HiddenUnitBert](https://github.com/NaruseMioShirakana/RequireMent-Model-For-MoeSS) \n\nLatest repository: [HuggingFace](https://huggingface.co/NaruseMioShirakana/MoeSS-SUBModel) \n\nExport frontend yourself:\n- HuBert: `input_names` should be `[\"source\"]`, `output_names` should be `[\"embed\"]`, `dynamic_axes` should be `{\"\nsource\":[0,2],}`\n- Hifigan used by the Diffusion model: `input_names` should be `[\"c\",\"f0\"]`, `output_names` should be `[\"audio\"]`, `dynamic_axes` should be `{\"c\":[0,1],\"f0\":[0,1],}`\n- Hifigan used by Tacotron2: `input_names` should be `[\"x\"]`, `output_names` should be `[\"audio\"]`, `dynamic_axes` should be `{\"x\":[0,1],}`\n\n## Configuration File\n- This project has standardized the model loading module, the models are saved in subfolders under the Mods folder. `xxx.json` is the configuration file for the model, which needs to be written manually according to the template, and the model needs to be converted to Onnx manually.\n\n#### Universal Parameters (These are mandatory for any model. If not filled, it won't be recognized):\n- `Folder`: The folder name where the model is stored\n- `Name`: The display name of the model in UI\n- `Type`: The category of the model\n- `Rate`: Sample rate (it must be exactly the same as when you trained, if you don't understand why, you are recommended to learn about computer audio related knowledge)\n\n### Examples\nNotice: `Diff-SVC` model and `Diffusion-SVC` model are basically **NOT** the same model, and the same applies to the `Fish-Diffusion` model, though all of them are based on the Diffusion algorithm.\n\n<details><summary>Tacotron2:</summary>\n\n```jsonc\n{\n    \"Folder\" : \"Atri\",\n    \"Name\" : \"ATRI-Tacotron2\",\n    \"Type\" : \"Tacotron2\",\n    \"Rate\" : 22050,\n    \"Symbol\" : \"_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n    \"Cleaner\" : \"\",\n    \"AddBlank\": false,\n    \"Hifigan\": \"hifigan\"\n}\n//Symbol:Symbol of the model,If you don't know what it is, you are advised to check the TTS information on the internet.This field must be filled in the Tacotron2 model's configuration file.\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\n//Hifigan:Hifigan model name, required and must be placed in the \"hifigan\" folder for hifigan model downloaded from the Pre-model repository\n//AddBlank:Whether to insert a 0 as a separator between phonemes\n```\n</details>\n<details><summary>Vits:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"SummerPockets\",\n    \"Name\" : \"SummerPocketsReflectionBlue\",\n    \"Type\" : \"Vits\",\n    \"Rate\" : 22050,\n    \"Symbol\" : \"_,.!?-~…AEINOQUabdefghijkmnoprstuvwyzʃʧʦ↓↑ \",\n    \"Cleaner\" : \"\",\n    \"AddBlank\": true,\n    \"Emotional\" : true,\n    \"EmotionalPath\" : \"all_emotions\",\n    \"Characters\" : [\"鳴瀬しろは\",\"空門蒼\",\"鷹原うみ\",\"紬ヴェンダース\",\"神山識\",\"水織静久\",\"野村美希\",\"久島鴎\",\"岬鏡子\"]\n}\n//Symbol:Symbol of the model,If you don't know what it is, you are advised to check the TTS information on the internet.This field must be filled in the VITS model's configuration file.\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\n//AddBlank:Whether to insert a 0 as a separator between phonemes（For most VITS models, you must set this to \"true\"..）\n//Emotional:whether to add a emotional vector\n//EmotionalPath:emotional vector file(.npy) path\n```\n</details>\n<details><summary>Pits:</summary>\n\n```jsonc\n{\n    \"Folder\" : \"SummerPockets\",\n    \"Name\" : \"SummerPocketsReflectionBlue\",\n    \"Type\" : \"Pits\",\n    \"Rate\" : 22050,\n    \"Symbol\" : \"_,.!?-~…AEINOQUabdefghijkmnoprstuvwyzʃʧʦ↓↑ \",\n    \"Cleaner\" : \"\",\n    \"AddBlank\": true,\n    \"Emotional\" : true,\n    \"EmotionalPath\" : \"all_emotions\",\n    \"Characters\" : [\"鳴瀬しろは\",\"空門蒼\",\"鷹原うみ\",\"紬ヴェンダース\",\"神山識\",\"水織静久\",\"野村美希\",\"久島鴎\",\"岬鏡子\"]\n}\n//Symbol:Symbol of the model,If you don't know what it is, you are advised to check the TTS information on the internet.This field must be filled in the VITS model's configuration file.\n//Cleaner:The name of the plugin, can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\n//AddBlank:Whether to insert a 0 as a separator between phonemes（For most VITS models, you must set this to \"true\"..）\n//Emotional:whether to add a emotional vector\n//EmotionalPath:emotional vector file(.npy) path\n```\n    \n</details>\n<details><summary>RVC:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"NyaruTaffy\",\n    \"Name\" : \"NyaruTaffy\",\n    \"Type\" : \"RVC\",\n    \"Rate\" : 40000,\n    \"Hop\" : 320,\n    \"Cleaner\" : \"\",\n    \"Hubert\": \"hubert4.0\",\n    \"Diffusion\": false,\n    \"CharaMix\": true,\n    \"Volume\": false,\n    \"HiddenSize\": 256,\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\n}\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert model downloaded from the Pre-model repository\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\n//CharaMix:whether or not to use the character mixing track\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\n//HiddenSize:Size of the Vec model(256/768)\n```\n</details>\n<details><summary>SoVits_3.0_32k:</summary>\n\n```jsonc\n{\n    \"Folder\" : \"NyaruTaffySo\",\n    \"Name\" : \"NyaruTaffy-SoVits\",\n    \"Type\" : \"SoVits\",\n    \"Rate\" : 32000,\n    \"Hop\" : 320,\n    \"Cleaner\" : \"\",\n    \"Hubert\": \"hubert\",\n    \"SoVits3\": true,\n    \"Diffusion\": false,\n    \"CharaMix\": true,\n    \"Volume\": false,\n    \"HiddenSize\": 256,\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\n}\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert model downloaded from the Pre-model repository\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\n//CharaMix:whether or not to use the character mixing track\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\n//HiddenSize:Size of the Vec model(256/768)\n```\n    \n</details>\n<details><summary>SoVits_3.0_48k:</summary>\n\n```jsonc\n{\n    \"Folder\" : \"NyaruTaffySo\",\n    \"Name\" : \"NyaruTaffy-SoVits\",\n    \"Type\" : \"SoVits\",\n    \"Rate\" : 48000,\n    \"Hop\" : 320,\n    \"Cleaner\" : \"\",\n    \"Hubert\": \"hubert\",\n    \"SoVits3\": true,\n    \"Diffusion\": false,\n    \"CharaMix\": true,\n    \"Volume\": false,\n    \"HiddenSize\": 256,\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\n}\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert model downloaded from the Pre-model repository\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\n//CharaMix:whether or not to use the character mixing track\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\n//HiddenSize:Size of the Vec model(256/768)\n```\n    \n</details>\n<details><summary>SoVits_4.0:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"NyaruTaffySo\",\n    \"Name\" : \"NyaruTaffy-SoVits\",\n    \"Type\" : \"SoVits\",\n    \"Rate\" : 44100,\n    \"Hop\" : 512,\n    \"Cleaner\" : \"\",\n    \"Hubert\": \"hubert4.0\",\n    \"SoVits4\": true,\n    \"Diffusion\": false,\n    \"CharaMix\": true,\n    \"Volume\": false,\n    \"HiddenSize\": 256,\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\n}\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert model downloaded from the Pre-model repository\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\n//CharaMix:whether or not to use the character mixing track\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\n//HiddenSize:Size of the Vec model(256/768)\n```\n    \n</details>\n<details><summary>DiffSVC:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"DiffShiroha\",\n    \"Name\" : \"白羽\",\n    \"Type\" : \"DiffSvc\",\n    \"Rate\" : 44100,\n    \"Hop\" : 512,\n    \"MelBins\" : 128,\n    \"Cleaner\" : \"\",\n    \"Hifigan\": \"nsf_hifigan\",\n    \"Hubert\": \"hubert\",\n    \"Characters\" : [],\n    \"Pndm\" : 100,\n    \"Diffusion\": false,\n    \"CharaMix\": true,\n    \"Volume\": false,\n    \"HiddenSize\": 256,\n    \"V2\" : true\n}\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\n//Melbins:Melbins of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the Diffsvc model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert models downloaded from the Pre-model repository\n//Hifigan:Hifigan model name, required and must be placed in the \"hifigan\" folder for nsf-hifigan model downloaded from the Pre-model repository\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\n//Pndm:Acceleration multiplier, required in the case of V1 models and must be the acceleration multiplier set at the time of export\n//V2:If your diffsvc model is a V2 model(Fish-Diffusion model), set this to \"true\".\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\n//CharaMix:whether or not to use the character mixing track\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\n//HiddenSize:Size of the Vec model(256/768)\n```\n    \n</details>\n<details><summary>DiffSinger:</summary>\n    \n```jsonc\n{\n    \"Folder\" : \"utagoe\",\n    \"Name\" : \"utagoe\",\n    \"Type\" : \"DiffSinger\",\n    \"Rate\" : 44100,\n    \"Hop\" : 512,\n    \"Cleaner\" : \"\",\n    \"Hifigan\": \"singer_nsf_hifigan\",\n    \"Characters\" : [],\n    \"MelBins\" : 128\n}\n```jsonc\n{\n    \"Folder\" : \"utagoe\",\n    \"Name\" : \"utagoe\",\n    \"Type\" : \"DiffSinger\",\n    \"Rate\" : 44100,\n    \"Hop\" : 512,\n    \"Cleaner\" : \"\",\n    \"Hifigan\": \"singer_nsf_hifigan\",\n    \"Characters\" : [],\n    \"MelBins\" : 128\n}\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the Diffsinger model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\n//Melbins:Melbins of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the Diffsvc model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\n//Hifigan:Hifigan model name, required and must be placed in the \"hifigan\" folder for nsf-hifigan model downloaded from the Pre-model repository\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\n```\n    \n</details>\n\n<details><summary>BertVits:</summary>\n    \n```jsonc\n{\n    \"Folder\": \"HimenoSena\",\n    \"Name\": \"HimenoSena\",\n    \"Type\": \"BertVits\",\n    \"Symbol\": [\n        \"_\",\n        \"AA\",\n        \"E\",\n        \"EE\",\n        \"En\",\n        \"N\",\n        \"OO\",\n        \"V\",\n        \"a\",\n        \"a:\",\n        \"aa\",\n        \"ae\",\n        \"ah\",\n        \"ai\",\n        \"an\",\n        \"ang\",\n        \"ao\",\n        \"aw\",\n        \"ay\",\n        \"b\",\n        \"by\",\n        \"c\",\n        \"ch\",\n        \"d\",\n        \"dh\",\n        \"dy\",\n        \"e\",\n        \"e:\",\n        \"eh\",\n        \"ei\",\n        \"en\",\n        \"eng\",\n        \"er\",\n        \"ey\",\n        \"f\",\n        \"g\",\n        \"gy\",\n        \"h\",\n        \"hh\",\n        \"hy\",\n        \"i\",\n        \"i0\",\n        \"i:\",\n        \"ia\",\n        \"ian\",\n        \"iang\",\n        \"iao\",\n        \"ie\",\n        \"ih\",\n        \"in\",\n        \"ing\",\n        \"iong\",\n        \"ir\",\n        \"iu\",\n        \"iy\",\n        \"j\",\n        \"jh\",\n        \"k\",\n        \"ky\",\n        \"l\",\n        \"m\",\n        \"my\",\n        \"n\",\n        \"ng\",\n        \"ny\",\n        \"o\",\n        \"o:\",\n        \"ong\",\n        \"ou\",\n        \"ow\",\n        \"oy\",\n        \"p\",\n        \"py\",\n        \"q\",\n        \"r\",\n        \"ry\",\n        \"s\",\n        \"sh\",\n        \"t\",\n        \"th\",\n        \"ts\",\n        \"ty\",\n        \"u\",\n        \"u:\",\n        \"ua\",\n        \"uai\",\n        \"uan\",\n        \"uang\",\n        \"uh\",\n        \"ui\",\n        \"un\",\n        \"uo\",\n        \"uw\",\n        \"v\",\n        \"van\",\n        \"ve\",\n        \"vn\",\n        \"w\",\n        \"x\",\n        \"y\",\n        \"z\",\n        \"zh\",\n        \"zy\",\n        \"!\",\n        \"?\",\n        \"\\u2026\",\n        \",\",\n        \".\",\n        \"'\",\n        \"-\",\n        \"SP\",\n        \"UNK\"\n    ],\n    \"Cleaner\": \"\",\n    \"Rate\": 44100,\n    \"CharaMix\": true,\n    \"Characters\": [\n        \"\\u56fd\\u89c1\\u83dc\\u5b50\",\n        \"\\u59ec\\u91ce\\u661f\\u594f\",\n        \"\\u65b0\\u5802\\u5f69\\u97f3\",\n        \"\\u56db\\u6761\\u51db\\u9999\",\n        \"\\u5c0f\\u97a0\\u7531\\u4f9d\"\n    ],\n    \"LanguageMap\": {\n        \"ZH\": [\n            0,\n            0\n        ],\n        \"JP\": [\n            1,\n            6\n        ],\n        \"EN\": [\n            2,\n            8\n        ]\n    },\n    \"Dict\": \"BasicDict\",\n    \"BertPath\": [\n        \"chinese-roberta-wwm-ext-large\",\n        \"deberta-v2-large-japanese\",\n        \"bert-base-japanese-v3\"\n    ]\n}\n```\n    \n</details>\n\n## Supported Projects\n\n```cxx \n// $Below are the model files needed for several different projects (they need to be placed in the corresponding model folders).\n// Tacotron2:\n    ${Folder}_decoder_iter.onnx\n    ${Folder}_encoder.onnx\n    ${Folder}_postnet.onnx\n// Vits:    Single-speaker VITS\n    ${Folder}_dec.onnx\n    ${Folder}_flow.onnx\n    ${Folder}_enc_p.onnx\n    ${Folder}_dp.onnx \n// Vits:   multi-speaker VITS\n    ${Folder}_dec.onnx\n    ${Folder}_emb.onnx\n    ${Folder}_flow.onnx\n    ${Folder}_enc_p.onnx\n    ${Folder}_dp.onnx\n// SoVits:\n    ${Folder}_SoVits.onnx\n// DiffSvc:\n    ${Folder}_diffSvc.onnx\n// DiffSvc: V2\n    ${Folder}_encoder.onnx\n    ${Folder}_denoise.onnx\n    ${Folder}_pred.onnx\n    ${Folder}_after.onnx\n// DiffSinger: OpenVpiVersion\n    ${Folder}_diffSinger.onnx\n// DiffSinger: \n    ${Folder}_encoder.onnx\n    ${Folder}_denoise.onnx\n    ${Folder}_pred.onnx\n    ${Folder}_after.onnx\n```\n## Other Settings\n### Symbol settings\n    For example：_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n    Open the project you are using to train the model, open text\\symbol.py and join the 4 strings above in the order of the underlined list as shown\n![image](https://user-images.githubusercontent.com/40709280/183290732-dcb93323-1061-431b-aafa-c285a3ec5e82.png)\n\n### Cleaner settings\n```cxx\n/*\nThe Cleaner should be placed in the Cleaners folder in the root directory and should be a dynamic library (.dll) defined as required. The dll should be named Cleaner and the Cleaner name is what is entered in the \"Cleaner\" of the model configuration file.\nThe following functions need to be defined for all plug-in dlls, the function name must be PluginMain and the Dll name must be the plug-in name (or Cleaner name).\n*/\nconst wchar_t* PluginMain(const wchar_t*);\n// The interface only requires consistent input and output, not consistent functionality, which means that you can implement any functionality you want in the Dll, such as ChatGpt, translation, etc.\n// Using ChatGpt as an example, the PluginMain function passes in an input string input, passes that input into ChatGpt, passes ChatGpt's output into PluginMain, and finally returns the output.\nwchar_t* PluginMain(wchar_t* input){\n    wchar_t* tmpOutput = ChatGpt(input);\n    return Clean(tmpOutput);\n}\n// Note: Please use the extern \"C\" keyword when exporting the dll to prevent destructive naming in C++.\n```\n\n## Build\n```cxx\ngit clone https://github.com/NaruseMioShirakana/MoeVoiceStudio.git\n//Place OnnxRuntime.dll and FFMPEG's Dll in the correct folder \n//Build With VisualStudio\n```\n\n## List of dependencies\n- [FFmpeg](https://ffmpeg.org/)\n- [World](https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder)\n- [rapidJson](https://github.com/Tencent/rapidjson)\n\n## 📚 相关法规\n\n#### Any country, region, organization, or individual using this project must comply with the following laws.\n\n#### 《民法典》\n\n##### 第一千零一十九条 \n\n任何组织或者个人不得以丑化、污损，或者利用信息技术手段伪造等方式侵害他人的肖像权。未经肖像权人同意，不得制作、使用、公开肖像权人的肖像，但是法律另有规定的除外。\n未经肖像权人同意，肖像作品权利人不得以发表、复制、发行、出租、展览等方式使用或者公开肖像权人的肖像。\n对自然人声音的保护，参照适用肖像权保护的有关规定。\n\n#####  第一千零二十四条 \n\n【名誉权】民事主体享有名誉权。任何组织或者个人不得以侮辱、诽谤等方式侵害他人的名誉权。  \n\n#####  第一千零二十七条\n\n【作品侵害名誉权】行为人发表的文学、艺术作品以真人真事或者特定人为描述对象，含有侮辱、诽谤内容，侵害他人名誉权的，受害人有权依法请求该行为人承担民事责任。\n行为人发表的文学、艺术作品不以特定人为描述对象，仅其中的情节与该特定人的情况相似的，不承担民事责任。  \n\n#### 《[中华人民共和国宪法](http://www.gov.cn/guoqing/2018-03/22/content_5276318.htm)》\n\n#### 《[中华人民共和国刑法](http://gongbao.court.gov.cn/Details/f8e30d0689b23f57bfc782d21035c3.html?sw=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%88%91%E6%B3%95)》\n\n#### 《[中华人民共和国民法典](http://gongbao.court.gov.cn/Details/51eb6750b8361f79be8f90d09bc202.html)》\n\n#\n\nThe image resource MoeVS used is derived from：\n- [SummerPockets](http://key.visualarts.gr.jp/summer/)\n\n## 💪 Thanks to all contributors for their efforts\n<a href=\"https://github.com/NaruseMioShirakana/MoeSS/graphs/contributors\" target=\"_blank\">\n  <img src=\"https://contrib.rocks/image?repo=NaruseMioShirakana/MoeSS\" />\n</a>\n"
  },
  {
    "path": "DotNetApi/DotNetApi.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>enable</Nullable>\n    <AllowUnsafeBlocks>True</AllowUnsafeBlocks>\n    <Configurations>Debug;Release</Configurations>\n    <BaseOutputPath></BaseOutputPath>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "DotNetApi/LibSvcApi.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\nusing static LibSvcApi.LibSvc;\nusing static System.Runtime.InteropServices.JavaScript.JSType;\n\nnamespace LibSvcApi\n{\n    \n    public unsafe class FloatVector\n    {\n        private FloatVector() { }\n\n        public FloatVector(void* _Obj)\n        {\n            Obj_ = _Obj;\n        }\n\n        public void* Object { get { return Obj_; } }\n\n        public float* Data()\n        {\n            return LibSvcGetFloatVectorData(Obj_);\n        }\n\n        public ulong Size()\n        {\n            return LibSvcGetFloatVectorSize(Obj_);\n        }\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern float* LibSvcGetFloatVectorData(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern ulong LibSvcGetFloatVectorSize(void* _Obj);\n\n        private void* Obj_ = null;\n    }\n\n    public unsafe class DFloatVector\n    {\n        private DFloatVector() { }\n\n        public DFloatVector(void* _Obj)\n        {\n            Obj_ = _Obj;\n        }\n\n        public FloatVector Data(ulong _Index)\n        {\n            return new FloatVector(LibSvcGetDFloatVectorData(Obj_, _Index));\n        }\n\n        public FloatVector this[ulong i] => Data(i);\n\n        public void* Object { get { return Obj_; } }\n\n        public ulong Size()\n        {\n            return LibSvcGetDFloatVectorSize(Obj_);\n        }\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcGetDFloatVectorData(void* _Obj, ulong _Index);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern ulong LibSvcGetDFloatVectorSize(void* _Obj);\n\n        private void* Obj_ = null;\n    }\n\n    public unsafe class Int16Vector\n    {\n\n        public Int16Vector()\n        {\n            Obj_ = LibSvcAllocateAudio();\n            Owner_ = true;\n        }\n\n        public Int16Vector(void* _Obj)\n        {\n            Obj_ = _Obj;\n        }\n\n        ~Int16Vector()\n        {\n            if (Owner_)\n                LibSvcReleaseAudio(Obj_);\n        }\n\n        public void* Object { get { return Obj_; } }\n\n        public short* Data()\n        {\n            return LibSvcGetAudioData(Obj_);\n        }\n\n        public ulong Size()\n        {\n            return LibSvcGetAudioSize(Obj_);\n        }\n\n        public void Resize(ulong _Size)\n        {\n            LibSvcSetAudioLength(Obj_, _Size);\n        }\n\n        public void Insert(ref Int16Vector _Input)\n        {\n            LibSvcInsertAudio(Obj_, _Input.Object);\n        }\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern short* LibSvcGetAudioData(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern ulong LibSvcGetAudioSize(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcAllocateAudio();\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcReleaseAudio(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcSetAudioLength(void* _Obj, ulong _Size);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcInsertAudio(void* _ObjA, void* _ObjB);\n\n        private void* Obj_ = null;\n        private bool Owner_ = false;\n    }\n\n    public unsafe class UInt64Vector\n    {\n\n        public UInt64Vector()\n        {\n            Obj_ = LibSvcAllocateOffset();\n            Owner_ = true;\n        }\n\n        public UInt64Vector(void* _Obj)\n        {\n            Obj_ = _Obj;\n        }\n\n        ~UInt64Vector()\n        {\n            if (Owner_)\n                LibSvcReleaseOffset(Obj_);\n        }\n\n        public void* Object { get { return Obj_; } }\n\n        public ulong* Data()\n        {\n            return LibSvcGetOffsetData(Obj_);\n        }\n\n        public ulong Size()\n        {\n            return LibSvcGetOffsetSize(Obj_);\n        }\n\n        public void Resize(ulong _Size)\n        {\n            LibSvcSetOffsetLength(Obj_, _Size);\n        }\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern ulong* LibSvcGetOffsetData(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern ulong LibSvcGetOffsetSize(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcAllocateOffset();\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcReleaseOffset(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcSetOffsetLength(void* _Obj, ulong _Size);\n\n        private void* Obj_ = null;\n        private bool Owner_ = false;\n    }\n\n    public unsafe class Mel\n    {\n\n        public Mel()\n        {\n            Obj_ = LibSvcAllocateMel();\n            Owner_ = true;\n        }\n\n        public Mel(void* _Obj)\n        {\n            Obj_ = _Obj;\n        }\n\n        ~Mel()\n        {\n            if (Owner_)\n                LibSvcReleaseMel(Obj_);\n        }\n\n        public void* Object { get { return Obj_; } }\n\n        public FloatVector MelData()\n        {\n            return new FloatVector(LibSvcGetMelData(Obj_));\n        }\n\n        public long Size()\n        {\n            return LibSvcGetMelSize(Obj_);\n        }\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcGetMelData(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern long LibSvcGetMelSize(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcAllocateMel();\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcReleaseMel(void* _Obj);\n\n        private void* Obj_ = null;\n        private bool Owner_ = false;\n    }\n\n    public unsafe class Slice\n    {\n        private Slice() { }\n\n        public Slice(void* _Obj)\n        {\n            Obj_ = _Obj;\n        }\n\n        public void* Object { get { return Obj_; } }\n\n        public Int16Vector GetAudio()\n        {\n            return new Int16Vector(LibSvcGetAudio(Obj_));\n        }\n\n        public FloatVector GetF0()\n        {\n            return new FloatVector(LibSvcGetF0(Obj_));\n        }\n\n        public FloatVector GetVolume()\n        {\n            return new FloatVector(LibSvcGetVolume(Obj_));\n        }\n\n        public DFloatVector GetSpeaker()\n        {\n            return new DFloatVector(LibSvcGetSpeaker(Obj_));\n        }\n\n        public int SrcLength()\n        {\n            return LibSvcGetSrcLength(Obj_);\n        }\n\n        public bool IsNotMute()\n        {\n            return LibSvcGetIsNotMute(Obj_) != 0;\n        }\n\n        public void SetSpeakerMixDataCount(ulong _NSpeaker)\n        {\n            LibSvcSetSpeakerMixDataSize(Obj_, _NSpeaker);\n        }\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcGetAudio(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcGetF0(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcGetVolume(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcGetSpeaker(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern int LibSvcGetSrcLength(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern int LibSvcGetIsNotMute(void* _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcSetSpeakerMixDataSize(void* _Obj, ulong _NSpeaker);\n\n        private void* Obj_ = null;\n    }\n\n    public unsafe class Slices\n    {\n\n        public Slices()\n        {\n            Obj_ = LibSvcAllocateSliceData();\n            Owner_ = true;\n        }\n\n        public Slices(void* _Obj)\n        {\n            Obj_ = _Obj;\n        }\n\n        ~Slices()\n        {\n            if (Owner_)\n                LibSvcReleaseSliceData(Obj_);\n        }\n\n        public void* Object { get { return Obj_; } }\n\n        public Slice GetSlice(ulong _Index)\n        {\n            return new Slice(LibSvcGetSlice(Obj_, _Index));\n        }\n\n        public string GetAudioPath()\n        {\n            return LibSvcGetAudioPath(Obj_);\n        }\n\n        public ulong Size()\n        {\n            return LibSvcGetSliceCount(Obj_);\n        }\n\n        public Slice this[ulong i] => GetSlice(i);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcAllocateSliceData();\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcReleaseSliceData(void* _Obj);\n\n        [DllImport(\"libsvc.dll\", CharSet = CharSet.Unicode)]\n        [return: MarshalAs(UnmanagedType.BStr)]\n        private static extern string LibSvcGetAudioPath(void * _Obj);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void* LibSvcGetSlice(void* _Obj, ulong _Index);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern ulong LibSvcGetSliceCount(void* _Obj);\n\n        private void* Obj_ = null;\n        private bool Owner_ = false;\n    }\n\n    public unsafe class ModelBase\n    {\n        protected ModelBase() { }\n\n        [DllImport(\"libsvc.dll\")]\n        protected static extern int LibSvcInferSlice(\n            void* _Model,\n            uint _T,\n            void* _Slice,\n            ref Params _InferParams,\n            ref ulong _Process,\n            void* _Output\n        );\n\n        [DllImport(\"libsvc.dll\")]\n        protected static extern int LibSvcUnloadModel(\n            uint _T,\n            void* _Model\n        );\n    }\n\n    public unsafe class VitsModel : ModelBase\n    {\n        private VitsModel() { }\n        public VitsModel(void* _Obj) \n        {\n            Model_ = _Obj;\n        }\n\n        ~VitsModel() \n        {\n            if (LibSvcUnloadModel(0, Model_) == 0)\n                return;\n            throw new Exception(GetError(0));\n        }\n\n        public Int16Vector Inference(\n            Slice _Slice,\n            ref Params _InferParams,\n            ref ulong _Process\n        )\n        {\n            Int16Vector Ret = new();\n            if (LibSvcInferSlice(Model_, 0, _Slice.Object, ref _InferParams, ref _Process, Ret.Object) == 0)\n                return Ret;\n            throw new Exception(GetError(0));\n        }\n\n        private void* Model_ = null;\n    }\n\n    public unsafe class UnionModel : ModelBase\n    {\n        private UnionModel() { }\n        public UnionModel(void* _Obj)\n        {\n            Model_ = _Obj;\n        }\n\n        ~UnionModel()\n        {\n            if (LibSvcUnloadModel(1, Model_) == 0)\n                return;\n            throw new Exception(GetError(0));\n        }\n\n        public void* GetModel()\n        {\n            return Model_;\n        }\n\n        public Int16Vector Inference(\n            Slice _Slice,\n            ref Params _InferParams,\n            ref ulong _Process\n        )\n        {\n            Int16Vector Ret = new();\n            if (LibSvcInferSlice(Model_, 1, _Slice.Object, ref _InferParams, ref _Process, Ret.Object) == 0)\n                return Ret;\n            throw new Exception(GetError(0));\n        }\n\n        public Int16Vector ShallowDiffusionInference(\n            ref Int16Vector _16KAudioHubert,\n            ref Mel _Mel,\n            ref FloatVector _SrcF0,\n            ref FloatVector _SrcVolume,\n            ref DFloatVector _SrcSpeakerMap,\n            long _SrcSize,\n            ref Params _InferParams,\n            ref ulong _Process\n        )\n        {\n            Int16Vector Ret = new();\n            if (\n                LibSvcShallowDiffusionInference(\n                    Model_,\n                    _16KAudioHubert.Object,\n                    _Mel.Object,\n                    _SrcF0.Object,\n                    _SrcVolume.Object,\n                    _SrcSpeakerMap.Object,\n                    _SrcSize,\n                    ref _InferParams,\n                    ref _Process,\n                    Ret.Object\n                ) == 0\n            ) return Ret;\n            throw new Exception(GetError(0));\n        }\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern int LibSvcShallowDiffusionInference(\n            void* _Model,\n            void* _16KAudioHubert,\n            void* _Mel,\n            void* _SrcF0,\n            void* _SrcVolume,\n            void* _SrcSpeakerMap,\n            long _SrcSize,\n            ref Params _InferParams,\n            ref ulong _Process,\n            void* _Output\n        );\n\n        private void* Model_ = null;\n    }\n\n    public unsafe class VocoderModel\n    {\n        private VocoderModel() { }\n        public VocoderModel(void* _Obj)\n        {\n            Model_ = _Obj;\n        }\n\n        ~VocoderModel()\n        {\n            if (LibSvcUnloadVocoder(Model_) == 0)\n                return;\n            throw new Exception(GetError(0));\n        }\n\n        public void* GetModel()\n        {\n            return Model_;\n        }\n\n        public Int16Vector Inference(\n            ref Mel _Mel,\n            ref FloatVector _F0,\n            int _VocoderMelBins\n        )\n        {\n            Int16Vector Ret = new();\n            if (LibSvcVocoderEnhance(Model_, _Mel.Object, _F0.Object, _VocoderMelBins, Ret.Object) == 0)\n                return Ret;\n            throw new Exception(GetError(0));\n        }\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern int LibSvcVocoderEnhance(\n            void* Model,\n            void* Mel,\n            void* F0,\n\t\t    int VocoderMelBins,\n            void* _Output\n\t    );\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern int LibSvcUnloadVocoder(void* _Model);\n\n        private void* Model_ = null;\n    }\n\n    public unsafe class LibSvc\n    {\n        public enum Device\n        {\n            CPU = 0,\n            CUDA = 1,\n            DML = 2\n        }\n\n        [StructLayout(LayoutKind.Sequential, Pack = 4)]\n        public unsafe struct SlicerSettings\n        {\n            public int SamplingRate = 48000;\n            public double Threshold = 30;\n            public double MinLength = 3;\n            public int WindowLength = 2048;\n            public int HopSize = 512;\n            public SlicerSettings() { }\n        };\n\n        [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]\n        public unsafe struct Params\n        {\n            public Params() { }\n\n            public float NoiseScale = 0.3f;                           //噪声修正因子          0-10\n            public long Seed = 52468;                                 //种子\n            public long SpeakerId = 0;                                //角色ID\n            public ulong SrcSamplingRate = 48000;                     //源采样率\n            public long SpkCount = 2;                                 //模型角色数\n            public float IndexRate = 0;                               //索引比               0-1\n            public float ClusterRate = 0;                             //聚类比               0-1\n            public float DDSPNoiseScale = 0.8f;                       //DDSP噪声修正因子      0-10\n            public float Keys = 0;                                    //升降调               -64-64\n            public ulong MeanWindowLength = 2;                        //均值滤波器窗口大小     1-20\n            public ulong Pndm = 100;                                  //Diffusion加速倍数    1-200\n            public ulong Step = 1000;                                 //Diffusion总步数      1-1000\n            public float TBegin = 0;\n            public float TEnd = 1;\n\n            //\"Pndm\" \"DDim\"\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string Sampler = \"Pndm\";                           //Diffusion采样器\n\n            //\"Eular\" \"Rk4\" \"Heun\" \"Pecece\"\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string ReflowSampler = \"Eular\";                    //Reflow采样器\n\n            //\"Dio\" \"Harvest\" \"RMVPE\" \"FCPE\"\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string F0Method = \"Dio\";                           //F0提取算法\n\n            public int UseShallowDiffusion = 0;                       //使用浅扩散\n            public void* _VocoderModel = null;\n            public void* _ShallowDiffusionModel = null;\n            public int ShallowDiffusionUseSrcAudio = 1;\n            public int VocoderHopSize = 512;\n            public int VocoderMelBins = 128;\n            public int VocoderSamplingRate = 44100;\n            public long ShallowDiffuisonSpeaker = 0;\n\n            public void SetVocoder(ref VocoderModel Vocoder)\n            {\n                _VocoderModel = Vocoder.GetModel();\n            }\n            public void SetShallowDiffusion(ref UnionModel UnionMod)\n            {\n                _ShallowDiffusionModel = UnionMod.GetModel();\n            }\n        };\n\n        [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]\n        public unsafe struct DiffusionSvcPaths\n        {\n            public DiffusionSvcPaths() { }\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string Encoder = \"\";\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string Denoise = \"\";\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string Pred = \"\";\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string After = \"\";\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string Alpha = \"\";\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string Naive = \"\";\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string DiffSvc = \"\";\n        };\n\n        [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]\n        public unsafe struct ReflowSvcPaths\n        {\n            public ReflowSvcPaths() { }\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string Encoder = \"\";\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string VelocityFn = \"\";\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string After = \"\";\n        };\n\n        [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]\n        public unsafe struct VitsSvcPaths\n        {\n            public VitsSvcPaths() { }\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string VitsSvc = \"\";\n        };\n\n        [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]\n        public unsafe struct LibSvcClusterConfig\n        {\n            public LibSvcClusterConfig() { }\n\n            public long ClusterCenterSize = 10000;\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string Path = \"\";\n\n            //\"KMeans\" \"Index\"\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string Type = \"\";\n        };\n\n        [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]\n        public unsafe struct LibSvcHparams\n        {\n            public LibSvcHparams() { }\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n\n            //\"SoVits2.0\" \"SoVits3.0\" \"SoVits4.0\" \"SoVits4.0-DDSP\" \"RVC\" \"DiffSvc\" \"DiffusionSvc\"\n            public string TensorExtractor = \"\";\n\n            [MarshalAs(UnmanagedType.LPWStr)]\n            public string HubertPath = \"\";\n\n            public DiffusionSvcPaths DiffusionSvc;\n            public VitsSvcPaths VitsSvc;\n            public ReflowSvcPaths ReflowSvc;\n            public LibSvcClusterConfig Cluster;\n\n            public int SamplingRate = 22050;\n\n            public int HopSize = 320;\n            public long HiddenUnitKDims = 256;\n            public long SpeakerCount = 1;\n            public int EnableCharaMix = 0;\n            public int EnableVolume = 0;\n            public int VaeMode = 1;\n\n            public long MelBins = 128;\n            public long Pndms = 100;\n            public long MaxStep = 1000;\n            public float SpecMin = -12;\n            public float SpecMax = 2;\n            public float Scale = 1000;\n        };\n\n        public delegate void CallbackProgress(ulong arg1, ulong arg2);\n\n        private LibSvc() \n        {\n            Init();\n        }\n\n        private static LibSvc? instance = null;\n\n        public static LibSvc Factory\n        {\n            get { \n                instance ??= new LibSvc();\n                return instance;\n            }\n        }\n\n        public void Init()\n        {\n            LibSvcInit();\n            EnableFileLogger(false);\n            SetF0PredictorEnv(8, 0, 0);\n        }\n\n        public void SetF0PredictorEnv(uint ThreadCount, uint DeviceID, Device Provider)\n        {\n            if (LibSvcSetGlobalEnv(ThreadCount, DeviceID, (uint)Provider) == 0)\n                return;\n            throw new Exception(GetError(0));\n        }\n\n        public static void SetMaxErrorCount(ulong Count)\n        {\n            LibSvcSetMaxErrorCount(Count);\n        }\n\n        public static string GetError(ulong Index)\n        {\n            return LibSvcGetError(Index);\n        }\n\n        public Int16Vector ReadAudio(ref string _Path, int _SamplingRate)\n        {\n            Int16Vector Ret = new();\n            if (LibSvcReadAudio(_Path, _SamplingRate, Ret.Object) == 0)\n                return Ret;\n            throw new Exception(GetError(0));\n        }\n\n        public UInt64Vector SliceAudio(\n            ref Int16Vector Audio,\n            ref SlicerSettings Setting\n        )\n        {\n            UInt64Vector Ret = new();\n            if(LibSvcSliceAudio(Audio.Object, ref Setting, Ret.Object) == 0)\n                return Ret;\n            throw new Exception(GetError(0));\n        }\n\n        public Slices Preprocess(\n            ref Int16Vector Audio,\n            ref UInt64Vector SlicePos,\n            int SamplingRate = 48000,\n            int HopSize = 480,\n            double Threshold = 30,\n            string F0Method = \"Dio\"\n        )\n        {\n            Slices Ret = new();\n            if (LibSvcPreprocess(Audio.Object, SlicePos.Object, SamplingRate, HopSize, Threshold, F0Method, Ret.Object) == 0) \n                return Ret;\n            throw new Exception(GetError(0));\n        }\n\n        public Mel Stft(\n            ref Int16Vector Audio,\n            int SamplingRate,\n            int Hopsize,\n            int MelBins\n        )\n        {\n            Mel Ret = new();\n            if (LibSvcStft(Audio.Object, SamplingRate, Hopsize, MelBins, Ret.Object) == 0)\n                return Ret;\n            throw new Exception(GetError(0));\n        }\n\n        public VitsModel LoadVitsSvcModel(\n            ref LibSvcHparams _Config,\n            ref CallbackProgress _ProgressCallback,\n            Device _ExecutionProvider,\n            uint _DeviceID,\n            uint _ThreadCount\n        )\n        {\n            void* Model = LibSvcLoadModel(0, ref _Config, _ProgressCallback, (uint)_ExecutionProvider, _DeviceID, _ThreadCount);\n            if(Model != null)\n                return new VitsModel(Model);\n            throw new Exception(GetError(0));\n        }\n\n        public UnionModel LoadUnionSvcModel(\n            ref LibSvcHparams _Config,\n            ref CallbackProgress _ProgressCallback,\n            Device _ExecutionProvider,\n            uint _DeviceID,\n            uint _ThreadCount\n        )\n        {\n            void* Model = LibSvcLoadModel(1, ref _Config, _ProgressCallback, (uint)_ExecutionProvider, _DeviceID, _ThreadCount);\n            if (Model != null)\n                return new UnionModel(Model);\n            throw new Exception(GetError(0));\n        }\n\n        public VocoderModel LoadVocoderModel(ref string _Path)\n        {\n            void* Model = LibSvcLoadVocoder(_Path);\n            if (Model != null)\n                return new VocoderModel(Model);\n            throw new Exception(GetError(0));\n        }\n\n        public void EnableFileLogger(bool _Cond) { LibSvcEnableFileLogger(_Cond); }\n\n        public void WriteAudio(Int16Vector _PCMData, string _OutputPath, int _SamplingRate)\n        {\n            LibSvcWriteAudioFile(_PCMData.Object, _OutputPath, _SamplingRate);\n        }\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcInit();\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern int LibSvcSetGlobalEnv(uint ThreadCount, uint DeviceID, uint Provider);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcSetMaxErrorCount(ulong Count);\n\n        [DllImport(\"libsvc.dll\", CharSet = CharSet.Unicode)]\n        [return: MarshalAs(UnmanagedType.BStr)]\n        private static extern string LibSvcGetError(ulong Index);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern int LibSvcSliceAudio(\n            void* _Audio,\n            ref SlicerSettings _Setting,\n            void* _Output\n        );\n\n        [DllImport(\"libsvc.dll\", CharSet = CharSet.Unicode)]\n        private static extern int LibSvcPreprocess(\n            void* _Audio,\n            void* _SlicePos,\n            int _SamplingRate,\n            int _HopSize,\n            double _Threshold,\n            string _F0Method,\n            void* _Output\n        );\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern int LibSvcStft(\n            void* _Audio,\n            int _SamplingRate,\n            int _Hopsize,\n            int _MelBins,\n            void* _Output\n        );\n\n        [DllImport(\"libsvc.dll\", CharSet = CharSet.Unicode)]\n        private static extern void* LibSvcLoadModel(\n            uint _T,\n            ref LibSvcHparams _Config,\n            CallbackProgress _ProgressCallback,\n            uint _ExecutionProvider,\n            uint _DeviceID,\n            uint _ThreadCount\n\t    );\n\n        [DllImport(\"libsvc.dll\", CharSet = CharSet.Unicode)]\n        private static extern void* LibSvcLoadVocoder(string VocoderPath);\n\n        [DllImport(\"libsvc.dll\", CharSet = CharSet.Unicode)]\n        private static extern int LibSvcReadAudio(string _AudioPath, int _SamplingRate, void* _Output);\n\n        [DllImport(\"libsvc.dll\", CharSet = CharSet.Unicode)]\n        private static extern void LibSvcWriteAudioFile(void* _PCMData, string _OutputPath, int _SamplingRate);\n\n        [DllImport(\"libsvc.dll\")]\n        private static extern void LibSvcEnableFileLogger(bool _Cond);\n    }\n}\n"
  },
  {
    "path": "DotNetApi/Properties/launchSettings.json",
    "content": "{\n  \"profiles\": {\n    \"DotNetApi\": {\n      \"commandName\": \"Project\",\n      \"nativeDebugging\": true\n    }\n  }\n}"
  },
  {
    "path": "DragonianSpeech.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.5.33627.172\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"libsvc\", \"libsvc\\libsvc.vcxproj\", \"{DC31109B-1984-41DB-BD9F-4261675C3962}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"libtts\", \"libtts\\libtts.vcxproj\", \"{3CA188F3-E511-486C-AC28-CCFC6D893861}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"DotNetApi\", \"DotNetApi\\DotNetApi.csproj\", \"{E202AF11-FD77-4E39-B582-F3493874F6F5}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861} = {3CA188F3-E511-486C-AC28-CCFC6D893861}\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962} = {DC31109B-1984-41DB-BD9F-4261675C3962}\n\tEndProjectSection\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"CSharpDemo\", \"CSharpDemo\\CSharpDemo.csproj\", \"{984EEE57-4582-4699-A9BE-E64D13439208}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tDebugLib|Any CPU = DebugLib|Any CPU\n\t\tDebugLib|x64 = DebugLib|x64\n\t\tDebugLib|x86 = DebugLib|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\t\tReleaseLib|Any CPU = ReleaseLib|Any CPU\n\t\tReleaseLib|x64 = ReleaseLib|x64\n\t\tReleaseLib|x86 = ReleaseLib|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Debug|Any CPU.ActiveCfg = Debug|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Debug|Any CPU.Build.0 = Debug|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Debug|x64.Build.0 = Debug|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Debug|x86.Build.0 = Debug|Win32\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.DebugLib|Any CPU.ActiveCfg = DebugLib|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.DebugLib|Any CPU.Build.0 = DebugLib|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.DebugLib|x64.ActiveCfg = DebugLib|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.DebugLib|x64.Build.0 = DebugLib|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.DebugLib|x86.ActiveCfg = DebugLib|Win32\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.DebugLib|x86.Build.0 = DebugLib|Win32\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Release|Any CPU.ActiveCfg = Release|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Release|Any CPU.Build.0 = Release|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Release|x64.ActiveCfg = Release|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Release|x64.Build.0 = Release|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Release|x86.ActiveCfg = Release|Win32\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.Release|x86.Build.0 = Release|Win32\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.ReleaseLib|Any CPU.ActiveCfg = ReleaseLib|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.ReleaseLib|Any CPU.Build.0 = ReleaseLib|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.ReleaseLib|x64.ActiveCfg = ReleaseLib|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.ReleaseLib|x64.Build.0 = ReleaseLib|x64\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.ReleaseLib|x86.ActiveCfg = ReleaseLib|Win32\n\t\t{DC31109B-1984-41DB-BD9F-4261675C3962}.ReleaseLib|x86.Build.0 = ReleaseLib|Win32\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Debug|Any CPU.ActiveCfg = Debug|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Debug|Any CPU.Build.0 = Debug|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Debug|x64.Build.0 = Debug|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Debug|x86.Build.0 = Debug|Win32\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.DebugLib|Any CPU.ActiveCfg = Debug|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.DebugLib|Any CPU.Build.0 = Debug|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.DebugLib|x64.ActiveCfg = DebugLib|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.DebugLib|x64.Build.0 = DebugLib|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.DebugLib|x86.ActiveCfg = Debug|Win32\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.DebugLib|x86.Build.0 = Debug|Win32\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Release|Any CPU.ActiveCfg = Release|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Release|Any CPU.Build.0 = Release|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Release|x64.ActiveCfg = Release|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Release|x64.Build.0 = Release|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Release|x86.ActiveCfg = Release|Win32\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.Release|x86.Build.0 = Release|Win32\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.ReleaseLib|Any CPU.ActiveCfg = Release|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.ReleaseLib|x64.ActiveCfg = ReleaseLib|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.ReleaseLib|x64.Build.0 = ReleaseLib|x64\n\t\t{3CA188F3-E511-486C-AC28-CCFC6D893861}.ReleaseLib|x86.ActiveCfg = Release|Win32\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.DebugLib|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.DebugLib|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.DebugLib|x64.ActiveCfg = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.DebugLib|x86.ActiveCfg = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.DebugLib|x86.Build.0 = Debug|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Release|x64.Build.0 = Release|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.Release|x86.Build.0 = Release|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.ReleaseLib|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.ReleaseLib|x64.ActiveCfg = Release|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.ReleaseLib|x86.ActiveCfg = Release|Any CPU\n\t\t{E202AF11-FD77-4E39-B582-F3493874F6F5}.ReleaseLib|x86.Build.0 = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.DebugLib|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.DebugLib|Any CPU.Build.0 = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.DebugLib|x64.ActiveCfg = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.DebugLib|x86.ActiveCfg = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.DebugLib|x86.Build.0 = Debug|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Release|x64.Build.0 = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.Release|x86.Build.0 = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.ReleaseLib|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.ReleaseLib|x64.ActiveCfg = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.ReleaseLib|x86.ActiveCfg = Release|Any CPU\n\t\t{984EEE57-4582-4699-A9BE-E64D13439208}.ReleaseLib|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {4EA568DA-C661-4A8C-BA02-1185BFA9DCF0}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published\n    by the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<https://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\r\n\r\n![image](logo/logo256(AIGen).png)\r\n# DragonianVoice\r\n[中文](README.md) | [English](README_en.md)\r\n\r\n</div>\r\n\r\n> 本仓库已经永久停止了UI项目的维护，会成为一个纯Lib项目，代码仓库地址：[DragonianLib](https://github.com/NaruseMioShirakana/DragonianLib)，但是有关SVC和TTS的Release仍然在此仓库发布。\r\n\r\n> 本仓库为：1、TTS（Tacotron2、Vits、EmotionalVits、BERTVits2、GPtSoVits）；2、SVC（SoVitsSvc、RVC、DiffusionSvc、FishDiffusion、ReflowSvc）；3、SVS（DiffSinger） 的Onnx框架推理仓库，目前支持C/Cpp/C#调用。\r\n\r\n> 本仓库的最新版本已经与 [fish-speech](https://github.com/fishaudio/fish-speech) 联动，使用ggml框架重写fish-speech，组成fish-speech.cpp子项目\r\n\r\n> 注意：支持SVS的分支：[MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudio) [MoeVoiceStudioCore](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore)\r\n\r\n> 关于Cuda支持的相关问题可以前往 [OnnxRuntime官方仓库](https://github.com/microsoft/onnxruntime/releases) 查看\r\n\r\n> 经过实验，Dml会导致Onnx中一些不支持的算子在使用时并不会报错，而是会返回一个不可预料的结果，所以会导致SoVits3.0和SoVits4.0在DmlEP上的推理结果错误。不过最新的SoVits仓库中的Onnx导出已经替换了这些算子，故SoVits3.0和SoVits4.0恢复支持Dml使用，但是要使用最新（2023/7/17）版本的SoVitsOnnx导出重新导出Onnx模型\r\n\r\n> 由于Diffusion和Reflow模型的特性，如果你推理的总步数大于模型训练时最大的步数（实际步数=总步数/加速倍率，这个总步数不是推理时实际走过的步数，而是K_Step），会导致输出音频炸掉或者出现非常大的噪声，所以建议在推理前请仔细观察自己模型配置文件中的MaxStep（或K_Step_Max） \r\n\r\n<details><summary><b>支持的Net：</b></summary>\r\n    \r\n- [DeepLearningExamples](https://github.com/NVIDIA/DeepLearningExamples)\r\n- [Vits](https://github.com/jaywalnut310/vits)\r\n- [EmotionalVits](https://github.com/innnky/emotional-vits)\r\n- [BertVits2](https://github.com/fishaudio/Bert-VITS2)\r\n- [SoVitsSvc (v2/v3/v4)](https://github.com/svc-develop-team/so-vits-svc)\r\n- [RVC](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)\r\n- [DiffSvc](https://github.com/prophesier/diff-SVC)\r\n- [DiffusionSvc (v1/v2)](https://github.com/CNChTu/Diffusion-SVC)\r\n- [FishDiffusion](https://github.com/fishaudio/fish-diffusion)\r\n- [ReflowSvc](https://github.com/prophesier/diff-SVC)\r\n- [DiffSinger](https://github.com/openvpi/DiffSinger)\r\n- [FCPE](https://github.com/CNChTu/MelPE)\r\n- [RMVPE](https://github.com/yxlllc/RMVPE)\r\n\r\n</details>\r\n\r\n## 目录\r\n- [协议](#用户协议)\r\n  - [免责声明](#免责声明) \r\n- [说明](#说明)\r\n  - [分支说明](#分支)\r\n- [FAQ问答](#faq)\r\n  - Q: [项目名的来历是什么？](#q-项目名的来历)\r\n  - Q: [这个项目到底有什么作用?](#q-这个项目到底有什么作用)\r\n  - Q: [该项目以后会收费吗?](#q-该项目以后会收费吗)\r\n  - Q: [是否提供有偿模型代训练?](#q-是否提供有偿模型代训练)\r\n  - Q: [电子垃圾评判标准是什么?](#q-电子垃圾评判标准是什么)\r\n  - Q: [技术支持?](#q-技术支持)\r\n- [注意事项](#注意事项)\r\n- [使用方法](#使用方法)\r\n- [模型配置](#模型配置)\r\n  - [前置模型](#前置模型) \r\n  - [配置文件](#配置文件)\r\n- [支持的项目](#支持的项目)\r\n- [其他设置](#其他设置)\r\n  - [Symbol](#symbol)\r\n  - [Cleaner](#cleaner)\r\n- [本地编译](#本地编译)\r\n- [依赖列表](#依赖列表)\r\n- [相关法规](#-相关法规)\r\n\r\n## 用户协议：\r\n### 使用该项目你必须同意以下条款，若不同意则禁止使用该项目：\r\n1. 你必须自行承担由于使用该项目而造成的一切后果。\r\n2. 禁止出售该程序。\r\n3. 使用该项目时，你必须自觉遵守当地的法律法规，禁止使用该项目从事违法活动。\r\n4. 禁止用于任何商业游戏、低创游戏[^1]以及Galgame制作，不反对无偿的精品游戏制作以及Mod制作。\r\n5. 禁止使用该项目及该项目衍生物以及发布模型等制作各种电子垃圾[^2] (例如AIGalgame，AI游戏制作等)。\r\n6. 禁止一切政治相关内容。\r\n7. 你使用该项目生成的一切内容均与该项目开发者无关。\r\n8. 本项目开发者主张使用者不具有其所生成“音频本身”的版权，应当划归公共领域；而音频背后涉及到的歌词、乐曲的版权所有者均为该歌词、乐曲的版权所有方。\r\n\r\n[^1]: 低创的评判标准为: 大量使用AI生成的任何内容，原创内容较低，意义不明，内容质量低下等。\r\n[^2]: 电子垃圾评判标准: 1、原创度。自己的东西在整个项目中的比例（对于AI来说，使用完全由你独立训练模型的创作属于你自己；使用他人模型的创作属于别人）。涵盖的方面包括但不限于程序、美工、音频、策划等等。例如，套用Unity等引擎模板换皮属于电子垃圾。\r\n\r\n## 免责声明\r\n本项目为**开源、离线的项目，本项目的所有开发者以及维护者（以下简称贡献者）对本项目没有控制力**。本项目的贡献者从未向任何组织或个人提供包括但不限于数据集提取、数据集加工、算力支持、训练支持、推理等一切形式的帮助；本项目的贡献者不知晓也无法知晓使用者使用该项目的用途。故一切基于本项目合成的音频都与本项目贡献者无关。**一切由此造成的问题由使用者自行承担**。\r\n\r\n本项目本身不具备任何语音合成的功能，只是用于启动使用者自行训练并自行制作为Onnx模型的模型，且模型的训练与Onnx模型的制作均与本项目的贡献者无关，均为使用者自己的行为，本项目贡献者未参与一切使用者的模型训练与制作。\r\n\r\n本项目为完全离线状态下运行，无法采集任何用户信息，也无法获取用户的输入数据，故本项目贡献者对用户的一切输入以及模型不知情，因此不对任何用户输入负责。\r\n\r\n**本项目也没有附带任何模型，任何二次发布所附带的模型以及用于此项目的模型均与此项目开发者无关。**\r\n\r\n## 说明\r\n本项目目前已完全支持自行调用其中方法来实现命令行推理或其他软件，欢迎大家向本项目提PR\r\n\r\n作者的其他项目：[AiToolKits](https://github.com/NaruseMioShirakana/ShirakanaNoAiToolKits)\r\n\r\n如果想要参加开发，可以加入QQ群:263805400或直接提PR\r\n\r\n**模型需要转换为ONNX模型，详情见你选择的项目的源仓库，PTH模型不能直接使用！！！！！！！！！！！！！**\r\n\r\n## 分支\r\n本项目的各分支:\r\n- [MoeVoiceStudioCore(主分支)](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore) 项目核心\r\n- [MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudio) 本项目的简单GUI实现 基于qt\r\n- [MoeSSV2](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/V2) 旧版MoeSSV2版本存档\r\n- [MoeSSV1](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/V2) 旧版MoeSSV1版本存档\r\n\r\n## FAQ\r\n### Q: 项目名的来历？\r\n<details><summary>A: </b></summary>\r\n\r\n> XP至上主义者狂喜，有谁不喜欢龙娘呢\r\n\r\n</details>\r\n\r\n### Q: 这个项目到底有什么作用？\r\n<details><summary>A: </b></summary>\r\n\r\n> 这个项目的开发初衷主要是实现无需环境部属各个语音合成项目，而现在打算制作为一个SVC的辅助编辑器。\r\n> \r\n> 由于这个项目毕竟是一个\"个人的\" \"不专业\"的项目，所以在您拥有更专业的软件，或者您是Python Cli爱好者，又或者您是相关领域大佬。我自知本软件不够专业且很大可能无法满足您的需求甚至对您没有用处。\r\n> \r\n> 本项目并不是不可替代的项目，相反的本项目的功能您可以使用各种工具替代，我没有奢望本项目成为相关领域的领军项目，我只是怀着一腔热情继续着该项目的开发。但是热情总有消散的一天，但是该项目承诺在我的开   > 发热情完全消散之前会一直保持维护（不管有没有人使用，就算用户数目为0）\r\n> \r\n> 本项目在设计上可能存在着各种各样的问题，所以也是需要大家积极的点炒饭来帮助我完善功能的，大部分对于功能和体验的优化我都会接受。\r\n\r\n</details>\r\n\r\n### Q: 该项目以后会收费吗？\r\n<details><summary>A: </b></summary>\r\n\r\n> 该项目永久开源免费，如果在其他地方存在本项目的收费版本，请立即举报且不要购买，本项目永久免费。如果想用疯狂星期四塞满白叶，可以前往爱发癫 https://afdian.net/a/NaruseMioShirakana\r\n> \r\n</details>\r\n\r\n### Q: 是否提供有偿模型代训练？\r\n<details><summary>A: </b></summary>\r\n\r\n> 不提供，训练模型比较简单，没必要花冤枉钱，按照网上教程一步一步走就可以了。\r\n\r\n</details>\r\n\r\n\r\n### Q: 电子垃圾评判标准是什么？\r\n<details><summary>A: </b></summary>\r\n\r\n> 1. 原创度。自己的东西在整个项目中的比例（对于AI来说，使用完全由你独立训练模型的创作属于你自己；使用他人模型的创作属于别人）。涵盖的方面包括但不限于程序、美工、音频、策划等等。举个例子，套用Unity等引擎模板换皮属于电子垃圾。\r\n> 2. 开发者态度。作者开发的态度是不是捞一波流量和钱走人或单纯虚荣。比方说打了无数的tag，像什么“国产”“首个”“最强”“自制”这种引流宣传，结果是非常烂或是平庸的东西，且作者明显没有好好制作该项目的想法，属于电子垃圾。\r\n> 3. 反对一切使用未授权的数据集训练出来的AI模型商用的行为。 \r\n\r\n</details>\r\n\r\n### Q: 技术支持？\r\n<details><summary>A: </b></summary>\r\n\r\n> 如果能够确定你做的不是电子垃圾，同时合法合规，没有严重的政治错误，我会提供一些力所能及的技术支持。 \r\n\r\n</details>\r\n\r\n## 注意事项\r\n### 由于OnnxRuntime引发的问题\r\n不支持中文路径？实际上项目本体是支持中文路径的，不过2023年3月前版本的OnnxRuntime是不支持中文路径的，因为这些版本的OnnxRuntime使用了Win32Api的A系列函数，A系列函数都是不支持非ANSI编码的路径的。这个问题并不是我能够解决的也不是我应该解决的，只有微软官方才可以修复这个BUG，不过好在最新的OnnxRuntime使用了W系列函数，解决了中文路径问题。\r\n\r\n### Cuda版本问题\r\n由于Cuda有着极差的兼容性，导致一个基于Cuda的程序在使用时，必须安装和编译该程序时相同或是未修改Api最近版本的Cuda。这个问题只能等英伟达公司重视兼容性了。\r\n\r\n## 使用方法\r\nMoeVoiceStudioCore以Lib的形式提供 使用C++语言调用\r\n\r\n按需引用以下对应的类\r\n```cpp\r\n#include <Modules/Models/header/Tacotron.hpp>\r\n#include <Modules/Models/header/Vits.hpp>\r\n#include <Modules/Models/header/VitsSvc.hpp>\r\n#include <Modules/Models/header/DiffSvc.hpp>\r\n#include <Modules/Models/header/DiffSinger.hpp>\r\n\r\nInferClass::Tacotron2;\r\nInferClass::Vits;\r\nInferClass::VitsSvc;\r\nInferClass::DiffusionSvc;\r\nInferClass::DiffusionSinger;\r\n\r\n/*\r\n构造函数第一个是配置文件json\r\n第二个是进度条回调\r\n第三个是参数回调 (若为TTS 此参数为空即可)\r\n第四个参数为设备\r\n使用调用Inference函数即可\r\n*/\r\n```\r\n模型配置请参见[#模型配置](#模型配置)\r\n\r\ndemo: [RVC命令行示例](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore/CMD-RVC-Onnx-Inference)\r\n\r\n## 模型配置\r\n### 前置模型\r\n#### 与所支持的几个项目无关 为深度学习领域的通用模型\r\n停止更新（由于下载和上传速度）: [Vocoder & HiddenUnitBert](https://github.com/NaruseMioShirakana/RequireMent-Model-For-MoeSS) \r\n\r\n停止更新（由于HuggingFace被墙） : [HuggingFace](https://huggingface.co/NaruseMioShirakana/MoeSS-SUBModel) \r\n\r\n最新仓库：[Openi](https://openi.pcl.ac.cn/Shirakana/SubModel)\r\n\r\n自己导出前置：\r\n- HuBert：`input_names`应该为`[\"source\"]`，`output_names`应该为`[\"embed\"]`，`dynamic_axes`应当为`{\"source\":[0,2],}`\r\n- Diffusion模型使用的hifigan：`input_names`应该为`[\"c\",\"f0\"]`，`output_names`应该为`[\"audio\"]`，`dynamic_axes`应当为`{\"c\":[0,1],\"f0\":[0,1],}`\r\n- Tacotron2使用的hifigan：`input_names`应该为`[\"x\"]`，`output_names`应该为`[\"audio\"]`，`dynamic_axes`应当为`{\"x\":[0,1],}`\r\n\r\nVec模型和Hubert模型放在Hubert文件夹下，Hifigan模型放在Hifigan文件夹下\r\n如需使用FCPE或RMVPE这两个F0预测器，则需要在根目录创建F0Predictor文件夹并将onnx模型放置在其中\r\n\r\n## 配置文件\r\n- 本项目标准化了模型读取模块，模型保存在Mods文件夹下的子文件夹中。`xxx.json` 为模型的配置文件，需要自行按照模板编写，同时需要自行将模型转换为Onnx。\r\n\r\n#### 通用参数(不管是啥模型都必须填的，不填就不识别)：\r\n- `Folder`：保存模型的文件夹名\r\n- `Name`：模型在UI中的显示名称\r\n- `Type`：模型类别\r\n- `Rate`：采样率（必须和你训练时候的一模一样，不明白原因建议去学计算机音频相关的知识）\r\n\r\n### 配置示例\r\n\r\n<details><summary>Tacotron2:</summary>\r\n\r\n```jsonc\r\n{\r\n    \"Folder\" : \"Atri\",\r\n    \"Name\" : \"亚托莉-Tacotron2\",\r\n    \"Type\" : \"Tacotron2\",\r\n    \"Rate\" : 22050,\r\n    \"Symbol\" : \"_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\r\n    \"Cleaner\" : \"\",\r\n    \"AddBlank\": false,\r\n    \"Hifigan\": \"hifigan\"\r\n}\r\n//Symbol：模型的Symbol，不知道Symbol是啥的建议多看几个视频了解了解TTS的基础知识，这一项在Tacotron2中必须填。\r\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\r\n//Hifigan：Hifigan模型名，必须填且必须将在前置模型中下载到的hifigan放置到hifigan文件夹\r\n//AddBlank：是否在音素之间插0作为分隔\r\n```\r\n\r\n</details>\r\n<details><summary>Vits:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"SummerPockets\",\r\n    \"Name\" : \"SummerPocketsReflectionBlue\",\r\n    \"Type\" : \"Vits\",\r\n    \"Rate\" : 22050,\r\n    \"Symbol\" : \"_,.!?-~…AEINOQUabdefghijkmnoprstuvwyzʃʧʦ↓↑ \",\r\n    \"Cleaner\" : \"\",\r\n    \"AddBlank\": true,\r\n    \"Emotional\" : true,\r\n    \"EmotionalPath\" : \"all_emotions\",\r\n    \"Characters\" : [\"鳴瀬しろは\",\"空門蒼\",\"鷹原うみ\",\"紬ヴェンダース\",\"神山識\",\"水織静久\",\"野村美希\",\"久島鴎\",\"岬鏡子\"]\r\n}\r\n//Symbol：模型的Symbol，不知道Symbol是啥的建议多看几个视频了解了解TTS的基础知识，这一项在Vits中必须填。\r\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\r\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\r\n//AddBlank：是否在音素之间插0作为分隔（大多数Vits模型必须为true）\r\n//Emotional：是否加入情感向量\r\n//EmotionalPath：情感向量npy文件名\r\n```\r\n</details>\r\n<details><summary>Pits:</summary>\r\n\r\n```jsonc\r\n{\r\n    \"Folder\" : \"SummerPockets\",\r\n    \"Name\" : \"SummerPocketsReflectionBlue\",\r\n    \"Type\" : \"Pits\",\r\n    \"Rate\" : 22050,\r\n    \"Symbol\" : \"_,.!?-~…AEINOQUabdefghijkmnoprstuvwyzʃʧʦ↓↑ \",\r\n    \"Cleaner\" : \"\",\r\n    \"AddBlank\": true,\r\n    \"Emotional\" : true,\r\n    \"EmotionalPath\" : \"all_emotions\",\r\n    \"Characters\" : [\"鳴瀬しろは\",\"空門蒼\",\"鷹原うみ\",\"紬ヴェンダース\",\"神山識\",\"水織静久\",\"野村美希\",\"久島鴎\",\"岬鏡子\"]\r\n}\r\n//Symbol：模型的Symbol，不知道Symbol是啥的建议多看几个视频了解了解TTS的基础知识，这一项在Vits中必须填。\r\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\r\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\r\n//AddBlank：是否在音素之间插0作为分隔（大多数Pits模型必须为true）\r\n//Emotional：是否加入情感向量\r\n//EmotionalPath：情感向量npy文件名\r\n```\r\n    \r\n</details>\r\n<details><summary>RVC:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"NyaruTaffy\",\r\n    \"Name\" : \"NyaruTaffy\",\r\n    \"Type\" : \"RVC\",\r\n    \"Rate\" : 40000,\r\n    \"Hop\" : 320,\r\n    \"Cleaner\" : \"\",\r\n    \"Hubert\": \"hubert4.0\",\r\n    \"Diffusion\": false,\r\n    \"CharaMix\": true,\r\n    \"Volume\": false,\r\n    \"SoVits2\": true,\r\n    \"ShallowDiffusion\" : \"NyaruTaffy\"\r\n    \"HiddenSize\": 256,\r\n    \"Cluster\": \"Index\"\r\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\r\n}\r\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\r\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\r\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\r\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\r\n//Diffusion：是否为DDSP仓库下的扩散模型\r\n//CharaMix：是否使用角色混合轨道\r\n//ShallowDiffusion：SoVits浅扩散模型，须填写ShallowDiffusion模型配置文件名（不带后缀和完整路径），小显存或内存下速度巨慢，效果未知，请根据实际情况决定是否使用）\r\n//Volume：该模型是否有音量Emb\r\n//HiddenSize：Vec模型的尺寸（768/256）\r\n//Cluster：聚类类型，包括\"KMeans\"和\"Index\"，KMeans需要前往SoVits仓库将KMeans文件导出为可用格式，放置到模型文件夹；Index同理，需要前往SoVits仓库导出为可用格式（如果是RVC的单角色Index只需要改名为Index-0.index）然后放置到模型文件夹下（有几个角色就有几个Index文件）\r\n```\r\n</details>\r\n<details><summary>SoVits_3.0_32k:</summary>\r\n\r\n```jsonc\r\n{\r\n    \"Folder\" : \"NyaruTaffySo\",\r\n    \"Name\" : \"NyaruTaffy-SoVits\",\r\n    \"Type\" : \"SoVits\",\r\n    \"Rate\" : 32000,\r\n    \"Hop\" : 320,\r\n    \"Cleaner\" : \"\",\r\n    \"Hubert\": \"hubert\",\r\n    \"SoVits3\": true,\r\n    \"ShallowDiffusion\" : \"NyaruTaffy\"\r\n    \"Diffusion\": false,\r\n    \"CharaMix\": true,\r\n    \"Volume\": false,\r\n    \"HiddenSize\": 256,\r\n    \"Cluster\": \"KMeans\"\r\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\r\n}\r\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\r\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\r\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\r\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\r\n//Diffusion：是否为DDSP仓库下的扩散模型\r\n//ShallowDiffusion：SoVits浅扩散模型，须填写ShallowDiffusion模型配置文件名（不带后缀和完整路径），小显存或内存下速度巨慢，效果未知，请根据实际情况决定是否使用）\r\n//CharaMix：是否使用角色混合轨道\r\n//Volume：该模型是否有音量Emb\r\n//HiddenSize：Vec模型的尺寸（768/256）\r\n//Cluster：聚类类型，包括\"KMeans\"和\"Index\"，KMeans需要前往SoVits仓库将KMeans文件导出为可用格式，放置到模型文件夹；Index同理，需要前往SoVits仓库导出为可用格式（如果是RVC的单角色Index只需要改名为Index-0.index）然后放置到模型文件夹下（有几个角色就有几个Index文件）\r\n```\r\n    \r\n</details>\r\n<details><summary>SoVits_3.0_48k:</summary>\r\n\r\n```jsonc\r\n{\r\n    \"Folder\" : \"NyaruTaffySo\",\r\n    \"Name\" : \"NyaruTaffy-SoVits\",\r\n    \"Type\" : \"SoVits\",\r\n    \"Rate\" : 48000,\r\n    \"Hop\" : 320,\r\n    \"Cleaner\" : \"\",\r\n    \"Hubert\": \"hubert\",\r\n    \"SoVits3\": true,\r\n    \"ShallowDiffusion\" : \"NyaruTaffy\"\r\n    \"Diffusion\": false,\r\n    \"CharaMix\": true,\r\n    \"Volume\": false,\r\n    \"HiddenSize\": 256,\r\n    \"Cluster\": \"KMeans\"\r\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\r\n}\r\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\r\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\r\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\r\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\r\n//Diffusion：是否为DDSP仓库下的扩散模型\r\n//ShallowDiffusion：SoVits浅扩散模型，须填写ShallowDiffusion模型配置文件名（不带后缀和完整路径），小显存或内存下速度巨慢，效果未知，请根据实际情况决定是否使用）\r\n//CharaMix：是否使用角色混合轨道\r\n//Volume：该模型是否有音量Emb\r\n//HiddenSize：Vec模型的尺寸（768/256）\r\n//Cluster：聚类类型，包括\"KMeans\"和\"Index\"，KMeans需要前往SoVits仓库将KMeans文件导出为可用格式，放置到模型文件夹；Index同理，需要前往SoVits仓库导出为可用格式（如果是RVC的单角色Index只需要改名为Index-0.index）然后放置到模型文件夹下（有几个角色就有几个Index文件）\r\n```\r\n    \r\n</details>\r\n<details><summary>SoVits_4.0:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"NyaruTaffySo\",\r\n    \"Name\" : \"NyaruTaffy-SoVits\",\r\n    \"Type\" : \"SoVits\",\r\n    \"Rate\" : 44100,\r\n    \"Hop\" : 512,\r\n    \"Cleaner\" : \"\",\r\n    \"Hubert\": \"hubert4.0\",\r\n    \"SoVits4.0V2\": false,\r\n    \"ShallowDiffusion\" : \"NyaruTaffy\"\r\n    \"Diffusion\" : false,\r\n    \"CharaMix\" : true,\r\n    \"Volume\" : false,\r\n    \"HiddenSize\" : 256,\r\n    \"Cluster\" : \"KMeans\"\r\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\r\n}\r\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\r\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\r\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\r\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\r\n//Diffusion：是否为DDSP仓库下的扩散模型\r\n//ShallowDiffusion：SoVits浅扩散模型，须填写ShallowDiffusion模型配置文件名（不带后缀和完整路径），小显存或内存下速度巨慢，效果未知，请根据实际情况决定是否使用）\r\n//CharaMix：是否使用角色混合轨道\r\n//Volume：该模型是否有音量Emb\r\n//HiddenSize：Vec模型的尺寸（768/256）\r\n//Cluster：聚类类型，包括\"KMeans\"和\"Index\"，KMeans需要前往SoVits仓库将KMeans文件导出为可用格式，放置到模型文件夹；Index同理，需要前往SoVits仓库导出为可用格式（如果是RVC的单角色Index只需要改名为Index-0.index）然后放置到模型文件夹下（有几个角色就有几个Index文件）\r\n//SoVits4.0V2: 是否为SoVits4.0V2模型\r\n```\r\n    \r\n</details>\r\n<details><summary>DiffSVC:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"DiffShiroha\",\r\n    \"Name\" : \"白羽\",\r\n    \"Type\" : \"DiffSvc\",\r\n    \"Rate\" : 44100,\r\n    \"Hop\" : 512,\r\n    \"MelBins\" : 128,\r\n    \"Cleaner\" : \"\",\r\n    \"Hifigan\": \"nsf_hifigan\",\r\n    \"Hubert\": \"hubert\",\r\n    \"Characters\" : [],\r\n    \"Pndm\" : 100,\r\n    \"Diffusion\": false,\r\n    \"CharaMix\": true,\r\n    \"Volume\": false,\r\n    \"HiddenSize\": 256,\r\n    \"V2\" : true\r\n}\r\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\r\n//MelBins：模型的MelBins，不知道MelBins是啥的建议多看几个视频了解了解梅尔基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\r\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\r\n//Hubert：Hubert模型名，必须填且必须将在前置模型中下载到的Hubert放置到Hubert文件夹\r\n//Hifigan：Hifigan模型名，必须填且必须将在前置模型中下载到的nsf_hifigan放置到hifigan文件夹\r\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\r\n//Pndm：加速倍数，如果是V1模型则必填且必须为导出时设置的加速倍率\r\n//V2：是否为V2模型，V2模型就是后来我分4个模块导出的那个\r\n//Diffusion：是否为DDSP仓库下的扩散模型\r\n//CharaMix：是否使用角色混合轨道\r\n//Volume：该模型是否有音量Emb\r\n//HiddenSize：Vec模型的尺寸（768/256）\r\n```\r\n    \r\n</details>\r\n<details><summary>DiffSinger:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"utagoe\",\r\n    \"Name\" : \"utagoe\",\r\n    \"Type\" : \"DiffSinger\",\r\n    \"Rate\" : 44100,\r\n    \"Hop\" : 512,\r\n    \"Cleaner\" : \"\",\r\n    \"Hifigan\": \"singer_nsf_hifigan\",\r\n    \"Characters\" : [],\r\n    \"MelBins\" : 128\r\n}\r\n//Hop：模型的HopLength，不知道HopLength是啥的建议多看几个视频了解了解音频的基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\r\n//Cleaner：插件名，可以不填，填了就必须要在Cleaner文件夹防止相应的CleanerDll，如果Dll不存在或者是Dll内部有问题，则会在加载模型时报插件错误\r\n//Hifigan：Hifigan模型名，必须填且必须将在前置模型中下载到的singer_nsf_hifigan放置到hifigan文件夹\r\n//Characters：如果是多角色模型必须填写为你的角色名称组成的列表，如果是单角色模型可以不填\r\n//MelBins：模型的MelBins，不知道MelBins是啥的建议多看几个视频了解了解梅尔基础知识，这一项在SoVits中必须填。（数值必须为你训练时的数值，可以在你训练模型时候的配置文件里看到）\r\n```\r\n\r\n</details>\r\n<details><summary>BertVits:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\": \"HimenoSena\",\r\n    \"Name\": \"HimenoSena\",\r\n    \"Type\": \"BertVits\",\r\n    \"Symbol\": [\r\n        \"_\",\r\n        \"AA\",\r\n        \"E\",\r\n        \"EE\",\r\n        \"En\",\r\n        \"N\",\r\n        \"OO\",\r\n        \"V\",\r\n        \"a\",\r\n        \"a:\",\r\n        \"aa\",\r\n        \"ae\",\r\n        \"ah\",\r\n        \"ai\",\r\n        \"an\",\r\n        \"ang\",\r\n        \"ao\",\r\n        \"aw\",\r\n        \"ay\",\r\n        \"b\",\r\n        \"by\",\r\n        \"c\",\r\n        \"ch\",\r\n        \"d\",\r\n        \"dh\",\r\n        \"dy\",\r\n        \"e\",\r\n        \"e:\",\r\n        \"eh\",\r\n        \"ei\",\r\n        \"en\",\r\n        \"eng\",\r\n        \"er\",\r\n        \"ey\",\r\n        \"f\",\r\n        \"g\",\r\n        \"gy\",\r\n        \"h\",\r\n        \"hh\",\r\n        \"hy\",\r\n        \"i\",\r\n        \"i0\",\r\n        \"i:\",\r\n        \"ia\",\r\n        \"ian\",\r\n        \"iang\",\r\n        \"iao\",\r\n        \"ie\",\r\n        \"ih\",\r\n        \"in\",\r\n        \"ing\",\r\n        \"iong\",\r\n        \"ir\",\r\n        \"iu\",\r\n        \"iy\",\r\n        \"j\",\r\n        \"jh\",\r\n        \"k\",\r\n        \"ky\",\r\n        \"l\",\r\n        \"m\",\r\n        \"my\",\r\n        \"n\",\r\n        \"ng\",\r\n        \"ny\",\r\n        \"o\",\r\n        \"o:\",\r\n        \"ong\",\r\n        \"ou\",\r\n        \"ow\",\r\n        \"oy\",\r\n        \"p\",\r\n        \"py\",\r\n        \"q\",\r\n        \"r\",\r\n        \"ry\",\r\n        \"s\",\r\n        \"sh\",\r\n        \"t\",\r\n        \"th\",\r\n        \"ts\",\r\n        \"ty\",\r\n        \"u\",\r\n        \"u:\",\r\n        \"ua\",\r\n        \"uai\",\r\n        \"uan\",\r\n        \"uang\",\r\n        \"uh\",\r\n        \"ui\",\r\n        \"un\",\r\n        \"uo\",\r\n        \"uw\",\r\n        \"v\",\r\n        \"van\",\r\n        \"ve\",\r\n        \"vn\",\r\n        \"w\",\r\n        \"x\",\r\n        \"y\",\r\n        \"z\",\r\n        \"zh\",\r\n        \"zy\",\r\n        \"!\",\r\n        \"?\",\r\n        \"\\u2026\",\r\n        \",\",\r\n        \".\",\r\n        \"'\",\r\n        \"-\",\r\n        \"SP\",\r\n        \"UNK\"\r\n    ],\r\n    \"Cleaner\": \"\",\r\n    \"Rate\": 44100,\r\n    \"CharaMix\": true,\r\n    \"Characters\": [\r\n        \"\\u56fd\\u89c1\\u83dc\\u5b50\",\r\n        \"\\u59ec\\u91ce\\u661f\\u594f\",\r\n        \"\\u65b0\\u5802\\u5f69\\u97f3\",\r\n        \"\\u56db\\u6761\\u51db\\u9999\",\r\n        \"\\u5c0f\\u97a0\\u7531\\u4f9d\"\r\n    ],\r\n    \"LanguageMap\": {\r\n        \"ZH\": [\r\n            0,\r\n            0\r\n        ],\r\n        \"JP\": [\r\n            1,\r\n            6\r\n        ],\r\n        \"EN\": [\r\n            2,\r\n            8\r\n        ]\r\n    },\r\n    \"Dict\": \"BasicDict\",\r\n    \"BertPath\": [\r\n        \"chinese-roberta-wwm-ext-large\",\r\n        \"deberta-v2-large-japanese\",\r\n        \"bert-base-japanese-v3\"\r\n    ]\r\n}\r\n```\r\n    \r\n</details>\r\n\r\n## 支持的项目\r\n```cmake\r\n// ${xxx}是什么意思大家应该都知道吧，总之以下是多个不同项目需要的模型文件（需要放置在对应的模型文件夹下）。\r\n// Tacotron2：\r\n    ${Folder}_decoder_iter.onnx\r\n    ${Folder}_encoder.onnx\r\n    ${Folder}_postnet.onnx\r\n// Vits:    单角色VITS\r\n    ${Folder}_dec.onnx\r\n    ${Folder}_flow.onnx\r\n    ${Folder}_enc_p.onnx\r\n    ${Folder}_dp.onnx \r\n// Vits:   多角色VITS\r\n    ${Folder}_dec.onnx\r\n    ${Folder}_emb.onnx\r\n    ${Folder}_flow.onnx\r\n    ${Folder}_enc_p.onnx\r\n    ${Folder}_dp.onnx\r\n// SoVits:\r\n    ${Folder}_SoVits.onnx\r\n// RVC:\r\n    ${Folder}_RVC.onnx\r\n// DiffSvc:\r\n    ${Folder}_diffSvc.onnx\r\n// DiffSvc: V2\r\n    ${Folder}_encoder.onnx\r\n    ${Folder}_denoise.onnx\r\n    ${Folder}_pred.onnx\r\n    ${Folder}_after.onnx\r\n// DiffSinger: OpenVpiVersion\r\n    ${Folder}_diffSinger.onnx\r\n// DiffSinger: \r\n    ${Folder}_encoder.onnx\r\n    ${Folder}_denoise.onnx\r\n    ${Folder}_pred.onnx\r\n    ${Folder}_after.onnx\r\n```\r\n## 其他设置\r\n### Symbol\r\n\r\n    例如：_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\r\n    打开你训练模型的项目，打开text\\symbol.py，如图按照划线的List顺序将上面的4个字符串连接即可\r\n![image](https://user-images.githubusercontent.com/40709280/183290732-dcb93323-1061-431b-aafa-c285a3ec5e82.png)\r\n\r\n### Cleaner\r\n```cxx\r\n/*\r\nCleaner请放置于根目录的Cleaners文件夹内，应该是一个按照要求定义的动态库（.dll），dll应当命名为Cleaner名，Cleaner名即为模型定义Json文件中Cleaner一栏填写的内容。\r\n所有的插件dll需要定义以下函数，函数名必须为PluginMain，Dll名必须为插件名（或Cleaner名）：\r\n*/\r\nconst wchar_t* PluginMain(const wchar_t*);\r\n// 该接口只要求输入输出一致，并不要求功能一致，也就是说，你可以在改Dll中实现任何想要的功能，比方说ChatGpt，机器翻译等等。\r\n// 以ChatGpt为例，PluginMain函数传入了一个输入字符串input，将该输入传入ChatGpt，再将ChatGpt的输出传入PluginMain，最后返回输出。\r\nwchar_t* PluginMain(wchar_t* input){\r\n    wchar_t* tmpOutput = ChatGpt(input);\r\n    return Clean(tmpOutput);\r\n}\r\n// 注意：导出dll时请使用 extern \"C\" 关键字来防止C++语言的破坏性命名。\r\n```\r\n\r\n## 本地编译\r\n```cxx\r\ngit clone https://github.com/NaruseMioShirakana/MoeVoiceStudio.git\r\n//自行配置OnnxRuntime和FFMPEG的Dll\r\n//使用VisualStudio构建\r\n```\r\n\r\n## 依赖列表\r\n- [FFmpeg](https://ffmpeg.org/)\r\n- [World](https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder)\r\n- [rapidJson](https://github.com/Tencent/rapidjson)\r\n- [mecab](https://github.com/taku910/mecab)\r\n- [yyjson](https://github.com/ibireme/yyjson)\r\n- [onnxruntime](https://github.com/microsoft/onnxruntime)\r\n- [faiss](https://github.com/facebookresearch/faiss)\r\n- [中文词典](https://www.zdic.net/)\r\n\r\n## 📚 相关法规\r\n\r\n#### 使用该项目的任何组织或个人都应当遵守包括但不限于以下的法律。\r\n\r\n#### 《民法典》\r\n\r\n##### 第一千零一十九条 \r\n\r\n任何组织或者个人不得以丑化、污损，或者利用信息技术手段伪造等方式侵害他人的肖像权。未经肖像权人同意，不得制作、使用、公开肖像权人的肖像，但是法律另有规定的除外。\r\n未经肖像权人同意，肖像作品权利人不得以发表、复制、发行、出租、展览等方式使用或者公开肖像权人的肖像。\r\n对自然人声音的保护，参照适用肖像权保护的有关规定。\r\n\r\n#####  第一千零二十四条 \r\n\r\n【名誉权】民事主体享有名誉权。任何组织或者个人不得以侮辱、诽谤等方式侵害他人的名誉权。  \r\n\r\n#####  第一千零二十七条\r\n\r\n【作品侵害名誉权】行为人发表的文学、艺术作品以真人真事或者特定人为描述对象，含有侮辱、诽谤内容，侵害他人名誉权的，受害人有权依法请求该行为人承担民事责任。\r\n行为人发表的文学、艺术作品不以特定人为描述对象，仅其中的情节与该特定人的情况相似的，不承担民事责任。  \r\n\r\n#### 《[中华人民共和国宪法](http://www.gov.cn/guoqing/2018-03/22/content_5276318.htm)》\r\n\r\n#### 《[中华人民共和国刑法](http://gongbao.court.gov.cn/Details/f8e30d0689b23f57bfc782d21035c3.html?sw=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%88%91%E6%B3%95)》\r\n\r\n#### 《[中华人民共和国民法典](http://gongbao.court.gov.cn/Details/51eb6750b8361f79be8f90d09bc202.html)》\r\n\r\n#\r\n\r\nMoeSS使用的图像素材来源于：\r\n- [SummerPockets](http://key.visualarts.gr.jp/summer/)\r\n\r\n## 💪 感谢所有贡献者的努力\r\n<a href=\"https://github.com/NaruseMioShirakana/MoeSS/graphs/contributors\" target=\"_blank\">\r\n  <img src=\"https://contrib.rocks/image?repo=NaruseMioShirakana/MoeSS\" />\r\n</a>\r\n\r\n"
  },
  {
    "path": "README_en.md",
    "content": "## Note: TTS & SVS Support：[MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudio) [MoeVoiceStudioCore](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore).\r\n\r\n# MoeVoiceStudio\r\n| [Chinese](README.md) | [English](README_en.md)\r\n\r\nThis project is a voice assistant software focused on the Otaku subculture and targeted at anime fans.\r\n\r\n<details><summary><b>Supported Frameworks:</b></summary>\r\n    \r\n- [DeepLearningExamples](https://github.com/NVIDIA/DeepLearningExamples)\r\n- [VITS](https://github.com/jaywalnut310/vits)\r\n- [SoVits](https://github.com/svc-develop-team/so-vits-svc)\r\n- [DiffSvc](https://github.com/prophesier/diff-SVC)\r\n- [DiffSinger](https://github.com/openvpi/DiffSinger)\r\n- [RVC](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)\r\n- [FishDiffusion](https://github.com/fishaudio/fish-diffusion)\r\n    \r\n</details>\r\n\r\n## Contents\r\n- [User Agreement](#user-agreement)\r\n  - [Disclaimer](#disclaimer) \r\n- [Description](#description)\r\n  - [Branches](#branches)\r\n- [FAQ](#faq)\r\n  - Q: [What is the purpose of this project?](#q-what-is-the-purpose-of-this-project)\r\n  - Q: [Will this project charge fees in the future?](#q-will-this-project-be-charged-in-the-future)\r\n  - Q: [Do you provide paid model training?](#q-do-you-provide-paid-model-training)\r\n  - Q: [What are the criteria for digital garbage?](#q-what-are-the-criteria-for-digital-garbage)\r\n  - Q: [Technical support?](#q-technical-support)\r\n- [Notes](#notes)\r\n- [Usage](#usage)\r\n- [Model Configuration](#model-configuration)\r\n  - [Pre-models](#pre-models) \r\n  - [Configuration File](#configuration-file)\r\n- [Supported Projects](#supported-projects)\r\n- [Other Settings](#other-settings)\r\n  - [Symbol](#symbol)\r\n  - [Cleaner](#cleaner)\r\n- [Build](#build)\r\n- [List of dependencies](#list-of-dependencies)\r\n- [Relevant Regulations](#relevant-regulations)\r\n\r\n## User Agreement:\r\n### To use this project, you must agree to the following terms. If you do not agree, you are prohibited from using this project:\r\n1. You must bear all the consequences caused by using this project.\r\n2. It is forbidden to sell this program.\r\n3. When using this project, you must conscientiously abide by local laws and regulations, and it is forbidden to use this project for illegal activities.\r\n4. It is forbidden to use for any commercial games, low-creation games[^1], and Galgame production, but non-commercial high-quality game and Mod production are acceptable.\r\n5. It is forbidden to use this project and its derivatives, and the release of models, etc., to produce various electronic wastes[^2] (such as AIGalgame, AI game production, etc.).\r\n6. All political-related content is prohibited.\r\n7. All content generated by using this project has nothing to do with the developers of this project.\r\n\r\n\r\n[^1]: The criteria for low creativity are: any content generated in large amounts by AI, with low original content, unclear meaning, low quality of content, etc.\r\n\r\n[^2]: Criteria for digital garbage are: Originality. The proportion of your own work in the entire project (for AI, creations using models trained completely independently by you belong to you; creations using others' models belong to others). Aspects covered include but are not limited to programming, art, audio, planning, etc. For example, reskinning using templates from engines like Unity is considered digital garbage.\r\n\r\n## Disclaimer\r\nThis project is an **open-source, offline project. All developers and maintainers (hereinafter referred to as contributors) of this project have no control over it**. The contributors to this project have never provided any form of help to any organization or individual, including but not limited to data set extraction, data set processing, computational power support, training support, inference, etc. The contributors of this project are unaware and cannot be aware of the purpose of the user's use of the project. Therefore, all audio synthesized based on this project is unrelated to the contributors of this project. **Any problems arising from this will be borne by the users themselves**.\r\n\r\nThis project itself does not have any speech synthesis capabilities, all functions need to be trained by the user themselves and convert into Onnx models, and the training of the model and Converted Onnx models are unrelated to the contributors of this project, all are the actions of the user themselves, and the contributors of this project have not participated in any user's model training and production.\r\n\r\nThis project runs completely offline, it cannot collect any user information, nor can it get user input data, so the contributors of this project are unaware of all user input and the model, and therefore are not responsible for any user input.\r\n\r\n**This project does not come with any models, any models attached to any secondary release and models used for this project are unrelated to the developers of this project.**\r\n\r\n## Description\r\nThis project currently fully supports calling its own methods to achieve command-line inference or other software, and everyone is welcome to contribute PRs to this project.\r\n\r\nThe author's other projects: [AiToolKits](https://github.com/NaruseMioShirakana/ShirakanaNoAiToolKits)\r\n\r\nIf you want to participate in development, you can join QQ group: 263805400 or directly open Push Requests.\r\n\r\n**Models need to be converted into ONNX models, the program for converting ONNX has already been pulled to each project's source repository, PTH cannot be used directly!!!!!!!!!!!!!!!!!!!**\r\n\r\n## Branches\r\nThe branches of this project:\r\n- [MoeVoiceStudioCore(main branch)](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore) Project core\r\n- [MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudio) A simple GUI implementation of this project based on QT\r\n- [MoeSSV2](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/V2) Old version of MoeSS V2 version archive\r\n- [MoeSSV1](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/V1) Old version of MoeSS V1 version archive\r\n\r\n## FAQ\r\n### Q: What is the purpose of this project?\r\n<details><summary>A: </b></summary>\r\n\r\n> The original intention of this project's development is mainly to implement various speech synthesis projects without the need for environment deployment, and now it is planned to be made into an auxiliary editor of SVC. Because this project is after all a \"personal\" \"non-professional\" project, so if you have more professional software, or you are a Python Cli lover, or you are a big shot in the relevant field. I know that this software is not professional enough and is very likely to be unable to meet your needs or even useless to you. This project is not an irreplaceable project, on the contrary, you can use various tools to replace the functions of this project, I have no extravagant hopes that this project will become a leading project in the relevant field, I am just continuing the development of this project with enthusiasm. But passion always has a day to dissipate, but the project promises to keep maintenance as long as my development passion has not completely dissipated (regardless of whether there are any users, even if the number of users is 0).\r\n> \r\n> There may be various problems in the design of this project, so we also need everyone to actively point out to help me improve the functionality. Most optimizations for functionality and experience I will accept.\r\n> \r\n> Finally, let me say one more thing about my view of this project: MoeSS and MoeVS are relying on the defense.\r\n\r\n</details>\r\n\r\n### Q: Will this project be charged in the future?\r\n<details><summary>A: </b></summary>\r\n\r\n> This project will remain open-source and free forever, if there are paid versions of this project elsewhere, please report immediately and do not purchase, this project is always free. If you want to donate the developer, you can go to Shirakana's Afdian site: https://afdian.net/a/NaruseMioShirakana .\r\n\r\n</details>\r\n\r\n### Q: Do you provide paid model training?\r\n<details><summary>A: </b></summary>\r\n\r\n> No, training models is relatively simple, there is no need to waste money, just follow the online tutorials step by step. \r\n\r\n</details>\r\n\r\n### Q: What are the criteria for digital garbage?\r\n<details><summary>A: </b></summary>\r\n\r\n> Originality. Your own work's proportion in the entire project (for AI, creations using completely independently trained models by you belong to you; creations using models from others belong to others). This includes but is not limited to programming, art, audio, planning, etc. For example, reskinning using templates from engines like Unity is considered digital garbage.\r\nDeveloper's attitude. Whether the author's development attitude is to gain traffic and money and leave, or purely vanity. For example, using a lot of tags like \"domestic\", \"first\", \"strongest\", \"homemade\" for traffic attraction, but the result is very bad or mediocre work, and the author obviously does not have a good idea to make the project, this is considered digital garbage.\r\nWe oppose all commercial use of AI models trained using unauthorized datasets.\r\n\r\n</details>\r\n\r\n### Q: Technical support?\r\n<details><summary>A: </b></summary>\r\n\r\n> If I can confirm that what you're doing is not digital garbage, is legal and compliant, and does not have serious political errors, I will provide some technical support within my capacity.\r\n\r\n</details>\r\n\r\n## Notes\r\n### Due to issues raised by OnnxRuntime\r\nFor using GPU (CUDA) version, please install CUDA driver version between 11.0 and 12.0, and CUDNN dynamic library version below 83.0, following the tutorials available online.\r\n\r\nWhy such requirements? That would be a question for NVIDIA, the company behind CUDA, CUDNN, and the OnnxRuntime officials. Both issues are caused by certain features of CUDA driver and problems with OnnxRuntime.\r\n\r\nWhat's the reason for the previous versions not supporting Chinese paths? Actually, it's just a manifestation of the above issue. The project itself supports Chinese paths, but its underlying OnnxRuntime doesn't, because the Windows version of OnnxRuntime uses the A series functions of Win32Api, and the A series functions do not support paths with non-ANSI encoding. This issue is not something I can solve, nor should I. Only when the OnnxRuntime officials fix this bug can it be resolved. Fortunately, the latest OnnxRuntime uses W series functions, solving this problem with Chinese paths.\r\n\r\nErrors popping up when loading the model are caused by the above issues (mainly due to not installing CUDA and CUDNN or not installing them as required). If these issues are triggered, you can go to the Onnx official repository's Issue page at https://github.com/microsoft/onnxruntime to find solutions.\r\n\r\nIt's recommended to use the CPU version, as its inference speed is quite impressive and it doesn't have other problems.\r\n\r\n## Usage\r\nMoeVoiceStudioCore is provided as a library, to be called with C++.\r\n\r\nRefer to the following corresponding classes as needed:\r\n```cpp\r\n#include <Modules/Models/header/Tacotron.hpp>\r\n#include <Modules/Models/header/Vits.hpp>\r\n#include <Modules/Models/header/VitsSvc.hpp>\r\n#include <Modules/Models/header/DiffSvc.hpp>\r\n#include <Modules/Models/header/DiffSinger.hpp>\r\n\r\nInferClass::Tacotron2;\r\nInferClass::Vits;\r\nInferClass::VitsSvc;\r\nInferClass::DiffusionSvc;\r\nInferClass::DiffusionSinger;\r\n\r\n/*\r\nThe first parameter of the constructor is the JSON configuration file,\r\nthe second one is a callback for the progress bar,\r\nthe third one is a callback for parameters (if for TTS, this can be left empty),\r\nand the fourth one is the device.\r\nYou can call the Inference function to use it.\r\n*/\r\n```\r\nFor model configuration, please refer to [#Model Configuration](#Model Configuration)\r\n\r\nDemo: [RVC command-line example](https://github.com/NaruseMioShirakana/MoeVoiceStudio/tree/MoeVoiceStudioCore/CMD-RVC-Onnx-Inference)\r\n\r\n## Model Configuration\r\n### Pre-models\r\n#### Not related to the few projects we support, they are universal models in the deep learning domain\r\nStopped updating (due to download and upload speeds): [Vocoder & HiddenUnitBert](https://github.com/NaruseMioShirakana/RequireMent-Model-For-MoeSS) \r\n\r\nLatest repository: [HuggingFace](https://huggingface.co/NaruseMioShirakana/MoeSS-SUBModel) \r\n\r\nExport frontend yourself:\r\n- HuBert: `input_names` should be `[\"source\"]`, `output_names` should be `[\"embed\"]`, `dynamic_axes` should be `{\"\r\nsource\":[0,2],}`\r\n- Hifigan used by the Diffusion model: `input_names` should be `[\"c\",\"f0\"]`, `output_names` should be `[\"audio\"]`, `dynamic_axes` should be `{\"c\":[0,1],\"f0\":[0,1],}`\r\n- Hifigan used by Tacotron2: `input_names` should be `[\"x\"]`, `output_names` should be `[\"audio\"]`, `dynamic_axes` should be `{\"x\":[0,1],}`\r\n\r\n## Configuration File\r\n- This project has standardized the model loading module, the models are saved in subfolders under the Mods folder. `xxx.json` is the configuration file for the model, which needs to be written manually according to the template, and the model needs to be converted to Onnx manually.\r\n\r\n#### Universal Parameters (These are mandatory for any model. If not filled, it won't be recognized):\r\n- `Folder`: The folder name where the model is stored\r\n- `Name`: The display name of the model in UI\r\n- `Type`: The category of the model\r\n- `Rate`: Sample rate (it must be exactly the same as when you trained, if you don't understand why, you are recommended to learn about computer audio related knowledge)\r\n\r\n### Examples\r\nNotice: `Diff-SVC` model and `Diffusion-SVC` model are basically **NOT** the same model, and the same applies to the `Fish-Diffusion` model, though all of them are based on the Diffusion algorithm.\r\n\r\n<details><summary>Tacotron2:</summary>\r\n\r\n```jsonc\r\n{\r\n    \"Folder\" : \"Atri\",\r\n    \"Name\" : \"ATRI-Tacotron2\",\r\n    \"Type\" : \"Tacotron2\",\r\n    \"Rate\" : 22050,\r\n    \"Symbol\" : \"_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\r\n    \"Cleaner\" : \"\",\r\n    \"AddBlank\": false,\r\n    \"Hifigan\": \"hifigan\"\r\n}\r\n//Symbol:Symbol of the model,If you don't know what it is, you are advised to check the TTS information on the internet.This field must be filled in the Tacotron2 model's configuration file.\r\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\r\n//Hifigan:Hifigan model name, required and must be placed in the \"hifigan\" folder for hifigan model downloaded from the Pre-model repository\r\n//AddBlank:Whether to insert a 0 as a separator between phonemes\r\n```\r\n</details>\r\n<details><summary>Vits:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"SummerPockets\",\r\n    \"Name\" : \"SummerPocketsReflectionBlue\",\r\n    \"Type\" : \"Vits\",\r\n    \"Rate\" : 22050,\r\n    \"Symbol\" : \"_,.!?-~…AEINOQUabdefghijkmnoprstuvwyzʃʧʦ↓↑ \",\r\n    \"Cleaner\" : \"\",\r\n    \"AddBlank\": true,\r\n    \"Emotional\" : true,\r\n    \"EmotionalPath\" : \"all_emotions\",\r\n    \"Characters\" : [\"鳴瀬しろは\",\"空門蒼\",\"鷹原うみ\",\"紬ヴェンダース\",\"神山識\",\"水織静久\",\"野村美希\",\"久島鴎\",\"岬鏡子\"]\r\n}\r\n//Symbol:Symbol of the model,If you don't know what it is, you are advised to check the TTS information on the internet.This field must be filled in the VITS model's configuration file.\r\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\r\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\r\n//AddBlank:Whether to insert a 0 as a separator between phonemes（For most VITS models, you must set this to \"true\"..）\r\n//Emotional:whether to add a emotional vector\r\n//EmotionalPath:emotional vector file(.npy) path\r\n```\r\n</details>\r\n<details><summary>Pits:</summary>\r\n\r\n```jsonc\r\n{\r\n    \"Folder\" : \"SummerPockets\",\r\n    \"Name\" : \"SummerPocketsReflectionBlue\",\r\n    \"Type\" : \"Pits\",\r\n    \"Rate\" : 22050,\r\n    \"Symbol\" : \"_,.!?-~…AEINOQUabdefghijkmnoprstuvwyzʃʧʦ↓↑ \",\r\n    \"Cleaner\" : \"\",\r\n    \"AddBlank\": true,\r\n    \"Emotional\" : true,\r\n    \"EmotionalPath\" : \"all_emotions\",\r\n    \"Characters\" : [\"鳴瀬しろは\",\"空門蒼\",\"鷹原うみ\",\"紬ヴェンダース\",\"神山識\",\"水織静久\",\"野村美希\",\"久島鴎\",\"岬鏡子\"]\r\n}\r\n//Symbol:Symbol of the model,If you don't know what it is, you are advised to check the TTS information on the internet.This field must be filled in the VITS model's configuration file.\r\n//Cleaner:The name of the plugin, can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\r\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\r\n//AddBlank:Whether to insert a 0 as a separator between phonemes（For most VITS models, you must set this to \"true\"..）\r\n//Emotional:whether to add a emotional vector\r\n//EmotionalPath:emotional vector file(.npy) path\r\n```\r\n    \r\n</details>\r\n<details><summary>RVC:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"NyaruTaffy\",\r\n    \"Name\" : \"NyaruTaffy\",\r\n    \"Type\" : \"RVC\",\r\n    \"Rate\" : 40000,\r\n    \"Hop\" : 320,\r\n    \"Cleaner\" : \"\",\r\n    \"Hubert\": \"hubert4.0\",\r\n    \"Diffusion\": false,\r\n    \"CharaMix\": true,\r\n    \"Volume\": false,\r\n    \"HiddenSize\": 256,\r\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\r\n}\r\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\r\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\r\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert model downloaded from the Pre-model repository\r\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\r\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\r\n//CharaMix:whether or not to use the character mixing track\r\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\r\n//HiddenSize:Size of the Vec model(256/768)\r\n```\r\n</details>\r\n<details><summary>SoVits_3.0_32k:</summary>\r\n\r\n```jsonc\r\n{\r\n    \"Folder\" : \"NyaruTaffySo\",\r\n    \"Name\" : \"NyaruTaffy-SoVits\",\r\n    \"Type\" : \"SoVits\",\r\n    \"Rate\" : 32000,\r\n    \"Hop\" : 320,\r\n    \"Cleaner\" : \"\",\r\n    \"Hubert\": \"hubert\",\r\n    \"SoVits3\": true,\r\n    \"Diffusion\": false,\r\n    \"CharaMix\": true,\r\n    \"Volume\": false,\r\n    \"HiddenSize\": 256,\r\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\r\n}\r\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\r\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\r\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert model downloaded from the Pre-model repository\r\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\r\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\r\n//CharaMix:whether or not to use the character mixing track\r\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\r\n//HiddenSize:Size of the Vec model(256/768)\r\n```\r\n    \r\n</details>\r\n<details><summary>SoVits_3.0_48k:</summary>\r\n\r\n```jsonc\r\n{\r\n    \"Folder\" : \"NyaruTaffySo\",\r\n    \"Name\" : \"NyaruTaffy-SoVits\",\r\n    \"Type\" : \"SoVits\",\r\n    \"Rate\" : 48000,\r\n    \"Hop\" : 320,\r\n    \"Cleaner\" : \"\",\r\n    \"Hubert\": \"hubert\",\r\n    \"SoVits3\": true,\r\n    \"Diffusion\": false,\r\n    \"CharaMix\": true,\r\n    \"Volume\": false,\r\n    \"HiddenSize\": 256,\r\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\r\n}\r\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\r\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\r\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert model downloaded from the Pre-model repository\r\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\r\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\r\n//CharaMix:whether or not to use the character mixing track\r\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\r\n//HiddenSize:Size of the Vec model(256/768)\r\n```\r\n    \r\n</details>\r\n<details><summary>SoVits_4.0:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"NyaruTaffySo\",\r\n    \"Name\" : \"NyaruTaffy-SoVits\",\r\n    \"Type\" : \"SoVits\",\r\n    \"Rate\" : 44100,\r\n    \"Hop\" : 512,\r\n    \"Cleaner\" : \"\",\r\n    \"Hubert\": \"hubert4.0\",\r\n    \"SoVits4\": true,\r\n    \"Diffusion\": false,\r\n    \"CharaMix\": true,\r\n    \"Volume\": false,\r\n    \"HiddenSize\": 256,\r\n    \"Characters\" : [\"Taffy\",\"Nyaru\"]\r\n}\r\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\r\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\r\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert model downloaded from the Pre-model repository\r\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\r\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\r\n//CharaMix:whether or not to use the character mixing track\r\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\r\n//HiddenSize:Size of the Vec model(256/768)\r\n```\r\n    \r\n</details>\r\n<details><summary>DiffSVC:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"DiffShiroha\",\r\n    \"Name\" : \"白羽\",\r\n    \"Type\" : \"DiffSvc\",\r\n    \"Rate\" : 44100,\r\n    \"Hop\" : 512,\r\n    \"MelBins\" : 128,\r\n    \"Cleaner\" : \"\",\r\n    \"Hifigan\": \"nsf_hifigan\",\r\n    \"Hubert\": \"hubert\",\r\n    \"Characters\" : [],\r\n    \"Pndm\" : 100,\r\n    \"Diffusion\": false,\r\n    \"CharaMix\": true,\r\n    \"Volume\": false,\r\n    \"HiddenSize\": 256,\r\n    \"V2\" : true\r\n}\r\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the SoVits model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\r\n//Melbins:Melbins of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the Diffsvc model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\r\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\r\n//Hubert:Hubert model name, required and must be placed in the \"Hubert\" folder for Hubert models downloaded from the Pre-model repository\r\n//Hifigan:Hifigan model name, required and must be placed in the \"hifigan\" folder for nsf-hifigan model downloaded from the Pre-model repository\r\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\r\n//Pndm:Acceleration multiplier, required in the case of V1 models and must be the acceleration multiplier set at the time of export\r\n//V2:If your diffsvc model is a V2 model(Fish-Diffusion model), set this to \"true\".\r\n//Diffusion:if this diffusion model is trained by DDSP-SVC (Diffusion-SVC) , set this to \"true\".\r\n//CharaMix:whether or not to use the character mixing track\r\n//Volume:whether the model have volume Embedding, if it has, set this to \"true\".\r\n//HiddenSize:Size of the Vec model(256/768)\r\n```\r\n    \r\n</details>\r\n<details><summary>DiffSinger:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\" : \"utagoe\",\r\n    \"Name\" : \"utagoe\",\r\n    \"Type\" : \"DiffSinger\",\r\n    \"Rate\" : 44100,\r\n    \"Hop\" : 512,\r\n    \"Cleaner\" : \"\",\r\n    \"Hifigan\": \"singer_nsf_hifigan\",\r\n    \"Characters\" : [],\r\n    \"MelBins\" : 128\r\n}\r\n```jsonc\r\n{\r\n    \"Folder\" : \"utagoe\",\r\n    \"Name\" : \"utagoe\",\r\n    \"Type\" : \"DiffSinger\",\r\n    \"Rate\" : 44100,\r\n    \"Hop\" : 512,\r\n    \"Cleaner\" : \"\",\r\n    \"Hifigan\": \"singer_nsf_hifigan\",\r\n    \"Characters\" : [],\r\n    \"MelBins\" : 128\r\n}\r\n//Hop:HopLength of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the Diffsinger model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\r\n//Melbins:Melbins of the model, if you don't know what it is you are advised to look up the information on the internet. This must be filled in the configuration file of the Diffsvc model.（The value must be the one you set during training and can be seen in the configuration file you used to train the model）\r\n//Cleaner:The name of the plugin,can be left blank, but if it is filled in, the corresponding CleanerDll must be placed in the Cleaner folder, if the Dll does not exist or if there is an internal error in the Dll, it will report an error when loading the model\r\n//Hifigan:Hifigan model name, required and must be placed in the \"hifigan\" folder for nsf-hifigan model downloaded from the Pre-model repository\r\n//Characters:For multi-speaker model this must be filled in as a list of your speakers' names, for single-speaker model it can be left out\r\n```\r\n    \r\n</details>\r\n\r\n<details><summary>BertVits:</summary>\r\n    \r\n```jsonc\r\n{\r\n    \"Folder\": \"HimenoSena\",\r\n    \"Name\": \"HimenoSena\",\r\n    \"Type\": \"BertVits\",\r\n    \"Symbol\": [\r\n        \"_\",\r\n        \"AA\",\r\n        \"E\",\r\n        \"EE\",\r\n        \"En\",\r\n        \"N\",\r\n        \"OO\",\r\n        \"V\",\r\n        \"a\",\r\n        \"a:\",\r\n        \"aa\",\r\n        \"ae\",\r\n        \"ah\",\r\n        \"ai\",\r\n        \"an\",\r\n        \"ang\",\r\n        \"ao\",\r\n        \"aw\",\r\n        \"ay\",\r\n        \"b\",\r\n        \"by\",\r\n        \"c\",\r\n        \"ch\",\r\n        \"d\",\r\n        \"dh\",\r\n        \"dy\",\r\n        \"e\",\r\n        \"e:\",\r\n        \"eh\",\r\n        \"ei\",\r\n        \"en\",\r\n        \"eng\",\r\n        \"er\",\r\n        \"ey\",\r\n        \"f\",\r\n        \"g\",\r\n        \"gy\",\r\n        \"h\",\r\n        \"hh\",\r\n        \"hy\",\r\n        \"i\",\r\n        \"i0\",\r\n        \"i:\",\r\n        \"ia\",\r\n        \"ian\",\r\n        \"iang\",\r\n        \"iao\",\r\n        \"ie\",\r\n        \"ih\",\r\n        \"in\",\r\n        \"ing\",\r\n        \"iong\",\r\n        \"ir\",\r\n        \"iu\",\r\n        \"iy\",\r\n        \"j\",\r\n        \"jh\",\r\n        \"k\",\r\n        \"ky\",\r\n        \"l\",\r\n        \"m\",\r\n        \"my\",\r\n        \"n\",\r\n        \"ng\",\r\n        \"ny\",\r\n        \"o\",\r\n        \"o:\",\r\n        \"ong\",\r\n        \"ou\",\r\n        \"ow\",\r\n        \"oy\",\r\n        \"p\",\r\n        \"py\",\r\n        \"q\",\r\n        \"r\",\r\n        \"ry\",\r\n        \"s\",\r\n        \"sh\",\r\n        \"t\",\r\n        \"th\",\r\n        \"ts\",\r\n        \"ty\",\r\n        \"u\",\r\n        \"u:\",\r\n        \"ua\",\r\n        \"uai\",\r\n        \"uan\",\r\n        \"uang\",\r\n        \"uh\",\r\n        \"ui\",\r\n        \"un\",\r\n        \"uo\",\r\n        \"uw\",\r\n        \"v\",\r\n        \"van\",\r\n        \"ve\",\r\n        \"vn\",\r\n        \"w\",\r\n        \"x\",\r\n        \"y\",\r\n        \"z\",\r\n        \"zh\",\r\n        \"zy\",\r\n        \"!\",\r\n        \"?\",\r\n        \"\\u2026\",\r\n        \",\",\r\n        \".\",\r\n        \"'\",\r\n        \"-\",\r\n        \"SP\",\r\n        \"UNK\"\r\n    ],\r\n    \"Cleaner\": \"\",\r\n    \"Rate\": 44100,\r\n    \"CharaMix\": true,\r\n    \"Characters\": [\r\n        \"\\u56fd\\u89c1\\u83dc\\u5b50\",\r\n        \"\\u59ec\\u91ce\\u661f\\u594f\",\r\n        \"\\u65b0\\u5802\\u5f69\\u97f3\",\r\n        \"\\u56db\\u6761\\u51db\\u9999\",\r\n        \"\\u5c0f\\u97a0\\u7531\\u4f9d\"\r\n    ],\r\n    \"LanguageMap\": {\r\n        \"ZH\": [\r\n            0,\r\n            0\r\n        ],\r\n        \"JP\": [\r\n            1,\r\n            6\r\n        ],\r\n        \"EN\": [\r\n            2,\r\n            8\r\n        ]\r\n    },\r\n    \"Dict\": \"BasicDict\",\r\n    \"BertPath\": [\r\n        \"chinese-roberta-wwm-ext-large\",\r\n        \"deberta-v2-large-japanese\",\r\n        \"bert-base-japanese-v3\"\r\n    ]\r\n}\r\n```\r\n    \r\n</details>\r\n\r\n## Supported Projects\r\n\r\n```cxx \r\n// $Below are the model files needed for several different projects (they need to be placed in the corresponding model folders).\r\n// Tacotron2:\r\n    ${Folder}_decoder_iter.onnx\r\n    ${Folder}_encoder.onnx\r\n    ${Folder}_postnet.onnx\r\n// Vits:    Single-speaker VITS\r\n    ${Folder}_dec.onnx\r\n    ${Folder}_flow.onnx\r\n    ${Folder}_enc_p.onnx\r\n    ${Folder}_dp.onnx \r\n// Vits:   multi-speaker VITS\r\n    ${Folder}_dec.onnx\r\n    ${Folder}_emb.onnx\r\n    ${Folder}_flow.onnx\r\n    ${Folder}_enc_p.onnx\r\n    ${Folder}_dp.onnx\r\n// SoVits:\r\n    ${Folder}_SoVits.onnx\r\n// DiffSvc:\r\n    ${Folder}_diffSvc.onnx\r\n// DiffSvc: V2\r\n    ${Folder}_encoder.onnx\r\n    ${Folder}_denoise.onnx\r\n    ${Folder}_pred.onnx\r\n    ${Folder}_after.onnx\r\n// DiffSinger: OpenVpiVersion\r\n    ${Folder}_diffSinger.onnx\r\n// DiffSinger: \r\n    ${Folder}_encoder.onnx\r\n    ${Folder}_denoise.onnx\r\n    ${Folder}_pred.onnx\r\n    ${Folder}_after.onnx\r\n```\r\n## Other Settings\r\n### Symbol settings\r\n    For example：_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\r\n    Open the project you are using to train the model, open text\\symbol.py and join the 4 strings above in the order of the underlined list as shown\r\n![image](https://user-images.githubusercontent.com/40709280/183290732-dcb93323-1061-431b-aafa-c285a3ec5e82.png)\r\n\r\n### Cleaner settings\r\n```cxx\r\n/*\r\nThe Cleaner should be placed in the Cleaners folder in the root directory and should be a dynamic library (.dll) defined as required. The dll should be named Cleaner and the Cleaner name is what is entered in the \"Cleaner\" of the model configuration file.\r\nThe following functions need to be defined for all plug-in dlls, the function name must be PluginMain and the Dll name must be the plug-in name (or Cleaner name).\r\n*/\r\nconst wchar_t* PluginMain(const wchar_t*);\r\n// The interface only requires consistent input and output, not consistent functionality, which means that you can implement any functionality you want in the Dll, such as ChatGpt, translation, etc.\r\n// Using ChatGpt as an example, the PluginMain function passes in an input string input, passes that input into ChatGpt, passes ChatGpt's output into PluginMain, and finally returns the output.\r\nwchar_t* PluginMain(wchar_t* input){\r\n    wchar_t* tmpOutput = ChatGpt(input);\r\n    return Clean(tmpOutput);\r\n}\r\n// Note: Please use the extern \"C\" keyword when exporting the dll to prevent destructive naming in C++.\r\n```\r\n\r\n## Build\r\n```cxx\r\ngit clone https://github.com/NaruseMioShirakana/MoeVoiceStudio.git\r\n//Place OnnxRuntime.dll and FFMPEG's Dll in the correct folder \r\n//Build With VisualStudio\r\n```\r\n\r\n## List of dependencies\r\n- [FFmpeg](https://ffmpeg.org/)\r\n- [World](https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder)\r\n- [rapidJson](https://github.com/Tencent/rapidjson)\r\n\r\n## 📚 相关法规\r\n\r\n#### Any country, region, organization, or individual using this project must comply with the following laws.\r\n\r\n#### 《民法典》\r\n\r\n##### 第一千零一十九条 \r\n\r\n任何组织或者个人不得以丑化、污损，或者利用信息技术手段伪造等方式侵害他人的肖像权。未经肖像权人同意，不得制作、使用、公开肖像权人的肖像，但是法律另有规定的除外。\r\n未经肖像权人同意，肖像作品权利人不得以发表、复制、发行、出租、展览等方式使用或者公开肖像权人的肖像。\r\n对自然人声音的保护，参照适用肖像权保护的有关规定。\r\n\r\n#####  第一千零二十四条 \r\n\r\n【名誉权】民事主体享有名誉权。任何组织或者个人不得以侮辱、诽谤等方式侵害他人的名誉权。  \r\n\r\n#####  第一千零二十七条\r\n\r\n【作品侵害名誉权】行为人发表的文学、艺术作品以真人真事或者特定人为描述对象，含有侮辱、诽谤内容，侵害他人名誉权的，受害人有权依法请求该行为人承担民事责任。\r\n行为人发表的文学、艺术作品不以特定人为描述对象，仅其中的情节与该特定人的情况相似的，不承担民事责任。  \r\n\r\n#### 《[中华人民共和国宪法](http://www.gov.cn/guoqing/2018-03/22/content_5276318.htm)》\r\n\r\n#### 《[中华人民共和国刑法](http://gongbao.court.gov.cn/Details/f8e30d0689b23f57bfc782d21035c3.html?sw=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%88%91%E6%B3%95)》\r\n\r\n#### 《[中华人民共和国民法典](http://gongbao.court.gov.cn/Details/51eb6750b8361f79be8f90d09bc202.html)》\r\n\r\n#\r\n\r\nThe image resource MoeVS used is derived from：\r\n- [SummerPockets](http://key.visualarts.gr.jp/summer/)\r\n\r\n## 💪 Thanks to all contributors for their efforts\r\n<a href=\"https://github.com/NaruseMioShirakana/MoeSS/graphs/contributors\" target=\"_blank\">\r\n  <img src=\"https://contrib.rocks/image?repo=NaruseMioShirakana/MoeSS\" />\r\n</a>\r\n"
  },
  {
    "path": "TTSProjectTemplate.ttsproj",
    "content": "[\n\t{\n\t\t\"Tokens\": \"私は誰？\",\n\t\t\"Seq\": [\"w\", \"a\", \"t\", \"a\", \"s\", \"h\", \"i\", \"w\", \"a\", \"d\", \"a\", \"r\", \"e\", \"?\"],\n\t\t\"Tones\": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n\t\t\"Durations\": [2, 5, 2, 5, 2, 2, 5, 2, 5, 2, 5, 2, 5],\n\t\t\"Language\": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n\t\t\"SpeakerMix\": [1.000000, 0.000000, 0.000000],\n\t\t\"EmotionPrompt\": [\"sad\", \"happy\"],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.100000,\n\t\t\"DurationPredictorNoiseScale\": 0.333000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 114514,\n\t\t\"Seed\": 1919810,\n\t\t\"SpeakerId\": 2,\n\t\t\"RestTime\": 1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は鳴瀬しろは\",\n\t\t\"Seq\": [],\n\t\t\"Tones\": [],\n\t\t\"Durations\": [],\n\t\t\"Language\": [],\n\t\t\"SpeakerMix\": [],\n\t\t\"EmotionPrompt\": [],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.000000,\n\t\t\"DurationPredictorNoiseScale\": 0.333000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 1145147,\n\t\t\"Seed\": 1919810,\n\t\t\"SpeakerId\": 0,\n\t\t\"RestTime\": 1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は誰？\",\n\t\t\"Seq\": [],\n\t\t\"Tones\": [],\n\t\t\"Durations\": [],\n\t\t\"Language\": [],\n\t\t\"SpeakerMix\": [0.666000, 0.233000, 0.444000],\n\t\t\"EmotionPrompt\": [\"sad\", \"happy\"],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.100000,\n\t\t\"DurationPredictorNoiseScale\": 0.333000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 1145145,\n\t\t\"Seed\": 19198101,\n\t\t\"SpeakerId\": 1,\n\t\t\"RestTime\": -1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は鷗です、くみの名前は？\",\n\t\t\"Seq\": [],\n\t\t\"Tones\": [],\n\t\t\"Durations\": [],\n\t\t\"Language\": [],\n\t\t\"SpeakerMix\": [],\n\t\t\"EmotionPrompt\": [],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.100000,\n\t\t\"DurationPredictorNoiseScale\": 0.222000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 114514,\n\t\t\"Seed\": 1919810,\n\t\t\"SpeakerId\": 3,\n\t\t\"RestTime\": 1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t}\n]"
  },
  {
    "path": "VitsInputTemplate.json",
    "content": "[\n    {\n        \"Tokens\": \"私は誰？\",\n        \"Seq\": [\"w\",\"a\",\"t\",\"a\",\"s\",\"h\",\"i\",\"w\",\"a\",\"d\",\"a\",\"r\",\"e\",\"?\"],\n        \"Tones\": [0,0,0,0,0,0,0,0,0,0,0,0,0],\n        \"Durations\": [2,5,2,5,2,2,5,2,5,2,5,2,5],\n        \"Language\": [0,0,0,0,0,0,0,0,0,0,0,0,0],\n        \"SpeakerMix\": [1,0,0],\n        \"EmotionPrompt\": [\"sad\", \"happy\"],\n        \"NoiseScale\": 0.666,\n        \"LengthScale\": 1.1,\n        \"DurationPredictorNoiseScale\": 0.333,\n        \"FactorDpSdp\": 0.6,\n        \"GateThreshold\": 0.777,\n        \"MaxDecodeStep\": 114514,\n        \"Seed\": 1919810,\n        \"SpeakerId\": 2,\n        \"RestTime\": 1.0,\n        \"PlaceHolderSymbol\": \"|\",\n        \"LanguageID\": \"JP\",\n        \"G2PAdditionalInfo\": \"/[Japanese2]\"\n    },\n    {\n        \"Tokens\": \"私は鳴瀬しろは\",\n        \"Seq\": \"[ph]w|a|t|a|s|h|i|h|a|n|a|r|u|s|e|s|h|i|r|o|h|a\",\n        \"Tones\": [],\n        \"Durations\": [],\n        \"Language\": [],\n        \"SpeakerMix\": [],\n        \"EmotionPrompt\": [],\n        \"NoiseScale\": 0.666,\n        \"LengthScale\": 1.0,\n        \"DurationPredictorNoiseScale\": 0.333,\n        \"FactorDpSdp\": 0.6,\n        \"GateThreshold\": 0.777,\n        \"MaxDecodeStep\": 1145147,\n        \"Seed\": 1919810,\n        \"SpeakerId\": 0,\n        \"RestTime\": 1.0,\n        \"PlaceHolderSymbol\": \"|\",\n        \"LanguageID\": \"JP\",\n        \"G2PAdditionalInfo\": \"/[Japanese2]\"\n    },\n    {\n        \"Tokens\": \"私は誰？\",\n        \"Seq\": [],\n        \"Tones\": [],\n        \"Durations\": [],\n        \"Language\": [],\n        \"SpeakerMix\": [0.666, 0.233, 0.444],\n        \"EmotionPrompt\": [\"sad\", \"happy\"],\n        \"NoiseScale\": 0.666,\n        \"LengthScale\": 1.1,\n        \"DurationPredictorNoiseScale\": 0.333,\n        \"FactorDpSdp\": 0.6,\n        \"GateThreshold\": 0.777,\n        \"MaxDecodeStep\": 1145145,\n        \"Seed\": 19198101,\n        \"SpeakerId\": 1,\n        \"RestTime\": -1.0,\n        \"PlaceHolderSymbol\": \"|\",\n        \"LanguageID\": \"JP\",\n        \"G2PAdditionalInfo\": \"/[Japanese2]\"\n    },\n    {\n        \"Tokens\": \"\",\n        \"Seq\": \"私は鷗です、くみの名前は？\",\n        \"Tones\": [],\n        \"Durations\": [],\n        \"Language\": [],\n        \"SpeakerMix\": [],\n        \"EmotionPrompt\": [],\n        \"NoiseScale\": 0.666,\n        \"LengthScale\": 1.1,\n        \"DurationPredictorNoiseScale\": 0.222,\n        \"FactorDpSdp\": 0.6,\n        \"GateThreshold\": 0.777,\n        \"MaxDecodeStep\": 114514,\n        \"Seed\": 1919810,\n        \"SpeakerId\": 3,\n        \"RestTime\": 1.0,\n        \"PlaceHolderSymbol\": \"|\",\n        \"LanguageID\": \"JP\",\n        \"G2PAdditionalInfo\": \"/[Japanese2]\"\n    }\n]"
  },
  {
    "path": "fish-speech.cpp/CMakeLists.txt",
    "content": "﻿cmake_minimum_required (VERSION 3.8)\n\nadd_compile_options(\"$<$<C_COMPILER_ID:MSVC>:/utf-8>\")\nadd_compile_options(\"$<$<CXX_COMPILER_ID:MSVC>:/utf-8>\")\noption(FISHSPEECHCPP_CUDA                    \"cuda backend\" OFF)\noption(FISHSPEECHCPP_ROCM                    \"rocm backend\" OFF)\noption(FISHSPEECHCPP_SHARED_LIBS             \"build shared libs\" OFF)\noption(FISHSPEECHCPP_BUILD_DEMO              \"build demo\" ON)\nadd_definitions(-DUNICODE)\n\nset(FishSpeechLib fish-speech-cpp)\nset(BUILD_SHARED_LIBS OFF)\nif(FISHSPEECHCPP_CUDA)\n    \nendif()\n\nif (FISHSPEECHCPP_ROCM)\n    \nendif ()\n\nproject (${FishSpeechLib})\nset(CMAKE_CXX_SCAN_FOR_MODULES ON)\nset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/archive/${CMAKE_BUILD_TYPE})\nset(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/library/${CMAKE_BUILD_TYPE})\nset(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/runtime/${CMAKE_BUILD_TYPE})\nset(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/out/lib/${CMAKE_BUILD_TYPE})\n\nif(${CMAKE_BUILD_TYPE} STREQUAL \"Release\")\nmessage(\"Build Release\")\nadd_compile_options(/GS- /arch:AVX2 /O2 /Ob2 /Ot)\nelseif(${CMAKE_BUILD_TYPE} STREQUAL \"RelWithDebInfo\")\nadd_compile_options(/Zi /Gy)\nelse()\nmessage(\"Build Debug\")\nadd_definitions(-DFISHSPEECH_DEBUG)\nadd_compile_options(/Zi /Gy)\nendif()\n\nif (POLICY CMP0141)\n  cmake_policy(SET CMP0141 NEW)\n  set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT \"$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>\")\nendif()\n\nfunction(FISHSPEECHAddFiles _out)\n    file(GLOB_RECURSE _tmp ${ARGN})\n    list(APPEND ${_out} ${_tmp})\n    set(${_out} ${${_out}} PARENT_SCOPE)\nendfunction()\n\nset(PROJECT_SOURCES)\nFISHSPEECHAddFiles(PROJECT_SOURCES\n    ${PROJECT_SOURCE_DIR}/include/*.hpp\n    ${PROJECT_SOURCE_DIR}/include/*.h\n    ${PROJECT_SOURCE_DIR}/src/*.cpp\n    ${PROJECT_SOURCE_DIR}/src/*.c\n)\nif(FISHSPEECHCPP_SHARED_LIBS)\n    add_library(\n        ${FishSpeechLib} \n        SHARED ${PROJECT_SOURCES}\n    )\n    add_definitions(-DFISHSPEECH_EXPORT)\n    target_compile_definitions(${FishSpeechLib} PRIVATE -DFISHSPEECH_DLL)\n    set(CMAKE_POSITION_INDEPENDENT_CODE ON)\nelse()\n    add_library(\n        ${FishSpeechLib}\n        STATIC ${PROJECT_SOURCES}\n    )\nendif()\nmessage(${PROJECT_SOURCES})\n\ninclude_directories(${PROJECT_SOURCE_DIR}/include)\n\nadd_subdirectory(ggml)\ntarget_link_libraries(${FishSpeechLib} PUBLIC ggml)\ninclude_directories(${PROJECT_SOURCE_DIR}/ggml/src)\n\nif (CMAKE_VERSION VERSION_GREATER 3.12)\n  set_property(TARGET ${FishSpeechLib} PROPERTY CXX_STANDARD 23)\nendif()\n\nif(FISHSPEECHCPP_BUILD_DEMO)\n    add_subdirectory(Demo)\nendif()"
  },
  {
    "path": "fish-speech.cpp/Demo/CMakeLists.txt",
    "content": "﻿include_directories(${CMAKE_CURRENT_SOURCE_DIR})\n\nset(EXE_DEMO Demo)\nadd_compile_options(/ZI)\nadd_executable(${EXE_DEMO} main.cpp)\ntarget_link_libraries(${EXE_DEMO} PRIVATE fish-speech-cpp)\n\nif (CMAKE_VERSION VERSION_GREATER 3.12)\n  set_property(TARGET ${EXE_DEMO} PROPERTY CXX_STANDARD 20)\nendif()"
  },
  {
    "path": "fish-speech.cpp/Demo/main.cpp",
    "content": "#include <iostream>\n#include <windows.h>\n#include \"llama.h\"\n\nusing namespace libtts;\n\nint main()\n{\n\tauto a = BaseTransformer(nullptr, L\"\", BaseModelArgs());\n\tstd::cout << UnicodeToByte(a.DumpLayerNameInfo());\n\tsystem(\"pause\");\n\treturn 0;\n}"
  },
  {
    "path": "fish-speech.cpp/include/Base.h",
    "content": "#pragma once\n#include <cstdint>\n#include <filesystem>\n#include <ggml-alloc.h>\n#include <unordered_map>\n#ifndef UNUSED\n#define UNUSED(x) (void)(x)\n#endif\n\n#define LibTTSBegin namespace libtts {\n#define LibTTSEnd }\n#define LIBTTSND [[nodiscard]]\n\n#define LibTTSThrowImpl(message, exception_type) do {\\\n\tconst std::string __LibTTS__Message__ = message;\\\n\tconst std::string __LibTTS__Message__Prefix__ =\\\n\tstd::string(\"[In File: \\\"\") + std::filesystem::path(__FILE__).filename().string() + \"\\\", \" +\\\n\t\"Function: \\\"\" + __FUNCSIG__ + \"\\\", \" +\\\n\t\"Line: \" + std::to_string(__LINE__) + \" ] \";\\\n\tif (__LibTTS__Message__.substr(0, __LibTTS__Message__Prefix__.length()) != __LibTTS__Message__Prefix__)\\\n\t\tthrow exception_type((__LibTTS__Message__Prefix__ + __LibTTS__Message__).c_str());\\\n\tthrow exception_type(__LibTTS__Message__.c_str());\\\n} while(false)\n\n#define LibTTSThrow(message) LibTTSThrowImpl(message, std::exception)\n\n#define LibTTSNotImplementedError LibTTSThrow(\"NotImplementedError!\")\n\n#define RegisterLayer(MemberName, ...) MemberName(this, L#MemberName, __VA_ARGS__)\n\n#define LayerItem(TypeName, ...) new TypeName(nullptr, L\"\", __VA_ARGS__)\n\n#define LogMessage(message) LibTTS::GetLogger().log(message)\n\n#define ErrorMessage(message) LibTTS::GetLogger().error(message)\n\nLibTTSBegin\n\nusing int8 = int8_t;\nusing int16 = int16_t;\nusing int32 = int32_t;\nusing int64 = int64_t;\nusing float32 = float;\nusing float64 = double;\nusing byte = unsigned char;\nusing lpvoid = void*;\nusing cpvoid = const void*;\nusing uint8 = uint8_t;\nusing uint16 = uint16_t;\nusing uint32 = uint32_t;\nusing uint64 = uint64_t;\nstruct NoneType {};\nstatic constexpr NoneType None;\nusing SizeType = int32;\nusing DictType = ggml_context*;\n\nstd::string UnicodeToByte(const std::wstring& input);\nstd::string UnicodeToAnsi(const std::wstring& input);\nstd::wstring ByteToUnicode(const std::string& input);\n\nclass FileGuard\n{\npublic:\n\tFileGuard() = default;\n\t~FileGuard();\n\tFileGuard(const FileGuard& _Left) = delete;\n\tFileGuard& operator=(const FileGuard& _Left) = delete;\n\tFileGuard(FileGuard&& _Right) noexcept;\n\tFileGuard& operator=(FileGuard&& _Right) noexcept;\n\tvoid Open(const std::wstring& _Path, const std::wstring& _Mode);\n\tvoid Close();\n\toperator FILE* () const;\n\tLIBTTSND bool Enabled() const;\nprivate:\n\tFILE* file_ = nullptr;\n};\n\nclass Value\n{\npublic:\n\tValue() = default;\n\tValue(const Value& _Left) = delete;\n\tvirtual ~Value();\n\nprotected:\n\tstd::wstring RegName_;\n\npublic:\n\tvirtual Value& load(const std::wstring& _Path, bool _Strict = false);\n\tvirtual Value& save(const std::wstring& _Path);\n\tvirtual void loadData(const DictType& _WeightDict, bool _Strict = false);\n\tvirtual void saveData(FileGuard& _File);\nprivate:\n\tggml_context* DictCtx = nullptr;\n\tgguf_context* DictGuf = nullptr;\n};\n\nclass Module : public Value\n{\npublic:\n\tModule(Module* _Parent, const std::wstring& _Name);\n\t~Module() override = default;\n\tvirtual ggml_tensor* operator()(ggml_tensor*, ggml_context*, bool _Inplace = false);\n\tstd::wstring& Name() { return RegName_; }\n\tstd::wstring DumpLayerNameInfo();\n\nprivate:\n\tvoid DumpLayerNameInfoImpl(std::wstring& _Tmp, int TabCount);\n\tvirtual void DumpCurrentLayerInfo(std::wstring& _Tmp);\n\nprotected:\n\tstd::unordered_map<std::wstring, Module*> Layers_;\n\npublic:\n\tvoid loadData(const DictType& _WeightDict, bool _Strict) override;\n\tvoid saveData(FileGuard& _File) override;\n\tvoid ReCalcLayerName(const std::wstring& _Parent);\n};\n\nclass Parameter : public Module\n{\npublic:\n\tusing Ty = float;\n\tParameter(Module* _Parent, const std::wstring& _Name, std::vector<SizeType> _Shape);\n\t~Parameter() override = default;\n\toperator ggml_tensor* () const;\n\tvoid ChangeShape(std::vector<SizeType> _Shape);\n\nprotected:\n\tggml_tensor* Weight_ = nullptr;\n\tstd::vector<SizeType> Shape_;\npublic:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tvoid loadData(const DictType& _WeightDict, bool _Strict) override;\n\tvoid saveData(FileGuard& _File) override;\n};\n\nclass Sequential : public Module\n{\npublic:\n\tSequential(Module* _Parent, const std::wstring& _Name);\n\t~Sequential() override;\n\tggml_tensor* operator()(ggml_tensor* _Input, ggml_context* _Ctx, bool _Inplace = false) override;\n\tvoid Append(Module* _Module);\n\tvirtual Sequential& operator=(const std::initializer_list<Module*>& _Input);\n\tModule** begin() { return _Items.data(); }\n\tModule** end() { return _Items.data() + _Items.size(); }\n\tModule* operator[](int64_t _Index) const { return *(_Items.data() + _Index); }\n\nprivate:\n\tstd::vector<Module*> _Items;\n};\n\nclass ModuleList : public Sequential\n{\npublic:\n\tModuleList(Module* _Parent, const std::wstring& _Name);\n\t~ModuleList() override;\n\tModuleList& operator=(const std::initializer_list<Module*>& _Input) override;\nprivate:\n\tggml_tensor* operator()(ggml_tensor* _Input, ggml_context* _Ctx, bool _Inplace) override;\n};\n\nLibTTSEnd\n"
  },
  {
    "path": "fish-speech.cpp/include/Module.h",
    "content": "#pragma once\n#include \"Base.h\"\n\nLibTTSBegin\n\nenum PaddingType\n{\n\tZeros,\n\tConstant,\n\tReflect,\n\tReplicate,\n\tCycle\n};\n\nclass Conv1D : public Module\n{\npublic:\n\tstruct ConvParam\n\t{\n\t\tSizeType InChannels;\n\t\tSizeType OutChannels;\n\t\tSizeType KernelSize;\n\t\tint Stride = 1;\n\t\tint Padding = 0;\n\t\tint Dilation = 1;\n\t\tint Groups = 1;\n\t\tbool Bias = true;\n\t\tPaddingType PaddingMode = Zeros;\n\t};\n\tConv1D(Module* _Parent, const std::wstring& _Name, const ConvParam& _Params);\n\tggml_tensor* operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace = false) override;\n\tvoid ChangeParam(const ConvParam& _Params);\nprivate:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tParameter weight;\n\tParameter bias;\n\tConvParam params;\n};\n\nclass Conv2D : public Module\n{\npublic:\n\tstruct ConvParam\n\t{\n\t\tSizeType InChannels;\n\t\tSizeType OutChannels;\n\t\tSizeType KernelSize[2];\n\t\tint Stride[2] = { 1, 1 };\n\t\tint Padding[2] = { 0, 0 };\n\t\tint Dilation[2] = { 1, 1 };\n\t\tint Groups = 1;\n\t\tbool Bias = true;\n\t\tPaddingType PaddingMode = Zeros;\n\t};\n\tConv2D(Module* _Parent, const std::wstring& _Name, const ConvParam& _Params);\n\tggml_tensor* operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace = false) override;\n\tvoid ChangeParam(const ConvParam& _Params);\nprivate:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tParameter weight;\n\tParameter bias;\n\tConvParam params;\n};\n\nclass ConvTranspose1D : public Module\n{\npublic:\n\tstruct ConvParam\n\t{\n\t\tSizeType InChannels;\n\t\tSizeType OutChannels;\n\t\tSizeType KernelSize;\n\t\tint Stride = 1;\n\t\tint Padding = 0;\n\t\tint OutPutPadding = 0;\n\t\tint Dilation = 1;\n\t\tint Groups = 1;\n\t\tbool Bias = true;\n\t\tPaddingType PaddingMode = Zeros;\n\t};\n\tConvTranspose1D(Module* _Parent, const std::wstring& _Name, const ConvParam& _Params);\n\tggml_tensor* operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace = false) override;\n\tvoid ChangeParam(const ConvParam& _Params);\nprivate:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tParameter weight;\n\tParameter bias;\n\tConvParam params;\n};\n\nclass ConvTranspose2D : public Module\n{\npublic:\n\tstruct ConvParam\n\t{\n\t\tSizeType InChannels;\n\t\tSizeType OutChannels;\n\t\tSizeType KernelSize[2];\n\t\tint Stride[2] = { 1, 1 };\n\t\tint Padding[2] = { 0, 0 };\n\t\tint OutPutPadding[2] = { 0, 0 };\n\t\tint Dilation[2] = { 1, 1 };\n\t\tint Groups = 1;\n\t\tbool Bias = true;\n\t\tPaddingType PaddingMode = Zeros;\n\t};\n\tConvTranspose2D(Module* _Parent, const std::wstring& _Name, const ConvParam& _Params);\n\tggml_tensor* operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace = false) override;\n\tvoid ChangeParam(const ConvParam& _Params);\nprivate:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tParameter weight;\n\tParameter bias;\n\tConvParam params;\n};\n\nclass Linear : public Module\n{\npublic:\n\tstruct LinearParam\n\t{\n\t\tSizeType InFeatures;\n\t\tSizeType OutFeatures;\n\t\tbool Bias = true;\n\t};\n\tLinear(Module* _Parent, const std::wstring& _Name, const LinearParam& _Params);\n\tggml_tensor* operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace = false) override;\n\tvoid ChangeParam(const LinearParam& _Params);\nprivate:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tParameter weight;\n\tParameter bias;\n\tLinearParam params;\n};\n\nclass Embedding : public Module\n{\npublic:\n\tstruct EmbeddingParam\n\t{\n\t\tint NumEmbeddings;\n\t\tint EmbeddingDim;\n\t\tint PaddingIdx = INT_MAX;\n\t\tfloat MaxNorm = NAN;\n\t\tfloat NormType = 2.f;\n\t\tbool ScaleGradByFreq = false;\n\t\tbool Sparse = false;\n\t\tbool Freeze = false;\n\t};\n\tEmbedding(Module* _Parent, const std::wstring& _Name, const EmbeddingParam& _Params);\n\tggml_tensor* operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace = false) override;\n\tvoid ChangeParam(const EmbeddingParam& _Params);\nprivate:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tParameter weight;\n\t//Parameter bias;\n\tEmbeddingParam params;\n};\n\nLibTTSEnd\n"
  },
  {
    "path": "fish-speech.cpp/include/llama.h",
    "content": "#pragma once\n#include \"Module.h\"\n\nLibTTSBegin\n\nstruct BaseModelArgs {\n\tint vocab_size = 32000;\n\tint n_layer = 32;\n\tint n_head = 32;\n\tint dim = 4096;\n\tint intermediate_size = 1;\n\tint n_local_heads = -1;\n\tint head_dim = 64;\n\tfloat rope_base = 10000.f;\n\tfloat norm_eps = 1e-5f;\n\tint max_seq_len = 2048;\n\tfloat dropout = 0.f;\n\n\t// Codebook configs\n\tint codebook_size = 160;\n\tint num_codebooks = 4;\n\tint num_in_codebooks = 0;\n\tint codebook_padding_idx = 0;\n\n\t// Gradient checkpointing\n\tbool use_gradient_checkpointing = true;\n};\n\nclass RMSNorm : public Module\n{\npublic:\n\tRMSNorm(Module* _Parent, const std::wstring& _Name, SizeType dim, float eps = 1e-5f);\n\tggml_tensor* operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace = false) override;\n\tvoid ChangeParam(SizeType dim, float eps = 1e-5f);\n\t\nprivate:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tParameter weight;\n\tSizeType dim_;\n\tfloat eps_;\n};\n\nclass FeedForward : public Module\n{\npublic:\n\tFeedForward(Module* _Parent, const std::wstring& _Name, const BaseModelArgs& config);\n\tggml_tensor* operator()(ggml_tensor* x, ggml_context* _Ctx, bool _Inplace = false) override;\n\tvoid ChangeParam(const BaseModelArgs& config);\n\nprivate:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tLinear w1, w3, w2;\n\tBaseModelArgs args_;\n};\n\nclass Attention : public Module\n{\npublic:\n\tAttention(Module* _Parent, const std::wstring& _Name, const BaseModelArgs& config, bool use_sdpa = true);\n\n\tggml_tensor* operator()(\n\t\tggml_tensor* x,\n\t\tggml_tensor* freqs_cis,\n\t\tggml_tensor* mask,\n\t\tggml_tensor* input_pos,\n\t\tggml_context* _Ctx,\n\t\tbool _Inplace = false\n\t\t);\n\n\tbool training = false;\n\nprivate:\n\tggml_tensor* apply_rotary_emb(\n\t\tggml_tensor* x,\n\t\tggml_tensor* freqs_cis,\n\t\tggml_context* _Ctx,\n\t\tbool _Inplace = false\n\t);\n\n\tstatic ggml_tensor* scaled_dot_product_attention(\n\t\tggml_tensor* query,\n\t\tggml_tensor* key,\n\t\tggml_tensor* value,\n\t\tggml_context* _Ctx,\n\t\tggml_tensor* attn_mask = nullptr,\n\t\tfloat dropout_p = 0.0,\n\t\tbool _Inplace = false\n\t);\n\n\tstatic ggml_tensor* eq_scaled_dot_product_attention(\n\t\tggml_tensor* query,\n\t\tggml_tensor* key,\n\t\tggml_tensor* value,\n\t\tggml_context* _Ctx,\n\t\tggml_tensor* attn_mask = nullptr,\n\t\tfloat dropout_p = 0.0,\n\t\tbool _Inplace = false\n\t);\n\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\n\tint total_head_dim;\n\tLinear wqkv, wo;\n\tfloat dropout;\n\tint n_head;\n\tint head_dim;\n\tint n_local_heads;\n\tint dim;\n\tbool use_sdpa;\n\tBaseModelArgs args_;\n};\n\nclass TransformerBlock : public Module\n{\npublic:\n\tTransformerBlock(Module* _Parent, const std::wstring& _Name, const BaseModelArgs& config, bool use_sdpa = true);\n\tggml_tensor* operator()(\n\t\tggml_tensor* x,\n\t\tggml_tensor* freqs_cis,\n\t\tggml_tensor* mask,\n\t\tggml_tensor* input_pos,\n\t\tggml_context* _Ctx,\n\t\tbool _Inplace = false\n\t\t);\n\nprivate:\n\tvoid DumpCurrentLayerInfo(std::wstring& _Tmp) override;\n\tAttention attention;\n\tFeedForward feed_forward;\n\tRMSNorm ffn_norm;\n\tRMSNorm attention_norm;\n};\n\nclass BaseTransformer : public Module\n{\npublic:\n\tBaseTransformer(Module* _Parent, const std::wstring& _Name, const BaseModelArgs& config);\n\nprivate:\n\tBaseModelArgs config_;\n\tEmbedding embeddings;\n\tModuleList layers;\n\tRMSNorm norm;\n\tLinear output;\n\tParameter freqs_cis;\n\tParameter causal_mask;\n\n\tint max_batch_size = -1;\n\tint max_seq_len = -1;\n};\n\nLibTTSEnd"
  },
  {
    "path": "fish-speech.cpp/src/Base.cpp",
    "content": "#include \"../include/Base.h\"\n#include <ranges>\n#ifdef _WIN32\n#include <Windows.h>\n#else\n#error\n#endif\nLibTTSBegin\n\nstd::string UnicodeToByte(const std::wstring& input)\n{\n#ifdef _WIN32\n\tstd::vector<char> ByteString(input.length() * 6);\n\tWideCharToMultiByte(\n\t\tCP_UTF8,\n\t\t0,\n\t\tinput.c_str(),\n\t\tint(input.length()),\n\t\tByteString.data(),\n\t\tint(ByteString.size()),\n\t\tnullptr,\n\t\tnullptr\n\t);\n\treturn ByteString.data();\n#else\n\t//TODO\n#endif\n}\n\nstd::string UnicodeToAnsi(const std::wstring& input)\n{\n#ifdef _WIN32\n\tstd::vector<char> ByteString(input.length() * 6);\n\tWideCharToMultiByte(\n\t\tCP_ACP,\n\t\t0,\n\t\tinput.c_str(),\n\t\tint(input.length()),\n\t\tByteString.data(),\n\t\tint(ByteString.size()),\n\t\tnullptr,\n\t\tnullptr\n\t);\n\treturn ByteString.data();\n#else\n\t//TODO\n#endif\n}\n\nstd::wstring ByteToUnicode(const std::string& input)\n{\n#ifdef _WIN32\n\tstd::vector<wchar_t> WideString(input.length() * 2);\n\tMultiByteToWideChar(\n\t\tCP_UTF8,\n\t\t0,\n\t\tinput.c_str(),\n\t\tint(input.length()),\n\t\tWideString.data(),\n\t\tint(WideString.size())\n\t);\n\treturn WideString.data();\n#else\n\t//TODO\n#endif\n}\n\nFileGuard::~FileGuard()\n{\n\tClose();\n}\n\nFileGuard::FileGuard(FileGuard&& _Right) noexcept\n{\n\tfile_ = _Right.file_;\n\t_Right.file_ = nullptr;\n}\n\nFileGuard& FileGuard::operator=(FileGuard&& _Right) noexcept\n{\n\tfile_ = _Right.file_;\n\t_Right.file_ = nullptr;\n\treturn *this;\n}\n\nvoid FileGuard::Open(const std::wstring& _Path, const std::wstring& _Mode)\n{\n#ifdef _WIN32\n\t_wfopen_s(&file_, _Path.c_str(), _Mode.c_str());\n#else\n\tfile_ = _wfopen(_Path.c_str(), _Mode.c_str());\n#endif\n}\n\nFileGuard::operator FILE* () const\n{\n\treturn file_;\n}\n\nbool FileGuard::Enabled() const\n{\n\treturn file_;\n}\n\nvoid FileGuard::Close()\n{\n\tif (file_)\n\t\tfclose(file_);\n\tfile_ = nullptr;\n}\n\nValue::~Value()\n{\n\tif (DictGuf)\n\t\tgguf_free(DictGuf);\n\tif (DictCtx)\n\t\tggml_free(DictCtx);\n\tDictGuf = nullptr;\n\tDictCtx = nullptr;\n}\n\nValue& Value::load(const std::wstring& _Path, bool _Strict)\n{\n\tFileGuard DictFile;\n\tDictFile.Open(_Path, L\"rb\");\n\tif (!DictFile.Enabled())\n\t\tLibTTSThrow(\"Failed To Open File!\");\n\tDictFile.Close();\n\tgguf_init_params params{ false,&DictCtx };\n\tDictGuf = gguf_init_from_file(UnicodeToByte(_Path).c_str(), params);\n\tloadData(DictCtx, _Strict);\n\treturn *this;\n}\n\nValue& Value::save(const std::wstring& _Path)\n{\n\tFileGuard file;\n\tfile.Open(_Path, L\"rb\");\n\tif (!file.Enabled())\n\t\tLibTTSThrow(\"Failed to open file!\");\n\tsaveData(file);\n\treturn *this;\n}\n\nvoid Value::loadData(const DictType& _WeightDict, bool _Strict)\n{\n\tLibTTSNotImplementedError;\n}\n\nvoid Value::saveData(FileGuard& _File)\n{\n\tLibTTSNotImplementedError;\n}\n\nModule::Module(Module* _Parent, const std::wstring& _Name)\n{\n\tif (_Parent != nullptr)\n\t{\n\t\tif(!_Parent->RegName_.empty())\n\t\t\tRegName_ = _Parent->RegName_ + L\".\" + _Name;\n\t\telse\n\t\t\tRegName_ = _Name;\n\t\t_Parent->Layers_[RegName_] = this;\n\t}\n\telse\n\t\tRegName_ = _Name;\n}\n\nvoid Module::loadData(const DictType& _WeightDict, bool _Strict)\n{\n\tfor (const auto& it : Layers_ | std::views::values)\n\t\tit->loadData(_WeightDict, _Strict);\n}\n\nvoid Module::saveData(FileGuard& _File)\n{\n\tfor (const auto& it : Layers_ | std::views::values)\n\t\tit->saveData(_File);\n}\n\nggml_tensor* Module::operator()(ggml_tensor*, ggml_context*, bool _Inplace)\n{\n\tLibTTSNotImplementedError;\n}\n\nvoid Module::ReCalcLayerName(const std::wstring& _Parent)\n{\n\tstd::unordered_map<std::wstring, Module*> Lay;\n\tfor (auto i : Layers_ | std::ranges::views::values)\n\t{\n\t\ti->ReCalcLayerName(_Parent);\n\t\ti->RegName_ = _Parent + L\".\" + i->RegName_;\n\t\tLay[i->RegName_] = i;\n\t}\n\tLayers_ = std::move(Lay);\n}\n\nstd::wstring Module::DumpLayerNameInfo()\n{\n\tstd::wstring Ret;\n\tDumpLayerNameInfoImpl(Ret, 0);\n\treturn Ret;\n}\n\nvoid Module::DumpLayerNameInfoImpl(std::wstring& _Tmp, int TabCount)\n{\n\tfor (int i = 0; i < TabCount; ++i) _Tmp += L\"  \";\n\tDumpCurrentLayerInfo(_Tmp);\n\tif(!Layers_.empty())\n\t{\n\t\tif(!_Tmp.empty())\n\t\t\t_Tmp += L\" = {\";\n\t\telse\n\t\t\t_Tmp += L\"{\";\n\t\t_Tmp += '\\n';\n\t\tfor (auto i : Layers_ | std::ranges::views::values)\n\t\t\ti->DumpLayerNameInfoImpl(_Tmp, TabCount + 1);\n\t\tfor (int i = 0; i < TabCount; ++i) _Tmp += L\"  \";\n\t\t_Tmp += L'}';\n\t\t_Tmp += '\\n';\n\t}\n\telse\n\t\t_Tmp += '\\n';\n}\n\nvoid Module::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += RegName_;\n}\n\nParameter::Parameter(Module* _Parent, const std::wstring& _Name, std::vector<SizeType> _Shape) :\n\tModule(_Parent, _Name),\n\tShape_(std::move(_Shape))\n{\n\tstd::ranges::reverse(Shape_);\n}\n\nParameter::operator ggml_tensor*() const\n{\n\tif (!Weight_)\n\t\tLibTTSThrow(UnicodeToByte(L\"\\\"\" + RegName_ + L\"\\\" Is Null!\"));\n\treturn Weight_;\n}\n\nvoid Parameter::ChangeShape(std::vector<SizeType> _Shape)\n{\n\tShape_ = std::move(_Shape);\n\tstd::ranges::reverse(Shape_);\n}\n\nvoid Parameter::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += (RegName_ + L\" (Size[\");\n\tauto RShape = Shape_;\n\tstd::ranges::reverse(RShape);\n\tfor (auto i : RShape)\n\t\t_Tmp += (std::to_wstring(i) + L\", \");\n\tif(!RShape.empty())\n\t{\n\t\t_Tmp.pop_back();\n\t\t_Tmp.pop_back();\n\t}\n\t_Tmp += L\"])\";\n}\n\nvoid Parameter::loadData(const DictType& _WeightDict, bool _Strict)\n{\n\ttry\n\t{\n\t\tWeight_ = ggml_get_tensor(_WeightDict, UnicodeToByte(RegName_).c_str());\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tLibTTSThrow(e.what());\n\t}\n\tsize_t Index = 0;\n\tfor (const auto Value : Shape_)\n\t\tif (Value != Weight_->ne[Index++])\n\t\t\tLibTTSThrow(UnicodeToByte(L\"Size Of \\\"\" + RegName_ + L\"\\\"  Size Of Pretrained Model!\"));\n\tif (!Weight_)\n\t\tLibTTSThrow(\"Missing Weight \\\"\" + UnicodeToByte(RegName_) + '\\\"');\n}\n\nvoid Parameter::saveData(FileGuard& _File)\n{\n\tLibTTSNotImplementedError;\n}\n\nSequential::Sequential(Module* _Parent, const std::wstring& _Name) : Module(_Parent, _Name)\n{\n}\n\nSequential::~Sequential()\n{\n\tfor (auto i : _Items)\n\t\tdelete i;\n\t_Items.clear();\n}\n\nggml_tensor* Sequential::operator()(ggml_tensor* _Input, ggml_context* _Ctx, bool _Inplace)\n{\n\tfor (auto i : _Items)\n\t\t_Input = i->operator()(_Input, _Ctx, _Inplace);\n\treturn _Input;\n}\n\nvoid Sequential::Append(Module* _Module)\n{\n\t_Module->Name() = RegName_ + L\".\" + std::to_wstring(_Items.size());\n\t_Module->ReCalcLayerName(_Module->Name());\n\t_Items.emplace_back(_Module);\n\tLayers_[_Module->Name()] = _Module;\n}\n\nSequential& Sequential::operator=(const std::initializer_list<Module*>& _Input)\n{\n\tfor (auto i : _Input)\n\t\tAppend(i);\n\treturn *this;\n}\n\nModuleList::ModuleList(Module* _Parent, const std::wstring& _Name) : Sequential(_Parent, _Name)\n{\n}\n\nModuleList::~ModuleList()\n{\n}\n\nggml_tensor* ModuleList::operator()(ggml_tensor* _Input, ggml_context* _Ctx, bool _Inplace)\n{\n\tLibTTSNotImplementedError;\n}\n\nModuleList& ModuleList::operator=(const std::initializer_list<Module*>& _Input)\n{\n\tfor (auto i : _Input)\n\t\tAppend(i);\n\treturn *this;\n}\n\nLibTTSEnd"
  },
  {
    "path": "fish-speech.cpp/src/Module.cpp",
    "content": "#include \"Module.h\"\n\nLibTTSBegin\n\nConv1D::Conv1D(Module* _Parent, const std::wstring& _Name, const ConvParam& _Params) :\n\tModule(_Parent, _Name),\n\tRegisterLayer(weight, { _Params.OutChannels, _Params.InChannels / _Params.Groups, _Params.KernelSize }),\n\tRegisterLayer(bias, { _Params.OutChannels }),\n\tparams(_Params)\n{\n\tif (!_Params.Bias)\n\t\tLayers_.erase(bias.Name());\n}\n\nvoid Conv1D::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} Conv1D(in_channel[{}], out_channel[{}], kernel_size[{}])\",\n\t\tRegName_,\n\t\tparams.InChannels,\n\t\tparams.OutChannels,\n\t\tparams.KernelSize\n\t);\n}\n\nggml_tensor* Conv1D::operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace)\n{\n\tif (params.Bias)\n\t\treturn ggml_add(\n\t\t\t_Ctx,\n\t\t\tggml_conv_1d(\n\t\t\t\t_Ctx,\n\t\t\t\t_Tensor,\n\t\t\t\tweight,\n\t\t\t\tparams.Stride,\n\t\t\t\tparams.Padding,\n\t\t\t\tparams.Dilation\n\t\t\t),\n\t\t\tbias\n\t\t);\n\n\treturn ggml_conv_1d(\n\t\t_Ctx,\n\t\t_Tensor,\n\t\tweight,\n\t\tparams.Stride,\n\t\tparams.Padding,\n\t\tparams.Dilation\n\t);\n}\n\nvoid Conv1D::ChangeParam(const ConvParam& _Params)\n{\n\tparams = _Params;\n\tweight.ChangeShape({ _Params.OutChannels, _Params.InChannels / _Params.Groups, _Params.KernelSize });\n\tbias.ChangeShape({ _Params.OutChannels });\n}\n\nConv2D::Conv2D(Module* _Parent, const std::wstring& _Name, const ConvParam& _Params) :\n\tModule(_Parent, _Name),\n\tRegisterLayer(\n\t\tweight,\n\t\t{ _Params.OutChannels, _Params.InChannels / _Params.Groups, _Params.KernelSize[0], _Params.KernelSize[1] }\n\t),\n\tRegisterLayer(bias, { _Params.OutChannels }),\n\tparams(_Params)\n{\n\tif (!_Params.Bias)\n\t\tLayers_.erase(bias.Name());\n}\n\nvoid Conv2D::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} Conv2D(in_channel[{}], out_channel[{}], kernel_size[{}, {}])\",\n\t\tRegName_,\n\t\tparams.InChannels,\n\t\tparams.OutChannels,\n\t\tparams.KernelSize[0],\n\t\tparams.KernelSize[1]\n\t);\n}\n\nggml_tensor* Conv2D::operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace)\n{\n\tif (params.Bias)\n\t\treturn ggml_add(\n\t\t\t_Ctx,\n\t\t\tggml_conv_2d(\n\t\t\t\t_Ctx,\n\t\t\t\t_Tensor,\n\t\t\t\tweight,\n\t\t\t\tparams.Stride[0],\n\t\t\t\tparams.Stride[1],\n\t\t\t\tparams.Padding[0],\n\t\t\t\tparams.Padding[1],\n\t\t\t\tparams.Dilation[0],\n\t\t\t\tparams.Dilation[1]\n\t\t\t),\n\t\t\tbias\n\t\t);\n\n\treturn ggml_conv_2d(\n\t\t_Ctx,\n\t\t_Tensor,\n\t\tweight,\n\t\tparams.Stride[0],\n\t\tparams.Stride[1],\n\t\tparams.Padding[0],\n\t\tparams.Padding[1],\n\t\tparams.Dilation[0],\n\t\tparams.Dilation[1]\n\t);\n}\n\nvoid Conv2D::ChangeParam(const ConvParam& _Params)\n{\n\tparams = _Params;\n\tweight.ChangeShape({ _Params.OutChannels, _Params.InChannels / _Params.Groups, _Params.KernelSize[0], _Params.KernelSize[1] });\n\tbias.ChangeShape({ _Params.OutChannels });\n}\n\nConvTranspose1D::ConvTranspose1D(Module* _Parent, const std::wstring& _Name, const ConvParam& _Params) :\n\tModule(_Parent, _Name),\n\tRegisterLayer(weight, { _Params.InChannels, _Params.OutChannels / _Params.Groups, _Params.KernelSize }),\n\tRegisterLayer(bias, { _Params.OutChannels }),\n\tparams(_Params)\n{\n\tif (_Params.PaddingMode != Zeros)\n\t\tLibTTSThrow(\"Only `Zeros` Padding Mode Is Supported For ConvTranspose1D\");\n\tif (!_Params.Bias)\n\t\tLayers_.erase(bias.Name());\n}\n\nvoid ConvTranspose1D::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} ConvTranspose1D(in_channel[{}], out_channel[{}], kernel_size[{}])\",\n\t\tRegName_,\n\t\tparams.InChannels,\n\t\tparams.OutChannels,\n\t\tparams.KernelSize\n\t);\n}\n\nggml_tensor* ConvTranspose1D::operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace)\n{\n\tif(params.Bias)\n\t{\n\t\tif (params.OutPutPadding)\n\t\t\treturn ggml_add(\n\t\t\t\t_Ctx,\n\t\t\t\tggml_pad(\n\t\t\t\t\t_Ctx,\n\t\t\t\t\tggml_conv_transpose_1d(\n\t\t\t\t\t\t_Ctx,\n\t\t\t\t\t\t_Tensor,\n\t\t\t\t\t\tweight,\n\t\t\t\t\t\tparams.Stride,\n\t\t\t\t\t\tparams.Padding,\n\t\t\t\t\t\tparams.Dilation\n\t\t\t\t\t),\n\t\t\t\t\tparams.OutPutPadding,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t),\n\t\t\t\tbias\n\t\t\t);\n\n\t\treturn ggml_add(\n\t\t\t_Ctx,\n\t\t\tggml_conv_transpose_1d(\n\t\t\t\t_Ctx,\n\t\t\t\t_Tensor,\n\t\t\t\tweight,\n\t\t\t\tparams.Stride,\n\t\t\t\tparams.Padding,\n\t\t\t\tparams.Dilation\n\t\t\t),\n\t\t\tbias\n\t\t);\n\t}\n\n\tif (params.OutPutPadding)\n\t\treturn ggml_pad(\n\t\t\t_Ctx,\n\t\t\tggml_conv_transpose_1d(\n\t\t\t\t_Ctx,\n\t\t\t\t_Tensor,\n\t\t\t\tweight,\n\t\t\t\tparams.Stride,\n\t\t\t\tparams.Padding,\n\t\t\t\tparams.Dilation\n\t\t\t),\n\t\t\tparams.OutPutPadding,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t);\n\n\treturn ggml_conv_transpose_1d(\n\t\t_Ctx,\n\t\t_Tensor,\n\t\tweight,\n\t\tparams.Stride,\n\t\tparams.Padding,\n\t\tparams.Dilation\n\t);\n}\n\nvoid ConvTranspose1D::ChangeParam(const ConvParam& _Params)\n{\n\tparams = _Params;\n\tweight.ChangeShape({ _Params.InChannels, _Params.OutChannels / _Params.Groups, _Params.KernelSize });\n\tbias.ChangeShape({ _Params.OutChannels });\n}\n\nConvTranspose2D::ConvTranspose2D(Module* _Parent, const std::wstring& _Name, const ConvParam& _Params) :\n\tModule(_Parent, _Name),\n\tRegisterLayer(\n\t\tweight,\n\t\t{ _Params.InChannels, _Params.OutChannels / _Params.Groups, _Params.KernelSize[0], _Params.KernelSize[1] }\n\t),\n\tRegisterLayer(bias, { _Params.OutChannels }),\n\tparams(_Params)\n{\n\tif (!_Params.Bias)\n\t\tLayers_.erase(bias.Name());\n}\n\nvoid ConvTranspose2D::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} ConvTranspose2D(in_channel[{}], out_channel[{}], kernel_size[{}, {}])\",\n\t\tRegName_,\n\t\tparams.InChannels,\n\t\tparams.OutChannels,\n\t\tparams.KernelSize[0],\n\t\tparams.KernelSize[1]\n\t);\n}\n\nggml_tensor* ConvTranspose2D::operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace)\n{\n\tLibTTSNotImplementedError; //TODO\n}\n\nvoid ConvTranspose2D::ChangeParam(const ConvParam& _Params)\n{\n\tparams = _Params;\n\tweight.ChangeShape({ _Params.InChannels, _Params.OutChannels / _Params.Groups, _Params.KernelSize[0], _Params.KernelSize[1] });\n\tbias.ChangeShape({ _Params.OutChannels });\n}\n\nLinear::Linear(Module* _Parent, const std::wstring& _Name, const LinearParam& _Params):\n\tModule(_Parent, _Name),\n\tRegisterLayer(weight, { _Params.OutFeatures, _Params.InFeatures }),\n\tRegisterLayer(bias, { _Params.OutFeatures }),\n\tparams(_Params)\n{\n\tif (!_Params.Bias)\n\t\tLayers_.erase(bias.Name());\n}\n\nvoid Linear::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} Linear(in_feature[{}], out_feature[{}])\",\n\t\tRegName_,\n\t\tparams.InFeatures,\n\t\tparams.OutFeatures\n\t);\n}\n\nggml_tensor* Linear::operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace)\n{\n\tif (params.Bias)\n\t\treturn ggml_add(_Ctx, ggml_mul_mat(_Ctx, _Tensor, weight), bias);\n\n\treturn ggml_mul_mat(_Ctx, _Tensor, weight);\n}\n\nvoid Linear::ChangeParam(const LinearParam& _Params)\n{\n\tparams = _Params;\n\tweight.ChangeShape({ _Params.OutFeatures, _Params.InFeatures });\n\tbias.ChangeShape({ _Params.OutFeatures });\n}\n\nEmbedding::Embedding(Module* _Parent, const std::wstring& _Name, const EmbeddingParam& _Params) :\n\tModule(_Parent, _Name),\n\tRegisterLayer(weight, { _Params.NumEmbeddings, _Params.EmbeddingDim }),\n\tparams(_Params)\n{\n\t\n}\n\nvoid Embedding::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} Embedding(num_embeddings[{}], embedding_dim[{}])\",\n\t\tRegName_,\n\t\tparams.NumEmbeddings,\n\t\tparams.EmbeddingDim\n\t);\n}\n\nggml_tensor* Embedding::operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace)\n{\n\treturn ggml_get_rows(_Ctx, weight, _Tensor);\n}\n\nvoid Embedding::ChangeParam(const EmbeddingParam& _Params)\n{\n\tparams = _Params;\n\tweight.ChangeShape({ _Params.NumEmbeddings, _Params.EmbeddingDim });\n}\n\nLibTTSEnd\t"
  },
  {
    "path": "fish-speech.cpp/src/llama.cpp",
    "content": "#include \"llama.h\"\n\nLibTTSBegin\ninline void UnUsedPtr(void*) {}\n\nRMSNorm::RMSNorm(Module* _Parent, const std::wstring& _Name, SizeType dim, float eps) :\n\tModule(_Parent, _Name),\n\tRegisterLayer(weight, { dim }),\n\tdim_(dim),\n\teps_(eps)\n{\n\n}\n\nggml_tensor* RMSNorm::operator()(ggml_tensor* _Tensor, ggml_context* _Ctx, bool _Inplace)\n{\n\tif(_Inplace)\n\t\treturn ggml_mul_inplace(_Ctx, ggml_rms_norm_inplace(_Ctx, _Tensor, eps_), weight);\n\treturn ggml_mul(_Ctx, ggml_rms_norm(_Ctx, _Tensor, eps_), weight);\n}\n\nvoid RMSNorm::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} RMSNorm(dim[{}], eps[{}])\",\n\t\tRegName_,\n\t\tdim_,\n\t\teps_\n\t);\n}\n\nvoid RMSNorm::ChangeParam(SizeType dim, float eps)\n{\n\tweight.ChangeShape({ dim });\n\teps_ = eps;\n}\n\nFeedForward::FeedForward(Module* _Parent, const std::wstring& _Name, const BaseModelArgs& config) :\n\tModule(_Parent, _Name),\n\tRegisterLayer(w1, { config.dim, config.intermediate_size, false }),\n\tRegisterLayer(w3, { config.dim, config.intermediate_size, false }),\n\tRegisterLayer(w2, { config.intermediate_size, config.dim, false }),\n\targs_(config)\n{\n\n}\n\nggml_tensor* FeedForward::operator()(ggml_tensor* x, ggml_context* _Ctx, bool _Inplace)\n{\n\treturn w2(\n\t\tggml_mul(\n\t\t\t_Ctx,\n\t\t\tggml_silu_inplace(_Ctx, w1(x, _Ctx, _Inplace)),\n\t\t\tw3(x, _Ctx, _Inplace)\n\t\t),\n\t\t_Ctx,\n\t\t_Inplace\n\t);\n}\n\nvoid FeedForward::ChangeParam(const BaseModelArgs& config)\n{\n\targs_ = config;\n\tw1.ChangeParam({ config.dim, config.intermediate_size, false });\n\tw3.ChangeParam({ config.dim, config.intermediate_size, false });\n\tw2.ChangeParam({ config.intermediate_size, config.dim, false });\n}\n\nvoid FeedForward::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} FeedForward()\",\n\t\tRegName_\n\t);\n}\n\nAttention::Attention(Module* _Parent, const std::wstring& _Name, const BaseModelArgs& config, bool use_sdpa) :\n\tModule(_Parent, _Name),\n\ttotal_head_dim((config.n_head + 2 * config.n_local_heads)* config.head_dim),\n\tRegisterLayer(wqkv, { config.dim, (config.n_head + 2 * config.n_local_heads) * config.head_dim, false }),\n\tRegisterLayer(wo, { config.dim, config.dim, false }),\n\tdropout(config.dropout),\n\tn_head(config.n_head),\n\thead_dim(config.head_dim),\n\tn_local_heads(config.n_local_heads),\n\tdim(config.dim),\n\tuse_sdpa(use_sdpa),\n\targs_(config)\n{\n\t\n}\n\nggml_tensor* Attention::operator()(\n\tggml_tensor* x,\n\tggml_tensor* freqs_cis,\n\tggml_tensor* mask,\n\tggml_tensor* input_pos,\n\tggml_context* _Ctx,\n\tbool _Inplace\n\t)\n{\n\tint64_t bsz = x->ne[2], seqlen = x->ne[1];\n\tint64_t kv_size = (int64_t)n_local_heads * head_dim;\n\n\tauto QKV = wqkv(x, _Ctx);\n\n\tint64_t n_tokens = 1;\n\tfor (size_t i = 1; i < 4; ++i)\n\t\tn_tokens *= QKV->ne[i];\n\n\tauto Q = ggml_cont(\n\t\t_Ctx,\n\t\tggml_view_2d(_Ctx, QKV, dim, n_tokens, QKV->nb[1], 0 * sizeof(float) * (dim))\n\t);\n\tauto K = ggml_cont(\n\t\t_Ctx,\n\t\tggml_view_2d(_Ctx, QKV, kv_size, n_tokens, QKV->nb[1], 1 * sizeof(float) * (dim))\n\t);\n\tauto V = ggml_cont(\n\t\t_Ctx,\n\t\tggml_view_2d(_Ctx, QKV, kv_size, n_tokens, QKV->nb[1], 1 * sizeof(float) * (dim + kv_size))\n\t);\n\n\tQ = ggml_reshape_4d(_Ctx, Q, head_dim, n_head, seqlen, bsz);\n\tK = ggml_reshape_4d(_Ctx, K, head_dim, n_local_heads, seqlen, bsz);\n\tV = ggml_reshape_4d(_Ctx, V, head_dim, n_local_heads, seqlen, bsz);\n\n\tQ = apply_rotary_emb(Q, freqs_cis, _Ctx, _Inplace);\n\tK = apply_rotary_emb(K, freqs_cis, _Ctx, _Inplace);\n\n\tQ = ggml_cont(_Ctx, ggml_permute(_Ctx, Q, 0, 2, 1, 3));\n\tK = ggml_cont(_Ctx, ggml_permute(_Ctx, K, 0, 2, 1, 3));\n\tV = ggml_cont(_Ctx, ggml_permute(_Ctx, V, 0, 2, 1, 3));\n\n\t//TODO KVCACHE\n\n\tint Scale = n_head / n_local_heads;\n\tif(Scale > 1)\n\t{\n\t\tK = ggml_repeat(_Ctx, K, ggml_new_tensor_4d(_Ctx, K->type, K->ne[0], K->ne[1] * Scale, K->ne[2], K->ne[3]));\n\t\tV = ggml_repeat(_Ctx, V, ggml_new_tensor_4d(_Ctx, V->type, V->ne[0], V->ne[1] * Scale, V->ne[2], V->ne[3]));\n\t}\n\n\tggml_tensor* y;\n\tif(use_sdpa)\n\t\ty = scaled_dot_product_attention(\n\t\t\tQ,\n\t\t\tK,\n\t\t\tV,\n\t\t\t_Ctx,\n\t\t\tmask,\n\t\t\ttraining ? dropout : 0.f\n\t\t);\n\telse\n\t\ty = eq_scaled_dot_product_attention(\n\t\t\tQ,\n\t\t\tK,\n\t\t\tV,\n\t\t\t_Ctx,\n\t\t\tmask,\n\t\t\ttraining ? dropout : 0.f\n\t\t);\n\n\ty = ggml_reshape_3d(_Ctx, ggml_cont(_Ctx, ggml_permute(_Ctx, y, 0, 2, 1, 3)), dim, seqlen, bsz);\n\n\treturn wo(y, _Ctx, _Inplace);\n}\n\nggml_tensor* Attention::apply_rotary_emb(ggml_tensor* x, ggml_tensor* freqs_cis, ggml_context* _Ctx, bool _Inplace)\n{\n\tint ndim = int(x->ne[0]) / 2;\n\tint64_t n_tokens = x->ne[0] / 2;\n\tfor (size_t i = 1; i < 4; ++i)\n\t\tn_tokens *= x->ne[i];\n\tauto xshape = ggml_reshape_2d(_Ctx, x, 2, n_tokens);\n\tauto xshape0 = ggml_view_4d(_Ctx, xshape, ndim, x->ne[1], x->ne[2], x->ne[3], x->nb[1], x->nb[2], x->nb[3], 0);\n\tauto xshape1 = ggml_view_4d(_Ctx, xshape, ndim, x->ne[1], x->ne[2], x->ne[3], x->nb[1], x->nb[2], x->nb[3], sizeof(float));\n\n\treturn nullptr;\n}\n\nggml_tensor* Attention::scaled_dot_product_attention(\n\tggml_tensor* query,\n\tggml_tensor* key,\n\tggml_tensor* value,\n\tggml_context* _Ctx,\n\tggml_tensor* attn_mask,\n\tfloat dropout_p,\n\tbool _Inplace\n)\n{\n\tUnUsedPtr(attn_mask);\n\tUNUSED(dropout_p);\n\tUNUSED(_Inplace);\n\treturn ggml_flash_attn(_Ctx, query, key, value, false);\n}\n\nggml_tensor* Attention::eq_scaled_dot_product_attention(\n\tggml_tensor* query,\n\tggml_tensor* key,\n\tggml_tensor* value,\n\tggml_context* _Ctx,\n\tggml_tensor* attn_mask,\n\tfloat dropout_p,\n\tbool _Inplace\n)\n{\n\tUnUsedPtr(attn_mask);\n\tUNUSED(dropout_p);\n\tUNUSED(_Inplace);\n\treturn ggml_flash_attn(_Ctx, query, key, value, false);\n}\n\nvoid Attention::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} AttentionLayer()\",\n\t\tRegName_\n\t);\n}\n\nTransformerBlock::TransformerBlock(Module* _Parent, const std::wstring& _Name, const BaseModelArgs& config, bool use_sdpa):\n\tModule(_Parent, _Name),\n\tRegisterLayer(attention, config, use_sdpa),\n\tRegisterLayer(feed_forward, config),\n\tRegisterLayer(ffn_norm, config.dim, config.norm_eps),\n\tRegisterLayer(attention_norm, config.dim, config.norm_eps)\n{\n\t\n}\n\nggml_tensor* TransformerBlock::operator()(\n\tggml_tensor* x,\n\tggml_tensor* freqs_cis,\n\tggml_tensor* mask,\n\tggml_tensor* input_pos,\n\tggml_context* _Ctx,\n\tbool _Inplace\n\t)\n{\n\tUNUSED(_Inplace);\n\tauto h = attention(attention_norm(x, _Ctx, true), freqs_cis, mask, input_pos, _Ctx);\n\treturn ggml_add_inplace(_Ctx, h, feed_forward(ffn_norm(h, _Ctx), _Ctx));\n}\n\nvoid TransformerBlock::DumpCurrentLayerInfo(std::wstring& _Tmp)\n{\n\t_Tmp += std::format(\n\t\tL\"{} TransformerBlock()\",\n\t\tRegName_\n\t);\n}\n\nBaseTransformer::BaseTransformer(Module* _Parent, const std::wstring& _Name, const BaseModelArgs& config):\n\tModule(_Parent, _Name),\n\tconfig_(config),\n\tRegisterLayer(embeddings, {\n\t\tconfig.vocab_size + config.codebook_size * config.num_in_codebooks,\n\t\t\tconfig.dim\n\t\t}),\n\tRegisterLayer(layers),\n\tRegisterLayer(norm, config.dim, config.norm_eps),\n\tRegisterLayer(output, {\n\tconfig.dim,\n\t\t\tconfig.vocab_size,\n\t\t\tfalse\n\t\t}),\n\tRegisterLayer(freqs_cis, {\n\t\t\tconfig.max_seq_len,\n\t\t\t(config.dim / config.n_head) / 2\n\t\t}),\n\tRegisterLayer(causal_mask, {\n\t\tconfig.max_seq_len,\n\t\tconfig.max_seq_len\n\t\t})\n{\n\tfor (int i = 0; i < config.n_layer; ++i)\n\t\tlayers.Append(LayerItem(TransformerBlock, config, true));\n}\n\nLibTTSEnd"
  },
  {
    "path": "fish-speech.cpp/test.py",
    "content": "import torch\nimport time\nfor i in range(20):\n    a = torch.ones(size=(1, 768, 100000))\n    beg = time.time()\n    a.fill_(i)\n    print(time.time() - beg)"
  },
  {
    "path": "fish-speech.cpp/test.txt",
    "content": "{\n  embeddings Embedding(num_embeddings[32000], embedding_dim[4096]) = {\n    embeddings.weight (Size[32000, 4096])\n  }\n  layers = {\n    layers.0 TransformerBlock() = {\n      layers.0.attention AttentionLayer() = {\n        layers.0.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.0.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.0.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.0.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.0.feed_forward FeedForward() = {\n        layers.0.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.0.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.0.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.0.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.0.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.0.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.0.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.0.ffn_norm.weight (Size[4096])\n      }\n      layers.0.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.0.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.1 TransformerBlock() = {\n      layers.1.attention AttentionLayer() = {\n        layers.1.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.1.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.1.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.1.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.1.feed_forward FeedForward() = {\n        layers.1.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.1.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.1.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.1.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.1.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.1.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.1.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.1.ffn_norm.weight (Size[4096])\n      }\n      layers.1.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.1.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.28 TransformerBlock() = {\n      layers.28.attention AttentionLayer() = {\n        layers.28.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.28.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.28.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.28.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.28.feed_forward FeedForward() = {\n        layers.28.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.28.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.28.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.28.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.28.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.28.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.28.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.28.ffn_norm.weight (Size[4096])\n      }\n      layers.28.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.28.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.2 TransformerBlock() = {\n      layers.2.attention AttentionLayer() = {\n        layers.2.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.2.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.2.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.2.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.2.feed_forward FeedForward() = {\n        layers.2.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.2.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.2.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.2.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.2.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.2.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.2.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.2.ffn_norm.weight (Size[4096])\n      }\n      layers.2.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.2.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.29 TransformerBlock() = {\n      layers.29.attention AttentionLayer() = {\n        layers.29.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.29.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.29.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.29.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.29.feed_forward FeedForward() = {\n        layers.29.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.29.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.29.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.29.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.29.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.29.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.29.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.29.ffn_norm.weight (Size[4096])\n      }\n      layers.29.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.29.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.3 TransformerBlock() = {\n      layers.3.attention AttentionLayer() = {\n        layers.3.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.3.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.3.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.3.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.3.feed_forward FeedForward() = {\n        layers.3.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.3.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.3.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.3.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.3.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.3.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.3.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.3.ffn_norm.weight (Size[4096])\n      }\n      layers.3.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.3.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.4 TransformerBlock() = {\n      layers.4.attention AttentionLayer() = {\n        layers.4.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.4.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.4.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.4.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.4.feed_forward FeedForward() = {\n        layers.4.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.4.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.4.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.4.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.4.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.4.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.4.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.4.ffn_norm.weight (Size[4096])\n      }\n      layers.4.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.4.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.5 TransformerBlock() = {\n      layers.5.attention AttentionLayer() = {\n        layers.5.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.5.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.5.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.5.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.5.feed_forward FeedForward() = {\n        layers.5.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.5.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.5.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.5.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.5.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.5.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.5.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.5.ffn_norm.weight (Size[4096])\n      }\n      layers.5.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.5.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.6 TransformerBlock() = {\n      layers.6.attention AttentionLayer() = {\n        layers.6.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.6.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.6.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.6.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.6.feed_forward FeedForward() = {\n        layers.6.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.6.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.6.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.6.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.6.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.6.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.6.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.6.ffn_norm.weight (Size[4096])\n      }\n      layers.6.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.6.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.7 TransformerBlock() = {\n      layers.7.attention AttentionLayer() = {\n        layers.7.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.7.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.7.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.7.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.7.feed_forward FeedForward() = {\n        layers.7.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.7.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.7.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.7.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.7.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.7.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.7.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.7.ffn_norm.weight (Size[4096])\n      }\n      layers.7.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.7.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.22 TransformerBlock() = {\n      layers.22.attention AttentionLayer() = {\n        layers.22.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.22.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.22.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.22.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.22.feed_forward FeedForward() = {\n        layers.22.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.22.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.22.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.22.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.22.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.22.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.22.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.22.ffn_norm.weight (Size[4096])\n      }\n      layers.22.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.22.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.8 TransformerBlock() = {\n      layers.8.attention AttentionLayer() = {\n        layers.8.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.8.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.8.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.8.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.8.feed_forward FeedForward() = {\n        layers.8.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.8.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.8.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.8.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.8.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.8.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.8.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.8.ffn_norm.weight (Size[4096])\n      }\n      layers.8.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.8.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.23 TransformerBlock() = {\n      layers.23.attention AttentionLayer() = {\n        layers.23.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.23.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.23.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.23.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.23.feed_forward FeedForward() = {\n        layers.23.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.23.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.23.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.23.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.23.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.23.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.23.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.23.ffn_norm.weight (Size[4096])\n      }\n      layers.23.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.23.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.9 TransformerBlock() = {\n      layers.9.attention AttentionLayer() = {\n        layers.9.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.9.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.9.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.9.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.9.feed_forward FeedForward() = {\n        layers.9.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.9.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.9.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.9.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.9.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.9.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.9.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.9.ffn_norm.weight (Size[4096])\n      }\n      layers.9.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.9.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.10 TransformerBlock() = {\n      layers.10.attention AttentionLayer() = {\n        layers.10.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.10.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.10.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.10.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.10.feed_forward FeedForward() = {\n        layers.10.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.10.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.10.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.10.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.10.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.10.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.10.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.10.ffn_norm.weight (Size[4096])\n      }\n      layers.10.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.10.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.11 TransformerBlock() = {\n      layers.11.attention AttentionLayer() = {\n        layers.11.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.11.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.11.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.11.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.11.feed_forward FeedForward() = {\n        layers.11.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.11.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.11.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.11.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.11.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.11.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.11.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.11.ffn_norm.weight (Size[4096])\n      }\n      layers.11.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.11.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.12 TransformerBlock() = {\n      layers.12.attention AttentionLayer() = {\n        layers.12.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.12.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.12.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.12.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.12.feed_forward FeedForward() = {\n        layers.12.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.12.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.12.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.12.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.12.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.12.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.12.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.12.ffn_norm.weight (Size[4096])\n      }\n      layers.12.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.12.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.13 TransformerBlock() = {\n      layers.13.attention AttentionLayer() = {\n        layers.13.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.13.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.13.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.13.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.13.feed_forward FeedForward() = {\n        layers.13.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.13.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.13.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.13.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.13.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.13.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.13.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.13.ffn_norm.weight (Size[4096])\n      }\n      layers.13.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.13.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.14 TransformerBlock() = {\n      layers.14.attention AttentionLayer() = {\n        layers.14.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.14.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.14.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.14.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.14.feed_forward FeedForward() = {\n        layers.14.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.14.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.14.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.14.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.14.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.14.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.14.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.14.ffn_norm.weight (Size[4096])\n      }\n      layers.14.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.14.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.15 TransformerBlock() = {\n      layers.15.attention AttentionLayer() = {\n        layers.15.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.15.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.15.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.15.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.15.feed_forward FeedForward() = {\n        layers.15.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.15.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.15.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.15.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.15.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.15.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.15.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.15.ffn_norm.weight (Size[4096])\n      }\n      layers.15.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.15.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.16 TransformerBlock() = {\n      layers.16.attention AttentionLayer() = {\n        layers.16.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.16.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.16.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.16.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.16.feed_forward FeedForward() = {\n        layers.16.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.16.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.16.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.16.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.16.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.16.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.16.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.16.ffn_norm.weight (Size[4096])\n      }\n      layers.16.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.16.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.17 TransformerBlock() = {\n      layers.17.attention AttentionLayer() = {\n        layers.17.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.17.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.17.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.17.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.17.feed_forward FeedForward() = {\n        layers.17.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.17.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.17.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.17.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.17.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.17.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.17.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.17.ffn_norm.weight (Size[4096])\n      }\n      layers.17.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.17.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.18 TransformerBlock() = {\n      layers.18.attention AttentionLayer() = {\n        layers.18.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.18.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.18.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.18.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.18.feed_forward FeedForward() = {\n        layers.18.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.18.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.18.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.18.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.18.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.18.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.18.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.18.ffn_norm.weight (Size[4096])\n      }\n      layers.18.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.18.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.19 TransformerBlock() = {\n      layers.19.attention AttentionLayer() = {\n        layers.19.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.19.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.19.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.19.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.19.feed_forward FeedForward() = {\n        layers.19.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.19.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.19.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.19.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.19.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.19.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.19.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.19.ffn_norm.weight (Size[4096])\n      }\n      layers.19.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.19.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.20 TransformerBlock() = {\n      layers.20.attention AttentionLayer() = {\n        layers.20.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.20.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.20.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.20.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.20.feed_forward FeedForward() = {\n        layers.20.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.20.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.20.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.20.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.20.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.20.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.20.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.20.ffn_norm.weight (Size[4096])\n      }\n      layers.20.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.20.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.21 TransformerBlock() = {\n      layers.21.attention AttentionLayer() = {\n        layers.21.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.21.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.21.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.21.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.21.feed_forward FeedForward() = {\n        layers.21.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.21.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.21.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.21.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.21.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.21.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.21.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.21.ffn_norm.weight (Size[4096])\n      }\n      layers.21.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.21.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.24 TransformerBlock() = {\n      layers.24.attention AttentionLayer() = {\n        layers.24.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.24.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.24.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.24.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.24.feed_forward FeedForward() = {\n        layers.24.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.24.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.24.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.24.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.24.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.24.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.24.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.24.ffn_norm.weight (Size[4096])\n      }\n      layers.24.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.24.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.25 TransformerBlock() = {\n      layers.25.attention AttentionLayer() = {\n        layers.25.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.25.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.25.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.25.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.25.feed_forward FeedForward() = {\n        layers.25.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.25.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.25.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.25.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.25.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.25.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.25.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.25.ffn_norm.weight (Size[4096])\n      }\n      layers.25.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.25.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.26 TransformerBlock() = {\n      layers.26.attention AttentionLayer() = {\n        layers.26.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.26.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.26.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.26.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.26.feed_forward FeedForward() = {\n        layers.26.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.26.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.26.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.26.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.26.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.26.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.26.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.26.ffn_norm.weight (Size[4096])\n      }\n      layers.26.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.26.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.27 TransformerBlock() = {\n      layers.27.attention AttentionLayer() = {\n        layers.27.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.27.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.27.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.27.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.27.feed_forward FeedForward() = {\n        layers.27.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.27.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.27.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.27.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.27.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.27.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.27.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.27.ffn_norm.weight (Size[4096])\n      }\n      layers.27.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.27.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.30 TransformerBlock() = {\n      layers.30.attention AttentionLayer() = {\n        layers.30.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.30.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.30.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.30.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.30.feed_forward FeedForward() = {\n        layers.30.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.30.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.30.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.30.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.30.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.30.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.30.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.30.ffn_norm.weight (Size[4096])\n      }\n      layers.30.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.30.attention_norm.weight (Size[4096])\n      }\n    }\n    layers.31 TransformerBlock() = {\n      layers.31.attention AttentionLayer() = {\n        layers.31.attention.wqkv Linear(in_feature[4096], out_feature[1920]) = {\n          layers.31.attention.wqkv.weight (Size[1920, 4096])\n        }\n        layers.31.attention.wo Linear(in_feature[4096], out_feature[4096]) = {\n          layers.31.attention.wo.weight (Size[4096, 4096])\n        }\n      }\n      layers.31.feed_forward FeedForward() = {\n        layers.31.feed_forward.w1 Linear(in_feature[4096], out_feature[1]) = {\n          layers.31.feed_forward.w1.weight (Size[1, 4096])\n        }\n        layers.31.feed_forward.w3 Linear(in_feature[4096], out_feature[1]) = {\n          layers.31.feed_forward.w3.weight (Size[1, 4096])\n        }\n        layers.31.feed_forward.w2 Linear(in_feature[1], out_feature[4096]) = {\n          layers.31.feed_forward.w2.weight (Size[4096, 1])\n        }\n      }\n      layers.31.ffn_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.31.ffn_norm.weight (Size[4096])\n      }\n      layers.31.attention_norm RMSNorm(dim[4096], eps[1e-05]) = {\n        layers.31.attention_norm.weight (Size[4096])\n      }\n    }\n  }\n  norm RMSNorm(dim[4096], eps[1e-05]) = {\n    norm.weight (Size[4096])\n  }\n  output Linear(in_feature[4096], out_feature[32000]) = {\n    output.weight (Size[32000, 4096])\n  }\n  freqs_cis (Size[2048, 64])\n  causal_mask (Size[2048, 2048])\n}"
  },
  {
    "path": "libdlvoicecodec/LibDLVoiceCodec/base.cpp",
    "content": "#include \"base.h\""
  },
  {
    "path": "libdlvoicecodec/LibDLVoiceCodec/base.h",
    "content": "#pragma once\n#include <cstdint>\n#include <string>\n#include <vector>\n#include <iostream>\n#include <unordered_map>\n#define LibDLVoiceCodecBegin namespace libdlvcodec {\n#define LibDLVoiceCodecEnd }\n#define LIBDVCND [[nodiscard]]\n\n#define LibDLVoiceCodecThrow(message) throw std::exception((std::string(\"[At \\\"\") + __FILE__ + \"\\\" Line \" + std::to_string(__LINE__) + \"]\\n\" + (message)).c_str())\n\nLibDLVoiceCodecBegin\n\nusing int8 = int8_t;\nusing int16 = int16_t;\nusing int32 = int32_t;\nusing int64 = int64_t;\nusing float32 = float;\nusing float64 = double;\nusing byte = unsigned char;\nusing lpvoid = void*;\nusing uint8 = uint8_t;\nusing uint16 = uint16_t;\nusing uint32 = uint32_t;\nusing uint64 = uint64_t;\n\nclass TensorView;\nclass Tensor;\n\nconst std::unordered_map<std::string, size_t> __Dtype {{\"int8\", 1}, { \"int16\", 2 }, { \"int32\", 4 }, { \"int64\", 8 },\n\t{ \"float8\", 1 }, { \"float16\", 2 }, { \"bfloat16\", 2 }, { \"float32\", 4 }, { \"float64\", 8 }, { \"bool\", 1 } };\n\ntemplate <class _Ty, class _Alloc = std::allocator<_Ty>>\nusing MResource = std::vector<_Ty, _Alloc>;\n\ntemplate<typename T>\nstd::ostream& operator<<(std::ostream& _Stream, const std::vector<T>& _Data)\n{\n\t_Stream << '[';\n\tfor (const auto& i : _Data)\n\t\t_Stream << i << \", \";\n\t_Stream << \"]\\n\";\n\treturn _Stream;\n}\n\nclass FileWrapper\n{\npublic:\n\tFileWrapper() = default;\n\t~FileWrapper()\n\t{\n\t\tif (file_)\n\t\t\tfclose(file_);\n\t\tfile_ = nullptr;\n\t}\n\tFileWrapper(const FileWrapper& _Left) = delete;\n\tFileWrapper& operator=(const FileWrapper& _Left) = delete;\n\tFileWrapper(FileWrapper&& _Right) noexcept\n\t{\n\t\tfile_ = _Right.file_;\n\t\t_Right.file_ = nullptr;\n\t}\n\tFileWrapper& operator=(FileWrapper&& _Right) noexcept\n\t{\n\t\tfile_ = _Right.file_;\n\t\t_Right.file_ = nullptr;\n\t\treturn *this;\n\t}\n\tvoid open(const std::wstring& _Path, const std::wstring& _Mode)\n\t{\n#ifdef _WIN32\n\t\t_wfopen_s(&file_, _Path.c_str(), _Mode.c_str());\n#else\n\t\tfile_ = _wfopen(_Path.c_str(), _Mode.c_str());\n#endif\n\t}\n\toperator FILE* () const\n\t{\n\t\treturn file_;\n\t}\n\tLIBDVCND bool enabled() const\n\t{\n\t\treturn file_;\n\t}\nprivate:\n\tFILE* file_ = nullptr;\n};\n\nLibDLVoiceCodecEnd"
  },
  {
    "path": "libdlvoicecodec/LibDLVoiceCodec/operator.cpp",
    "content": "#include \"operator.h\"\n#include \"value.h\"\n#include <cblas.h>\n\nLibDLVoiceCodecBegin\n\nLibDLVoiceCodecEnd"
  },
  {
    "path": "libdlvoicecodec/LibDLVoiceCodec/operator.h",
    "content": "#pragma once\n#include \"base.h\"\n\nLibDLVoiceCodecBegin\nTensor equal(const Tensor& _A, const Tensor& _B);\nTensor add(const Tensor& _A, const Tensor& _B);\nTensor sub(const Tensor& _A, const Tensor& _B);\nTensor mul(const Tensor& _A, const Tensor& _B);\nTensor div(const Tensor& _A, const Tensor& _B);\nvoid selfAdd(Tensor& _Self, const Tensor& _O);\nvoid selfSub(Tensor& _Self, const Tensor& _O);\nvoid selfMul(Tensor& _Self, const Tensor& _O);\nvoid selfDiv(Tensor& _Self, const Tensor& _O);\nTensor matmul(const Tensor& _A, const Tensor& _B);\nTensor conv1d(const Tensor& _Input, const Tensor& _Weight, const Tensor& _Bias,\n\tint64 _Stride = 1, int64 _Padding = 0, int64 _Dilation = 1, int64 _Groups = 1);\nTensor conv2d(const Tensor& _Input, const Tensor& _Weight, const Tensor& _Bias,\n\tint64 _Stride = 1, int64 _Padding = 0, int64 _Dilation = 1, int64 _Groups = 1);\nTensor conv3d(const Tensor& _Input, const Tensor& _Weight, const Tensor& _Bias,\n\tint64 _Stride = 1, int64 _Padding = 0, int64 _Dilation = 1, int64 _Groups = 1);\nTensor conv_transpose1d(const Tensor& _Input, const Tensor& _Weight, const Tensor& _Bias,\n\tint64 _Stride = 1, int64 _Padding = 0, int64 _OutputPadding = 0, int64 _Dilation = 1, int64 _Groups = 1);\nTensor conv_transpose2d(const Tensor& _Input, const Tensor& _Weight, const Tensor& _Bias,\n\tint64 _Stride = 1, int64 _Padding = 0, int64 _OutputPadding = 0, int64 _Dilation = 1, int64 _Groups = 1);\nTensor conv_transpose3d(const Tensor& _Input, const Tensor& _Weight, const Tensor& _Bias,\n\tint64 _Stride = 1, int64 _Padding = 0, int64 _OutputPadding = 0, int64 _Dilation = 1, int64 _Groups = 1);\nLibDLVoiceCodecEnd"
  },
  {
    "path": "libdlvoicecodec/LibDLVoiceCodec/value.cpp",
    "content": "#include \"value.h\"\n#include <random>\n\nLibDLVoiceCodecBegin\nValue& Value::load(const std::wstring& _Path)\n{\n\tFileWrapper file;\n\tfile.open(_Path, L\"rb\");\n\tif (!file.enabled())\n\t\tLibDLVoiceCodecThrow(\"Failed to open file!\");\n\tchar Header[4];\n\tfread(Header, 1, 4, file);\n\tif (Header[0] != 'L' || Header[1] != 'S' || Header[2] != 'B' || Header[3] != 'V')\n\t\tLibDLVoiceCodecThrow(\"File does not recognize!\");\n\tsize_t MemberNameSize = 0;\n\tWeightDict weight;\n\tchar MemberName[1025];\n\t/*\n\t\tMemberNameSize          (size_t)\n\t\tMemberName              (char[MemberNameSize])\n\t\t_WeightData.Size        (size_t)\n\t\t_WeightData.ShapeSize   (size_t)\n\t\t_WeightData.Shape       (int64_t[_WeightData.ShapeSize])\n\t\t_WeightData.Data        (byte[_WeightData.Size])\n\t */\n\twhile (fread(&MemberNameSize, 1, sizeof(size_t), file) == sizeof(size_t))\n\t{\n\t\tif (MemberNameSize == 0)\n\t\t\tLibDLVoiceCodecThrow(\"Size of attrib name must higer than 0!\");\n\t\tif (MemberNameSize > 1024)\n\t\t\tLibDLVoiceCodecThrow(\"Size of attrib name must lower than 1024!\");\n\t\tif (fread(MemberName, 1, MemberNameSize, file) != MemberNameSize)\n\t\t\tLibDLVoiceCodecThrow(\"Unexpected EOF!\");\n\t\tMemberName[MemberNameSize] = 0;\n\t\tstd::string AttribName = MemberName;\n\t\tif (weight.find(AttribName) != weight.end())\n\t\t\tcontinue;\n\n\t\tWeightData _WeightData;\n\n\t\tif (fread(&_WeightData.Size, 1, sizeof(size_t), file) != sizeof(size_t))\n\t\t\tLibDLVoiceCodecThrow(\"Unexpected EOF!\");\n\t\tif (_WeightData.Size == 0)\n\t\t\tcontinue;\n\n\t\tif (fread(&_WeightData.ShapeSize, 1, sizeof(size_t), file) != sizeof(size_t))\n\t\t\tLibDLVoiceCodecThrow(\"Unexpected EOF!\");\n\t\tif (_WeightData.ShapeSize == 0)\n\t\t\tcontinue;\n\n\t\tsize_t __SIZE = sizeof(int64_t) * _WeightData.ShapeSize;\n\t\t_WeightData.Shape = std::vector<int64_t>(_WeightData.ShapeSize);\n\t\tif (fread(_WeightData.Shape.data(), 1, __SIZE, file) != __SIZE)\n\t\t\tLibDLVoiceCodecThrow(\"Unexpected EOF!\");\n\n\t\t__SIZE = _WeightData.Size;\n\t\t_WeightData.Data = MResource<byte>(_WeightData.Size);\n\t\tif (fread(_WeightData.Data.data(), 1, __SIZE, file) != __SIZE)\n\t\t\tLibDLVoiceCodecThrow(\"Unexpected EOF!\");\n\n\t\tweight[AttribName] = std::move(_WeightData);\n\t}\n\tloadData(weight);\n\treturn *this;\n}\n\nValue& Value::save(const std::wstring& _Path)\n{\n\tFileWrapper file;\n\tfile.open(_Path, L\"rb\");\n\tif (!file.enabled())\n\t\tLibDLVoiceCodecThrow(\"Failed to open file!\");\n\tconstexpr char Header[5] = \"LSBV\";\n\tfwrite(Header, 1, 4, file);\n\tsaveData(file);\n\treturn *this;\n}\n\nvoid Value::loadData(WeightDict& _Dict)\n{\n\tLibDLVoiceCodecThrow(\"Not implemented error!\");\n}\n\nvoid Value::saveData(FileWrapper& _File)\n{\n\tLibDLVoiceCodecThrow(\"Not implemented error!\");\n}\n\nTensorView TensorData::operator[](int64_t index) const\n{\n\tif (index < 0)\n\t{\n\t\tif (index < -Shape_[0])\n\t\t\tLibDLVoiceCodecThrow(\"Index Out Of Range\");\n\t\tindex += Shape_[0];\n\t\tstd::vector<int64> NewShape{Shape_.begin() + 1, Shape_.end()};\n\t\tif (NewShape.empty())\n\t\t\tNewShape.emplace_back(1);\n\t\treturn { std::move(NewShape)  ,DataPtr_ + index * (step() * DTypeAligBytes_) };\n\t}\n\tif (index > Shape_[0])\n\t\tLibDLVoiceCodecThrow(\"Index Out Of Range\");\n\tstd::vector<int64> NewShape{Shape_.begin() + 1, Shape_.end()};\n\tif (NewShape.empty())\n\t\tNewShape.emplace_back(1);\n\treturn { std::move(NewShape)  ,DataPtr_ + index * (step() * DTypeAligBytes_) };\n}\n\ntemplate <typename _TypeName>\nTensorData& TensorData::operator=(const _TypeName& _Val)\n{\n\tassert(sizeof(_TypeName) == DTypeAligBytes_);\n\t//TODO\n\treturn *this;\n}\n\nvoid Module::loadData(WeightDict& _Dict)\n{\n\tfor(const auto& it : Layers_)\n\t{\n\t\tit.second->loadData(_Dict);\n\t}\n}\n\nvoid Module::saveData(FileWrapper& _File)\n{\n\tfor (const auto& it : Layers_)\n\t{\n\t\tit.second->saveData(_File);\n\t}\n}\n\nvoid Tensor::loadData(WeightDict& _Dict)\n{\n\tconst auto res = _Dict.find(RegName_);\n\tif (res != _Dict.end())\n\t{\n\t\tShape_ = res->second.Shape;\n\t\tsize_t TotalSize = 1;\n\t\tfor (const auto i : Shape_)\n\t\t\tTotalSize *= i;\n\t\tif (TotalSize * DTypeAligBytes_ != res->second.Size)\n\t\t\tLibDLVoiceCodecThrow(\"Expected size does not match actual size!\");\n\t\tData_ = std::move(res->second.Data);\n\t\tDataPtr_ = Data_.data();\n\t}\n}\n\nvoid Tensor::saveData(FileWrapper& _File)\n{\n\n}\n\nTensor::Tensor(const std::initializer_list<int64_t>& _Shape, const std::string& _Dtype, const std::string& _Name)\n{\n\tif (__Dtype.find(_Dtype) == __Dtype.end())\n\t\tLibDLVoiceCodecThrow(\"DType Not Recognized\");\n\tDTypeAligBytes_ = __Dtype.at(Type_);\n\tShape_ = _Shape;\n\tStep_ = std::vector(Shape_.size(), 0ui64);\n\tStep_.back() = DTypeAligBytes_;\n\tfor (size_t i = Step_.size() - 2; i != size_t(-1); --i)\n\t\tStep_[i] = Step_[i + 1] * Shape_[i + 1];\n\tTransopse_ = std::vector(Shape_.size(), 0i64);\n\tfor (size_t i = 1; i < Transopse_.size(); ++i)\n\t\tTransopse_[i] = Transopse_[i - 1] + 1;\n\n\tsize_t TotalSize = 1;\n\tfor (const auto i : Shape_)\n\t\tTotalSize *= i;\n\tif (TotalSize)\n\t\tData_ = MResource<byte>(DTypeAligBytes_ * TotalSize);\n\tRegName_ = _Name;\n\tMemOwner_ = true;\n\tDataPtr_ = Data_.data();\n\tThisPtr_ = Data_.data();\n\tType_ = _Dtype;\n}\n\nTensor::Tensor(const std::vector<int64_t>& _Shape, const std::string& _Dtype, const std::string& _Name)\n{\n\tif (__Dtype.find(_Dtype) == __Dtype.end())\n\t\tLibDLVoiceCodecThrow(\"DType Not Recognized\");\n\tDTypeAligBytes_ = __Dtype.at(Type_);\n\tShape_ = _Shape;\n\tStep_ = std::vector(Shape_.size(), 0ui64);\n\tStep_.back() = DTypeAligBytes_;\n\tfor (size_t i = Step_.size() - 2; i != size_t(-1); --i)\n\t\tStep_[i] = Step_[i + 1] * Shape_[i + 1];\n\tTransopse_ = std::vector(Shape_.size(), 0i64);\n\tfor (size_t i = 1; i < Transopse_.size(); ++i)\n\t\tTransopse_[i] = Transopse_[i - 1] + 1;\n\n\tsize_t TotalSize = 1;\n\tfor (const auto i : Shape_)\n\t\tTotalSize *= i;\n\tif (TotalSize)\n\t\tData_ = MResource<byte>(DTypeAligBytes_ * TotalSize);\n\tRegName_ = _Name;\n\tMemOwner_ = true;\n\tDataPtr_ = Data_.data();\n\tThisPtr_ = Data_.data();\n\tType_ = _Dtype;\n}\n\nTensor::Tensor(const Tensor& _Left)\n{\n\tShape_ = _Left.Shape_;\n\tData_ = _Left.Data_;\n\tStep_ = _Left.Step_;\n\tTransopse_ = _Left.Transopse_;\n\tRegName_ = _Left.RegName_;\n\tMemOwner_ = true;\n\tDataPtr_ = Data_.data();\n\tThisPtr_ = Data_.data();\n\tType_ = _Left.Type_;\n\tDTypeAligBytes_ = __Dtype.at(Type_);\n}\n\nTensor::Tensor(Tensor&& _Right) noexcept\n{\n\tShape_ = _Right.Shape_;\n\tData_ = std::move(_Right.Data_);\n\tStep_ = std::move(_Right.Step_);\n\tTransopse_ = std::move(_Right.Transopse_);\n\tRegName_ = _Right.RegName_;\n\tMemOwner_ = _Right.MemOwner_;\n\tDataPtr_ = Data_.data();\n\tThisPtr_ = Data_.data();\n\tType_ = _Right.Type_;\n\tDTypeAligBytes_ = __Dtype.at(Type_);\n}\n\nTensor& Tensor::operator=(const Tensor& _Left)\n{\n\tif (&_Left == this)\n\t\treturn *this;\n\tShape_ = _Left.Shape_;\n\tData_ = _Left.Data_;\n\tStep_ = _Left.Step_;\n\tTransopse_ = _Left.Transopse_;\n\tRegName_ = _Left.RegName_;\n\tMemOwner_ = true;\n\tDataPtr_ = Data_.data();\n\tThisPtr_ = Data_.data();\n\tType_ = _Left.Type_;\n\tDTypeAligBytes_ = __Dtype.at(Type_);\n\treturn *this;\n}\n\nTensor& Tensor::operator=(Tensor&& _Right) noexcept\n{\n\tShape_ = _Right.Shape_;\n\tData_ = std::move(_Right.Data_);\n\tStep_ = std::move(_Right.Step_);\n\tTransopse_ = std::move(_Right.Transopse_);\n\tRegName_ = _Right.RegName_;\n\tMemOwner_ = _Right.MemOwner_;\n\tDataPtr_ = Data_.data();\n\tThisPtr_ = Data_.data();\n\tType_ = _Right.Type_;\n\tDTypeAligBytes_ = __Dtype.at(Type_);\n\treturn *this;\n}\n\ntemplate<typename __TY>\nvoid AssignPtr(__TY* Begin, __TY* End, __TY Val)\n{\n\twhile (Begin != End)\n\t\t*(Begin++) = Val;\n}\n\ntemplate<typename __TY>\nvoid AssignPtr(__TY* Begin, __TY* End, __TY(*Val)())\n{\n\twhile (Begin != End)\n\t\t*(Begin++) = Val();\n}\n\nTensor Tensor::zeros(const std::vector<int64_t>& _Shape, const std::string& _Dtype, const std::string& _Name)\n{\n\tTensor Output{ _Shape ,_Dtype, _Name };\n\tmemset(Output.Data_.data(), 0, Output.Data_.size());\n\treturn Output;\n}\n\nTensor Tensor::zeros_like(const Tensor& _O)\n{\n\tTensor Output{ _O.shape() ,_O.dtype(), _O.RegName_ };\n\tmemset(Output.Data_.data(), 0, Output.Data_.size());\n\treturn Output;\n}\n\nTensor Tensor::ones(const std::vector<int64_t>& _Shape, const std::string& _Dtype, const std::string& _Name)\n{\n\tTensor Output{ _Shape ,_Dtype, _Name };\n\tif (Output.Type_ == \"int8\")\n\t\tAssignPtr(Output.buf_begin<int8>(), Output.buf_end<int8>(), int8(1));\n\telse if (Output.Type_ == \"int16\")\n\t\tAssignPtr(Output.buf_begin<int16>(), Output.buf_end<int16>(), 1i16);\n\telse if (Output.Type_ == \"int32\")\n\t\tAssignPtr(Output.buf_begin<int32>(), Output.buf_end<int32>(), 1i32);\n\telse if (Output.Type_ == \"int64\")\n\t\tAssignPtr(Output.buf_begin<int64>(), Output.buf_end<int64>(), 1i64);\n\telse if (Output.Type_ == \"float8\")\n\t\t;\n\telse if (Output.Type_ == \"float16\")\n\t\t;\n\telse if (Output.Type_ == \"bfloat16\")\n\t\t;\n\telse if (Output.Type_ == \"float32\")\n\t\tAssignPtr(Output.buf_begin<float32>(), Output.buf_end<float32>(), 1.f);\n\telse if (Output.Type_ == \"float64\")\n\t\tAssignPtr(Output.buf_begin<float64>(), Output.buf_end<float64>(), 1.);\n\telse\n\t\tAssignPtr(Output.buf_begin<bool>(), Output.buf_end<bool>(), true);\n\treturn Output;\n}\n\nTensor Tensor::ones_like(const Tensor& _O)\n{\n\treturn ones(_O.Shape_, _O.Type_, _O.RegName_);\n}\n\nTensor Tensor::rand(const std::vector<int64_t>& _Shape, int _Seed, const std::string& _Dtype, const std::string& _Name)\n{\n\treturn {};\n}\n\nTensor Tensor::rand_like(const Tensor& _O, int _Seed)\n{\n\treturn rand(_O.Shape_, _Seed, _O.Type_, _O.RegName_);\n}\n\nTensor Tensor::randn(const std::vector<int64_t>& _Shape, int _Seed, const std::string& _Dtype, const std::string& _Name)\n{\n\treturn {};\n}\n\nTensor Tensor::randn_like(const Tensor& _O, int _Seed)\n{\n\treturn randn(_O.Shape_, _Seed, _O.Type_, _O.RegName_);\n}\nLibDLVoiceCodecEnd"
  },
  {
    "path": "libdlvoicecodec/LibDLVoiceCodec/value.h",
    "content": "#pragma once\n#include <cassert>\n#include <vector>\n#include \"base.h\"\n\n#define RegLayer(ModuleName, MemberName, ...) ModuleName MemberName{this, #MemberName, __VA_ARGS__}\n\nLibDLVoiceCodecBegin\n\nstruct WeightData\n{\n\tsize_t Size = 0;\n\tsize_t ShapeSize = 0;\n\tstd::vector<int64_t> Shape;\n\tMResource<byte> Data;\n};\n\nclass Value\n{\npublic:\n\tValue() = default;\n\tValue(const Value& _Left) = delete;\n\tvirtual ~Value() = default;\n\tusing WeightDict = std::unordered_map<std::string, WeightData>;\n\nprotected:\n\tstd::string RegName_;\n\npublic:\n\tValue& load(const std::wstring& _Path);\n\tValue& save(const std::wstring& _Path);\n\tvirtual void loadData(WeightDict& _Dict);\n\tvirtual void saveData(FileWrapper& _File);\n};\n\nclass Module : public Value\n{\npublic:\n\tModule(Module* _Parent, const std::string& _Name)\n\t{\n\t\tif (_Parent != nullptr)\n\t\t{\n\t\t\tRegName_ = _Parent->RegName_ + \".\" + _Name;\n\t\t\t_Parent->Layers_[RegName_] = this;\n\t\t}\n\t\telse\n\t\t\tRegName_ = _Name;\n\t}\n\t~Module() override = default;\nprivate:\n\tstd::unordered_map<std::string, Value*> Layers_;\n\npublic:\n\tvoid loadData(WeightDict& _Dict) override;\n\tvoid saveData(FileWrapper& _File) override;\n};\n\nclass TensorData : public Value\n{\npublic:\n\tTensorData() = default;\n\tTensorData(const TensorData& _Left) = delete;\n\tTensorData(TensorData&& _Right) = delete;\n\t~TensorData() override = default;\n\nprotected:\n\tstd::vector<int64_t> Shape_;\n\tstd::vector<uint64_t> Step_;\n\tstd::vector<int64_t> Transopse_;\n\tsize_t DTypeAligBytes_ = 4;\n\tstd::string Type_ = \"float32\";\n\tbool MemOwner_ = false;\n\npublic:\n\tLIBDVCND const std::string& dtype() const { return Type_; }\n\tLIBDVCND const std::vector<int64_t>& shape() const { return Shape_; }\n\tLIBDVCND size_t size() const {\n\t\tif (Shape_.empty()) return 0;\n\t\treturn Shape_[0];\n\t}\n\tLIBDVCND size_t total_size() const {\n\t\tif (Shape_.empty()) return 0;\n\t\tsize_t ttsize = 1;\n\t\tfor (const auto i : Shape_)\n\t\t\tttsize *= i;\n\t\treturn ttsize;\n\t}\n\tLIBDVCND size_t buf_size() const {\n\t\treturn total_size() * DTypeAligBytes_;\n\t}\n\tLIBDVCND size_t step() const {\n\t\tif (Step_.empty()) return 0;\n\t\treturn Step_[0];\n\t}\n\tLIBDVCND byte* data() const { return DataPtr_; }\n\ttemplate<typename _ValueType>\n\tLIBDVCND _ValueType& item()\n\t{\n\t\tassert(sizeof(_ValueType) == DTypeAligBytes_);\n\t\treturn *(_ValueType*)(ThisPtr_);\n\t}\n\nprotected:\n\tbyte* DataPtr_ = nullptr;\n\tbyte* ThisPtr_ = nullptr;\n\npublic:\n\tLIBDVCND TensorView operator[](int64_t index) const;\n\ttemplate <typename _TypeName>\n\tLIBDVCND TensorData& operator=(const _TypeName& _Val);\n};\n\nclass Tensor : public TensorData\n{\npublic:\n\tusing DType = float;\n\tTensor() = default;\n\tTensor(const std::initializer_list<int64_t>& _Shape, const std::string& _Dtype = \"float32\", const std::string& _Name = \"Tensor\");\n\tTensor(const std::vector<int64_t>& _Shape, const std::string& _Dtype = \"float32\", const std::string& _Name = \"Tensor\");\n\tTensor(const Tensor& _Left);\n\tTensor(Tensor&& _Right) noexcept;\n\t~Tensor() override = default;\n\tTensor& operator=(const Tensor& _Left);\n\tTensor& operator=(Tensor&& _Right) noexcept;\n\nprotected:\n\tMResource<byte> Data_;\n\nprivate:\n\ttemplate<typename _ValueType>\n\tLIBDVCND _ValueType* buf_begin()\n\t{\n\t\tassert(sizeof(_ValueType) == DTypeAligBytes_);\n\t\treturn (_ValueType*)(Data_.begin()._Ptr);\n\t}\n\ttemplate<typename _ValueType>\n\tLIBDVCND _ValueType* buf_end()\n\t{\n\t\tassert(sizeof(_ValueType) == DTypeAligBytes_);\n\t\treturn (_ValueType*)(Data_.end()._Ptr);\n\t}\n\npublic:\n\tstatic Tensor zeros(const std::vector<int64_t>& _Shape, const std::string& _Dtype = \"float32\", const std::string& _Name = \"Tensor\");\n\tstatic Tensor zeros_like(const Tensor& _O);\n\tstatic Tensor ones(const std::vector<int64_t>& _Shape, const std::string& _Dtype = \"float32\", const std::string& _Name = \"Tensor\");\n\tstatic Tensor ones_like(const Tensor& _O);\n\tstatic Tensor rand(const std::vector<int64_t>& _Shape, int _Seed = 114514, const std::string& _Dtype = \"float32\", const std::string& _Name = \"Tensor\");\n\tstatic Tensor rand_like(const Tensor& _O, int _Seed = 114514);\n\tstatic Tensor randn(const std::vector<int64_t>& _Shape, int _Seed = 114514, const std::string& _Dtype = \"float32\", const std::string& _Name = \"Tensor\");\n\tstatic Tensor randn_like(const Tensor& _O, int _Seed = 114514);\n\ttemplate <typename __TY>\n\tstatic Tensor arange(__TY _Begin, __TY _End, __TY _Step, const std::string& _Dtype = \"float32\", const std::string& _Name = \"Tensor\")\n\t{\n\t\tif (__Dtype.find(_Dtype) == __Dtype.end())\n\t\t\tLibDLVoiceCodecThrow(\"DType Not Recognized\");\n\t\tif (sizeof(__TY) != __Dtype.at(_Dtype))\n\t\t\tLibDLVoiceCodecThrow(\"Size Of DType MisMatch\");\n\t\tTensor ret;\n\t\tret.Type_ = _Dtype;\n\t\tret.RegName_ = _Name;\n\t\tret.DTypeAligBytes_ = __Dtype.at(ret.Type_);\n\t\tret.MemOwner_ = true;\n\t\tconst auto diff = _End - _Begin;\n\t\tconst auto len = size_t(diff / _Step);\n\t\tif (len <= 0)\n\t\t\tLibDLVoiceCodecThrow(\"The Positive And Negative Of Both _End - _Begin And _Step Must Be The Same\");\n\n\t\tret.Shape_ = { len };\n\t\tret.Data_ = MResource<byte>(len * ret.DTypeAligBytes_);\n\t\tret.Step_ = { ret.DTypeAligBytes_ };\n\t\tret.Transopse_ = { 0 };\n\t\tret.DataPtr_ = ret.Data_.data();\n\t\tret.ThisPtr_ = ret.Data_.data();\n\n\t\t__TY* pdata = ret.DataPtr_;\n\t\t*(pdata++) = _Begin;\n\t\tfor (size_t i = 1; i < len; ++i)\n\t\t{\n\t\t\t*pdata = *(pdata - 1) + _Step;\n\t\t\t++pdata;\n\t\t}\n\n\t\treturn ret;\n\t}\n\ttemplate <typename __TY>\n\tstatic Tensor linspace(__TY _Begin, __TY _End, size_t _Len, const std::string& _Dtype = \"float32\", const std::string& _Name = \"Tensor\")\n\t{\n\t\tif (__Dtype.find(_Dtype) == __Dtype.end())\n\t\t\tLibDLVoiceCodecThrow(\"DType Not Recognized\");\n\t\tif (sizeof(__TY) != __Dtype.at(_Dtype))\n\t\t\tLibDLVoiceCodecThrow(\"Size Of DType MisMatch\");\n\t\tTensor ret;\n\t\tret.Type_ = _Dtype;\n\t\tret.RegName_ = _Name;\n\t\tret.DTypeAligBytes_ = __Dtype.at(ret.Type_);\n\t\tret.MemOwner_ = true;\n\t\tconst auto diff = _End - _Begin;\n\t\tconst auto step = size_t(diff / __TY(_Len));\n\n\t\tret.Shape_ = { _Len };\n\t\tret.Data_ = MResource<byte>(_Len * ret.DTypeAligBytes_);\n\t\tret.Step_ = { ret.DTypeAligBytes_ };\n\t\tret.Transopse_ = { 0 };\n\t\tret.DataPtr_ = ret.Data_.data();\n\t\tret.ThisPtr_ = ret.Data_.data();\n\n\t\t__TY* pdata = ret.DataPtr_;\n\t\t*(pdata++) = _Begin;\n\t\tfor (size_t i = 1; i < _Len; ++i)\n\t\t{\n\t\t\t*pdata = *(pdata - 1) + step;\n\t\t\t++pdata;\n\t\t}\n\n\t\treturn ret;\n\t}\n\nprotected:\n\tvoid loadData(WeightDict& _Dict) override;\n\tvoid saveData(FileWrapper& _File) override;\n};\n\nclass TensorView : public TensorData\n{\npublic:\n\tTensorView() = default;\n\t~TensorView() override = default;\n\tTensorView(const Tensor& _T)\n\t{\n\t\tShape_ = _T.shape();\n\t\tDataPtr_ = _T.data();\n\t}\n\tTensorView(Tensor&& _T) = delete;\n\tTensorView(const TensorView& _T)\n\t{\n\t\tShape_ = _T.shape();\n\t\tDataPtr_ = _T.data();\n\t}\n\tTensorView(TensorView&& _T) noexcept\n\t{\n\t\tShape_ = _T.shape();\n\t\tDataPtr_ = _T.data();\n\t}\n\tTensorView(const std::initializer_list<int64>& _Shape, byte* _DataPtr)\n\t{\n\t\tShape_ = _Shape;\n\t\tDataPtr_ = _DataPtr;\n\t}\n\tTensorView(const std::vector<int64>& _Shape, byte* _DataPtr)\n\t{\n\t\tShape_ = _Shape;\n\t\tDataPtr_ = _DataPtr;\n\t}\n\tTensorView(std::vector<int64>&& _Shape, byte* _DataPtr)\n\t{\n\t\tShape_ = _Shape;\n\t\tDataPtr_ = _DataPtr;\n\t}\n\tTensorView& operator=(const TensorView& _Left)\n\t{\n\t\tDataPtr_ = _Left.DataPtr_;\n\t\tShape_ = _Left.Shape_;\n\t\treturn *this;\n\t}\n\tTensorView& operator=(TensorView&& _Right) noexcept\n\t{\n\t\tDataPtr_ = _Right.DataPtr_;\n\t\tShape_ = _Right.Shape_;\n\t\treturn *this;\n\t}\n\tTensorView& operator=(const Tensor& _T)\n\t{\n\t\tShape_ = _T.shape();\n\t\tDataPtr_ = _T.data();\n\t\treturn *this;\n\t}\n\tTensorView& operator=(Tensor&& _T)\n\t{\n\t\tShape_ = _T.shape();\n\t\tDataPtr_ = _T.data();\n\t\treturn *this;\n\t}\n};\n\nLibDLVoiceCodecEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/AvCodec/AvCodeResample.h",
    "content": "﻿#pragma once\n#include <vector>\n#include <string>\n#include \"../StringPreprocess.hpp\"\n#include \"matlabfunctions.h\"\n#include \"../InferTools/inferTools.hpp\"\nextern \"C\" {\n#include \"libavcodec/avcodec.h\"\n#include \"libavformat/avformat.h\"\n#include \"libswscale/swscale.h\"\n#include \"libswresample/swresample.h\"\n#include \"libavutil/samplefmt.h\"\n}\n\nclass AudioPreprocess\n{\npublic:\n    struct WAV_HEADER {\n        char             RIFF[4] = { 'R','I','F','F' };              //RIFF标识\n        unsigned long    ChunkSize;                                  //文件大小-8\n        char             WAVE[4] = { 'W','A','V','E' };              //WAVE块\n        char             fmt[4] = { 'f','m','t',' ' };               //fmt块\n        unsigned long    Subchunk1Size;                              //fmt块大小\n        unsigned short   AudioFormat;                                //编码格式\n        unsigned short   NumOfChan;                                  //声道数\n        WAV_HEADER(unsigned long cs = 36, unsigned long sc1s = 16, unsigned short af = 1, unsigned short nc = 1) :ChunkSize(cs), Subchunk1Size(sc1s), AudioFormat(af), NumOfChan(nc) {}\n    };\n    static WAV_HEADER GetHeader(const std::wstring& path)\n    {\n        WAV_HEADER header;\n        char buf[1024];\n        FILE* stream;\n        _wfreopen_s(&stream, path.c_str(), L\"rb\", stderr);\n        if (stream == nullptr) {\n            throw (std::exception(\"Wav Load Error\"));\n        }\n        fread(buf, 1, 1024, stream);\n        int pos = 0;\n        while (pos < InferTools::Wav::HEAD_LENGTH) {\n            if ((buf[pos] == 'R') && (buf[pos + 1] == 'I') && (buf[pos + 2] == 'F') && (buf[pos + 3] == 'F')) {\n                pos += 4;\n                break;\n            }\n            ++pos;\n        }\n        if (pos >= InferTools::Wav::HEAD_LENGTH)\n            throw (std::exception(\"Don't order fried rice (annoyed)\"));\n        header.ChunkSize = *(int*)&buf[pos];\n        pos += 8;\n        while (pos < InferTools::Wav::HEAD_LENGTH) {\n            if ((buf[pos] == 'f') && (buf[pos + 1] == 'm') && (buf[pos + 2] == 't')) {\n                pos += 4;\n                break;\n            }\n            ++pos;\n        }\n        if (pos >= InferTools::Wav::HEAD_LENGTH)\n            throw (std::exception(\"Don't order fried rice (annoyed)\"));\n        header.Subchunk1Size = *(int*)&buf[pos];\n        pos += 4;\n        header.AudioFormat = *(short*)&buf[pos];\n        pos += 2;\n        header.NumOfChan = *(short*)&buf[pos];\n        if (stream != nullptr) {\n            fclose(stream);\n        }\n        return header;\n    }\n    static std::vector<double> arange(double start, double end, double step = 1.0, double div = 1.0)\n    {\n        std::vector<double> output;\n        while (start < end)\n        {\n            output.push_back(start / div);\n            start += step;\n        }\n        return output;\n    }\n    std::vector<short> codec(const std::wstring& path, int sr)\n\t{\n        //if (path.substr(path.rfind(L'.')) == L\".wav\")\n        //    return resample(path, sr);\n        std::vector<uint8_t> outData;\n        int ret = avformat_open_input(&avFormatContext, to_byte_string(path).c_str(), nullptr, nullptr);\n        if (ret != 0) {\n            LibDLVoiceCodecThrow((std::string(\"Can't Open Audio File [ErrCode]\")+std::to_string(ret)).c_str());\n        }\n        ret = avformat_find_stream_info(avFormatContext, nullptr);\n        if (ret < 0) {\n            LibDLVoiceCodecThrow(\"Can't Get Audio Info\");\n        }\n        int streamIndex = 0;\n        for (unsigned i = 0; i < avFormatContext->nb_streams; ++i) {\n        \tconst AVMediaType avMediaType = avFormatContext->streams[i]->codecpar->codec_type;\n            if (avMediaType == AVMEDIA_TYPE_AUDIO) {\n                streamIndex = static_cast<int>(i);\n            }\n        }\n        const AVCodecParameters* avCodecParameters = avFormatContext->streams[streamIndex]->codecpar;\n        const AVCodecID avCodecId = avCodecParameters->codec_id;\n        const AVCodec* avCodec = avcodec_find_decoder(avCodecId);\n        if (avCodec == nullptr)\n            LibDLVoiceCodecThrow(\"Don't order fried rice (annoyed)\");\n        if (avCodecContext == nullptr) {\n            LibDLVoiceCodecThrow(\"Can't Get Decoder Info\");\n        }\n        avcodec_parameters_to_context(avCodecContext, avCodecParameters);\n        ret = avcodec_open2(avCodecContext, avCodec, nullptr);\n        if (ret < 0) {\n            LibDLVoiceCodecThrow(\"Can't Open Decoder\");\n        }\n        packet = (AVPacket*)av_malloc(sizeof(AVPacket));\n        const AVSampleFormat inFormat = avCodecContext->sample_fmt;\n        constexpr AVSampleFormat  outFormat = AV_SAMPLE_FMT_S16;\n        const int inSampleRate = avCodecContext->sample_rate;\n        const int outSampleRate = sr;\n\n        const auto nSample = static_cast<size_t>(avFormatContext->duration * sr / AV_TIME_BASE);\n\n        uint64_t in_ch_layout = avCodecContext->channel_layout;\n        if (path.substr(path.rfind(L'.')) == L\".wav\")\n        {\n            const auto head = GetHeader(path);\n            if (head.NumOfChan == 1)\n                in_ch_layout = AV_CH_LAYOUT_MONO;\n            else if (head.NumOfChan == 2)\n                in_ch_layout = AV_CH_LAYOUT_STEREO;\n            else\n                LibDLVoiceCodecThrow(\"unsupported Channel Num\");\n        }\n        constexpr uint64_t out_ch_layout = AV_CH_LAYOUT_MONO;\n        swr_alloc_set_opts(swrContext, out_ch_layout, outFormat, outSampleRate,\n            static_cast<int64_t>(in_ch_layout), inFormat, inSampleRate, 0, nullptr\n        );\n        swr_init(swrContext);\n        const int outChannelCount = av_get_channel_layout_nb_channels(out_ch_layout);\n        int currentIndex = 0;\n        out_buffer = (uint8_t*)av_malloc(2ull * sr);\n        while (av_read_frame(avFormatContext, packet) >= 0) {\n            if (packet->stream_index == streamIndex) {\n                avcodec_send_packet(avCodecContext, packet);\n                ret = avcodec_receive_frame(avCodecContext, inFrame);\n                if (ret == 0) {\n                    swr_convert(swrContext, &out_buffer, 2ull * sr,\n                        (const uint8_t**)inFrame->data, inFrame->nb_samples);\n                    const int out_buffer_size = av_samples_get_buffer_size(nullptr, outChannelCount, (inFrame->nb_samples * sr / inSampleRate) - 1, outFormat, 1);\n                    outData.insert(outData.end(), out_buffer, out_buffer + out_buffer_size);\n                }\n                ++currentIndex;\n                av_packet_unref(packet);\n            }\n        }\n        //Wav outWav(static_cast<unsigned long>(sr), static_cast<unsigned long>(outData.size()), outData.data());\n        auto outWav = reinterpret_cast<int16_t*>(outData.data());\n        const auto RawWavLen = int64_t(outData.size()) / 2;\n        if (nSample != static_cast<size_t>(RawWavLen))\n        {\n            const double interpOff = static_cast<double>(RawWavLen) / static_cast<double>(nSample);\n            const auto x0 = arange(0.0, static_cast<double>(RawWavLen), 1.0, 1.0);\n            std::vector<double> y0(RawWavLen);\n            for (int64_t i = 0; i < RawWavLen; ++i)\n                y0[i] = outWav[i] ? static_cast<double>(outWav[i]) : NAN;\n            const auto yi = new double[nSample];\n        \tauto xi = arange(0.0, static_cast<double>(RawWavLen), interpOff, 1.0);\n            while (xi.size() < nSample)\n                xi.push_back(*(xi.end() - 1) + interpOff);\n            while (xi.size() > nSample)\n                xi.pop_back();\n            interp1(x0.data(), y0.data(), static_cast<int>(RawWavLen), xi.data(), static_cast<int>(nSample), yi);\n            std::vector<short> DataChun(nSample);\n            for (size_t i = 0; i < nSample; ++i)\n                DataChun[i] = isnan(yi[i]) ? 0i16 : static_cast<short>(yi[i]);\n            delete[] yi;\n            return DataChun;\n        }\n        release();\n        return { outWav , outWav + RawWavLen };\n\t}\n    void release()\n\t{\n        if (packet)\n\t        av_packet_free(&packet);\n        if (inFrame)\n            av_frame_free(&inFrame);\n        if (out_buffer)\n            av_free(out_buffer);\n        if (swrContext)\n            swr_free(&swrContext);\n        if (avCodecContext)\n            avcodec_close(avCodecContext);\n        if (avFormatContext)\n            avformat_close_input(&avFormatContext);\n        inFrame = nullptr;\n        out_buffer = nullptr;\n        swrContext = nullptr;\n        avCodecContext = nullptr;\n        avFormatContext = nullptr;\n        packet = nullptr;\n\t}\n    void init()\n\t{\n        inFrame = av_frame_alloc();\n        out_buffer = nullptr;\n        swrContext = swr_alloc();\n        avCodecContext = avcodec_alloc_context3(nullptr);\n        avFormatContext = avformat_alloc_context();\n        packet = nullptr;\n\t}\n    AudioPreprocess()\n\t{\n        inFrame = av_frame_alloc();\n        out_buffer = nullptr;\n        swrContext = swr_alloc();\n        avCodecContext = avcodec_alloc_context3(nullptr);\n        avFormatContext = avformat_alloc_context();\n        packet = nullptr;\n\t}\n    ~AudioPreprocess()\n\t{\n        release();\n\t}\nprivate:\n    AVFrame* inFrame;\n    uint8_t* out_buffer;\n    SwrContext* swrContext;\n    AVCodecContext* avCodecContext;\n    AVFormatContext* avFormatContext;\n    AVPacket* packet;\n};"
  },
  {
    "path": "libdlvoicecodec/Modules/AvCodec/Recorder.cpp",
    "content": "﻿#include \"Recorder.h\"\n\nMRecorder::~MRecorder()\n{\n    //释放录制线程\n    m_runing = false;\n    m_iscapture = true;\n    if (m_thread)\n    {\n        m_signal.notify_all();\n        m_thread->join();\n        delete m_thread;\n    }\n    //释放设备资源\n    if (m_event[0])\n    {\n        for (Mui::_m_byte i = 0; i < 2; i++)\n        {\n            SetEvent(m_event[i]);\n            CloseHandle(m_event[i]);\n        }\n    }\n    if (m_captureBuffer) m_captureBuffer->Release();\n    if (m_captureDriver) m_captureDriver->Release();\n    //释放队列数据\n    while (true)\n    {\n        const auto data = GetStreamData();\n        delete data;\n        if (!data)\n            break;\n    }\n}\n\nbool MRecorder::InitRecorder(std::wstring& error, Mui::_m_uint sampleRate, Mui::_m_byte channels, Mui::_m_byte bit, Mui::_m_uint fs)\n{\n    if (m_captureDriver && m_captureBuffer)\n    {\n        error = L\"Initialized\";\n        return false;\n    }\n\n    CoInitializeEx(nullptr, COINIT_MULTITHREADED);\n    //创建录音设备\n    HRESULT hr = DirectSoundCaptureCreate(nullptr, &m_captureDriver, nullptr);\n    if (FAILED(hr))\n    {\n        error = L\"DirectSoundCaptureCreate failed!\";\n        return false;\n    }\n\n    if(sampleRate != 0)\n\t\tm_sampleRate = sampleRate;\n    if(channels != 0)\n\t\tm_channels = channels;\n    if(bit != 0)\n\t\tm_bit = bit;\n\n    //创建录音缓冲区\n    m_blockAlign = 2 * m_channels;\n\n    WAVEFORMATEX wavFormatEx;\n    wavFormatEx.wFormatTag = WAVE_FORMAT_PCM;\n    wavFormatEx.nChannels = m_channels;\n    wavFormatEx.nSamplesPerSec = m_sampleRate;\n    wavFormatEx.nAvgBytesPerSec = m_sampleRate * m_blockAlign;\n    wavFormatEx.nBlockAlign = WORD(m_blockAlign);\n    wavFormatEx.wBitsPerSample = m_bit;\n\n    m_frameSize = fs*2;\n\n    DSCBUFFERDESC dsBufferDesc = { sizeof(DSCBUFFERDESC) };\n    dsBufferDesc.lpwfxFormat = &wavFormatEx;\n    dsBufferDesc.dwBufferBytes = m_frameSize * 2;\n    //dsBufferDesc.dwFlags = DSBCAPS_CTRLPOSITIONNOTIFY;\n\n    hr = m_captureDriver->CreateCaptureBuffer(&dsBufferDesc, &m_captureBuffer, nullptr);\n    if (FAILED(hr))\n    {\n        error = L\"DirectSoundCaptureCreate failed!\";\n        m_captureDriver->Release(); m_captureDriver = nullptr;\n        return false;\n    }\n    \n    //创建通知事件\n    IDirectSoundNotify* Notify = nullptr;\n    m_captureBuffer->QueryInterface(IID_IDirectSoundNotify, (LPVOID*)&Notify);\n\n    DSBPOSITIONNOTIFY notify[2] = { 0 };\n    int offset = int(m_frameSize - 1);\n    for (int i = 0; i < 2; i++) {\n        notify[i].dwOffset = offset;\n        m_event[i] = CreateEventW(nullptr, false, false, nullptr);\n        notify[i].hEventNotify = m_event[i];\n        offset += (int)m_frameSize;\n    }\n\n    Notify->SetNotificationPositions(2, notify);\n    Notify->Release();\n\n    //创建录制线程\n    m_runing = true;\n    m_iscapture = false;\n\n    m_thread = new std::thread(&MRecorder::CaptureThread, this);\n\n\treturn true;\n}\n\nbool MRecorder::Start()\n{\n    if(m_captureBuffer)\n    {\n        if (m_iscapture) \n            return true;\n\n        m_iscapture = true;\n        m_signal.notify_all();\n        return SUCCEEDED(m_captureBuffer->Start(DSBPLAY_LOOPING));\n    }\n    return false;\n}\n\nbool MRecorder::Stop()\n{\n    if(m_captureBuffer)\n    {\n        if (!m_iscapture)\n            return true;\n\n        m_iscapture = false;\n        return SUCCEEDED(m_captureBuffer->Stop());\n    }\n    return false;\n}\n\nMRecorder::PCMData* MRecorder::GetStreamData()\n{\n    PCMData* ret = nullptr;\n    m_queue.dequeue(ret);\n    return ret;\n}\n\nMui::_m_size MRecorder::GetDataSize()\n{\n    return Mui::_m_size(m_queue.size() * m_frameSize);\n}\n\nvoid MRecorder::CaptureThread()\n{\n    while (m_runing)\n    {\n        //休眠线程\n        if (!m_iscapture) {\n            std::unique_lock<std::mutex> lock(m_lock);\n            while (!m_iscapture) m_signal.wait(lock);\n        }\n\n        //等待通知事件\n        const DWORD res = WaitForMultipleObjects(2, m_event, FALSE, INFINITE);\n\n        if (!m_iscapture) continue;\n\n        if (res >= WAIT_OBJECT_0 && res <= WAIT_OBJECT_0 + 1) \n        {\n            auto data = new PCMData();\n            UCHAR* buffer = nullptr;\n            DWORD dwBufferSize = 0;\n            if (FAILED(m_captureBuffer->Lock(m_offsetNum * m_frameSize, m_frameSize, (LPVOID*)&buffer, &dwBufferSize, nullptr, nullptr, 0)))\n                continue;\n\n            data->data = new Mui::_m_byte[dwBufferSize];\n            data->size = dwBufferSize;\n            memcpy(data->data, buffer, dwBufferSize);\n            m_queue.enqueue(data);\n\n            m_captureBuffer->Unlock(buffer, dwBufferSize, nullptr, 0);\n\n            m_offsetNum++;\n            if (m_offsetNum == 2)\n                m_offsetNum = 0;\n        }\n    }\n}\n"
  },
  {
    "path": "libdlvoicecodec/Modules/AvCodec/Recorder.h",
    "content": "﻿#pragma once\n#include <dsound.h>\n#include <deque>\n#include <Mui_Base.h>\n\n#pragma comment(lib, \"dsound.lib\")\n\nclass MRecorder\n{\npublic:\n\tstruct PCMData\n\t{\n\t\tMui::_m_lpbyte data = nullptr;\n\t\tMui::_m_uint size = 0;\n\n\t\t~PCMData() { delete data; }\n\t};\n\n\tMRecorder() = default;\n\t~MRecorder();\n\n\t/*初始化录音器\n\t* @param out error - 错误信息输出\n\t* @param sampleRate - 采样率 为0则默认 44100 (最大支持44100)\n\t* @param channels - 声道数 为0则默认 2 (最大2声道立体声)\n\t* @param bit - 位数 为0则默认 16 (最大支持16位)\n\t*/\n\tbool InitRecorder(std::wstring& error, Mui::_m_uint sampleRate = 0, Mui::_m_byte channels = 0, Mui::_m_byte bit = 0, Mui::_m_uint fs = 0);\n\n\tbool Start();\n\n\tbool Stop();\n\n\t//获取一段已录制的PCM音频数据 nullptr则没有数据\n\tPCMData* GetStreamData();\n\n\t//获取总dataSize\n\tMui::_m_size GetDataSize();\n\n\t//获取采样率\n\tMui::_m_uint GetSampleRate() const { return m_sampleRate; }\n\n\t//获取声道数\n\tMui::_m_byte GetChannels() const { return m_channels; }\n\n\t//获取位数\n\tMui::_m_byte GetBitRate() const { return m_bit; }\n\n\t//获取音频帧尺寸\n\tMui::_m_uint GetFrameSize() const { return m_frameSize; }\n\n\t//获取BlockAlign\n\tMui::_m_uint GetBlockAlign() const { return m_blockAlign; }\n\nprivate:\n\t//音频参数设置\n\tMui::_m_uint m_sampleRate = 44100;\n\tMui::_m_byte m_channels = 2;\n\tMui::_m_byte m_bit = 16;\n\n\tMui::_m_uint m_frameSize = 0;\n\n\tMui::_m_uint m_blockAlign = 0;\n\n\tHANDLE m_event[2] = { nullptr };\n\n\tIDirectSoundCapture* m_captureDriver = nullptr;\n\tIDirectSoundCaptureBuffer* m_captureBuffer = nullptr;\n\n\t//录音线程相关\n\tstd::mutex m_lock;\n\tstd::condition_variable m_signal;\n\tstd::atomic_bool m_runing;\n\tstd::atomic_bool m_iscapture;\n\tstd::thread* m_thread = nullptr;\n\n\tMui::_m_uint m_offsetNum = 0;\n\n\tvoid CaptureThread();\n\n\t//录音数据\n\ttemplate <typename T>\n\tclass Queue\n\t{\n\t\tstd::deque<T> m_queue;\n\t\tstd::mutex m_mutex;\n\tpublic:\n\t\tQueue() = default;\n\n\t\tbool empty()\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\treturn m_queue.empty();\n\t\t}\n\t\tauto size()\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\treturn m_queue.size();\n\t\t}\n\t\tvoid enqueue(T& t)\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\tm_queue.push_back(t);\n\t\t}\n\t\tbool dequeue(T& t)\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\tif (m_queue.empty())\n\t\t\t\treturn false;\n\t\t\tt = std::move(m_queue.front());\n\t\t\tm_queue.pop_front();\n\t\t\treturn true;\n\t\t}\n\t\tvoid clear()\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\tm_queue.clear();\n\t\t}\n\t};\n\n\tQueue<PCMData*> m_queue;\n};"
  },
  {
    "path": "libdlvoicecodec/Modules/DataStruct/KDTree.cpp",
    "content": "/*\n * file: KDTree.hpp\n * author: J. Frederico Carvalho\n *\n * This is an adaptation of the KD-tree implementation in rosetta code\n * https://rosettacode.org/wiki/K-d_tree\n *\n * It is a reimplementation of the C code using C++.  It also includes a few\n * more queries than the original, namely finding all points at a distance\n * smaller than some given distance to a point.\n *\n */\n\n#include <algorithm>\n#include <cmath>\n#include <functional>\n#include <iterator>\n#include <memory>\n#include <vector>\n\n#include \"KDTree.hpp\"\n\nKDNode::KDNode() = default;\n\nKDNode::KDNode(const point_t &pt, const size_t &idx_, const KDNodePtr &left_,\n               const KDNodePtr &right_) {\n    x = pt;\n    index = idx_;\n    left = left_;\n    right = right_;\n}\n\nKDNode::KDNode(const pointIndex &pi, const KDNodePtr &left_,\n               const KDNodePtr &right_) {\n    x = pi.first;\n    index = pi.second;\n    left = left_;\n    right = right_;\n}\n\nKDNode::~KDNode() = default;\n\nfloat KDNode::coord(const size_t &idx) { return x.at(idx); }\nKDNode::operator bool() { return (!x.empty()); }\nKDNode::operator point_t() { return x; }\nKDNode::operator size_t() { return index; }\nKDNode::operator pointIndex() { return pointIndex(x, index); }\n\nKDNodePtr NewKDNodePtr() {\n    KDNodePtr mynode = std::make_shared< KDNode >();\n    return mynode;\n}\n\ninline float dist2(const point_t &a, const point_t &b) {\n    float distc = 0;\n    for (size_t i = 0; i < a.size(); i++) {\n        float di = a.at(i) - b.at(i);\n        distc += di * di;\n    }\n    return distc;\n}\n\ninline float dist2(const KDNodePtr &a, const KDNodePtr &b) {\n    return dist2(a->x, b->x);\n}\n\ninline float dist(const point_t &a, const point_t &b) {\n    return std::sqrt(dist2(a, b));\n}\n\ninline float dist(const KDNodePtr &a, const KDNodePtr &b) {\n    return std::sqrt(dist2(a, b));\n}\n\ncomparer::comparer(size_t idx_) : idx{idx_} {};\n\ninline bool comparer::compare_idx(const pointIndex &a,  //\n                                  const pointIndex &b   //\n) {\n    return (a.first.at(idx) < b.first.at(idx));  //\n}\n\ninline void sort_on_idx(const pointIndexArr::iterator &begin,  //\n                        const pointIndexArr::iterator &end,    //\n                        size_t idx) {\n    comparer comp(idx);\n    comp.idx = idx;\n\n    using std::placeholders::_1;\n    using std::placeholders::_2;\n\n    std::nth_element(begin, begin + std::distance(begin, end) / 2,\n                     end, std::bind(&comparer::compare_idx, comp, _1, _2));\n}\n\nusing pointVec = std::vector< point_t >;\n\nKDNodePtr KDTree::make_tree(const pointIndexArr::iterator &begin,  //\n                            const pointIndexArr::iterator &end,    //\n                            const size_t &length,                  //\n                            const size_t &level                    //\n) {\n    if (begin == end) {\n        return NewKDNodePtr();  // empty tree\n    }\n\n    size_t dim = begin->first.size();\n\n    if (length > 1) {\n        sort_on_idx(begin, end, level);\n    }\n\n    auto middle = begin + (length / 2);\n\n    auto l_begin = begin;\n    auto l_end = middle;\n    auto r_begin = middle + 1;\n    auto r_end = end;\n\n    size_t l_len = length / 2;\n    size_t r_len = length - l_len - 1;\n\n    KDNodePtr left;\n    if (l_len > 0 && dim > 0) {\n        left = make_tree(l_begin, l_end, l_len, (level + 1) % dim);\n    } else {\n        left = leaf;\n    }\n    KDNodePtr right;\n    if (r_len > 0 && dim > 0) {\n        right = make_tree(r_begin, r_end, r_len, (level + 1) % dim);\n    } else {\n        right = leaf;\n    }\n\n    // KDNode result = KDNode();\n    return std::make_shared< KDNode >(*middle, left, right);\n}\n\nKDTree::KDTree(pointVec point_array) {\n    leaf = std::make_shared< KDNode >();\n    // iterators\n    pointIndexArr arr;\n    for (size_t i = 0; i < point_array.size(); i++) {\n        arr.push_back(pointIndex(point_array.at(i), i));\n    }\n\n    auto begin = arr.begin();\n    auto end = arr.end();\n\n    size_t length = arr.size();\n    size_t level = 0;  // starting\n\n    root = KDTree::make_tree(begin, end, length, level);\n}\n\nKDNodePtr KDTree::nearest_(   //\n    const KDNodePtr &branch,  //\n    const point_t &pt,        //\n    const size_t &level,      //\n    const KDNodePtr &best,    //\n    const float&best_dist   //\n) {\n    float d, dx, dx2;\n\n    if (!bool(*branch)) {\n        return NewKDNodePtr();  // basically, null\n    }\n\n    point_t branch_pt(*branch);\n    size_t dim = branch_pt.size();\n\n    d = dist2(branch_pt, pt);\n    dx = branch_pt.at(level) - pt.at(level);\n    dx2 = dx * dx;\n\n    KDNodePtr best_l = best;\n    float best_dist_l = best_dist;\n\n    if (d < best_dist) {\n        best_dist_l = d;\n        best_l = branch;\n    }\n\n    size_t next_lv = (level + 1) % dim;\n    KDNodePtr section;\n    KDNodePtr other;\n\n    // select which branch makes sense to check\n    if (dx > 0) {\n        section = branch->left;\n        other = branch->right;\n    } else {\n        section = branch->right;\n        other = branch->left;\n    }\n\n    // keep nearest neighbor from further down the tree\n    KDNodePtr further = nearest_(section, pt, next_lv, best_l, best_dist_l);\n    if (!further->x.empty()) {\n        float dl = dist2(further->x, pt);\n        if (dl < best_dist_l) {\n            best_dist_l = dl;\n            best_l = further;\n        }\n    }\n    // only check the other branch if it makes sense to do so\n    if (dx2 < best_dist_l) {\n        further = nearest_(other, pt, next_lv, best_l, best_dist_l);\n        if (!further->x.empty()) {\n            float dl = dist2(further->x, pt);\n            if (dl < best_dist_l) {\n                best_dist_l = dl;\n                best_l = further;\n            }\n        }\n    }\n\n    return best_l;\n};\n\n// default caller\nKDNodePtr KDTree::nearest_(const point_t &pt) {\n    size_t level = 0;\n    // KDNodePtr best = branch;\n    float branch_dist = dist2(point_t(*root), pt);\n    return nearest_(root,          // beginning of tree\n                    pt,            // point we are querying\n                    level,         // start from level 0\n                    root,          // best is the root\n                    branch_dist);  // best_dist = branch_dist\n};\n\npoint_t KDTree::nearest_point(const point_t &pt) {\n    return point_t(*nearest_(pt));\n};\nsize_t KDTree::nearest_index(const point_t &pt) {\n    return size_t(*nearest_(pt));\n};\n\npointIndex KDTree::nearest_pointIndex(const point_t &pt) {\n    KDNodePtr Nearest = nearest_(pt);\n    return pointIndex(point_t(*Nearest), size_t(*Nearest));\n}\n\npointIndexArr KDTree::neighborhood_(  //\n    const KDNodePtr &branch,          //\n    const point_t &pt,                //\n    const float&rad,                //\n    const size_t &level               //\n) {\n    float d, dx, dx2;\n\n    if (!bool(*branch)) {\n        // branch has no point, means it is a leaf,\n        // no points to add\n        return pointIndexArr();\n    }\n\n    size_t dim = pt.size();\n\n    float r2 = rad * rad;\n\n    d = dist2(point_t(*branch), pt);\n    dx = point_t(*branch).at(level) - pt.at(level);\n    dx2 = dx * dx;\n\n    pointIndexArr nbh, nbh_s, nbh_o;\n    if (d <= r2) {\n        nbh.push_back(pointIndex(*branch));\n    }\n\n    //\n    KDNodePtr section;\n    KDNodePtr other;\n    if (dx > 0) {\n        section = branch->left;\n        other = branch->right;\n    } else {\n        section = branch->right;\n        other = branch->left;\n    }\n\n    nbh_s = neighborhood_(section, pt, rad, (level + 1) % dim);\n    nbh.insert(nbh.end(), nbh_s.begin(), nbh_s.end());\n    if (dx2 < r2) {\n        nbh_o = neighborhood_(other, pt, rad, (level + 1) % dim);\n        nbh.insert(nbh.end(), nbh_o.begin(), nbh_o.end());\n    }\n\n    return nbh;\n};\n\npointIndexArr KDTree::neighborhood(  //\n    const point_t &pt,               //\n    const float&rad) {\n    size_t level = 0;\n    return neighborhood_(root, pt, rad, level);\n}\n\npointVec KDTree::neighborhood_points(  //\n    const point_t &pt,                 //\n    const float&rad) {\n    size_t level = 0;\n    pointIndexArr nbh = neighborhood_(root, pt, rad, level);\n    pointVec nbhp;\n    nbhp.resize(nbh.size());\n    std::transform(nbh.begin(), nbh.end(), nbhp.begin(),\n                   [](pointIndex x) { return x.first; });\n    return nbhp;\n}\n\nindexArr KDTree::neighborhood_indices(  //\n    const point_t &pt,                  //\n    const float&rad) {\n    size_t level = 0;\n    pointIndexArr nbh = neighborhood_(root, pt, rad, level);\n    indexArr nbhi;\n    nbhi.resize(nbh.size());\n    std::transform(nbh.begin(), nbh.end(), nbhi.begin(),\n                   [](pointIndex x) { return x.second; });\n    return nbhi;\n}\n"
  },
  {
    "path": "libdlvoicecodec/Modules/DataStruct/KDTree.hpp",
    "content": "#pragma once\n\n/*\n * file: KDTree.hpp\n * author: J. Frederico Carvalho\n *\n * This is an adaptation of the KD-tree implementation in rosetta code\n *  https://rosettacode.org/wiki/K-d_tree\n * It is a reimplementation of the C code using C++.\n * It also includes a few more queries than the original\n *\n */\n\n#include <algorithm>\n#include <memory>\n#include <vector>\n\nusing point_t = std::vector<float>;\nusing indexArr = std::vector< size_t >;\nusing pointIndex = std::pair< std::vector< float >, size_t >;\n\nclass KDNode {\n   public:\n    using KDNodePtr = std::shared_ptr< KDNode >;\n    size_t index;\n    point_t x;\n    KDNodePtr left;\n    KDNodePtr right;\n\n    // initializer\n    KDNode();\n    KDNode(const point_t &, const size_t &, const KDNodePtr &,\n           const KDNodePtr &);\n    KDNode(const pointIndex &, const KDNodePtr &, const KDNodePtr &);\n    ~KDNode();\n\n    // getter\n    float coord(const size_t &);\n\n    // conversions\n    explicit operator bool();\n    explicit operator point_t();\n    explicit operator size_t();\n    explicit operator pointIndex();\n};\n\nusing KDNodePtr = std::shared_ptr< KDNode >;\n\nKDNodePtr NewKDNodePtr();\n\n// square euclidean distance\ninline float dist2(const point_t &, const point_t &);\ninline float dist2(const KDNodePtr &, const KDNodePtr &);\n\n// euclidean distance\ninline float dist(const point_t &, const point_t &);\ninline float dist(const KDNodePtr &, const KDNodePtr &);\n\n// Need for sorting\nclass comparer {\n   public:\n    size_t idx;\n    explicit comparer(size_t idx_);\n    inline bool compare_idx(\n        const std::pair< std::vector< float >, size_t > &,  //\n        const std::pair< std::vector< float >, size_t > &   //\n    );\n};\n\nusing pointIndexArr = std::vector< pointIndex >;\n\ninline void sort_on_idx(const pointIndexArr::iterator &,  //\n                        const pointIndexArr::iterator &,  //\n                        size_t idx);\n\nusing pointVec = std::vector<point_t>;\n\nclass KDTree {\n    KDNodePtr root;\n    KDNodePtr leaf;\n\n    KDNodePtr make_tree(const pointIndexArr::iterator &begin,  //\n                        const pointIndexArr::iterator &end,    //\n                        const size_t &length,                  //\n                        const size_t &level                    //\n    );\n\n   public:\n    KDTree() = default;\n    explicit KDTree(pointVec point_array);\n\n   private:\n    KDNodePtr nearest_(           //\n        const KDNodePtr &branch,  //\n        const point_t &pt,        //\n        const size_t &level,      //\n        const KDNodePtr &best,    //\n        const float&best_dist   //\n    );\n\n    // default caller\n    KDNodePtr nearest_(const point_t &pt);\n\n   public:\n    point_t nearest_point(const point_t &pt);\n    size_t nearest_index(const point_t &pt);\n    pointIndex nearest_pointIndex(const point_t &pt);\n\n   private:\n    pointIndexArr neighborhood_(  //\n        const KDNodePtr &branch,  //\n        const point_t &pt,        //\n        const float&rad,        //\n        const size_t &level       //\n    );\n\n   public:\n    pointIndexArr neighborhood(  //\n        const point_t &pt,       //\n        const float&rad);\n\n    pointVec neighborhood_points(  //\n        const point_t &pt,         //\n        const float&rad);\n\n    indexArr neighborhood_indices(  //\n        const point_t &pt,          //\n        const float&rad);\n};\n"
  },
  {
    "path": "libdlvoicecodec/Modules/DataStruct/README.md",
    "content": "## KdTree From J. Frederico Carvalho\n"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Cluster/MoeVSBaseCluster.cpp",
    "content": "﻿#include \"MoeVSBaseCluster.hpp\"\n#include \"../inferTools.hpp\"\n\nstd::vector<float> MoeVoiceStudioCluster::MoeVoiceStudioBaseCluster::find(float* point, long sid, int64_t n_points)\n{\n\tLibDLVoiceCodecThrow(\"NotImplementedError\");\n}"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Cluster/MoeVSBaseCluster.hpp",
    "content": "﻿/**\n * FileName: MoeVSBaseCluster.hpp\n * Note: MoeVoiceStudioCore 聚类基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <vector>\n\n#define MoeVoiceStudioClusterHeader namespace MoeVoiceStudioCluster {\n#define MoeVoiceStudioClusterEnd }\n\nMoeVoiceStudioClusterHeader\n\nclass MoeVoiceStudioBaseCluster\n{\npublic:\n\tMoeVoiceStudioBaseCluster() = default;\n\tvirtual ~MoeVoiceStudioBaseCluster() = default;\n\n\t/**\n\t * \\brief 查找聚类最邻近点\n\t * \\param point 待查找的点\n\t * \\param sid 角色ID\n\t * \\param n_points 点数\n\t * \\return 查找到的最邻近点\n\t */\n\tvirtual std::vector<float> find(float* point, long sid, int64_t n_points = 1);\n};\n\nMoeVoiceStudioClusterEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Cluster/MoeVSClusterManager.cpp",
    "content": "﻿#include \"MoeVSClusterManager.hpp\"\n#include <map>\n#include <stdexcept>\n#include \"../../Logger/MoeSSLogger.hpp\"\n\nMoeVoiceStudioClusterHeader\n\nstd::map<std::wstring, GetMoeVSClusterFn> RegisteredMoeVSCluster;\n\nMoeVSCluster GetMoeVSCluster(const std::wstring& _name, const std::wstring& _path, size_t hidden_size, size_t KmeansLen)\n{\n\tconst auto f_ClusterFn = RegisteredMoeVSCluster.find(_name);\n\tif (f_ClusterFn != RegisteredMoeVSCluster.end())\n\t\treturn f_ClusterFn->second(_path, hidden_size, KmeansLen);\n\tthrow std::runtime_error(\"Unable To Find An Available MoeVSCluster\");\n}\n\nvoid RegisterMoeVSCluster(const std::wstring& _name, const GetMoeVSClusterFn& _constructor_fn)\n{\n\tif (RegisteredMoeVSCluster.find(_name) != RegisteredMoeVSCluster.end())\n\t{\n\t\tlogger.log(L\"[Warn] MoeVSClusterNameConflict\");\n\t\treturn;\n\t}\n\tRegisteredMoeVSCluster[_name] = _constructor_fn;\n}\n\nMoeVoiceStudioClusterEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Cluster/MoeVSClusterManager.hpp",
    "content": "﻿/**\n * FileName: MoeVSClusterManager.hpp\n * Note: MoeVoiceStudioCore 聚类管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"MoeVSBaseCluster.hpp\"\n#include <functional>\n#include <string>\n\nMoeVoiceStudioClusterHeader\nclass MoeVSCluster\n{\npublic:\n\tMoeVSCluster() = default;\n\tMoeVSCluster(MoeVoiceStudioBaseCluster* _ext) : _cluster_ext(_ext) {}\n\tMoeVSCluster(const MoeVSCluster&) = delete;\n\tMoeVSCluster(MoeVSCluster&& _ext) noexcept\n\t{\n\t\tdelete _cluster_ext;\n\t\t_cluster_ext = _ext._cluster_ext;\n\t\t_ext._cluster_ext = nullptr;\n\t}\n\tMoeVSCluster& operator=(const MoeVSCluster&) = delete;\n\tMoeVSCluster& operator=(MoeVSCluster&& _ext) noexcept\n\t{\n\t\tif (this == &_ext)\n\t\t\treturn *this;\n\t\tdelete _cluster_ext;\n\t\t_cluster_ext = _ext._cluster_ext;\n\t\t_ext._cluster_ext = nullptr;\n\t\treturn *this;\n\t}\n\t~MoeVSCluster()\n\t{\n\t\tdelete _cluster_ext;\n\t\t_cluster_ext = nullptr;\n\t}\n\tMoeVoiceStudioBaseCluster* operator->() const { return _cluster_ext; }\nprivate:\n\tMoeVoiceStudioBaseCluster* _cluster_ext = nullptr;\n};\n\nusing GetMoeVSClusterFn = std::function<MoeVSCluster(const std::wstring&, size_t, size_t)>;\n\nvoid RegisterMoeVSCluster(const std::wstring& _name, const GetMoeVSClusterFn& _constructor_fn);\n\n/**\n * \\brief 获取聚类\n * \\param _name 类名\n * \\param _path 聚类数据路径\n * \\param hidden_size hubert维数\n * \\param KmeansLen 聚类的长度\n * \\return 聚类\n */\nMoeVSCluster GetMoeVSCluster(const std::wstring& _name, const std::wstring& _path, size_t hidden_size, size_t KmeansLen);\n\nMoeVoiceStudioClusterEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Cluster/MoeVSIndexCluster.cpp",
    "content": "﻿#ifdef MoeVoiceStudioIndexCluster\n#include \"MoeVSIndexCluster.hpp\"\n#include <filesystem>\n#include \"../inferTools.hpp\"\nMoeVoiceStudioClusterHeader\n\nIndexClusterCore::~IndexClusterCore()\n{\n\tdelete IndexPtr;\n\tIndexPtr = nullptr;\n}\n\nIndexClusterCore::IndexClusterCore(const char* _path)\n{\n\tIndexPtr = faiss::read_index(_path);\n\tIndexsVector = std::vector(IndexPtr->ntotal * IndexPtr->d, 0.f);\n\tIndexPtr->reconstruct_n(0, IndexPtr->ntotal, IndexsVector.data());\n\tDim = IndexPtr->d;\n}\n\nIndexClusterCore::IndexClusterCore(IndexClusterCore&& move) noexcept\n{\n\tIndexPtr = move.IndexPtr;\n\tDim = move.Dim;\n\tIndexsVector = std::move(move.IndexsVector);\n\tmove.IndexPtr = nullptr;\n}\n\nIndexClusterCore& IndexClusterCore::operator=(IndexClusterCore&& move) noexcept\n{\n\tif (&move == this) return *this;\n\tdelete IndexPtr;\n\tIndexPtr = move.IndexPtr;\n\tDim = move.Dim;\n\tIndexsVector = std::move(move.IndexsVector);\n\tmove.IndexPtr = nullptr;\n\treturn *this;\n}\n\nfloat* IndexClusterCore::GetVec(faiss::idx_t index)\n{\n\treturn IndexsVector.data() + index * Dim;\n}\n\nstd::vector<float> IndexClusterCore::find(const float* points, faiss::idx_t n_points, faiss::idx_t n_searched_points)\n{\n\tstd::vector<float> result(Dim * n_points);\n\tstd::vector<float> distances(n_searched_points * n_points);\n\tstd::vector<faiss::idx_t> labels(n_searched_points * n_points);\n\tIndexPtr->search(n_points, points, n_searched_points, distances.data(), labels.data());\n\tfor (faiss::idx_t pt = 0; pt < n_points; ++pt)\n\t{\n\t\tstd::vector result_pt(Dim, 0.f);                                   \n\t\tconst auto idx_vec = labels.data() + pt * n_searched_points;     // SIZE:[n_searched_points]\n\t\tconst auto dis_vec = distances.data() + pt * n_searched_points;  // SIZE:[n_searched_points]\n\t\tfloat sum = 0.f;                                                       // dis_vec[i] / sum = pGetVec(idx_vec[i])\n\t\tfor (faiss::idx_t spt = 0; spt < n_searched_points; ++spt)             // result_pt = GetVec(idx_vec[i])\n\t\t{\n\t\t\tif(idx_vec[spt] < 0)\n\t\t\t\tcontinue;\n\t\t\tdis_vec[spt] = (1 / dis_vec[spt]) * (1 / dis_vec[spt]);\n\t\t\tsum += dis_vec[spt];\n\t\t}\n\t\tif (sum == 0.f) sum = 1.f;\n\t\tfor (faiss::idx_t spt = 0; spt < n_searched_points; ++spt)\n\t\t{\n\t\t\tif (idx_vec[spt] < 0)\n\t\t\t\tcontinue;\n\t\t\tconst auto sedpt = GetVec(idx_vec[spt]);\n\t\t\tconst auto pcnt = (dis_vec[spt] / sum);\n\t\t\tfor (faiss::idx_t sptp = 0; sptp < Dim; ++sptp)\n\t\t\t\tresult_pt[sptp] += pcnt * sedpt[sptp];\n\t\t}\n\t\tmemcpy(result.data() + pt * Dim, result_pt.data(), Dim * sizeof(float));\n\t}\n\treturn result;\n}\n\nIndexCluster::IndexCluster(const std::wstring& _path, size_t hidden_size, size_t KmeansLen)\n{\n\tconst auto RawPath = _path + L\"/Index-\";\n\tsize_t idx = 0;\n\twhile(true)\n\t{\n\t\tstd::filesystem::path IndexPath = RawPath + std::to_wstring(idx++) + L\".index\";\n\t\tif(!exists(IndexPath)) break;\n\t\tIndexs.emplace_back(IndexPath.string().c_str());\n\t}\n\tif (Indexs.empty())\n\t\tLibDLVoiceCodecThrow(\"Index Is Empty\");\n}\n\nstd::vector<float> IndexCluster::find(float* point, long sid, int64_t n_points)\n{\n\tif (size_t(sid) < Indexs.size())\n\t\treturn Indexs[sid].find(point, n_points);\n\treturn { point,point + n_hidden_size * n_points };\n}\n\nMoeVoiceStudioClusterEnd\n#endif"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Cluster/MoeVSIndexCluster.hpp",
    "content": "﻿/**\n * FileName: MoeVSIndexCluster.hpp\n * Note: MoeVoiceStudioCore 官方聚类（Index）\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#ifdef MoeVoiceStudioIndexCluster\n#include <string>\n#include \"MoeVSBaseCluster.hpp\"\n#include <faiss/IndexIVFFlat.h>\n#include <faiss/index_io.h>\n#ifdef NDEBUG\n#pragma comment (lib,\"../../../Lib/faiss/out/build/x64-Release/faiss/faiss.lib\")\n#endif\n#ifdef _DEBUG\n#pragma comment (lib,\"../../../Lib/faiss/out/build/x64-Debug/faiss/faiss.lib\")\n#endif\n#pragma comment (lib,\"../../../Lib/faiss/faiss/libblas.lib\")\n#pragma comment (lib,\"../../../Lib/faiss/faiss/liblapack.lib\")\n#pragma comment (lib,\"../../../Lib/faiss/faiss/liblapacke.lib\")\n\nMoeVoiceStudioClusterHeader\nclass IndexClusterCore\n{\npublic:\n\tIndexClusterCore() = delete;\n\t~IndexClusterCore();\n\tIndexClusterCore(const char* _path);\n\tIndexClusterCore(const IndexClusterCore&) = delete;\n\tIndexClusterCore(IndexClusterCore&& move) noexcept;\n\tIndexClusterCore& operator=(const IndexClusterCore&) = delete;\n\tIndexClusterCore& operator=(IndexClusterCore&& move) noexcept;\n\tstd::vector<float> find(const float* points, faiss::idx_t n_points, faiss::idx_t n_searched_points = 8);\n\tfloat* GetVec(faiss::idx_t index);\nprivate:\n\tfaiss::Index* IndexPtr = nullptr;\n\tfaiss::idx_t Dim = 0;\n\tstd::vector<float> IndexsVector;\n};\n\nclass IndexCluster : public MoeVoiceStudioBaseCluster\n{\npublic:\n\tIndexCluster() = delete;\n\t~IndexCluster() override = default;\n\tIndexCluster(const std::wstring& _path, size_t hidden_size, size_t KmeansLen);\n\tstd::vector<float> find(float* point, long sid, int64_t n_points = 1) override;\nprivate:\n\tstd::vector<IndexClusterCore> Indexs;\n\tsize_t n_hidden_size = 256;\n};\n\nMoeVoiceStudioClusterEnd\n\n#endif"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Cluster/MoeVSKmeansCluster.cpp",
    "content": "﻿#include \"MoeVSKmeansCluster.hpp\"\n#include \"../inferTools.hpp\"\n\nstd::vector<float> MoeVoiceStudioCluster::KMeansCluster::find(float* point, long sid, int64_t n_points)\n{\n\tif (size_t(sid) < _tree.size())\n\t{\n\t\tstd::vector<float> res;\n\t\tres.reserve(dims * n_points * 2);\n\t\tfor (int64_t pt = 0; pt < n_points; ++pt)\n\t\t{\n\t\t\tauto tmp = _tree[sid].nearest_point({ point + pt * dims,point + (pt + 1) * dims });\n\t\t\tres.insert(res.end(), tmp.begin(), tmp.end());\n\t\t}\n\t\treturn res;\n\t}\n\treturn { point, point + dims * n_points };\n}\n\nMoeVoiceStudioCluster::KMeansCluster::KMeansCluster(const std::wstring& _path, size_t hidden_size, size_t KmeansLen)\n{\n\tdims = hidden_size;\n\tFILE* file = nullptr;\n\t_wfopen_s(&file, (_path + L\"/KMeans.npy\").c_str(), L\"rb\");\n\tif (!file)\n\t\tLibDLVoiceCodecThrow(\"KMeansFileNotExist\");\n\tconstexpr long idx = 128;\n\tfseek(file, idx, SEEK_SET);\n\tstd::vector<float> tmpData(hidden_size);\n\tconst size_t ec = size_t(hidden_size) * sizeof(float);\n\tstd::vector<std::vector<float>> _tmp;\n\t_tmp.reserve(KmeansLen);\n\twhile (fread(tmpData.data(), 1, ec, file) == ec)\n\t{\n\t\t_tmp.emplace_back(tmpData);\n\t\tif (_tmp.size() == KmeansLen)\n\t\t{\n\t\t\t_tree.emplace_back(_tmp);\n\t\t\t_tmp.clear();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Cluster/MoeVSKmeansCluster.hpp",
    "content": "﻿/**\n * FileName: MoeVSKmeansCluster.hpp\n * Note: MoeVoiceStudioCore 官方聚类（Kmeans）\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"MoeVSBaseCluster.hpp\"\n#include \"../../DataStruct/KDTree.hpp\"\n#include <string>\n\nMoeVoiceStudioClusterHeader\n\nclass KMeansCluster : public MoeVoiceStudioBaseCluster\n{\npublic:\n\tKMeansCluster() = delete;\n\t~KMeansCluster() override = default;\n\tKMeansCluster(const std::wstring& _path, size_t hidden_size, size_t KmeansLen);\n\tstd::vector<float> find(float* point, long sid, int64_t n_points = 1) override;\nprivate:\n\tstd::vector<KDTree> _tree;\n\tsize_t dims = 0;\n};\n\nMoeVoiceStudioClusterEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/BaseF0Extractor/BaseF0Extractor.cpp",
    "content": "﻿#include \"BaseF0Extractor.hpp\"\n#include <map>\n#include \"../../../Logger/MoeSSLogger.hpp\"\n#include \"../../inferTools.hpp\"\n\nMoeVSF0Extractor::BaseF0Extractor::BaseF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0) :\n\tfs(sampling_rate),\n\thop(hop_size),\n\tf0_bin(n_f0_bins),\n\tf0_max(max_f0),\n\tf0_min(min_f0)\n{\n\tf0_mel_min = (1127.0 * log(1.0 + f0_min / 700.0));\n\tf0_mel_max = (1127.0 * log(1.0 + f0_max / 700.0));\n}\n\nstd::vector<double> MoeVSF0Extractor::BaseF0Extractor::arange(double start, double end, double step, double div)\n{\n\tstd::vector<double> output;\n\twhile (start < end)\n\t{\n\t\toutput.push_back(start / div);\n\t\tstart += step;\n\t}\n\treturn output;\n}\n\nstd::vector<float> MoeVSF0Extractor::BaseF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\n{\n\tLibDLVoiceCodecThrow(\"NotImplementedError\");\n}\n\nstd::vector<float> MoeVSF0Extractor::BaseF0Extractor::ExtractF0(const std::vector<float>& PCMData, size_t TargetLength)\n{\n\tstd::vector<double> PCMVector(PCMData.size());\n\tfor (size_t i = 0; i < PCMData.size(); ++i)\n\t\tPCMVector[i] = double(PCMData[i]);\n\treturn ExtractF0(PCMVector, TargetLength);\n}\n\nstd::vector<float> MoeVSF0Extractor::BaseF0Extractor::ExtractF0(const std::vector<int16_t>& PCMData, size_t TargetLength)\n{\n\tstd::vector<double> PCMVector(PCMData.size());\n\tfor (size_t i = 0; i < PCMData.size(); ++i)\n\t\tPCMVector[i] = double(PCMData[i]);\n\treturn ExtractF0(PCMVector, TargetLength);\n}"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/BaseF0Extractor/BaseF0Extractor.hpp",
    "content": "﻿/**\n * FileName: BaseF0Extractor.hpp\n * Note: MoeVoiceStudioCore F0提取算法基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <cstdint>\n#include <vector>\n#include <string>\n#define MoeVoiceStudioF0ExtractorHeader namespace MoeVSF0Extractor{\n#define MoeVoiceStudioF0ExtractorEnd }\n\nMoeVoiceStudioF0ExtractorHeader\n#define __NAME__MOEVS(x) std::wstring ClassName = (x)\nclass BaseF0Extractor\n{\npublic:\n\t__NAME__MOEVS(L\"MoeVSF0Extractor\");\n\n\tBaseF0Extractor() = delete;\n\n\t/**\n\t * \\brief 构造F0提取器\n\t * \\param sampling_rate 采样率\n\t * \\param hop_size HopSize\n\t * \\param n_f0_bins F0Bins\n\t * \\param max_f0 最大F0\n\t * \\param min_f0 最小F0\n\t */\n\tBaseF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\n\n\tvirtual ~BaseF0Extractor() = default;\n\n\t/**\n\t * \\brief 提取F0\n\t * \\param PCMData 音频PCM数据（SignedInt16 单声道） \n\t * \\param TargetLength 目标F0长度\n\t * \\return F0\n\t */\n\tvirtual std::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength);\n\n\t/**\n\t * \\brief 提取F0\n\t * \\param PCMData 音频PCM数据（SignedInt16 单声道）\n\t * \\param TargetLength 目标F0长度\n\t * \\return F0\n\t */\n\tstd::vector<float> ExtractF0(const std::vector<float>& PCMData, size_t TargetLength);\n\n\t/**\n\t * \\brief 提取F0\n\t * \\param PCMData 音频PCM数据（SignedInt16 单声道）\n\t * \\param TargetLength 目标F0长度\n\t * \\return F0\n\t */\n\tstd::vector<float> ExtractF0(const std::vector<int16_t>& PCMData, size_t TargetLength);\n\n\tstatic std::vector<double> arange(double start, double end, double step = 1.0, double div = 1.0);\nprotected:\n\tconst uint32_t fs;\n\tconst uint32_t hop;\n\tconst uint32_t f0_bin;\n\tconst double f0_max;\n\tconst double f0_min;\n\tdouble f0_mel_min;\n\tdouble f0_mel_max;\n};\n#undef __NAME__MOEVS\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/DioF0Extractor/DioF0Extractor.cpp",
    "content": "﻿#include \"DioF0Extractor.hpp\"\n#include \"dio.h\"\n#include \"stonemask.h\"\n#include \"matlabfunctions.h\"\n\nMoeVoiceStudioF0ExtractorHeader\nDioF0Extractor::DioF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0):\n\tBaseF0Extractor(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0)\n{\n}\n\nvoid DioF0Extractor::InterPf0(size_t TargetLength)\n{\n    const auto f0Len = refined_f0.size();\n    if (abs((int64_t)TargetLength - (int64_t)f0Len) < 3)\n    {\n        refined_f0.resize(TargetLength, 0.0);\n        return;\n    }\n    for (size_t i = 0; i < f0Len; ++i) if (refined_f0[i] < 0.001) refined_f0[i] = NAN;\n\n    auto xi = arange(0.0, (double)f0Len * (double)TargetLength, (double)f0Len, (double)TargetLength);\n    while (xi.size() < TargetLength) xi.emplace_back(*(xi.end() - 1) + ((double)f0Len / (double)TargetLength));\n    while (xi.size() > TargetLength) xi.pop_back();\n\n\tauto x0 = arange(0, (double)f0Len);\n    while (x0.size() < f0Len) x0.emplace_back(*(x0.end() - 1) + 1.);\n    while (x0.size() > f0Len) x0.pop_back();\n\n    auto raw_f0 = std::vector<double>(xi.size());\n    interp1(x0.data(), refined_f0.data(), static_cast<int>(x0.size()), xi.data(), (int)xi.size(), raw_f0.data());\n\n    for (size_t i = 0; i < xi.size(); i++) if (isnan(raw_f0[i])) raw_f0[i] = 0.0;\n    refined_f0 = std::move(raw_f0);\n}\n\nstd::vector<float> DioF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\n{\n    compute_f0(PCMData.data(), PCMData.size());\n    InterPf0(TargetLength);\n    std::vector<float> f0(refined_f0.size());\n    for (size_t i = 0; i < refined_f0.size(); ++i) f0[i] = (float)refined_f0[i];\n    return f0;\n}\n\nvoid DioF0Extractor::compute_f0(const double* PCMData, size_t PCMLen)\n{\n    DioOption Doption;\n    InitializeDioOption(&Doption);\n    Doption.f0_ceil = f0_max;\n    Doption.f0_floor = f0_min;\n    Doption.frame_period = 1000.0 * hop / fs;\n\n    const size_t f0Length = GetSamplesForDIO(int(fs), (int)PCMLen, Doption.frame_period);\n\tauto temporal_positions = std::vector<double>(f0Length);\n\tauto raw_f0 = std::vector<double>(f0Length);\n    refined_f0 = std::vector<double>(f0Length);\n    Dio(PCMData, (int)PCMLen, int(fs), &Doption, temporal_positions.data(), raw_f0.data());\n    StoneMask(PCMData, (int)PCMLen, int(fs), temporal_positions.data(), raw_f0.data(), (int)f0Length, refined_f0.data());\n}\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/DioF0Extractor/DioF0Extractor.hpp",
    "content": "﻿/**\n * FileName: DioF0Extractor.hpp\n * Note: MoeVoiceStudioCore 官方F0提取算法 Dio\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"../BaseF0Extractor/BaseF0Extractor.hpp\"\n\nMoeVoiceStudioF0ExtractorHeader\nclass DioF0Extractor : public BaseF0Extractor\n{\npublic:\n\tDioF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\n\n\t~DioF0Extractor() override = default;\n\n\tvoid compute_f0(const double* PCMData, size_t PCMLen);\n\n\tvoid InterPf0(size_t TargetLength);\n\n\tstd::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength) override;\nprivate:\n\tstd::vector<double> refined_f0;\n};\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/F0ExtractorManager.cpp",
    "content": "﻿#include \"F0ExtractorManager.hpp\"\n#include <map>\n#include <stdexcept>\n#include \"../../Logger/MoeSSLogger.hpp\"\n\nMoeVoiceStudioF0ExtractorHeader\nstd::map<std::wstring, GetF0ExtractorFn> RegisteredF0Extractors;\n\nF0Extractor GetF0Extractor(const std::wstring& _name,\n\tconst uint32_t fs,\n\tconst uint32_t hop,\n\tconst uint32_t f0_bin,\n\tconst double f0_max,\n\tconst double f0_min)\n{\n\tconst auto f_F0Extractor = RegisteredF0Extractors.find(_name);\n\tif (f_F0Extractor != RegisteredF0Extractors.end())\n\t\treturn f_F0Extractor->second(fs, hop, f0_bin, f0_max, f0_min);\n\tthrow std::runtime_error(\"Unable To Find An Available F0Extractor\");\n}\n\nvoid RegisterF0Extractor(const std::wstring& _name, const GetF0ExtractorFn& _constructor_fn)\n{\n\tif (RegisteredF0Extractors.find(_name) != RegisteredF0Extractors.end())\n\t{\n\t\tlogger.log(L\"[Warn] F0ExtractorNameConflict\");\n\t\treturn;\n\t}\n\tRegisteredF0Extractors[_name] = _constructor_fn;\n}\n\nstd::vector<std::wstring> GetF0ExtractorList()\n{\n\tstd::vector<std::wstring> F0ExtractorsVec;\n\tF0ExtractorsVec.reserve(RegisteredF0Extractors.size());\n\tfor (const auto& i : RegisteredF0Extractors)\n\t\tF0ExtractorsVec.emplace_back(i.first);\n\treturn F0ExtractorsVec;\n}\n\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/F0ExtractorManager.hpp",
    "content": "﻿/**\n * FileName: F0ExtractorManager.hpp\n * Note: MoeVoiceStudioCore F0提取器管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"BaseF0Extractor/BaseF0Extractor.hpp\"\n#include <functional>\n\nMoeVoiceStudioF0ExtractorHeader\n\nclass F0Extractor\n{\npublic:\n\tF0Extractor() = delete;\n\tF0Extractor(BaseF0Extractor* _ext) : _f0_ext(_ext) {}\n\tF0Extractor(const F0Extractor&) = delete;\n\tF0Extractor(F0Extractor&& _ext) noexcept\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t}\n\tF0Extractor& operator=(const F0Extractor&) = delete;\n\tF0Extractor& operator=(F0Extractor&& _ext) noexcept\n\t{\n\t\tif (this == &_ext)\n\t\t\treturn *this;\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t\treturn *this;\n\t}\n\t~F0Extractor()\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = nullptr;\n\t}\n\tBaseF0Extractor* operator->() const { return _f0_ext; }\n\nprivate:\n\tBaseF0Extractor* _f0_ext = nullptr;\n};\n\nusing GetF0ExtractorFn = std::function<F0Extractor(uint32_t, uint32_t, uint32_t, double, double)>;\n\nvoid RegisterF0Extractor(const std::wstring& _name, const GetF0ExtractorFn& _constructor_fn);\n\n/**\n * \\brief 获取F0提取器\n * \\param _name 类名\n * \\param fs 采样率\n * \\param hop HopSize\n * \\param f0_bin F0Bins\n * \\param f0_max 最大F0\n * \\param f0_min 最小F0\n * \\return F0提取器\n */\nF0Extractor GetF0Extractor(const std::wstring& _name,\n                           uint32_t fs = 48000,\n                           uint32_t hop = 512,\n                           uint32_t f0_bin = 256,\n                           double f0_max = 1100.0,\n                           double f0_min = 50.0);\n\nstd::vector<std::wstring> GetF0ExtractorList();\n\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/HarvestF0Extractor/HarvestF0Extractor.cpp",
    "content": "﻿#include \"HarvestF0Extractor.hpp\"\n#include \"matlabfunctions.h\"\n#include \"harvest.h\"\n#include \"stonemask.h\"\n\nMoeVoiceStudioF0ExtractorHeader\n\tHarvestF0Extractor::HarvestF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0):\n\tBaseF0Extractor(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0)\n{\n}\n\nvoid HarvestF0Extractor::InterPf0(size_t TargetLength)\n{\n    const auto f0Len = refined_f0.size();\n    if (abs((int64_t)TargetLength - (int64_t)f0Len) < 3)\n    {\n        refined_f0.resize(TargetLength, 0.0);\n\t    return;\n    }\n    for (size_t i = 0; i < f0Len; ++i) if (refined_f0[i] < 0.001) refined_f0[i] = NAN;\n\n    auto xi = arange(0.0, (double)f0Len * (double)TargetLength, (double)f0Len, (double)TargetLength);\n    while (xi.size() < TargetLength) xi.emplace_back(*(xi.end() - 1) + ((double)f0Len / (double)TargetLength));\n    while (xi.size() > TargetLength) xi.pop_back();\n\n\tauto x0 = arange(0, (double)f0Len);\n    while (x0.size() < f0Len) x0.emplace_back(*(x0.end() - 1) + 1.);\n    while (x0.size() > f0Len) x0.pop_back();\n\n    auto raw_f0 = std::vector<double>(xi.size());\n    interp1(x0.data(), refined_f0.data(), static_cast<int>(x0.size()), xi.data(), (int)xi.size(), raw_f0.data());\n\n    for (size_t i = 0; i < xi.size(); i++) if (isnan(raw_f0[i])) raw_f0[i] = 0.0;\n    refined_f0 = std::move(raw_f0);\n}\n\nstd::vector<float> HarvestF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\n{\n    compute_f0(PCMData.data(), PCMData.size());\n    InterPf0(TargetLength);\n    std::vector<float> f0(refined_f0.size());\n    for (size_t i = 0; i < refined_f0.size(); ++i) f0[i] = (float)refined_f0[i];\n    return f0;\n}\n\nvoid HarvestF0Extractor::compute_f0(const double* PCMData, size_t PCMLen)\n{\n    HarvestOption Doption;\n    InitializeHarvestOption(&Doption);\n    Doption.f0_ceil = f0_max;\n    Doption.f0_floor = f0_min;\n    Doption.frame_period = 1000.0 * hop / fs;\n\n    const size_t f0Length = GetSamplesForHarvest(int(fs), (int)PCMLen, Doption.frame_period);\n\tauto temporal_positions = std::vector<double>(f0Length);\n\tauto raw_f0 = std::vector<double>(f0Length);\n    refined_f0 = std::vector<double>(f0Length);\n    Harvest(PCMData, (int)PCMLen, int(fs), &Doption, temporal_positions.data(), raw_f0.data());\n    StoneMask(PCMData, (int)PCMLen, int(fs), temporal_positions.data(), raw_f0.data(), (int)f0Length, refined_f0.data());\n}\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/HarvestF0Extractor/HarvestF0Extractor.hpp",
    "content": "﻿/**\n * FileName: HarvestF0Extractor.hpp\n * Note: MoeVoiceStudioCore 官方F0提取算法 Harvest\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"../BaseF0Extractor/BaseF0Extractor.hpp\"\n\nMoeVoiceStudioF0ExtractorHeader\nclass HarvestF0Extractor : public BaseF0Extractor\n{\npublic:\n\tHarvestF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\n\n\t~HarvestF0Extractor() override = default;\n\n\tvoid compute_f0(const double* PCMData, size_t PCMLen);\n\n\tvoid InterPf0(size_t TargetLength);\n\n\tstd::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength) override;\n\nprivate:\n\tstd::vector<double> refined_f0;\n};\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/NetF0Predictors/NetF0Predictors.cpp",
    "content": "﻿#include \"NetF0Predictors.hpp\"\n#include <dml_provider_factory.h>\n#include \"matlabfunctions.h\"\n#include \"../DioF0Extractor/DioF0Extractor.hpp\"\n#include \"../../../Logger/MoeSSLogger.hpp\"\n#include \"../../../Models/EnvManager.hpp\"\n#include \"../../inferTools.hpp\"\n#ifdef _WIN32\n#include <DXGI.h>\n#else\n#error\n#endif\n\nMoeVoiceStudioF0ExtractorHeader\n\nNetF0Class::NetF0Class()\n#ifdef INITF0NETPREDICTOR\n{\n\ttry\n\t{\n\t\twchar_t path[1024];\n#ifdef _WIN32\n\t\tGetModuleFileName(nullptr, path, 1024);\n\t\tstd::wstring _curPath = path;\n\t\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\n\t\tconst auto cpath = _curPath + L\"/F0Predictor/config.json\";\n\t\tNetF0PathDir = _curPath + L\"/F0Predictor/\";\n#endif\n\t\tconst MJson json(to_byte_string(cpath).c_str());\n\t\tint DeviceId = 0, Device = 0, NumThread = (int)std::thread::hardware_concurrency();\n\t\tif (json[\"DeviceId\"].IsInt())\n\t\t\tDeviceId = json[\"DeviceId\"].GetInt();\n\t\tif (json[\"Device\"].IsString())\n\t\t{\n\t\t\tconst std::string tmp = json[\"Device\"].GetString();\n\t\t\tif (tmp == \"CUDA\")\n\t\t\t\tDevice = 1;\n\t\t\telse if (tmp == \"DML\")\n\t\t\t\tDevice = 2;\n\t\t}\n\t\tif (json[\"NumThread\"].IsInt())\n\t\t\tNumThread = json[\"NumThread\"].GetInt();\n\t\tif (Device == 0)\n\t\t\tBuildCPUEnv(NumThread);\n\t\telse if (Device == 1)\n\t\t\tBuildCUDAEnv(DeviceId);\n\t\telse if (Device == 2)\n\t\t\tBuildDMLEnv(DeviceId);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tlogger.log(to_wide_string(e.what()));\n\t\tBuildCPUEnv(std::thread::hardware_concurrency());\n\t}\n}\n#else\n{\n\twchar_t path[1024];\n#ifdef _WIN32\n\tGetModuleFileName(nullptr, path, 1024);\n\tstd::wstring _curPath = path;\n\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\n\tNetF0PathDir = _curPath + L\"/F0Predictor/\";\n#endif\n}\n#endif\nvoid NetF0Class::Destory()\n{\n\tdelete Model;\n\tModel = nullptr;\n\tNetF0Options = nullptr;\n\tNetF0Env = nullptr;\n\tMemory = nullptr;\n}\n\nvoid NetF0Class::BuildCPUEnv(unsigned ThreadCount)\n{\n\tDestory();\n\tNetF0Options = new Ort::SessionOptions;\n\tNetF0Env = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\n\tNetF0Options->SetIntraOpNumThreads(static_cast<int>(ThreadCount));\n\tNetF0Options->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\n\tMemory = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n}\n\nvoid NetF0Class::BuildCUDAEnv(unsigned Did)\n{\n\tDestory();\n\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\tbool ret = true;\n\tfor (const auto& it : AvailableProviders)\n\t\tif (it.find(\"CUDA\") != std::string::npos)\n\t\t\tret = false;\n\tif (ret)\n\t\tLibDLVoiceCodecThrow(\"CUDA Provider Not Found\");\n\tOrtCUDAProviderOptions cuda_option;\n\tcuda_option.device_id = int(Did);\n\tNetF0Options = new Ort::SessionOptions;\n\tNetF0Env = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\n\tNetF0Options->AppendExecutionProvider_CUDA(cuda_option);\n\tNetF0Options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\n\tNetF0Options->SetIntraOpNumThreads(1);\n\tMemory = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n}\n\nvoid NetF0Class::BuildDMLEnv(unsigned Did)\n{\n\tDestory();\n\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\tstd::string ret;\n\tfor (const auto& it : AvailableProviders)\n\t\tif (it.find(\"Dml\") != std::string::npos)\n\t\t\tret = it;\n\tif (ret.empty())\n\t\tLibDLVoiceCodecThrow(\"DML Provider Not Found\");\n\tconst OrtApi& ortApi = Ort::GetApi();\n\tconst OrtDmlApi* ortDmlApi = nullptr;\n\tortApi.GetExecutionProviderApi(\"DML\", ORT_API_VERSION, reinterpret_cast<const void**>(&ortDmlApi));\n\tconst Ort::ThreadingOptions threadingOptions;\n\tNetF0Env = new Ort::Env(threadingOptions, ORT_LOGGING_LEVEL_VERBOSE, \"\");\n\tNetF0Env->DisableTelemetryEvents();\n\tNetF0Options = new Ort::SessionOptions;\n\tortDmlApi->SessionOptionsAppendExecutionProvider_DML(*NetF0Options, int(Did));\n\tNetF0Options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\n\tNetF0Options->DisablePerSessionThreads();\n\tNetF0Options->SetExecutionMode(ORT_SEQUENTIAL);\n\tNetF0Options->DisableMemPattern();\n\tMemory = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemType::OrtMemTypeCPU));\n}\n\nvoid NetF0Class::LoadModel(const std::wstring& path)\n{\n\tDestory();\n\tif (!moevsenv::GetGlobalMoeVSEnv().IsEnabled())\n\t\treturn;\n\tNetF0Env = moevsenv::GetGlobalMoeVSEnv().GetEnv();\n\tMemory = moevsenv::GetGlobalMoeVSEnv().GetMemoryInfo();\n\tNetF0Options = moevsenv::GetGlobalMoeVSEnv().GetSessionOptions();\n\ttry\n\t{\n\t\tModel = new Ort::Session(*NetF0Env, (NetF0PathDir + path).c_str(), *NetF0Options);\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tlogger.log(to_wide_string(e.what()));\n\t\tdelete Model;\n\t\tModel = nullptr;\n\t}\n}\n\nNetF0Class RMVPECORE;\nNetF0Class MELPECORE;\n\nRMVPEF0Extractor::RMVPEF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0) :\n\tBaseF0Extractor(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0)\n{\n\tif (MELPECORE.Model)\n\t\tMELPECORE.Destory();\n\tif (!RMVPECORE.Model)\n\t\tRMVPECORE.LoadModel(L\"RMVPE.onnx\");\n}\n\ndouble average(const double* begin, const double* end)\n{\n\tconst auto mp = double(end - begin);\n\tdouble sum = 0.;\n\twhile (begin != end)\n\t\tsum += *(begin++);\n\treturn sum / mp;\n}\n\nstd::vector<float> RMVPEF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\n{\n\tif (!RMVPECORE.Model)\n\t\treturn DioF0Extractor((int)fs, (int)hop, (int)f0_bin, f0_max, f0_min).ExtractF0(PCMData, TargetLength);\n\n\tconst double step = double(fs) / 16000.;\n\tconst auto window_len = (size_t)round(step);\n\tconst auto half_window_len = window_len / 2;\n\tconst auto f0_size = size_t((double)PCMData.size() / step);\n\tconst auto pcm_idx_size = PCMData.size() - 2;\n\tstd::vector pcm(f0_size, 0.f);\n\tauto idx = double(half_window_len + 1);\n\tfor (size_t i = 0; i < f0_size; ++i)\n\t{\n\t\tconst auto index = size_t(round(idx));\n\t\tif(index + half_window_len > pcm_idx_size)\n\t\t\tbreak;\n\t\tif (half_window_len == 0)\n\t\t\tpcm[i] = (float)PCMData[index];\n\t\telse\n\t\t\tpcm[i] = (float)average(&PCMData[index - half_window_len], &PCMData[index + half_window_len]);\n\t\tidx += step;\n\t}\n\tstd::vector<Ort::Value> Tensors;\n\tconst int64_t pcm_shape[] = { 1, (int64_t)pcm.size() };\n\tconstexpr int64_t one_shape[] = { 1 };\n\tfloat threshold[] = { 0.03f };\n\tTensors.emplace_back(Ort::Value::CreateTensor(*RMVPECORE.Memory, pcm.data(), pcm.size(), pcm_shape, 2));\n\tTensors.emplace_back(Ort::Value::CreateTensor(*RMVPECORE.Memory, threshold, 1, one_shape, 1));\n\n\tconst auto out = RMVPECORE.Model->Run(Ort::RunOptions{ nullptr },\n\t\tInputNames.data(),\n\t\tTensors.data(),\n\t\tTensors.size(),\n\t\tOutputNames.data(),\n\t\tOutputNames.size());\n\n\tconst auto osize = out[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tconst auto of0 = out[0].GetTensorData<float>();\n\trefined_f0 = std::vector<double>(osize);\n\tfor (size_t i = 0; i < osize; ++i) refined_f0[i] = ((of0[i] > 0.001f) ? (double)out[0].GetTensorData<float>()[i] : NAN);\n\tInterPf0(TargetLength);\n\tstd::vector<float> finaF0(refined_f0.size());\n\tfor (size_t i = 0; i < refined_f0.size(); ++i) finaF0[i] = isnan(refined_f0[i]) ? 0 : (float)refined_f0[i];\n\treturn finaF0;\n}\n\nvoid RMVPEF0Extractor::InterPf0(size_t TargetLength)\n{\n\tconst auto f0Len = refined_f0.size();\n\tif (abs((int64_t)TargetLength - (int64_t)f0Len) < 3)\n\t{\n\t\trefined_f0.resize(TargetLength, 0.0);\n\t\treturn;\n\t}\n\tfor (size_t i = 0; i < f0Len; ++i) if (refined_f0[i] < 0.001) refined_f0[i] = NAN;\n\n\tauto xi = arange(0.0, (double)f0Len * (double)TargetLength, (double)f0Len, (double)TargetLength);\n\twhile (xi.size() < TargetLength) xi.emplace_back(*(xi.end() - 1) + ((double)f0Len / (double)TargetLength));\n\twhile (xi.size() > TargetLength) xi.pop_back();\n\n\tauto x0 = arange(0, (double)f0Len);\n\twhile (x0.size() < f0Len) x0.emplace_back(*(x0.end() - 1) + 1.);\n\twhile (x0.size() > f0Len) x0.pop_back();\n\n\tauto raw_f0 = std::vector<double>(xi.size());\n\tinterp1(x0.data(), refined_f0.data(), static_cast<int>(x0.size()), xi.data(), (int)xi.size(), raw_f0.data());\n\n\tfor (size_t i = 0; i < xi.size(); i++) if (isnan(raw_f0[i])) raw_f0[i] = 0.0;\n\trefined_f0 = std::move(raw_f0);\n}\n\nMELPEF0Extractor::MELPEF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0) :\n\tBaseF0Extractor(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0)\n{\n\tif (RMVPECORE.Model)\n\t\tRMVPECORE.Destory();\n\tif (!MELPECORE.Model)\n\t\tMELPECORE.LoadModel(L\"MELPE.onnx\");\n}\n\nvoid MELPEF0Extractor::InterPf0(size_t TargetLength)\n{\n\tconst auto f0Len = refined_f0.size();\n\tif (abs((int64_t)TargetLength - (int64_t)f0Len) < 3)\n\t{\n\t\trefined_f0.resize(TargetLength, 0.0);\n\t\treturn;\n\t}\n\tfor (size_t i = 0; i < f0Len; ++i) if (refined_f0[i] < 0.001) refined_f0[i] = NAN;\n\n\tauto xi = arange(0.0, (double)f0Len * (double)TargetLength, (double)f0Len, (double)TargetLength);\n\twhile (xi.size() < TargetLength) xi.emplace_back(*(xi.end() - 1) + ((double)f0Len / (double)TargetLength));\n\twhile (xi.size() > TargetLength) xi.pop_back();\n\n\tauto x0 = arange(0, (double)f0Len);\n\twhile (x0.size() < f0Len) x0.emplace_back(*(x0.end() - 1) + 1.);\n\twhile (x0.size() > f0Len) x0.pop_back();\n\n\tauto raw_f0 = std::vector<double>(xi.size());\n\tinterp1(x0.data(), refined_f0.data(), static_cast<int>(x0.size()), xi.data(), (int)xi.size(), raw_f0.data());\n\n\tfor (size_t i = 0; i < xi.size(); i++) if (isnan(raw_f0[i])) raw_f0[i] = 0.0;\n\trefined_f0 = std::move(raw_f0);\n}\n\nstd::vector<float> MELPEF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\n{\n\tif (!MELPECORE.Model)\n\t\treturn DioF0Extractor((int)fs, (int)hop, (int)f0_bin, f0_max, f0_min).ExtractF0(PCMData, TargetLength);\n\n\tconst double step = double(fs) / 16000.;\n\tconst auto window_len = (size_t)round(step);\n\tconst auto half_window_len = window_len / 2;\n\tconst auto f0_size = size_t((double)PCMData.size() / step);\n\tconst auto pcm_idx_size = PCMData.size() - 2;\n\tstd::vector pcm(f0_size, 0.f);\n\tauto idx = double(half_window_len + 1);\n\tfor (size_t i = 0; i < f0_size; ++i)\n\t{\n\t\tconst auto index = size_t(round(idx));\n\t\tif (index + half_window_len > pcm_idx_size)\n\t\t\tbreak;\n\t\tif (half_window_len == 0)\n\t\t\tpcm[i] = (float)PCMData[index];\n\t\telse\n\t\t\tpcm[i] = (float)average(&PCMData[index - half_window_len], &PCMData[index + half_window_len]);\n\t\tidx += step;\n\t}\n\tstd::vector<Ort::Value> Tensors;\n\tconst int64_t pcm_shape[] = { 1, (int64_t)pcm.size() };\n\tTensors.emplace_back(Ort::Value::CreateTensor(*MELPECORE.Memory, pcm.data(), pcm.size(), pcm_shape, 2));\n\n\tconst auto out = MELPECORE.Model->Run(Ort::RunOptions{ nullptr },\n\t\tInputNames.data(),\n\t\tTensors.data(),\n\t\tTensors.size(),\n\t\tOutputNames.data(),\n\t\tOutputNames.size());\n\n\tconst auto osize = out[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tconst auto of0 = out[0].GetTensorData<float>();\n\trefined_f0 = std::vector<double>(osize);\n\tfor (size_t i = 0; i < osize; ++i) refined_f0[i] = ((of0[i] > 0.001f) ? (double)out[0].GetTensorData<float>()[i] : NAN);\n\tInterPf0(TargetLength);\n\tstd::vector<float> finaF0(refined_f0.size());\n\tfor (size_t i = 0; i < refined_f0.size(); ++i) finaF0[i] = isnan(refined_f0[i]) ? 0 : (float)refined_f0[i];\n\treturn finaF0;\n}\n\nvoid EmptyCache()\n{\n\tRMVPECORE.Destory();\n\tMELPECORE.Destory();\n}\n\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/F0Extractor/NetF0Predictors/NetF0Predictors.hpp",
    "content": "﻿/**\n * FileName: NetF0Predictors.hpp\n * Note: MoeVoiceStudioCore 官方F0提取算法 Net\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"../BaseF0Extractor/BaseF0Extractor.hpp\"\n#include <onnxruntime_cxx_api.h>\n\nMoeVoiceStudioF0ExtractorHeader\n\nclass NetF0Class\n{\npublic:\n\tNetF0Class();\n\t~NetF0Class()\n\t{\n\t\tDestory();\n\t}\n\tvoid Destory();\n\tvoid BuildCPUEnv(unsigned ThreadCount);\n\tvoid BuildCUDAEnv(unsigned Did);\n\tvoid BuildDMLEnv(unsigned Did);\n\tvoid LoadModel(const std::wstring& path);\n\tOrt::Env* NetF0Env = nullptr;\n\tOrt::SessionOptions* NetF0Options = nullptr;\n\tOrt::Session* Model = nullptr;\n\tOrt::MemoryInfo* Memory = nullptr;\nprivate:\n\tstd::wstring NetF0PathDir;\n};\n\nclass RMVPEF0Extractor : public BaseF0Extractor\n{\npublic:\n\tRMVPEF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\n\n\t~RMVPEF0Extractor() override = default;\n\n\tvoid InterPf0(size_t TargetLength);\n\n\tstd::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength) override;\nprivate:\n\tstd::vector<const char*> InputNames = { \"waveform\", \"threshold\" };\n\tstd::vector<const char*> OutputNames = { \"f0\", \"uv\" };\n\tstd::vector<double> refined_f0;\n};\n\nclass MELPEF0Extractor : public BaseF0Extractor\n{\npublic:\n\tMELPEF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\n\n\t~MELPEF0Extractor() override = default;\n\n\tvoid InterPf0(size_t TargetLength);\n\n\tstd::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength) override;\nprivate:\n\tstd::vector<const char*> InputNames = { \"waveform\"};\n\tstd::vector<const char*> OutputNames = { \"f0\" };\n\tstd::vector<double> refined_f0;\n};\n\nvoid EmptyCache();\n\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/G2P/MoeVSG2P.cpp",
    "content": "﻿#include \"MoeVSG2P.hpp\"\n#include \"MJson.h\"\n#include \"../../StringPreprocess.hpp\"\n#include \"../../InferTools/inferTools.hpp\"\n#include <fstream>\n\nMoeVoiceStudioG2PHeader\nstd::wregex SignRegex(L\"[!@#$%^&*()_+\\\\-=`~,./;'\\\\[\\\\]<>?:\\\"{}|\\\\\\\\。？！，、；：“”‘’『』「」（）〔〕【】─…·—～《》〈〉]+\");\nstd::wregex WordRegex(L\"[^!@#$%^&*()_+\\\\-=`~,./;'\\\\[\\\\]<>?:\\\"{}|\\\\\\\\。？！，、；：“”‘’『』「」（）〔〕【】─…·—～《》〈〉]+\");\nstd::wregex BlankRegex(L\"[ ]+\");\nstd::wregex ChineseRegex(L\"^[\\\\u4e00-\\\\u9fa5]{0,}$\");\nstd::wregex NumberRegex(L\"\\\\d+(?:\\\\.?\\\\d+)?\");\nstd::wstring ChineseNumber[] = { L\"零\",L\"一\",L\"二\",L\"三\",L\"四\",L\"五\",L\"六\",L\"七\",L\"八\",L\"九\",L\"十\" };\nstd::wstring ChineseNumberDigit[] = { L\"\",L\"十\",L\"百\",L\"千\",L\"万\",L\"十万\",L\"百万\",L\"千万\",L\"亿\" };\nstd::wstring JapaneseNumber[] = { L\"零\",L\"一\",L\"ニ\",L\"三\",L\"四\",L\"五\",L\"六\",L\"七\",L\"八\",L\"九\",L\"十\" };\nstd::wstring JapaneseNumberDigit[] = { L\"\",L\"十\",L\"百\",L\"千\",L\"万\",L\"十万\",L\"百万\",L\"千万\",L\"億\" };\nstd::unordered_map<std::wstring, std::wstring> _PUNCTUATION_MAP{\n\t{ L\"：\", L\",\" }, { L\"；\", L\",\" }, { L\"，\", L\",\" }, { L\"。\", L\".\" }, { L\"！\", L\"!\" }, { L\"？\", L\"?\" },\n\t{ L\"·\", L\",\" }, { L\"、\", L\",\" }, { L\"...\", L\"…\" }, { L\"$\", L\".\" }, { L\"“\", L\"'\" },\n\t{ L\"”\", L\"'\" }, { L\"‘\", L\"'\" }, { L\"’\", L\"'\" }, { L\"（\", L\"'\" }, { L\"）\", L\"'\" }, { L\"(\", L\"'\" },\n\t{ L\")\", L\"'\" }, { L\"《\", L\"'\" }, { L\"》\", L\"'\" }, { L\"【\", L\"'\" }, { L\"】\", L\"'\" }, { L\"[\", L\"'\" },\n\t{ L\"]\", L\"'\" }, { L\"—\", L\"-\" }, { L\"～\", L\"-\" }, { L\"~\", L\"-\" }, { L\"「\", L\"'\" }, { L\"」\", L\"'\" }\n};\nstd::unordered_map<std::wstring, std::wstring> _ALPHASYMBOL_MAP{\n\t{L\"#\", L\"シャープ\"}, { L\"%\", L\"パーセント\" }, { L\"&\", L\"アンド\" }, { L\"+\", L\"プラス\" }, { L\"-\", L\"マイナス\" },\n\t{ L\":\", L\"コロン\" }, { L\";\", L\"セミコロン\" }, { L\"<\", L\"小なり\" }, { L\"=\", L\"イコール\" }, { L\">\", L\"大なり\" },\n\t{ L\"@\", L\"アット\" }, { L\"a\", L\"エー\" }, { L\"b\", L\"ビー\" }, { L\"c\", L\"シー\" }, { L\"d\", L\"ディー\" }, { L\"e\", L\"イー\" },\n\t{ L\"f\", L\"エフ\" }, { L\"g\", L\"ジー\" }, { L\"h\", L\"エイチ\" }, { L\"i\", L\"アイ\" }, { L\"j\", L\"ジェー\" }, { L\"k\", L\"ケー\" },\n\t{ L\"l\", L\"エル\" }, { L\"m\", L\"エム\" }, { L\"n\", L\"エヌ\" }, { L\"o\", L\"オー\" }, { L\"p\", L\"ピー\" }, { L\"q\", L\"キュー\" },\n\t{ L\"r\", L\"アール\" }, { L\"s\", L\"エス\" }, { L\"t\", L\"ティー\" }, { L\"u\", L\"ユー\" }, { L\"v\", L\"ブイ\" }, { L\"w\", L\"ダブリュー\" },\n\t{ L\"x\", L\"エックス\" }, { L\"y\", L\"ワイ\" }, { L\"z\", L\"ゼット\" }, { L\"α\", L\"アルファ\" }, { L\"β\", L\"ベータ\" }, { L\"γ\", L\"ガンマ\" },\n\t{ L\"δ\", L\"デルタ\" }, { L\"ε\", L\"イプシロン\" }, { L\"ζ\", L\"ゼータ\" }, { L\"η\", L\"イータ\" }, { L\"θ\", L\"シータ\" }, { L\"ι\", L\"イオタ\" },\n\t{ L\"κ\", L\"カッパ\" }, { L\"λ\", L\"ラムダ\" }, { L\"μ\", L\"ミュー\" }, { L\"ν\", L\"ニュー\" }, { L\"ξ\", L\"クサイ\" }, { L\"ο\", L\"オミクロン\" },\n\t{ L\"π\", L\"パイ\" }, { L\"ρ\", L\"ロー\" }, { L\"σ\", L\"シグマ\" }, { L\"τ\", L\"タウ\" }, { L\"υ\", L\"ウプシロン\" }, { L\"φ\", L\"ファイ\" },\n\t{ L\"χ\", L\"カイ\" }, { L\"ψ\", L\"プサイ\" }, { L\"ω\", L\"オメガ\", }};\nstd::vector<std::pair<std::wstring, std::wstring>> _CURRENCY_MAP{{L\"\\\\$\", L\"ドル\"}, { L\"¥\", L\"円\" }, { L\"£\", L\"ポンド\" }, { L\"€\", L\"ユーロ\" }};\n\nMVSCleaner DefaultCleaner;\n\nMVSCleaner* GetDefCleaner()\n{\n\treturn &DefaultCleaner;\n}\n\n#ifdef WIN32\nMoeVoiceStudioG2PApi::~MoeVoiceStudioG2PApi()\n{\n\tunLoad();\n}\n\nMoeVoiceStudioG2PApi& MoeVoiceStudioG2PApi::operator=(MoeVoiceStudioG2PApi&& move) noexcept\n{\n\tfunc = move.func;\n\tm_hDynLib = move.m_hDynLib;\n\tmove.func = nullptr;\n\tmove.m_hDynLib = nullptr;\n\treturn *this;\n}\n\nbool MoeVoiceStudioG2PApi::enabled() const\n{\n\treturn m_hDynLib != nullptr;\n}\n\nMoeVoiceStudioG2PApi::SplitData MoeVoiceStudioG2PApi::GetSplitWords(const std::wstring& inputLen) const\n{\n\tSplitData TempData;\n\tif (getvocab)\n\t\tTempData = (*(SplitData*)getvocab(inputLen.c_str()));\n\treturn TempData;\n}\n\nvoid MoeVoiceStudioG2PApi::LoadDict(const std::wstring& Path) const\n{\n\tif (loaddic)\n\t\tloaddic(Path.c_str());\n}\n\nchar MoeVoiceStudioG2PApi::Load(const std::wstring& PluginName)\n{\n\tfunc = nullptr;\n\tfrel = nullptr;\n\tif (m_hDynLib)\n\t{\n\t\tFreeLibrary(m_hDynLib);\n\t\tm_hDynLib = nullptr;\n\t}\n\tm_hDynLib = LoadLibrary((PluginName).c_str());\n\tif (m_hDynLib == nullptr)\n\t\treturn -1;\n\tfunc = reinterpret_cast<funTy>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"PluginMain\")\n\t\t\t)\n\t\t);\n\tfrel = reinterpret_cast<freTy>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"Release\")\n\t\t\t)\n\t\t);\n\tgetvocab = reinterpret_cast<vocabFn>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"GetSplitData\")\n\t\t\t)\n\t\t);\n\tvocabrel = reinterpret_cast<freTy>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"RefreshTokenizer\")\n\t\t\t)\n\t\t);\n\tloaddic = reinterpret_cast<loadFn>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"LoadDict\")\n\t\t\t)\n\t\t);\n\tif (func == nullptr)\n\t\treturn 1;\n\treturn 0;\n}\n\nstd::wstring MoeVoiceStudioG2PApi::functionAPI(const std::wstring& inputLen, const std::wstring& placeholderSymbol,\n\tconst std::wstring& extraInfo, const std::string& languageID) const\n{\n\tif (func)\n\t{\n\t\tconst auto tmp = func(inputLen.c_str(), placeholderSymbol.c_str(), extraInfo.c_str(), languageID.c_str());\n\t\tstd::wstring ret = tmp;\n\t\treturn ret;\n\t}\n\treturn inputLen;\n}\n\nvoid MoeVoiceStudioG2PApi::unLoad()\n{\n\tif (frel)\n\t\tfrel();\n\tif (vocabrel)\n\t\tvocabrel();\n\tvocabrel = nullptr;\n\tgetvocab = nullptr;\n\tloaddic = nullptr;\n\tfunc = nullptr;\n\tfrel = nullptr;\n\tif (m_hDynLib)\n\t\tFreeLibrary(m_hDynLib);\n\tm_hDynLib = nullptr;\n}\n#endif\n\nvoid MVSDict::GetDict(const std::wstring& path)\n{\n\tif (path.empty())\n\t{\n\t\t_Dict.clear();\n\t\treturn;\n\t}\n\tPlaceholderSymbol = L\"|\";\n\tstd::string phoneInfo, phoneInfoAll;\n\tstd::ifstream phonefile(path.c_str());\n\tif (!phonefile.is_open())\n\t\tLibDLVoiceCodecThrow(\"phone file not found\")\n\twhile (std::getline(phonefile, phoneInfo))\n\t\tphoneInfoAll += phoneInfo;\n\tphonefile.close();\n\tMJson PhoneJson;\n\tPhoneJson.Parse(phoneInfoAll);\n\tif (PhoneJson.HasParseError())\n\t\tLibDLVoiceCodecThrow(\"json file error\")\n\tfor (const auto& itr : PhoneJson.GetMemberArray())\n\t{\n\t\tstd::wstring Key = to_wide_string(itr.first);\n\t\tif (Key == L\"PlaceholderSymbol\")\n\t\t{\n\t\t\tif (itr.second.IsString() && itr.second.GetStringLength())\n\t\t\t\tPlaceholderSymbol = to_wide_string(itr.second.GetString());\n\t\t\tif (PlaceholderSymbol.length() > 1)\n\t\t\t\tPlaceholderSymbol = L\"|\";\n\t\t\tcontinue;\n\t\t}\n\t\tconst auto Value = itr.second.GetArray();\n\t\t_Dict[Key] = std::vector<std::wstring>();\n\t\tfor (const auto& it : Value)\n\t\t\t_Dict[Key].push_back(to_wide_string(it.GetString()));\n\t}\n}\n\nstd::vector<std::wstring> MVSDict::DictReplace(const std::vector<std::wstring>& input) const\n{\n\tstd::vector<std::wstring> _out;\n\tfor (const auto& i : input)\n\t\tif (_Dict.find(i) != _Dict.end())\n\t\t{\n\t\t\tconst auto& Value = _Dict.at(i);\n\t\t\t_out.insert(_out.end(), Value.begin(), Value.end());\n\t\t}\n\t\telse\n\t\t\t_out.emplace_back(i);\n\treturn _out;\n}\n\nstd::vector<std::wstring> MVSDict::DictReplace(const std::wstring& input, const std::wstring& tPlaceholderSymbol) const\n{\n\tstd::vector<std::wstring> _output;\n\tauto tmp = input;\n\ttmp += tPlaceholderSymbol;\n\twhile (!tmp.empty())\n\t{\n\t\tconst size_t pos = tmp.find(tPlaceholderSymbol);\n\t\tconst auto Key = tmp.substr(0, pos);\n\t\ttmp = tmp.substr(pos + 1);\n\t\tif (_Dict.find(Key) != _Dict.end())\n\t\t{\n\t\t\tconst auto& Value = _Dict.at(Key);\n\t\t\t_output.insert(_output.end(), Value.begin(), Value.end());\n\t\t}\n\t\telse\n\t\t\t_output.emplace_back(Key);\n\t}\n\n\tfor (int64_t i = int64_t(_output.size()) - 1; i >= 0; --i)\n\t\tif (_output[i].empty())\n\t\t\t_output.erase(_output.begin() + i);\n\n\treturn _output;\n}\n\nstd::wstring MVSDict::DictReplaceGetStr(const std::wstring& input, const std::wstring& tPlaceholderSymbol, bool usePlaceholderSymbol) const\n{\n\tconst auto tmp = DictReplace(input, tPlaceholderSymbol);\n\tstd::wstring output;\n\tfor (const auto& i : tmp)\n\t\tif (usePlaceholderSymbol)\n\t\t\toutput += i + tPlaceholderSymbol;\n\t\telse\n\t\t\toutput += i;\n\treturn output;\n}\n\nvoid Tokenizer::load(const std::wstring& _Path)\n{\n\tconst MJson _VocabJson(_Path);\n\tif (!_VocabJson.HasMember(\"ContinuingSubwordPrefix\") ||\n\t\t!_VocabJson.HasMember(\"Type\") ||\n\t\t!_VocabJson.HasMember(\"Vocab\") ||\n\t\t_VocabJson[\"ContinuingSubwordPrefix\"].Empty() ||\n\t\t_VocabJson[\"Type\"].Empty() ||\n\t\t!_VocabJson[\"ContinuingSubwordPrefix\"].IsString() ||\n\t\t!_VocabJson[\"Type\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"Vocab.json Error\")\n\tconst std::string Type = _VocabJson[\"Type\"].GetString();\n\tif (Type == \"Unigram\") Model = TokenizerModel::Unigram;\n\tSymbol = to_wide_string(_VocabJson[\"ContinuingSubwordPrefix\"].GetString());\n\n\tif (_VocabJson[\"Vocab\"].IsArray())\n\t{\n\t\tconst auto _VocabArray = _VocabJson[\"Vocab\"].GetArray();\n\t\tint64_t Index = 0;\n\t\tfor (const auto& Object : _VocabArray)\n\t\t{\n\t\t\tif (!(Object.IsString() || Object.IsArray()))\n\t\t\t{\n\t\t\t\tauto Beg = Object.MemberBegin();\n\t\t\t\tif (Beg.first.empty())\n\t\t\t\t\tcontinue;\n\t\t\t\tVocab[to_wide_string(Beg.first)] = Beg.second.GetInt64();\n\t\t\t}\n\t\t\telse\n\t\t\t\tVocab[to_wide_string(Object.IsString() ? Object.GetString() : Object.GetArray()[0].GetString())] = Index++;\n\t\t}\n\t}\n\telse\n\t{\n\t\tconst auto _VocabDict = _VocabJson[\"Vocab\"].GetMemberArray();\n\t\tfor (const auto& Pair : _VocabDict)\n\t\t{\n\t\t\tif (Pair.second.IsInt())\n\t\t\t\tVocab[to_wide_string(Pair.first)] = TokenizerType(Pair.second.GetInt());\n\t\t\telse if (Pair.second.IsFloat())\n\t\t\t\tVocab[to_wide_string(Pair.first)] = TokenizerType(Pair.second.GetFloat());\n\t\t}\n\t}\n\n\tif (_VocabJson.HasMember(\"UseSplit\") && _VocabJson[\"UseSplit\"].IsBool())\n\t\tUseSplit = _VocabJson[\"UseSplit\"].GetBool();\n}\n\nvoid Tokenizer::loadCleaner(const std::wstring& _Path) const\n{\n\tif (Cleaner)\n\t\tCleaner->loadG2p(_Path);\n}\n\nvoid Tokenizer::loadDict(const std::wstring& _Path) const\n{\n\tif (Cleaner)\n\t\tCleaner->loadDict(_Path);\n}\n\nstd::vector<std::wstring> Tokenizer::UnigramMethod(const std::wstring& Seq, size_t MaxWordLength, TokenizerMethod Method) const\n{\n\tif (Seq.empty())\n\t\treturn {};\n\t//auto SeqVector = SplitString(Seq, SignRegex);\n\tstd::vector<std::wstring> Tokens;\n\tTokens.emplace_back(L\"[CLS]\");\n\tstd::wstring SeqWord = Seq;\n\tif (Method == TokenizerMethod::Left)\n\t{\n\t\tbool FirstTime = true;\n\t\twhile (!SeqWord.empty())\n\t\t{\n\t\t\tfor (size_t SearchLength = min(MaxWordLength, SeqWord.length()); SearchLength > 0; --SearchLength)\n\t\t\t{\n\t\t\t\tif (FirstTime)\n\t\t\t\t{\n\t\t\t\t\tsize_t SubVal = 0;\n\t\t\t\t\tif (SearchLength > Symbol.length())\n\t\t\t\t\t\tSubVal = Symbol.length();\n\t\t\t\t\tconst auto SearchResult = Vocab.find(Symbol + SeqWord.substr(0, SearchLength - SubVal));\n\t\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t\t{\n\t\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\t\tSeqWord = SeqWord.substr(SearchLength - SubVal);\n\t\t\t\t\t\tFirstTime = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst auto SearchResult = Vocab.find(SeqWord.substr(0, SearchLength));\n\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t{\n\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\tSeqWord = SeqWord.substr(SearchLength);\n\t\t\t\t\tif (FirstTime) FirstTime = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (SearchLength == 1)\n\t\t\t\t{\n\t\t\t\t\tconst auto SubStr = SeqWord.substr(0, SearchLength);\n\t\t\t\t\tconst auto SearchRes = _PUNCTUATION_MAP.find(SubStr);\n\t\t\t\t\tif (SearchRes != _PUNCTUATION_MAP.end())\n\t\t\t\t\t{\n\t\t\t\t\t\tconst auto SearchR = Vocab.find(SearchRes->second);\n\t\t\t\t\t\tif (SearchR != Vocab.end())\n\t\t\t\t\t\t\tTokens.emplace_back(SearchR->first);\n\t\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (Tokens.empty() || Tokens.back() != L\"[UNK]\")\n\t\t\t\t\t\tTokens.emplace_back(SubStr);\n\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tLibDLVoiceCodecThrow(\"NotImplementedError\")\n\tTokens.emplace_back(L\"[SEP]\");\n\treturn Tokens;\n}\n\nstd::vector<std::wstring> Tokenizer::WordPieceMethod(const std::wstring& Seq, size_t MaxWordLength, TokenizerMethod Method) const\n{\n\tif (Seq.empty())\n\t\treturn {};\n\tauto SeqVector = SplitString(Seq, SignRegex);\n\tstd::vector<std::wstring> Tokens;\n\tTokens.emplace_back(L\"[CLS]\");\n\tif (Method == TokenizerMethod::Left)\n\t{\n\t\tfor (auto& SeqWord : SeqVector)\n\t\t{\n\t\t\tbool FirstTime = true;\n\t\t\twhile (!SeqWord.empty())\n\t\t\t{\n\t\t\t\tif (regex_match(SeqWord.substr(0, 1), ChineseRegex))\n\t\t\t\t{\n\t\t\t\t\tconst auto SearchResult = Vocab.find(SeqWord.substr(0, 1));\n\t\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\telse\n\t\t\t\t\t\tTokens.emplace_back(SeqWord.substr(0, 1));\n\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (size_t SearchLength = min(MaxWordLength, SeqWord.length()); SearchLength > 0; --SearchLength)\n\t\t\t\t{\n\t\t\t\t\tif (!FirstTime)\n\t\t\t\t\t{\n\t\t\t\t\t\tsize_t SubVal = 0;\n\t\t\t\t\t\tif (SearchLength > Symbol.length())\n\t\t\t\t\t\t\tSubVal = Symbol.length();\n\t\t\t\t\t\tconst auto SearchResult = Vocab.find(Symbol + SeqWord.substr(0, SearchLength - SubVal));\n\t\t\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\t\t\tSeqWord = SeqWord.substr(SearchLength - SubVal);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst auto SearchResult = Vocab.find(SeqWord.substr(0, SearchLength));\n\t\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t\t{\n\t\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\t\tSeqWord = SeqWord.substr(SearchLength);\n\t\t\t\t\t\tif (FirstTime) FirstTime = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (SearchLength == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst auto SubStr = SeqWord.substr(0, SearchLength);\n\t\t\t\t\t\tconst auto SearchRes = _PUNCTUATION_MAP.find(SubStr);\n\t\t\t\t\t\tif (SearchRes != _PUNCTUATION_MAP.end())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst auto SearchR = Vocab.find(SearchRes->second);\n\t\t\t\t\t\t\tif (SearchR != Vocab.end())\n\t\t\t\t\t\t\t\tTokens.emplace_back(SearchR->first);\n\t\t\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (Tokens.empty() || Tokens.back() != L\"[UNK]\")\n\t\t\t\t\t\t\tTokens.emplace_back(SubStr);\n\t\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tLibDLVoiceCodecThrow(\"NotImplementedError\")\n\tTokens.emplace_back(L\"[SEP]\");\n\treturn Tokens;\n}\n\nstd::vector<Tokenizer::TokenizerType> Tokenizer::operator()(const std::vector<std::wstring>& Seq, bool SkipBlank) const\n{\n\tstd::vector<TokenizerType> Tokens;\n\tconst auto UNKID = Vocab.at(L\"[UNK]\");\n\tfor (const auto& iter : Seq)\n\t{\n\t\tconst auto res = Vocab.find(iter);\n\t\tif (res != Vocab.end())\n\t\t\tTokens.emplace_back(res->second);\n\t\telse if(iter.empty() || Tokens.back() != UNKID)\n\t\t{\n\t\t\tif (SkipBlank && std::regex_match(iter, BlankRegex))\n\t\t\t\tcontinue;\n\t\t\tTokens.emplace_back(UNKID);\n\t\t}\n\t}\n\treturn Tokens;\n}\n\nstd::vector<std::wstring> Tokenizer::Tokenize(const std::wstring& Seq, size_t MaxWordLength, TokenizerMethod Method) const\n{\n\tif (Model == TokenizerModel::WordPiece)\n\t\treturn WordPieceMethod(Seq, MaxWordLength, Method);\n\treturn UnigramMethod(Seq, MaxWordLength, Method);\n}\n\nstd::vector<std::wstring> Tokenizer::SplitString(const std::wstring& _InputRef, const std::wregex & _SignRegex)\n{\n\tif (_InputRef.empty())\n\t\treturn {};\n\tstd::wstring InputStr = _InputRef;\n\tstd::vector<std::wstring> TmpStrVec, StrVec;\n\tstd::wsmatch MatchedSign;\n\twhile (std::regex_search(InputStr, MatchedSign, _SignRegex))\n\t{\n\t\tif (MatchedSign.prefix().matched)\n\t\t\tTmpStrVec.push_back(MatchedSign.prefix());\n\t\tTmpStrVec.push_back(MatchedSign.str());\n\t\tInputStr = MatchedSign.suffix();\n\t}\n\tif (!InputStr.empty())\n\t\tTmpStrVec.emplace_back(InputStr);\n\tfor(const auto& i : TmpStrVec)\n\t{\n\t\tstd::wsregex_token_iterator TokenIter(i.begin(), i.end(), BlankRegex, -1);\n\t\tdecltype(TokenIter) TokenIterEnd;\n\t\tfor (; TokenIter != TokenIterEnd; ++TokenIter)\n\t\t\tif (!TokenIter->str().empty())\n\t\t\t\tStrVec.push_back(TokenIter->str());\n\t}\n\treturn StrVec;\n}\n\nstd::vector<std::wstring> Tokenizer::SplitWithPlugin(const std::vector<std::wstring>& _Inputs) const\n{\n\tstd::vector<std::wstring> SeqVec;\n\tfor(const auto& Seq : _Inputs)\n\t{\n\t\tconst auto SplitedWords = GetCleaner().GetCleaner().GetSplitWords(Seq);\n\t\tfor (size_t i = 0; i < SplitedWords.Size; ++i)\n\t\t{\n\t\t\tauto TmpString = to_wide_string(SplitedWords.Data[i]);\n\t\t\tTmpString = TmpString.substr(0, TmpString.find(L','));\n\t\t\tSeqVec.emplace_back(std::move(TmpString));\n\t\t}\n\t}\n\treturn SeqVec;\n}\n\nstd::wstring NumberToChinese(double Number)\n{\n\tstd::wstring StrRtn;\n\tstd::wstring InputStr = std::to_wstring(Number);\n\tconst size_t PIndex = InputStr.find(L'.');\n\tstd::wstring IntegerStr, FractionStr;\n\tif (PIndex != std::wstring::npos)\n\t{\n\t\tIntegerStr = InputStr.substr(0, PIndex);\n\t\tFractionStr = InputStr.substr(PIndex + 1);\n\t\twhile (!FractionStr.empty() && FractionStr.back() == L'0')\n\t\t\tFractionStr.pop_back();\n\t}\n\telse\n\t\tIntegerStr = std::move(InputStr);\n\n\tif (IntegerStr != L\"0\")\n\t{\n\t\tsize_t MaxIntegerStrLength = IntegerStr.length();\n\t\tfor (; MaxIntegerStrLength > 0; --MaxIntegerStrLength)\n\t\t\tif (IntegerStr[MaxIntegerStrLength - 1] != L'0')\n\t\t\t\tbreak;\n\t\tif (MaxIntegerStrLength < 1)\n\t\t\tMaxIntegerStrLength = 1;\n\n\t\tconst auto DigitNum = IntegerStr.length();\n\t\tfor (size_t i = 0; i < MaxIntegerStrLength; i++)\n\t\t{\n\t\t\tconst auto NumberIndex = IntegerStr[i] - L'0';\n\t\t\tconst auto DigitIndex = DigitNum - i - 1;\n\t\t\tif (0 == NumberIndex)\n\t\t\t{\n\t\t\t\tif ((i > 0 && L'0' == IntegerStr[i - 1]) || i == IntegerStr.length() - 1)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (DigitIndex >= 4 && 0 == DigitIndex % 4)\n\t\t\t\t\tStrRtn += ChineseNumberDigit[DigitIndex];\n\t\t\t\telse\n\t\t\t\t\tStrRtn += ChineseNumber[NumberIndex];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tStrRtn += ChineseNumber[NumberIndex];\n\t\t\t\tif (IntegerStr.length() == 2 && IntegerStr[0] == '1' && i == 0)\n\t\t\t\t\tStrRtn.erase(0);\n\t\t\t\tif (0 == DigitIndex % 4)\n\t\t\t\t\tStrRtn += ChineseNumberDigit[DigitIndex];\n\t\t\t\telse\n\t\t\t\t\tStrRtn += ChineseNumberDigit[DigitIndex % 4];\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tStrRtn += L\"零\";\n\n\tif (!FractionStr.empty())\n\t\tStrRtn += L\"点\";\n\tfor(const auto FractionI : FractionStr)\n\t{\n\t\tconst auto NumberIndex = FractionI - L'0';\n\t\tStrRtn += ChineseNumber[NumberIndex];\n\t}\n\treturn StrRtn;\n}\n\nstd::wstring NumberToJapanese(double Number)\n{\n\tstd::wstring StrRtn;\n\tstd::wstring InputStr = std::to_wstring(Number);\n\tconst size_t PIndex = InputStr.find(L'.');\n\tstd::wstring IntegerStr, FractionStr;\n\tif (PIndex != std::wstring::npos)\n\t{\n\t\tIntegerStr = InputStr.substr(0, PIndex);\n\t\tFractionStr = InputStr.substr(PIndex + 1);\n\t\twhile (!FractionStr.empty() && FractionStr.back() == L'0')\n\t\t\tFractionStr.pop_back();\n\t}\n\telse\n\t\tIntegerStr = std::move(InputStr);\n\n\tif (IntegerStr != L\"0\")\n\t{\n\t\tsize_t MaxIntegerStrLength = IntegerStr.length();\n\t\tfor (; MaxIntegerStrLength > 0; --MaxIntegerStrLength)\n\t\t\tif (IntegerStr[MaxIntegerStrLength - 1] != L'0')\n\t\t\t\tbreak;\n\t\tif (MaxIntegerStrLength < 1)\n\t\t\tMaxIntegerStrLength = 1;\n\n\t\tconst auto DigitNum = IntegerStr.length();\n\t\tfor (size_t i = 0; i < MaxIntegerStrLength; i++)\n\t\t{\n\t\t\tconst auto NumberIndex = IntegerStr[i] - L'0';\n\t\t\tconst auto DigitIndex = DigitNum - i - 1;\n\t\t\tif (0 == NumberIndex)\n\t\t\t{\n\t\t\t\tif ((i > 0 && L'0' == IntegerStr[i - 1]) || i == IntegerStr.length() - 1)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (DigitIndex >= 4 && 0 == DigitIndex % 4)\n\t\t\t\t\tStrRtn += JapaneseNumberDigit[DigitIndex];\n\t\t\t\telse\n\t\t\t\t\tStrRtn += JapaneseNumber[NumberIndex];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tStrRtn += JapaneseNumber[NumberIndex];\n\t\t\t\tif (IntegerStr.length() == 2 && IntegerStr[0] == '1' && i == 0)\n\t\t\t\t\tStrRtn.erase(0);\n\t\t\t\tif (0 == DigitIndex % 4)\n\t\t\t\t\tStrRtn += JapaneseNumberDigit[DigitIndex];\n\t\t\t\telse\n\t\t\t\t\tStrRtn += JapaneseNumberDigit[DigitIndex % 4];\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tStrRtn += L\"零\";\n\n\tif (!FractionStr.empty())\n\t\tStrRtn += L\"点\";\n\tfor (const auto FractionI : FractionStr)\n\t{\n\t\tconst auto NumberIndex = FractionI - L'0';\n\t\tStrRtn += JapaneseNumber[NumberIndex];\n\t}\n\treturn StrRtn;\n}\n\nstd::wstring ChineseNormalize(const std::wstring& _Input)\n{\n\tstd::wstring RtnStr;\n\tconst auto StrVec = Tokenizer::SplitString(_Input, NumberRegex);\n\tfor(const auto& Str : StrVec)\n\t{\n\t\tif (std::regex_match(Str, NumberRegex))\n\t\t\tRtnStr += NumberToChinese(_wtof(Str.c_str()));\n\t\telse\n\t\t\tRtnStr += Str;\n\t}\n\tRtnStr = std::regex_replace(RtnStr, std::wregex(L\"嗯\"), L\"恩\");\n\tRtnStr = std::regex_replace(RtnStr, std::wregex(L\"呣\"), L\"母\");\n\treturn RtnStr;\n}\n\nstd::wstring JapaneseNormalize(const std::wstring& _Input)\n{\n\tstd::wstring RtnStr;\n\tconst auto StrVec = Tokenizer::SplitString(_Input, NumberRegex);\n\tfor (const auto& Str : StrVec)\n\t{\n\t\tif (std::regex_match(Str, NumberRegex))\n\t\t\tRtnStr += NumberToJapanese(_wtof(Str.c_str()));\n\t\telse\n\t\t\tRtnStr += Str;\n\t}\n\tfor (const auto& PunPair : _CURRENCY_MAP)\n\t\tRtnStr = std::regex_replace(RtnStr, std::wregex(PunPair.first), PunPair.second);\n\treturn RtnStr;\n}\n\nstd::wstring NormalizeText(const std::wstring& _Input, const std::string& _Language)\n{\n\tif (_Language == \"ZH\")\n\t\treturn ChineseNormalize(_Input);\n\tif (_Language == \"JP\")\n\t\treturn JapaneseNormalize(_Input);\n\treturn _Input;\n}\n\nMoeVoiceStudioG2PEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/G2P/MoeVSG2P.hpp",
    "content": "﻿/**\n * FileName: MoeVSG2P.hpp\n * Note: MoeVoiceStudioCore G2P及字典（TTS用）\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2023-11-9 Create\n*/\n\n#pragma once\n#include <string>\n#ifdef _WIN32\n#ifndef UNICODE\n#define UNICODE\n#endif\n#include <Windows.h>\n#endif\n#include <map>\n#include <regex>\n#include <vector>\n#include <unordered_map>\n\n#define MoeVoiceStudioG2PHeader namespace MoeVSG2P {\n#define MoeVoiceStudioG2PEnd }\n\nMoeVoiceStudioG2PHeader\n\nclass MoeVoiceStudioG2PApi\n{\npublic:\n\tstruct SplitData\n\t{\n\t\tchar** Data = nullptr;\n\t\tsize_t Size = 0;\n\t};\n\tusing funTy = const wchar_t* (*)(const wchar_t*, const wchar_t*, const wchar_t*, const char*);\n\tusing freTy = void (*)();\n\tusing vocabFn = void* (*)(const wchar_t*);\n\tusing loadFn = void (*)(const wchar_t*);\n\tMoeVoiceStudioG2PApi() = default;\n\t~MoeVoiceStudioG2PApi();\n\tchar Load(const std::wstring& PluginName);\n\tvoid unLoad();\n\tvoid ReleaseVoc() const\n\t{\n\t\tif (vocabrel)\n\t\t\tvocabrel();\n\t}\n\t[[nodiscard]] SplitData GetSplitWords(const std::wstring& inputLen) const;\n\t[[nodiscard]] std::wstring functionAPI(const std::wstring& inputLen, const std::wstring& placeholderSymbol,\n\t\tconst std::wstring& extraInfo, const std::string& languageID) const;\n\tMoeVoiceStudioG2PApi(const MoeVoiceStudioG2PApi&) = delete;\n\tMoeVoiceStudioG2PApi(MoeVoiceStudioG2PApi&&) = delete;\n\tMoeVoiceStudioG2PApi& operator=(MoeVoiceStudioG2PApi&& move) noexcept;\n\t[[nodiscard]] bool enabled() const;\n\tMoeVoiceStudioG2PApi& operator=(const MoeVoiceStudioG2PApi&) = delete;\n\tvoid LoadDict(const std::wstring& Path) const;\nprivate:\n#ifdef WIN32\n\tconst wchar_t*(*func)(const wchar_t*, const wchar_t*, const wchar_t*, const char*) = nullptr;\n\tvoid (*frel)() = nullptr;\n\tvoid* (*getvocab)(const wchar_t*) = nullptr;\n\tvoid (*vocabrel)() = nullptr;\n\tvoid (*loaddic)(const wchar_t*) = nullptr;\n\tHINSTANCE m_hDynLib = nullptr;\n#endif\n};\n\nclass MVSDict\n{\npublic:\n\tMVSDict() = default;\n\t~MVSDict() = default;\n\n\t[[nodiscard]] bool enabled() const\n\t{\n\t\treturn !_Dict.empty();\n\t}\n\n\tvoid unload()\n\t{\n\t\t_Dict.clear();\n\t}\n\n\t[[nodiscard]] std::vector<std::wstring> DictReplace(const std::vector<std::wstring>& input) const;\n\n\t[[nodiscard]] std::vector<std::wstring> DictReplace(const std::wstring& input, const std::wstring& tPlaceholderSymbol) const;\n\n\t[[nodiscard]] std::wstring DictReplaceGetStr(const std::wstring& input, const std::wstring& tPlaceholderSymbol, bool usePlaceholderSymbol = true) const;\n\n\tvoid GetDict(const std::wstring& path);\n\n\t[[nodiscard]] std::wstring getPlaceholderSymbol() const\n\t{\n\t\treturn PlaceholderSymbol;\n\t}\nprivate:\n\tstd::map<std::wstring, std::vector<std::wstring>> _Dict;\n\tstd::wstring PlaceholderSymbol = L\"|\";\n};\n\nclass MVSCleaner\n{\npublic:\n\tMVSCleaner() = default;\n\n\t~MVSCleaner()\n\t{\n\t\tunloadDict();\n\t\tunloadG2p();\n\t}\n\n\tvoid unloadDict()\n\t{\n\t\t_Dict.unload();\n\t}\n\n\tvoid unloadG2p()\n\t{\n\t\t_G2p.unLoad();\n\t}\n\n\tvoid loadDict(const std::wstring& _path)\n\t{\n\t\tif (_Dict.enabled())\n\t\t\tunloadDict();\n\t\t_Dict.GetDict(_path);\n\t}\n\n\tvoid loadG2p(const std::wstring& _path)\n\t{\n\t\tif (_G2p.enabled())\n\t\t\tunloadG2p();\n\t\t_G2p.Load(_path);\n\t}\n\n\t[[nodiscard]] bool G2pEnabled() const\n\t{\n\t\treturn _G2p.enabled();\n\t}\n\n\t[[nodiscard]] bool DictEnabled() const\n\t{\n\t\treturn _Dict.enabled();\n\t}\n\n\t[[nodiscard]] std::wstring G2p(const std::wstring& _text, const std::wstring& placeholderSymbol,\n\t\tconst std::wstring& extraInfo, std::string languageID) const\n\t{\n\t\treturn _G2p.functionAPI(_text, placeholderSymbol, extraInfo, languageID);\n\t}\n\n\t[[nodiscard]] const MoeVoiceStudioG2PApi& GetCleaner() const\n\t{\n\t\treturn _G2p;\n\t}\n\n\t[[nodiscard]] auto DictReplace(const std::vector<std::wstring>& input) const\n\t{\n\t\treturn _Dict.DictReplace(input);\n\t}\n\n\t[[nodiscard]] auto DictReplace(const std::wstring& input, const std::wstring& tPlaceholderSymbol) const\n\t{\n\t\treturn _Dict.DictReplace(input, tPlaceholderSymbol);\n\t}\n\n\t[[nodiscard]] auto DictReplaceGetStr(const std::wstring& input, const std::wstring& tPlaceholderSymbol, bool usePlaceholderSymbol = true) const\n\t{\n\t\treturn _Dict.DictReplaceGetStr(input, tPlaceholderSymbol, usePlaceholderSymbol);\n\t}\n\n\t[[nodiscard]] std::wstring getPlaceholderSymbol() const\n\t{\n\t\treturn _Dict.getPlaceholderSymbol();\n\t}\n\nprotected:\n\tMoeVoiceStudioG2PApi _G2p;\n\tMVSDict _Dict;\n};\n\nclass Tokenizer\n{\npublic:\n\tusing TokenizerType = int64_t;\n\tenum class TokenizerMethod\n\t{\n\t\tLeft,\n\t\tRight\n\t};\n\tenum class TokenizerModel\n\t{\n\t\tUnigram,\n\t\tWordPiece\n\t};\n\tTokenizer() = default;\n\tTokenizer(const std::wstring& _Path)\n\t{\n\t\tload(_Path);\n\t}\n\tvoid BondCleaner(MVSCleaner* MCleaner)\n\t{\n\t\tCleaner = MCleaner;\n\t}\n\tvoid load(const std::wstring& _Path);\n\tvoid loadCleaner(const std::wstring& _Path) const;\n\tvoid loadDict(const std::wstring& _Path) const;\n\t[[nodiscard]] const MVSCleaner& GetCleaner() const\n\t{\n\t\treturn *Cleaner;\n\t}\n\tconst MVSCleaner* operator->() const\n\t{\n\t\treturn Cleaner;\n\t}\n\t[[nodiscard]] std::vector<std::wstring> WordPieceMethod(const std::wstring& Seq, size_t MaxWordLength = 25, TokenizerMethod Method = TokenizerMethod::Left) const;\n\t[[nodiscard]] std::vector<std::wstring> UnigramMethod(const std::wstring& Seq, size_t MaxWordLength = 25, TokenizerMethod Method = TokenizerMethod::Left) const;\n\tstd::vector<TokenizerType> operator()(const std::vector<std::wstring>& Seq, bool SkipBlank = false) const;\n\t[[nodiscard]] std::vector<std::wstring> Tokenize(const std::wstring& Seq, size_t MaxWordLength = 25, TokenizerMethod Method = TokenizerMethod::Left) const;\n\t[[nodiscard]] std::vector<std::wstring> SplitWithPlugin(const std::vector<std::wstring>& _Inputs) const;\n\tstatic std::vector<std::wstring> SplitString(const std::wstring& _InputRef, const std::wregex& _SignRegex);\nprivate:\n\tstd::unordered_map<std::wstring, TokenizerType> Vocab;\n\tstd::wstring Symbol = L\"##\";\n\tTokenizerModel Model = TokenizerModel::WordPiece;\n\tMVSCleaner* Cleaner = nullptr;\n\tbool UseSplit = false;\n};\n\nMVSCleaner* GetDefCleaner();\n\nstd::wstring JapaneseNormalize(const std::wstring& _Input);\n\nstd::wstring ChineseNormalize(const std::wstring& _Input);\n\nstd::wstring NormalizeText(const std::wstring& _Input, const std::string& _Language);\n\nstd::wstring NumberToChinese(double Number);\n\nstd::wstring NumberToJapanese(double Number);\n\nMoeVoiceStudioG2PEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Sampler/MoeVSBaseSampler.cpp",
    "content": "﻿#include \"MoeVSBaseSampler.hpp\"\n#include \"../inferTools.hpp\"\nMoeVoiceStudioSamplerHeader\n\nMoeVSBaseSampler::MoeVSBaseSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :\n\tMelBins(Mel_Bins), Alpha(alpha), DenoiseFn(dfn), NoisePredictor(pred)\n{\n\t_callback = _ProgressCallback;\n\tMemory = memory;\n};\n\nstd::vector<Ort::Value> MoeVSBaseSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process)\n{\n\tLibDLVoiceCodecThrow(\"NotImplementedError\");\n}\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Sampler/MoeVSBaseSampler.hpp",
    "content": "﻿/**\n * FileName: MoeVSBaseSampler.hpp\n * Note: MoeVoiceStudioCore Diffusion 采样器基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#define MoeVoiceStudioSamplerHeader namespace MoeVSSampler {\n#define MoeVoiceStudioSamplerEnd }\n#include <functional>\n#include <onnxruntime_cxx_api.h>\nMoeVoiceStudioSamplerHeader\n\nclass MoeVSBaseSampler\n{\npublic:\n\tusing ProgressCallback = std::function<void(size_t, size_t)>;\n\n\t/**\n\t * \\brief 构造采样器\n\t * \\param alpha Alphas Onnx模型Session\n\t * \\param dfn DenoiseFn Onnx模型Session\n\t * \\param pred Predictor Onnx模型Session\n\t * \\param Mel_Bins MelBins\n\t * \\param _ProgressCallback 进度条回调（直接传模型的回调就可以了） \n\t * \\param memory 模型的OrtMemoryInfo\n\t */\n\tMoeVSBaseSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\n\tvirtual ~MoeVSBaseSampler() = default;\n\n\t/**\n\t * \\brief 采样\n\t * \\param Tensors 输入张量（Tensors[0]为Condition，Tensors[1]为初始噪声）\n\t * \\param Steps 采样步数\n\t * \\param SpeedUp 加速倍数\n\t * \\param NoiseScale 噪声规模\n\t * \\param Seed 种子\n\t * \\param Process 当前进度\n\t * \\return Mel张量\n\t */\n\tvirtual std::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process);\nprotected:\n\tint64_t MelBins = 128;\n\tOrt::Session* Alpha = nullptr;\n\tOrt::Session* DenoiseFn = nullptr;\n\tOrt::Session* NoisePredictor = nullptr;\n\tProgressCallback _callback;\n\tOrt::MemoryInfo* Memory = nullptr;\n};\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Sampler/MoeVSSamplerManager.cpp",
    "content": "﻿#include \"MoeVSSamplerManager.hpp\"\n#include <map>\n#include \"../../Logger/MoeSSLogger.hpp\"\nMoeVoiceStudioSamplerHeader\nstd::map<std::wstring, GetMoeVSSamplerFn> RegisteredMoeVSSamplers;\n\nMoeVSSampler GetMoeVSSampler(const std::wstring& _name,\n\tOrt::Session* alpha,\n\tOrt::Session* dfn,\n\tOrt::Session* pred,\n\tint64_t Mel_Bins,\n\tconst MoeVSBaseSampler::ProgressCallback& _ProgressCallback,\n\tOrt::MemoryInfo* memory)\n{\n\tconst auto f_Sampler = RegisteredMoeVSSamplers.find(_name);\n\tif (f_Sampler != RegisteredMoeVSSamplers.end())\n\t\treturn f_Sampler->second(alpha, dfn, pred, Mel_Bins, _ProgressCallback, memory);\n\tthrow std::runtime_error(\"Unable To Find An Available Sampler\");\n}\n\nvoid RegisterMoeVSSampler(const std::wstring& _name, const GetMoeVSSamplerFn& _constructor_fn)\n{\n\tif (RegisteredMoeVSSamplers.find(_name) != RegisteredMoeVSSamplers.end())\n\t{\n\t\tlogger.log(L\"[Warn] F0ExtractorNameConflict\");\n\t\treturn;\n\t}\n\tRegisteredMoeVSSamplers[_name] = _constructor_fn;\n}\n\nstd::vector<std::wstring> GetMoeVSSamplerList()\n{\n\tstd::vector<std::wstring> SamplersVec;\n\tSamplersVec.reserve(RegisteredMoeVSSamplers.size());\n\tfor (const auto& i : RegisteredMoeVSSamplers)\n\t\tSamplersVec.emplace_back(i.first);\n\treturn SamplersVec;\n}\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Sampler/MoeVSSamplerManager.hpp",
    "content": "﻿/**\n * FileName: MoeVSSamplerManager.hpp\n * Note: MoeVoiceStudioCore Diffusion 采样器管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"MoeVSBaseSampler.hpp\"\n\nMoeVoiceStudioSamplerHeader\n\nclass MoeVSSampler\n{\npublic:\n\tMoeVSSampler() = delete;\n\tMoeVSSampler(MoeVSBaseSampler* _ext) : _f0_ext(_ext) {}\n\tMoeVSSampler(const MoeVSSampler&) = delete;\n\tMoeVSSampler(MoeVSSampler&& _ext) noexcept\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t}\n\tMoeVSSampler& operator=(const MoeVSSampler&) = delete;\n\tMoeVSSampler& operator=(MoeVSSampler&& _ext) noexcept\n\t{\n\t\tif (this == &_ext)\n\t\t\treturn *this;\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t\treturn *this;\n\t}\n\t~MoeVSSampler()\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = nullptr;\n\t}\n\tMoeVSBaseSampler* operator->() const { return _f0_ext; }\n\nprivate:\n\tMoeVSBaseSampler* _f0_ext = nullptr;\n};\n\nusing GetMoeVSSamplerFn = std::function<MoeVSSampler(Ort::Session*, Ort::Session*, Ort::Session*, int64_t, const MoeVSBaseSampler::ProgressCallback&, Ort::MemoryInfo*)>;\n\nvoid RegisterMoeVSSampler(const std::wstring& _name, const GetMoeVSSamplerFn& _constructor_fn);\n\n/**\n * \\brief 获取采样器\n * \\param _name 类名\n * \\param alpha Alphas Onnx模型Session\n * \\param dfn DenoiseFn Onnx模型Session\n * \\param pred Predictor Onnx模型Session\n * \\param Mel_Bins MelBins\n * \\param _ProgressCallback 进度条回调（直接传模型的回调就可以了）\n * \\param memory 模型的OrtMemoryInfo\n * \\return 采样器\n */\nMoeVSSampler GetMoeVSSampler(const std::wstring& _name,\n                             Ort::Session* alpha,\n                             Ort::Session* dfn,\n                             Ort::Session* pred,\n                             int64_t Mel_Bins,\n                             const MoeVSBaseSampler::ProgressCallback& _ProgressCallback,\n                             Ort::MemoryInfo* memory);\n\nstd::vector<std::wstring> GetMoeVSSamplerList();\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Sampler/MoeVSSamplers.cpp",
    "content": "﻿#include \"MoeVSSamplers.hpp\"\n#include <deque>\n#include <random>\n#include \"../inferTools.hpp\"\n\nMoeVoiceStudioSamplerHeader\n\tPndmSampler::PndmSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :\n\tMoeVSBaseSampler(alpha, dfn, pred, Mel_Bins, _ProgressCallback, memory) {}\n\nDDimSampler::DDimSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :\n\tMoeVSBaseSampler(alpha, dfn, pred, Mel_Bins, _ProgressCallback, memory) {}\n\nstd::vector<Ort::Value> PndmSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process)\n{\n\tstd::vector<int64_t> diffusionSteps;\n\tfor (int64_t itt = Steps - SpeedUp; itt >= 0; itt -= SpeedUp)\n\t\tdiffusionSteps.push_back(itt);\n\n\tstd::vector<Ort::Value> DenoiseIn;\n\tstd::vector<Ort::Value> DenoiseOut;\n\tstd::vector<Ort::Value> PredIn;\n\tstd::vector<Ort::Value> PredOut;\n\tstd::vector<Ort::Value> DiffOut;\n\n\tstd::deque<std::vector<float>> noiseList;\n\n\tconstexpr int64_t timeshape[1] = { 1 }; // PLMS SAMPLING\n\n\tfor (const auto& t : diffusionSteps)\n\t{\n\t\tint64_t time[1] = { t };\n\t\tint64_t time_prev[1] = { t - SpeedUp > 0 ? t - SpeedUp : 0 };\n\t\tif (noiseList.empty())\n\t\t{\n\t\t\tDenoiseIn.emplace_back(std::move(Tensors[1])); // noise  DenoiseIn[0]\n\t\t\tDenoiseIn.emplace_back(Ort::Value::CreateTensor(*Memory, time,\n\t\t\t\t1, timeshape, 1)); // time  DenoiseIn[1]\n\t\t\tDenoiseIn.emplace_back(std::move(Tensors[0])); // condition  DenoiseIn[2]\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDenoiseOut = DenoiseFn->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tdenoiseInput.data(),\n\t\t\t\t\tDenoiseIn.data(),\n\t\t\t\t\tDenoiseIn.size(),\n\t\t\t\t\tdenoiseOutput.data(),\n\t\t\t\t\tdenoiseOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: denoise\\n\") + e1.what()).c_str());\n\t\t\t}\n\n\t\t\tnoiseList.emplace_back(std::vector<float>(DenoiseOut[0].GetTensorData<float>(),\n\t\t\t\tDenoiseOut[0].GetTensorData<float>() +\n\t\t\t\tDenoiseOut[0].GetTensorTypeAndShapeInfo().GetElementCount())); // NoiseListExpand\n\n\t\t\tPredIn.emplace_back(std::move(DenoiseIn[0])); // noise  PredIn[0]\n\t\t\tPredIn.emplace_back(std::move(DenoiseOut[0])); // noise_pred  PredIn[1]\n\t\t\tPredIn.emplace_back(std::move(DenoiseIn[1])); // time  PredIn[2]\n\t\t\tPredIn.emplace_back(Ort::Value::CreateTensor(*Memory, time_prev,\n\t\t\t\t1, timeshape, 1)); // time_prev  PredIn[3]\n\t\t\ttry\n\t\t\t{\n\t\t\t\tPredOut = NoisePredictor->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tpredInput.data(),\n\t\t\t\t\tPredIn.data(),\n\t\t\t\t\tPredIn.size(),\n\t\t\t\t\tpredOutput.data(),\n\t\t\t\t\tpredOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()).c_str());\n\t\t\t}\n\t\t\tDenoiseIn[0] = std::move(PredOut[0]); // x_pred\n\t\t\tDenoiseIn[1] = std::move(PredIn[3]); // time_prev\n\t\t\t//DenoiseIn[2] = std::move(DenoiseIn[2]); // condition\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDenoiseOut = DenoiseFn->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tdenoiseInput.data(),\n\t\t\t\t\tDenoiseIn.data(),\n\t\t\t\t\tDenoiseIn.size(),\n\t\t\t\t\tdenoiseOutput.data(),\n\t\t\t\t\tdenoiseOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: denoise\\n\") + e1.what()).c_str());\n\t\t\t}\n\t\t\tauto noise_pred_prev = DenoiseOut[0].GetTensorMutableData<float>();\n\t\t\tfor (const auto it : noiseList[0])\n\t\t\t\t(*(noise_pred_prev++) += it) /= 2.0f;\n\t\t\t//PredIn[0] = std::move(PredIn[0]); // noise\n\t\t\tPredIn[1] = std::move(DenoiseOut[0]); // noise_pred_prime\n\t\t\t//PredIn[2] = std::move(PredIn[2]); // time\n\t\t\tPredIn[3] = std::move(DenoiseIn[1]); // time_prev\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDenoiseIn[0] = std::move(PredOut[0]); // x\n\t\t\tDenoiseIn[1] = Ort::Value::CreateTensor(*Memory, time, 1,\n\t\t\t\ttimeshape, 1); // time\n\t\t\t//DenoiseIn[2] = std::move(DenoiseIn[2]); // condition\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDenoiseOut = DenoiseFn->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tdenoiseInput.data(),\n\t\t\t\t\tDenoiseIn.data(),\n\t\t\t\t\tDenoiseIn.size(),\n\t\t\t\t\tdenoiseOutput.data(),\n\t\t\t\t\tdenoiseOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: denoise\\n\") + e1.what()).c_str());\n\t\t\t}\n\t\t\tif (noiseList.size() < 4)\n\t\t\t\tnoiseList.emplace_back(std::vector<float>(DenoiseOut[0].GetTensorData<float>(), DenoiseOut[0].GetTensorData<float>() + DenoiseOut[0].GetTensorTypeAndShapeInfo().GetElementCount()));\n\t\t\telse\n\t\t\t{\n\t\t\t\tnoiseList.pop_front();\n\t\t\t\tnoiseList.emplace_back(std::vector<float>(DenoiseOut[0].GetTensorData<float>(), DenoiseOut[0].GetTensorData<float>() + DenoiseOut[0].GetTensorTypeAndShapeInfo().GetElementCount()));\n\t\t\t}\n\t\t\tauto noise_pred_prime = DenoiseOut[0].GetTensorMutableData<float>();\n\t\t\tif (noiseList.size() == 2)\n\t\t\t\tfor (size_t it = 0; it < noiseList[0].size(); ++it)\n\t\t\t\t\t((*(noise_pred_prime++) *= 3.0f) -= noiseList[0][it]) /= 2.0f;\n\t\t\tif (noiseList.size() == 3)\n\t\t\t\tfor (size_t it = 0; it < noiseList[0].size(); ++it)\n\t\t\t\t\t(((*(noise_pred_prime++) *= 23.0f) -= noiseList[1][it] * 16.0f) += noiseList[0][it] * 5.0f) /= 12.0f;\n\t\t\tif (noiseList.size() == 4)\n\t\t\t\tfor (size_t it = 0; it < noiseList[0].size(); ++it)\n\t\t\t\t\t((((*(noise_pred_prime++) *= 55.0f) -= noiseList[2][it] * 59.0f) += noiseList[1][it] * 37.0f) -= noiseList[0][it] * 9.0f) /= 24.0f;\n\t\t\tPredIn[0] = std::move(DenoiseIn[0]); // x\n\t\t\tPredIn[1] = std::move(DenoiseOut[0]); // noise_pred_prime\n\t\t\tPredIn[2] = std::move(DenoiseIn[1]); // time\n\t\t\tPredIn[3] = Ort::Value::CreateTensor(*Memory, time_prev, 1, timeshape, 1);\n\t\t}\n\t\ttry\n\t\t{\n\t\t\tPredOut = NoisePredictor->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tpredInput.data(),\n\t\t\t\tPredIn.data(),\n\t\t\t\tPredIn.size(),\n\t\t\t\tpredOutput.data(),\n\t\t\t\tpredOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e1)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()).c_str());\n\t\t}\n\t\t_callback(++Process, 1);\n\t}\n\treturn PredOut;\n}\n\nstd::vector<Ort::Value> DDimSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process)\n{\n\tstd::vector<int64_t> diffusionSteps;\n\tfor (int64_t itt = Steps - SpeedUp; itt >= 0; itt -= SpeedUp)\n\t\tdiffusionSteps.push_back(itt);\n\tstd::vector<Ort::Value> DenoiseIn;\n\tstd::vector<Ort::Value> AlphaIn1, AlphaIn2;\n\n\tint64_t time[1] = { 0 };\n\tint64_t time_prev[1] = { 0 };\n\n\tconstexpr int64_t timeshape[1] = { 1 }; // DDIM SAMPLING\n\tAlphaIn1.emplace_back(Ort::Value::CreateTensor(*Memory, time, 1, timeshape, 1));\n\tAlphaIn2.emplace_back(Ort::Value::CreateTensor(*Memory, time_prev, 1, timeshape, 1));\n\tDenoiseIn.emplace_back(std::move(Tensors[1])); // noise  DenoiseIn[0]\n\tDenoiseIn.emplace_back(Ort::Value::CreateTensor(*Memory, time, 1, timeshape, 1)); // time  DenoiseIn[1]\n\tDenoiseIn.emplace_back(std::move(Tensors[0])); // condition  DenoiseIn[2]\n\tfor (const auto& t : diffusionSteps)\n\t{\n\t\tstd::vector<Ort::Value> DenoiseOut;\n\t\tfloat a_t, a_prev;\n\t\ttry\n\t\t{\n\t\t\ttime[0] = t;\n\t\t\ta_t = Alpha->Run(Ort::RunOptions{ nullptr },\n\t\t\t\talphain.data(),\n\t\t\t\tAlphaIn1.data(),\n\t\t\t\tAlphaIn1.size(),\n\t\t\t\talphaout.data(),\n\t\t\t\talphaout.size())[0].GetTensorData<float>()[0];\n\t\t\ttime_prev[0] = (((t - SpeedUp) > 0) ? t - SpeedUp : 0);\n\t\t\ta_prev = Alpha->Run(Ort::RunOptions{ nullptr },\n\t\t\t\talphain.data(),\n\t\t\t\tAlphaIn2.data(),\n\t\t\t\tAlphaIn2.size(),\n\t\t\t\talphaout.data(),\n\t\t\t\talphaout.size())[0].GetTensorData<float>()[0];\n\t\t}\n\t\tcatch (Ort::Exception& e1)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: alphas\\n\") + e1.what()).c_str());\n\t\t}\n\t\ttry\n\t\t{\n\t\t\tDenoiseOut = DenoiseFn->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tdenoiseInput.data(),\n\t\t\t\tDenoiseIn.data(),\n\t\t\t\tDenoiseIn.size(),\n\t\t\t\tdenoiseOutput.data(),\n\t\t\t\tdenoiseOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e1)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: denoise\\n\") + e1.what()).c_str());\n\t\t}\n\t\tconst auto x = DenoiseIn[0].GetTensorMutableData<float>();\n\t\tconst auto noise_pred = DenoiseOut[0].GetTensorMutableData<float>();\n\t\tconst auto noise_size = DenoiseOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\tconst auto sq_aprev = sqrt(a_prev);\n\t\tconst auto sq_at = sqrt(a_t);\n\t\tconst auto np_m_op = (sqrt((1 - a_prev) / a_prev) - sqrt((1 - a_t) / a_t));\n#ifndef MoeVoiceStudioAvxAcc\n\t\tfor (size_t i = 0; i < noise_size; ++i)\n\t\t\tnoise_pred[i] = (x[i] / sq_at + (sqrt((1 - a_prev) / a_prev) - sqrt((1 - a_t) / a_t)) * noise_pred[i]) * sq_aprev;\n#else\n\t\tInferTools::FloatTensorWrapper XWrapper(x, noise_size);\n\t\tInferTools::FloatTensorWrapper PredWrapper(noise_pred, noise_size);\n\t\tXWrapper /= sq_at;\n\t\t((PredWrapper *= np_m_op) += XWrapper) *= sq_aprev;\n#endif\n\t\tDenoiseIn[0] = std::move(DenoiseOut[0]);\n\t\t_callback(++Process, 1);\n\t}\n\tstd::vector<Ort::Value> out;\n\tout.emplace_back(std::move(DenoiseIn[0]));\n\treturn out;\n}\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Sampler/MoeVSSamplers.hpp",
    "content": "﻿/**\n * FileName: MoeVSSamplers.hpp\n * Note: MoeVoiceStudioCore Diffusion 官方采样器\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"MoeVSBaseSampler.hpp\"\n\nMoeVoiceStudioSamplerHeader\n\nclass PndmSampler : public MoeVSBaseSampler\n{\npublic:\n\tPndmSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\t~PndmSampler() override = default;\n\tstd::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process) override;\nprivate:\n\tconst std::vector<const char*> denoiseInput = { \"noise\", \"time\", \"condition\" };\n\tconst std::vector<const char*> predInput = { \"noise\", \"noise_pred\", \"time\", \"time_prev\" };\n\tconst std::vector<const char*> denoiseOutput = { \"noise_pred\" };\n\tconst std::vector<const char*> predOutput = { \"noise_pred_o\" };\n};\n\nclass DDimSampler : public MoeVSBaseSampler\n{\npublic:\n\tDDimSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\t~DDimSampler() override = default;\n\tstd::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process) override;\nprivate:\n\tconst std::vector<const char*> alphain = { \"time\" };\n\tconst std::vector<const char*> alphaout = { \"alphas_cumprod\" };\n\tconst std::vector<const char*> denoiseInput = { \"noise\", \"time\", \"condition\" };\n\tconst std::vector<const char*> denoiseOutput = { \"noise_pred\" };\n};\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Stft/stft.cpp",
    "content": "﻿#include \"stft.hpp\"\n#include \"../inferTools.hpp\"\n#include \"../../Logger/MoeSSLogger.hpp\"\n#include \"cblas.h\"\n#ifdef max\n#undef max\n#endif\n#ifdef min\n#undef min\n#endif\n\nnamespace DlCodecStft\n{\n    void HannWindow(double* data, int size) {\n        for (int i = 0; i < size; i++) {\n            const double windowValue = 0.5 * (1 - cos(2 * STFT::PI * i / (size - 1)));\n            data[i] *= windowValue;\n        }\n    }\n\n    void ConvertDoubleToFloat(const std::vector<double>& input, float* output)\n    {\n        for (size_t i = 0; i < input.size(); i++) {\n            output[i] = static_cast<float>(input[i]);\n        }\n    }\n\n    double CalculatePowerSpectrum(fftw_complex fc) {\n        return sqrt(fc[0] * fc[0] + fc[1] * fc[1]);\n    }\n\n    void CalculatePowerSpectrum(double* real, const double* imag, int size) {\n        for (int i = 0; i < size; i++) {\n            real[i] = real[i] * real[i] + imag[i] * imag[i];\n        }\n    }\n\n    void ConvertPowerSpectrumToDecibels(double* data, int size) {\n        for (int i = 0; i < size; i++) {\n            data[i] = 10 * log10(data[i]);\n        }\n    }\n\n\tdouble HZ2Mel(const double frequency)\n    {\n        constexpr auto f_min = 0.0;\n        constexpr auto f_sp = 200.0 / 3;\n        auto mel = (frequency - f_min) / f_sp;\n        constexpr auto min_log_hz = 1000.0;\n        constexpr auto min_log_mel = (min_log_hz - f_min) / f_sp;\n        const auto logstep = log(6.4) / 27.0;\n        if (frequency >= min_log_hz)\n            mel = min_log_mel + log(frequency / min_log_hz) / logstep;\n        return mel;\n    }\n\n    double Mel2HZ(const double mel)\n    {\n        constexpr auto f_min = 0.0;\n        constexpr auto f_sp = 200.0 / 3;\n        auto freqs = f_min + f_sp * mel;\n        constexpr auto min_log_hz = 1000.0;\n        constexpr auto min_log_mel = (min_log_hz - f_min) / f_sp;\n        const auto logstep = log(6.4) / 27.0;\n        if (mel >= min_log_mel)\n            freqs = min_log_hz * exp(logstep * (mel - min_log_mel));\n        return freqs;\n    }\n\n    static double mel_min = HZ2Mel(20.);\n    static double mel_max = HZ2Mel(11025.);\n\n    STFT::STFT(int WindowSize, int HopSize, int FFTSize)\n    {\n        WINDOW_SIZE = WindowSize;\n        HOP_SIZE = HopSize;\n        if (FFTSize > 0)\n            FFT_SIZE = FFTSize;\n        else\n            FFT_SIZE = WINDOW_SIZE / 2 + 1;\n    }\n\n    STFT::~STFT() = default;\n\n    std::pair<std::vector<float>, int64_t> STFT::operator()(const std::vector<double>& audioData) const\n    {\n        const int NUM_FRAMES = (int(audioData.size()) - WINDOW_SIZE) / HOP_SIZE + 1;\n        std::vector hannWindow(WINDOW_SIZE, 0.0);\n        const auto fftOut = reinterpret_cast<fftw_complex*>(fftw_malloc(sizeof(fftw_complex) * FFT_SIZE));\n        const fftw_plan plan = fftw_plan_dft_r2c_1d(WINDOW_SIZE, hannWindow.data(), fftOut, FFTW_ESTIMATE);\n        std::vector spectrogram(size_t(NUM_FRAMES) * FFT_SIZE, 0.f);\n        for (int i = 0; i < NUM_FRAMES; i++) {\n            std::memcpy(hannWindow.data(), &audioData[size_t(i) * HOP_SIZE], size_t(sizeof(double)) * WINDOW_SIZE);\n            HannWindow(hannWindow.data(), WINDOW_SIZE);\n            fftw_execute(plan);\n            const auto BgnPtn = size_t(unsigned(i * FFT_SIZE));\n            for (int j = 0; j < FFT_SIZE; j++)\n                spectrogram[BgnPtn + j] = float(CalculatePowerSpectrum(fftOut[j]));\n        }\n        fftw_destroy_plan(plan);\n        fftw_free(fftOut);\n        return { std::move(spectrogram), int64_t(NUM_FRAMES) };\n    }\n\n    std::pair<std::vector<float>, int64_t> Mel::GetMel(const std::vector<double>& audioData) const\n    {\n        auto BgnTime = clock();\n        const auto Spec = stft(audioData);  //[frame, nfft] * [nfft, mel_bins]  |  [mel_bins, nfft] * [nfft, frame]\n        logger.log((\"[Inference] Slice Stft Use Time \" + std::to_string(clock() - BgnTime) + \"ms\").c_str());\n        const auto NFrames = Spec.second;\n        std::vector Mel(MEL_SIZE * NFrames, 0.f);\n        BgnTime = clock();\n        cblas_sgemm(\n            CblasRowMajor,\n            CblasNoTrans,\n            CblasTrans,\n            MEL_SIZE,\n            blasint(NFrames),\n            FFT_SIZE,\n            1.f,\n            MelBasis.data(),\n            FFT_SIZE,\n            Spec.first.data(),\n            blasint(FFT_SIZE),\n            0.f,\n            Mel.data(),\n            blasint(NFrames)\n        );\n        for (auto& it : Mel)\n            it = log(std::max(1e-5f, it));\n        logger.log((\"[Inference] Slice Mel Use Time \" + std::to_string(clock() - BgnTime) + \"ms\").c_str());\n        return { std::move(Mel), (int64_t)NFrames };\n    }\n\n    std::pair<std::vector<float>, int64_t> Mel::operator()(const std::vector<double>& audioData) const\n    {\n        return GetMel(audioData);\n    }\n\n    Mel::Mel(int WindowSize, int HopSize, int SamplingRate, int MelSize) :\n        stft(WindowSize, HopSize, WindowSize / 2 + 1)\n    {\n        if (MelSize > 0)\n            MEL_SIZE = MelSize;\n        FFT_SIZE = WindowSize / 2 + 1;\n        sr = SamplingRate;\n\n        const int nfft = (FFT_SIZE - 1) * 2;\n        const double fftfreqval = 1. / (double(nfft) / double(SamplingRate));\n        auto fftfreqs = InferTools::arange(0, FFT_SIZE + 2);\n        fftfreqs.resize(FFT_SIZE);\n        for (auto& i : fftfreqs)\n            i *= fftfreqval;\n\n        auto mel_f = InferTools::arange(mel_min, mel_max + 1., (mel_max - mel_min) / (MEL_SIZE + 1));\n        mel_f.resize(MEL_SIZE + 2); //[MEL_SIZE + 2]\n\n        std::vector<double> fdiff;\n        std::vector<std::vector<double>> ramps; //[MEL_SIZE + 2, FFTSize]\n\n        ramps.reserve(MEL_SIZE + 2);\n        for (auto& i : mel_f)\n        {\n            i = Mel2HZ(i);\n\t        ramps.emplace_back(FFT_SIZE, i);\n        }\n        for (size_t i = 0; i < ramps.size(); ++i)\n            for (int j = 0; j < FFT_SIZE; ++j)\n                ramps[i][j] -= fftfreqs[j];\n\n        fdiff.reserve(MEL_SIZE + 2); //[MEL_SIZE + 1]\n        for (size_t i = 1; i < mel_f.size(); ++i)\n            fdiff.emplace_back(mel_f[i] - mel_f[i - 1]);\n\n        MelBasis = std::vector(size_t(FFT_SIZE) * MelSize, 0.f);\n\n        for (int i = 0; i < MelSize; ++i)\n        {\n            const auto enorm = 2. / (mel_f[i + 2] - mel_f[i]);\n            for (int j = 0; j < FFT_SIZE; ++j)\n                MelBasis[i * FFT_SIZE + j] = (float)(std::max(0., std::min(-ramps[i][j] / fdiff[i], ramps[i + 2][j] / fdiff[i + 1])) * enorm);\n        }\n    }\n}"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/Stft/stft.hpp",
    "content": "﻿#pragma once\n#include <vector>\n#include \"fftw3.h\"\n\nnamespace DlCodecStft\n{\n    class STFT\n    {\n    public:\n        STFT() = default;\n        ~STFT();\n        STFT(int WindowSize, int HopSize, int FFTSize = 0);\n        inline static double PI = 3.14159265358979323846;\n        std::pair<std::vector<float>, int64_t> operator()(const std::vector<double>& audioData) const;\n    private:\n    \tint WINDOW_SIZE = 2048;\n    \tint HOP_SIZE = WINDOW_SIZE / 4;\n    \tint FFT_SIZE = WINDOW_SIZE / 2 + 1;\n    };\n\n    class Mel\n    {\n    public:\n        Mel() = delete;\n        ~Mel() = default;\n        Mel(int WindowSize, int HopSize, int SamplingRate, int MelSize = 0);\n        std::pair<std::vector<float>, int64_t> GetMel(const std::vector<double>& audioData) const;\n        std::pair<std::vector<float>, int64_t> operator()(const std::vector<double>& audioData) const;\n    private:\n        STFT stft;\n        int MEL_SIZE = 128;\n        int FFT_SIZE = 0;\n        int sr = 22050;\n        std::vector<float> MelBasis;\n    };\n}\n"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/TensorExtractor/MoeVSCoreTensorExtractor.cpp",
    "content": "﻿#include \"MoeVSCoreTensorExtractor.hpp\"\n#include <random>\n#include \"../../Logger/MoeSSLogger.hpp\"\n#include \"../inferTools.hpp\"\n\nMoeVoiceStudioTensorExtractorHeader\n\nMoeVoiceStudioTensorExtractor::Inputs SoVits2TensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\n{\n\tInputs SvcTensors;\n\n\tconst auto HubertSize = HiddenUnit.size();\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\n\tSvcTensors.Data.FrameShape = { 1, HubertLen };\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\n\t// SvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\n\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\n\tSvcTensors.Data.Length[0] = HubertLen;\n\tSvcTensors.Data.F0 = InferTools::InterpFunc(F0, (long)F0.size(), (long)HubertLen);\n\tfor (auto& it : SvcTensors.Data.F0)\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\n\tSvcTensors.Data.NSFF0 = GetNSFF0(SvcTensors.Data.F0);\n\tSvcTensors.Data.Speaker[0] = params.Chara;\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.HiddenUnit.data(),\n\t\tHubertSize,\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\n\t\t3\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Length,\n\t\t1,\n\t\tSvcTensors.Data.OneShape,\n\t\t1\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.NSFF0.data(),\n\t\tSvcTensors.Data.NSFF0.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Speaker,\n\t\t1,\n\t\tSvcTensors.Data.OneShape,\n\t\t1\n\t));\n\n\tSvcTensors.InputNames = InputNames.data();\n\n\treturn SvcTensors;\n}\n\nMoeVoiceStudioTensorExtractor::Inputs SoVits3TensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\n{\n\tInputs SvcTensors;\n\n\tauto HubertSize = HiddenUnit.size();\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\n\t// SvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\n\tconst int64_t upSample = int64_t(_SamplingRate) / 16000;\n\tconst auto srcHubertSize = SvcTensors.Data.HiddenUnitShape[1];\n\tSvcTensors.Data.HiddenUnitShape[1] *= upSample;\n\tHubertSize *= upSample;\n\tSvcTensors.Data.FrameShape[1] = SvcTensors.Data.HiddenUnitShape[1];\n\tSvcTensors.Data.HiddenUnit.reserve(HubertSize * (upSample + 1));\n\tfor (int64_t itS = 0; itS < srcHubertSize; ++itS)\n\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\n\t\t\tSvcTensors.Data.HiddenUnit.insert(SvcTensors.Data.HiddenUnit.end(), HiddenUnit.begin() + itS * (int64_t)_HiddenSize, HiddenUnit.begin() + (itS + 1) * (int64_t)_HiddenSize);\n\tSvcTensors.Data.F0 = GetInterpedF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.HiddenUnitShape[1])));\n\tfor (auto& it : SvcTensors.Data.F0)\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\n\tSvcTensors.Data.Speaker[0] = params.Chara;\n\tSvcTensors.Data.Length[0] = SvcTensors.Data.HiddenUnitShape[1];\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.HiddenUnit.data(),\n\t\tHubertSize,\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\n\t\t3\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Length,\n\t\t1,\n\t\tSvcTensors.Data.OneShape,\n\t\t1\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.F0.data(),\n\t\tSvcTensors.Data.F0.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Speaker,\n\t\t1,\n\t\tSvcTensors.Data.OneShape,\n\t\t1\n\t));\n\n\tSvcTensors.InputNames = InputNames.data();\n\n\treturn SvcTensors;\n}\n\nMoeVoiceStudioTensorExtractor::Inputs SoVits4TensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\n{\n\tInputs SvcTensors;\n\tstd::mt19937 gen(int(params.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\tconst auto HubertSize = HiddenUnit.size();\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\n\tSvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\n\tSvcTensors.Data.NoiseShape = { 1, 192, SvcTensors.Data.FrameShape[1] };\n\tconst auto NoiseSize = SvcTensors.Data.NoiseShape[1] * SvcTensors.Data.NoiseShape[2] * SvcTensors.Data.NoiseShape[0];\n\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\n\tSvcTensors.Data.F0 = GetInterpedF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.FrameShape[1])));\n\tfor (auto& it : SvcTensors.Data.F0)\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\n\tSvcTensors.Data.UnVoice = GetUV(F0);\n\tSvcTensors.Data.Noise = std::vector(NoiseSize, 0.f);\n\tfor (auto& it : SvcTensors.Data.Noise)\n\t\tit = normal(gen) * params.NoiseScale;\n\tSvcTensors.Data.Speaker[0] = params.Chara;\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.HiddenUnit.data(),\n\t\tHubertSize,\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\n\t\t3\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.F0.data(),\n\t\tSvcTensors.Data.F0.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Alignment.data(),\n\t\tSvcTensors.Data.Alignment.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.UnVoice.data(),\n\t\tSvcTensors.Data.UnVoice.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Noise.data(),\n\t\tSvcTensors.Data.Noise.size(),\n\t\tSvcTensors.Data.NoiseShape.data(),\n\t\t3\n\t));\n\n\tif (_SpeakerMix)\n\t{\n\t\tSvcTensors.Data.SpkMap = GetCurrectSpkMixData(SpkMap, SvcTensors.Data.FrameShape[1], params.Chara);\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.SpkMap.data(),\n\t\t\tSvcTensors.Data.SpkMap.size(),\n\t\t\tSvcTensors.Data.SpkShape.data(),\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t{\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.Speaker,\n\t\t\t1,\n\t\t\tSvcTensors.Data.OneShape,\n\t\t\t1\n\t\t));\n\t}\n\n\tif (_Volume)\n\t{\n\t\tSvcTensors.InputNames = InputNamesVol.data();\n\t\tSvcTensors.Data.Volume = InferTools::InterpFunc(Volume, long(Volume.size()), long(SvcTensors.Data.FrameShape[1]));\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.Volume.data(),\n\t\t\tSvcTensors.Data.FrameShape[1],\n\t\t\tSvcTensors.Data.FrameShape.data(),\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t\tSvcTensors.InputNames = InputNames.data();\n\n\treturn SvcTensors;\n}\n\nMoeVoiceStudioTensorExtractor::Inputs SoVits4DDSPTensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\n{\n\tInputs SvcTensors;\n\tstd::mt19937 gen(int(params.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\tconst auto HubertSize = HiddenUnit.size();\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\n\tSvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\n\tSvcTensors.Data.NoiseShape = { 1, 192, SvcTensors.Data.FrameShape[1] };\n\tconst auto NoiseSize = SvcTensors.Data.NoiseShape[1] * SvcTensors.Data.NoiseShape[2] * SvcTensors.Data.NoiseShape[0];\n\tSvcTensors.Data.DDSPNoiseShape = { 1, 2048, SvcTensors.Data.FrameShape[1] };\n\tconst int64_t IstftCount = SvcTensors.Data.FrameShape[1] * 2048;\n\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\n\tSvcTensors.Data.F0 = GetInterpedF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.FrameShape[1])));\n\tfor (auto& it : SvcTensors.Data.F0)\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\n\tSvcTensors.Data.DDSPNoise = std::vector(IstftCount, params.DDSPNoiseScale);\n\tSvcTensors.Data.Noise = std::vector(NoiseSize, 0.f);\n\tfor (auto& it : SvcTensors.Data.Noise)\n\t\tit = normal(gen) * params.NoiseScale;\n\tSvcTensors.Data.Speaker[0] = params.Chara;\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.HiddenUnit.data(),\n\t\tHubertSize,\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\n\t\t3\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.F0.data(),\n\t\tSvcTensors.Data.F0.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Alignment.data(),\n\t\tSvcTensors.Data.Alignment.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.DDSPNoise.data(),\n\t\tSvcTensors.Data.DDSPNoise.size(),\n\t\tSvcTensors.Data.DDSPNoiseShape.data(),\n\t\t3\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Noise.data(),\n\t\tSvcTensors.Data.Noise.size(),\n\t\tSvcTensors.Data.NoiseShape.data(),\n\t\t3\n\t));\n\n\tif (_SpeakerMix)\n\t{\n\t\tSvcTensors.Data.SpkMap = GetCurrectSpkMixData(SpkMap, SvcTensors.Data.FrameShape[1], params.Chara);\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.SpkMap.data(),\n\t\t\tSvcTensors.Data.SpkMap.size(),\n\t\t\tSvcTensors.Data.SpkShape.data(),\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t{\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.Speaker,\n\t\t\t1,\n\t\t\tSvcTensors.Data.OneShape,\n\t\t\t1\n\t\t));\n\t}\n\n\tif (_Volume)\n\t{\n\t\tSvcTensors.InputNames = InputNamesVol.data();\n\t\tSvcTensors.Data.Volume = InferTools::InterpFunc(Volume, long(Volume.size()), long(SvcTensors.Data.FrameShape[1]));\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.Volume.data(),\n\t\t\tSvcTensors.Data.FrameShape[1],\n\t\t\tSvcTensors.Data.FrameShape.data(),\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t\tSvcTensors.InputNames = InputNames.data();\n\n\treturn SvcTensors;\n}\n\nMoeVoiceStudioTensorExtractor::Inputs RVCTensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\n{\n\tInputs SvcTensors;\n\tstd::mt19937 gen(int(params.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\tauto HubertSize = HiddenUnit.size();\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\n\tconstexpr int64_t upSample = 2;\n\tconst auto srcHubertSize = SvcTensors.Data.HiddenUnitShape[1];\n\tSvcTensors.Data.HiddenUnitShape[1] *= upSample;\n\tHubertSize *= upSample;\n\tSvcTensors.Data.FrameShape[1] = SvcTensors.Data.HiddenUnitShape[1];\n\tSvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\n\tSvcTensors.Data.NoiseShape = { 1, 192, SvcTensors.Data.FrameShape[1] };\n\tconst auto NoiseSize = SvcTensors.Data.NoiseShape[1] * SvcTensors.Data.NoiseShape[2] * SvcTensors.Data.NoiseShape[0];\n\n\tSvcTensors.Data.HiddenUnit.reserve(HubertSize);\n\tfor (int64_t itS = 0; itS < srcHubertSize; ++itS)\n\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\n\t\t\tSvcTensors.Data.HiddenUnit.insert(SvcTensors.Data.HiddenUnit.end(), HiddenUnit.begin() + itS * (int64_t)_HiddenSize, HiddenUnit.begin() + (itS + 1) * (int64_t)_HiddenSize);\n\tSvcTensors.Data.Length[0] = SvcTensors.Data.HiddenUnitShape[1];\n\tSvcTensors.Data.F0 = GetInterpedF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.HiddenUnitShape[1])));\n\tfor (auto& it : SvcTensors.Data.F0)\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\n\tSvcTensors.Data.NSFF0 = GetNSFF0(SvcTensors.Data.F0);\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\n\tSvcTensors.Data.Noise = std::vector(NoiseSize, 0.f);\n\tfor (auto& it : SvcTensors.Data.Noise)\n\t\tit = normal(gen) * params.NoiseScale;\n\tSvcTensors.Data.Speaker[0] = params.Chara;\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.HiddenUnit.data(),\n\t\tHubertSize,\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\n\t\t3\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Length,\n\t\t1,\n\t\tSvcTensors.Data.OneShape,\n\t\t1\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.NSFF0.data(),\n\t\tSvcTensors.Data.NSFF0.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.F0.data(),\n\t\tSvcTensors.Data.F0.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tif (_SpeakerMix)\n\t{\n\t\tSvcTensors.Data.SpkMap = GetCurrectSpkMixData(SpkMap, SvcTensors.Data.FrameShape[1], params.Chara);\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.SpkMap.data(),\n\t\t\tSvcTensors.Data.SpkMap.size(),\n\t\t\tSvcTensors.Data.SpkShape.data(),\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t{\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.Speaker,\n\t\t\t1,\n\t\t\tSvcTensors.Data.OneShape,\n\t\t\t1\n\t\t));\n\t}\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Noise.data(),\n\t\tSvcTensors.Data.Noise.size(),\n\t\tSvcTensors.Data.NoiseShape.data(),\n\t\t3\n\t));\n\n\tif (_Volume)\n\t{\n\t\tSvcTensors.InputNames = InputNamesVol.data();\n\t\tSvcTensors.Data.Volume = InferTools::InterpFunc(Volume, long(Volume.size()), long(SvcTensors.Data.FrameShape[1]));\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.Volume.data(),\n\t\t\tSvcTensors.Data.FrameShape[1],\n\t\t\tSvcTensors.Data.FrameShape.data(),\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t\tSvcTensors.InputNames = InputNames.data();\n\n\treturn SvcTensors;\n}\n\nMoeVoiceStudioTensorExtractor::Inputs DiffSvcTensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\n{\n\tInputs SvcTensors;\n\tconst auto HubertSize = HiddenUnit.size();\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\n\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\n\tSvcTensors.Data.F0 = InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.FrameShape[1]));\n\tfor (auto& it : SvcTensors.Data.F0)\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\n\tSvcTensors.Data.F0 = GetInterpedF0log(SvcTensors.Data.F0, true);\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\n\tSvcTensors.Data.Speaker[0] = params.Chara;\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.HiddenUnit.data(),\n\t\tHubertSize,\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\n\t\t3\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Alignment.data(),\n\t\tSvcTensors.Data.Alignment.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Speaker,\n\t\t1,\n\t\tSvcTensors.Data.OneShape,\n\t\t1\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.F0.data(),\n\t\tSvcTensors.Data.F0.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.InputNames = InputNames.data();\n\n\tSvcTensors.OutputNames = OutputNames.data();\n\n\tSvcTensors.OutputCount = OutputNames.size();\n\n\treturn SvcTensors;\n}\n\nMoeVoiceStudioTensorExtractor::Inputs DiffusionSvcTensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\n{\n\tInputs SvcTensors;\n\tconst auto HubertSize = HiddenUnit.size();\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\n\tSvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\n\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\n\tSvcTensors.Data.F0 = InterpUVF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.FrameShape[1])));\n\tfor (auto& it : SvcTensors.Data.F0)\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\n\tSvcTensors.Data.Speaker[0] = params.Chara;\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.HiddenUnit.data(),\n\t\tHubertSize,\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\n\t\t3\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.Alignment.data(),\n\t\tSvcTensors.Data.Alignment.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\tMemory,\n\t\tSvcTensors.Data.F0.data(),\n\t\tSvcTensors.Data.F0.size(),\n\t\tSvcTensors.Data.FrameShape.data(),\n\t\t2\n\t));\n\n\tif (_Volume)\n\t{\n\t\tSvcTensors.InputNames = InputNamesVol.data();\n\t\tSvcTensors.Data.Volume = InferTools::InterpFunc(Volume, long(Volume.size()), long(SvcTensors.Data.FrameShape[1]));\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.Volume.data(),\n\t\t\tSvcTensors.Data.FrameShape[1],\n\t\t\tSvcTensors.Data.FrameShape.data(),\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t\tSvcTensors.InputNames = InputNames.data();\n\n\tif (_SpeakerMix)\n\t{\n\t\tSvcTensors.Data.SpkMap = GetCurrectSpkMixData(SpkMap, SvcTensors.Data.FrameShape[1], params.Chara);\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.SpkMap.data(),\n\t\t\tSvcTensors.Data.SpkMap.size(),\n\t\t\tSvcTensors.Data.SpkShape.data(),\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t{\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\n\t\t\tMemory,\n\t\t\tSvcTensors.Data.Speaker,\n\t\t\t1,\n\t\t\tSvcTensors.Data.OneShape,\n\t\t\t1\n\t\t));\n\t}\n\n\tSvcTensors.OutputNames = OutputNames.data();\n\n\tSvcTensors.OutputCount = OutputNames.size();\n\n\treturn SvcTensors;\n}\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/TensorExtractor/MoeVSCoreTensorExtractor.hpp",
    "content": "﻿/**\n * FileName: MoeVSCoreTensorExtractor.hpp\n * Note: MoeVoiceStudioCore 官方张量预处理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"MoeVoiceStudioTensorExtractor.hpp\"\n\nMoeVoiceStudioTensorExtractorHeader\n\nclass SoVits2TensorExtractor : public MoeVoiceStudioTensorExtractor\n{\npublic:\n\tSoVits2TensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\n\t~SoVits2TensorExtractor() override = default;\n\tInputs Extract(\n\t\tconst std::vector<float>& HiddenUnit,\n\t\tconst std::vector<float>& F0,\n\t\tconst std::vector<float>& Volume,\n\t\tconst std::vector<std::vector<float>>& SpkMap,\n\t\tParams params\n\t) override;\n\n\tconst std::vector<const char*> InputNames = { \"hidden_unit\", \"lengths\", \"pitch\", \"sid\" };\n};\n\nclass SoVits3TensorExtractor : public MoeVoiceStudioTensorExtractor\n{\npublic:\n\tSoVits3TensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\n\t~SoVits3TensorExtractor() override = default;\n\tInputs Extract(\n\t\tconst std::vector<float>& HiddenUnit,\n\t\tconst std::vector<float>& F0,\n\t\tconst std::vector<float>& Volume,\n\t\tconst std::vector<std::vector<float>>& SpkMap,\n\t\tParams params\n\t) override;\n\n\tconst std::vector<const char*> InputNames = { \"hidden_unit\", \"lengths\", \"pitch\", \"sid\" };\n};\n\nclass SoVits4TensorExtractor : public MoeVoiceStudioTensorExtractor\n{\npublic:\n\tSoVits4TensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\n\t~SoVits4TensorExtractor() override = default;\n\tInputs Extract(\n\t\tconst std::vector<float>& HiddenUnit,\n\t\tconst std::vector<float>& F0,\n\t\tconst std::vector<float>& Volume,\n\t\tconst std::vector<std::vector<float>>& SpkMap,\n\t\tParams params\n\t) override;\n\n\tconst std::vector<const char*> InputNames = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\" };\n\tconst std::vector<const char*> InputNamesVol = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\", \"vol\" };\n};\n\nclass SoVits4DDSPTensorExtractor : public MoeVoiceStudioTensorExtractor\n{\npublic:\n\tSoVits4DDSPTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\n\t~SoVits4DDSPTensorExtractor() override = default;\n\tInputs Extract(\n\t\tconst std::vector<float>& HiddenUnit,\n\t\tconst std::vector<float>& F0,\n\t\tconst std::vector<float>& Volume,\n\t\tconst std::vector<std::vector<float>>& SpkMap,\n\t\tParams params\n\t) override;\n\n\tconst std::vector<const char*> InputNames = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\" };\n\tconst std::vector<const char*> InputNamesVol = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\", \"vol\" };\n};\n\nclass RVCTensorExtractor : public MoeVoiceStudioTensorExtractor\n{\npublic:\n\tRVCTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\n\t~RVCTensorExtractor() override = default;\n\tInputs Extract(\n\t\tconst std::vector<float>& HiddenUnit,\n\t\tconst std::vector<float>& F0,\n\t\tconst std::vector<float>& Volume,\n\t\tconst std::vector<std::vector<float>>& SpkMap,\n\t\tParams params\n\t) override;\n\n\tconst std::vector<const char*> InputNames = { \"phone\", \"phone_lengths\", \"pitch\", \"pitchf\", \"ds\", \"rnd\" };\n\tconst std::vector<const char*> InputNamesVol = { \"phone\", \"phone_lengths\", \"pitch\", \"pitchf\", \"ds\", \"rnd\", \"vol\" };\n};\n\nclass DiffSvcTensorExtractor : public MoeVoiceStudioTensorExtractor\n{\npublic:\n\tDiffSvcTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\n\t~DiffSvcTensorExtractor() override = default;\n\tInputs Extract(\n\t\tconst std::vector<float>& HiddenUnit,\n\t\tconst std::vector<float>& F0,\n\t\tconst std::vector<float>& Volume,\n\t\tconst std::vector<std::vector<float>>& SpkMap,\n\t\tParams params\n\t) override;\n\tconst std::vector<const char*> InputNames = { \"hubert\", \"mel2ph\", \"spk_embed\", \"f0\" };\n\tconst std::vector<const char*> OutputNames = { \"mel_pred\", \"f0_pred\" };\n};\n\nclass DiffusionSvcTensorExtractor : public MoeVoiceStudioTensorExtractor\n{\npublic:\n\tDiffusionSvcTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\n\t~DiffusionSvcTensorExtractor() override = default;\n\tInputs Extract(\n\t\tconst std::vector<float>& HiddenUnit,\n\t\tconst std::vector<float>& F0,\n\t\tconst std::vector<float>& Volume,\n\t\tconst std::vector<std::vector<float>>& SpkMap,\n\t\tParams params\n\t) override;\n\tconst std::vector<const char*> InputNamesVol = { \"hubert\", \"mel2ph\", \"f0\", \"volume\", \"spk_mix\" };\n\tconst std::vector<const char*> InputNames = { \"hubert\", \"mel2ph\", \"f0\", \"spk_mix\" };\n\tconst std::vector<const char*> OutputNames = { \"mel_pred\" };\n};\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/TensorExtractor/MoeVoiceStudioTensorExtractor.cpp",
    "content": "﻿#include \"MoeVoiceStudioTensorExtractor.hpp\"\n#include \"../inferTools.hpp\"\nMoeVoiceStudioTensorExtractorHeader\n\nMoeVoiceStudioTensorExtractor::MoeVoiceStudioTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other)\n{\n\t_SrcSamplingRate = _srcsr;\n\t_SamplingRate = _sr;\n\t_HopSize = _hop;\n\t_SpeakerMix = _smix;\n\t_Volume = _volume;\n\t_HiddenSize = _hidden_size;\n\t_NSpeaker = _nspeaker;\n\tf0_bin = _other.f0_bin;\n\tf0_max = _other.f0_max;\n\tf0_min = _other.f0_min;\n\tf0_mel_min = 1127.f * log(1.f + f0_min / 700.f);\n\tf0_mel_max = 1127.f * log(1.f + f0_max / 700.f);\n\tMemory = _other.Memory;\n}\n\nMoeVoiceStudioTensorExtractor::Inputs MoeVoiceStudioTensorExtractor::Extract(\n\tconst std::vector<float>& HiddenUnit,\n\tconst std::vector<float>& F0,\n\tconst std::vector<float>& Volume,\n\tconst std::vector<std::vector<float>>& SpkMap,\n\tParams params\n)\n{\n\tLibDLVoiceCodecThrow(\"NotImplementedError\");\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetCurrectSpkMixData(const std::vector<std::vector<float>>& _input, size_t dst_len, int64_t curspk) const\n{\n\tstd::vector<float> mixData;\n\tmixData.reserve(_NSpeaker * dst_len);\n\tif(_input.empty())\n\t{\n\t\tstd::vector<float> LenData(_NSpeaker, 0.0);\n\t\tLenData[curspk] = 1.0;\n\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\tmixData.insert(mixData.end(), LenData.begin(), LenData.end());\n\t}\n\telse\n\t{\n\t\tstd::vector<std::vector<float>> _spkMap;\n\t\tfor (size_t i = 0; i < _input.size() && i < _NSpeaker; ++i)\n\t\t\t_spkMap.emplace_back(InferTools::InterpFunc(_input[i], long(_input[i].size()), long(dst_len)));\n\t\tLinearCombination(_spkMap, curspk);\n\t\tconst auto curnspk = _input.size();\n\t\tif (curnspk < _NSpeaker)\n\t\t{\n\t\t\tstd::vector<float> LenData(_NSpeaker - curnspk, 0.0);\n\t\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\t{\n\t\t\t\tfor (size_t j = 0; j < curnspk; ++j)\n\t\t\t\t\tmixData.emplace_back(_spkMap[j][i]);\n\t\t\t\tmixData.insert(mixData.end(), LenData.begin(), LenData.end());\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\t\tfor (size_t j = 0; j < _NSpeaker; ++j)\n\t\t\t\t\tmixData.emplace_back(_spkMap[j][i]);\n\t}\n\treturn mixData;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetSpkMixData(const std::vector<std::vector<float>>& _input, size_t dst_len, size_t spk_count)\n{\n\tstd::vector<float> mixData;\n\tmixData.reserve(spk_count * dst_len);\n\tif (_input.empty())\n\t{\n\t\tstd::vector<float> LenData(spk_count, 0.0);\n\t\tLenData[0] = 1.0;\n\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\tmixData.insert(mixData.end(), LenData.begin(), LenData.end());\n\t}\n\telse\n\t{\n\t\tstd::vector<std::vector<float>> _spkMap;\n\t\tfor (size_t i = 0; i < _input.size() && i < spk_count; ++i)\n\t\t\t_spkMap.emplace_back(InferTools::InterpFunc(_input[i], long(_input[i].size()), long(dst_len)));\n\t\tLinearCombination(_spkMap, 0);\n\t\tconst auto curnspk = _input.size();\n\t\tif (curnspk < spk_count)\n\t\t{\n\t\t\tstd::vector<float> LenData(spk_count - curnspk, 0.0);\n\t\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\t{\n\t\t\t\tfor (size_t j = 0; j < curnspk; ++j)\n\t\t\t\t\tmixData.emplace_back(_spkMap[j][i]);\n\t\t\t\tmixData.insert(mixData.end(), LenData.begin(), LenData.end());\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\t\tfor (size_t j = 0; j < spk_count; ++j)\n\t\t\t\t\tmixData.emplace_back(_spkMap[j][i]);\n\t}\n\treturn mixData;\n}\n\nstd::vector<int64_t> MoeVoiceStudioTensorExtractor::GetNSFF0(const std::vector<float>& F0) const\n{\n\tconst auto f0Len = F0.size();\n\tstd::vector<int64_t> NSFF0(f0Len);\n\tfor (size_t i = 0; i < f0Len; ++i)\n\t{\n\t\tfloat f0_mel = 1127.f * log(1.f + F0[i] / 700.f);\n\t\tif (f0_mel > 0.f)\n\t\t\tf0_mel = (f0_mel - f0_mel_min) * (float(f0_bin) - 2.f) / (f0_mel_max - f0_mel_min) + 1.f;\n\t\tif (f0_mel < 1.f)\n\t\t\tf0_mel = 1.f;\n\t\tif (f0_mel > float(f0_bin) - 1.f)\n\t\t\tf0_mel = float(f0_bin) - 1.f;\n\t\tNSFF0[i] = (int64_t)round(f0_mel);\n\t}\n\treturn NSFF0;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetInterpedF0(const std::vector<float>& F0)\n{\n\tconst auto specLen = F0.size();\n\tstd::vector<float> Of0(specLen, 0.0);\n\n\tfloat last_value = 0.0;\n\tfor (size_t i = 0; i < specLen; ++i)\n\t{\n\t\tif (F0[i] <= 0.f)\n\t\t{\n\t\t\tsize_t j = i + 1;\n\t\t\tfor (; j < specLen; ++j)\n\t\t\t{\n\t\t\t\tif (F0[j] > 0.f)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (j < specLen - 1)\n\t\t\t{\n\t\t\t\tif (last_value > 0.f)\n\t\t\t\t{\n\t\t\t\t\tconst auto step = (F0[j] - F0[i - 1]) / float(j - i);\n\t\t\t\t\tfor (size_t k = i; k < j; ++k)\n\t\t\t\t\t\tOf0[k] = float(F0[i - 1] + step * float(k - i + 1));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (size_t k = i; k < j; ++k)\n\t\t\t\t\t\tOf0[k] = float(F0[j]);\n\t\t\t\ti = j;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (size_t k = i; k < specLen; ++k)\n\t\t\t\t\tOf0[k] = float(last_value);\n\t\t\t\ti = specLen;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (i == 0)\n\t\t\t{\n\t\t\t\tOf0[i] = float(F0[i]);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tOf0[i] = float(F0[i - 1]);\n\t\t\tlast_value = F0[i];\n\t\t}\n\t}\n\treturn Of0;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::InterpUVF0(const std::vector<float>& F0)\n{\n\tstd::vector<double> NUVF0;\n\tstd::vector<double> UVF0Indices, NUVF0Indices;\n\tUVF0Indices.reserve(F0.size());\n\tNUVF0.reserve(F0.size());\n\tNUVF0Indices.reserve(F0.size());\n\tif(F0[0] < 0.0001f)\n\t{\n\t\tNUVF0.emplace_back(0);\n\t\tNUVF0Indices.emplace_back(0);\n\t}\n\tfor (size_t i = 1; i < F0.size(); ++i)\n\t{\n\t\tif (F0[i] < 0.0001f)\n\t\t\tUVF0Indices.emplace_back((double)i);\n\t\telse\n\t\t{\n\t\t\tNUVF0.emplace_back((double)F0[i]);\n\t\t\tNUVF0Indices.emplace_back((double)i);\n\t\t}\n\t}\n\tif (UVF0Indices.empty() || NUVF0Indices.empty())\n\t\treturn F0;\n\tstd::vector<double> UVF0(F0.size());\n\tstd::vector<float> Of0 = F0;\n\tinterp1(NUVF0Indices.data(), NUVF0.data(), (int)NUVF0.size(),\n\t\tUVF0Indices.data(), (int)UVF0Indices.size(), UVF0.data());\n\tfor (size_t i = 0; i < UVF0Indices.size(); ++i)\n\t\tOf0[size_t(UVF0Indices[i])] = (float)UVF0[i];\n\treturn Of0;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetUV(const std::vector<float>& F0)\n{\n\tconst auto specLen = F0.size();\n\tstd::vector<float> ruv(specLen, 1.0);\n\tfor (size_t i = 0; i < specLen; ++i)\n\t{\n\t\tif (F0[i] < 0.001f)\n\t\t\truv[i] = 0.f;\n\t}\n\treturn ruv;\n}\n\nstd::vector<int64_t> MoeVoiceStudioTensorExtractor::GetAligments(size_t specLen, size_t hubertLen)\n{\n\tstd::vector<int64_t> mel2ph(specLen + 1, 0);\n\n\tsize_t startFrame = 0;\n\tconst double ph_durs = static_cast<double>(specLen) / static_cast<double>(hubertLen);\n\tfor (size_t iph = 0; iph < hubertLen; ++iph)\n\t{\n\t\tconst auto endFrame = static_cast<size_t>(round(static_cast<double>(iph) * ph_durs + ph_durs));\n\t\tfor (auto j = startFrame; j < endFrame + 1; ++j)\n\t\t\tmel2ph[j] = static_cast<long long>(iph) + 1;\n\t\tstartFrame = endFrame + 1;\n\t}\n\treturn mel2ph;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetInterpedF0log(const std::vector<float>& rF0, bool enable_log)\n{\n\tconst auto specLen = rF0.size();\n\tstd::vector<float> F0(specLen);\n\tstd::vector<float> Of0(specLen, 0.0);\n\tfor (size_t i = 0; i < specLen; ++i)\n\t{\n\t\tif (enable_log)\n\t\t\tF0[i] = log2(rF0[i]);\n\t\telse\n\t\t\tF0[i] = rF0[i];\n\t\tif (isnan(F0[i]) || isinf(F0[i]))\n\t\t\tF0[i] = 0.f;\n\t}\n\n\tfloat last_value = 0.0;\n\tfor (size_t i = 0; i < specLen; ++i)\n\t{\n\t\tif (F0[i] <= 0.f)\n\t\t{\n\t\t\tsize_t j = i + 1;\n\t\t\tfor (; j < specLen; ++j)\n\t\t\t{\n\t\t\t\tif (F0[j] > 0.f)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (j < specLen - 1)\n\t\t\t{\n\t\t\t\tif (last_value > 0.f)\n\t\t\t\t{\n\t\t\t\t\tconst auto step = (F0[j] - F0[i - 1]) / float(j - i);\n\t\t\t\t\tfor (size_t k = i; k < j; ++k)\n\t\t\t\t\t\tOf0[k] = float(F0[i - 1] + step * float(k - i + 1));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (size_t k = i; k < j; ++k)\n\t\t\t\t\t\tOf0[k] = float(F0[j]);\n\t\t\t\ti = j;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (size_t k = i; k < specLen; ++k)\n\t\t\t\t\tOf0[k] = float(last_value);\n\t\t\t\ti = specLen;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tOf0[i] = float(F0[i - 1]);\n\t\t\tlast_value = F0[i];\n\t\t}\n\t}\n\treturn Of0;\n}\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/TensorExtractor/MoeVoiceStudioTensorExtractor.hpp",
    "content": "﻿/**\n * FileName: MoeVoiceStudioTensorExtractor.hpp\n * Note: MoeVoiceStudioCore 张量预处理基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <string>\n#include <vector>\n#include \"onnxruntime_cxx_api.h\"\n#define MoeVoiceStudioTensorExtractorHeader namespace MoeVSTensorPreprocess{\n#define MoeVoiceStudioTensorExtractorEnd }\n\n\nMoeVoiceStudioTensorExtractorHeader\n\nclass MoeVoiceStudioTensorExtractor\n{\npublic:\n\t\n\tstruct Tensors\n\t{\n\t\tstd::vector<float> HiddenUnit;\n\t\tstd::vector<float> F0;\n\t\tstd::vector<float> Volume;\n\t\tstd::vector<float> SpkMap;\n\t\tstd::vector<float> DDSPNoise;\n\t\tstd::vector<float> Noise;\n\t\tstd::vector<int64_t> Alignment;\n\t\tstd::vector<float> UnVoice;\n\t\tstd::vector<int64_t> NSFF0;\n\t\tint64_t Length[1] = { 0 };\n\t\tint64_t Speaker[1] = { 0 };\n\n\t\tstd::vector<int64_t> HiddenUnitShape;\n\t\tstd::vector<int64_t> FrameShape;\n\t\tstd::vector<int64_t> SpkShape;\n\t\tstd::vector<int64_t> DDSPNoiseShape;\n\t\tstd::vector<int64_t> NoiseShape;\n\t\tint64_t OneShape[1] = { 1 };\n\t};\n\n\tstruct InferParams\n\t{\n\t\tfloat NoiseScale = 0.3f;\n\t\tfloat DDSPNoiseScale = 1.0f;\n\t\tint Seed = 520468;\n\t\tsize_t AudioSize = 0;\n\t\tint64_t Chara = 0;\n\t\tfloat upKeys = 0.f;\n\t\tvoid* Other = nullptr;\n\t};\n\n\tstruct Others\n\t{\n\t\tint f0_bin = 256;\n\t\tfloat f0_max = 1100.0;\n\t\tfloat f0_min = 50.0;\n\t\tOrtMemoryInfo* Memory = nullptr;\n\t\tvoid* Other = nullptr;\n\t};\n\n\tusing Params = const InferParams&;\n\n\tstruct Inputs\n\t{\n\t\tTensors Data;\n\t\tstd::vector<Ort::Value> Tensor;\n\t\tconst char* const* InputNames = nullptr;\n\t\tconst char* const* OutputNames = nullptr;\n\t\tsize_t InputCount = 1;\n\t\tsize_t OutputCount = 1;\n\t};\n\n\t/**\n\t * \\brief 构造张量预处理器\n\t * \\param _srcsr 原始采样率\n\t * \\param _sr 目标采样率\n\t * \\param _hop HopSize\n\t * \\param _smix 是否启用角色混合\n\t * \\param _volume 是否启用音量emb\n\t * \\param _hidden_size hubert的维数\n\t * \\param _nspeaker 角色数\n\t * \\param _other 其他参数，其中的memoryInfo必须为你当前模型的memoryInfo\n\t */\n\tMoeVoiceStudioTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other);\n\n\tvirtual ~MoeVoiceStudioTensorExtractor() = default;\n\n\t/**\n\t * \\brief 预处理张量\n\t * \\param HiddenUnit HiddenUnit\n\t * \\param F0 F0\n\t * \\param Volume 音量\n\t * \\param SpkMap 角色混合数据\n\t * \\param params 参数\n\t * \\return 完成预处理的张量（请将张量接管的所有Vector的数据都存储到Tensors Data中，因为ORT创建的张量要求调用方管理内存，如果不存储到这个位置会导致数据提前析构\n\t */\n\tvirtual Inputs Extract(\n\t\tconst std::vector<float>& HiddenUnit,\n\t\tconst std::vector<float>& F0,\n\t\tconst std::vector<float>& Volume,\n\t\tconst std::vector<std::vector<float>>& SpkMap,\n\t\tParams params\n\t);\n\n\tvoid SetSrcSamplingRates(uint64_t sr) { _SrcSamplingRate = sr; }\n\n\t//获取换算为0-255的f0\n\t[[nodiscard]] std::vector<int64_t> GetNSFF0(const std::vector<float>&) const;\n\n\t//将F0中0值单独插值\n\tstatic std::vector<float> GetInterpedF0(const std::vector<float>&);\n\n\t//\n\tstatic std::vector<float> InterpUVF0(const std::vector<float>&);\n\n\t//获取UnVoiceMask\n\tstatic std::vector<float> GetUV(const std::vector<float>&);\n\n\t//获取对齐矩阵\n\tstatic std::vector<int64_t> GetAligments(size_t, size_t);\n\n\t//线性组合\n\ttemplate <typename T>\n\tstatic void LinearCombination(std::vector<std::vector<T>>& _data, size_t default_id, T Value = T(1.0))\n\t{\n\t\tif (_data.empty())\n\t\t\treturn;\n\t\tif (default_id > _data.size())\n\t\t\tdefault_id = 0;\n\n\t\tfor (size_t i = 0; i < _data[0].size(); ++i)\n\t\t{\n\t\t\tT Sum = T(0.0);\n\t\t\tfor (size_t j = 0; j < _data.size(); ++j)\n\t\t\t\tSum += _data[j][i];\n\t\t\tif (Sum < T(0.0001))\n\t\t\t{\n\t\t\t\tfor (size_t j = 0; j < _data.size(); ++j)\n\t\t\t\t\t_data[j][i] = T(0);\n\t\t\t\t_data[default_id][i] = T(1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tSum *= T(Value);\n\t\t\tfor (size_t j = 0; j < _data.size(); ++j)\n\t\t\t\t_data[j][i] /= Sum;\n\t\t}\n\t}\n\n\t//将F0中0值单独插值（可设置是否取log）\n\t[[nodiscard]] static std::vector<float> GetInterpedF0log(const std::vector<float>&, bool);\n\n\t//获取正确的角色混合数据\n\t[[nodiscard]] std::vector<float> GetCurrectSpkMixData(const std::vector<std::vector<float>>& _input, size_t dst_len, int64_t curspk) const;\n\n\t//获取正确的角色混合数据\n\t[[nodiscard]] static std::vector<float> GetSpkMixData(const std::vector<std::vector<float>>& _input, size_t dst_len, size_t spk_count);\nprotected:\n\tuint64_t _NSpeaker = 1;\n\tuint64_t _SrcSamplingRate = 32000;\n\tuint64_t _SamplingRate = 32000;\n\tuint64_t _HopSize = 512;\n\tbool _SpeakerMix = false;\n\tbool _Volume = false;\n\tuint64_t _HiddenSize = 256;\n\tint f0_bin = 256;\n\tfloat f0_max = 1100.0;\n\tfloat f0_min = 50.0;\n\tfloat f0_mel_min = 1127.f * log(1.f + f0_min / 700.f);\n\tfloat f0_mel_max = 1127.f * log(1.f + f0_max / 700.f);\n\tOrtMemoryInfo* Memory = nullptr;\nprivate:\n\tstd::wstring __NAME__CLASS__ = L\"MoeVoiceStudioTensorExtractor\";\n};\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/TensorExtractor/TensorExtractorManager.cpp",
    "content": "﻿#include \"TensorExtractorManager.hpp\"\n#include <map>\n#include \"../../Logger/MoeSSLogger.hpp\"\n\nMoeVoiceStudioTensorExtractorHeader\n\tinline std::map<std::wstring, GetTensorExtractorFn> RegisteredTensorExtractors;\n\nvoid RegisterTensorExtractor(const std::wstring& _name, const GetTensorExtractorFn& _constructor_fn)\n{\n\tif (RegisteredTensorExtractors.find(_name) != RegisteredTensorExtractors.end())\n\t{\n\t\tlogger.log(L\"[Warn] TensorExtractorNameConflict\");\n\t\treturn;\n\t}\n\tRegisteredTensorExtractors[_name] = _constructor_fn;\n}\n\nTensorExtractor GetTensorExtractor(const std::wstring& _name, uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const MoeVoiceStudioTensorExtractor::Others& _other)\n{\n\tconst auto f_TensorExtractor = RegisteredTensorExtractors.find(_name);\n\tif (f_TensorExtractor != RegisteredTensorExtractors.end())\n\t\treturn f_TensorExtractor->second(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other);\n\tthrow std::runtime_error(\"Unable To Find An Available TensorExtractor\");\n}\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/TensorExtractor/TensorExtractorManager.hpp",
    "content": "﻿/**\n * FileName: TensorExtractorManager.hpp\n * Note: MoeVoiceStudioCore 张量预处理类的注册和管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <functional>\n#include \"MoeVoiceStudioTensorExtractor.hpp\"\n\nMoeVoiceStudioTensorExtractorHeader\n\nclass TensorExtractor\n{\npublic:\n\tTensorExtractor() = default;\n\tTensorExtractor(MoeVoiceStudioTensorExtractor* _ext) : _f0_ext(_ext) {}\n\tTensorExtractor(const TensorExtractor&) = delete;\n\tTensorExtractor(TensorExtractor&& _ext) noexcept\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t}\n\tTensorExtractor& operator=(const TensorExtractor&) = delete;\n\tTensorExtractor& operator=(TensorExtractor&& _ext) noexcept\n\t{\n\t\tif (this == &_ext)\n\t\t\treturn *this;\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t\treturn *this;\n\t}\n\t~TensorExtractor()\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = nullptr;\n\t}\n\tMoeVoiceStudioTensorExtractor* operator->() const { return _f0_ext; }\n\nprivate:\n\tMoeVoiceStudioTensorExtractor* _f0_ext = nullptr;\n};\n\nusing GetTensorExtractorFn = std::function<TensorExtractor(uint64_t, uint64_t, uint64_t, bool, bool, uint64_t, uint64_t, const MoeVoiceStudioTensorExtractor::Others&)>;\n\nvoid RegisterTensorExtractor(const std::wstring& _name, const GetTensorExtractorFn& _constructor_fn);\n\n/**\n * \\brief 获取张量预处理器\n * \\param _name 类名\n * \\param _srcsr 原始采样率\n * \\param _sr 目标采样率\n * \\param _hop HopSize\n * \\param _smix 是否启用角色混合\n * \\param _volume 是否启用音量emb\n * \\param _hidden_size hubert的维数\n * \\param _nspeaker 角色数\n * \\param _other 其他参数，其中的memoryInfo必须为你当前模型的memoryInfo\n * \\return 张量预处理器\n */\nTensorExtractor GetTensorExtractor(\n\tconst std::wstring& _name,\n\tuint64_t _srcsr, uint64_t _sr, uint64_t _hop,\n\tbool _smix, bool _volume, uint64_t _hidden_size,\n\tuint64_t _nspeaker,\n\tconst MoeVoiceStudioTensorExtractor::Others& _other\n);\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/inferTools.cpp",
    "content": "﻿#include \"inferTools.hpp\"\n#include \"string\"\n#ifdef MoeVoiceStudioAvxAcc\n#include <immintrin.h>\n#endif\nInferTools::Wav::Wav(const wchar_t* Path) :header(WAV_HEADER()) {\n    char buf[1024];\n    FILE* stream;\n    _wfreopen_s(&stream, Path, L\"rb\", stderr);\n    if (stream == nullptr) {\n        throw (std::exception(\"File not exists\"));\n    }\n    fread(buf, 1, HEAD_LENGTH, stream);\n    int pos = 0;\n    while (pos < HEAD_LENGTH) {\n        if ((buf[pos] == 'R') && (buf[pos + 1] == 'I') && (buf[pos + 2] == 'F') && (buf[pos + 3] == 'F')) {\n            pos += 4;\n            break;\n        }\n        ++pos;\n    }\n    if (pos >= HEAD_LENGTH)\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\n    header.ChunkSize = *(int*)&buf[pos];\n    pos += 8;\n    while (pos < HEAD_LENGTH) {\n        if ((buf[pos] == 'f') && (buf[pos + 1] == 'm') && (buf[pos + 2] == 't')) {\n            pos += 4;\n            break;\n        }\n        ++pos;\n    }\n    if (pos >= HEAD_LENGTH)\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\n    header.Subchunk1Size = *(int*)&buf[pos];\n    pos += 4;\n    header.AudioFormat = *(short*)&buf[pos];\n    pos += 2;\n    header.NumOfChan = *(short*)&buf[pos];\n    pos += 2;\n    header.SamplesPerSec = *(int*)&buf[pos];\n    pos += 4;\n    header.bytesPerSec = *(int*)&buf[pos];\n    pos += 4;\n    header.blockAlign = *(short*)&buf[pos];\n    pos += 2;\n    header.bitsPerSample = *(short*)&buf[pos];\n    pos += 2;\n    while (pos < HEAD_LENGTH) {\n        if ((buf[pos] == 'd') && (buf[pos + 1] == 'a') && (buf[pos + 2] == 't') && (buf[pos + 3] == 'a')) {\n            pos += 4;\n            break;\n        }\n        ++pos;\n    }\n    if (pos >= HEAD_LENGTH)\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\n    header.Subchunk2Size = *(int*)&buf[pos];\n    pos += 4;\n    StartPos = pos;\n    Data = new char[header.Subchunk2Size + 1];\n    fseek(stream, StartPos, SEEK_SET);\n    fread(Data, 1, header.Subchunk2Size, stream);\n    if (stream != nullptr) {\n        fclose(stream);\n    }\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n}\n\nInferTools::Wav::Wav(const Wav& input) :header(WAV_HEADER()) {\n    Data = new char[(input.header.Subchunk2Size + 1)];\n    if (Data == nullptr) { LibDLVoiceCodecThrow(\"OOM\") }\n    memcpy(header.RIFF, input.header.RIFF, 4);\n    memcpy(header.fmt, input.header.fmt, 4);\n    memcpy(header.WAVE, input.header.WAVE, 4);\n    memcpy(header.Subchunk2ID, input.header.Subchunk2ID, 4);\n    header.ChunkSize = input.header.ChunkSize;\n    header.Subchunk1Size = input.header.Subchunk1Size;\n    header.AudioFormat = input.header.AudioFormat;\n    header.NumOfChan = input.header.NumOfChan;\n    header.SamplesPerSec = input.header.SamplesPerSec;\n    header.bytesPerSec = input.header.bytesPerSec;\n    header.blockAlign = input.header.blockAlign;\n    header.bitsPerSample = input.header.bitsPerSample;\n    header.Subchunk2Size = input.header.Subchunk2Size;\n    StartPos = input.StartPos;\n    memcpy(Data, input.Data, input.header.Subchunk2Size);\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n}\n\nInferTools::Wav::Wav(Wav&& input) noexcept\n{\n    Data = input.Data;\n    input.Data = nullptr;\n    memcpy(header.RIFF, input.header.RIFF, 4);\n    memcpy(header.fmt, input.header.fmt, 4);\n    memcpy(header.WAVE, input.header.WAVE, 4);\n    memcpy(header.Subchunk2ID, input.header.Subchunk2ID, 4);\n    header.ChunkSize = input.header.ChunkSize;\n    header.Subchunk1Size = input.header.Subchunk1Size;\n    header.AudioFormat = input.header.AudioFormat;\n    header.NumOfChan = input.header.NumOfChan;\n    header.SamplesPerSec = input.header.SamplesPerSec;\n    header.bytesPerSec = input.header.bytesPerSec;\n    header.blockAlign = input.header.blockAlign;\n    header.bitsPerSample = input.header.bitsPerSample;\n    header.Subchunk2Size = input.header.Subchunk2Size;\n    StartPos = input.StartPos;\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n}\n\nInferTools::Wav& InferTools::Wav::operator=(Wav&& input) noexcept\n{\n    destory();\n    Data = input.Data;\n    input.Data = nullptr;\n    memcpy(header.RIFF, input.header.RIFF, 4);\n    memcpy(header.fmt, input.header.fmt, 4);\n    memcpy(header.WAVE, input.header.WAVE, 4);\n    memcpy(header.Subchunk2ID, input.header.Subchunk2ID, 4);\n    header.ChunkSize = input.header.ChunkSize;\n    header.Subchunk1Size = input.header.Subchunk1Size;\n    header.AudioFormat = input.header.AudioFormat;\n    header.NumOfChan = input.header.NumOfChan;\n    header.SamplesPerSec = input.header.SamplesPerSec;\n    header.bytesPerSec = input.header.bytesPerSec;\n    header.blockAlign = input.header.blockAlign;\n    header.bitsPerSample = input.header.bitsPerSample;\n    header.Subchunk2Size = input.header.Subchunk2Size;\n    StartPos = input.StartPos;\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n    return *this;\n}\n\nInferTools::Wav& InferTools::Wav::cat(const Wav& input)\n{\n    if (header.AudioFormat != 1) return *this;\n    if (header.SamplesPerSec != input.header.bitsPerSample || header.NumOfChan != input.header.NumOfChan) return *this;\n    char* buffer = new char[(int64_t)header.Subchunk2Size + (int64_t)input.header.Subchunk2Size + 1];\n    if (buffer == nullptr)return *this;\n    memcpy(buffer, Data, header.Subchunk2Size);\n    memcpy(buffer + header.Subchunk2Size, input.Data, input.header.Subchunk2Size);\n    header.ChunkSize += input.header.Subchunk2Size;\n    header.Subchunk2Size += input.header.Subchunk2Size;\n    delete[] Data;\n    Data = buffer;\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n    return *this;\n}\n\nstd::vector<size_t> InferTools::SliceAudio(const std::vector<int16_t>& input, const SlicerSettings& _slicer)\n{\n    if (input.size() < size_t(_slicer.MinLength) * _slicer.SamplingRate)\n        return {0, input.size()};\n\n    std::vector<unsigned long long> slice_point;\n    bool slice_tag = true;\n    slice_point.emplace_back(0);\n\n    unsigned long CurLength = 0;\n    for (size_t i = 0; i + _slicer.WindowLength < input.size(); i += _slicer.HopSize)\n    {\n\n        if (slice_tag)\n        {\n            const auto vol = abs(getAvg(input.data() + i, input.data() + i + _slicer.WindowLength));\n            if (vol < _slicer.Threshold)\n            {\n                slice_tag = false;\n                if (CurLength > _slicer.MinLength * _slicer.SamplingRate)\n                {\n                    CurLength = 0;\n                    slice_point.emplace_back(i + (_slicer.WindowLength / 2));\n                }\n            }\n            else\n                slice_tag = true;\n        }\n        else\n        {\n            const auto vol = abs(getAvg(input.data() + i, input.data() + i + _slicer.WindowLength));\n            if (vol < _slicer.Threshold)\n                slice_tag = false;\n            else\n            {\n                slice_tag = true;\n                if (CurLength > _slicer.MinLength * _slicer.SamplingRate)\n                {\n                    CurLength = 0;\n                    slice_point.emplace_back(i + (_slicer.WindowLength / 2));\n                }\n            }\n        }\n        CurLength += _slicer.HopSize;\n    }\n    slice_point.push_back(input.size());\n    return slice_point;\n}\n\nstd::vector<double> InferTools::arange(double start, double end, double step, double div)\n{\n    std::vector<double> output;\n    while (start < end)\n    {\n        output.push_back(start / div);\n        start += step;\n    }\n    return output;\n}\n\nstd::vector<float> InferTools::mean_filter(const std::vector<float>& vec, size_t window_size)\n{\n    std::vector<float> result;\n\n    if (window_size > vec.size() || window_size < 2)\n        return vec;\n\n    const size_t half = window_size / 2; // 窗口半径，向下取整\n\n    for (size_t i = half; i < vec.size() - half; i++) {\n        float sum = 0.0f;\n        for (size_t j = i - half; j <= i + half; j++) {\n            sum += vec[j];\n        }\n        result.push_back(sum / (float)(window_size % 2 ? window_size : window_size + 1));\n    }\n\n    return result;\n}\n\n#ifdef MoeVoiceStudioAvxAcc\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator+=(const FloatTensorWrapper& _right)\n{\n    if (_data_size != _right._data_size)\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\n    const size_t num_avx2_elements = _data_size / 8;\n    for (size_t i = 0; i < num_avx2_elements; i++) {\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\n        const __m256 result_avx2 = _mm256_add_ps(a_avx2, b_avx2);\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] += _right[i];\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator-=(const FloatTensorWrapper& _right)\n{\n    if (_data_size != _right._data_size)\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\n    const size_t num_avx2_elements = _data_size / 8;\n    for (size_t i = 0; i < num_avx2_elements; i++) {\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\n        const __m256 result_avx2 = _mm256_sub_ps(a_avx2, b_avx2);\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] -= _right[i];\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator*=(const FloatTensorWrapper& _right)\n{\n    if (_data_size != _right._data_size)\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\n    const size_t num_avx2_elements = _data_size / 8;\n    for (size_t i = 0; i < num_avx2_elements; i++) {\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\n        const __m256 result_avx2 = _mm256_mul_ps(a_avx2, b_avx2);\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] *= _right[i];\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator/=(const FloatTensorWrapper& _right)\n{\n    if (_data_size != _right._data_size)\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\n    const size_t num_avx2_elements = _data_size / 8;\n    for (size_t i = 0; i < num_avx2_elements; i++) {\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\n        const __m256 result_avx2 = _mm256_div_ps(a_avx2, b_avx2);\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] /= _right[i];\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator+=(float _right)\n{\n    const size_t num_avx2_elements = _data_size / 8;\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\n        const __m256 result_avx2 = _mm256_add_ps(vec_avx2, value_avx2);\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] += _right;\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator-=(float _right)\n{\n    const size_t num_avx2_elements = _data_size / 8;\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\n        const __m256 result_avx2 = _mm256_sub_ps(vec_avx2, value_avx2);\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] -= _right;\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator*=(float _right)\n{\n    const size_t num_avx2_elements = _data_size / 8;\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\n        const __m256 result_avx2 = _mm256_mul_ps(vec_avx2, value_avx2);\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] *= _right;\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator/=(float _right)\n{\n    const size_t num_avx2_elements = _data_size / 8;\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\n        const __m256 result_avx2 = _mm256_div_ps(vec_avx2, value_avx2);\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] /= _right;\n    return *this;\n}\n#endif"
  },
  {
    "path": "libdlvoicecodec/Modules/InferTools/inferTools.hpp",
    "content": "﻿/**\n * FileName: InferTools.hpp\n * Note: MoeVoiceStudioCore 推理工具的定义\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <fstream>\n#include <vector>\n#include <string>\n#include <functional>\n#include <matlabfunctions.h>\n#include <filesystem>\n#define MOEVSINFERTOOLSHEADER namespace InferTools {\n#define MOEVSINFERTOOLSEND }\n\n#define LibDLVoiceCodecThrow(message) { \\\n\tconst std::string LibDlCodecThrowMessage = message;\\\n\tconst std::string LibDlCodecThrowMessagePrefix = std::string(\"[In \\\"\") + std::filesystem::path(__FILE__).filename().string() + \"\\\" Line \" + std::to_string(__LINE__) + \"] \"; \\\n\tif(LibDlCodecThrowMessage.substr(0, LibDlCodecThrowMessagePrefix.length()) != LibDlCodecThrowMessagePrefix) \\\n\t\tthrow std::exception((LibDlCodecThrowMessagePrefix + LibDlCodecThrowMessage).c_str()); \\\n\telse \\\n\t\tthrow std::exception(LibDlCodecThrowMessage.c_str()); \\\n}\n\nMOEVSINFERTOOLSHEADER\nstruct SlicerSettings\n{\n\tint32_t SamplingRate = 48000;\n\tdouble Threshold = 30.;\n\tdouble MinLength = 3.;\n\tint32_t WindowLength = 2048;\n\tint32_t HopSize = 512;\n};\nclass Wav {\npublic:\n\tstatic constexpr int HEAD_LENGTH = 1024;\n\tstruct WAV_HEADER {\n\t\tchar             RIFF[4] = { 'R','I','F','F' };\n\t\tunsigned long    ChunkSize;\n\t\tchar             WAVE[4] = { 'W','A','V','E' };\n\t\tchar             fmt[4] = { 'f','m','t',' ' };\n\t\tunsigned long    Subchunk1Size;\n\t\tunsigned short   AudioFormat;\n\t\tunsigned short   NumOfChan;\n\t\tunsigned long    SamplesPerSec;\n\t\tunsigned long    bytesPerSec;\n\t\tunsigned short   blockAlign;\n\t\tunsigned short   bitsPerSample;\n\t\tchar             Subchunk2ID[4] = { 'd','a','t','a' };\n\t\tunsigned long    Subchunk2Size;\n\t\tWAV_HEADER(unsigned long cs = 36, unsigned long sc1s = 16, unsigned short af = 1, unsigned short nc = 1, unsigned long sr = 22050, unsigned long bps = 44100, unsigned short ba = 2, unsigned short bips = 16, unsigned long sc2s = 0) :ChunkSize(cs), Subchunk1Size(sc1s), AudioFormat(af), NumOfChan(nc), SamplesPerSec(sr), bytesPerSec(bps), blockAlign(ba), bitsPerSample(bips), Subchunk2Size(sc2s) {}\n\t};\n\tusing iterator = int16_t*;\n\tWav(unsigned long cs = 36, unsigned long sc1s = 16, unsigned short af = 1, unsigned short nc = 1, unsigned long sr = 22050, unsigned long bps = 44100, unsigned short ba = 2, unsigned short bips = 16, unsigned long sc2s = 0) :header({\n\t\t\tcs,\n\t\t\tsc1s,\n\t\t\taf,\n\t\t\tnc,\n\t\t\tsr,\n\t\t\tbps,\n\t\t\tba,\n\t\t\tbips,\n\t\t\tsc2s\n\t\t}), Data(nullptr), StartPos(44) {\n\t\tdataSize = 0;\n\t\tSData = nullptr;\n\t}\n\tWav(unsigned long sr, unsigned long length, const void* data) :header({\n\t\t\t36,\n\t\t\t16,\n\t\t\t1,\n\t\t\t1,\n\t\t\tsr,\n\t\t\tsr * 2,\n\t\t\t2,\n\t\t\t16,\n\t\t\tlength\n\t\t}), Data(new char[length + 1]), StartPos(44)\n\t{\n\t\theader.ChunkSize = 36 + length;\n\t\tmemcpy(Data, data, length);\n\t\tSData = reinterpret_cast<int16_t*>(Data);\n\t\tdataSize = length / 2;\n\t}\n\tWav(const wchar_t* Path);\n\tWav(const Wav& input);\n\tWav(Wav&& input) noexcept;\n\tWav& operator=(const Wav& input) = delete;\n\tWav& operator=(Wav&& input) noexcept;\n\t~Wav() { destory(); }\n\tWav& cat(const Wav& input);\n\t[[nodiscard]] bool isEmpty() const { return this->header.Subchunk2Size == 0; }\n\t[[nodiscard]] const char* getData() const { return Data; }\n\tchar* getData() { return Data; }\n\t[[nodiscard]] WAV_HEADER getHeader() const { return header; }\n\tWAV_HEADER& Header() { return header; }\n\tvoid destory() const { delete[] Data; }\n\tvoid changeData(const void* indata, long length, int sr)\n\t{\n\t\tdelete[] Data;\n\t\tData = new char[length];\n\t\tmemcpy(Data, indata, length);\n\t\theader.ChunkSize = 36 + length;\n\t\theader.Subchunk2Size = length;\n\t\theader.SamplesPerSec = sr;\n\t\theader.bytesPerSec = 2 * sr;\n\t}\n\tint16_t& operator[](const size_t index) const\n\t{\n\t\tif (index < dataSize)\n\t\t\treturn *(SData + index);\n\t\treturn *(SData + dataSize - 1);\n\t}\n\t[[nodiscard]] iterator begin() const\n\t{\n\t\treturn reinterpret_cast<int16_t*>(Data);\n\t}\n\t[[nodiscard]] iterator end() const\n\t{\n\t\treturn reinterpret_cast<int16_t*>(Data + header.Subchunk2Size);\n\t}\n\t[[nodiscard]] int64_t getDataLen()const\n\t{\n\t\treturn static_cast<int64_t>(dataSize);\n\t}\n\tvoid Writef(const std::wstring& filepath) const\n\t{\n\t\tFILE* FOut = nullptr;\n\t\t_wfopen_s(&FOut, filepath.c_str(), L\"wb\");\n\t\tif (!FOut)\n\t\t\treturn;\n\t\tfwrite(&header, 1, sizeof(header), FOut);\n\t\tfwrite(Data, 1, dataSize * 2, FOut);\n\t\tfclose(FOut);\n\t\tFOut = nullptr;\n\t}\n\n\tstatic void WritePCMData(int samplingrate, int channel, const std::vector<int16_t>& PCMDATA, const std::wstring& filepath)\n\t{\n\t\tconst WAV_HEADER TmpHeader(long(36 + 2 * PCMDATA.size()), 16, 1, short(channel), samplingrate, samplingrate * 2 * channel, short(2 * channel), short(16), long(2 * PCMDATA.size()));\n\t\tFILE* FOut = nullptr;\n\t\t_wfopen_s(&FOut, filepath.c_str(), L\"wb\");\n\t\tif (!FOut) return;\n\t\tfwrite(&TmpHeader, 1, sizeof(TmpHeader), FOut);\n\t\tfwrite(PCMDATA.data(), 1, PCMDATA.size() * 2, FOut);\n\t\tfclose(FOut);\n\t\tFOut = nullptr;\n\t}\n\nprivate:\n\tWAV_HEADER header;\n\tchar* Data;\n\tint16_t* SData;\n\tsize_t dataSize;\n\tint StartPos;\n};\n\n/**\n * \\brief 切片机切片（获取切片位置）\n * \\param input PCM数据（SignedInt16）\n * \\param _slicer 切片机设置\n * \\return 切片位置\n */\nstd::vector<size_t> SliceAudio(const std::vector<int16_t>& input, const SlicerSettings& _slicer);\n\n/**\n * \\brief 均值滤波器\n * \\param vec 待滤波的数据\n * \\param window_size 窗口大小\n * \\return 滤波后数据\n */\nstd::vector<float> mean_filter(const std::vector<float>& vec, size_t window_size);\n\ntemplate<typename T>\ndouble getAvg(const T* start, const T* end)\n{\n\tconst auto size = end - start + 1;\n\tauto avg = (double)(*start);\n\tfor (auto i = 1; i < size; i++)\n\t\tavg = avg + (abs((double)start[i]) - avg) / (double)(i + 1ull);\n\treturn avg;\n}\n\nstd::vector<double> arange(double start, double end, double step = 1.0, double div = 1.0);\n\n/**\n * \\brief 重采样（插值）\n * \\tparam TOut 输出类型 \n * \\tparam TIn 输入类型\n * \\param _Data 输入数据\n * \\param src 输入采样率\n * \\param dst 输出采样率\n * \\param n_Div 给输出的数据统一除以这个数\n * \\return 输出数据\n */\ntemplate<typename TOut, typename TIn>\nstatic std::vector<TOut> InterpResample(const std::vector<TIn>& _Data, long src, long dst, TOut n_Div = TOut(1))\n{\n\tif (src != dst)\n\t{\n\t\tconst double intstep = double(src) / double(dst);\n\t\tconst auto xi = InferTools::arange(0, double(_Data.size()), intstep);\n\t\tauto x0 = InferTools::arange(0, double(_Data.size()));\n\t\twhile (x0.size() < _Data.size())\n\t\t\tx0.emplace_back(x0[x0.size() - 1] + 1.0);\n\t\twhile (x0.size() > _Data.size())\n\t\t\tx0.pop_back();\n\n\t\tstd::vector<double> y0(_Data.size());\n\t\tfor (size_t i = 0; i < _Data.size(); ++i)\n\t\t\ty0[i] = double(_Data[i]) / double(n_Div);\n\n\t\tstd::vector<double> yi(xi.size());\n\t\tinterp1(x0.data(), y0.data(), long(x0.size()), xi.data(), long(xi.size()), yi.data());\n\n\t\tstd::vector<TOut> out(xi.size());\n\t\tfor (size_t i = 0; i < yi.size(); ++i)\n\t\t\tout[i] = TOut(yi[i]);\n\t\treturn out;\n\t}\n\tstd::vector<TOut> out(_Data.size());\n\tfor (size_t i = 0; i < _Data.size(); ++i)\n\t\tout[i] = TOut(_Data[i]) / n_Div;\n\treturn out;\n}\n\n/**\n * \\brief 重采样（插值）\n * \\tparam T 数据类型\n * \\param Data 输入数据\n * \\param src 输入采样率\n * \\param dst 输出采样率\n * \\return 输出数据\n */\ntemplate<typename T>\nstatic std::vector<T> InterpFunc(const std::vector<T>& Data, long src, long dst)\n{\n\tif (src != dst)\n\t{\n\t\tconst double intstep = double(src) / double(dst);\n\t\tauto xi = InferTools::arange(0, double(Data.size()), intstep);\n\t\twhile (xi.size() < size_t(dst))\n\t\t\txi.emplace_back(xi[xi.size() - 1] + 1.0);\n\t\twhile (xi.size() > size_t(dst))\n\t\t\txi.pop_back();\n\t\tauto x0 = InferTools::arange(0, double(Data.size()));\n\t\twhile (x0.size() < Data.size())\n\t\t\tx0.emplace_back(x0[x0.size() - 1] + 1.0);\n\t\twhile (x0.size() > Data.size())\n\t\t\tx0.pop_back();\n\t\tstd::vector<double> y0(Data.size());\n\t\tfor (size_t i = 0; i < Data.size(); ++i)\n\t\t\ty0[i] = Data[i] <= T(0.0001) ? NAN : double(Data[i]);\n\t\tstd::vector<double> yi(xi.size());\n\t\tinterp1(x0.data(), y0.data(), long(x0.size()), xi.data(), long(xi.size()), yi.data());\n\t\tstd::vector<T> out(xi.size());\n\t\tfor (size_t i = 0; i < yi.size(); ++i)\n\t\t\tout[i] = isnan(yi[i]) ? T(0.0) : T(yi[i]);\n\t\treturn out;\n\t}\n\treturn Data;\n}\n#ifdef MoeVoiceStudioAvxAcc\nclass FloatTensorWrapper\n{\npublic:\n\tFloatTensorWrapper() = delete;\n\t~FloatTensorWrapper() { _data_ptr = nullptr; }\n\tFloatTensorWrapper(float* const data_p, size_t _size) : _data_ptr(data_p), _data_size(_size) {}\n\tFloatTensorWrapper(const FloatTensorWrapper& _copy) = delete;\n\tFloatTensorWrapper& operator=(const FloatTensorWrapper&) = delete;\n\tFloatTensorWrapper(FloatTensorWrapper&& _move) noexcept:_data_ptr(_move._data_ptr), _data_size(_move._data_size) {}\n\tFloatTensorWrapper& operator=(FloatTensorWrapper&& _move) noexcept\n\t{\n\t\t_data_ptr = _move._data_ptr;\n\t\t_data_size = _move._data_size;\n\t\treturn *this;\n\t}\n\ttemplate<typename T>\n\tstatic const T& Min(const T& a, const T& b) { return (a > b) ? b : a; }\n\tfloat& operator[](size_t index) const { return *(_data_ptr + Min(index, _data_size)); }\n\tFloatTensorWrapper& operator+=(const FloatTensorWrapper& _right);\n\tFloatTensorWrapper& operator-=(const FloatTensorWrapper& _right);\n\tFloatTensorWrapper& operator*=(const FloatTensorWrapper& _right);\n\tFloatTensorWrapper& operator/=(const FloatTensorWrapper& _right);\n\tFloatTensorWrapper& operator+=(float _right);\n\tFloatTensorWrapper& operator-=(float _right);\n\tFloatTensorWrapper& operator*=(float _right);\n\tFloatTensorWrapper& operator/=(float _right);\nprivate:\n\tfloat* _data_ptr = nullptr;\n\tsize_t _data_size = 0;\n};\n#endif\nMOEVSINFERTOOLSEND"
  },
  {
    "path": "libdlvoicecodec/Modules/Logger/MoeSSLogger.cpp",
    "content": "﻿#include \"MoeSSLogger.hpp\"\n#include <iostream>\n#include \"../StringPreprocess.hpp\"\n#include <windows.h>\n\nnamespace MoeSSLogger\n{\n\tstatic Logger MoeVsLogger;\n\n\tstatic std::wstring GetCurrentFolder(const std::wstring& defualt = L\"\")\n\t{\n\t\twchar_t path[1024];\n#ifdef _WIN32\n\t\tGetModuleFileName(nullptr, path, 1024);\n\t\tstd::wstring _curPath = path;\n\t\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\n\t\treturn _curPath;\n#else\n\t\t//TODO Other System\n#error Other System ToDO\n#endif\n\t}\n\n\tvoid RemoveDir(const std::filesystem::directory_entry& dir)\n\t{\n\t\tif (!dir.exists())\n\t\t\treturn;\n\t\tif (dir.is_directory() && !is_empty(dir))\n\t\t{\n\t\t\tconst std::filesystem::directory_iterator dirs(dir);\n\t\t\tfor (const auto& i : dirs)\n\t\t\t\tRemoveDir(i);\n\t\t}\n\t\tremove(dir);\n\t}\n\n\tLogger::~Logger()\n\t{\n#ifndef MoeVoiceStudioCommandLineProg\n\t\tif (log_file)\n\t\t\tfclose(log_file);\n\t\tif (error_file)\n\t\t\tfclose(error_file);\n\t\tlog_file = nullptr;\n\t\terror_file = nullptr;\n#endif\n\t}\n\n\tLogger::Logger()\n\t{\n#ifndef MoeVoiceStudioCommandLineProg\n\t\tconst std::wstring LogPath = GetCurrentFolder() + L\"/log\";\n\t\tconst std::filesystem::path logger_path(LogPath);\n\t\tif (!exists(logger_path))\n\t\t\tcreate_directory(logger_path);\n\t\tconst std::filesystem::directory_entry logger_path_entry(LogPath);\n\t\tif (logger_path_entry.is_directory())\n\t\t{\n\t\t\ttime_t curtime;\n\t\t\ttime(&curtime);\n\t\t\ttm nowtime{ 0, 0, 0, 0, 0, 0, 0, 0, 0 };\n\t\t\tlocaltime_s(&nowtime, &curtime);\n\t\t\tconst std::wstring dir_name =  L\"MoeVoiceStudioLog \" +\n\t\t\t\tstd::to_wstring(nowtime.tm_year + 1900) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_mon) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_mday) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_hour) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_min) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_sec);\n\t\t\tcur_log_dir = LogPath + L'/' + dir_name;\n\t\t\tconst std::filesystem::directory_iterator logger_path_list(LogPath);\n\t\t\tstd::filesystem::directory_entry remove_dir;\n\t\t\tsize_t log_count = 0;\n\t\t\tfor (const auto& i : logger_path_list)\n\t\t\t\tif (i.is_directory() && i.path().filename().wstring().substr(0, 17) == L\"MoeVoiceStudioLog\")\n\t\t\t\t{\n\t\t\t\t\tif (!log_count)\n\t\t\t\t\t\tremove_dir = i;\n\t\t\t\t\telse if (i.last_write_time() < remove_dir.last_write_time())\n\t\t\t\t\t\tremove_dir = i;\n\t\t\t\t\t++log_count;\n\t\t\t\t}\n\t\t\tif (log_count > 10)\n\t\t\t\tRemoveDir(remove_dir);\n\t\t\tif (!exists(cur_log_dir))\n\t\t\t\tcreate_directory(cur_log_dir);\n\t\t\tlogpath = cur_log_dir;\n\t\t\tlogpath.append(\"log.txt\");\n\t\t\terrorpath = cur_log_dir;\n\t\t\terrorpath.append(\"error.txt\");\n\t\t}\n#endif\n\t}\n\n\tvoid Logger::log(const std::wstring& format)\n\t{\n\t\tstd::lock_guard mtx(mx);\n#ifndef MoeVoiceStudioCommandLineProg\n\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\n\t\tif (log_file)\n\t\t{\n\t\t\tfprintf_s(log_file, \"%s\\n\", to_byte_string(format).c_str());\n\t\t\tfclose(log_file);\n\t\t\tlog_file = nullptr;\n\t\t}\n#else\n\t\tfprintf_s(stdout, \"%s\\n\", to_byte_string(format).c_str());\n#endif\n\t}\n\n\tvoid Logger::log(const char* format)\n\t{\n\t\tstd::lock_guard mtx(mx);\n#ifndef MoeVoiceStudioCommandLineProg\n\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\n\t\tif (log_file)\n\t\t{\n\t\t\tfprintf_s(log_file, \"%s\\n\", format);\n\t\t\tfclose(log_file);\n\t\t\tlog_file = nullptr;\n\t\t}\n#else\n\t\tfprintf_s(stdout, \"%s\\n\", format);\n#endif\n\t}\n\n\tvoid Logger::error(const std::wstring& format)\n\t{\n\t\tstd::lock_guard mtx(mx);\n#ifndef MoeVoiceStudioCommandLineProg\n\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\n\t\t_wfopen_s(&error_file, errorpath.c_str(), L\"a+\");\n\t\tif (log_file)\n\t\t{\n\t\t\tfprintf(log_file, \"[ERROR]%s\\n\", to_byte_string(format).c_str());\n\t\t\tfclose(log_file);\n\t\t\tlog_file = nullptr;\n\t\t}\n\t\tif (error_file)\n\t\t{\n\t\t\tfprintf(error_file, \"[ERROR]%s\\n\", to_byte_string(format).c_str());\n\t\t\tfclose(error_file);\n\t\t\terror_file = nullptr;\n\t\t}\n#else\n\t\tfprintf(stdout, \"[ERROR]%s\\n\", to_byte_string(format).c_str());\n#endif\n\t}\n\n\tvoid Logger::error(const char* format)\n\t{\n\t\tstd::lock_guard mtx(mx);\n#ifndef MoeVoiceStudioCommandLineProg\n\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\n\t\t_wfopen_s(&error_file, errorpath.c_str(), L\"a+\");\n\t\tif (log_file)\n\t\t{\n\t\t\tfprintf(log_file, \"[ERROR]%s\\n\", format);\n\t\t\tfclose(log_file);\n\t\t\tlog_file = nullptr;\n\t\t}\n\t\tif (error_file)\n\t\t{\n\t\t\tfprintf(error_file, \"[ERROR]%s\\n\", format);\n\t\t\tfclose(error_file);\n\t\t\terror_file = nullptr;\n\t\t}\n#else\n\t\tfprintf(stdout, \"[ERROR]%s\\n\", format);\n#endif\n\t}\n\n\tLogger& GetLogger()\n\t{\n\t\treturn MoeVsLogger;\n\t}\n}\n"
  },
  {
    "path": "libdlvoicecodec/Modules/Logger/MoeSSLogger.hpp",
    "content": "﻿#pragma once\n#include <string>\n#include \"../StringPreprocess.hpp\"\n#include <filesystem>\n#include <mutex>\n#define __MOEVS_DEBUG_MESSAGE(msg) __MOEVS_DEBUG_INFO(__FILE__, __LINE__, msg)\n#define logger MoeSSLogger::GetLogger()\ninline std::string __MOEVS_DEBUG_INFO(const char* filename, int line, const char* msg)\n{\n\treturn std::string(\"[In \\\"\") + std::filesystem::path(filename).filename().string() + \"\\\" Line \" + std::to_string(line) + \"] \" + msg;\n}\n\ninline std::wstring __MOEVS_DEBUG_INFO(const char* filename, int line, const wchar_t* msg)\n{\n\treturn std::wstring(L\"[In \\\"\") + std::filesystem::path(filename).filename().wstring() + L\"\\\" Line \" + std::to_wstring(line) + L\"] \" + msg;\n}\n\nnamespace MoeSSLogger\n{\n\tclass Logger\n\t{\n\tpublic:\n\t\tLogger();\n\t\t~Logger();\n\t\tvoid log(const std::wstring&);\n\t\tvoid log(const char*);\n\t\tvoid error(const std::wstring&);\n\t\tvoid error(const char*);\n\tprivate:\n\t\tstd::filesystem::path cur_log_dir, logpath, errorpath;\n\t\tFILE* log_file = nullptr,* error_file = nullptr;\n\t\tstd::mutex mx;\n\t};\n\n\tLogger& GetLogger();\n}"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/EnvManager.cpp",
    "content": "﻿#include \"EnvManager.hpp\"\n#ifdef _WIN32\n#ifdef MOEVSDMLPROVIDER\n#include <dml_provider_factory.h>\n#endif\n#endif\n#include <thread>\n#include \"../Logger/MoeSSLogger.hpp\"\n#include \"../InferTools/F0Extractor/NetF0Predictors/NetF0Predictors.hpp\"\n#include \"../Modules.hpp\"\nMoeVoiceStudioCoreEnvManagerHeader\n\nconst char* logger_id = \"MoeVoiceStudioCore\";\n\nvoid MoeVSOrtLoggingFn(void* param, OrtLoggingLevel severity, const char* category, const char* logid, const char* code_location,\n\tconst char* message)\n{\n\tstd::string ort_message = \"[\";\n\tort_message += category;\n\tort_message += \"; In \";\n\tort_message += code_location;\n\tort_message += \"; By\";\n\tort_message += logger_id;\n\tort_message += \"] \";\n\tort_message += message;\n\tlogger.log(ort_message.c_str());\n}\n\nvoid MoeVoiceStudioEnv::Destory()\n{\n\tMoeVSF0Extractor::EmptyCache();\n\tlogger.log(L\"[Info] Removing Env & Release Memory\");\n\tdelete GlobalOrtSessionOptions;\n\tdelete GlobalOrtEnv;\n\tdelete GlobalOrtMemoryInfo;\n\tGlobalOrtSessionOptions = nullptr;\n\tGlobalOrtEnv = nullptr;\n\tGlobalOrtMemoryInfo = nullptr;\n\n\tif (cuda_option_v2)\n\t\tOrt::GetApi().ReleaseCUDAProviderOptions(cuda_option_v2);\n\tcuda_option_v2 = nullptr;\n\tlogger.log(L\"[Info] Complete!\");\n}\n\nvoid MoeVoiceStudioEnv::Load(unsigned ThreadCount, unsigned DeviceID, unsigned Provider)\n{\n\tif (((Provider != CurProvider) ||\n\t\t(Provider == 0 && ThreadCount != CurThreadCount) ||\n\t\t((Provider == 1 || Provider == 2) && DeviceID != CurDeviceID)) &&\n\t\t(MoeVSModuleManager::GetDiffusionSvcModel() || MoeVSModuleManager::GetVitsSvcModel() || MoeVSModuleManager::VocoderEnabled()))\n\t\tLibDLVoiceCodecThrow(\"A Model Has Been Loaded, You Cannot Change Env When A Model Has Been Loaded\");\n\ttry\n\t{\n\t\tif (Provider != CurProvider)\n\t\t\tCreate(ThreadCount, DeviceID, Provider);\n\t\tif (Provider == 0 && ThreadCount != CurThreadCount)\n\t\t\tCreate(ThreadCount, DeviceID, Provider);\n\t\tif ((Provider == 1 || Provider == 2) && DeviceID != CurDeviceID)\n\t\t\tCreate(ThreadCount, DeviceID, Provider);\n\t\tCurProvider = Provider;\n\t}\n\tcatch(std::exception& e)\n\t{\n\t\tDestory();\n\t\tCurThreadCount = unsigned(-1);\n\t\tCurDeviceID = unsigned(-1);\n\t\tCurProvider = unsigned(-1);\n\t\tlogger.log(to_wide_string(e.what()));\n\t\tLibDLVoiceCodecThrow(e.what());\n\t}\n}\n\nvoid MoeVoiceStudioEnv::Create(unsigned ThreadCount_, unsigned DeviceID_, unsigned ExecutionProvider_)\n{\n\tDestory();\n\tlogger.log(L\"[Info] Creating Env\");\n\n\tswitch (ExecutionProvider_)\n\t{\n\t\tcase 1:\n\t\t{\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\t\t\tbool ret = true;\n\t\t\tfor (const auto& it : AvailableProviders)\n\t\t\t\tif (it.find(\"CUDA\") != std::string::npos)\n\t\t\t\t\tret = false;\n\t\t\tif (ret)\n\t\t\t\tLibDLVoiceCodecThrow(\"CUDA Provider Not Found\");\n\t\t\tGlobalOrtSessionOptions = new Ort::SessionOptions;\n\n#ifdef MoeVSCUDAProviderV1\n\t\t\tOrtCUDAProviderOptions cuda_option;\n\t\t\tcuda_option.device_id = int(DeviceID_);\n\t\t\tcuda_option.do_copy_in_default_stream = false;\n\t\t\tGlobalOrtSessionOptions->AppendExecutionProvider_CUDA(cuda_option);\n#else\n\t\t\tconst OrtApi& ortApi = Ort::GetApi();\n\t\t\tif (cuda_option_v2)\n\t\t\t\tortApi.ReleaseCUDAProviderOptions(cuda_option_v2);\n\t\t\tortApi.CreateCUDAProviderOptions(&cuda_option_v2);\n\t\t\tconst std::vector keys{\n\t\t\t\t\"device_id\",\n\t\t\t\t\"gpu_mem_limit\",\n\t\t\t\t\"arena_extend_strategy\",\n\t\t\t\t\"cudnn_conv_algo_search\",\n\t\t\t\t\"do_copy_in_default_stream\",\n\t\t\t\t\"cudnn_conv_use_max_workspace\",\n\t\t\t\t\"cudnn_conv1d_pad_to_nc1d\",\n\t\t\t\t\"enable_cuda_graph\",\n\t\t\t\t\"enable_skip_layer_norm_strict_mode\"\n\t\t\t};\n\t\t\tconst std::vector values{\n\t\t\t\tstd::to_string(DeviceID_).c_str(),\n\t\t\t\t\"2147483648\",\n\t\t\t\t\"kNextPowerOfTwo\",\n\t\t\t\t\"EXHAUSTIVE\",\n\t\t\t\t\"1\",\n\t\t\t\t\"1\",\n\t\t\t\t\"1\",\n\t\t\t\t\"0\",\n\t\t\t\t\"0\"\n\t\t\t};\n\t\t\tortApi.UpdateCUDAProviderOptions(cuda_option_v2, keys.data(), values.data(), keys.size());\n\t\t\tGlobalOrtSessionOptions->AppendExecutionProvider_CUDA_V2(*cuda_option_v2);\n\t\t\t//ortApi.ReleaseCUDAProviderOptions(cuda_option_v2);\n#endif\n\t\t\tGlobalOrtEnv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, logger_id, MoeVSOrtLoggingFn, nullptr);\n\t\t\tGlobalOrtSessionOptions->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\n\t\t\tGlobalOrtSessionOptions->SetIntraOpNumThreads((int)std::thread::hardware_concurrency());\n\t\t\tGlobalOrtMemoryInfo = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n\t\t\tCurDeviceID = DeviceID_;\n\t\t\tbreak;\n\t\t}\n#ifdef MOEVSDMLPROVIDER\n\t\tcase 2:\n\t\t{\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\t\t\tstd::string ret;\n\t\t\tfor (const auto& it : AvailableProviders)\n\t\t\t\tif (it.find(\"Dml\") != std::string::npos)\n\t\t\t\t\tret = it;\n\t\t\tif (ret.empty())\n\t\t\t\tLibDLVoiceCodecThrow(\"DML Provider Not Found\");\n\t\t\tconst OrtApi& ortApi = Ort::GetApi();\n\t\t\tconst OrtDmlApi* ortDmlApi = nullptr;\n\t\t\tortApi.GetExecutionProviderApi(\"DML\", ORT_API_VERSION, reinterpret_cast<const void**>(&ortDmlApi));\n\t\t\tOrt::ThreadingOptions threading_options;\n\t\t\tthreading_options.SetGlobalInterOpNumThreads((int)std::thread::hardware_concurrency());\n\t\t\tGlobalOrtEnv = new Ort::Env(threading_options, MoeVSOrtLoggingFn, nullptr, ORT_LOGGING_LEVEL_WARNING, logger_id);\n\t\t\tGlobalOrtEnv->DisableTelemetryEvents();\n\t\t\tGlobalOrtSessionOptions = new Ort::SessionOptions;\n\t\t\tortDmlApi->SessionOptionsAppendExecutionProvider_DML(*GlobalOrtSessionOptions, int(DeviceID_));\n\t\t\tGlobalOrtSessionOptions->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\n\t\t\tGlobalOrtSessionOptions->DisablePerSessionThreads();\n\t\t\tGlobalOrtSessionOptions->SetExecutionMode(ORT_SEQUENTIAL);\n\t\t\tGlobalOrtSessionOptions->DisableMemPattern();\n\t\t\tGlobalOrtMemoryInfo = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemType::OrtMemTypeCPU));\n\t\t\tCurDeviceID = DeviceID_;\n\t\t\tbreak;\n\t\t}\n#endif\n\t\tdefault:\n\t\t{\n\t\t\tif (ThreadCount_ == 0)\n\t\t\t\tThreadCount_ = std::thread::hardware_concurrency();\n\t\t\tGlobalOrtSessionOptions = new Ort::SessionOptions;\n\t\t\tGlobalOrtEnv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, logger_id, MoeVSOrtLoggingFn, nullptr);\n\t\t\tGlobalOrtSessionOptions->SetIntraOpNumThreads(static_cast<int>(ThreadCount_));\n\t\t\tGlobalOrtSessionOptions->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\n\t\t\tGlobalOrtMemoryInfo = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n\t\t\tCurThreadCount = ThreadCount_;\n\t\t\tbreak;\n\t\t}\n\t}\n\tlogger.log(L\"[Info] Env Created\");\n}\n\nbool MoeVoiceStudioEnv::IsEnabled() const\n{\n\treturn GlobalOrtEnv && GlobalOrtMemoryInfo && GlobalOrtSessionOptions;\n}\n\nMoeVoiceStudioEnv GlobalMoeVSEnv;\n\nMoeVoiceStudioEnv& GetGlobalMoeVSEnv()\n{\n\treturn GlobalMoeVSEnv;\n}\n\nMoeVoiceStudioCoreEnvManagerEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/EnvManager.hpp",
    "content": "﻿/**\n * FileName: EnvManager.hpp\n * Note: MoeVoiceStudioCore 环境管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <onnxruntime_cxx_api.h>\n\n#define MoeVoiceStudioCoreEnvManagerHeader namespace moevsenv{\n#define MoeVoiceStudioCoreEnvManagerEnd }\n\nMoeVoiceStudioCoreEnvManagerHeader\nclass MoeVoiceStudioEnv\n{\npublic:\n\tMoeVoiceStudioEnv() = default;\n\t~MoeVoiceStudioEnv() { Destory(); }\n\tvoid Load(unsigned ThreadCount, unsigned DeviceID, unsigned Provider);\n\tvoid Destory();\n\t[[nodiscard]] bool IsEnabled() const;\n\t[[nodiscard]] Ort::Env* GetEnv() const { return GlobalOrtEnv; }\n\t[[nodiscard]] Ort::SessionOptions* GetSessionOptions() const { return GlobalOrtSessionOptions; }\n\t[[nodiscard]] Ort::MemoryInfo* GetMemoryInfo() const { return GlobalOrtMemoryInfo; }\n\t[[nodiscard]] int GetCurThreadCount() const { return (int)CurThreadCount; }\n\t[[nodiscard]] int GetCurDeviceID() const { return (int)CurDeviceID; }\n\t[[nodiscard]] int GetCurProvider() const { return (int)CurProvider; }\nprivate:\n\tvoid Create(unsigned ThreadCount_, unsigned DeviceID_, unsigned ExecutionProvider_);\n\tOrt::Env* GlobalOrtEnv = nullptr;\n\tOrt::SessionOptions* GlobalOrtSessionOptions = nullptr;\n\tOrt::MemoryInfo* GlobalOrtMemoryInfo = nullptr;\n\tunsigned CurThreadCount = unsigned(-1);\n\tunsigned CurDeviceID = unsigned(-1);\n\tunsigned CurProvider = unsigned(-1);\n\tOrtCUDAProviderOptionsV2* cuda_option_v2 = nullptr;\n};\n\nMoeVoiceStudioEnv& GetGlobalMoeVSEnv();\n\nMoeVoiceStudioCoreEnvManagerEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/header/DiffSvc.hpp",
    "content": "﻿/**\n * FileName: DiffSvc.hpp\n * Note: MoeVoiceStudioCore Onnx Diffusion系Svc 模型定义\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <map>\n#include \"SVC.hpp\"\n\nMoeVoiceStudioCoreHeader\n\nvoid LoadVocoderModel(const std::wstring& VocoderPath);\n\nvoid UnLoadVocoderModel();\n\nbool VocoderEnabled();\n\n/**\n * \\brief DiffSvc模型\n */\nclass DiffusionSvc : public SingingVoiceConversion\n{\npublic:\n    DiffusionSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    /**\n     * \\brief 加载DiffSvc模型\n     * \\param _PathDict 路径，Key分别为[\"Hubert\", \"Hifigan\", \"Encoder\", \"DenoiseFn\", \"NoisePredictor\", \"AfterProcess\", \"DiffSvc\", \"Naive\", \"Alphas\"]，其中\"DiffSvc\"、\"Naive\"、\"Alphas\"为可选项\n     * \\param _Config 配置Json\n     * \\param _ProgressCallback 进度条回调函数\n     * \\param ExecutionProvider_ Provider\n     * \\param DeviceID_ GPU设备ID\n     * \\param ThreadCount_ 线程数\n     */\n    DiffusionSvc(const std::map<std::string,std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\n                 ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n                 unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n\t~DiffusionSvc() override;\n\n    void load(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback);\n\n    void Destory();\n\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\n        const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\n\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const override;\n\n    [[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Paths, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n        const InferTools::SlicerSettings& _SlicerSettings) const override;\n\n    [[nodiscard]] std::vector<int16_t> InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\n\n    [[nodiscard]] std::vector<int16_t> ShallowDiffusionInference(\n\t\tstd::vector<float>& _16KAudioHubert,\n        const MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n        std::pair<std::vector<float>, int64_t>& _Mel,\n        const std::vector<float>& _SrcF0,\n        const std::vector<float>& _SrcVolume,\n        const std::vector<std::vector<float>>& _SrcSpeakerMap,\n        size_t& Process,\n        int64_t SrcSize\n    ) const;\n\n    [[nodiscard]] int64_t GetMaxStep() const\n    {\n        return MaxStep;\n    }\n\n    [[nodiscard]] bool OldVersion() const\n    {\n        return diffSvc;\n    }\n\n    [[nodiscard]] const std::wstring& GetDiffSvcVer() const\n    {\n        return DiffSvcVersion;\n    }\n\n    [[nodiscard]] int64_t GetMelBins() const\n    {\n        return melBins;\n    }\n\n    void NormMel(std::vector<float>& MelSpec) const;\n\nprivate:\n    Ort::Session* encoder = nullptr;\n    Ort::Session* denoise = nullptr;\n    Ort::Session* pred = nullptr;\n    Ort::Session* after = nullptr;\n    Ort::Session* alpha = nullptr;\n    Ort::Session* naive = nullptr;\n\n    Ort::Session* diffSvc = nullptr;\n\n    int64_t melBins = 128;\n    int64_t Pndms = 100;\n    int64_t MaxStep = 1000;\n    float SpecMin = -12;\n    float SpecMax = 2;\n\n    std::wstring DiffSvcVersion = L\"DiffSvc\";\n\n    const std::vector<const char*> nsfInput = { \"c\", \"f0\" };\n    const std::vector<const char*> nsfOutput = { \"audio\" };\n    const std::vector<const char*> DiffInput = { \"hubert\", \"mel2ph\", \"spk_embed\", \"f0\", \"initial_noise\", \"speedup\" };\n    const std::vector<const char*> DiffOutput = { \"mel_pred\", \"f0_pred\" };\n    const std::vector<const char*> afterInput = { \"x\" };\n    const std::vector<const char*> afterOutput = { \"mel_out\" };\n    const std::vector<const char*> naiveOutput = { \"mel\" };\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/header/GPT-SoVits.hpp",
    "content": "﻿/**\n * FileName: GPT-SoVits.hpp\n * Note: MoeVoiceStudioCore GPT-SoVits模型类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2023-11-9 Create\n*/\n\n#pragma once\n#include \"TTS.hpp\"\n\nMoeVoiceStudioCoreHeader\nclass GptSoVits : public TextToSpeech\n{\npublic:\n    GptSoVits(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    GptSoVits(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    void load(const std::map<std::string, std::wstring>& _PathDict,\n        const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback);\n\n    ~GptSoVits() override;\n\n    void destory()\n    {\n        delete sessionBert;\n        delete sessionVits;\n        delete sessionSSL;\n        sessionBert = nullptr;\n        sessionVits = nullptr;\n        sessionSSL = nullptr;\n\n        delete sessionEncoder;\n        delete sessionFDecoder;\n        delete sessionDecoder;\n        sessionEncoder = nullptr;\n        sessionFDecoder = nullptr;\n        sessionDecoder = nullptr;\n    }\n\n    [[nodiscard]] std::tuple<std::vector<float>, std::vector<int64_t>> GetBertPhs(const MoeVSProjectSpace::MoeVSTTSSeq& Seq, const MoeVSG2P::Tokenizer& Tokenizer) const;\n\n    [[nodiscard]] std::vector<std::vector<int16_t>> Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const override;\nprivate:\n    Ort::Session* sessionBert = nullptr;\n    Ort::Session* sessionVits = nullptr;\n    Ort::Session* sessionSSL = nullptr;\n\n    Ort::Session* sessionEncoder = nullptr;\n    Ort::Session* sessionFDecoder = nullptr;\n    Ort::Session* sessionDecoder = nullptr;\n\n    int64_t NumLayers = 24;\n    int64_t EmbeddingDim = 512;\n    int64_t EOSId = 1024;\n\n    std::vector<const char*> VitsInputNames = { \"text_seq\", \"pred_semantic\", \"ref_audio\" };\n    const std::vector<const char*> VitsOutputNames = { \"audio\" };\n\n    std::vector<const char*> EncoderInputNames = { \"ref_seq\", \"text_seq\", \"ref_bert\", \"text_bert\", \"ssl_content\" };\n    const std::vector<const char*> EncoderOutputNames = { \"x\", \"prompts\" };\n    std::vector<const char*> DecoderInputNames = { \"iy\", \"ik\", \"iv\", \"iy_emb\", \"ix_example\" };\n    const std::vector<const char*> DecoderOutputNames = { \"y\", \"k\", \"v\", \"y_emb\", \"logits\", \"samples\" };\n    std::vector<const char*> FDecoderInputNames = { \"x\", \"prompts\" };\n    const std::vector<const char*> FDecoderOutputNames = { \"y\", \"k\", \"v\", \"y_emb\", \"x_example\" };\n\n    std::vector<const char*> SSLInputNames = { \"audio\" };\n    const std::vector<const char*> SSLOutputNames = { \"last_hidden_state\" };\n\n    const std::vector<const char*> BertInputNames = { \"input_ids\", \"attention_mask\", \"token_type_ids\" };\n    const std::vector<const char*> BertInputNames2 = { \"input_ids\", \"attention_mask\" };\n    const std::vector<const char*> BertInputNames3 = { \"input_ids\" };\n    const std::vector<const char*> BertOutputNames = { \"last_hidden_state\" };\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/header/ModelBase.hpp",
    "content": "﻿/**\n * FileName: ModelBase.hpp\n * Note: MoeVoiceStudioCore Onnx 模型基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <functional>\n#include <thread>\n#include <onnxruntime_cxx_api.h>\n#ifdef _WIN32\n#define WIN32_LEAN_AND_MEAN\n#endif\n#include <windows.h>\n#include \"MoeVSProject.hpp\"\n#include \"../../InferTools/inferTools.hpp\"\n\n#define MoeVoiceStudioCoreHeader namespace MoeVoiceStudioCore{\n#define MoeVoiceStudioCoreEnd }\n#define MoeVSNotImplementedError LibDLVoiceCodecThrow(\"NotImplementedError\")\n#define MoeVSClassName(__Moe__VSClassName) __NAME__CLASS__.emplace_back((__Moe__VSClassName))\n#define MoeVSMaxPath 1024\nstatic std::wstring GetCurrentFolder(const std::wstring& defualt = L\"\")\n{\n\twchar_t path[MoeVSMaxPath];\n#ifdef _WIN32\n\tGetModuleFileName(nullptr, path, MoeVSMaxPath);\n\tstd::wstring _curPath = path;\n\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\n\treturn _curPath;\n#else\n\t//TODO Other System\n#error Other System ToDO\n#endif\n}\n\nMoeVoiceStudioCoreHeader\n\nclass MoeVoiceStudioModule\n{\npublic:\n\t//进度条回调\n\tusing ProgressCallback = std::function<void(size_t, size_t)>;\n\n\t//Provicer\n\tenum class ExecutionProviders\n\t{\n\t\tCPU = 0,\n\t\tCUDA = 1,\n#ifdef MOEVSDMLPROVIDER\n\t\tDML = 2\n#endif\n\t};\n\n\tstatic [[nodiscard]] std::vector<std::wstring> GetOpenFileNameMoeVS();\n\n\tstatic std::vector<std::wstring> CutLens(const std::wstring& input);\n\n\t/**\n\t * \\brief 构造Onnx模型基类\n\t * \\param ExecutionProvider_ ExecutionProvider(可以理解为设备)\n\t * \\param DeviceID_ 设备ID\n\t * \\param ThreadCount_ 线程数\n\t */\n\tMoeVoiceStudioModule(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_ = 0);\n\n\tvirtual ~MoeVoiceStudioModule();\n\n\t/**\n\t * \\brief 输入路径推理\n\t * \\param _Datas [路径，多个路径使用换行符隔开, 推理文本]\n\t * \\param _InferParams 推理参数\n\t * \\param _SlicerSettings 切片机配置\n\t * \\return 输出路径\n\t */\n\t[[nodiscard]] virtual std::vector<std::wstring> Inference(std::wstring& _Datas,\n\t                                                          const MoeVSProjectSpace::MoeVSParams& _InferParams,\n\t                                                          const InferTools::SlicerSettings& _SlicerSettings) const;\n\n\t/**\n\t * \\brief 获取采样率\n\t * \\return 采样率\n\t */\n\t[[nodiscard]] long GetSamplingRate() const\n\t{\n\t\treturn _samplingRate;\n\t}\n\n\tstatic float Clamp(float in, float min = -1.f, float max = 1.f)\n\t{\n\t\tif (in > max)\n\t\t\treturn max;\n\t\tif (in < min)\n\t\t\treturn min;\n\t\treturn in;\n\t}\nprotected:\n\t//采样率\n\tlong _samplingRate = 22050;\n\n\tOrt::Env* env = nullptr;\n\tOrt::SessionOptions* session_options = nullptr;\n\tOrt::MemoryInfo* memory_info = nullptr;\n\tExecutionProviders _cur_execution_provider = ExecutionProviders::CPU;\n\tProgressCallback _callback;\n\n\tstd::vector<std::wstring> __NAME__CLASS__ = { L\"MoeVoiceStudioModule\" };\npublic:\n\t//*******************删除的函数********************//\n\tMoeVoiceStudioModule& operator=(MoeVoiceStudioModule&&) = delete;\n\tMoeVoiceStudioModule& operator=(const MoeVoiceStudioModule&) = delete;\n\tMoeVoiceStudioModule(const MoeVoiceStudioModule&) = delete;\n\tMoeVoiceStudioModule(MoeVoiceStudioModule&&) = delete;\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/header/MoeVSProject.hpp",
    "content": "﻿/**\n * FileName: MoeVSProject.hpp\n * Note: MoeVoiceStudioCore 项目相关的定义\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <string>\n#include <vector>\n#include \"../../StringPreprocess.hpp\"\n#include \"MJson.h\"\nnamespace MoeVSProjectSpace\n{\n    class FileWrapper\n    {\n    public:\n        FileWrapper() = delete;\n        FileWrapper(const wchar_t* _path, const wchar_t* _mode)\n        {\n            _wfopen_s(&file_, _path, _mode);\n        }\n        ~FileWrapper()\n        {\n            if (file_)\n                fclose(file_);\n            file_ = nullptr;\n        }\n        operator FILE* () const\n        {\n            return file_;\n        }\n        [[nodiscard]] bool IsOpen() const\n        {\n            return file_;\n        }\n    private:\n        FILE* file_ = nullptr;\n    };\n\n    using size_type = size_t;\n\n    template <typename T = float>\n    size_type GetSize(const std::vector<T>& inp_vec)\n    {\n        return inp_vec.size() * sizeof(T);\n    }\n\n    struct MoeVoiceStudioSvcSlice\n    {\n        std::vector<int16_t> Audio;\n        std::vector<float> F0;\n        std::vector<float> Volume;\n        std::vector< std::vector<float>> Speaker;\n        long OrgLen = 0;\n        bool IsNotMute = false;\n        MoeVoiceStudioSvcSlice() = default;\n    };\n\n    struct MoeVoiceStudioSvcData\n    {\n        /*std::vector<std::vector<int16_t>> Audio;\n        std::vector<std::vector<float>> F0;\n        std::vector<std::vector<float>> Volume;\n        std::vector<std::vector<std::vector<float>>> Speaker;\n        std::vector<long> OrgLen;\n        std::vector<bool> IsNotMute;*/\n        std::vector<MoeVoiceStudioSvcSlice> Slices;\n        std::wstring Path;\n        MoeVoiceStudioSvcData() = default;\n        [[nodiscard]] size_type Size() const\n        {\n            size_type _size = 0;\n            const std::string bytePath = to_byte_string(Path);\n            _size += sizeof(long) * Slices.size() + Slices.size() + bytePath.length() + 1;\n            for (const auto& Slice : Slices)\n            {\n                _size += GetSize(Slice.Audio) + GetSize(Slice.F0) + GetSize(Slice.Volume);\n                for (const auto& it : Slice.Speaker)\n                    _size += GetSize(it);\n            }\n            return _size;\n        }\n    };\n\n    struct MoeVSAudioSliceRef\n    {\n        const std::vector<int16_t>& Audio;\n        const std::vector<float>& F0;\n        const std::vector<float>& Volume;\n        const std::vector<std::vector<float>>& Speaker;\n        bool IsNotMute;\n        long OrgLen;\n        const std::wstring& Path;\n        size_t Slice = 0;\n        void* Mel = nullptr;\n        MoeVSAudioSliceRef(\n            const std::vector<int16_t>& audio,\n            const std::vector<float>& f0,\n            const std::vector<float>& volume,\n            const std::vector<std::vector<float>>& speaker,\n            bool isnotmute,\n            long orglen,\n            const std::wstring& path,\n            size_t sli,\n            void* mel_tensor_ptr = nullptr\n        ) :\n            Audio(audio),\n            F0(f0),\n            Volume(volume),\n            Speaker(speaker),\n            IsNotMute(isnotmute),\n            OrgLen(orglen),\n            Path(path),\n            Slice(sli),\n            Mel(mel_tensor_ptr)\n        {}\n    };\n\n\tstruct MoeVSParams\n\t{\n        //通用\n        float NoiseScale = 0.3f;                           //噪声修正因子          0-10\n        int64_t Seed = 52468;                              //种子\n        int64_t SpeakerId = 0;                             //角色ID\n        uint64_t SrcSamplingRate = 48000;                  //源采样率\n        int64_t SpkCount = 2;                              //模型角色数\n\n        //SVC\n\t\tfloat IndexRate = 0.f;                             //索引比               0-1\n\t\tfloat ClusterRate = 0.f;                           //聚类比               0-1\n\t\tfloat DDSPNoiseScale = 0.8f;                       //DDSP噪声修正因子      0-10\n\t\tfloat Keys = 0.f;                                  //升降调               -64-64\n\t\tsize_t MeanWindowLength = 2;                       //均值滤波器窗口大小     1-20\n\t\tsize_t Pndm = 100;                                 //Diffusion加速倍数    2-200\n\t\tsize_t Step = 1000;                                //Diffusion总步数      200-1000\n\t\tstd::wstring Sampler = L\"Pndm\";                    //Diffusion采样器\n\t\tstd::wstring F0Method = L\"Dio\";                    //F0提取算法\n        bool UseShallowDiffusion = false;                  //使用浅扩散\n\n        //SVCRTInfer\n        int64_t RTSampleSize = 44100;\n        int64_t CrossFadeLength = 320;\n\n        //TTS\n        std::vector<float> SpeakerMix;                     //角色混合比例\n        float LengthScale = 1.0f;                          //时长修正因子\n        float DurationPredictorNoiseScale = 0.8f;          //随机时长预测器噪声修正因子\n        float FactorDpSdp = 0.f;                           //随机时长预测器与时长预测器混合比例\n        float GateThreshold = 0.66666f;                    //Tacotron2解码器EOS阈值\n        int64_t MaxDecodeStep = 2000;                      //Tacotron2最大解码步数\n        std::vector<std::wstring> EmotionPrompt;           //情感标记\n        std::wstring PlaceHolderSymbol = L\"|\";             //音素分隔符\n        float RestTime = 0.5f;                             //停顿时间，为负数则直接断开音频并创建新音频\n        std::string LanguageSymbol = \"JP\";                 //语言\n        std::wstring AdditionalInfo;                       //G2P额外信息\n        std::wstring SpeakerName = L\"0\";                   //角色名\n\t};\n\n    struct MoeVSTTSToken\n    {\n        std::wstring Text;                                 //输入文本\n        std::vector<std::wstring> Phonemes;                //音素序列\n        std::vector<int64_t> Tones;                        //音调序列\n        std::vector<int64_t> Durations;                    //时长序列\n        std::vector<std::string> Language;                 //语言序列\n\n        MoeVSTTSToken() = default;\n        MoeVSTTSToken(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams);\n\n        [[nodiscard]] std::wstring Serialization() const;\n    };\n\n    struct MoeVSTTSSeq\n    {\n        std::wstring TextSeq;\n        std::vector<MoeVSTTSToken> SlicedTokens;\n        std::vector<float> SpeakerMix;                     //角色混合比例\n        std::vector<std::wstring> EmotionPrompt;           //情感标记\n        std::wstring PlaceHolderSymbol = L\"|\";             //音素分隔符\n        float NoiseScale = 0.3f;                           //噪声修正因子             0-10\n        float LengthScale = 1.0f;                          //时长修正因子\n        float DurationPredictorNoiseScale = 0.3f;          //随机时长预测器噪声修正因子\n        float FactorDpSdp = 0.3f;                          //随机时长预测器与时长预测器混合比例\n        float GateThreshold = 0.66666f;                    //Tacotron2解码器EOS阈值\n        int64_t MaxDecodeStep = 2000;                      //Tacotron2最大解码步数\n        int64_t Seed = 52468;                              //种子\n        float RestTime = 0.5f;                             //停顿时间，为负数则直接断开音频并创建新音频\n        std::string LanguageSymbol = \"ZH\";                 //语言标记\n        std::wstring SpeakerName = L\"0\";                   //角色或名称ID\n        std::wstring AdditionalInfo;                       //G2P额外信息\n\n        MoeVSTTSSeq() = default;\n        MoeVSTTSSeq(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams);\n\n        [[nodiscard]] std::wstring Serialization() const;\n\n        bool operator==(const MoeVSTTSSeq& right) const;\n    };\n\n    using MoeVSSvcParams = MoeVSParams;\n    using MoeVSTTSParams = MoeVSParams;\n\n    struct ParamsOffset\n    {\n        std::vector<size_type> OrgAudio;\n        //std::vector<size_type> Hidden_Unit;\n        std::vector<size_type> F0;\n        std::vector<size_type> Volume;\n        std::vector<size_type> Speaker;\n        [[nodiscard]] size_type Size() const\n        {\n            return size_type(OrgAudio.size() + F0.size() + Volume.size() + Speaker.size()) * sizeof(size_type);\n        }\n        ParamsOffset() = default;\n    };\n\n    class MoeVSProject\n    {\n    public:\n        struct Header\n        {\n            char ChunkSymbol[8] = { 'M','O','E','V','S','P','R','J' };\n            size_type DataHeaderAmount = 0;\n        };\n        struct DataHeader\n        {\n            char ChunkSymbol[4] = { 'D','A','T','A' };\n\n            size_type OrgAudioOffsetPosSize = 0;\n\n            size_type F0OffsetPosSize = 0;\n\n            size_type VolumeOffsetPosSize = 0;\n\n            size_type CharacterOffsetPosSize = 0;\n\n            size_type OrgLenSize = 0;\n\n            size_type SymbolSize = 0;\n\n            size_type PathSize = 0;\n\n            size_type HeaderSize = sizeof(DataHeader) - sizeof(size_type);\n        };\n        struct Data\n        {\n            DataHeader Header;\n            ParamsOffset Offset;\n            MoeVoiceStudioSvcData ParamData;\n            [[nodiscard]] size_type Size() const\n            {\n                size_type size = sizeof(DataHeader);\n                size += Offset.Size();\n                size += ParamData.Size();\n                return size;\n            }\n        };\n\n        MoeVSProject() = delete;\n        ~MoeVSProject() = default;\n\n        //从文件读取项目\n        MoeVSProject(const std::wstring& _path);\n\n        //从音频数据构造项目\n        MoeVSProject(const std::vector<MoeVoiceStudioSvcData>& _params);\n\n        //写入文件\n        void Write(const std::wstring& _path) const;\n\n        //从项目获取音频数据\n        [[nodiscard]] std::vector<MoeVoiceStudioSvcData> GetParams() const\n        {\n            std::vector<MoeVoiceStudioSvcData> Params_data;\n            Params_data.reserve(data_.size());\n            for (const auto& i : data_)\n                Params_data.emplace_back(i.ParamData);\n            return Params_data;\n        }\n\n        //从项目获取音频数据（移动构造）\n        [[nodiscard]] std::vector<MoeVoiceStudioSvcData> GetParamsMove()\n        {\n            std::vector<MoeVoiceStudioSvcData> Params_data;\n            Params_data.reserve(data_.size());\n            for (auto& i : data_)\n                Params_data.emplace_back(std::move(i.ParamData));\n            return Params_data;\n        }\n    private:\n        static constexpr size_t begin_offset = sizeof(Header);\n        Header moevs_proj_header_;\n        std::vector<size_type> data_pos_;\n        size_type data_chunk_begin_ = 0;\n        std::vector<Data> data_;\n    };\n}\n"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/header/SVC.hpp",
    "content": "﻿/**\n * FileName: SVC.hpp\n * Note: MoeVoiceStudioCore OnnxSvc 模型基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"ModelBase.hpp\"\n#include \"../../Logger/MoeSSLogger.hpp\"\n#include \"MJson.h\"\n#include \"../../InferTools/inferTools.hpp\"\n#include \"../../InferTools/TensorExtractor/TensorExtractorManager.hpp\"\n#include \"../../InferTools/Cluster/MoeVSClusterManager.hpp\"\n\nMoeVoiceStudioCoreHeader\n\n/*\nclass OnnxModule\n{\npublic:\n\tenum class Device\n\t{\n\t\tCPU = 0,\n\t\tCUDA = 1,\n#ifdef MOEVSDMLPROVIDER\n\t\tDML = 2\n#endif\n\t};\n\tusing callback = std::function<void(size_t, size_t)>;\n\tusing int64 = int64_t;\n\tusing MTensor = Ort::Value;\n\n\tOnnxModule();\n\tvirtual ~OnnxModule();\n\tvoid ChangeDevice(Device _dev);\n\n\tstatic std::vector<std::wstring> CutLens(const std::wstring& input);\n\n\t[[nodiscard]] long GetSamplingRate() const\n\t{\n\t\treturn _samplingRate;\n\t}\n\n\ttemplate <typename T = float>\n\tstatic void LinearCombination(std::vector<T>& _data, T Value = T(1.0))\n\t{\n\t\tif(_data.empty())\n\t\t{\n\t\t\t_data = std::vector<T>(1, Value);\n\t\t\treturn;\n\t\t}\n\t\tT Sum = T(0.0);\n\t\tfor(const auto& i : _data)\n\t\t\tSum += i;\n\t\tif (Sum < T(0.0001))\n\t\t{\n\t\t\t_data = std::vector<T>(_data.size(), T(0.0));\n\t\t\t_data[0] = Value;\n\t\t\treturn;\n\t\t}\n\t\tSum *= T(Value);\n\t\tfor (auto& i : _data)\n\t\t\ti /= Sum;\n\t}\nprotected:\n\tOrt::Env* env = nullptr;\n\tOrt::SessionOptions* session_options = nullptr;\n\tOrt::MemoryInfo* memory_info = nullptr;\n\n\tmodelType _modelType = modelType::SoVits;\n\tDevice device_ = Device::CPU;\n\n\tlong _samplingRate = 22050;\n\n\tcallback _callback;\n\n\tstatic constexpr long MaxPath = 8000l;\n\tstd::wstring _outputPath = GetCurrentFolder() + L\"\\\\outputs\";\n};\n */\n\nclass SingingVoiceConversion : public MoeVoiceStudioModule\n{\npublic:\n\tSingingVoiceConversion(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_ = 0);\n\n\t/**\n\t * \\brief 输入路径推理\n\t * \\param _Paths 路径，多个路径使用换行符隔开\n\t * \\param _InferParams 推理参数\n\t * \\param _SlicerSettings 切片机配置\n\t * \\return 输出路径\n\t */\n\t[[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Paths,\n\t\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\t\tconst InferTools::SlicerSettings& _SlicerSettings) const override;\n\n\t/**\n\t * \\brief 推理一个音频\n\t * \\param _Slice 音频数据\n\t * \\param _InferParams 推理参数\n\t * \\return 推理结果（PCM signed-int16 单声道）\n\t */\n\t[[nodiscard]] virtual std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\n\t                                                          const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const;\n\n\t/**\n\t * \\brief 推理一个音频（使用引用）\n\t * \\param _Slice 音频数据引用\n\t * \\param _InferParams 推理参数\n\t * \\param _Process 推理进度\n\t * \\return 推理结果（PCM signed-int16 单声道）\n\t */\n\t[[nodiscard]] virtual std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice,\n\t\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const;\n\n\t/**\n\t * \\brief 推理一个音频（使用PCM）\n\t * \\param PCMData 输入的PCM数据（signed-int16 单声道）\n\t * \\param srcSr 输入PCM的采样率\n\t * \\param _InferParams 推理参数\n\t * \\return 推理结果（PCM signed-int16 单声道）\n\t */\n\t[[nodiscard]] virtual std::vector<int16_t> InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const;\n\n\t//提取音量\n\t[[nodiscard]] static std::vector<float> ExtractVolume(const std::vector<int16_t>& OrgAudio, int hop_size);\n\n\t//提取音量\n\t[[nodiscard]] std::vector<float> ExtractVolume(const std::vector<double>& OrgAudio) const;\n\n\t//获取HopSize\n\t[[nodiscard]] int GetHopSize() const\n\t{\n\t\treturn HopSize;\n\t}\n\n\t//获取HiddenUnitKDims\n\t[[nodiscard]] int64_t GetHiddenUnitKDims() const\n\t{\n\t\treturn HiddenUnitKDims;\n\t}\n\n\t//获取角色数量\n\t[[nodiscard]] int64_t GetSpeakerCount() const\n\t{\n\t\treturn SpeakerCount;\n\t}\n\n\t//获取角色混合启用状态\n\t[[nodiscard]] bool CharaMixEnabled() const\n\t{\n\t\treturn EnableCharaMix;\n\t}\n\n\t/**\n\t * \\brief 切片一个音频\n\t * \\param input 输入的PCM数据（signed-int16 单声道）\n\t * \\param _slice_pos 切片位置（单位为采样）\n\t * \\param _slicer 切片机设置\n\t * \\return 音频数据\n\t */\n\t[[nodiscard]] static MoeVSProjectSpace::MoeVoiceStudioSvcData GetAudioSlice(const std::vector<int16_t>& input,\n\t                                                                      const std::vector<size_t>& _slice_pos,\n\t                                                                      const InferTools::SlicerSettings& _slicer);\n\n\t/**\n\t * \\brief 预处理音频数据\n\t * \\param input 完成切片的音频数据\n\t * \\param __SamplingRate 采样率\n\t * \\param __HopSize HopSize\n\t * \\param _f0_method F0算法\n\t */\n\tstatic void PreProcessAudio(MoeVSProjectSpace::MoeVoiceStudioSvcData& input,\n\t                            int __SamplingRate = 48000, int __HopSize = 512, const std::wstring& _f0_method = L\"Dio\");\n\n\t~SingingVoiceConversion() override;\n\nprotected:\n\tMoeVSTensorPreprocess::TensorExtractor _TensorExtractor;\n\n\tOrt::Session* hubert = nullptr;\n\n\tint HopSize = 320;\n\tint64_t HiddenUnitKDims = 256;\n\tint64_t SpeakerCount = 1;\n\tbool EnableCharaMix = false;\n\tbool EnableVolume = false;\n\n\tMoeVoiceStudioCluster::MoeVSCluster Cluster;\n\n\tint64_t ClusterCenterSize = 10000;\n\tbool EnableCluster = false;\n\tbool EnableIndex = false;\n\n\tconst std::vector<const char*> hubertOutput = { \"embed\" };\n\tconst std::vector<const char*> hubertInput = { \"source\" };\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/header/TTS.hpp",
    "content": "﻿/**\n * FileName: TTS.hpp\n * Note: MoeVoiceStudioCore TTS基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2023-11-9 Create\n*/\n\n#pragma once\n#include <map>\n#include \"ModelBase.hpp\"\n#include \"../../Logger/MoeSSLogger.hpp\"\n#include \"../../InferTools/G2P/MoeVSG2P.hpp\"\n#include \"MJson.h\"\n\nMoeVoiceStudioCoreHeader\n\nclass EmoLoader\n{\npublic:\n\tstatic constexpr long startPos = 128;\n\tEmoLoader() = default;\n\tEmoLoader(const std::wstring& path)\n\t{\n\t\tif (emofile)\n\t\t\tfclose(emofile);\n\t\temofile = nullptr;\n\t\t_wfopen_s(&emofile, path.c_str(), L\"r\");\n\t\tif (!emofile)\n\t\t\tLibDLVoiceCodecThrow(\"emoFile not exists\")\n\t}\n\t~EmoLoader()\n\t{\n\t\tif (emofile)\n\t\t\tfclose(emofile);\n\t\temofile = nullptr;\n\t}\n\tvoid close()\n\t{\n\t\tif (emofile)\n\t\t\tfclose(emofile);\n\t\temofile = nullptr;\n\t}\n\tvoid open(const std::wstring& path)\n\t{\n\t\tif (emofile)\n\t\t\tfclose(emofile);\n\t\temofile = nullptr;\n\t\t_wfopen_s(&emofile, path.c_str(), L\"rb\");\n\t\tif (!emofile)\n\t\t\tLibDLVoiceCodecThrow(\"emoFile not exists\")\n\t}\n\tstd::vector<float> operator[](long index) const\n\t{\n\t\tif (emofile)\n\t\t{\n\t\t\tfseek(emofile, index * 4096 + startPos, SEEK_SET);\n\t\t\tchar buffer[4096];\n\t\t\tconst auto buf = reinterpret_cast<float*>(buffer);\n\t\t\tconst auto bufread = fread_s(buffer, 4096, 1, 4096, emofile);\n\t\t\tif (bufread == 4096)\n\t\t\t\treturn { buf ,buf + 1024 };\n\t\t\tLibDLVoiceCodecThrow(\"emo index out of range\")\n\t\t}\n\t\tLibDLVoiceCodecThrow(\"emo file not opened\")\n\t}\nprivate:\n\tFILE* emofile = nullptr;\n};\n\nclass TextToSpeech : public MoeVoiceStudioModule\n{\npublic:\n\tusing DurationCallback = std::function<void(std::vector<float>&)>;\n\n\tTextToSpeech(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_ = 0);\n\n\t[[nodiscard]] std::vector<MoeVSProjectSpace::MoeVSTTSSeq> GetInputSeqs(const MJson& _Input, const MoeVSProjectSpace::MoeVSParams& _InitParams) const;\n\n\tstd::vector<MoeVSProjectSpace::MoeVSTTSSeq>& SpecializeInputSeqs(std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Seq) const;\n\n\t[[nodiscard]] static std::vector<MoeVSProjectSpace::MoeVSTTSSeq> GetInputSeqsStatic(const MJson& _Input, const MoeVSProjectSpace::MoeVSParams& _InitParams);\n\n\tstatic std::vector<std::vector<bool>> generatePath(float* duration, size_t durationSize, size_t maskSize);\n\n\t[[nodiscard]] std::vector<float> GetEmotionVector(const std::vector<std::wstring>& src) const;\n\n\t[[nodiscard]] std::vector<std::vector<int16_t>> Inference(const std::wstring& _Seq,\n\t\tconst MoeVSProjectSpace::MoeVSParams& _InferParams = MoeVSProjectSpace::MoeVSParams()) const;\n\n\t[[nodiscard]] std::vector<std::wstring> Inference(const std::wstring& _Seq,\n\t\tconst MoeVSProjectSpace::MoeVSParams& _InferParams, bool T) const;\n\n\t[[nodiscard]] std::vector<std::vector<int16_t>> Inference(const MJson& _Inputs,\n\t\tconst MoeVSProjectSpace::MoeVSParams& _InferParams = MoeVSProjectSpace::MoeVSParams()) const;\n\n\t[[nodiscard]] virtual std::vector<std::vector<int16_t>> Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const;\n\n\t[[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Datas, const MoeVSProjectSpace::MoeVSParams& _InferParams, const InferTools::SlicerSettings& _SlicerSettings) const override;\n\n\t[[nodiscard]] static std::vector<size_t> GetAligments(size_t DstLen, size_t SrcLen);\n\n\t[[nodiscard]] std::wstring TextNormalize(const std::wstring& _Input, int64_t LanguageId) const;\n\n\t[[nodiscard]] int64_t GetLanguageToneIdx(int64_t _Index) const\n\t{\n\t\tstd::string LanguageSymb;\n\t\tfor(const auto& i : LanguageMap)\n\t\t\tif (_Index == i.second)\n\t\t\t\tLanguageSymb = i.first;\n\t\tif (LanguageSymb.empty())\n\t\t\treturn 0;\n\t\tconst auto Iter = LanguageTones.find(LanguageSymb);\n\t\tif (Iter != LanguageTones.end())\n\t\t\treturn Iter->second;\n\t\treturn 0;\n\t}\n\n\t[[nodiscard]] std::vector<size_t> AligPhoneAttn(const std::string& LanguageStr, const std::vector<std::wstring>& PhoneSeq, size_t BertSize) const;\n\n\tstatic int64_t find_max_idx(const std::vector<float>& inp)\n\t{\n\t\tint64_t idx = 0;\n\t\tfor (size_t i = 1; i < inp.size(); ++i)\n\t\t\tif (inp[i] > inp[idx])\n\t\t\t\tidx = int64_t(i);\n\t\treturn idx;\n\t}\n\n\t~TextToSpeech() override = default;\n\n\ttemplate <typename T = float>\n\tvoid LinearCombination(std::vector<T>& _data, T Value = T(1.0)) const\n\t{\n\t\t_data.resize(SpeakerCount, 0.f);\n\t\tif (_data.empty())\n\t\t{\n\t\t\t_data = std::vector<T>(1, Value);\n\t\t\treturn;\n\t\t}\n\t\tT Sum = T(0.0);\n\t\tfor (const auto& i : _data)\n\t\t\tSum += i;\n\t\tif (Sum < T(0.0001))\n\t\t{\n\t\t\t_data = std::vector<T>(_data.size(), T(0.0));\n\t\t\t_data[0] = Value;\n\t\t\treturn;\n\t\t}\n\t\tSum *= T(Value);\n\t\tfor (auto& i : _data)\n\t\t\ti /= Sum;\n\t}\n\n\t[[nodiscard]] const MoeVSG2P::Tokenizer& GetTokenizer(const std::string& LanguageId) const\n\t{\n\t\treturn Tokenizers.at(LanguageTokenizerMap.at(LanguageId));\n\t}\n\n\t[[nodiscard]] static std::tuple<std::vector<std::wstring>, std::vector<int64_t>> SplitTonesFromTokens(const std::vector<std::wstring>& _Src, const std::vector<int64_t>& _ToneRef, int64_t FirstToneIdx, const std::string& LanguageSymbol);\n\nprotected:\n\tDurationCallback CustomDurationCallback;\n\tint64_t SpeakerCount = 1;\n\tstd::unordered_map<std::wstring, int64_t> SpeakerMap;\n\tstd::map<std::string, std::wstring> LanguageTokenizerMap;\n\tstd::map<std::string, int64_t> LanguageMap = { {\"ZH\", 0}, {\"JP\", 1}, {\"EN\", 2} };\n\tstd::map<std::string, int64_t> LanguageTones = { {\"ZH\", 0}, {\"JP\", 0}, {\"EN\", 0} };\n\tstd::map<std::wstring, MoeVSG2P::Tokenizer> Tokenizers;\n\tMoeVSG2P::MVSCleaner* Cleaner = nullptr;\n\tbool AddBlank = true;\n\tbool Emotion = false;\n\tstd::map<std::wstring, int64_t> Symbols;\n\tEmoLoader EmoLoader;\n\tMJson EmoJson;\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/header/Tacotron.hpp",
    "content": "#pragma once\n#include \"ModelBase.hpp\"\n\nINFERCLASSHEADER\n\nclass Tacotron2 : public TTS\n{\npublic:\n    Tacotron2(const MJson&, const callback&, const callback_params&, const DurationCallback&, Device _dev = Device::CPU);\n\n\t~Tacotron2() override;\n\n    std::vector<int16_t> Inference(std::wstring& _inputLens) const override;\n\n    [[nodiscard]] std::vector<int16_t> Inference(const MoeVSProject::TTSParams& _input) const override;\n\n    static void cat(std::vector<float>& tensorA, std::vector<int64>& Shape, const MTensor& tensorB) {\n        const int64 n = Shape[1];\n        for (int64 i = n; i > 0; --i)\n            tensorA.insert(tensorA.begin() + (i * Shape[2]), tensorB.GetTensorData<float>()[i - 1]);\n        ++Shape[2];\n    }\nprivate:\n    Ort::Session* sessionEncoder = nullptr;\n    Ort::Session* sessionDecoderIter = nullptr;\n    Ort::Session* sessionPostNet = nullptr;\n    Ort::Session* sessionGan = nullptr;\n\n    const std::vector<const char*> ganIn = { \"x\" };\n    const std::vector<const char*> ganOut = { \"audio\" };\n    const std::vector<const char*> inputNodeNamesSessionEncoder = { \"sequences\",\"sequence_lengths\" };\n    const std::vector<const char*> outputNodeNamesSessionEncoder = { \"memory\",\"processed_memory\",\"lens\" };\n    const std::vector<const char*> inputNodeNamesSessionDecoderIter = { \"decoder_input\",\"attention_hidden\",\"attention_cell\",\"decoder_hidden\",\"decoder_cell\",\"attention_weights\",\"attention_weights_cum\",\"attention_context\",\"memory\",\"processed_memory\",\"mask\" };\n    const std::vector<const char*> outputNodeNamesSessionDecoderIter = { \"decoder_output\",\"gate_prediction\",\"out_attention_hidden\",\"out_attention_cell\",\"out_decoder_hidden\",\"out_decoder_cell\",\"out_attention_weights\",\"out_attention_weights_cum\",\"out_attention_context\" };\n    const std::vector<const char*> inputNodeNamesSessionPostNet = { \"mel_outputs\" };\n    const std::vector<const char*> outputNodeNamesSessionPostNet = { \"mel_outputs_postnet\" };\n};\n\nINFERCLASSEND"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/header/Vits.hpp",
    "content": "﻿/**\n * FileName: Vits.hpp\n * Note: MoeVoiceStudioCore Vits模型类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2023-11-9 Create\n*/\n\n#pragma once\n#include \"TTS.hpp\"\n\nMoeVoiceStudioCoreHeader\n\nvoid SetBertEnabled(bool cond);\n\nvoid DestoryAllBerts();\n\nclass Vits : public TextToSpeech\n{\npublic:\n    Vits(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    Vits(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback, const std::vector<std::wstring>& _BertPaths,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    void load(const std::map<std::string, std::wstring>& _PathDict,\n        const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback, const std::vector<std::wstring>& _BertPaths = {});\n\n\t~Vits() override;\n\n    void destory()\n    {\n        delete sessionDec;\n        delete sessionSdp;\n        delete sessionDp;\n        delete sessionEnc_p;\n        delete sessionFlow;\n        delete sessionEmb;\n        sessionDec = nullptr;\n        sessionSdp = nullptr;\n        sessionEnc_p = nullptr;\n        sessionFlow = nullptr;\n        sessionEmb = nullptr;\n        sessionDp = nullptr;\n    }\n\n    [[nodiscard]] std::vector<std::vector<int16_t>> Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const override;\nprivate:\n    Ort::Session* sessionDec = nullptr;\n    Ort::Session* sessionSdp = nullptr;\n    Ort::Session* sessionDp = nullptr;\n    Ort::Session* sessionEnc_p = nullptr;\n    Ort::Session* sessionFlow = nullptr;\n    Ort::Session* sessionEmb = nullptr;\n    std::string VitsType;\n    bool UseTone = false;\n    bool UseBert = false;\n    bool UseLength = true;\n    bool UseLanguage = false;\n    bool EncoderG = false;\n    std::vector<std::string> BertNames;\n    std::vector<std::wstring> BertNamesIdx;\n    std::wstring ClapName;\n    int64_t VQCodeBookSize = 10;\n    bool UseVQ = false;\n    bool UseClap = false;\n\n    std::vector<const char*> EncoderInputNames = { \"x\" };\n    const std::vector<const char*> EncoderOutputNames = { \"xout\", \"m_p\", \"logs_p\", \"x_mask\" };\n\n    std::vector<const char*> SdpInputNames = { \"x\", \"x_mask\", \"zin\" };\n    const std::vector<const char*> SdpOutputNames = { \"logw\" };\n\n    std::vector<const char*> DpInputNames = { \"x\", \"x_mask\" };\n    const std::vector<const char*> DpOutputNames = { \"logw\" };\n\n\tstd::vector<const char*> FlowInputNames = { \"z_p\", \"y_mask\" };\n    const std::vector<const char*> FlowOutputNames = { \"z\" };\n\n    std::vector<const char*> DecInputNames = { \"z_in\" };\n    const std::vector<const char*> DecOutputNames = { \"o\" };\n\n    const std::vector<const char*> EmbiddingInputNames = { \"sid\" };\n    const std::vector<const char*> EmbiddingOutputNames = { \"g\" };\n\n    const std::vector<const char*> BertInputNames = { \"input_ids\", \"attention_mask\", \"token_type_ids\" };\n    const std::vector<const char*> BertInputNames2 = { \"input_ids\", \"attention_mask\" };\n    const std::vector<const char*> BertInputNames3 = { \"input_ids\" };\n    const std::vector<const char*> BertOutputNames = { \"last_hidden_state\" };\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/header/VitsSvc.hpp",
    "content": "﻿/**\n * FileName: VitsSvc.hpp\n * Note: MoeVoiceStudioCore Onnx Vits系Svc 模型定义\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"SVC.hpp\"\n#ifdef WIN32\n#ifdef MoeVSMui\n#include <queue>\n#include <Render/Sound/Mui_DirectSound.h>\n#include \"../../AvCodec/Recorder.h\"\n#endif\n#endif\n#include \"DiffSvc.hpp\"\n\nMoeVoiceStudioCoreHeader\n\nstruct ShallowDiffusionData\n{\n    std::vector<float> _16KAudio, CUDAF0, CUDAVolume;\n    std::vector<std::vector<float>> CUDASpeaker;\n    bool NeedPadding = false;\n};\n\nShallowDiffusionData& GetDataForShallowDiffusion();\n\nclass VitsSvc : public SingingVoiceConversion\n{\npublic:\n    VitsSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    VitsSvc(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    void load(\n        const std::map<std::string, std::wstring>& _PathDict,\n        const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        ExecutionProviders ExecutionProvider_,\n        unsigned DeviceID_, unsigned ThreadCount_,\n        bool MoeVoiceStudioFrontEnd = false\n    );\n\n\t~VitsSvc() override;\n\n    void Destory();\n\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\n        const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\n\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const override;\n\n\t[[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Paths, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n        const InferTools::SlicerSettings& _SlicerSettings) const override;\n\n    //[[nodiscard]] std::vector<Ort::Value> InferSliceTensor(const MoeVSProjectSpace::MoeVSAudioSlice& _Slice, size_t SliceIdx,\n    //    const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, std::vector<Ort::Value>& _Tensors,\n    //    std::vector<const char*>& SoVitsInput) const;\n\n    [[nodiscard]] std::vector<int16_t> InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\n\n    [[nodiscard]] std::vector<Ort::Value> MelExtractor(const float* PCMAudioBegin, const float* PCMAudioEnd) const = delete;\n\n#ifdef WIN32\n#ifdef MoeVSMui\n    void StartRT(Mui::Window::UIWindowBasic* window, const MoeVSProjectSpace::MoeVSSvcParams& _Params);\n    void EndRT();\n#endif\n#endif\nprivate:\n    Ort::Session* VitsSvcModel = nullptr;\n    std::wstring VitsSvcVersion = L\"SoVits4.0\";\n\n    const std::vector<const char*> soVitsOutput = { \"audio\" };\n    const std::vector<const char*> soVitsInput = { \"hidden_unit\", \"lengths\", \"pitch\", \"sid\" };\n    const std::vector<const char*> RVCInput = { \"phone\", \"phone_lengths\", \"pitch\", \"pitchf\", \"ds\", \"rnd\" };\n    const std::vector<const char*> StftOutput = { \"mel\" };\n    const std::vector<const char*> StftInput = { \"waveform\", \"aligment\"};\n\n#ifdef WIN32\n#ifdef MoeVSMui\n    bool RTSTAT = false;\n    std::deque<std::vector<int16_t>> inputBuffer, outputBuffer, rawInputBuffer, rawOutputBuffer;\n    MRecorder* recoder = nullptr;\n    Mui::Render::MDS_AudioPlayer* audio_player = nullptr;\n    Mui::Render::MAudioStream* audio_stream = nullptr;\n    size_t emptyLen = 30000;\n#endif\n#endif\n};\n\nMoeVoiceStudioCoreEnd\n"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/src/DiffSvc.cpp",
    "content": "﻿#include \"../header/DiffSvc.hpp\"\n#include <random>\n#include \"../../AvCodec/AvCodeResample.h\"\n#include <regex>\n#include \"../../InferTools/Sampler/MoeVSSamplerManager.hpp\"\n#include \"../../InferTools/F0Extractor/F0ExtractorManager.hpp\"\n#include \"../EnvManager.hpp\"\n\nMoeVoiceStudioCoreHeader\n\nOrt::Session* Vocoder = nullptr;\n\nvoid LoadVocoderModel(const std::wstring& VocoderPath)\n{\n\tVocoder = new Ort::Session(*moevsenv::GetGlobalMoeVSEnv().GetEnv(), VocoderPath.c_str(), *moevsenv::GetGlobalMoeVSEnv().GetSessionOptions());\n}\n\nvoid UnLoadVocoderModel()\n{\n\tdelete Vocoder;\n\tVocoder = nullptr;\n}\n\nbool VocoderEnabled()\n{\n\treturn Vocoder;\n}\n\nvoid DiffusionSvc::Destory()\n{\n\t//AudioEncoder\n\tdelete hubert;\n\thubert = nullptr;\n\n\t//DiffusionModel\n\tdelete encoder;      //Encoder\n\tencoder = nullptr;\n\tdelete denoise;      //WaveNet\n\tdenoise = nullptr;\n\tdelete pred;         //PndmNoisePredictor\n\tpred = nullptr;\n\tdelete after;        //AfterProcess\n\tafter = nullptr;\n\tdelete alpha;        //AlphasCumpord\n\talpha = nullptr;\n\tdelete naive;        //NaiveShallowDiffusion\n\tnaive = nullptr;\n\n\t//SingleDiffusionModel\n\tdelete diffSvc;\n\tdiffSvc = nullptr;\n}\n\nDiffusionSvc::~DiffusionSvc()\n{\n\tlogger.log(L\"[Info] unloading DiffSvc Models\");\n\tDestory();\n\tlogger.log(L\"[Info] DiffSvc Models unloaded\");\n}\n\nDiffusionSvc::DiffusionSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_):\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioDiffSingingVoiceConversion\");\n\n\t//Check Folder\n\tif (_Config[\"Folder\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"folder\\\" (Model Folder)\")\n\tif (!_Config[\"Folder\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Must Be String\")\n\tconst auto _folder = to_wide_string(_Config[\"Folder\"].GetString());\n\tif (_folder.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Can Not Be Empty\")\n\tconst std::wstring _path = GetCurrentFolder() + L\"/Models/\" + _folder + L\"/\" + _folder;\n\tconst auto cluster_folder = GetCurrentFolder() + L\"/Models/\" + _folder;\n\tif (_Config[\"Hubert\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Hubert\\\" (Hubert Folder)\")\n\tif (!_Config[\"Hubert\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Must Be String\")\n\tconst std::wstring HuPath = to_wide_string(_Config[\"Hubert\"].GetString());\n\tif (HuPath.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Can Not Be Empty\")\n\n\tif (_Config[\"Hifigan\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Hifigan\\\" (Hifigan Folder)\")\n\tif (!_Config[\"Hifigan\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hifigan\\\" (Hifigan Folder) Must Be String\")\n\tconst std::wstring HifiganPath = to_wide_string(_Config[\"Hifigan\"].GetString());\n\tif (HifiganPath.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hifigan\\\" (Hifigan Folder) Can Not Be Empty\")\n\n\tstd::map<std::string, std::wstring> _PathDict;\n\t_PathDict[\"Cluster\"] = cluster_folder;\n\t_PathDict[\"DiffHubert\"] = GetCurrentFolder() + L\"/hubert/\" + HuPath + L\".onnx\";\n\t_PathDict[\"DiffHifigan\"] = GetCurrentFolder() + L\"/hifigan/\" + HifiganPath + L\".onnx\";\n\tif(_waccess((_path + L\"_encoder.onnx\").c_str(), 0) != -1)\n\t{\n\t\t_PathDict[\"Encoder\"] = _path + L\"_encoder.onnx\";\n\t\t_PathDict[\"DenoiseFn\"] = _path + L\"_denoise.onnx\";\n\t\t_PathDict[\"NoisePredictor\"] = _path + L\"_pred.onnx\";\n\t\t_PathDict[\"AfterProcess\"] = _path + L\"_after.onnx\";\n\t\tif (_waccess((_path + L\"_alpha.onnx\").c_str(), 0) != -1)\n\t\t\t_PathDict[\"Alphas\"] = _path + L\"_alpha.onnx\";\n\t}\n\telse\n\t\t_PathDict[\"DiffSvc\"] = _path + L\"_DiffSvc.onnx\";\n\t\n\tif (_waccess((_path + L\"_naive.onnx\").c_str(), 0) != -1)\n\t\t_PathDict[\"Naive\"] = _path + L\"_naive.onnx\";\n\n\tload(_PathDict, _Config, _ProgressCallback);\n}\n\nDiffusionSvc::DiffusionSvc(const std::map<std::string, std::wstring>& _PathDict,\n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) :\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioDiffSingingVoiceConversion\");\n\n\tload(_PathDict, _Config, _ProgressCallback);\n}\n\nvoid DiffusionSvc::load(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback)\n{\n\t//Check SamplingRate\n\tif (_Config[\"Rate\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Rate\\\" (SamplingRate)\")\n\tif (_Config[\"Rate\"].IsInt() || _Config[\"Rate\"].IsInt64())\n\t\t_samplingRate = _Config[\"Rate\"].GetInt();\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Rate\\\" (SamplingRate) Must Be Int/Int64\")\n\n\tlogger.log(L\"[Info] Current Sampling Rate is\" + std::to_wstring(_samplingRate));\n\n\tif (_Config[\"MelBins\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"MelBins\\\" (MelBins)\")\n\tif (_Config[\"MelBins\"].IsInt() || _Config[\"MelBins\"].IsInt64())\n\t\tmelBins = _Config[\"MelBins\"].GetInt();\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"MelBins\\\" (MelBins) Must Be Int/Int64\")\n\n\tif (!(_Config[\"Hop\"].IsInt() || _Config[\"Hop\"].IsInt64()))\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must Be Int\")\n\tHopSize = _Config[\"Hop\"].GetInt();\n\n\tif (HopSize < 1)\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must > 0\")\n\n\tif (!(_Config[\"HiddenSize\"].IsInt() || _Config[\"HiddenSize\"].IsInt64()))\n\t\tlogger.log(L\"[Warn] Missing Field \\\"HiddenSize\\\", Use Default Value (256)\");\n\telse\n\t\tHiddenUnitKDims = _Config[\"HiddenSize\"].GetInt();\n\n\tif (_Config[\"Characters\"].IsArray())\n\t\tSpeakerCount = (int64_t)_Config[\"Characters\"].Size();\n\n\tif (_Config[\"Volume\"].IsBool())\n\t\tEnableVolume = _Config[\"Volume\"].GetBool();\n\telse\n\t\tlogger.log(L\"[Warn] Missing Field \\\"Volume\\\", Use Default Value (False)\");\n\n\tif (!_Config[\"CharaMix\"].IsBool())\n\t\tlogger.log(L\"[Warn] Missing Field \\\"CharaMix\\\", Use Default Value (False)\");\n\telse\n\t\tEnableCharaMix = _Config[\"CharaMix\"].GetBool();\n\n\tif (!_Config[\"Diffusion\"].IsBool())\n\t\tlogger.log(L\"[Warn] Missing Field \\\"Diffusion\\\", Use Default Value (False)\");\n\telse if (_Config[\"Diffusion\"].GetBool())\n\t\tDiffSvcVersion = L\"DiffusionSvc\";\n\n\tif (_Config[\"Pndm\"].IsInt())\n\t\tPndms = _Config[\"Pndm\"].GetInt();\n\n\tif (_Config.HasMember(\"SpecMax\") && _Config[\"SpecMax\"].IsDouble())\n\t\tSpecMax = _Config[\"SpecMax\"].GetFloat();\n\telse\n\t\tlogger.log(L\"[Warn] Missing Field \\\"SpecMax\\\", Use Default Value (2)\");\n\n\tif (_Config.HasMember(\"SpecMin\") && _Config[\"SpecMin\"].IsDouble())\n\t\tSpecMin = _Config[\"SpecMin\"].GetFloat();\n\telse\n\t\tlogger.log(L\"[Warn] Missing Field \\\"SpecMin\\\", Use Default Value (-12)\");\n\n\t_callback = _ProgressCallback;\n\n\tif (_Config[\"Cluster\"].IsString())\n\t{\n\t\tconst auto clus = to_wide_string(_Config[\"Cluster\"].GetString());\n\t\tif (!(_Config[\"KMeansLength\"].IsInt() || _Config[\"KMeansLength\"].IsInt64()))\n\t\t\tlogger.log(L\"[Warn] Missing Field \\\"KMeansLength\\\", Use Default Value (10000)\");\n\t\telse\n\t\t\tClusterCenterSize = _Config[\"KMeansLength\"].GetInt();\n\t\ttry\n\t\t{\n\t\t\tCluster = MoeVoiceStudioCluster::GetMoeVSCluster(clus, _PathDict.at(\"Cluster\"), HiddenUnitKDims, ClusterCenterSize);\n\t\t\tEnableCluster = true;\n\t\t}\n\t\tcatch (std::exception& e)\n\t\t{\n\t\t\tlogger.error(e.what());\n\t\t\tEnableCluster = false;\n\t\t}\n\t}\n\n\t//LoadModels\n\ttry\n\t{\n\t\tlogger.log(L\"[Info] loading DiffSvc Models\");\n\t\thubert = new Ort::Session(*env, _PathDict.at(\"DiffHubert\").c_str(), *session_options);\n\t\tif (_PathDict.find(\"Encoder\")!= _PathDict.end() && _waccess(_PathDict.at(\"Encoder\").c_str(), 0) != -1)\n\t\t{\n\t\t\tencoder = new Ort::Session(*env, _PathDict.at(\"Encoder\").c_str(), *session_options);\n\t\t\tdenoise = new Ort::Session(*env, _PathDict.at(\"DenoiseFn\").c_str(), *session_options);\n\t\t\tpred = new Ort::Session(*env, _PathDict.at(\"NoisePredictor\").c_str(), *session_options);\n\t\t\tafter = new Ort::Session(*env, _PathDict.at(\"AfterProcess\").c_str(), *session_options);\n\t\t\tif (_PathDict.find(\"Alphas\") != _PathDict.end() && _waccess(_PathDict.at(\"Alphas\").c_str(), 0) != -1)\n\t\t\t\talpha = new Ort::Session(*env, _PathDict.at(\"Alphas\").c_str(), *session_options);\n\t\t}\n\t\telse\n\t\t\tdiffSvc = new Ort::Session(*env, _PathDict.at(\"DiffSvc\").c_str(), *session_options);\n\n\t\tif (_PathDict.find(\"Naive\") != _PathDict.end() && _waccess(_PathDict.at(\"Naive\").c_str(), 0) != -1)\n\t\t\tnaive = new Ort::Session(*env, _PathDict.at(\"Naive\").c_str(), *session_options);\n\n\t\tlogger.log(L\"[Info] DiffSvc Models loaded\");\n\t}\n\tcatch (Ort::Exception& _exception)\n\t{\n\t\tDestory();\n\t\tLibDLVoiceCodecThrow(_exception.what())\n\t}\n\n\tif (_Config[\"TensorExtractor\"].IsString())\n\t\tDiffSvcVersion = to_wide_string(_Config[\"TensorExtractor\"].GetString());\n\n\tif (_Config[\"MaxStep\"].IsInt())\n\t\tMaxStep = _Config[\"MaxStep\"].GetInt();\n\n\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others _others_param;\n\t_others_param.Memory = *memory_info;\n\n\ttry\n\t{\n\t\t_TensorExtractor = GetTensorExtractor(DiffSvcVersion, 48000, _samplingRate, HopSize, EnableCharaMix, EnableVolume, HiddenUnitKDims, SpeakerCount, _others_param);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tDestory();\n\t\tLibDLVoiceCodecThrow(e.what())\n\t}\n}\n\nstd::vector<int16_t> DiffusionSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Start!\");\n\tstd::vector<int16_t> _data;\n\tsize_t total_audio_size = 0;\n\tfor (const auto& data_size : _Slice.Slices)\n\t\ttotal_audio_size += data_size.OrgLen;\n\t_data.reserve(size_t(double(total_audio_size) * 1.5));\n\n\tauto speedup = (int64_t)_InferParams.Pndm;\n\tauto step = (int64_t)_InferParams.Step;\n\n\tif (step > MaxStep) step = MaxStep;\n\tif (speedup >= step) speedup = step / 5;\n\tif (speedup == 0) speedup = 1;\n\tconst auto RealDiffSteps = step % speedup ? step / speedup + 1 : step / speedup;\n\tif (diffSvc)\n\t\t_callback(0, _Slice.Slices.size());\n\telse\n\t\t_callback(0, _Slice.Slices.size() * RealDiffSteps);\n\tsize_t process = 0;\n\tfor (const auto& CurSlice : _Slice.Slices)\n\t{\n\t\tconst auto InferDurTime = clock();\n\t\tconst auto CurRtn = SliceInference(CurSlice, _InferParams, process);\n\t\t_data.insert(_data.end(), CurRtn.data(), CurRtn.data() + CurRtn.size());\n\t\tif (CurSlice.IsNotMute)\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Segment[\" + std::to_wstring(process) + L\"] Finished! Segment Use Time: \" + std::to_wstring(clock() - InferDurTime) + L\"ms, Segment Duration: \" + std::to_wstring((size_t)CurSlice.OrgLen * 1000ull / 48000ull) + L\"ms\");\n\t\telse\n\t\t{\n\t\t\tif (!diffSvc)\n\t\t\t{\n\t\t\t\tprocess += RealDiffSteps;\n\t\t\t\t_callback(process, _Slice.Slices.size() * RealDiffSteps);\n\t\t\t}\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Jump Empty Segment[\" + std::to_wstring(process) + L\"]!\");\n\t\t}\n\t\tif (diffSvc)\n\t\t\t_callback(++process, _Slice.Slices.size());\n\t}\n\n\tlogger.log(L\"[Inferring] \\\"\" + _Slice.Path + L\"\\\" Finished\");\n\treturn _data;\n}\n\nstd::vector<int16_t> DiffusionSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const\n{\n\tstd::mt19937 gen(int(_InferParams.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\tauto speedup = (int64_t)_InferParams.Pndm;\n\tauto step = (int64_t)_InferParams.Step;\n\tif (step > MaxStep) step = MaxStep;\n\tif (speedup >= step) speedup = step / 5;\n\tif (speedup == 0) speedup = 1;\n\n\tif (_Slice.IsNotMute)\n\t{\n\t\tauto RawWav = InferTools::InterpResample(_Slice.Audio, 48000, 16000, 32768.0f);\n\t\tconst auto src_audio_length = RawWav.size();\n\t\tbool NeedPadding = false;\n\t\tif (_cur_execution_provider == ExecutionProviders::CUDA && !diffSvc)\n\t\t{\n\t\t\tNeedPadding = RawWav.size() % 16000;\n\t\t\tconst size_t WavPaddedSize = RawWav.size() / 16000 + 1;\n\t\t\tif (NeedPadding)\n\t\t\t\tRawWav.resize(WavPaddedSize * 16000, 0.f);\n\t\t}\n\n\t\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)RawWav.size() };\n\t\tstd::vector<Ort::Value> HubertInputTensors, HubertOutPuts;\n\t\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RawWav.data(), RawWav.size(), HubertInputShape, 3));\n\t\ttry {\n\t\t\tHubertOutPuts = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\thubertInput.data(),\n\t\t\t\tHubertInputTensors.data(),\n\t\t\t\tHubertInputTensors.size(),\n\t\t\t\thubertOutput.data(),\n\t\t\t\thubertOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\n\t\t}\n\t\tconst auto HubertSize = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\tconst auto HubertOutPutData = HubertOutPuts[0].GetTensorMutableData<float>();\n\t\tauto HubertOutPutShape = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tHubertInputTensors.clear();\n\t\tif (HubertOutPutShape[2] != HiddenUnitKDims)\n\t\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\n\n\t\tstd::vector srcHiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\t\tif (SpeakerIdx >= SpeakerCount)\n\t\t\tSpeakerIdx = SpeakerCount;\n\t\tif (SpeakerIdx < 0)\n\t\t\tSpeakerIdx = 0;\n\n\t\tconst auto max_cluster_size = int64_t((size_t)HubertOutPutShape[1] * src_audio_length / RawWav.size());\n\t\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\n\t\t{\n\t\t\tconst auto pts = Cluster->find(srcHiddenUnits.data(), long(SpeakerIdx), max_cluster_size);\n\t\t\tfor (int64_t indexs = 0; indexs < max_cluster_size * HiddenUnitKDims; ++indexs)\n\t\t\t\tsrcHiddenUnits[indexs] = srcHiddenUnits[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\n\t\t}\n\t\tstd::vector<Ort::Value> finaOut;\n\t\tstd::vector<Ort::Value> DiffOut;\n\t\tif (diffSvc)\n\t\t{\n\t\t\tconst auto HubertLen = int64_t(HubertSize) / HiddenUnitKDims;\n\t\t\tconst int64_t F0Shape[] = { 1, int64_t(_Slice.Audio.size() * _samplingRate / 48000 / HopSize) };\n\t\t\tconst int64_t HiddenUnitShape[] = { 1, HubertLen, HiddenUnitKDims };\n\t\t\tconstexpr int64_t CharaEmbShape[] = { 1 };\n\t\t\tint64_t speedData[] = { Pndms };\n\t\t\tauto srcF0Data = InferTools::InterpFunc(_Slice.F0, long(_Slice.F0.size()), long(F0Shape[1]));\n\t\t\tfor (auto& it : srcF0Data)\n\t\t\t\tit *= (float)pow(2.0, static_cast<double>(_InferParams.Keys) / 12.0);\n\t\t\tauto InterpedF0 = MoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::GetInterpedF0log(srcF0Data, true);\n\t\t\tauto alignment = MoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::GetAligments(F0Shape[1], HubertLen);\n\t\t\tstd::vector<Ort::Value> TensorsInp;\n\n\t\t\tint64_t Chara[] = { SpeakerIdx };\n\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor(*memory_info, srcHiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor(*memory_info, alignment.data(), F0Shape[1], F0Shape, 2));\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Chara, 1, CharaEmbShape, 1));\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), F0Shape[1], F0Shape, 2));\n\n\t\t\tstd::vector<float> initial_noise(melBins * F0Shape[1], 0.0);\n\t\t\tlong long noise_shape[4] = { 1,1,melBins,F0Shape[1] };\n\t\t\tif (!naive)\n\t\t\t{\n\t\t\t\tfor (auto& it : initial_noise)\n\t\t\t\t\tit = normal(gen) * _InferParams.NoiseScale;\n\t\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));\n\t\t\t}\n\t\t\telse\n\t\t\t\tMoeVSNotImplementedError\n\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, speedData, 1, CharaEmbShape, 1));\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDiffOut = diffSvc->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tDiffInput.data(),\n\t\t\t\t\tTensorsInp.data(),\n\t\t\t\t\tTensorsInp.size(),\n\t\t\t\t\tDiffOutput.data(),\n\t\t\t\t\tDiffOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e2)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Diff\\n\") + e2.what()))\n\t\t\t}\n\t\t\ttry\n\t\t\t{\n\t\t\t\tfinaOut = Vocoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tnsfInput.data(),\n\t\t\t\t\tDiffOut.data(),\n\t\t\t\t\tDiffOut.size(),\n\t\t\t\t\tnsfOutput.data(),\n\t\t\t\t\tnsfOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e3)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::InferParams _Inference_Params;\n\t\t\t_Inference_Params.AudioSize = _Slice.Audio.size();\n\t\t\t_Inference_Params.Chara = SpeakerIdx;\n\t\t\t_Inference_Params.NoiseScale = _InferParams.NoiseScale;\n\t\t\t_Inference_Params.DDSPNoiseScale = _InferParams.DDSPNoiseScale;\n\t\t\t_Inference_Params.Seed = int(_InferParams.Seed);\n\t\t\t_Inference_Params.upKeys = _InferParams.Keys;\n\n\t\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Inputs InputTensors;\n\n\t\t\tif (_cur_execution_provider == ExecutionProviders::CUDA && NeedPadding)\n\t\t\t{\n\t\t\t\tauto CUDAF0 = _Slice.F0;\n\t\t\t\tauto CUDAVolume = _Slice.Volume;\n\t\t\t\tauto CUDASpeaker = _Slice.Speaker;\n\t\t\t\tconst auto src_src_audio_length = _Slice.Audio.size();\n\t\t\t\tconst size_t WavPaddedSize = ((src_src_audio_length / 48000) + 1) * 48000;\n\t\t\t\tconst size_t AudioPadSize = WavPaddedSize - src_src_audio_length;\n\t\t\t\tconst size_t PaddedF0Size = CUDAF0.size() + (CUDAF0.size() * AudioPadSize / src_src_audio_length);\n\n\t\t\t\tif (!CUDAF0.empty()) CUDAF0.resize(PaddedF0Size, 0.f);\n\t\t\t\tif (!CUDAVolume.empty()) CUDAVolume.resize(PaddedF0Size, 0.f);\n\t\t\t\tfor (auto iSpeaker : CUDASpeaker)\n\t\t\t\t{\n\t\t\t\t\tif (!iSpeaker.empty())\n\t\t\t\t\t\tiSpeaker.resize(PaddedF0Size, 0.f);\n\t\t\t\t}\n\t\t\t\t_Inference_Params.AudioSize = WavPaddedSize;\n\t\t\t\tInputTensors = _TensorExtractor->Extract(srcHiddenUnits, CUDAF0, CUDAVolume, CUDASpeaker, _Inference_Params);\n\t\t\t}\n\t\t\telse\n\t\t\t\tInputTensors = _TensorExtractor->Extract(srcHiddenUnits, _Slice.F0, _Slice.Volume, _Slice.Speaker, _Inference_Params);\n\n\t\t\tstd::vector<Ort::Value> EncoderOut;\n\t\t\ttry {\n\t\t\t\tEncoderOut = encoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tInputTensors.InputNames,\n\t\t\t\t\tInputTensors.Tensor.data(),\n\t\t\t\t\tmin(InputTensors.Tensor.size(), encoder->GetInputCount()),\n\t\t\t\t\tInputTensors.OutputNames,\n\t\t\t\t\tInputTensors.OutputCount);\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: encoder\\n\") + e1.what()))\n\t\t\t}\n\t\t\tif (EncoderOut.size() == 1)\n\t\t\t\tEncoderOut.emplace_back(Ort::Value::CreateTensor(*memory_info, InputTensors.Data.F0.data(), InputTensors.Data.FrameShape[1], InputTensors.Data.FrameShape.data(), 2));\n\n\t\t\tstd::vector<Ort::Value> DenoiseInTensors;\n\t\t\tDenoiseInTensors.emplace_back(std::move(EncoderOut[0]));\n\n\t\t\tstd::vector<float> initial_noise(melBins * InputTensors.Data.FrameShape[1], 0.0);\n\t\t\tlong long noise_shape[4] = { 1,1,melBins,InputTensors.Data.FrameShape[1] };\n\t\t\tif (!naive)\n\t\t\t{\n\t\t\t\tfor (auto& it : initial_noise)\n\t\t\t\t\tit = normal(gen) * _InferParams.NoiseScale;\n\t\t\t\tDenoiseInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstd::vector<Ort::Value> NaiveOut;\n\t\t\t\ttry {\n\t\t\t\t\tNaiveOut = naive->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\tInputTensors.InputNames,\n\t\t\t\t\t\tInputTensors.Tensor.data(),\n\t\t\t\t\t\tmin(InputTensors.Tensor.size(), naive->GetInputCount()),\n\t\t\t\t\t\tnaiveOutput.data(),\n\t\t\t\t\t\t1);\n\t\t\t\t}\n\t\t\t\tcatch (Ort::Exception& e1)\n\t\t\t\t{\n\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: naive\\n\") + e1.what()))\n\t\t\t\t}\n\t\t\t\tDenoiseInTensors.emplace_back(std::move(NaiveOut[0]));\n\t\t\t}\n\n\t\t\tauto PredOut = MoeVSSampler::GetMoeVSSampler((!alpha ? L\"Pndm\" : _InferParams.Sampler), alpha, denoise, pred, melBins, _callback, memory_info)->Sample(DenoiseInTensors, step, speedup, _InferParams.NoiseScale, _InferParams.Seed, _Process);\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDiffOut = after->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tafterInput.data(),\n\t\t\t\t\tPredOut.data(),\n\t\t\t\t\tPredOut.size(),\n\t\t\t\t\tafterOutput.data(),\n\t\t\t\t\tafterOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()))\n\t\t\t}\n\n\t\t\tDiffOut.emplace_back(std::move(EncoderOut[1]));\n\t\t\ttry\n\t\t\t{\n\t\t\t\tfinaOut = Vocoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tnsfInput.data(),\n\t\t\t\t\tDiffOut.data(),\n\t\t\t\t\tDiffOut.size(),\n\t\t\t\t\tnsfOutput.data(),\n\t\t\t\t\tnsfOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e3)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\n\t\t\t}\n\t\t}\n\t\tconst auto shapeOut = finaOut[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tconst auto dstWavLen = (_Slice.OrgLen * int64_t(_samplingRate)) / 48000;\n\t\tstd::vector<int16_t> TempVecWav(dstWavLen, 0);\n\t\tif (shapeOut[2] < dstWavLen)\n\t\t\tfor (int64_t bbb = 0; bbb < shapeOut[2]; bbb++)\n\t\t\t\tTempVecWav[bbb] = static_cast<int16_t>(Clamp(finaOut[0].GetTensorData<float>()[bbb]) * 32766.f);\n\t\telse\n\t\t\tfor (int64_t bbb = 0; bbb < dstWavLen; bbb++)\n\t\t\t\tTempVecWav[bbb] = static_cast<int16_t>(Clamp(finaOut[0].GetTensorData<float>()[bbb]) * 32766.f);\n\t\treturn TempVecWav;\n\t}\n\tconst auto len = size_t(_Slice.OrgLen * int64_t(_samplingRate) / 48000);\n\treturn { len, 0i16, std::allocator<int16_t>() };\n}\n\nstd::vector<std::wstring> DiffusionSvc::Inference(std::wstring& _Paths,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\n{\n\tstd::vector<std::wstring> _Lens = GetOpenFileNameMoeVS();\n\tstd::vector<std::wstring> AudioFolders;\n\tfor (auto& path : _Lens)\n\t{\n\t\tpath = std::regex_replace(path, std::wregex(L\"\\\\\\\\\"), L\"/\");\n\t\tauto PCMData = AudioPreprocess().codec(path, 48000);\n\t\tauto SlicePos = SliceAudio(PCMData, _SlicerSettings);\n\t\tauto Audio = GetAudioSlice(PCMData, SlicePos, _SlicerSettings);\n\t\tAudio.Path = path;\n\t\tPreProcessAudio(Audio);\n\t\tstd::vector<int16_t> _data = SliceInference(Audio, _InferParams);\n\n\t\tstd::wstring OutFolder = GetCurrentFolder() + L\"/Outputs/\" + path.substr(path.rfind(L'/') + 1, path.rfind(L'.') - path.rfind(L'/') - 1);\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\t\tif (SpeakerIdx >= SpeakerCount)\n\t\t\tSpeakerIdx = SpeakerCount;\n\t\tif (SpeakerIdx < 0)\n\t\t\tSpeakerIdx = 0;\n\t\tOutFolder += L\"-Params-(-NoiseScale=\" +\n\t\t\tstd::to_wstring(_InferParams.NoiseScale) +\n\t\t\tL\"-Speaker=\" +\n\t\t\t(EnableCharaMix ? std::wstring(L\"SpeakerMix\") : std::to_wstring(SpeakerIdx)) +\n\t\t\tL\"-Seed=\" +\n\t\t\tstd::to_wstring(_InferParams.Seed) +\n\t\t\tL\"-Sampler=\" +\n\t\t\t_InferParams.Sampler +\n\t\t\tL\"-F0Method=\" +\n\t\t\t_InferParams.F0Method + L\")\";\n\t\tif (_waccess((OutFolder + L\".wav\").c_str(), 0) != -1)\n\t\t{\n\t\t\tfor (size_t idx = 0; idx < 99999999; ++idx)\n\t\t\t\tif (_waccess((OutFolder + L\" (\" + std::to_wstring(idx) + L\").wav\").c_str(), 0) == -1)\n\t\t\t\t{\n\t\t\t\t\tOutFolder += L\" (\" + std::to_wstring(idx) + L\").wav\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\t\telse\n\t\t\tOutFolder += L\".wav\";\n\t\tAudioFolders.emplace_back(OutFolder);\n\t\tInferTools::Wav::WritePCMData(_samplingRate, 1, _data, OutFolder);\n\t}\n\treturn AudioFolders;\n}\n\nstd::vector<int16_t> DiffusionSvc::InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\tif (diffSvc || DiffSvcVersion != L\"DiffusionSvc\")\n\t\treturn PCMData;\n\n\tauto hubertin = InferTools::InterpResample<float>(PCMData, srcSr, 16000);\n\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\tif (SpeakerIdx >= SpeakerCount)\n\t\tSpeakerIdx = SpeakerCount;\n\tif (SpeakerIdx < 0)\n\t\tSpeakerIdx = 0;\n\tstd::mt19937 gen(int(_InferParams.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\n\tconst int64_t inputShape[3] = { 1i64,1i64,(int64_t)hubertin.size() };\n\tstd::vector<Ort::Value> inputTensorshu;\n\tinputTensorshu.emplace_back(Ort::Value::CreateTensor(*memory_info, hubertin.data(), hubertin.size(), inputShape, 3));\n\tstd::vector<Ort::Value> hubertOut;\n\n\tconst auto RealDiffSteps = _InferParams.Step % _InferParams.Pndm ? _InferParams.Step / _InferParams.Pndm + 1 : _InferParams.Step / _InferParams.Pndm;\n\t_callback(0, RealDiffSteps);\n\n\ttry {\n\t\thubertOut = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\thubertInput.data(),\n\t\t\tinputTensorshu.data(),\n\t\t\tinputTensorshu.size(),\n\t\t\thubertOutput.data(),\n\t\t\thubertOutput.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\n\t}\n\tconst auto HubertSize = hubertOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tconst auto HubertOutPutData = hubertOut[0].GetTensorMutableData<float>();\n\tconst auto HubertOutPutShape = hubertOut[0].GetTensorTypeAndShapeInfo().GetShape();\n\tinputTensorshu.clear();\n\tif (HubertOutPutShape[2] != HiddenUnitKDims)\n\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\n\n\tstd::vector HiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\n\n\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\n\t{\n\t\tconst auto clus_size = HubertOutPutShape[1];\n\t\tconst auto pts = Cluster->find(HiddenUnits.data(), long(SpeakerIdx), clus_size);\n\t\tfor (size_t indexs = 0; indexs < HiddenUnits.size(); ++indexs)\n\t\t\tHiddenUnits[indexs] = HiddenUnits[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\n\t}\n\n\tconst auto HubertLen = int64_t(HubertSize) / HiddenUnitKDims;\n\tconst int64_t F0Shape[] = { 1, int64_t(PCMData.size() / HopSize) };\n\tconst int64_t HiddenUnitShape[] = { 1, HubertLen, HiddenUnitKDims };\n\tconstexpr int64_t CharaEmbShape[] = { 1 };\n\tconst int64_t CharaMixShape[] = { F0Shape[1], SpeakerCount };\n\n\tconst auto F0Extractor = MoeVSF0Extractor::GetF0Extractor(_InferParams.F0Method, _samplingRate, HopSize);\n\tauto F0Data = F0Extractor->ExtractF0(PCMData, PCMData.size() / HopSize);\n\tfor (auto& ifo : F0Data)\n\t\tifo *= (float)pow(2.0, static_cast<double>(_InferParams.Keys) / 12.0);\n\tF0Data = _TensorExtractor->GetInterpedF0(InferTools::InterpFunc(F0Data, long(F0Data.size()), long(F0Shape[1])));\n\tstd::vector<int64_t> Alignment = _TensorExtractor->GetAligments(F0Shape[1], HubertLen);\n\tint64_t CharaEmb[] = { SpeakerIdx };\n\n\tstd::vector<Ort::Value> EncoderTensors;\n\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tHiddenUnits.data(),\n\t\tHubertSize,\n\t\tHiddenUnitShape,\n\t\t3\n\t));\n\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tAlignment.data(),\n\t\tF0Shape[1],\n\t\tF0Shape,\n\t\t2\n\t));\n\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tF0Data.data(),\n\t\tF0Shape[1],\n\t\tF0Shape,\n\t\t2\n\t));\n\n\tstd::vector<const char*> InputNamesEncoder;\n\tstd::vector<float> Volume, SpkMap;\n\n\tif (EnableVolume)\n\t{\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"volume\", \"spk_mix\" };\n\t\tVolume = ExtractVolume(PCMData, HopSize);\n\t\tif (abs(int64_t(Volume.size()) - int64_t(F0Data.size())) > 3)\n\t\t\tVolume = InferTools::InterpFunc(ExtractVolume(PCMData, HopSize), long(Volume.size()), long(F0Shape[1]));\n\t\telse\n\t\t\tVolume.resize(F0Data.size(), 0.f);\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tVolume.data(),\n\t\t\tF0Shape[1],\n\t\t\tF0Shape,\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"spk_mix\" };\n\n\tif (EnableCharaMix)\n\t{\n\t\tSpkMap = _TensorExtractor->GetCurrectSpkMixData(std::vector<std::vector<float>>(), F0Shape[1], SpeakerIdx);\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tSpkMap.data(),\n\t\t\tSpkMap.size(),\n\t\t\tCharaMixShape,\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t{\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tCharaEmb,\n\t\t\t1,\n\t\t\tCharaEmbShape,\n\t\t\t1\n\t\t));\n\t}\n\n\tconst std::vector OutputNamesEncoder = { \"mel_pred\" };\n\n\tstd::vector<Ort::Value> EncoderOut;\n\ttry {\n\t\tEncoderOut = encoder->Run(Ort::RunOptions{ nullptr },\n\t\t\tInputNamesEncoder.data(),\n\t\t\tEncoderTensors.data(),\n\t\t\tmin(EncoderTensors.size(), encoder->GetInputCount()),\n\t\t\tOutputNamesEncoder.data(),\n\t\t\t1);\n\t}\n\tcatch (Ort::Exception& e1)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: encoder\\n\") + e1.what()))\n\t}\n\tEncoderOut.emplace_back(Ort::Value::CreateTensor(*memory_info, F0Data.data(), F0Shape[1], F0Shape, 2));\n\n\tstd::vector<Ort::Value> DenoiseInTensors;\n\tDenoiseInTensors.emplace_back(std::move(EncoderOut[0]));\n\n\tstd::vector<float> initial_noise(melBins * F0Shape[1], 0.0);\n\tlong long noise_shape[4] = { 1,1,melBins,F0Shape[1] };\n\tif (!naive)\n\t{\n\t\tfor (auto& it : initial_noise)\n\t\t\tit = normal(gen) * _InferParams.NoiseScale;\n\t\tDenoiseInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));\n\t}\n\telse\n\t{\n\t\tstd::vector<Ort::Value> NaiveOut;\n\t\ttry {\n\t\t\tNaiveOut = naive->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tInputNamesEncoder.data(),\n\t\t\t\tEncoderTensors.data(),\n\t\t\t\tmin(EncoderTensors.size(), naive->GetInputCount()),\n\t\t\t\tnaiveOutput.data(),\n\t\t\t\t1);\n\t\t}\n\t\tcatch (Ort::Exception& e1)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: naive\\n\") + e1.what()))\n\t\t}\n\t\tDenoiseInTensors.emplace_back(std::move(NaiveOut[0]));\n\t}\n\n\tsize_t process = 0;\n\n\tauto PredOut = MoeVSSampler::GetMoeVSSampler((!alpha ? L\"Pndm\" : _InferParams.Sampler), alpha, denoise, pred, melBins, _callback, memory_info)->Sample(DenoiseInTensors, (int64_t)_InferParams.Step, (int64_t)_InferParams.Pndm, _InferParams.NoiseScale, _InferParams.Seed, process);\n\n\tstd::vector<Ort::Value> DiffOut, finaOut;\n\n\ttry\n\t{\n\t\tDiffOut = after->Run(Ort::RunOptions{ nullptr },\n\t\t\tafterInput.data(),\n\t\t\tPredOut.data(),\n\t\t\tPredOut.size(),\n\t\t\tafterOutput.data(),\n\t\t\tafterOutput.size());\n\t}\n\tcatch (Ort::Exception& e1)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()))\n\t}\n\n\tDiffOut.emplace_back(std::move(EncoderOut[1]));\n\ttry\n\t{\n\t\tfinaOut = Vocoder->Run(Ort::RunOptions{ nullptr },\n\t\t\tnsfInput.data(),\n\t\t\tDiffOut.data(),\n\t\t\tDiffOut.size(),\n\t\t\tnsfOutput.data(),\n\t\t\tnsfOutput.size());\n\t}\n\tcatch (Ort::Exception& e3)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\n\t}\n\n\tconst auto dstWavLen = finaOut[0].GetTensorTypeAndShapeInfo().GetShape()[2];\n\tstd::vector<int16_t> TempVecWav(dstWavLen, 0);\n\tfor (int64_t bbb = 0; bbb < dstWavLen; bbb++)\n\t\tTempVecWav[bbb] = static_cast<int16_t>(Clamp(finaOut[0].GetTensorData<float>()[bbb]) * 32766.0f);\n\treturn TempVecWav;\n}\n\nvoid DiffusionSvc::NormMel(std::vector<float>& MelSpec) const\n{\n\tfor (auto& it : MelSpec)\n\t\tit = (it - SpecMin) / (SpecMax - SpecMin) * 2 - 1;\n}\n\nstd::vector<int16_t> DiffusionSvc::ShallowDiffusionInference(\n\tstd::vector<float>& _16KAudioHubert,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\tstd::pair<std::vector<float>, int64_t>& _Mel,\n\tconst std::vector<float>& _SrcF0,\n\tconst std::vector<float>& _SrcVolume,\n\tconst std::vector<std::vector<float>>& _SrcSpeakerMap,\n\tsize_t& Process,\n\tint64_t SrcSize\n) const\n{\n\tif (diffSvc || DiffSvcVersion != L\"DiffusionSvc\")\n\t\tLibDLVoiceCodecThrow(\"ShallowDiffusion Only Support DiffusionSvc Model\")\n\tstd::vector<const char*> InputNamesEncoder;\n\tconst auto _Mel_Size = _Mel.second;\n\n\tstd::vector<Ort::Value> HubertInputTensors, HubertOutputTensors;\n\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)_16KAudioHubert.size() };\n\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, _16KAudioHubert.data(), _16KAudioHubert.size(), HubertInputShape, 3));\n\ttry {\n\t\tHubertOutputTensors = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\thubertInput.data(),\n\t\t\tHubertInputTensors.data(),\n\t\t\tHubertInputTensors.size(),\n\t\t\thubertOutput.data(),\n\t\t\thubertOutput.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\n\t}\n\n\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\tif (SpeakerIdx >= SpeakerCount)\n\t\tSpeakerIdx = SpeakerCount;\n\tif (SpeakerIdx < 0)\n\t\tSpeakerIdx = 0;\n\n\tconst auto HubertLength = HubertOutputTensors[0].GetTensorTypeAndShapeInfo().GetShape()[1];\n\tconst int64_t FrameShape[] = { 1, _Mel_Size };\n\tconst int64_t CharaMixShape[] = { _Mel_Size, SpeakerCount };\n\tconstexpr int64_t OneShape[] = { 1 };\n\tint64_t CharaEmb[] = { SpeakerIdx };\n\n\tauto Alignment = _TensorExtractor->GetAligments(_Mel_Size, HubertLength);\n\tAlignment.resize(FrameShape[1]);\n\tauto F0Data = InferTools::InterpFunc(_SrcF0, long(_SrcF0.size()), long(FrameShape[1]));\n\tstd::vector<float> Volume, SpkMap;\n\n\tstd::vector<Ort::Value> EncoderTensors;\n\tEncoderTensors.emplace_back(std::move(HubertOutputTensors[0]));\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tAlignment.data(),\n\t\tFrameShape[1],\n\t\tFrameShape,\n\t\t2\n\t));\n\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tF0Data.data(),\n\t\tFrameShape[1],\n\t\tFrameShape,\n\t\t2\n\t));\n\n\tif (EnableVolume)\n\t{\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"volume\", \"spk_mix\" };\n\t\tVolume = InferTools::InterpFunc(_SrcVolume, long(_SrcVolume.size()), long(FrameShape[1]));\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tVolume.data(),\n\t\t\tFrameShape[1],\n\t\t\tFrameShape,\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"spk_mix\" };\n\n\tif (EnableCharaMix)\n\t{\n\t\tSpkMap = _TensorExtractor->GetCurrectSpkMixData(_SrcSpeakerMap, FrameShape[1], CharaEmb[0]);\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tSpkMap.data(),\n\t\t\tSpkMap.size(),\n\t\t\tCharaMixShape,\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t{\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tCharaEmb,\n\t\t\t1,\n\t\t\tOneShape,\n\t\t\t1\n\t\t));\n\t}\n\n\tconst std::vector OutputNamesEncoder = { \"mel_pred\" };\n\n\tstd::vector<Ort::Value> EncoderOut;\n\ttry {\n\t\tEncoderOut = encoder->Run(Ort::RunOptions{ nullptr },\n\t\t\tInputNamesEncoder.data(),\n\t\t\tEncoderTensors.data(),\n\t\t\tmin(EncoderTensors.size(), encoder->GetInputCount()),\n\t\t\tOutputNamesEncoder.data(),\n\t\t\t1);\n\t}\n\tcatch (Ort::Exception& e1)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: encoder\\n\") + e1.what()))\n\t}\n\n\tstd::vector<Ort::Value> DenoiseInTensors;\n\tDenoiseInTensors.emplace_back(std::move(EncoderOut[0]));\n\n\tlong long noise_shape[4] = { 1,1,melBins,_Mel_Size };\n\n\tNormMel(_Mel.first);\n\n\t/*std::mt19937 gen(int(_InferParams.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\tstd::vector<float> initial_noise(melBins * _Mel_Size, 0.0);\n\tfor (auto& it : initial_noise)\n\t\tit = normal(gen) * _InferParams.NoiseScale;\n\tDenoiseInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));*/\n\n\tDenoiseInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, _Mel.first.data(), _Mel.first.size(), noise_shape, 4));\n\n\tauto PredOut = MoeVSSampler::GetMoeVSSampler((!alpha ? L\"Pndm\" : _InferParams.Sampler), alpha, denoise, pred, melBins, [](size_t, size_t) {}, memory_info)->Sample(DenoiseInTensors, (int64_t)_InferParams.Step, (int64_t)_InferParams.Pndm, _InferParams.NoiseScale, _InferParams.Seed, Process);\n\n\tstd::vector<Ort::Value> DiffOut, finaOut;\n\ttry\n\t{\n\t\tDiffOut = after->Run(Ort::RunOptions{ nullptr },\n\t\t\tafterInput.data(),\n\t\t\tPredOut.data(),\n\t\t\tPredOut.size(),\n\t\t\tafterOutput.data(),\n\t\t\tafterOutput.size());\n\t}\n\tcatch (Ort::Exception& e1)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()))\n\t}\n\n\tDiffOut.emplace_back(std::move(EncoderTensors[2]));\n\ttry\n\t{\n\t\tfinaOut = Vocoder->Run(Ort::RunOptions{ nullptr },\n\t\t\tnsfInput.data(),\n\t\t\tDiffOut.data(),\n\t\t\tDiffOut.size(),\n\t\t\tnsfOutput.data(),\n\t\t\tnsfOutput.size());\n\t}\n\tcatch (Ort::Exception& e3)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\n\t}\n\n\tconst auto shapeOut = finaOut[0].GetTensorTypeAndShapeInfo().GetShape();\n\tstd::vector<int16_t> TempVecWav(SrcSize, 0);\n\tif (shapeOut[2] < SrcSize)\n\t\tfor (int64_t bbb = 0; bbb < shapeOut[2]; bbb++)\n\t\t\tTempVecWav[bbb] = static_cast<int16_t>(Clamp(finaOut[0].GetTensorData<float>()[bbb]) * 32766.f);\n\telse\n\t\tfor (int64_t bbb = 0; bbb < SrcSize; bbb++)\n\t\t\tTempVecWav[bbb] = static_cast<int16_t>(Clamp(finaOut[0].GetTensorData<float>()[bbb]) * 32766.f);\n\treturn TempVecWav;\n}\n\nMoeVoiceStudioCoreEnd\n"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/src/GPT-SoVits.cpp",
    "content": "﻿#include \"../header/GPT-SoVits.hpp\"\n#include \"../../InferTools/inferTools.hpp\"\n#include <random>\n#include <set>\n\nMoeVoiceStudioCoreHeader\n\tGptSoVits::~GptSoVits()\n{\n\tlogger.log(L\"[Info] unloading GptSoVits Models\");\n\tdestory();\n\tlogger.log(L\"[Info] GptSoVits Models unloaded\");\n}\n\nGptSoVits::GptSoVits(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_) :\n\tTextToSpeech(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\t//Check Folder\n\tif (_Config[\"Folder\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"folder\\\" (Model Folder)\");\n\tif (!_Config[\"Folder\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Must Be String\");\n\tconst auto _folder = to_wide_string(_Config[\"Folder\"].GetString());\n\tif (_folder.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Can Not Be Empty\");\n\tconst std::wstring _path = GetCurrentFolder() + L\"/Models/\" + _folder + L\"/\" + _folder;\n\n\tstd::map<std::string, std::wstring> _PathDict;\n\n\t_PathDict[\"SSL\"] = GetCurrentFolder() + L\"/Bert/\" + L\"SSLModel.onnx\";\n\t_PathDict[\"Vits\"] = _path + L\"_vits.onnx\";\n\t_PathDict[\"Encoder\"] = _path + L\"_t2s_encoder.onnx\";\n\t_PathDict[\"FDecoder\"] = _path + L\"_t2s_fsdec.onnx\";\n\t_PathDict[\"Decoder\"] = _path + L\"_t2s_sdec.onnx\";\n\n\tif (_Config.HasMember(\"Dict\") && _Config[\"Dict\"].IsString() && !_Config[\"Dict\"].Empty())\n\t\t_PathDict[\"Dict\"] = GetCurrentFolder() + L\"/Dict/\" + to_wide_string(_Config[\"Dict\"].GetString()) + L\".json\";\n\n\tif (_Config.HasMember(\"BertPath\") && _Config[\"BertPath\"].IsString() && !_Config[\"BertPath\"].Empty())\n\t\t_PathDict[\"Bert\"] = GetCurrentFolder() + L\"/Bert/\" + to_wide_string(_Config[\"BertPath\"].GetString());\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"BertPath\\\" (Bert Folder)\");\n\n\tload(_PathDict, _Config, _ProgressCallback, _DurationCallback);\n}\n\nvoid GptSoVits::load(const std::map<std::string, std::wstring>& _PathDict,\n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback)\n{\n\tCleaner = MoeVSG2P::GetDefCleaner();\n\tif (_PathDict.find(\"Dict\") != _PathDict.end() && (_waccess(_PathDict.at(\"Dict\").c_str(), 0) != -1))\n\t\tCleaner->loadDict(_PathDict.at(\"Dict\"));\n\telse\n\t\tCleaner->loadDict(L\"\");\n\n\tif (_Config.HasMember(\"LanguageMap\") && !_Config[\"LanguageMap\"].IsNull())\n\t\tfor (const auto& CMember : _Config[\"LanguageMap\"].GetMemberArray())\n\t\t\tLanguageMap[CMember.first] = CMember.second.GetInt();\n\telse\n\t\tlogger.log(\"[Warn] Field \\\"LanguageMap\\\" Is Missing, Use Default Value\");\n\n\t//Check SamplingRate\n\tif (_Config[\"Rate\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Rate\\\" (SamplingRate)\");\n\tif (_Config[\"Rate\"].IsInt() || _Config[\"Rate\"].IsInt64())\n\t\t_samplingRate = _Config[\"Rate\"].GetInt();\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Rate\\\" (SamplingRate) Must Be Int/Int64\");\n\n\tlogger.log(L\"[Info] Current Sampling Rate is\" + std::to_wstring(_samplingRate));\n\n\t//Check Symbol\n\tif (!_Config.HasMember(\"Symbol\") || _Config[\"Symbol\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Symbol\\\" (PhSymbol)\");\n\tif (_Config.HasMember(\"AddBlank\") && !_Config[\"AddBlank\"].IsNull())\n\t\tAddBlank = _Config[\"AddBlank\"].GetBool();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"AddBlank\\\" Is Missing, Use Default Value\");\n\n\tif (_Config.HasMember(\"NumLayers\") && _Config[\"NumLayers\"].IsInt())\n\t\tNumLayers = _Config[\"NumLayers\"].GetInt();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"NumLayers\\\" Is Missing, Use Default Value\");\n\n\tif (_Config.HasMember(\"EmbeddingDim\") && _Config[\"EmbeddingDim\"].IsInt())\n\t\tEmbeddingDim = _Config[\"EmbeddingDim\"].GetInt();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"EmbeddingDim\\\" Is Missing, Use Default Value\");\n\n\tif (_Config.HasMember(\"EOSId\") && _Config[\"EOSId\"].IsInt())\n\t\tEOSId = _Config[\"EOSId\"].GetInt();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"EOSId\\\" Is Missing, Use Default Value\");\n\n\t//Load Symbol\n\tint64_t iter_symb = 0;\n\tif (_Config[\"Symbol\"].IsArray())\n\t{\n\t\tlogger.log(L\"[Info] Use Phs\");\n\t\tif (_Config[\"Symbol\"].Empty())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Can Not Be Empty\");\n\t\tconst auto SymbolArr = _Config[\"Symbol\"].GetArray();\n\t\tif (!SymbolArr[0].IsString())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Must Be Array<String> or String\");\n\t\tfor (const auto& it : SymbolArr)\n\t\t\tSymbols.insert({ to_wide_string(it.GetString()), iter_symb++ });\n\t}\n\telse\n\t{\n\t\tif (!_Config[\"Symbol\"].IsString())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Must Be Array<String> or String\");\n\t\tlogger.log(L\"[Info] Use Symbols\");\n\t\tconst std::wstring SymbolsStr = to_wide_string(_Config[\"Symbol\"].GetString());\n\t\tif (SymbolsStr.empty())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Can Not Be Empty\");\n\t\tfor (size_t i = 0; i < SymbolsStr.length(); ++i)\n\t\t\tSymbols.insert({ SymbolsStr.substr(i,1) , iter_symb++ });\n\t}\n\n\tif (_Config.HasMember(\"Characters\") && _Config[\"Characters\"].IsArray())\n\t{\n\t\tSpeakerCount = (int64_t)_Config[\"Characters\"].Size();\n\t\tint64_t SpkIdx = 0;\n\t\tfor (const auto& iterator : _Config[\"Characters\"].GetArray())\n\t\t\tSpeakerMap[to_wide_string(iterator.GetString())] = SpkIdx++;\n\t}\n\n\ttry\n\t{\n\t\tsessionBert = new Ort::Session(*env, (_PathDict.at(\"Bert\") + L\"/model.onnx\").c_str(), *session_options);\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow(e.what());\n\t}\n\tif (_waccess((_PathDict.at(\"Bert\") + L\"/Tokenizer.json\").c_str(), 0) != -1)\n\t{\n\t\tTokenizers.insert({ L\"0\" ,_PathDict.at(\"Bert\") + L\"/Tokenizer.json\" });\n\t\tTokenizers[L\"0\"].BondCleaner(Cleaner);\n\t}\n\telse if (sessionBert)\n\t{\n\t\tdelete sessionBert;\n\t\tsessionBert = nullptr;\n\t\tLibDLVoiceCodecThrow(\"Bert Must Have a Tokenizer\");\n\t}\n\n\t_callback = _ProgressCallback;\n\tCustomDurationCallback = _DurationCallback;\n\n\t//LoadModels\n\ttry\n\t{\n\t\tlogger.log(L\"[Info] loading GptSoVits Models\");\n\t\tsessionVits = new Ort::Session(*env, _PathDict.at(\"Vits\").c_str(), *session_options);\n\t\tsessionSSL = new Ort::Session(*env, _PathDict.at(\"SSL\").c_str(), *session_options);\n\t\tsessionEncoder = new Ort::Session(*env, _PathDict.at(\"Encoder\").c_str(), *session_options);\n\t\tsessionDecoder = new Ort::Session(*env, _PathDict.at(\"Decoder\").c_str(), *session_options);\n\t\tsessionFDecoder = new Ort::Session(*env, _PathDict.at(\"FDecoder\").c_str(), *session_options);\n\t\tlogger.log(L\"[Info] GptSoVits Models loaded\");\n\t}\n\tcatch (Ort::Exception& _exception)\n\t{\n\t\tdestory();\n\t\tLibDLVoiceCodecThrow(_exception.what());\n\t}\n\n\tSpeakerCount = 0;\n}\n\nGptSoVits::GptSoVits(const std::map<std::string, std::wstring>& _PathDict,\n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_) :\n\tTextToSpeech(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tload(_PathDict, _Config, _ProgressCallback, _DurationCallback);\n}\n\nstd::wregex NCH_Regex(L\"[^\\\\u4e00-\\\\u9fa5 !@#$%^&*()_+\\\\-=`~,./;'\\\\[\\\\]<>?:\\\"{}|\\\\\\\\。？！，、；：“”‘’『』「」（）〔〕【】─…·—～《》〈〉]+\");\nstd::set ZH_Vowel{L'a', L'e', L'i', L'o', L'u', L'A', L'E', L'I', L'O', L'U'};\nstd::set Byte_Symbol{L',', L'.', L'?', L'/', L'\\\"', L'\\'', L';', L':', L'!', L' ', L'…' };\nstd::unordered_map<std::wstring, int64_t> ToneRepMap{\n\t{ L\"[acc_6]\", 6 }, { L\"[acc_5]\", 5 }, { L\"[acc_4]\", 4 }, { L\"[acc_3]\", 3 }, { L\"[acc_2]\", 2 }, { L\"[acc_1]\", 1 },\n\t{ L\"[acc_-4]\", -4 }, { L\"[acc_-3]\", -3 }, { L\"[acc_-2]\", -2 }, { L\"[acc_-1]\", -1 },\n};\n\nstd::tuple<std::vector<float>, std::vector<int64_t>> GptSoVits::GetBertPhs(const MoeVSProjectSpace::MoeVSTTSSeq& Seq, const MoeVSG2P::Tokenizer& Tokenizer) const\n{\n\tstd::vector<std::wstring> Phonemes;\n\tstd::vector<float> OutBert;\n\n\tif (sessionBert && Seq.LanguageSymbol == \"ZH\")\n\t{\n\t\tstd::vector<size_t> Bert2Ph;\n\t\tstd::vector<std::wstring> BertSeq;\n\t\tstd::vector<int64_t> GlobalTonesSeq;\n\t\tif (Seq.SlicedTokens.empty())\n\t\t{\n\t\t\tstd::wstring TextSeq = MoeVSG2P::NormalizeText(Seq.TextSeq, \"ZH\");\n\t\t\tif (std::regex_search(TextSeq, NCH_Regex))\n\t\t\t\tLibDLVoiceCodecThrow(\"Chinese Sentence ShouldNot Have NonChinese Symbols\");\n\t\t\tPhonemes = MoeVSG2P::GetDefCleaner()->DictReplace(MoeVSG2P::GetDefCleaner()->G2p(TextSeq, Seq.PlaceHolderSymbol, L\"wt\", \"ZH\"), Seq.PlaceHolderSymbol);\n\n\t\t\tstd::vector<int64_t> LocalTonesSeq;\n\t\t\tstd::vector<std::wstring> LocalPhonemeSeq;\n\t\t\tfor (const auto& it : Phonemes)\n\t\t\t{\n\t\t\t\tif (ToneRepMap.find(it) == ToneRepMap.end())\n\t\t\t\t{\n\t\t\t\t\tLocalPhonemeSeq.emplace_back(it);\n\t\t\t\t\tLocalTonesSeq.emplace_back(0);\n\t\t\t\t}\n\t\t\t\telse if (!LocalTonesSeq.empty())\n\t\t\t\t\t*(LocalTonesSeq.end() - 1) = ToneRepMap.at(it);\n\t\t\t}\n\t\t\tif (LocalTonesSeq.size() != LocalPhonemeSeq.size())\n\t\t\t\tLocalTonesSeq.resize(LocalPhonemeSeq.size(), 0);\n\t\t\tPhonemes = std::move(LocalPhonemeSeq);\n\t\t\tGlobalTonesSeq = std::move(LocalTonesSeq);\n\n\t\t\tconst size_t BertSize = TextSeq.length() + 2, PhoneSize = Phonemes.size();\n\n\t\t\tBert2Ph.resize(PhoneSize, 0);\n\t\t\tsize_t startFrame = 1;\n\t\t\tfor (size_t iph = 0; iph < Phonemes.size(); ++iph)\n\t\t\t{\n\t\t\t\tif (startFrame == BertSize)\n\t\t\t\t\tLibDLVoiceCodecThrow(\"AligError\");\n\t\t\t\tBert2Ph[iph] = startFrame;\n\t\t\t\tif (!Phonemes[iph].empty() && ZH_Vowel.find(Phonemes[iph][0]) != ZH_Vowel.end())\n\t\t\t\t\t++startFrame;\n\t\t\t\telse if (Byte_Symbol.find(Phonemes[iph][0]) != Byte_Symbol.end())\n\t\t\t\t\t++startFrame;\n\t\t\t\telse if (Phonemes[iph] == L\"[UNK]\")\n\t\t\t\t\t++startFrame;\n\t\t\t}\n\n\t\t\tBertSeq.resize(BertSize);\n\t\t\tBertSeq[0] = L\"[CLS]\";\n\t\t\tfor (size_t iph = 0; iph < Phonemes.size(); ++iph)\n\t\t\t\tif (BertSeq[Bert2Ph[iph]].empty())\n\t\t\t\t\tBertSeq[Bert2Ph[iph]] = TextSeq[Bert2Ph[iph] - 1];\n\t\t\tBertSeq[BertSeq.size() - 1] = L\"[SEP]\";\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsize_t startFrame = 1;\n\t\t\tfor(const auto& i : Seq.SlicedTokens)\n\t\t\t{\n\t\t\t\tBertSeq.emplace_back(i.Text);\n\t\t\t\tif (i.Text == L\"[CLS]\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (i.Text == L\"[SEP]\")\n\t\t\t\t\tbreak;\n\t\t\t\tif(i.Phonemes.empty())\n\t\t\t\t{\n\t\t\t\t\tif(i.Text.empty())\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tauto TmpPhonemes = MoeVSG2P::GetDefCleaner()->DictReplace(MoeVSG2P::GetDefCleaner()->G2p(i.Text, Seq.PlaceHolderSymbol, L\"wt\", \"ZH\"), Seq.PlaceHolderSymbol);\n\n\t\t\t\t\tstd::vector<int64_t> LocalTonesSeq;\n\t\t\t\t\tstd::vector<std::wstring> LocalPhonemeSeq;\n\t\t\t\t\tfor (const auto& it : TmpPhonemes)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (ToneRepMap.find(it) == ToneRepMap.end())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLocalPhonemeSeq.emplace_back(it);\n\t\t\t\t\t\t\tLocalTonesSeq.emplace_back(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!LocalTonesSeq.empty())\n\t\t\t\t\t\t\t*(LocalTonesSeq.end() - 1) = ToneRepMap.at(it);\n\t\t\t\t\t}\n\t\t\t\t\tif (LocalTonesSeq.size() != LocalPhonemeSeq.size())\n\t\t\t\t\t\tLocalTonesSeq.resize(LocalPhonemeSeq.size(), 0);\n\t\t\t\t\tfor (auto& ph : LocalPhonemeSeq)\n\t\t\t\t\t{\n\t\t\t\t\t\tPhonemes.emplace_back(std::move(ph));\n\t\t\t\t\t\tBert2Ph.emplace_back(startFrame);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const auto& tones : LocalTonesSeq)\n\t\t\t\t\t\tGlobalTonesSeq.emplace_back(tones);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfor (const auto& ph : i.Phonemes)\n\t\t\t\t\t{\n\t\t\t\t\t\tPhonemes.emplace_back(ph);\n\t\t\t\t\t\tBert2Ph.emplace_back(startFrame);\n\t\t\t\t\t}\n\t\t\t\t\tauto LocalTonesSeq = i.Tones;\n\t\t\t\t\tLocalTonesSeq.resize(i.Phonemes.size(), 0);\n\t\t\t\t\tfor (const auto& tones : LocalTonesSeq)\n\t\t\t\t\t\tGlobalTonesSeq.emplace_back(tones);\n\t\t\t\t}\n\t\t\t\t++startFrame;\n\t\t\t}\n\t\t}\n\n\t\tfor (size_t i = 0; i < Phonemes.size(); ++i)\n\t\t{\n\t\t\tif (GlobalTonesSeq[i] == 5)\n\t\t\t\tcontinue;\n\t\t\tif (GlobalTonesSeq[i] != 0)\n\t\t\t\tPhonemes[i] += std::to_wstring(GlobalTonesSeq[i]);\n\t\t}\n\n\t\t//PromptSeq To Bert Features\n\t\tauto input_ids = Tokenizer(BertSeq);\n\t\tstd::vector<int64_t> attention_mask(input_ids.size(), 1), token_type_ids(input_ids.size(), 0);\n\t\tint64_t AttentionShape[2] = { 1, (int64_t)input_ids.size() };\n\t\tstd::vector<Ort::Value> AttentionInput, AttentionOutput;\n\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, input_ids.data(), input_ids.size(), AttentionShape, 2));\n\t\tif (sessionBert->GetInputCount() == 3)\n\t\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(*memory_info, attention_mask.data(), attention_mask.size(), AttentionShape, 2));\n\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, token_type_ids.data(), token_type_ids.size(), AttentionShape, 2));\n\t\tlogger.log(\"[Inference] Infer Bert\");\n\t\ttry\n\t\t{\n\t\t\tif (sessionBert->GetInputCount() == 3)\n\t\t\t{\n\t\t\t\tAttentionOutput = sessionBert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tBertInputNames.data(),\n\t\t\t\t\tAttentionInput.data(),\n\t\t\t\t\t3,\n\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t1);\n\t\t\t}\n\t\t\telse if (sessionBert->GetInputCount() == 2)\n\t\t\t{\n\t\t\t\tAttentionOutput = sessionBert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tBertInputNames2.data(),\n\t\t\t\t\tAttentionInput.data(),\n\t\t\t\t\t2,\n\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tAttentionOutput = sessionBert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tBertInputNames3.data(),\n\t\t\t\t\tAttentionInput.data(),\n\t\t\t\t\t1,\n\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t1);\n\t\t\t}\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Bert\\n\") + e.what()))\n\t\t}\n\t\tstd::vector<size_t> BertAligSeq;\n\t\tif (AddBlank)\n\t\t\tBertAligSeq.emplace_back(0);\n\t\tfor(auto i : Bert2Ph)\n\t\t{\n\t\t\tBertAligSeq.emplace_back(i);\n\t\t\tif (AddBlank)\n\t\t\t\tBertAligSeq.emplace_back(i);\n\t\t}\n\t\tconst auto AttnData = AttentionOutput[0].GetTensorData<float>();\n\t\tfor (size_t IndexOfSrcVector = 0; IndexOfSrcVector < BertAligSeq.size(); ++IndexOfSrcVector)\n\t\t\tOutBert.insert(OutBert.end(), AttnData + BertAligSeq[IndexOfSrcVector] * 1024, AttnData + (BertAligSeq[IndexOfSrcVector] + 1) * 1024);\n\t}\n\telse\n\t{\n\t\tif (Seq.SlicedTokens.empty())\n\t\t{\n\t\t\tif (Seq.TextSeq.empty())\n\t\t\t\treturn {};\n\t\t\tPhonemes = MoeVSG2P::GetDefCleaner()->DictReplace(MoeVSG2P::GetDefCleaner()->G2p(Seq.TextSeq, Seq.PlaceHolderSymbol, Seq.AdditionalInfo, Seq.LanguageSymbol), Seq.PlaceHolderSymbol);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (const auto& i : Seq.SlicedTokens)\n\t\t\t{\n\t\t\t\tif (i.Text == L\"[CLS]\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (i.Text == L\"[SEP]\")\n\t\t\t\t\tbreak;\n\t\t\t\tauto TmpPhonemes = i.Phonemes;\n\t\t\t\tif (TmpPhonemes.empty())\n\t\t\t\t{\n\t\t\t\t\tif (i.Text.empty())\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tTmpPhonemes = MoeVSG2P::GetDefCleaner()->DictReplace(MoeVSG2P::GetDefCleaner()->G2p(i.Text, Seq.PlaceHolderSymbol, Seq.AdditionalInfo, Seq.LanguageSymbol), Seq.PlaceHolderSymbol);\n\t\t\t\t}\n\t\t\t\tfor (auto& ph : TmpPhonemes)\n\t\t\t\t\tPhonemes.emplace_back(ph);\n\t\t\t}\n\t\t}\n\t}\n\n\t//Phoneme To InputSeq\n\tstd::vector<int64_t> OutPhonemes;\n\tif (AddBlank)\n\t\tOutPhonemes.emplace_back(0);\n\tfor (const auto& i : Phonemes)\n\t{\n\t\tif (Symbols.find(i) != Symbols.end())\n\t\t\tOutPhonemes.emplace_back(Symbols.at(i));\n\t\telse\n\t\t\tOutPhonemes.emplace_back(0);\n\t\tif(AddBlank)\n\t\t\tOutPhonemes.emplace_back(0);\n\t}\n\n\tif (OutBert.empty())\n\t\tOutBert = std::vector(OutPhonemes.size() * 1024, 0.f);\n\n\treturn { std::move(OutBert), std::move(OutPhonemes) };\n}\n\nstd::vector<std::vector<int16_t>> GptSoVits::Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const\n{\n\tif (_Input.size() < 3 || _Input[0].TextSeq.empty() || _Input[1].TextSeq.empty())\n\t\tLibDLVoiceCodecThrow(\"Input[0] Should Be Reference Text, Input[1] Should Be Reference Path, Input[2:n] Should Be TTS Text\");\n\n\tconst auto RefAudio = InferTools::Wav(_Input[1].TextSeq.c_str());\n\tif (RefAudio.getHeader().bitsPerSample != 16 || RefAudio.getHeader().NumOfChan != 1)\n\t\tLibDLVoiceCodecThrow(\"RefAudio Should Be signed-int16 and mono\");\n\n\tstd::vector<std::vector<int16_t>> PCM;\n\tPCM.reserve(_Input.size());\n\tstd::vector<std::vector<int16_t>> _Audio(1);\n\tlogger.log(\"[Inference] GptSoVits Inference Begin\");\n\tsize_t proc = 0;\n\tconst size_t max_proc = _Input.size() + 2;\n\t_callback(proc, max_proc);\n\n\tconst auto& Tokenizer = Tokenizers.at(L\"0\");\n\n\tconst auto RefSize = RefAudio.getHeader().Subchunk2Size / 2;\n\tconst auto RefData = (const int16_t*)RefAudio.getData();\n\n\tstd::vector<float> RefAudioSrc(RefSize);\n\tfor (size_t i = 0; i < RefSize; ++i)\n\t\tRefAudioSrc[i] = float(*(RefData + i)) / 32768.f;\n\tauto RefAudio16K = InferTools::InterpResample(RefAudioSrc, (int)RefAudio.getHeader().SamplesPerSec, 16000, 1.f);\n\tauto RefAudioSr = InferTools::InterpResample(RefAudioSrc, (int)RefAudio.getHeader().SamplesPerSec, _samplingRate, 1.f);\n\n\t//Reference SSL\n\tlogger.log(\"[Inference] Infer SSL\");\n\tconst int64_t SSLShape[] = { 1, (int64_t)RefAudio16K.size() };\n\tstd::vector<Ort::Value> SSLInput, SSLOutPut;\n\tSSLInput.emplace_back(Ort::Value::CreateTensor(*memory_info, RefAudio16K.data(), RefAudio16K.size(),\n\t\tSSLShape, 2));\n\ttry\n\t{\n\t\tSSLOutPut = sessionSSL->Run(Ort::RunOptions{ nullptr },\n\t\t\tSSLInputNames.data(),\n\t\t\tSSLInput.data(),\n\t\t\tSSLInputNames.size(),\n\t\t\tSSLOutputNames.data(),\n\t\t\tSSLOutputNames.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: SSL\\n\") + e.what()))\n\t}\n\t_callback(++proc, max_proc);\n\n\tlogger.log(\"[Inference] Infer Ref Data\");\n\tauto RefDat = GetBertPhs(_Input[0], Tokenizer);\n\tstd::vector<float> RefBert = std::move(std::get<0>(RefDat));\n\tstd::vector<int64_t> RefSeq = std::move(std::get<1>(RefDat));\n\tint64_t RefSeqShape[] = { 1, (int64_t)RefSeq.size() };\n\tint64_t RefBertShape[] = { RefSeqShape[1], 1024 };\n\tint64_t TempData[] = { 1 };\n\t_callback(++proc, max_proc);\n\n\tstd::vector<Ort::Value> EncoderInpTensor;\n\tEncoderInpTensor.emplace_back(Ort::Value::CreateTensor(*memory_info, RefSeq.data(), RefSeq.size(),\n\t\tRefSeqShape, 2));\n\tEncoderInpTensor.emplace_back(Ort::Value::CreateTensor(*memory_info, TempData, 1,\n\t\tTempData, 1));\n\tEncoderInpTensor.emplace_back(Ort::Value::CreateTensor(*memory_info, RefBert.data(), RefBert.size(),\n\t\tRefBertShape, 2));\n\tEncoderInpTensor.emplace_back(Ort::Value::CreateTensor(*memory_info, TempData, 1,\n\t\tTempData, 1));\n\tEncoderInpTensor.emplace_back(std::move(SSLOutPut[0]));\n\n\tfor (size_t i = 2; i < _Input.size(); ++i)\n\t{\n\t\tconst auto& InferSeq = _Input[i];\n\t\tauto SeqAndBert = GetBertPhs(InferSeq, Tokenizer);\n\t\tstd::vector<float> InputBert = std::move(std::get<0>(SeqAndBert));\n\t\tstd::vector<int64_t> InputSeq = std::move(std::get<1>(SeqAndBert));\n\t\tint64_t SeqShape[] = { 1, (int64_t)InputSeq.size() };\n\t\tint64_t BertShape[] = { SeqShape[1], 1024 };\n\t\tEncoderInpTensor[1] = Ort::Value::CreateTensor(*memory_info, InputSeq.data(), InputSeq.size(), SeqShape, 2);\n\t\tEncoderInpTensor[3] = Ort::Value::CreateTensor(*memory_info, InputBert.data(), InputBert.size(), BertShape, 2);\n\t\tstd::vector<Ort::Value> EncoderOutput, FDecoderOutput, DecoderOutput;\n\t\ttry\n\t\t{\n\t\t\tEncoderOutput = sessionEncoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tEncoderInputNames.data(),\n\t\t\t\tEncoderInpTensor.data(),\n\t\t\t\tEncoderInputNames.size(),\n\t\t\t\tEncoderOutputNames.data(),\n\t\t\t\tEncoderOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Encoder\\n\") + e.what()))\n\t\t}\n\n\t\ttry\n\t\t{\n\t\t\tFDecoderOutput = sessionFDecoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tFDecoderInputNames.data(),\n\t\t\t\tEncoderOutput.data(),\n\t\t\t\tFDecoderInputNames.size(),\n\t\t\t\tFDecoderOutputNames.data(),\n\t\t\t\tFDecoderOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: FDecoder\\n\") + e.what()))\n\t\t}\n\n\t\tint64_t idx = 1;\n\t\tfor (; idx < InferSeq.MaxDecodeStep; ++idx)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDecoderOutput = sessionDecoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tDecoderInputNames.data(),\n\t\t\t\t\tFDecoderOutput.data(),\n\t\t\t\t\tDecoderInputNames.size(),\n\t\t\t\t\tDecoderOutputNames.data(),\n\t\t\t\t\tDecoderOutputNames.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Decoder\\n\") + e.what()))\n\t\t\t}\n\n\t\t\tconst auto Logit = DecoderOutput[4].GetTensorData<float>();\n\t\t\tint64_t MaxIdx = 0;\n\t\t\tfor (int64_t midx = 0; midx < EOSId + 1; ++midx)\n\t\t\t\tif (Logit[midx] > Logit[MaxIdx])\n\t\t\t\t\tMaxIdx = midx;\n\t\t\tif (MaxIdx == EOSId)\n\t\t\t\tbreak;\n\t\t\tif (*DecoderOutput[5].GetTensorData<int32_t>() == EOSId)\n\t\t\t\tbreak;\n\n\t\t\tFDecoderOutput[0] = std::move(DecoderOutput[0]);\n\t\t\tFDecoderOutput[1] = std::move(DecoderOutput[1]);\n\t\t\tFDecoderOutput[2] = std::move(DecoderOutput[2]);\n\t\t\tFDecoderOutput[3] = std::move(DecoderOutput[3]);\n\t\t}\n\n\t\tauto PredSemanticPtr = DecoderOutput[0].GetTensorData<int64_t>();\n\t\tauto PredSemanticShape = DecoderOutput[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tPredSemanticShape.insert(PredSemanticShape.begin(), 1);\n\t\tstd::vector PredSemantic(PredSemanticPtr + max((PredSemanticShape[2] - idx - 1), 0), PredSemanticPtr + PredSemanticShape[2]);\n\t\tif (PredSemantic[PredSemantic.size() - 1] == EOSId)\n\t\t\tPredSemantic[PredSemantic.size() - 1] = 0;\n\t\tPredSemanticShape[2] = int64_t(PredSemantic.size());\n\n\t\tstd::vector<Ort::Value> VitsTensors;\n\t\tVitsTensors.emplace_back(std::move(EncoderInpTensor[1]));\n\t\tVitsTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, PredSemantic.data(), PredSemantic.size(), PredSemanticShape.data(), PredSemanticShape.size()));\n\t\tint64_t AudioShape[] = { 1, (int64_t)RefAudioSr.size() };\n\t\tVitsTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RefAudioSr.data(), RefAudioSr.size(), AudioShape, 2));\n\n\t\ttry\n\t\t{\n\t\t\tVitsTensors = sessionVits->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tVitsInputNames.data(),\n\t\t\t\tVitsTensors.data(),\n\t\t\t\tVitsInputNames.size(),\n\t\t\t\tVitsOutputNames.data(),\n\t\t\t\tVitsOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: SoVits\\n\") + e.what()))\n\t\t}\n\n\t\tif (!_Audio[0].empty())\n\t\t{\n\t\t\tif (InferSeq.RestTime < 0.f)\n\t\t\t{\n\t\t\t\t_Audio[0].insert(_Audio[0].end(), size_t(_samplingRate), 0);\n\t\t\t\tPCM.emplace_back(std::move(_Audio[0]));\n\t\t\t\t_Audio[0] = std::vector<int16_t>();\n\t\t\t}\n\t\t\telse\n\t\t\t\t_Audio[0].insert(_Audio[0].end(), size_t(InferSeq.RestTime * float(_samplingRate)), 0);\n\t\t}\n\t\tconst auto shapeOut = VitsTensors[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tconst auto outData = VitsTensors[0].GetTensorData<float>();\n\t\tfor (int bbb = 0; bbb < shapeOut[0]; bbb++)\n\t\t\t_Audio[0].emplace_back(static_cast<int16_t>(outData[bbb] * 32768.0f));\n\n\t\t_callback(++proc, max_proc);\n\t}\n\tif (!_Audio[0].empty())\n\t{\n\t\t_Audio[0].insert(_Audio[0].end(), size_t(_samplingRate), 0);\n\t\tPCM.emplace_back(std::move(_Audio[0]));\n\t}\n\n\treturn PCM;\n}\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/src/ModelBase.cpp",
    "content": "﻿#include \"../header/ModelBase.hpp\"\n#include <commdlg.h>\n#include \"../EnvManager.hpp\"\nMoeVoiceStudioCoreHeader\n\nMoeVoiceStudioModule::MoeVoiceStudioModule(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_)\n{\n\tmoevsenv::GetGlobalMoeVSEnv().Load(ThreadCount_, DeviceID_, (unsigned)ExecutionProvider_);\n\t_cur_execution_provider = ExecutionProvider_;\n\tenv = moevsenv::GetGlobalMoeVSEnv().GetEnv();\n\tmemory_info = moevsenv::GetGlobalMoeVSEnv().GetMemoryInfo();\n\tsession_options = moevsenv::GetGlobalMoeVSEnv().GetSessionOptions();\n}\n\nMoeVoiceStudioModule::~MoeVoiceStudioModule()\n{\n\tenv = nullptr;\n\tmemory_info = nullptr;\n\tsession_options = nullptr;\n}\n\nstd::vector<std::wstring> MoeVoiceStudioModule::CutLens(const std::wstring& input)\n{\n\tstd::vector<std::wstring> _Lens;\n\tstd::wstring _tmpLen;\n\tfor (const auto& chari : input)\n\t{\n\t\tif ((chari == L'\\n') || (chari == L'\\r')) {\n\t\t\tif (!_tmpLen.empty())\n\t\t\t{\n\t\t\t\t_Lens.push_back(_tmpLen);\n\t\t\t\t_tmpLen = L\"\";\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t_tmpLen += chari;\n\t\t}\n\t}\n\treturn _Lens;\n}\n\nstd::vector<std::wstring> MoeVoiceStudioModule::GetOpenFileNameMoeVS()\n{\n\tconstexpr long MaxPath = 8000;\n\tstd::vector<std::wstring> OFNLIST;\n#ifdef WIN32\n\tstd::vector<TCHAR> szFileName(MaxPath);\n\tstd::vector<TCHAR> szTitleName(MaxPath);\n\tOPENFILENAME ofn;\n\tZeroMemory(&ofn, sizeof(ofn));\n\tofn.lpstrFile = szFileName.data();\n\tofn.nMaxFile = MaxPath;\n\tofn.lpstrFileTitle = szTitleName.data();\n\tofn.nMaxFileTitle = MaxPath;\n\tofn.lStructSize = sizeof(OPENFILENAME);\n\tofn.hwndOwner = nullptr;\n\tconstexpr TCHAR szFilter[] = TEXT(\"Audio (*.wav;*.mp3;*.ogg;*.flac;*.aac)\\0*.wav;*.mp3;*.ogg;*.flac;*.aac\\0\");\n\tofn.lpstrFilter = szFilter;\n\tofn.lpstrTitle = nullptr;\n\tofn.lpstrDefExt = TEXT(\"wav\");\n\tofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER;\n\tif (GetOpenFileName(&ofn))\n\t{\n\t\tauto filePtr = szFileName.data();\n\t\tstd::wstring preFix = filePtr;\n\t\tfilePtr += preFix.length() + 1;\n\t\tif (!*filePtr)\n\t\t\tOFNLIST.emplace_back(preFix);\n\t\telse\n\t\t{\n\t\t\tpreFix += L'\\\\';\n\t\t\twhile (*filePtr != 0)\n\t\t\t{\n\t\t\t\tstd::wstring thisPath(filePtr);\n\t\t\t\tOFNLIST.emplace_back(preFix + thisPath);\n\t\t\t\tfilePtr += thisPath.length() + 1;\n\t\t\t}\n\t\t}\n\t}\n\tif(OFNLIST.empty())\n\t\tLibDLVoiceCodecThrow(\"Please Select Files\");\n\treturn OFNLIST;\n#else\n#endif\n}\n\nstd::vector<std::wstring> MoeVoiceStudioModule::Inference(std::wstring& _Datas,\n\tconst MoeVSProjectSpace::MoeVSParams& _InferParams,\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\n{\n\tMoeVSNotImplementedError;\n}\n\n/*\nint OnnxModule::InsertMessageToEmptyEditBox(std::wstring& _inputLens)\n{\n#ifdef WIN32\n\tstd::vector<TCHAR> szFileName(MaxPath);\n\tstd::vector<TCHAR> szTitleName(MaxPath);\n\tOPENFILENAME ofn;\n\tZeroMemory(&ofn, sizeof(ofn));\n\tofn.lpstrFile = szFileName.data();\n\tofn.nMaxFile = MaxPath;\n\tofn.lpstrFileTitle = szTitleName.data();\n\tofn.nMaxFileTitle = MaxPath;\n\tofn.lStructSize = sizeof(OPENFILENAME);\n\tofn.hwndOwner = nullptr;\n\n\tconstexpr TCHAR szFilter[] = TEXT(\"Audio (*.wav;*.mp3;*.ogg;*.flac;*.aac)\\0*.wav;*.mp3;*.ogg;*.flac;*.aac\\0\");\n\tofn.lpstrFilter = szFilter;\n\tofn.lpstrTitle = nullptr;\n\tofn.lpstrDefExt = TEXT(\"wav\");\n\tofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER;\n\tif (GetOpenFileName(&ofn))\n\t{\n\t\tauto filePtr = szFileName.data();\n\t\tstd::wstring preFix = filePtr;\n\t\tfilePtr += preFix.length() + 1;\n\t\tif (!*filePtr)\n\t\t\t_inputLens = preFix;\n\t\telse\n\t\t{\n\t\t\tpreFix += L'\\\\';\n\t\t\twhile (*filePtr != 0)\n\t\t\t{\n\t\t\t\tstd::wstring thisPath(filePtr);\n\t\t\t\t_inputLens += preFix + thisPath + L'\\n';\n\t\t\t\tfilePtr += thisPath.length() + 1;\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\treturn -2;\n\treturn 0;\n#else\n#endif\n}\n */\n\n/*\nvoid OnnxModule::ChangeDevice(Device _dev)\n{\n\tif (_dev == device_)\n\t\treturn;\n\tdevice_ = _dev;\n\tdelete session_options;\n\tdelete env;\n\tdelete memory_info;\n\tenv = nullptr;\n\tsession_options = nullptr;\n\tmemory_info = nullptr;\n\tswitch (_dev)\n\t{\n\t\tcase Device::CUDA:\n\t\t{\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\t\t\tbool ret = true;\n\t\t\tfor (const auto& it : AvailableProviders)\n\t\t\t\tif (it.find(\"CUDA\") != std::string::npos)\n\t\t\t\t\tret = false;\n\t\t\tif (ret)\n\t\t\t\tLibDLVoiceCodecThrow(\"CUDA Provider Not Found\");\n\t\t\tOrtCUDAProviderOptions cuda_option;\n\t\t\tcuda_option.device_id = int(__MoeVSGPUID);\n\t\t\tsession_options = new Ort::SessionOptions;\n\t\t\tenv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\n\t\t\tsession_options->AppendExecutionProvider_CUDA(cuda_option);\n\t\t\tsession_options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\n\t\t\tsession_options->SetIntraOpNumThreads(1);\n\t\t\tmemory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n\t\t\tbreak;\n\t\t}\n#ifdef MOEVSDMLPROVIDER\n\t\tcase Device::DML:\n\t\t{\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\t\t\tstd::string ret;\n\t\t\tfor (const auto& it : AvailableProviders)\n\t\t\t\tif (it.find(\"Dml\") != std::string::npos)\n\t\t\t\t\tret = it;\n\t\t\tif (ret.empty())\n\t\t\t\tLibDLVoiceCodecThrow(\"DML Provider Not Found\");\n\t\t\tconst OrtApi& ortApi = Ort::GetApi();\n\t\t\tconst OrtDmlApi* ortDmlApi = nullptr;\n\t\t\tortApi.GetExecutionProviderApi(\"DML\", ORT_API_VERSION, reinterpret_cast<const void**>(&ortDmlApi));\n\n\t\t\tconst Ort::ThreadingOptions threadingOptions;\n\t\t\tenv = new Ort::Env(threadingOptions, ORT_LOGGING_LEVEL_VERBOSE, \"\");\n\t\t\tenv->DisableTelemetryEvents();\n\t\t\tsession_options = new Ort::SessionOptions;\n\t\t\tortDmlApi->SessionOptionsAppendExecutionProvider_DML(*session_options, int(__MoeVSGPUID));\n\t\t\tsession_options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\n\t\t\tsession_options->DisablePerSessionThreads();\n\t\t\tsession_options->SetExecutionMode(ORT_SEQUENTIAL);\n\t\t\tsession_options->DisableMemPattern();\n\t\t\tmemory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemType::OrtMemTypeCPU));\n\t\t\tbreak;\n\t\t}\n#endif\n\t\tdefault:\n\t\t{\n\t\t\tsession_options = new Ort::SessionOptions;\n\t\t\tenv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\n\t\t\tsession_options->SetIntraOpNumThreads(static_cast<int>(__MoeVSNumThreads));\n\t\t\tsession_options->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\n\t\t\tmemory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n\t\t\tbreak;\n\t\t}\n\t}\n}\n */\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/src/MoeVSProject.cpp",
    "content": "﻿#include \"../header/MoeVSProject.hpp\"\n#include \"../../InferTools/inferTools.hpp\"\n#include <cassert>\n\nnamespace MoeVSProjectSpace\n{\n    MoeVSProject::MoeVSProject(const std::wstring& _path)\n    {\n        FileWrapper project_file(_path.c_str(), L\"rb\");\n        if (!project_file.IsOpen())\n            LibDLVoiceCodecThrow(\"File Doesn't Exists\");\n        fseek(project_file, 0, SEEK_SET);\n\n        if (fread(&moevs_proj_header_, 1, sizeof(Header), project_file) != sizeof(Header))\n            LibDLVoiceCodecThrow(\"Unexpected EOF\");\n        if (!(moevs_proj_header_.ChunkSymbol[0] == 'M' && moevs_proj_header_.ChunkSymbol[1] == 'O' && moevs_proj_header_.ChunkSymbol[2] == 'E' && moevs_proj_header_.ChunkSymbol[3] == 'V' && moevs_proj_header_.ChunkSymbol[4] == 'S' && moevs_proj_header_.ChunkSymbol[5] == 'P' && moevs_proj_header_.ChunkSymbol[6] == 'R' && moevs_proj_header_.ChunkSymbol[7] == 'J'))\n            LibDLVoiceCodecThrow(\"Unrecognized File\");\n        if (moevs_proj_header_.DataHeaderAmount == 0)\n            LibDLVoiceCodecThrow(\"Empty Project\");\n\n\n        data_pos_ = std::vector<size_type>(moevs_proj_header_.DataHeaderAmount);\n        if (fread(data_pos_.data(), 1, sizeof(size_type) * (moevs_proj_header_.DataHeaderAmount), project_file) != sizeof(size_type) * (moevs_proj_header_.DataHeaderAmount))\n            LibDLVoiceCodecThrow(\"Unexpected EOF\");\n        data_chunk_begin_ = sizeof(Header) + sizeof(size_type) * (moevs_proj_header_.DataHeaderAmount);\n\n\n        size_type _n_bytes = 0;\n        const size_type _data_begin = data_chunk_begin_;\n        fseek(project_file, long(_data_begin), SEEK_SET);\n        for (const auto& _pos_index : data_pos_)\n        {\n            Data _datas;\n\n            //Header\n            if (fread(&_datas.Header, 1, sizeof(DataHeader), project_file) != sizeof(DataHeader))\n                LibDLVoiceCodecThrow(\"Unexpected EOF\");\n            if (!(_datas.Header.ChunkSymbol[0] == 'D' && _datas.Header.ChunkSymbol[1] == 'A' && _datas.Header.ChunkSymbol[2] == 'T' && _datas.Header.ChunkSymbol[3] == 'A'))\n                LibDLVoiceCodecThrow(\"Unrecognized File\");\n            _datas.ParamData.Slices.resize(_datas.Header.OrgLenSize);\n\n            //Audio\n            if (_datas.Header.OrgAudioOffsetPosSize != 0) {\n                _datas.Offset.OrgAudio = std::vector<size_type>(_datas.Header.OrgAudioOffsetPosSize);\n                _n_bytes = sizeof(size_type) * _datas.Header.OrgAudioOffsetPosSize;\n                if (fread(_datas.Offset.OrgAudio.data(), 1, _n_bytes, project_file) != _n_bytes)\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                size_t _data_idx = 0;\n                for (const auto& j : _datas.Offset.OrgAudio)\n                {\n                    if (!j) continue;\n                    std::vector<int16_t> hs_vector(j);\n                    _n_bytes = sizeof(int16_t) * j;\n                    if (fread(hs_vector.data(), 1, _n_bytes, project_file) != _n_bytes)\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                    _datas.ParamData.Slices[_data_idx].Audio = std::move(hs_vector);\n                    _data_idx += 1;\n                }\n            }\n\n\n            //F0\n            if (_datas.Header.F0OffsetPosSize != 0)\n            {\n                _datas.Offset.F0 = std::vector<size_type>(_datas.Header.F0OffsetPosSize);\n                _n_bytes = sizeof(size_type) * _datas.Header.F0OffsetPosSize;\n                if (fread(_datas.Offset.F0.data(), 1, _n_bytes, project_file) != _n_bytes)\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                size_t _data_idx = 0;\n                for (const auto& j : _datas.Offset.F0)\n                {\n                    if (!j) continue;\n                    std::vector<float> f0_vector(j);\n                    _n_bytes = sizeof(float) * j;\n                    if (fread(f0_vector.data(), 1, _n_bytes, project_file) != _n_bytes)\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                    _datas.ParamData.Slices[_data_idx].F0 = std::move(f0_vector);\n                    _data_idx += 1;\n                }\n            }\n\n\n            //Volume\n            if (_datas.Header.VolumeOffsetPosSize != 0)\n            {\n                _datas.Offset.Volume = std::vector<size_type>(_datas.Header.VolumeOffsetPosSize);\n                _n_bytes = sizeof(size_type) * _datas.Header.VolumeOffsetPosSize;\n                if (fread(_datas.Offset.Volume.data(), 1, _n_bytes, project_file) != _n_bytes)\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                size_t _data_idx = 0;\n                for (const auto& j : _datas.Offset.Volume)\n                {\n                    if (!j) continue;\n                    std::vector<float> Volume_vector(j);\n                    _n_bytes = sizeof(float) * j;\n                    if (fread(Volume_vector.data(), 1, _n_bytes, project_file) != _n_bytes)\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                    _datas.ParamData.Slices[_data_idx].Volume = std::move(Volume_vector);\n                    _data_idx += 1;\n                }\n            }\n\n\n            //ChrarcterMix\n            if (_datas.Header.CharacterOffsetPosSize != 0)\n            {\n                _datas.Offset.Speaker = std::vector<size_type>(_datas.Header.CharacterOffsetPosSize);\n                _n_bytes = sizeof(size_type) * _datas.Header.CharacterOffsetPosSize;\n                if (fread(_datas.Offset.Speaker.data(), 1, _n_bytes, project_file) != _n_bytes)\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                size_t _data_idx = 0;\n                for (const auto& j : _datas.Offset.Speaker)\n                {\n                    if (!j) continue;\n\n                    size_type NSpeaker = 0;\n                    if (fread(&NSpeaker, 1, sizeof(size_type), project_file) != sizeof(size_type))\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                    if (!NSpeaker) continue;\n\n                    std::vector<float> Speaker_vector(j);\n                    _n_bytes = sizeof(float) * j;\n                    if (fread(Speaker_vector.data(), 1, _n_bytes, project_file) != _n_bytes)\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                    std::vector<std::vector<float>> SpkVec;\n                    if (!Speaker_vector.empty())\n                    {\n                        const auto frames = Speaker_vector.size() / NSpeaker;\n                        for (size_t idxs = 0; idxs < NSpeaker; ++idxs)\n                            SpkVec.emplace_back(Speaker_vector.data() + idxs * frames, Speaker_vector.data() + (idxs + 1) * frames);\n                    }\n                    _datas.ParamData.Slices[_data_idx].Speaker = std::move(SpkVec);\n                    _data_idx += 1;\n                }\n            }\n\n\n            //OrgLen\n            if (_datas.Header.OrgLenSize != 0)\n            {\n                std::vector<long> OrgLen(_datas.Header.OrgLenSize);\n                _n_bytes = sizeof(long) * _datas.Header.OrgLenSize;\n                if (fread(OrgLen.data(), 1, _n_bytes, project_file) != _n_bytes)\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                for (size_t _data_idx = 0; _data_idx < OrgLen.size(); ++_data_idx)\n                    _datas.ParamData.Slices[_data_idx].OrgLen = OrgLen[_data_idx];\n            }\n\n\n            //Symbol\n            if (_datas.Header.SymbolSize != 0)\n            {\n                std::vector<unsigned char> BooleanVector(_datas.Header.SymbolSize);\n                _n_bytes = _datas.Header.SymbolSize;\n                if (fread(BooleanVector.data(), 1, _n_bytes, project_file) != _n_bytes)\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                for (size_t _data_idx = 0; _data_idx < BooleanVector.size(); ++_data_idx)\n                    _datas.ParamData.Slices[_data_idx].IsNotMute = BooleanVector[_data_idx];\n            }\n\n\n            //path\n            if (_datas.Header.PathSize != 0)\n            {\n                std::vector<char> PathStr(_datas.Header.PathSize);\n                _n_bytes = _datas.Header.PathSize;\n                if (fread(PathStr.data(), 1, _n_bytes, project_file) != _n_bytes)\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\n                _datas.ParamData.Path = to_wide_string(PathStr.data());\n            }\n\n            data_.emplace_back(std::move(_datas));\n        }\n    }\n\n    MoeVSProject::MoeVSProject(const std::vector<MoeVoiceStudioSvcData>& _params)\n    {\n        moevs_proj_header_.DataHeaderAmount = size_type(_params.size());\n        data_chunk_begin_ = sizeof(Header) + sizeof(size_type) * (moevs_proj_header_.DataHeaderAmount);\n        data_pos_.push_back(0);\n        size_type _offset = 0;\n        for (const auto& i : _params)\n        {\n            Data _data;\n            _data.ParamData = i;\n            for (const auto& SliceData : i.Slices)\n            {\n                _data.Offset.OrgAudio.push_back(SliceData.Audio.size());\n                _data.Offset.F0.push_back(SliceData.F0.size());\n                _data.Offset.Volume.push_back(SliceData.Volume.size());\n                size_t size__ = 0;\n                for (auto& Speaker : SliceData.Speaker)\n                {\n                    size__ += Speaker.size();\n                }\n                _data.Offset.Speaker.push_back(size__);\n            }\n            _data.Header.OrgAudioOffsetPosSize = _data.Offset.OrgAudio.size();\n            _data.Header.F0OffsetPosSize = _data.Offset.F0.size();\n            _data.Header.VolumeOffsetPosSize = _data.Offset.Volume.size();\n            _data.Header.CharacterOffsetPosSize = _data.Offset.Speaker.size();\n            _data.Header.OrgLenSize = i.Slices.size();\n            _data.Header.SymbolSize = i.Slices.size();\n            const std::string bytePath = to_byte_string(i.Path);\n            _data.Header.PathSize = bytePath.length() + 1;\n            _offset += _data.Size();\n            data_pos_.push_back(_offset);\n            data_.emplace_back(std::move(_data));\n        }\n        data_pos_.pop_back();\n    }\n\n    void MoeVSProject::Write(const std::wstring& _path) const\n    {\n        FILE* project_file = nullptr;\n        _wfopen_s(&project_file, _path.c_str(), L\"wb\");\n        if (!project_file)\n            LibDLVoiceCodecThrow(\"Cannot Create File\");\n\n        fwrite(&moevs_proj_header_, 1, sizeof(Header), project_file);\n        fwrite(data_pos_.data(), 1, data_pos_.size() * sizeof(size_type), project_file);\n\n        for (const auto& i : data_)\n        {\n            fwrite(&i.Header, 1, sizeof(DataHeader), project_file);\n\n\n            fwrite(i.Offset.OrgAudio.data(), 1, sizeof(size_type) * i.Offset.OrgAudio.size(), project_file);\n            for (const auto& orgaudio : i.ParamData.Slices)\n                fwrite(orgaudio.Audio.data(), 1, orgaudio.Audio.size() * sizeof(int16_t), project_file);\n\n\n            fwrite(i.Offset.F0.data(), 1, sizeof(size_type) * i.Offset.F0.size(), project_file);\n            for (const auto& f0 : i.ParamData.Slices)\n                fwrite(f0.F0.data(), 1, f0.F0.size() * sizeof(float), project_file);\n\n\n            if (i.Header.VolumeOffsetPosSize != 0)\n            {\n                fwrite(i.Offset.Volume.data(), 1, sizeof(size_type) * i.Offset.Volume.size(), project_file);\n                for (const auto& volume : i.ParamData.Slices)\n                    fwrite(volume.Volume.data(), 1, volume.Volume.size() * sizeof(float), project_file);\n            }\n\n            if (i.Header.CharacterOffsetPosSize != 0)\n            {\n                fwrite(i.Offset.Speaker.data(), 1, sizeof(size_type) * i.Offset.Speaker.size(), project_file);\n                for (const auto& Speaker : i.ParamData.Slices)\n                {\n                    if (Speaker.Speaker.empty()) continue;\n                    const size_type NSPK = Speaker.Speaker.size();\n                    fwrite(&NSPK, 1, sizeof(size_type), project_file);\n                    for (const auto& Spkk : Speaker.Speaker)\n                        fwrite(Spkk.data(), 1, Spkk.size() * sizeof(float), project_file);\n                }\n            }\n\n            assert(i.ParamData.Slices.size() == i.Header.OrgLenSize);\n            std::vector<long> CurOrgLen(i.Header.OrgLenSize);\n            for (size_t index = 0; index < i.ParamData.Slices.size(); ++index)\n                CurOrgLen[index] = i.ParamData.Slices[index].OrgLen;\n            fwrite(CurOrgLen.data(), 1, sizeof(long) * CurOrgLen.size(), project_file);\n\n            assert(i.ParamData.Slices.size() == i.Header.SymbolSize);\n            std::vector<char> BooleanVector(i.Header.SymbolSize);\n            for (size_t index = 0; index < i.ParamData.Slices.size(); ++index)\n                BooleanVector[index] = i.ParamData.Slices[index].IsNotMute ? 1 : 0;\n            fwrite(BooleanVector.data(), 1, i.Header.SymbolSize, project_file);\n\n            const std::string bytePath = to_byte_string(i.ParamData.Path);\n            fwrite(bytePath.data(), 1, i.Header.PathSize, project_file);\n        }\n        fclose(project_file);\n    }\n\n    std::wstring MoeVSTTSToken::Serialization() const\n    {\n        if (Text.empty())\n            return L\"\\t\\t\\t{ }\";\n        std::wstring rtn = L\"\\t\\t\\t{\\n\";\n        rtn += L\"\\t\\t\\t\\t\\\"Text\\\": \\\"\" + Text + L\"\\\",\\n\";\n        rtn += L\"\\t\\t\\t\\t\\\"Phonemes\\\": \" + wstring_vector_to_string(Phonemes) + L\",\\n\";\n        rtn += L\"\\t\\t\\t\\t\\\"Tones\\\": \" + vector_to_string(Tones) + L\",\\n\";\n        rtn += L\"\\t\\t\\t\\t\\\"Durations\\\": \" + vector_to_string(Durations) + L\",\\n\";\n        rtn += L\"\\t\\t\\t\\t\\\"Language\\\": \" + string_vector_to_string(Language) + L\"\\n\\t\\t\\t}\";\n        return rtn;\n    }\n\n    MoeVSTTSToken::MoeVSTTSToken(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams)\n    {\n        if (_JsonDocument.HasMember(\"Text\") && _JsonDocument[\"Text\"].IsString() && !_JsonDocument[\"Text\"].Empty())\n            Text = to_wide_string(_JsonDocument[\"Text\"].GetString());\n        else\n            LibDLVoiceCodecThrow(\"Field \\\"Text\\\" Should Not Be Empty\")\n\n            if (_JsonDocument.HasMember(\"Phonemes\") && _JsonDocument[\"Phonemes\"].IsArray())\n                for (const auto& j : _JsonDocument[\"Phonemes\"].GetArray())\n                    Phonemes.emplace_back(j.IsString() ? to_wide_string(j.GetString()) : L\"[UNK]\");\n\n        if (_JsonDocument.HasMember(\"Tones\") && _JsonDocument[\"Tones\"].IsArray())\n            for (const auto& j : _JsonDocument[\"Tones\"].GetArray())\n                Tones.emplace_back(j.IsInt() ? j.GetInt() : 0);\n\n        if (_JsonDocument.HasMember(\"Durations\") && _JsonDocument[\"Durations\"].IsArray())\n            for (const auto& j : _JsonDocument[\"Durations\"].GetArray())\n                Durations.emplace_back(j.IsInt() ? j.GetInt() : 0);\n\n        if (_JsonDocument.HasMember(\"Language\") && _JsonDocument[\"Language\"].IsArray())\n        {\n            const auto LanguageArr = _JsonDocument[\"Language\"].GetArray();\n            if (!LanguageArr.empty() && LanguageArr[0].IsString())\n                for (const auto& j : LanguageArr)\n                    Language.emplace_back(j.GetString());\n        }\n    }\n\n    std::wstring MoeVSTTSSeq::Serialization() const\n    {\n        if (TextSeq.empty())\n            return L\"\";\n        std::wstring rtn = L\"\\t{\\n\";\n        rtn += L\"\\t\\t\\\"TextSeq\\\": \\\"\" + TextSeq + L\"\\\",\\n\";\n        rtn += L\"\\t\\t\\\"SlicedTokens\\\": [\\n\";\n        for (const auto& iter : SlicedTokens)\n            rtn += iter.Serialization() + L\",\\n\";\n        if (!SlicedTokens.empty())\n            rtn.erase(rtn.end() - 2);\n        rtn += L\"\\t\\t],\\n\";\n        rtn += L\"\\t\\t\\\"SpeakerMix\\\": \" + vector_to_string(SpeakerMix) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"EmotionPrompt\\\": \" + wstring_vector_to_string(EmotionPrompt) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"NoiseScale\\\": \" + std::to_wstring(NoiseScale) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"LengthScale\\\": \" + std::to_wstring(LengthScale) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"DurationPredictorNoiseScale\\\": \" + std::to_wstring(DurationPredictorNoiseScale) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"FactorDpSdp\\\": \" + std::to_wstring(FactorDpSdp) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"GateThreshold\\\": \" + std::to_wstring(GateThreshold) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"MaxDecodeStep\\\": \" + std::to_wstring(MaxDecodeStep) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"Seed\\\": \" + std::to_wstring(Seed) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"SpeakerName\\\": \\\"\" + SpeakerName + L\"\\\",\\n\";\n        rtn += L\"\\t\\t\\\"RestTime\\\": \" + std::to_wstring(RestTime) + L\",\\n\";\n        rtn += L\"\\t\\t\\\"PlaceHolderSymbol\\\": \\\"\" + PlaceHolderSymbol + L\"\\\",\\n\";\n        rtn += L\"\\t\\t\\\"LanguageSymbol\\\": \\\"\" + to_wide_string(LanguageSymbol) + L\"\\\",\\n\";\n        rtn += L\"\\t\\t\\\"G2PAdditionalInfo\\\": \\\"\" + AdditionalInfo + L\"\\\"\\n\\t}\";\n        return rtn;\n    }\n\n    MoeVSTTSSeq::MoeVSTTSSeq(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams)\n    {\n        if (_JsonDocument.HasMember(\"LanguageSymbol\") && _JsonDocument[\"LanguageSymbol\"].IsString() && !_JsonDocument[\"LanguageSymbol\"].Empty())\n            LanguageSymbol = _JsonDocument[\"LanguageSymbol\"].GetString();\n        else\n            LanguageSymbol = _InitParams.LanguageSymbol;\n\n        if (_JsonDocument.HasMember(\"G2PAdditionalInfo\") && _JsonDocument[\"G2PAdditionalInfo\"].IsString() && !_JsonDocument[\"G2PAdditionalInfo\"].Empty())\n            AdditionalInfo = to_wide_string(_JsonDocument[\"G2PAdditionalInfo\"].GetString());\n        else\n            AdditionalInfo = _InitParams.AdditionalInfo;\n\n        if (_JsonDocument.HasMember(\"PlaceHolderSymbol\") && _JsonDocument[\"PlaceHolderSymbol\"].IsString() && !_JsonDocument[\"PlaceHolderSymbol\"].Empty())\n            PlaceHolderSymbol = to_wide_string(_JsonDocument[\"PlaceHolderSymbol\"].GetString());\n        else\n            PlaceHolderSymbol = _InitParams.PlaceHolderSymbol;\n\n        if (_JsonDocument.HasMember(\"TextSeq\") && _JsonDocument[\"TextSeq\"].IsString() && !_JsonDocument[\"TextSeq\"].Empty())\n            TextSeq = to_wide_string(_JsonDocument[\"TextSeq\"].GetString());\n        else\n            LibDLVoiceCodecThrow(\"Field \\\"TextSeq\\\" Should Not Be Empty\")\n\n            if (_JsonDocument.HasMember(\"SlicedTokens\") && _JsonDocument[\"SlicedTokens\"].IsArray())\n            {\n                const auto TokensArrayObject = _JsonDocument[\"SlicedTokens\"].GetArray();\n                for (const auto& iter : TokensArrayObject)\n                    SlicedTokens.emplace_back(iter, _InitParams);\n            }\n\n        if (_JsonDocument.HasMember(\"SpeakerMix\") && _JsonDocument[\"SpeakerMix\"].IsArray())\n            for (const auto& j : _JsonDocument[\"SpeakerMix\"].GetArray())\n                SpeakerMix.emplace_back(j.IsFloat() ? j.GetFloat() : 0.f);\n        else\n            SpeakerMix = _InitParams.SpeakerMix;\n        if (_JsonDocument.HasMember(\"EmotionPrompt\") && _JsonDocument[\"EmotionPrompt\"].IsArray())\n            for (const auto& j : _JsonDocument[\"EmotionPrompt\"].GetArray())\n                EmotionPrompt.emplace_back(j.IsString() ? to_wide_string(j.GetString()) : std::wstring());\n        else\n            EmotionPrompt = _InitParams.EmotionPrompt;\n        if (_JsonDocument.HasMember(\"NoiseScale\") && _JsonDocument[\"NoiseScale\"].IsFloat())\n            NoiseScale = _JsonDocument[\"NoiseScale\"].GetFloat();\n        else\n            NoiseScale = _InitParams.NoiseScale;\n        if (_JsonDocument.HasMember(\"LengthScale\") && _JsonDocument[\"LengthScale\"].IsFloat())\n            LengthScale = _JsonDocument[\"LengthScale\"].GetFloat();\n        else\n            LengthScale = _InitParams.LengthScale;\n        if (_JsonDocument.HasMember(\"RestTime\") && _JsonDocument[\"RestTime\"].IsFloat())\n            RestTime = _JsonDocument[\"RestTime\"].GetFloat();\n        else\n            RestTime = _InitParams.RestTime;\n        if (_JsonDocument.HasMember(\"DurationPredictorNoiseScale\") && _JsonDocument[\"DurationPredictorNoiseScale\"].IsFloat())\n            DurationPredictorNoiseScale = _JsonDocument[\"DurationPredictorNoiseScale\"].GetFloat();\n        else\n            DurationPredictorNoiseScale = _InitParams.DurationPredictorNoiseScale;\n        if (_JsonDocument.HasMember(\"FactorDpSdp\") && _JsonDocument[\"FactorDpSdp\"].IsFloat())\n            FactorDpSdp = _JsonDocument[\"FactorDpSdp\"].GetFloat();\n        else\n            FactorDpSdp = _InitParams.FactorDpSdp;\n        if (_JsonDocument.HasMember(\"GateThreshold\") && _JsonDocument[\"GateThreshold\"].IsFloat())\n            GateThreshold = _JsonDocument[\"GateThreshold\"].GetFloat();\n        else\n            GateThreshold = _InitParams.GateThreshold;\n        if (_JsonDocument.HasMember(\"MaxDecodeStep\") && _JsonDocument[\"MaxDecodeStep\"].IsFloat())\n            MaxDecodeStep = _JsonDocument[\"MaxDecodeStep\"].GetInt();\n        else\n            MaxDecodeStep = _InitParams.MaxDecodeStep;\n        if (_JsonDocument.HasMember(\"Seed\") && _JsonDocument[\"Seed\"].IsInt())\n            Seed = _JsonDocument[\"Seed\"].GetInt();\n        else\n            Seed = _InitParams.Seed;\n        if (_JsonDocument.HasMember(\"SpeakerName\") && _JsonDocument[\"SpeakerName\"].IsString())\n            SpeakerName = to_wide_string(_JsonDocument[\"SpeakerName\"].GetString());\n        else\n            SpeakerName = _InitParams.SpeakerName;\n\n        if (MaxDecodeStep < 2000) MaxDecodeStep = 2000;\n        if (MaxDecodeStep > 20000) MaxDecodeStep = 20000;\n        if (GateThreshold > 0.90f) GateThreshold = 0.90f;\n        if (GateThreshold < 0.2f) GateThreshold = 0.2f;\n        if (FactorDpSdp > 1.f) FactorDpSdp = 1.f;\n        if (FactorDpSdp < 0.f) FactorDpSdp = 0.f;\n        if (NoiseScale > 10.f) NoiseScale = 10.f;\n        if (NoiseScale < 0.f) NoiseScale = 0.f;\n        if (DurationPredictorNoiseScale > 10.f) DurationPredictorNoiseScale = 10.f;\n        if (DurationPredictorNoiseScale < 0.f) DurationPredictorNoiseScale = 0.f;\n        if (RestTime > 30.f) RestTime = 30.f;\n        if (LengthScale > 10.f) LengthScale = 10.f;\n        if (LengthScale < 0.1f) LengthScale = 0.1f;\n    }\n\n    bool MoeVSTTSSeq::operator==(const MoeVSTTSSeq& right) const\n    {\n        return Serialization() == right.Serialization();\n    }\n}"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/src/SVC.cpp",
    "content": "﻿#include \"../header/SVC.hpp\"\n#include \"../../InferTools/F0Extractor/F0ExtractorManager.hpp\"\n\nMoeVoiceStudioCoreHeader\n\nSingingVoiceConversion::SingingVoiceConversion(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) : MoeVoiceStudioModule(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioSingingVoiceConversion\");\n}\n\nSingingVoiceConversion::~SingingVoiceConversion()\n{\n\tdelete hubert;\n\thubert = nullptr;\n}\n\nstd::vector<std::wstring> SingingVoiceConversion::Inference(std::wstring& _Paths,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\n{\n\tMoeVSNotImplementedError;\n}\n\nstd::vector<int16_t> SingingVoiceConversion::InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\tMoeVSNotImplementedError;\n}\n\nstd::vector<int16_t> SingingVoiceConversion::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\tMoeVSNotImplementedError;\n}\n\nstd::vector<int16_t> SingingVoiceConversion::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const\n{\n\tMoeVSNotImplementedError;\n}\n\nstd::vector<float> SingingVoiceConversion::ExtractVolume(const std::vector<int16_t>& OrgAudio, int hop_size)\n{\n\tstd::vector<double> Audio;\n\tAudio.reserve(OrgAudio.size() * 2);\n\tAudio.insert(Audio.end(), hop_size, double(OrgAudio[0]) / 32768.);\n\tfor (const auto i : OrgAudio)\n\t\tAudio.emplace_back((double)i / 32768.);\n\tAudio.insert(Audio.end(), hop_size, double(OrgAudio[OrgAudio.size() - 1]) / 32768.);\n\tconst size_t n_frames = (OrgAudio.size() / hop_size) + 1;\n\tstd::vector<float> volume(n_frames);\n\tfor (auto& i : Audio)\n\t\ti = pow(i, 2);\n\tint64_t index = 0;\n\tfor (auto& i : volume)\n\t{\n\t\ti = sqrt((float)InferTools::getAvg(Audio.begin()._Ptr + index * hop_size, Audio.begin()._Ptr + (index + 1) * hop_size));\n\t\t++index;\n\t}\n\treturn volume;\n}\n\nstd::vector<float> SingingVoiceConversion::ExtractVolume(const std::vector<double>& OrgAudio) const\n{\n\tstd::vector<double> Audio;\n\tAudio.reserve(OrgAudio.size() * 2);\n\tAudio.insert(Audio.end(), HopSize, OrgAudio[0]);\n\tAudio.insert(Audio.end(), OrgAudio.begin(), OrgAudio.end());\n\tAudio.insert(Audio.end(), HopSize, OrgAudio[OrgAudio.size() - 1]);\n\tconst size_t n_frames = (OrgAudio.size() / HopSize) + 1;\n\tstd::vector<float> volume(n_frames);\n\tfor (auto& i : Audio)\n\t\ti = pow(i, 2);\n\tint64_t index = 0;\n\tfor (auto& i : volume)\n\t{\n\t\ti = sqrt((float)InferTools::getAvg(Audio.begin()._Ptr + index * HopSize, Audio.begin()._Ptr + (index + 1) * HopSize));\n\t\t++index;\n\t}\n\treturn volume;\n}\n\nMoeVSProjectSpace::MoeVoiceStudioSvcData SingingVoiceConversion::GetAudioSlice(const std::vector<int16_t>& input,\n\tconst std::vector<size_t>& _slice_pos,\n\tconst InferTools::SlicerSettings& _slicer)\n{\n\tMoeVSProjectSpace::MoeVoiceStudioSvcData audio_slice;\n\tfor (size_t i = 1; i < _slice_pos.size(); i++)\n\t{\n\t\tMoeVSProjectSpace::MoeVoiceStudioSvcSlice _CurSlice;\n\t\tconst bool is_not_mute = abs(InferTools::getAvg((input.data() + _slice_pos[i - 1]), (input.data() + _slice_pos[i]))) > _slicer.Threshold;\n\t\t_CurSlice.IsNotMute = is_not_mute;\n\t\t_CurSlice.OrgLen = long(_slice_pos[i] - _slice_pos[i - 1]);\n\t\tif (is_not_mute)\n\t\t\t_CurSlice.Audio = { (input.data() + _slice_pos[i - 1]), (input.data() + _slice_pos[i]) };\n\t\telse\n\t\t\t_CurSlice.Audio.clear();\n\t\taudio_slice.Slices.emplace_back(std::move(_CurSlice));\n\t}\n\treturn audio_slice;\n}\n\nvoid SingingVoiceConversion::PreProcessAudio(MoeVSProjectSpace::MoeVoiceStudioSvcData& input,\n\tint __SamplingRate, int __HopSize, const std::wstring& _f0_method)\n{\n\tconst auto F0Extractor = MoeVSF0Extractor::GetF0Extractor(_f0_method, __SamplingRate, __HopSize);\n\tconst auto num_slice = input.Slices.size();\n\tfor (size_t i = 0; i < num_slice; ++i)\n\t{\n\t\tif (input.Slices[i].IsNotMute)\n\t\t{\n\t\t\tinput.Slices[i].F0 = F0Extractor->ExtractF0(input.Slices[i].Audio, input.Slices[i].Audio.size() / __HopSize);\n\t\t\tinput.Slices[i].Volume = ExtractVolume(input.Slices[i].Audio, __HopSize);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tinput.Slices[i].F0.clear();\n\t\t\tinput.Slices[i].Volume.clear();\n\t\t}\n\t\tinput.Slices[i].Speaker.clear();\n\t}\n}\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/src/TTS.cpp",
    "content": "﻿#include \"../header/TTS.hpp\"\n#include <set>\n\nMoeVoiceStudioCoreHeader\nstd::unordered_map<std::wstring, int64_t> _ACCMAP{\n\t{ L\"[acc_6]\", 6 }, { L\"[acc_5]\", 5 }, { L\"[acc_4]\", 4 }, { L\"[acc_3]\", 3 }, { L\"[acc_2]\", 2 }, { L\"[acc_1]\", 1 },\n\t{ L\"[acc_-4]\", -4 }, { L\"[acc_-3]\", -3 }, { L\"[acc_-2]\", -2 }, { L\"[acc_-1]\", -1 },\n};\n\nstd::unordered_map<std::string, std::string> _LANGREPMAP{\n\t{\"CHINESE\", \"ZH\"}, { \"CHINA\", \"ZH\" },\n\t{ \"JAPAN\", \"JP\" }, { \"JAPANESE\", \"JP\" }, { \"JA\", \"JP\" },\n\t{ \"ENGLISH\", \"EN\" }\n};\n\nvoid PreventNoobsInputErrors(std::string& _Src)\n{\n\tfor (auto& i : _Src)\n\t\ti = char(toupper(i));\n\tconst auto res = _LANGREPMAP.find(_Src);\n\tif (res != _LANGREPMAP.end())\n\t\t_Src = res->second;\n}\n\nTextToSpeech::TextToSpeech(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) : MoeVoiceStudioModule(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioTextToSpeech\");\n}\n\nstd::vector<MoeVSProjectSpace::MoeVSTTSSeq> TextToSpeech::GetInputSeqs(const MJson& _Input, const MoeVSProjectSpace::MoeVSParams& _InitParams) const\n{\n\tauto InputSeq = GetInputSeqsStatic(_Input, _InitParams);\n\treturn SpecializeInputSeqs(InputSeq);\n}\n\nstd::tuple<std::vector<std::wstring>, std::vector<int64_t>> TextToSpeech::SplitTonesFromTokens(const std::vector<std::wstring>& _Src, const std::vector<int64_t>& _ToneRef, int64_t FirstToneIdx, const std::string& LanguageSymbol)\n{\n\tif (_Src.empty())\n\t\treturn{ {},{} };\n\tstd::vector<std::wstring> TempSeqVec;\n\tstd::vector<int64_t> TempToneVec;\n\tTempSeqVec.reserve(_Src.size());\n\tTempToneVec.reserve(_Src.size());\n\tfor (const auto& it : _Src)\n\t{\n\t\tif (_ACCMAP.find(it) == _ACCMAP.end())\n\t\t{\n\t\t\tTempSeqVec.emplace_back(it);\n\t\t\tTempToneVec.emplace_back(0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (TempToneVec.empty())\n\t\t\t\tcontinue;\n\t\t\t*(TempToneVec.end() - 1) = _ACCMAP.at(it);\n\t\t\tif (TempToneVec.size() > 1 && *(TempToneVec.end() - 2) == 0 && LanguageSymbol == \"ZH\")\n\t\t\t\t*(TempToneVec.end() - 2) = *(TempToneVec.end() - 1);\n\t\t}\n\t}\n\tif (TempToneVec.size() == _ToneRef.size())\n\t{\n\t\tfor (size_t i = 0; i < _ToneRef.size(); ++i)\n\t\t\tif (_ToneRef[i] != 0)\n\t\t\t\tTempToneVec[i] = _ToneRef[i];\n\t}\n\n\tif (FirstToneIdx)\n\t\tfor (auto& it : TempToneVec)\n\t\t\tit += FirstToneIdx;\n\n\treturn { std::move(TempSeqVec) ,std::move(TempToneVec) };\n}\n\nstd::vector<MoeVSProjectSpace::MoeVSTTSSeq>& TextToSpeech::SpecializeInputSeqs(std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Seq) const\n{\n\tfor (auto& _Temp : _Seq)\n\t{\n\t\tPreventNoobsInputErrors(_Temp.LanguageSymbol);\n\n\t\tconst int64_t FirstToneIdx = LanguageTones.at(_Temp.LanguageSymbol);\n\n\t\tfor(auto& _iter : _Temp.SlicedTokens)\n\t\t{\n\t\t\tif (!_iter.Phonemes.empty())\n\t\t\t{\n\t\t\t\tauto RtnData = SplitTonesFromTokens(_iter.Phonemes, _iter.Tones, FirstToneIdx, _Temp.LanguageSymbol);\n\t\t\t\t_iter.Phonemes = std::move(std::get<0>(RtnData));\n\t\t\t\t_iter.Tones = std::move(std::get<1>(RtnData));\n\t\t\t}\n\t\t\telse if (FirstToneIdx)\n\t\t\t\tfor (auto& it : _iter.Tones)\n\t\t\t\t\tit += FirstToneIdx;\n\t\t}\n\t}\n\treturn _Seq;\n}\n\nstd::vector<MoeVSProjectSpace::MoeVSTTSSeq> TextToSpeech::GetInputSeqsStatic(const MJson& _Input, const MoeVSProjectSpace::MoeVSParams& _InitParams)\n{\n\tif (!_Input.IsArray())\n\t\tLibDLVoiceCodecThrow(\"JSON Type Must Be Array\")\n\tconst auto _InpArr = _Input.GetArray();\n\tstd::vector<MoeVSProjectSpace::MoeVSTTSSeq> _TTSInputSeqs;\n\t_TTSInputSeqs.reserve(_InpArr.size());\n\tfor (const auto& iter : _InpArr)\n\t\t_TTSInputSeqs.emplace_back(iter, _InitParams);\n\treturn _TTSInputSeqs;\n}\n\nstd::vector<float> TextToSpeech::GetEmotionVector(const std::vector<std::wstring>& src) const\n{\n\tif (src.empty())\n\t\treturn EmoLoader[0];\n\tstd::vector<float> dst(1024, 0.0);\n\tuint64_t mul = 0;\n\tfor(const auto& iter : src)\n\t{\n\t\tlong emoId;\n\t\tconst auto emoStr = to_byte_string(iter);\n\t\tif (!EmoJson[emoStr].Empty())\n\t\t\temoId = EmoJson[emoStr].GetInt();\n\t\telse\n\t\t\temoId = atoi(emoStr.c_str());\n\t\tauto emoVec = EmoLoader[emoId];\n\t\tfor (size_t i = 0; i < 1024; ++i)\n\t\t\tdst[i] = dst[i] + (emoVec[i] - dst[i]) / (float)(mul + 1ull);\n\t\t++mul;\n\t}\n\treturn dst;\n}\n\nstd::vector<std::vector<bool>> TextToSpeech::generatePath(float* duration, size_t durationSize, size_t maskSize)\n{\n\tfor (size_t i = 1; i < maskSize; ++i)\n\t\tduration[i] = duration[i - 1] + duration[i];\n\tstd::vector<std::vector<bool>> path(durationSize, std::vector<bool>(maskSize, false));\n\t//const auto path = new float[maskSize * durationSize];\n\t/*\n\tfor (size_t i = 0; i < maskSize; ++i)\n\t\tfor (size_t j = 0; j < durationSize; ++j)\n\t\t\tpath[i][j] = (j < (size_t)duration[i] ? 1.0f : 0.0f);\n\tfor (size_t i = maskSize - 1; i > 0ull; --i)\n\t\tfor (size_t j = 0; j < durationSize; ++j)\n\t\t\tpath[i][j] -= path[i-1][j];\n\t */\n\tauto dur = (size_t)duration[0];\n\tfor (size_t j = 0; j < dur; ++j)\n\t\tpath[j][0] = true;\n\t/*\n\tfor (size_t i = maskSize - 1; i > 0ull; --i)\n\t\tfor (size_t j = 0; j < durationSize; ++j)\n\t\t\tpath[i][j] = (j < (size_t)duration[i] && j >= (size_t)duration[i - 1]);\n\tstd::vector<std::vector<float>> tpath(durationSize, std::vector<float>(maskSize));\n\tfor (size_t i = 0; i < maskSize; ++i)\n\t\tfor (size_t j = 0; j < durationSize; ++j)\n\t\t\ttpath[j][i] = path[i][j];\n\t */\n\tfor (size_t j = maskSize - 1; j > 0ull; --j)\n\t{\n\t\tdur = (size_t)duration[j];\n\t\tfor (auto i = (size_t)duration[j - 1]; i < dur && i < durationSize; ++i)\n\t\t\tpath[i][j] = true;\n\t}\n\treturn path;\n}\n\nstd::vector<std::vector<int16_t>> TextToSpeech::Inference(const std::wstring& _Seq, const MoeVSProjectSpace::MoeVSParams& _InferParams) const\n{\n\tif (_Seq.empty())\n\t\treturn {};\n\treturn Inference(GetInputSeqs({ to_byte_string(_Seq), true }, _InferParams));\n}\n\nstd::vector<std::vector<int16_t>> TextToSpeech::Inference(const MJson& _Inputs, const MoeVSProjectSpace::MoeVSParams& _InferParams) const\n{\n\treturn Inference(GetInputSeqs(_Inputs, _InferParams));\n}\n\nstd::vector<std::wstring> TextToSpeech::Inference(std::wstring& _Datas, const MoeVSProjectSpace::MoeVSParams& _InferParams, const InferTools::SlicerSettings& _SlicerSettings) const\n{\n\treturn Inference(_Datas, _InferParams,false);\n}\n\nstd::vector<std::wstring> TextToSpeech::Inference(const std::wstring& _Seq, const MoeVSProjectSpace::MoeVSParams& _InferParams, bool T) const\n{\n\tconst std::vector<std::vector<int16_t>> PCM = Inference(GetInputSeqs({ to_byte_string(_Seq), true }, _InferParams));\n\tstd::vector<std::wstring> AudioFolders;\n\n\tif (_Seq.empty())\n\t\treturn {};\n\n\tAudioFolders.reserve(PCM.size());\n\tfor (const auto& i : PCM)\n\t{\n\t\tstd::wstring OutFolder = GetCurrentFolder() + L\"/Outputs/BatchInference\";\n\t\tif (_waccess((OutFolder + L\".wav\").c_str(), 0) != -1)\n\t\t{\n\t\t\tfor (size_t idx = 0; idx < 99999999; ++idx)\n\t\t\t\tif (_waccess((OutFolder + L\" (\" + std::to_wstring(idx) + L\").wav\").c_str(), 0) == -1)\n\t\t\t\t{\n\t\t\t\t\tOutFolder += L\" (\" + std::to_wstring(idx) + L\").wav\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\t\telse\n\t\t\tOutFolder += L\".wav\";\n\t\tAudioFolders.emplace_back(OutFolder);\n\t\tInferTools::Wav::WritePCMData(_samplingRate, 1, i, OutFolder);\n\t}\n\treturn AudioFolders;\n}\n\nstd::vector<std::vector<int16_t>> TextToSpeech::Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const\n{\n\tMoeVSNotImplementedError\n}\n\nstd::vector<size_t> TextToSpeech::GetAligments(size_t DstLen, size_t SrcLen)\n{\n\tstd::vector<size_t> bert2ph(DstLen + 1, 0);\n\n\tsize_t startFrame = 0;\n\tconst double ph_durs = static_cast<double>(DstLen) / static_cast<double>(SrcLen);\n\tfor (size_t iph = 0; iph < SrcLen; ++iph)\n\t{\n\t\tconst auto endFrame = static_cast<size_t>(round(static_cast<double>(iph) * ph_durs + ph_durs));\n\t\tfor (auto j = startFrame; j < endFrame + 1; ++j)\n\t\t\tbert2ph[j] = static_cast<long long>(iph) + 1;\n\t\tstartFrame = endFrame + 1;\n\t}\n\treturn bert2ph;\n}\n\nstd::set ChineseVowel{L'a', L'e', L'i', L'o', L'u', L'A', L'E', L'I', L'O', L'U'};\nstd::set ByteSymbol{L',', L'.', L'?', L'/', L'\\\"', L'\\'', L';', L':', L'!', L' ', L'…' };\n\nstd::vector<size_t> TextToSpeech::AligPhoneAttn(const std::string& LanguageStr, const std::vector<std::wstring>& PhoneSeq, size_t BertSize) const\n{\n\tsize_t PhoneSize = PhoneSeq.size();\n\tif (AddBlank)\n\t\tPhoneSize = PhoneSize * 2 + 1;\n\tif(LanguageStr == \"ZH\")\n\t{\n\t\tstd::vector<size_t> bert2ph(PhoneSize, 0);\n\t\tsize_t startFrame = 1;\n\t\tfor (size_t iph = 0; iph < PhoneSeq.size(); ++iph)\n\t\t{\n\t\t\tif (startFrame == BertSize)\n\t\t\t\tLibDLVoiceCodecThrow(\"AligError\")\n\t\t\tif (AddBlank)\n\t\t\t{\n\t\t\t\tbert2ph[(iph + 1) * 2] = startFrame;\n\t\t\t\tbert2ph[(iph + 1) * 2 - 1] = startFrame;\n\t\t\t}\n\t\t\telse\n\t\t\t\tbert2ph[iph] = startFrame;\n\t\t\tif (!PhoneSeq[iph].empty() && ChineseVowel.find(PhoneSeq[iph][0]) != ChineseVowel.end())\n\t\t\t\t++startFrame;\n\t\t\telse if (ByteSymbol.find(PhoneSeq[iph][0]) != ByteSymbol.end())\n\t\t\t\t++startFrame;\n\t\t\telse if (Symbols.find(PhoneSeq[iph]) == Symbols.end())\n\t\t\t\t++startFrame;\n\t\t\telse if (PhoneSeq[iph] == L\"UNK\")\n\t\t\t\t++startFrame;\n\t\t}\n\t\tbert2ph.back() = startFrame;\n\t\treturn bert2ph;\n\t}\n\treturn GetAligments(PhoneSize, BertSize);\n}\n\nstd::wstring TextToSpeech::TextNormalize(const std::wstring& _Input, int64_t LanguageId) const\n{\n\tauto Iterator = LanguageMap.begin();\n\twhile(Iterator != LanguageMap.end())\n\t{\n\t\tif (Iterator->second == LanguageId)\n\t\t\tbreak;\n\t\t++Iterator;\n\t}\n\n\tif (Iterator != LanguageMap.end())\n\t\treturn MoeVSG2P::NormalizeText(_Input, Iterator->first);\n\treturn _Input;\n}\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/src/Vits.cpp",
    "content": "﻿#include \"../header/Vits.hpp\"\n#include \"../../InferTools/inferTools.hpp\"\n#include <random>\n\nMoeVoiceStudioCoreHeader\nbool BertEnabled = false;\nstd::unordered_map<std::wstring ,Ort::Session*> sessionBert;\nstd::unordered_map<std::wstring, Ort::Session*> sessionClap;\n\nvoid SetBertEnabled(bool cond)\n{\n\tBertEnabled = cond;\n}\n\nvoid DestoryAllBerts()\n{\n\tfor (const auto& it : sessionBert)\n\t\tdelete it.second;\n\tfor (const auto& it : sessionClap)\n\t\tdelete it.second;\n\tsessionBert.clear();\n\tsessionClap.clear();\n}\n\nVits::~Vits()\n{\n\tlogger.log(L\"[Info] unloading Vits Models\");\n\tdestory();\n\tlogger.log(L\"[Info] Vits Models unloaded\");\n}\n\nVits::Vits(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_) :\n\tTextToSpeech(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\t//Check Folder\n\tif (_Config[\"Folder\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"folder\\\" (Model Folder)\")\n\tif (!_Config[\"Folder\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Must Be String\")\n\tconst auto _folder = to_wide_string(_Config[\"Folder\"].GetString());\n\tif (_folder.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Can Not Be Empty\")\n\tconst std::wstring _path = GetCurrentFolder() + L\"/Models/\" + _folder + L\"/\" + _folder;\n\n\tstd::map<std::string, std::wstring> _PathDict;\n\n\tif(_Config.HasMember(\"EmotionalPath\") && _Config[\"EmotionalPath\"].IsString())\n\t{\n\t\tconst auto emoStringload = to_wide_string(_Config[\"EmotionalPath\"].GetString());\n\t\tif(!emoStringload.empty())\n\t\t{\n\t\t\t_PathDict[\"EmotionalPath\"] = GetCurrentFolder() + L\"/emotion/\" + emoStringload + L\".npy\";\n\t\t\t_PathDict[\"EmotionalDictPath\"] = GetCurrentFolder() + L\"/emotion/\" + emoStringload + L\".json\";\n\t\t}\n\t}\n\n\tif(_Config.HasMember(\"Clap\") && _Config[\"Clap\"].IsString())\n\t{\n\t\tconst auto ClapStringload = to_wide_string(_Config[\"Clap\"].GetString());\n\t\tif (!ClapStringload.empty())\n\t\t\t_PathDict[\"Clap\"] = GetCurrentFolder() + L\"/clap/\" + ClapStringload;\n\t}\n\n\t_PathDict[\"Decoder\"] = _path + L\"_dec.onnx\";\n\t_PathDict[\"StochasticDurationPredictor\"] = _path + L\"_sdp.onnx\";\n\t_PathDict[\"DurationPredictor\"] = _path + L\"_dp.onnx\";\n\t_PathDict[\"Encoder\"] = _path + L\"_enc_p.onnx\";\n\t_PathDict[\"FlowNet\"] = _path + L\"_flow.onnx\";\n\t_PathDict[\"Embidding\"] = _path + L\"_emb.onnx\";\n\n\tif (_Config.HasMember(\"Dict\") && _Config[\"Dict\"].IsString() && !_Config[\"Dict\"].Empty())\n\t\t_PathDict[\"Dict\"] = GetCurrentFolder() + L\"/Dict/\" + to_wide_string(_Config[\"Dict\"].GetString()) + L\".json\";\n\n\tstd::vector<std::wstring> _BertPaths;\n\tif (_Config.HasMember(\"BertPath\") && _Config[\"BertPath\"].IsArray() && !_Config[\"BertPath\"].Empty())\n\t{\n\t\tfor(const auto& BPH : _Config[\"BertPath\"].GetArray())\n\t\t{\n\t\t\tconst auto BertPath = to_wide_string(BPH.GetString());\n\t\t\tif(!BertPath.empty())\n\t\t\t\t_BertPaths.emplace_back(GetCurrentFolder() + L\"/Bert/\" + BertPath);\n\t\t}\n\t}\n\n\tload(_PathDict, _Config, _ProgressCallback, _DurationCallback, _BertPaths);\n}\n\nvoid Vits::load(const std::map<std::string, std::wstring>& _PathDict,\n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback, const std::vector<std::wstring>& _BertPaths)\n{\n\tif (_Config[\"Type\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Type\\\" (ModelType)\")\n\tif (!_Config[\"Type\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Type\\\" (ModelType) Must Be String\")\n\tVitsType = _Config[\"Type\"].GetString();\n\tif (VitsType == \"Pits\")\n\t{\n\t\tUseTone = true;\n\t\tUseLength = false;\n\t}\n\tif (VitsType == \"BertVits\")\n\t{\n\t\tUseLength = false;\n\t\tUseTone = true;\n\t\tUseBert = true;\n\t\tUseLanguage = true;\n\t\tEncoderG = true;\n\t}\n\n\tCleaner = MoeVSG2P::GetDefCleaner();\n\tif (_PathDict.find(\"Dict\") != _PathDict.end() && (_waccess(_PathDict.at(\"Dict\").c_str(), 0) != -1))\n\t\tCleaner->loadDict(_PathDict.at(\"Dict\"));\n\telse\n\t\tCleaner->loadDict(L\"\");\n\n\tif (_Config.HasMember(\"LanguageMap\") && !_Config[\"LanguageMap\"].IsNull())\n\t\tfor (const auto& CMember : _Config[\"LanguageMap\"].GetMemberArray())\n\t\t\tLanguageMap[CMember.first] = CMember.second.GetInt();\n\telse\n\t\tlogger.log(\"[Warn] Field \\\"LanguageMap\\\" Is Missing, Use Default Value\");\n\n\tif (UseLength)\n\t\tEncoderInputNames.emplace_back(\"x_lengths\");\n\tif (UseTone)\n\t\tEncoderInputNames.emplace_back(\"t\");\n\tif (Emotion)\n\t\tEncoderInputNames.emplace_back(\"emotion\");\n\tif (UseLanguage)\n\t\tEncoderInputNames.emplace_back(\"language\");\n\n\t//Check SamplingRate\n\tif (_Config[\"Rate\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Rate\\\" (SamplingRate)\")\n\tif (_Config[\"Rate\"].IsInt() || _Config[\"Rate\"].IsInt64())\n\t\t_samplingRate = _Config[\"Rate\"].GetInt();\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Rate\\\" (SamplingRate) Must Be Int/Int64\")\n\n\tlogger.log(L\"[Info] Current Sampling Rate is\" + std::to_wstring(_samplingRate));\n\n\t//Check Symbol\n\tif (!_Config.HasMember(\"Symbol\") || _Config[\"Symbol\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Symbol\\\" (PhSymbol)\")\n\tif (_Config.HasMember(\"AddBlank\") && !_Config[\"AddBlank\"].IsNull())\n\t\tAddBlank = _Config[\"AddBlank\"].GetBool();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"AddBlank\\\" Is Missing, Use Default Value\");\n\n\t//Load Symbol\n\tint64_t iter_symb = 0;\n\tif (_Config[\"Symbol\"].IsArray())\n\t{\n\t\tlogger.log(L\"[Info] Use Phs\");\n\t\tif (_Config[\"Symbol\"].Empty())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Can Not Be Empty\")\n\t\tconst auto SymbolArr = _Config[\"Symbol\"].GetArray();\n\t\tif (!SymbolArr[0].IsString())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Must Be Array<String> or String\")\n\t\tfor (const auto& it : SymbolArr)\n\t\t\tSymbols.insert({ to_wide_string(it.GetString()), iter_symb++ });\n\t}\n\telse\n\t{\n\t\tif (!_Config[\"Symbol\"].IsString())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Must Be Array<String> or String\")\n\t\tlogger.log(L\"[Info] Use Symbols\");\n\t\tconst std::wstring SymbolsStr = to_wide_string(_Config[\"Symbol\"].GetString());\n\t\tif (SymbolsStr.empty())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Can Not Be Empty\")\n\t\tfor (size_t i = 0; i < SymbolsStr.length(); ++i)\n\t\t\tSymbols.insert({ SymbolsStr.substr(i,1) , iter_symb++ });\n\t}\n\n\tif (_Config.HasMember(\"VQSize\") && _Config[\"VQSize\"].IsInt64())\n\t\tVQCodeBookSize = _Config[\"VQSize\"].GetInt64();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"VQSize\\\" Is Missing, Use Default Value\");\n\n\ttry\n\t{\n\t\tif (_PathDict.find(\"EmotionalPath\") != _PathDict.end())\n\t\t{\n\t\t\tconst auto EmotionPath = _PathDict.at(\"EmotionalPath\");\n\t\t\tif (!EmotionPath.empty())\n\t\t\t{\n\t\t\t\tlogger.log(L\"[Info] Loading EmotionVector\");\n\t\t\t\tEmoLoader.open(EmotionPath);\n\t\t\t\tlogger.log(L\"[Info] EmotionVector Loaded\");\n\t\t\t\tEmotion = true;\n\t\t\t}\n\t\t}\n\t\tif (_PathDict.find(\"EmotionalDictPath\") != _PathDict.end())\n\t\t{\n\t\t\tconst auto EmotionPath = _PathDict.at(\"EmotionalDictPath\");\n\t\t\tif (!EmotionPath.empty())\n\t\t\t\tEmoJson = { EmotionPath };\n\t\t}\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tlogger.log((std::string(\"[Warn] EmotionPath Error \") + e.what()).c_str());\n\t}\n\n\tif (_Config.HasMember(\"Characters\") && _Config[\"Characters\"].IsArray())\n\t{\n\t\tSpeakerCount = (int64_t)_Config[\"Characters\"].Size();\n\t\tint64_t SpkIdx = 0;\n\t\tfor (const auto& iterator : _Config[\"Characters\"].GetArray())\n\t\t\tSpeakerMap[to_wide_string(iterator.GetString())] = SpkIdx++;\n\t}\n\n\tif(UseLanguage)\n\t{\n\t\tif (_Config[\"LanguageMap\"].IsNull() || !_Config.HasMember(\"LanguageMap\"))\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"LanguageMap\\\" (LanguageMap)\")\n\t\tfor(const auto& Item : _Config[\"LanguageMap\"].GetMemberArray())\n\t\t{\n\t\t\tif (!Item.second.IsArray())\n\t\t\t\tcontinue;\n\t\t\tconst auto LangArr = Item.second.GetArray();\n\t\t\tif (LangArr.size() != 2)\n\t\t\t\tcontinue;\n\t\t\tLanguageMap[Item.first] = LangArr[0].GetInt();\n\t\t\tLanguageTones[Item.first] = LangArr[1].GetInt();\n\t\t}\n\t}\n\n\tif (UseBert)\n\t{\n\t\tif (_Config.HasMember(\"BertPath\") && _Config[\"BertPath\"].IsArray() && !_Config[\"BertPath\"].Empty())\n\t\t{\n\t\t\tfor (const auto& BPH : _Config[\"BertPath\"].GetArray())\n\t\t\t{\n\t\t\t\tconst auto BertPath = to_wide_string(BPH.GetString());\n\t\t\t\tif (!BertPath.empty())\n\t\t\t\t\tBertNamesIdx.emplace_back(BertPath);\n\t\t\t}\n\t\t}\n\n\t\tif (LanguageMap.size() != _BertPaths.size())\n\t\t\tEncoderInputNames.emplace_back(\"bert\");\n\t\telse\n\t\t{\n\t\t\tBertNames.reserve(_BertPaths.size() * 2);\n\t\t\tfor (size_t i = 0; i < _BertPaths.size(); ++i)\n\t\t\t\tBertNames.emplace_back(\"bert_\" + std::to_string(i));\n\t\t\tfor(const auto& NameInp : BertNames)\n\t\t\t\tEncoderInputNames.emplace_back(NameInp.data());\n\t\t}\n\t\tfor(const auto& Path : _BertPaths)\n\t\t{\n\t\t\tconst auto BertName = Path.substr(Path.rfind(L'/') + 1);\n\t\t\tif (LanguageTokenizerMap.find(\"ZH\") == LanguageTokenizerMap.end() && BertName.find(L\"chinese\") != std::string::npos)\n\t\t\t\tLanguageTokenizerMap[\"ZH\"] = BertName;\n\t\t\tif (LanguageTokenizerMap.find(\"JP\") == LanguageTokenizerMap.end() && BertName.find(L\"japanese\") != std::string::npos)\n\t\t\t\tLanguageTokenizerMap[\"JP\"] = BertName;\n\t\t\tOrt::Session* SessionBert = nullptr;\n\t\t\tif (sessionBert.find(BertName) != sessionBert.end() && sessionBert.at(BertName) != nullptr)\n\t\t\t\tSessionBert = sessionBert.at(BertName);\n\t\t\tif (_waccess(Path.c_str(), 0) != -1)\n\t\t\t{\n\t\t\t\tif(!SessionBert)\n\t\t\t\t{\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tSessionBert = new Ort::Session(*env, (Path + L\"/model.onnx\").c_str(), *session_options);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(Ort::Exception& e)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogger.log(L\"[Warn] \" + to_wide_string(e.what()));\n\t\t\t\t\t\tdelete SessionBert;\n\t\t\t\t\t\tSessionBert = nullptr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_waccess((Path + L\"/Tokenizer.json\").c_str(), 0) != -1)\n\t\t\t\t{\n\t\t\t\t\tTokenizers.insert({ BertName ,Path + L\"/Tokenizer.json\" });\n\t\t\t\t\tTokenizers[BertName].BondCleaner(Cleaner);\n\t\t\t\t}\n\t\t\t\telse if (SessionBert)\n\t\t\t\t{\n\t\t\t\t\tdelete SessionBert;\n\t\t\t\t\tLibDLVoiceCodecThrow(\"Bert Must Have a Tokenizer\")\n\t\t\t\t}\n\t\t\t}\n\t\t\tsessionBert[BertName] = SessionBert;\n\t\t}\n\t\tfor (auto& iter : sessionBert)\n\t\t\tif (std::find(BertNamesIdx.begin(), BertNamesIdx.end(), iter.first) == BertNamesIdx.end())\n\t\t\t{\n\t\t\t\tdelete iter.second;\n\t\t\t\titer.second = nullptr;\n\t\t\t}\n\t}\n\n\tif(_BertPaths.empty())\n\t{\n\t\tfor (const auto& iter : sessionBert)\n\t\t\tdelete iter.second;\n\t\tsessionBert.clear();\n\t}\n\n\tif (VitsType == \"BertVits\" && _PathDict.find(\"Clap\") != _PathDict.end())\n\t{\n\t\tEncoderInputNames.emplace_back(\"emo\");\n\t\tUseClap = true;\n\t\tconst auto& Path = _PathDict.at(\"Clap\");\n\t\tClapName = Path.substr(Path.rfind(L'/') + 1);\n\t\tOrt::Session* SessionClap = nullptr;\n\t\tif ((sessionClap.find(ClapName) != sessionClap.end() && sessionClap.at(ClapName) != nullptr))\n\t\t\tSessionClap = sessionClap.at(ClapName);\n\t\tif (!SessionClap)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tSessionClap = new Ort::Session(*env, (Path + L\".onnx\").c_str(), *session_options);\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e)\n\t\t\t{\n\t\t\t\tlogger.log(L\"[Warn] \" + to_wide_string(e.what()));\n\t\t\t\tdelete SessionClap;\n\t\t\t\tSessionClap = nullptr;\n\t\t\t}\n\t\t}\n\t\tif (_waccess((Path + L\".json\").c_str(), 0) != -1)\n\t\t{\n\t\t\tTokenizers.insert({ ClapName , Path + L\".json\" });\n\t\t\tTokenizers[ClapName].BondCleaner(Cleaner);\n\t\t}\n\t\telse if (SessionClap)\n\t\t{\n\t\t\tdelete SessionClap;\n\t\t\tLibDLVoiceCodecThrow(\"Clap Must Have a Tokenizer\")\n\t\t}\n\t\tsessionClap[ClapName] = SessionClap;\n\t\tfor (auto& iter : sessionClap)\n\t\t\tif (ClapName != iter.first)\n\t\t\t{\n\t\t\t\tdelete iter.second;\n\t\t\t\titer.second = nullptr;\n\t\t\t}\n\t}\n\telse\n\t{\n\t\tfor (auto& iter : sessionClap)\n\t\t\tdelete iter.second;\n\t\tsessionClap.clear();\n\t\tUseClap = false;\n\t}\n\n\t_callback = _ProgressCallback;\n\tCustomDurationCallback = _DurationCallback;\n\n\t//LoadModels\n\ttry\n\t{\n\t\tlogger.log(L\"[Info] loading Vits Models\");\n\t\tsessionDec = new Ort::Session(*env, _PathDict.at(\"Decoder\").c_str(), *session_options);\n\t\tsessionEnc_p = new Ort::Session(*env, _PathDict.at(\"Encoder\").c_str(), *session_options);\n\t\tsessionFlow = new Ort::Session(*env, _PathDict.at(\"FlowNet\").c_str(), *session_options);\n\n\t\tif (_waccess(_PathDict.at(\"Embidding\").c_str(), 0) != -1)\n\t\t\tsessionEmb = new Ort::Session(*env, _PathDict.at(\"Embidding\").c_str(), *session_options);\n\t\telse\n\t\t\tsessionEmb = nullptr;\n\n\t\tif (_waccess(_PathDict.at(\"DurationPredictor\").c_str(), 0) != -1)\n\t\t\tsessionDp = new Ort::Session(*env, _PathDict.at(\"DurationPredictor\").c_str(), *session_options);\n\t\telse\n\t\t\tsessionDp = nullptr;\n\n\t\tif (_waccess(_PathDict.at(\"StochasticDurationPredictor\").c_str(), 0) != -1)\n\t\t\tsessionSdp = new Ort::Session(*env, _PathDict.at(\"StochasticDurationPredictor\").c_str(), *session_options);\n\t\telse\n\t\t\tsessionSdp = nullptr;\n\n\t\tif (!sessionDp && !sessionSdp)\n\t\t{\n\t\t\tdestory();\n\t\t\tLibDLVoiceCodecThrow(\"You must have a duration predictor\")\n\t\t}\n\n\t\tlogger.log(L\"[Info] Vits Models loaded\");\n\t}\n\tcatch (Ort::Exception& _exception)\n\t{\n\t\tdestory();\n\t\tLibDLVoiceCodecThrow(_exception.what())\n\t}\n\n\tif (sessionEmb)\n\t{\n\t\tif(EncoderG) EncoderInputNames.emplace_back(\"g\");\n\t\tSdpInputNames.emplace_back(\"g\");\n\t\tDpInputNames.emplace_back(\"g\");\n\t\tFlowInputNames.emplace_back(\"g\");\n\t\tDecInputNames.emplace_back(\"g\");\n\t}\n\n\tif(VitsType == \"BertVits\" && sessionEnc_p->GetInputCount() == EncoderInputNames.size() + 2)\n\t{\n\t\tEncoderInputNames.emplace_back(\"vqidx\");\n\t\tEncoderInputNames.emplace_back(\"sid\");\n\t\tUseVQ = true;\n\t}\n}\n\nVits::Vits(const std::map<std::string, std::wstring>& _PathDict, \n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback, const std::vector<std::wstring>& _BertPaths,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_) :\n\tTextToSpeech(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tload(_PathDict, _Config, _ProgressCallback, _DurationCallback, _BertPaths);\n}\n\nstd::vector<std::vector<int16_t>> Vits::Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const\n{\n\tstd::vector<std::vector<int16_t>> PCM;\n\tPCM.reserve(_Input.size());\n\tstd::vector<std::vector<int16_t>> _Audio(1);\n\tlogger.log(\"[Inference] Vits Inference Begin\");\n\tsize_t proc = 0;\n\t_callback(proc, _Input.size());\n\tfor(const auto& Seq : _Input)\n\t{\n\t\t_callback(proc++, _Input.size());\n\t\tauto CurLanguageIdx = _atoi64(Seq.LanguageSymbol.c_str());\n\t\tif (LanguageMap.find(Seq.LanguageSymbol) != LanguageMap.end())\n\t\t\tCurLanguageIdx = LanguageMap.at(Seq.LanguageSymbol);\n\t\tstd::vector<std::wstring> PhonemeSeq, TokenSeq;\n\t\tstd::vector<int64_t> ToneSeq;\n\t\tstd::vector<int64_t> LanguageSeq;\n\t\tstd::vector<int64_t> DurationSeq;\n\t\tstd::vector<size_t> BertAligSeq;\n\t\tbool HasBertSeq = false;\n\t\tif (AddBlank)\n\t\t\tBertAligSeq.emplace_back(0);\n\n\t\tstd::vector<MoeVSProjectSpace::MoeVSTTSToken> TmpToken;\n\t\tconst std::vector<MoeVSProjectSpace::MoeVSTTSToken>* TokensPtr = &Seq.SlicedTokens;\n\t\tif (BertEnabled && UseBert && Seq.SlicedTokens.empty())\n\t\t{\n\t\t\tHasBertSeq = true;\n\t\t\tif(Seq.LanguageSymbol != \"ZH\")\n\t\t\t\tTokenSeq = GetTokenizer(Seq.LanguageSymbol).Tokenize(Seq.TextSeq);\n\t\t\telse\n\t\t\t{\n\t\t\t\tauto NewData = GetTokenizer(Seq.LanguageSymbol).Tokenize(Seq.TextSeq);\n\t\t\t\tif (NewData.empty())\n\t\t\t\t\tcontinue;\n\t\t\t\tTmpToken.reserve(NewData.size());\n\t\t\t\tfor (const auto& it : NewData)\n\t\t\t\t{\n\t\t\t\t\tMoeVSProjectSpace::MoeVSTTSToken Tok;\n\t\t\t\t\tTok.Text = it;\n\t\t\t\t\tTmpToken.emplace_back(std::move(Tok));\n\t\t\t\t}\n\t\t\t\tTokensPtr = &TmpToken;\n\t\t\t}\n\t\t}\n\n\t\tif(UseBert && TokensPtr && !TokensPtr->empty())\n\t\t{\n\t\t\tsize_t TokensIndex = 1;\n\t\t\tfor(const auto& iter : *TokensPtr)\n\t\t\t{\n\t\t\t\tif (iter.Text.empty())\n\t\t\t\t{\n\t\t\t\t\tlogger.log(\"[Info] Skip Empty Slice\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tTokenSeq.emplace_back(iter.Text);\n\t\t\t\tif (iter.Text == L\"[CLS]\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (iter.Text == L\"[SEP]\")\n\t\t\t\t\tbreak;\n\t\t\t\tstd::vector<std::wstring> const* PhonemesPtr;\n\t\t\t\tstd::vector<std::wstring> TempPhonemes;\n\t\t\t\tstd::vector<int64_t> TempToneVec;\n\t\t\t\tif (iter.Phonemes.empty())\n\t\t\t\t{\n\t\t\t\t\tstd::vector<std::wstring> TempSeqVec;\n\t\t\t\t\tauto TempText = iter.Text;\n\t\t\t\t\tif (TempText == L\"[UNK]\")\n\t\t\t\t\t\tTempPhonemes = { L\"[UNK]\" };\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (TempText.find(L\"##\") == 0)\n\t\t\t\t\t\t\tTempText = TempText.substr(2);\n\t\t\t\t\t\tif (TempText.find(L'▁') == 0)\n\t\t\t\t\t\t\tTempText = TempText.substr(1);\n\t\t\t\t\t\tTempPhonemes = Cleaner->DictReplace(Cleaner->G2p(TempText, Seq.PlaceHolderSymbol, L\"/[WithTone]\" + Seq.AdditionalInfo, Seq.LanguageSymbol), Seq.PlaceHolderSymbol);\n\t\t\t\t\t}\n\t\t\t\t\tconst int64_t FirstToneIdx = LanguageTones.at(Seq.LanguageSymbol);\n\t\t\t\t\tauto RtnData = SplitTonesFromTokens(TempPhonemes, iter.Tones, FirstToneIdx, Seq.LanguageSymbol);\n\t\t\t\t\tTempPhonemes = std::move(std::get<0>(RtnData));\n\t\t\t\t\tTempToneVec = std::move(std::get<1>(RtnData));\n\t\t\t\t\tPhonemesPtr = &TempPhonemes;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tPhonemesPtr = &iter.Phonemes;\n\n\t\t\t\tPhonemeSeq.insert(PhonemeSeq.end(), PhonemesPtr->begin(), PhonemesPtr->end());\n\t\t\t\tif (PhonemesPtr->size() == iter.Language.size())\n\t\t\t\t\tfor (const auto& langstr : iter.Language)\n\t\t\t\t\t\tLanguageSeq.emplace_back(LanguageMap.find(langstr) != LanguageMap.end() ? LanguageMap.at(langstr) : _atoi64(langstr.c_str()));\n\t\t\t\telse\n\t\t\t\t\tLanguageSeq.insert(LanguageSeq.end(), PhonemesPtr->size(), CurLanguageIdx);\n\t\t\t\tif (PhonemesPtr->size() == iter.Durations.size())\n\t\t\t\t\tDurationSeq.insert(DurationSeq.end(), iter.Durations.begin(), iter.Durations.end());\n\t\t\t\tif (PhonemesPtr->size() == iter.Tones.size())\n\t\t\t\t\tToneSeq.insert(ToneSeq.end(), iter.Tones.begin(), iter.Tones.end());\n\t\t\t\telse if(PhonemesPtr->size() == TempToneVec.size())\n\t\t\t\t\tToneSeq.insert(ToneSeq.end(), TempToneVec.begin(), TempToneVec.end());\n\t\t\t\telse\n\t\t\t\t\tToneSeq.insert(ToneSeq.end(), PhonemesPtr->size(), LanguageTones.at(Seq.LanguageSymbol));\n\t\t\t\tfor (size_t idxl = 0; idxl < PhonemesPtr->size(); ++idxl)\n\t\t\t\t{\n\t\t\t\t\tBertAligSeq.emplace_back(TokensIndex);\n\t\t\t\t\tif (AddBlank)\n\t\t\t\t\t\tBertAligSeq.emplace_back(TokensIndex);\n\t\t\t\t}\n\t\t\t\t++TokensIndex;\n\t\t\t}\n\t\t\tif ((AddBlank && BertAligSeq.size() == PhonemeSeq.size() * 2 + 1) || (!AddBlank && BertAligSeq.size() == PhonemeSeq.size()))\n\t\t\t\tHasBertSeq = true;\n\t\t\telse\n\t\t\t\tHasBertSeq = false;\n\t\t}\n\t\telse if (!Seq.TextSeq.empty())\n\t\t{\n\t\t\tPhonemeSeq = Cleaner->DictReplace(Cleaner->G2p(Seq.TextSeq, Seq.PlaceHolderSymbol, L\"/[WithTone]\" + Seq.AdditionalInfo, Seq.LanguageSymbol), Seq.PlaceHolderSymbol);\n\t\t\tLanguageSeq = std::vector(PhonemeSeq.size(), CurLanguageIdx);\n\t\t\tauto RtnVal = SplitTonesFromTokens(PhonemeSeq, {}, LanguageTones.at(Seq.LanguageSymbol), Seq.LanguageSymbol);\n\t\t\tPhonemeSeq = std::move(std::get<0>(RtnVal));\n\t\t\tToneSeq = std::move(std::get<1>(RtnVal));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlogger.log(\"[Info] Skip Empty TextSeq\");\n\t\t\tcontinue;\n\t\t}\n\n\t\tif(PhonemeSeq.empty())\n\t\t{\n\t\t\tlogger.log(\"[Info] Skip Empty TextSeq\");\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!_Audio[0].empty())\n\t\t{\n\t\t\tif (Seq.RestTime < 0.f)\n\t\t\t{\n\t\t\t\t_Audio[0].insert(_Audio[0].end(), size_t(_samplingRate), 0);\n\t\t\t\tPCM.emplace_back(std::move(_Audio[0]));\n\t\t\t\t_Audio[0] = std::vector<int16_t>();\n\t\t\t}\n\t\t\telse\n\t\t\t\t_Audio[0].insert(_Audio[0].end(), size_t(Seq.RestTime * float(_samplingRate)), 0);\n\t\t}\n\n\t\tstd::mt19937 gen(static_cast<unsigned int>(Seq.Seed));\n\t\tstd::normal_distribution FloatRandFn(0.f, 1.f);\n\n\t\tstd::vector<int64_t> TextSeq;\n\t\tTextSeq.reserve(PhonemeSeq.size() * 4 + 4);\n\t\tfor (const auto& it : PhonemeSeq)\n\t\t{\n\t\t\tif (AddBlank)\n\t\t\t\tTextSeq.push_back(0);\n\t\t\tif (Symbols.find(it) != Symbols.end())\n\t\t\t\tTextSeq.push_back(Symbols.at(it));\n\t\t\telse\n\t\t\t\tTextSeq.push_back(0);\n\t\t}\n\t\tif (AddBlank)\n\t\t\tTextSeq.push_back(0);\n\t\tint64_t TextSeqLength[] = { (int64_t)TextSeq.size() };\n\t\tstd::vector<Ort::Value> EncoderOutputs;\n\t\tstd::vector<Ort::Value> EncoderInputs;\n\t\tconst int64_t TextSeqShape[2] = { 1,TextSeqLength[0] };\n\t\tconstexpr int64_t LengthShape[1] = { 1 };\n\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, TextSeq.data(), TextSeqLength[0], TextSeqShape, 2));\n\t\tif (UseLength)\n\t\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t\t\t*memory_info, TextSeqLength, 1, LengthShape, 1));\n\t\tstd::vector<float> emoVec;\n\t\tconstexpr int64_t EmotionShape[1] = { 1024 };\n\t\tif(Emotion)\n\t\t{\n\t\t\temoVec = GetEmotionVector(Seq.EmotionPrompt);\n\t\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t\t\t*memory_info, emoVec.data(), 1024, EmotionShape, 1));\n\t\t}\n\t\t\n\t\tstd::vector ToneIn(TextSeq.size(), 0i64);\n\t\tif(UseTone)\n\t\t{\n\t\t\tif (ToneIn.size() == ToneSeq.size())\n\t\t\t\tToneIn = ToneSeq;\n\t\t\telse if (AddBlank && ToneIn.size() == ToneSeq.size() * 2 + 1)\n\t\t\t\tfor (size_t i = 1; i < ToneIn.size(); i += 2)\n\t\t\t\t\tToneIn[i] = ToneSeq[i / 2];\n\t\t\telse if (ToneIn.size() * 2 + 1 == ToneSeq.size())\n\t\t\t\tfor (size_t i = 1; i < ToneSeq.size(); i += 2)\n\t\t\t\t\tToneIn[i / 2] = ToneSeq[i];\n\t\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t\t\t*memory_info, ToneIn.data(), TextSeqLength[0], TextSeqShape, 2));\n\t\t}\n\t\tstd::vector LanguageIn(TextSeq.size(), CurLanguageIdx);\n\t\tif(UseLanguage)\n\t\t{\n\t\t\tif (LanguageIn.size() == LanguageSeq.size())\n\t\t\t\tLanguageIn = LanguageSeq;\n\t\t\telse if (AddBlank && LanguageIn.size() == LanguageSeq.size() * 2 + 1)\n\t\t\t\tfor (size_t i = 1; i < LanguageIn.size(); i += 2)\n\t\t\t\t{\n\t\t\t\t\tLanguageIn[i] = LanguageSeq[i / 2];\n\t\t\t\t\tLanguageIn[i - 1] = LanguageSeq[i / 2];\n\t\t\t\t}\n\t\t\telse if (LanguageIn.size() * 2 + 1 == LanguageSeq.size())\n\t\t\t\tfor (size_t i = 1; i < LanguageSeq.size(); i += 2)\n\t\t\t\t\tLanguageIn[i / 2] = LanguageSeq[i];\n\t\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t\t\t*memory_info, LanguageIn.data(), TextSeqLength[0], TextSeqShape, 2));\n\t\t}\n\t\tstd::vector BertVecs(sessionBert.size(), std::vector(1024 * TextSeqLength[0], 0.f));\n\t\tint64_t BertShape[2] = { TextSeqLength[0],1024 };\n\t\tif(UseBert)\n\t\t{\n\t\t\tfor (size_t IndexOfBert = 0; IndexOfBert < sessionBert.size(); ++IndexOfBert)\n\t\t\t{\n\t\t\t\tauto& BertData = BertVecs[IndexOfBert];\n\t\t\t\tconst auto CurBertSession = sessionBert[BertNamesIdx[IndexOfBert]];\n\t\t\t\tif ((CurBertSession && (IndexOfBert == size_t(CurLanguageIdx) ||\n\t\t\t\t\t(IndexOfBert != size_t(CurLanguageIdx) && sessionBert.size() == 1))) &&\n\t\t\t\t\tBertEnabled && HasBertSeq)\n\t\t\t\t{\n\t\t\t\t\tauto input_ids = Tokenizers.at(BertNamesIdx[IndexOfBert])(TokenSeq);\n\t\t\t\t\tstd::vector<int64_t> attention_mask(input_ids.size(), 1), token_type_ids(input_ids.size(), 0);\n\t\t\t\t\tint64_t AttentionShape[2] = { 1, (int64_t)input_ids.size() };\n\t\t\t\t\tstd::vector<Ort::Value> AttentionInput, AttentionOutput;\n\t\t\t\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t\t\t\t*memory_info, input_ids.data(), input_ids.size(), AttentionShape, 2));\n\t\t\t\t\tif (CurBertSession->GetInputCount() == 3)\n\t\t\t\t\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(*memory_info, attention_mask.data(), attention_mask.size(), AttentionShape, 2));\n\t\t\t\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t\t\t\t*memory_info, token_type_ids.data(), token_type_ids.size(), AttentionShape, 2));\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tif(CurBertSession->GetInputCount() == 3)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tAttentionOutput = CurBertSession->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\t\t   BertInputNames.data(),\n\t\t\t\t\t\t\t   AttentionInput.data(),\n\t\t\t\t\t\t\t   3,\n\t\t\t\t\t\t\t   BertOutputNames.data(),\n\t\t\t\t\t\t\t   1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (CurBertSession->GetInputCount() == 2)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tAttentionOutput = CurBertSession->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\t\t\tBertInputNames2.data(),\n\t\t\t\t\t\t\t\tAttentionInput.data(),\n\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t\t\t\t1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tAttentionOutput = CurBertSession->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\t\t\tBertInputNames3.data(),\n\t\t\t\t\t\t\t\tAttentionInput.data(),\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t\t\t\t1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch (Ort::Exception& e)\n\t\t\t\t\t{\n\t\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Bert\\n\") + e.what()))\n\t\t\t\t\t}\n\t\t\t\t\tconst auto AttnData = AttentionOutput[0].GetTensorData<float>();\n\t\t\t\t\tif (BertAligSeq.size() == 1)\n\t\t\t\t\t\tBertAligSeq = GetAligments(TextSeqLength[0], AttentionOutput[0].GetTensorTypeAndShapeInfo().GetShape()[0] - 2);\n\t\t\t\t\tfor (int64_t IndexOfSrcVector = 0; IndexOfSrcVector < TextSeqLength[0]; ++IndexOfSrcVector)\n\t\t\t\t\t\tmemcpy(BertData.data() + IndexOfSrcVector * 1024, AttnData + (BertAligSeq[IndexOfSrcVector]) * 1024, 1024 * sizeof(float));\n\t\t\t\t}\n\t\t\t\tEncoderInputs.emplace_back(Ort::Value::CreateTensor(\n\t\t\t\t\t*memory_info, BertData.data(), BertData.size(), BertShape, 2));\n\t\t\t}\n\t\t}\n\n\t\tauto ClapData = std::vector(512, 0.f);\n\t\tint64_t ClapShape[2] = { 512, 1 };\n\n\t\tif(UseClap)\n\t\t{\n\t\t\tstd::vector<Ort::Value> ClapInput;\n\t\t\tconst auto CurClapSession = sessionClap[ClapName];\n\t\t\tstd::wstring ClapSeq;\n\t\t\tfor (const auto& itt : Seq.EmotionPrompt)\n\t\t\t\tClapSeq += itt + L\" \";\n\t\t\tif(CurClapSession && !ClapSeq.empty())\n\t\t\t{\n\t\t\t\tstd::vector<Ort::Value> ClapOutput;\n\t\t\t\tconst auto& CurClapTokenizer = Tokenizers.at(ClapName);\n\t\t\t\tauto input_ids = CurClapTokenizer(CurClapTokenizer.Tokenize(ClapSeq), true);\n\t\t\t\tstd::vector<int64_t> attention_mask(input_ids.size(), 1);\n\t\t\t\tint64_t AttentionShape[2] = { 1, (int64_t)input_ids.size() };\n\t\t\t\tClapInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t\t\t*memory_info, input_ids.data(), input_ids.size(), AttentionShape, 2));\n\t\t\t\tClapInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t\t\t*memory_info, attention_mask.data(), attention_mask.size(), AttentionShape, 2));\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tClapOutput = CurClapSession->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\tBertInputNames2.data(),\n\t\t\t\t\t\tClapInput.data(),\n\t\t\t\t\t\tCurClapSession->GetInputCount(),\n\t\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t\t1);\n\t\t\t\t}\n\t\t\t\tcatch (Ort::Exception& e)\n\t\t\t\t{\n\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Clap\\n\") + e.what()))\n\t\t\t\t}\n\t\t\t\tClapData = { ClapOutput[0].GetTensorData<float>(),ClapOutput[0].GetTensorData<float>() + 512 };\n\t\t\t}\n\t\t\tEncoderInputs.emplace_back(Ort::Value::CreateTensor(*memory_info, ClapData.data(), ClapData.size(), ClapShape, 2));\n\t\t}\n\n\t\tint64_t VQIndices[] = { 0 };\n\t\tint64_t SidIndices[] = { SpeakerMap.find(Seq.SpeakerName) != SpeakerMap.end() ? SpeakerMap.at(Seq.SpeakerName) : _wtoi64(Seq.SpeakerName.c_str()) };\n\n\t\tstd::vector<float> GEmbidding;\n\t\tstd::vector<int64_t> GOutShape;\n\t\tif (sessionEmb)\n\t\t{\n\t\t\tauto SpeakerMixData = Seq.SpeakerMix;\n\t\t\tif (!SpeakerMixData.empty() && SpeakerCount > 1)\n\t\t\t{\n\t\t\t\tLinearCombination(SpeakerMixData);\n\t\t\t\tint64_t csid = 0;\n\t\t\t\tfor (const auto& CharaP : SpeakerMixData)\n\t\t\t\t{\n\t\t\t\t\tstd::vector<Ort::Value> EmbiddingInput;\n\t\t\t\t\tstd::vector<Ort::Value> EmbiddingOutput;\n\t\t\t\t\tif (csid >= SpeakerCount)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tif (CharaP < 0.0001f)\n\t\t\t\t\t{\n\t\t\t\t\t\t++csid;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tint64_t Character[1] = { csid };\n\t\t\t\t\tEmbiddingInput.push_back(Ort::Value::CreateTensor(\n\t\t\t\t\t\t*memory_info, Character, 1, LengthShape, 1));\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tEmbiddingOutput = sessionEmb->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\t\tEmbiddingInputNames.data(),\n\t\t\t\t\t\t\tEmbiddingInput.data(),\n\t\t\t\t\t\t\tEmbiddingInput.size(),\n\t\t\t\t\t\t\tEmbiddingOutputNames.data(),\n\t\t\t\t\t\t\tEmbiddingOutputNames.size());\n\t\t\t\t\t}\n\t\t\t\t\tcatch (Ort::Exception& e)\n\t\t\t\t\t{\n\t\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: emb\\n\") + e.what()))\n\t\t\t\t\t}\n\t\t\t\t\tconst auto GOutCount = EmbiddingOutput[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\t\t\t\tif (GOutShape.empty())\n\t\t\t\t\t{\n\t\t\t\t\t\tGEmbidding = std::vector(EmbiddingOutput[0].GetTensorData<float>(), EmbiddingOutput[0].GetTensorData<float>() + GOutCount);\n\t\t\t\t\t\tGOutShape = EmbiddingOutput[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\t\t\t\t\tGOutShape.emplace_back(1);\n\t\t\t\t\t\tfor (auto idx : GEmbidding)\n\t\t\t\t\t\t\tidx *= float(CharaP);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tfor (size_t i = 0; i < GOutCount; ++i)\n\t\t\t\t\t\t\tGEmbidding[i] += EmbiddingOutput[0].GetTensorData<float>()[i] * float(CharaP);\n\t\t\t\t\t++csid;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstd::vector<Ort::Value> EmbiddingInput;\n\t\t\t\tstd::vector<Ort::Value> EmbiddingOutput;\n\t\t\t\tEmbiddingInput.push_back(Ort::Value::CreateTensor(\n\t\t\t\t\t*memory_info, SidIndices, 1, LengthShape, 1));\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tEmbiddingOutput = sessionEmb->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\tEmbiddingInputNames.data(),\n\t\t\t\t\t\tEmbiddingInput.data(),\n\t\t\t\t\t\tEmbiddingInput.size(),\n\t\t\t\t\t\tEmbiddingOutputNames.data(),\n\t\t\t\t\t\tEmbiddingOutputNames.size());\n\t\t\t\t}\n\t\t\t\tcatch (Ort::Exception& e)\n\t\t\t\t{\n\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: emb\\n\") + e.what()))\n\t\t\t\t}\n\t\t\t\tconst auto GOutCount = EmbiddingOutput[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\t\t\tGEmbidding = std::vector(EmbiddingOutput[0].GetTensorData<float>(), EmbiddingOutput[0].GetTensorData<float>() + GOutCount);\n\t\t\t\tGOutShape = EmbiddingOutput[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\t\t\tGOutShape.emplace_back(1);\n\t\t\t}\n\t\t\tif (EncoderG)\n\t\t\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(*memory_info, GEmbidding.data(), GEmbidding.size(), GOutShape.data(), 3));\n\t\t}\n\n\t\tif (UseVQ)\n\t\t{\n\t\t\tif (!Seq.EmotionPrompt.empty())\n\t\t\t\tVQIndices[0] = _wtoi64(Seq.EmotionPrompt[0].c_str());\n\t\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(*memory_info, VQIndices, 1, LengthShape, 1));\n\t\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(*memory_info, SidIndices, 1, LengthShape, 1));\n\t\t}\n\n\t\ttry\n\t\t{\n\t\t\tEncoderOutputs = sessionEnc_p->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tEncoderInputNames.data(),\n\t\t\t\tEncoderInputs.data(),\n\t\t\t\tEncoderInputs.size(),\n\t\t\t\tEncoderOutputNames.data(),\n\t\t\t\tEncoderOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: enc_p\\n\") + e.what()))\n\t\t}\n\n\t\tstd::vector<float>\n\t\t\tm_p(EncoderOutputs[1].GetTensorData<float>(), EncoderOutputs[1].GetTensorData<float>() + EncoderOutputs[1].GetTensorTypeAndShapeInfo().GetElementCount()),\n\t\t\tlogs_p(EncoderOutputs[2].GetTensorData<float>(), EncoderOutputs[2].GetTensorData<float>() + EncoderOutputs[2].GetTensorTypeAndShapeInfo().GetElementCount()),\n\t\t\tx_mask(EncoderOutputs[3].GetTensorData<float>(), EncoderOutputs[3].GetTensorData<float>() + EncoderOutputs[3].GetTensorTypeAndShapeInfo().GetElementCount());\n\n\t\tconst auto xshape = EncoderOutputs[0].GetTensorTypeAndShapeInfo().GetShape();\n\n\t\tstd::vector w_ceil(TextSeqLength[0], 1.f);\n\t\tbool enable_dp = false;\n\t\tif (DurationSeq.size() == w_ceil.size() || DurationSeq.size() == w_ceil.size() / 2)\n\t\t\tenable_dp = true;\n\t\t\n\t\tconst int64_t zinputShape[3] = { xshape[0],2,xshape[2] };\n\t\tconst int64_t zinputCount = xshape[0] * xshape[2] * 2;\n\t\tstd::vector<float> zinput(zinputCount, 0.0);\n\t\tfor (auto& it : zinput)\n\t\t\tit = FloatRandFn(gen) * Seq.DurationPredictorNoiseScale;\n\t\tstd::vector<Ort::Value> DurationPredictorInput;\n\t\tDurationPredictorInput.push_back(std::move(EncoderOutputs[0]));\n\t\tDurationPredictorInput.push_back(std::move(EncoderOutputs[3]));\n\t\tDurationPredictorInput.push_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, zinput.data(), zinputCount, zinputShape, 3));\n\t\tif (sessionEmb)\n\t\t\tDurationPredictorInput.push_back(Ort::Value::CreateTensor(*memory_info, GEmbidding.data(), GEmbidding.size(), GOutShape.data(), 3));\n\t\tif(sessionSdp)\n\t\t{\n\t\t\tstd::vector<Ort::Value> StochasticDurationPredictorOutput;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tStochasticDurationPredictorOutput = sessionSdp->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tSdpInputNames.data(),\n\t\t\t\t\tDurationPredictorInput.data(),\n\t\t\t\t\tDurationPredictorInput.size(),\n\t\t\t\t\tSdpOutputNames.data(),\n\t\t\t\t\tSdpOutputNames.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: dp\\n\") + e.what()))\n\t\t\t}\n\t\t\tconst auto w_data = StochasticDurationPredictorOutput[0].GetTensorMutableData<float>();\n\t\t\tconst auto w_data_length = StochasticDurationPredictorOutput[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\t\tif (w_data_length != w_ceil.size())\n\t\t\t\tw_ceil.resize(w_data_length, 0.f);\n\t\t\tfloat SdpFactor = 1.f - Seq.FactorDpSdp;\n\t\t\tif (sessionDp)\n\t\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\t\tw_ceil[i] = ceil(exp(w_data[i] * SdpFactor) * x_mask[i] * Seq.LengthScale);\n\t\t\telse\n\t\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\t\tw_ceil[i] = ceil(exp(w_data[i]) * x_mask[i] * Seq.LengthScale);\n\t\t}\n\t\tif (sessionDp)\n\t\t{\n\t\t\tstd::vector<Ort::Value> DurationPredictorOutput;\n\t\t\tDurationPredictorInput.erase(DurationPredictorInput.begin() + 2);\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDurationPredictorOutput = sessionDp->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tDpInputNames.data(),\n\t\t\t\t\tDurationPredictorInput.data(),\n\t\t\t\t\tDurationPredictorInput.size(),\n\t\t\t\t\tDpOutputNames.data(),\n\t\t\t\t\tDpOutputNames.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: dp\\n\") + e.what()))\n\t\t\t}\n\t\t\tconst auto w_data = DurationPredictorOutput[0].GetTensorMutableData<float>();\n\t\t\tconst auto w_data_length = DurationPredictorOutput[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\t\tif (w_data_length != w_ceil.size())\n\t\t\t\tw_ceil.resize(w_data_length, 0.f);\n\t\t\tif (sessionSdp)\n\t\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\t\tw_ceil[i] += ceil(exp(w_data[i] * Seq.FactorDpSdp) * x_mask[i] * Seq.LengthScale);\n\t\t\telse\n\t\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\t\tw_ceil[i] = ceil(exp(w_data[i]) * x_mask[i] * Seq.LengthScale);\n\t\t}\n\t\tif(enable_dp)\n\t\t{\n\t\t\tif (DurationSeq.size() == TextSeq.size())\n\t\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\t\tw_ceil[i] = float(DurationSeq[i]);\n\t\t\telse if (AddBlank && DurationSeq.size() == TextSeq.size() / 2ull)\n\t\t\t\tfor (size_t i = 0; i < DurationSeq.size(); ++i)\n\t\t\t\t\tw_ceil[1 + i * 2] = float(DurationSeq[i]);\n\t\t}\n\t\tCustomDurationCallback(w_ceil);\n\t\tconst auto maskSize = x_mask.size();\n\t\tfloat y_length_f = 0.0;\n\t\tint64_t y_length;\n\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\ty_length_f += w_ceil[i];\n\t\tif (y_length_f < 1.0f)\n\t\t\ty_length = 1;\n\t\telse\n\t\t\ty_length = (int64_t)y_length_f;\n\n\t\tauto attn = generatePath(w_ceil.data(), y_length, maskSize);\n\t\tstd::vector logVec(192, std::vector(y_length, 0.0f));\n\t\tstd::vector mpVec(192, std::vector(y_length, 0.0f));\n\t\tstd::vector<float> nlogs_pData(192 * y_length);\n\t\tfor (size_t i = 0; i < static_cast<size_t>(y_length); ++i)\n\t\t{\n\t\t\tfor (size_t j = 0; j < 192; ++j)\n\t\t\t{\n\t\t\t\tfor (size_t k = 0; k < maskSize; k++)\n\t\t\t\t{\n\t\t\t\t\tif (attn[i][k])\n\t\t\t\t\t{\n\t\t\t\t\t\tmpVec[j][i] += m_p[j * maskSize + k];\n\t\t\t\t\t\tlogVec[j][i] += logs_p[j * maskSize + k];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnlogs_pData[j * y_length + i] = mpVec[j][i] + FloatRandFn(gen) * exp(logVec[j][i]) * Seq.NoiseScale;\n\t\t\t}\n\t\t}\n\t\tstd::vector y_mask(y_length, 1.0f);\n\t\tconst int64_t zshape[3] = { 1,192,y_length };\n\t\tconst int64_t yshape[3] = { 1,1,y_length };\n\n\t\tstd::vector<Ort::Value> FlowDecInputs, FlowDecOutputs;\n\n\t\tFlowDecInputs.push_back(Ort::Value::CreateTensor<float>(\n\t\t\t*memory_info, nlogs_pData.data(), 192 * y_length, zshape, 3));\n\t\tFlowDecInputs.push_back(Ort::Value::CreateTensor<float>(\n\t\t\t*memory_info, y_mask.data(), y_length, yshape, 3));\n\t\tif (sessionEmb)\n\t\t\tFlowDecInputs.push_back(Ort::Value::CreateTensor<float>(\n\t\t\t\t*memory_info, GEmbidding.data(), GEmbidding.size(), GOutShape.data(), 3));\n\n\t\ttry\n\t\t{\n\t\t\tFlowDecOutputs = sessionFlow->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tFlowInputNames.data(),\n\t\t\t\tFlowDecInputs.data(),\n\t\t\t\tFlowDecInputs.size(),\n\t\t\t\tFlowOutputNames.data(),\n\t\t\t\tFlowOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: dec & flow\\n\") + e.what()))\n\t\t}\n\t\tFlowDecInputs[0] = std::move(FlowDecOutputs[0]);\n\t\tif (sessionEmb)\n\t\t\tFlowDecInputs[1] = std::move(FlowDecInputs[2]);\n\t\tFlowDecInputs.pop_back();\n\t\ttry\n\t\t{\n\t\t\t\n\t\t\tFlowDecOutputs = sessionDec->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tDecInputNames.data(),\n\t\t\t\tFlowDecInputs.data(),\n\t\t\t\tFlowDecInputs.size(),\n\t\t\t\tDecOutputNames.data(),\n\t\t\t\tDecOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: dec & flow\\n\") + e.what()))\n\t\t}\n\t\tconst auto shapeOut = FlowDecOutputs[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tconst auto outData = FlowDecOutputs[0].GetTensorData<float>();\n\t\tfor (int bbb = 0; bbb < shapeOut[2]; bbb++)\n\t\t\t_Audio[0].emplace_back(static_cast<int16_t>(outData[bbb] * 32768.0f));\n\t}\n\tif (!_Audio[0].empty())\n\t{\n\t\t_Audio[0].insert(_Audio[0].end(), size_t(_samplingRate), 0);\n\t\tPCM.emplace_back(std::move(_Audio[0]));\n\t}\n\t_callback(proc++, _Input.size());\n\tlogger.log(\"[Inference] Vits Inference Fin\");\n\treturn PCM;\n}\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Models/src/VitsSvc.cpp",
    "content": "﻿#include \"../header/VitsSvc.hpp\"\n#include \"../../AvCodec/AvCodeResample.h\"\n#include \"../../InferTools/F0Extractor/F0ExtractorManager.hpp\"\n#include <random>\n#include \"../../Logger/MoeSSLogger.hpp\"\n#include \"../../InferTools/TensorExtractor/TensorExtractorManager.hpp\"\n#include <regex>\n\nMoeVoiceStudioCoreHeader\nvoid VitsSvc::Destory()\n{\n\tdelete hubert;\n\thubert = nullptr;\n\n\tdelete VitsSvcModel;\n\tVitsSvcModel = nullptr;\n}\n\nVitsSvc::~VitsSvc()\n{\n\tlogger.log(L\"[Info] unloading VitsSvc Models\");\n\tDestory();\n\tlogger.log(L\"[Info] VitsSvc Models unloaded\");\n}\n\nVitsSvc::VitsSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_):\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioVitsSingingVoiceConversion\");\n\n\t//Check Folder\n\tif (_Config[\"Folder\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"folder\\\" (Model Folder)\")\n\tif (!_Config[\"Folder\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Must Be String\")\n\tconst auto _folder = to_wide_string(_Config[\"Folder\"].GetString());\n\tconst auto cluster_folder = GetCurrentFolder() + L\"/Models/\" + _folder;\n\tif (_folder.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Can Not Be Empty\")\n\tconst std::wstring _path = GetCurrentFolder() + L\"/Models/\" + _folder + L\"/\" + _folder;\n\n\tif (_Config[\"Hubert\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Hubert\\\" (Hubert Folder)\")\n\tif (!_Config[\"Hubert\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Must Be String\")\n\tconst std::wstring HuPath = to_wide_string(_Config[\"Hubert\"].GetString());\n\tif (HuPath.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Can Not Be Empty\")\n\n\tstd::map<std::string, std::wstring> _PathDict;\n\t_PathDict[\"Cluster\"] = cluster_folder;\n\t_PathDict[\"Hubert\"] = (GetCurrentFolder() + L\"/hubert/\" + HuPath + L\".onnx\");\n\t_PathDict[\"RVC\"] = (_path + L\"_RVC.onnx\");\n\t_PathDict[\"SoVits\"] = (_path + L\"_SoVits.onnx\");\n\tif (_Config[\"ShallowDiffusion\"].IsString())\n\t{\n\t\tconst std::wstring ShallowDiffusionConf = GetCurrentFolder() + L\"/Models/\" + to_wide_string(_Config[\"ShallowDiffusion\"].GetString()) + L\".json\";\n\t\t_PathDict[\"ShallowDiffusionConfig\"] = ShallowDiffusionConf;\n\t\tif (_Config[\"MelOperator\"].IsString())\n\t\t\t_PathDict[\"MelOperator\"] = GetCurrentFolder() + L\"/MelOps\" + to_wide_string(_Config[\"MelOperator\"].GetString()) + L\".onnx\";\n\t\telse\n\t\t\t_PathDict[\"MelOperator\"] = GetCurrentFolder() + L\"/MelOps.onnx\";\n\t}\n\n\tload(_PathDict, _Config, _ProgressCallback, ExecutionProvider_, DeviceID_, ThreadCount_, true);\n}\n\nVitsSvc::VitsSvc(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_) :\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioVitsSingingVoiceConversion\");\n\tload(_PathDict, _Config, _ProgressCallback, ExecutionProvider_, DeviceID_, ThreadCount_, false);\n}\n\nvoid VitsSvc::load(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback, ExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_, bool MoeVoiceStudioFrontEnd)\n{\n\n\t//Check SamplingRate\n\tif (_Config[\"Rate\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Rate\\\" (SamplingRate)\")\n\tif (_Config[\"Rate\"].IsInt() || _Config[\"Rate\"].IsInt64())\n\t\t_samplingRate = _Config[\"Rate\"].GetInt();\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Rate\\\" (SamplingRate) Must Be Int/Int64\")\n\n\tlogger.log(L\"[Info] Current Sampling Rate is\" + std::to_wstring(_samplingRate));\n\n\tif (!_Config[\"SoVits3\"].IsNull() && _Config[\"SoVits3\"].GetBool())\n\t\tVitsSvcVersion = L\"SoVits3.0\";\n\telse if (!_Config[\"SoVits2\"].IsNull() && _Config[\"SoVits2\"].GetBool())\n\t\tVitsSvcVersion = L\"SoVits2.0\";\n\telse if (!_Config[\"SoVits2.0\"].IsNull() && _Config[\"SoVits2.0\"].GetBool())\n\t\tVitsSvcVersion = L\"SoVits2.0\";\n\telse if (!_Config[\"SoVits3.0\"].IsNull() && _Config[\"SoVits3.0\"].GetBool())\n\t\tVitsSvcVersion = L\"SoVits3.0\";\n\telse if (_Config[\"Type\"].GetString() == std::string(\"RVC\"))\n\t\tVitsSvcVersion = L\"RVC\";\n\n\tif (!_Config[\"SoVits4.0V2\"].IsNull() && _Config[\"SoVits4.0V2\"].GetBool())\n\t\tVitsSvcVersion = L\"SoVits4.0-DDSP\";\n\n#ifdef MOEVSDMLPROVIDER\n\tif (ExecutionProvider_ == ExecutionProviders::DML && VitsSvcVersion == L\"SoVits4.0-DDSP\")\n\t\tLibDLVoiceCodecThrow(\"[Error] DirectXMl Not Support SoVits4.0V2, Please Use Cuda Or Cpu\")\n#endif\n\n\tif (!(_Config[\"Hop\"].IsInt() || _Config[\"Hop\"].IsInt64()))\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must Exist And Must Be Int\")\n\tHopSize = _Config[\"Hop\"].GetInt();\n\n\tif (!(_Config[\"HiddenSize\"].IsInt() || _Config[\"HiddenSize\"].IsInt64()))\n\t\tlogger.log(L\"[Warn] Missing Field \\\"HiddenSize\\\", Use Default Value (256)\");\n\telse\n\t\tHiddenUnitKDims = _Config[\"HiddenSize\"].GetInt();\n\n\tif (!_Config[\"CharaMix\"].IsBool())\n\t\tlogger.log(L\"[Warn] Missing Field \\\"CharaMix\\\", Use Default Value (False)\");\n\telse\n\t\tEnableCharaMix = _Config[\"CharaMix\"].GetBool();\n\n\tif (_Config[\"Cluster\"].IsString())\n\t{\n\t\tconst auto clus = to_wide_string(_Config[\"Cluster\"].GetString());\n\t\tif (!(_Config[\"KMeansLength\"].IsInt() || _Config[\"KMeansLength\"].IsInt64()))\n\t\t\tlogger.log(L\"[Warn] Missing Field \\\"KMeansLength\\\", Use Default Value (10000)\");\n\t\telse\n\t\t\tClusterCenterSize = _Config[\"KMeansLength\"].GetInt();\n\t\ttry\n\t\t{\n\t\t\tCluster = MoeVoiceStudioCluster::GetMoeVSCluster(clus, _PathDict.at(\"Cluster\"), HiddenUnitKDims, ClusterCenterSize);\n\t\t\tEnableCluster = true;\n\t\t}\n\t\tcatch (std::exception& e)\n\t\t{\n\t\t\tlogger.error(e.what());\n\t\t\tEnableCluster = false;\n\t\t}\n\t}\n\n\tif (HopSize < 1)\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must > 0\")\n\n\tif (_Config[\"Volume\"].IsBool())\n\t\tEnableVolume = _Config[\"Volume\"].GetBool();\n\telse\n\t\tlogger.log(L\"[Warn] Missing Field \\\"Volume\\\", Use Default Value (False)\");\n\n\tif (_Config[\"Characters\"].IsArray())\n\t\tSpeakerCount = int64_t(_Config[\"Characters\"].Size());\n\n\t_callback = _ProgressCallback;\n\n\t//LoadModels\n\ttry\n\t{\n\t\tlogger.log(L\"[Info] loading VitsSvcModel Models\");\n\t\thubert = new Ort::Session(*env, _PathDict.at(\"Hubert\").c_str(), *session_options);\n\t\tif (VitsSvcVersion == L\"RVC\")\n\t\t\tVitsSvcModel = new Ort::Session(*env, _PathDict.at(\"RVC\").c_str(), *session_options);\n\t\telse\n\t\t\tVitsSvcModel = new Ort::Session(*env, _PathDict.at(\"SoVits\").c_str(), *session_options);\n\t\tlogger.log(L\"[Info] VitsSvcModel Models loaded\");\n\t}\n\tcatch (Ort::Exception& _exception)\n\t{\n\t\tDestory();\n\t\tLibDLVoiceCodecThrow(_exception.what())\n\t}\n\n\tif (VitsSvcModel->GetInputCount() == 4 && VitsSvcVersion != L\"SoVits3.0\")\n\t\tVitsSvcVersion = L\"SoVits2.0\";\n\n\tif (_Config[\"TensorExtractor\"].IsString())\n\t\tVitsSvcVersion = to_wide_string(_Config[\"TensorExtractor\"].GetString());\n\n\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others _others_param;\n\t_others_param.Memory = *memory_info;\n\ttry\n\t{\n\t\t_TensorExtractor = GetTensorExtractor(VitsSvcVersion, 48000, _samplingRate, HopSize, EnableCharaMix, EnableVolume, HiddenUnitKDims, SpeakerCount, _others_param);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tDestory();\n\t\tLibDLVoiceCodecThrow(e.what())\n\t}\n}\n\nstd::vector<int16_t> VitsSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Start!\");\n\tstd::vector<int16_t> _data;\n\tsize_t total_audio_size = 0;\n\tfor (const auto& data_size : _Slice.Slices)\n\t\ttotal_audio_size += data_size.OrgLen;\n\t_data.reserve(size_t(double(total_audio_size) * 1.5));\n\t_callback(0, _Slice.Slices.size());\n\tsize_t process = 0;\n\tfor (auto& CurSlice : _Slice.Slices)\n\t{\n\t\tconst auto InferDurTime = clock();\n\t\tconst auto CurRtn = SliceInference(CurSlice, _InferParams, process);\n\t\t_data.insert(_data.end(), CurRtn.data(), CurRtn.data() + CurRtn.size());\n\t\tif(CurSlice.IsNotMute)\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Segment[\" + std::to_wstring(process) + L\"] Finished! Segment Use Time: \" + std::to_wstring(clock() - InferDurTime) + L\"ms, Segment Duration: \" + std::to_wstring((size_t)CurSlice.OrgLen * 1000ull / 48000ull) + L\"ms\");\n\t\telse\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Jump Empty Segment[\" + std::to_wstring(process) + L\"]!\");\n\t\t_callback(++process, _Slice.Slices.size());\n\t}\n\tlogger.log(L\"[Inferring] \\\"\" + _Slice.Path + L\"\\\" Finished\");\n\treturn _data;\n}\n\nShallowDiffusionData DataForDiffusion;\n\nShallowDiffusionData& GetDataForShallowDiffusion()\n{\n\treturn DataForDiffusion;\n}\n\nstd::vector<int16_t> VitsSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const\n{\n\tDataForDiffusion._16KAudio.clear();\n\tDataForDiffusion.CUDAF0.clear();\n\tDataForDiffusion.CUDAVolume.clear();\n\tDataForDiffusion.CUDASpeaker.clear();\n\tDataForDiffusion.NeedPadding = false;\n\tif (_Slice.IsNotMute)\n\t{\n\t\tDataForDiffusion._16KAudio = InferTools::InterpResample(_Slice.Audio, 48000, 16000, 32768.0f);\n\t\tconst auto src_audio_length = DataForDiffusion._16KAudio.size();\n\t\tbool NeedPadding = false;\n\t\tif (_cur_execution_provider == ExecutionProviders::CUDA)\n\t\t{\n\t\t\tNeedPadding = DataForDiffusion._16KAudio.size() % 16000;\n\t\t\tconst size_t WavPaddedSize = DataForDiffusion._16KAudio.size() / 16000 + 1;\n\t\t\tif (NeedPadding)\n\t\t\t\tDataForDiffusion._16KAudio.resize(WavPaddedSize * 16000, 0.f);\n\t\t}\n\n\t\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)DataForDiffusion._16KAudio.size() };\n\t\tstd::vector<Ort::Value> HubertInputTensors, HubertOutPuts;\n\t\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, DataForDiffusion._16KAudio.data(), DataForDiffusion._16KAudio.size(), HubertInputShape, 3));\n\t\ttry {\n\t\t\tHubertOutPuts = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\thubertInput.data(),\n\t\t\t\tHubertInputTensors.data(),\n\t\t\t\tHubertInputTensors.size(),\n\t\t\t\thubertOutput.data(),\n\t\t\t\thubertOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\n\t\t}\n\t\tconst auto HubertSize = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\tconst auto HubertOutPutData = HubertOutPuts[0].GetTensorMutableData<float>();\n\t\tauto HubertOutPutShape = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tif (HubertOutPutShape[2] != HiddenUnitKDims)\n\t\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\n\n\t\tstd::vector SrcHiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\n\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\t\tif (SpeakerIdx >= SpeakerCount)\n\t\t\tSpeakerIdx = SpeakerCount;\n\t\tif (SpeakerIdx < 0)\n\t\t\tSpeakerIdx = 0;\n\n\t\tconst auto max_cluster_size = int64_t((size_t)HubertOutPutShape[1] * src_audio_length / DataForDiffusion._16KAudio.size());\n\t\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\n\t\t{\n\t\t\tconst auto pts = Cluster->find(SrcHiddenUnits.data(), long(SpeakerIdx), max_cluster_size);\n\t\t\tfor (int64_t indexs = 0; indexs < max_cluster_size * HiddenUnitKDims; ++indexs)\n\t\t\t\tSrcHiddenUnits[indexs] = SrcHiddenUnits[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\n\t\t}\n\n\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::InferParams _Inference_Params;\n\t\t_Inference_Params.AudioSize = _Slice.Audio.size();\n\t\t_Inference_Params.Chara = SpeakerIdx;\n\t\t_Inference_Params.NoiseScale = _InferParams.NoiseScale;\n\t\t_Inference_Params.DDSPNoiseScale = _InferParams.DDSPNoiseScale;\n\t\t_Inference_Params.Seed = int(_InferParams.Seed);\n\t\t_Inference_Params.upKeys = _InferParams.Keys;\n\n\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Inputs InputTensors;\n\n\t\tDataForDiffusion.NeedPadding = NeedPadding;\n\n\t\tif (_cur_execution_provider == ExecutionProviders::CUDA && NeedPadding)\n\t\t{\n\t\t\tDataForDiffusion.CUDAF0 = _Slice.F0;\n\t\t\tDataForDiffusion.CUDAVolume = _Slice.Volume;\n\t\t\tDataForDiffusion.CUDASpeaker = _Slice.Speaker;\n\t\t\tconst auto src_src_audio_length = _Slice.Audio.size();\n\t\t\tconst size_t WavPaddedSize = ((src_src_audio_length / 48000) + 1) * 48000;\n\t\t\tconst size_t AudioPadSize = WavPaddedSize - src_src_audio_length;\n\t\t\tconst size_t PaddedF0Size = DataForDiffusion.CUDAF0.size() + (DataForDiffusion.CUDAF0.size() * AudioPadSize / src_src_audio_length);\n\n\t\t\tif (!DataForDiffusion.CUDAF0.empty()) DataForDiffusion.CUDAF0.resize(PaddedF0Size, 0.f);\n\t\t\tif (!DataForDiffusion.CUDAVolume.empty()) DataForDiffusion.CUDAVolume.resize(PaddedF0Size, 0.f);\n\t\t\tfor (auto iSpeaker : DataForDiffusion.CUDASpeaker)\n\t\t\t{\n\t\t\t\tif (!iSpeaker.empty())\n\t\t\t\t\tiSpeaker.resize(PaddedF0Size, 0.f);\n\t\t\t}\n\t\t\t_Inference_Params.AudioSize = WavPaddedSize;\n\t\t\tInputTensors = _TensorExtractor->Extract(SrcHiddenUnits, DataForDiffusion.CUDAF0, DataForDiffusion.CUDAVolume, DataForDiffusion.CUDASpeaker, _Inference_Params);\n\t\t}\n\t\telse\n\t\t\tInputTensors = _TensorExtractor->Extract(SrcHiddenUnits, _Slice.F0, _Slice.Volume, _Slice.Speaker, _Inference_Params);\n\n\n\t\tstd::vector<Ort::Value> finaOut;\n\t\ttry\n\t\t{\n\t\t\tfinaOut = VitsSvcModel->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tInputTensors.InputNames,\n\t\t\t\tInputTensors.Tensor.data(),\n\t\t\t\tInputTensors.Tensor.size(),\n\t\t\t\tsoVitsOutput.data(),\n\t\t\t\tsoVitsOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: VitsSvc\\n\") + e.what()))\n\t\t}\n\n\t\tconst auto dstWavLen = (_Slice.OrgLen * int64_t(_samplingRate)) / 48000;\n\t\t/*if (shallow_diffusion && stft_operator && _InferParams.UseShallowDiffusion)\n\t\t{\n\t\t\tauto PCMAudioBegin = finaOut[0].GetTensorData<float>();\n\t\t\tauto PCMAudioEnd = PCMAudioBegin + finaOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\t\tauto MelSpec = MelExtractor(PCMAudioBegin, PCMAudioEnd);\n\t\t\tauto ShallowParam = _InferParams;\n\t\t\tShallowParam.SrcSamplingRate = _samplingRate;\n\t\t\tauto ShallowDiffusionOutput = shallow_diffusion->ShallowDiffusionInference(\n\t\t\t\tRawWav,\n\t\t\t\tShallowParam,\n\t\t\t\tstd::move(MelSpec[0]),\n\t\t\t\tNeedPadding ? CUDAF0 : _Slice.F0,\n\t\t\t\tNeedPadding ? CUDAVolume : _Slice.Volume,\n\t\t\t\tNeedPadding ? CUDASpeaker : _Slice.Speaker\n\t\t\t);\n\t\t\tShallowDiffusionOutput.resize(dstWavLen, 0);\n\t\t\treturn ShallowDiffusionOutput;\n\t\t}*/\n\n\t\tconst auto shapeOut = finaOut[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tstd::vector<int16_t> TempVecWav = std::vector<int16_t>(dstWavLen, 0);\n\t\tif (shapeOut[2] < dstWavLen)\n\t\t\tfor (int64_t bbb = 0; bbb < shapeOut[2]; bbb++)\n\t\t\t\tTempVecWav[bbb] = static_cast<int16_t>(Clamp(finaOut[0].GetTensorData<float>()[bbb]) * 32766.0f);\n\t\telse\n\t\t\tfor (int64_t bbb = 0; bbb < dstWavLen; bbb++)\n\t\t\t\tTempVecWav[bbb] = static_cast<int16_t>(Clamp(finaOut[0].GetTensorData<float>()[bbb]) * 32766.0f);\n\t\treturn TempVecWav;\n\t}\n\t//Mute clips\n\tconst auto len = size_t(_Slice.OrgLen * int64_t(_samplingRate) / 48000);\n\treturn { len, 0i16, std::allocator<int16_t>() };\n}\n\nstd::vector<std::wstring> VitsSvc::Inference(std::wstring& _Paths,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\n{\n\tstd::vector<std::wstring> _Lens = GetOpenFileNameMoeVS();\n\tstd::vector<std::wstring> AudioFolders;\n\tfor (auto& path : _Lens)\n\t{\n\t\tpath = std::regex_replace(path, std::wregex(L\"\\\\\\\\\"), L\"/\");\n\t\tauto PCMData = AudioPreprocess().codec(path, 48000);\n\t\tauto slicer_setting = _SlicerSettings;\n\t\tslicer_setting.SamplingRate = 48000;\n\t\tauto SlicePos = SliceAudio(PCMData, slicer_setting);\n\t\tauto Audio = GetAudioSlice(PCMData, SlicePos, slicer_setting);\n\t\tAudio.Path = path;\n\t\tPreProcessAudio(Audio, 48000, 512, _InferParams.F0Method);\n\t\tstd::vector<int16_t> _data = SliceInference(Audio, _InferParams);\n\n\t\tstd::wstring OutFolder = GetCurrentFolder() + L\"/Outputs/\" + path.substr(path.rfind(L'/') + 1, path.rfind(L'.') - path.rfind(L'/') - 1);\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\t\tif (SpeakerIdx >= SpeakerCount)\n\t\t\tSpeakerIdx = SpeakerCount;\n\t\tif (SpeakerIdx < 0)\n\t\t\tSpeakerIdx = 0;\n\t\tOutFolder += L\"-Params-(-NoiseScale=\" +\n\t\t\tstd::to_wstring(_InferParams.NoiseScale) +\n\t\t\tL\"-Speaker=\" +\n\t\t\t(EnableCharaMix ? std::wstring(L\"SpeakerMix\") : std::to_wstring(SpeakerIdx)) +\n\t\t\tL\"-Seed=\" +\n\t\t\tstd::to_wstring(_InferParams.Seed) +\n\t\t\tL\"-F0Method=\" +\n\t\t\t_InferParams.F0Method + L\")\";\n\t\tif (_waccess((OutFolder + L\".wav\").c_str(), 0) != -1)\n\t\t{\n\t\t\tfor (size_t idx = 0; idx < 99999999; ++idx)\n\t\t\t\tif (_waccess((OutFolder + L\" (\" + std::to_wstring(idx) + L\").wav\").c_str(), 0) == -1)\n\t\t\t\t{\n\t\t\t\t\tOutFolder += L\" (\" + std::to_wstring(idx) + L\").wav\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\t\telse\n\t\t\tOutFolder += L\".wav\";\n\t\tAudioFolders.emplace_back(OutFolder);\n\t\t_data = InferTools::InterpResample(_data, _samplingRate, 48000, 1i16);\n\t\tInferTools::Wav::WritePCMData(48000, 1, _data, OutFolder);\n\t}\n\treturn AudioFolders;\n}\n\nstd::vector<int16_t> VitsSvc::InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\tauto hubertin = InferTools::InterpResample<float>(PCMData, srcSr, 16000);\n\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\tif (SpeakerIdx >= SpeakerCount)\n\t\tSpeakerIdx = SpeakerCount;\n\tif (SpeakerIdx < 0)\n\t\tSpeakerIdx = 0;\n\tstd::mt19937 gen(int(_InferParams.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\tfloat noise_scale = _InferParams.NoiseScale;\n\tfloat ddsp_noise_scale = _InferParams.DDSPNoiseScale;\n\n\tconst int64_t inputShape[3] = { 1i64,1i64,(int64_t)hubertin.size() };\n\tstd::vector<Ort::Value> inputTensorshu;\n\tinputTensorshu.emplace_back(Ort::Value::CreateTensor(*memory_info, hubertin.data(), hubertin.size(), inputShape, 3));\n\tstd::vector<Ort::Value> hubertOut;\n\n\ttry {\n\t\thubertOut = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\thubertInput.data(),\n\t\t\tinputTensorshu.data(),\n\t\t\tinputTensorshu.size(),\n\t\t\thubertOutput.data(),\n\t\t\thubertOutput.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\n\t}\n\tauto HubertSize = hubertOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tauto HubertOutPutData = hubertOut[0].GetTensorMutableData<float>();\n\tauto HubertOutPutShape = hubertOut[0].GetTensorTypeAndShapeInfo().GetShape();\n\tinputTensorshu.clear();\n\tif (HubertOutPutShape[2] != HiddenUnitKDims)\n\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\n\n\tstd::vector HiddenUnitsSrc(HubertOutPutData, HubertOutPutData + HubertSize);\n\n\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\n\t{\n\t\tconst auto clus_size = HubertOutPutShape[1];\n\t\tconst auto pts = Cluster->find(HiddenUnitsSrc.data(), long(SpeakerIdx), clus_size);\n\t\tfor (size_t indexs = 0; indexs < HiddenUnitsSrc.size(); ++indexs)\n\t\t\tHiddenUnitsSrc[indexs] = HiddenUnitsSrc[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\n\t}\n\n\tconst auto HubertLen = int64_t(HubertSize) / HiddenUnitKDims;\n\tint64_t F0Shape[] = { 1, int64_t(PCMData.size() / HopSize) };\n\tint64_t HiddenUnitShape[] = { 1, HubertLen, HiddenUnitKDims };\n\tconstexpr int64_t LengthShape[] = { 1 };\n\tint64_t CharaEmbShape[] = { 1 };\n\tint64_t CharaMixShape[] = { F0Shape[1], SpeakerCount };\n\tint64_t RandnShape[] = { 1, 192, F0Shape[1] };\n\tconst int64_t IstftShape[] = { 1, 2048, F0Shape[1] };\n\tint64_t RandnCount = F0Shape[1] * 192;\n\tconst int64_t IstftCount = F0Shape[1] * 2048;\n\n\tstd::vector<float> RandnInput, IstftInput, UV, InterpedF0;\n\tstd::vector<int64_t> alignment;\n\tint64_t XLength[1] = { HubertLen };\n\tstd::vector<int64_t> Nsff0;\n\t//auto SoVitsInput = soVitsInput;\n\tint64_t Chara[] = { SpeakerIdx };\n\tstd::vector<float> charaMix;\n\n\tconst auto F0Extractor = MoeVSF0Extractor::GetF0Extractor(_InferParams.F0Method, _samplingRate, HopSize);\n\n\tauto srcF0Data = F0Extractor->ExtractF0(PCMData, PCMData.size() / HopSize);\n\tfor (auto& ifo : srcF0Data)\n\t\tifo *= (float)pow(2.0, static_cast<double>(_InferParams.Keys) / 12.0);\n\tstd::vector<float> HiddenUnits;\n\tstd::vector<float> F0Data;\n\n\tstd::vector<Ort::Value> _Tensors;\n\tstd::vector<const char*> SoVitsInput = soVitsInput;\n\n\t//Compatible with all versions\n\tif (VitsSvcVersion == L\"SoVits3.0\")\n\t{\n\t\tint64_t upSample = _samplingRate / 16000;\n\t\tHiddenUnits.reserve(HubertSize * (upSample + 1));\n\t\tfor (int64_t itS = 0; itS < HiddenUnitShape[1]; ++itS)\n\t\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\n\t\t\t\tHiddenUnits.insert(HiddenUnits.end(), HiddenUnitsSrc.begin() + itS * HiddenUnitKDims, HiddenUnitsSrc.begin() + (itS + 1) * HiddenUnitKDims);\n\t\tHiddenUnitShape[1] *= upSample;\n\t\tHubertSize *= upSample;\n\t\tF0Data = _TensorExtractor->GetInterpedF0(InferTools::InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1])));\n\t\tF0Shape[1] = HiddenUnitShape[1];\n\t\tXLength[0] = HiddenUnitShape[1];\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, F0Data.data(), F0Data.size(), F0Shape, 2));\n\t}\n\telse if (VitsSvcVersion == L\"SoVits2.0\")\n\t{\n\t\tHiddenUnits = std::move(HiddenUnitsSrc);\n\t\tF0Shape[1] = HiddenUnitShape[1];\n\t\tF0Data = InferTools::InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1]));\n\t\tXLength[0] = HiddenUnitShape[1];\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\n\t\tNsff0 = _TensorExtractor->GetNSFF0(F0Data);\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Nsff0.data(), Nsff0.size(), F0Shape, 2));\n\t}\n\telse if (VitsSvcVersion == L\"RVC\")\n\t{\n\t\tconstexpr int64_t upSample = 2;\n\t\tHiddenUnits.reserve(HubertSize * (upSample + 1));\n\t\tfor (int64_t itS = 0; itS < HiddenUnitShape[1]; ++itS)\n\t\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\n\t\t\t\tHiddenUnits.insert(HiddenUnits.end(), HiddenUnitsSrc.begin() + itS * HiddenUnitKDims, HiddenUnitsSrc.begin() + (itS + 1) * HiddenUnitKDims);\n\t\tHiddenUnitShape[1] *= upSample;\n\t\tHubertSize *= upSample;\n\t\tF0Data = InferTools::InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1]));\n\t\tF0Shape[1] = HiddenUnitShape[1];\n\t\tXLength[0] = HiddenUnitShape[1];\n\t\tRandnCount = 192 * F0Shape[1];\n\t\tRandnShape[2] = F0Shape[1];\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\n\t\tInterpedF0 = _TensorExtractor->GetInterpedF0(F0Data);\n\t\tNsff0 = _TensorExtractor->GetNSFF0(InterpedF0);\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Nsff0.data(), Nsff0.size(), F0Shape, 2));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), InterpedF0.size(), F0Shape, 2));\n\t\tSoVitsInput = RVCInput;\n\t\tRandnInput = std::vector<float>(RandnCount, 0.f);\n\t\tfor (auto& it : RandnInput)\n\t\t\tit = normal(gen) * noise_scale;\n\t}\n\telse\n\t{\n\t\tHiddenUnits = std::move(HiddenUnitsSrc);\n\t\tF0Data = InferTools::InterpFunc(srcF0Data, long(srcF0Data.size()), long(F0Shape[1]));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\n\t\tInterpedF0 = _TensorExtractor->GetInterpedF0(F0Data);\n\t\talignment = _TensorExtractor->GetAligments(F0Shape[1], HubertLen);\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), InterpedF0.size(), F0Shape, 2));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, alignment.data(), InterpedF0.size(), F0Shape, 2));\n\t\tif (VitsSvcVersion != L\"SoVits4.0-DDSP\")\n\t\t{\n\t\t\tUV = _TensorExtractor->GetUV(F0Data);\n\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\" };\n\t\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, UV.data(), UV.size(), F0Shape, 2));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\" };\n\t\t\tIstftInput = std::vector<float>(IstftCount, ddsp_noise_scale);\n\t\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, IstftInput.data(), IstftInput.size(), IstftShape, 3));\n\t\t}\n\t\tRandnInput = std::vector<float>(RandnCount, 0.f);\n\t\tfor (auto& it : RandnInput)\n\t\t\tit = normal(gen) * noise_scale;\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RandnInput.data(), RandnCount, RandnShape, 3));\n\t}\n\n\n\tif (EnableCharaMix)\n\t{\n\t\tCharaMixShape[0] = F0Shape[1];\n\t\tstd::vector charaMap(SpeakerCount, 0.f);\n\t\tcharaMap[SpeakerIdx] = 1.f;\n\t\tcharaMix.reserve((SpeakerCount + 1) * F0Shape[1]);\n\t\tfor (int64_t index = 0; index < F0Shape[1]; ++index)\n\t\t\tcharaMix.insert(charaMix.end(), charaMap.begin(), charaMap.end());\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, charaMix.data(), charaMix.size(), CharaMixShape, 2));\n\t}\n\telse\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, Chara, 1, CharaEmbShape, 1));\n\n\tif (VitsSvcVersion == L\"RVC\")\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RandnInput.data(), RandnCount, RandnShape, 3));\n\n\tstd::vector<float> VolumeData;\n\n\tif (EnableVolume)\n\t{\n\t\tSoVitsInput.emplace_back(\"vol\");\n\t\tVolumeData = ExtractVolume(PCMData, HopSize);\n\t\tVolumeData.resize(F0Shape[1], 0.f);\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, VolumeData.data(), F0Shape[1], F0Shape, 2));\n\t}\n\n\tstd::vector<Ort::Value> finaOut;\n\n\tfinaOut = VitsSvcModel->Run(Ort::RunOptions{ nullptr },\n\t\tSoVitsInput.data(),\n\t\t_Tensors.data(),\n\t\t_Tensors.size(),\n\t\tsoVitsOutput.data(),\n\t\tsoVitsOutput.size());\n\n\tconst auto dstWavLen = finaOut[0].GetTensorTypeAndShapeInfo().GetShape()[2];\n\tstd::vector<int16_t> TempVecWav(dstWavLen, 0);\n\tfor (int64_t bbb = 0; bbb < dstWavLen; bbb++)\n\t\tTempVecWav[bbb] = static_cast<int16_t>(Clamp(finaOut[0].GetTensorData<float>()[bbb]) * 32766.0f);\n\tif(VitsSvcVersion == L\"RVC\")\n\t\tTempVecWav = InferTools::InterpResample(TempVecWav, _samplingRate, 48000, 1i16);\n\treturn TempVecWav;\n}\n\n/*std::vector<Ort::Value> VitsSvc::MelExtractor(const float* PCMAudioBegin, const float* PCMAudioEnd) const\n{\n\tstd::vector<float> _SRAudio{PCMAudioBegin, PCMAudioEnd};\n\t_SRAudio = InferTools::InterpResample(_SRAudio, _samplingRate, 16000, 1.f);\n\tconst auto _MelLength = int64_t(_SRAudio.size() * shallow_diffusion->GetSamplingRate() / 16000ull / shallow_diffusion->GetHopSize());\n\tconst auto _SpecLength = (int64_t)ceil(double(_SRAudio.size()) / 16000. * 100.);\n\tauto Alignment = _TensorExtractor->GetAligments(_MelLength, _SpecLength);\n\tAlignment.resize(_MelLength);\n\tstd::vector<Ort::Value> AudioTensors;\n\tconst int64_t AudioInputShape[] = { 1,1,int64_t(_SRAudio.size()) };\n\tconst int64_t AligShape[] = { 1,_MelLength };\n\tAudioTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, _SRAudio.data(), _SRAudio.size(), AudioInputShape, 3));\n\tAudioTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, Alignment.data(), Alignment.size(), AligShape, 2));\n\ttry\n\t{\n\t\treturn stft_operator->Run(Ort::RunOptions{ nullptr },\n\t\t\tStftInput.data(),\n\t\t\tAudioTensors.data(),\n\t\t\tAudioTensors.size(),\n\t\t\tStftOutput.data(),\n\t\t\tStftOutput.size()\n\t\t);\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: ShallowDiffusionStftOperator\\n\") + e.what()).c_str());\n\t}\n}*/\n\n//已弃用（旧MoeSS的推理函数）\n#ifdef MOESSDFN\nstd::vector<int16_t> VitsSvc::InferBatch() const\n{\n\tstd::wstring RawPath;\n\tint ret = InsertMessageToEmptyEditBox(RawPath);\n\tif (ret == -1)\n\t\tLibDLVoiceCodecThrow(\"TTS Does Not Support Automatic Completion\");\n\tif (ret == -2)\n\t\tLibDLVoiceCodecThrow(\"Please Select Files\");\n\tRawPath += L'\\n';\n\tstd::vector<std::wstring> _Lens = CutLens(RawPath);\n\tconst auto params = _get_init_params();\n\tauto tran = static_cast<int>(params.keys);\n\tauto threshold = static_cast<double>(params.threshold);\n\tauto minLen = static_cast<unsigned long>(params.minLen);\n\tauto frame_len = static_cast<unsigned long>(params.frame_len);\n\tauto frame_shift = static_cast<unsigned long>(params.frame_shift);\n\tif (frame_shift < 512 || frame_shift > 10240)\n\t\tframe_shift = 512;\n\tif (frame_len < 1024 || frame_len > 20480)\n\t\tframe_len = 1024;\n\tif (frame_shift > frame_len)\n\t{\n\t\tframe_shift = 512;\n\t\tframe_len = 4 * 1024;\n\t}\n\tif (minLen < 3 || minLen > 30)\n\t\tminLen = 3;\n\tif (threshold < 10.0 || threshold > 2000.0)\n\t\tthreshold = 30.0;\n\tint64_t charEmb = params.chara;\n\n\tstd::mt19937 gen(int(params.seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\tfloat noise_scale = params.noise_scale;\n\tfloat ddsp_noise_scale = params.noise_scale_w;\n\tif (noise_scale > 50.0f)\n\t\tnoise_scale = 1.0f;\n\tif (ddsp_noise_scale > 50.0f)\n\t\tddsp_noise_scale = 1.0f;\n\tfor (auto& path : _Lens)\n\t{\n\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + path + L'\\\"');\n\t\tsize_t proc = 0;\n\t\tif (path[0] == L'\\\"')\n\t\t\tpath = path.substr(1);\n\t\tif (path[path.length() - 1] == L'\\\"')\n\t\t\tpath.pop_back();\n\t\tstd::vector<int16_t> _data;\n\t\t//Audio\n\t\tlogger.log(L\"[Inferring] PreProcessing \\\"\" + path + L\"\\\" Encoder\");\n\t\tauto RawWav = AudioPreprocess().codec(path, _samplingRate);\n\t\tauto HubertWav = AudioPreprocess().codec(path, 16000);\n\t\tauto info = cutWav(RawWav, threshold, minLen, static_cast<unsigned short>(frame_len), static_cast<unsigned short>(frame_shift));\n\t\tfor (size_t i = 1; i < info.cutOffset.size(); ++i)\n\t\t\tif ((info.cutOffset[i] - info.cutOffset[i - 1]) / RawWav.getHeader().bytesPerSec > 90)\n\t\t\t\tLibDLVoiceCodecThrow(\"Reached max slice length, please change slicer param\");\n\n\t\tconst auto LenFactor = ((double)16000 / (double)_samplingRate);\n\t\t_callback(proc, info.cutTag.size());\n\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + path + L\"\\\" Svc\");\n\t\tfor (size_t i = 1; i < info.cutOffset.size(); ++i)\n\t\t{\n\t\t\tif (info.cutTag[i - 1])\n\t\t\t{\n\t\t\t\tauto featureInput = F0PreProcess(_samplingRate, (short)hop);\n\t\t\t\tconst auto len = (info.cutOffset[i] - info.cutOffset[i - 1]) / 2;\n\t\t\t\tconst auto srcPos = info.cutOffset[i - 1] / 2;\n\t\t\t\tstd::vector<double> source(len, 0.0);\n\n\t\t\t\tfor (unsigned long long j = 0; j < len; ++j)\n\t\t\t\t\tsource[j] = (double)RawWav[srcPos + j] / 32768.0;\n\n\t\t\t\t//hubertIn\n\t\t\t\tconst auto hubertInLen = (size_t)((double)len * LenFactor);\n\t\t\t\tstd::vector<float> hubertin(hubertInLen, 0.0);\n\t\t\t\tconst auto startPos = (size_t)(((double)info.cutOffset[i - 1] / 2.0) * LenFactor);\n\t\t\t\tfor (size_t j = 0; j < hubertInLen; ++j)\n\t\t\t\t\thubertin[j] = (float)HubertWav[startPos + j] / 32768.0f;\n\n\t\t\t\t//hubert\n\t\t\t\tconst int64_t inputShape[3] = { 1i64,1i64,(int64_t)hubertInLen };\n\t\t\t\tstd::vector<Ort::Value> inputTensors;\n\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, hubertin.data(), hubertInLen, inputShape, 3));\n\t\t\t\tstd::vector<Ort::Value> hubertOut;\n\n\t\t\t\ttry {\n\t\t\t\t\thubertOut = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\thubertInput.data(),\n\t\t\t\t\t\tinputTensors.data(),\n\t\t\t\t\t\tinputTensors.size(),\n\t\t\t\t\t\thubertOutput.data(),\n\t\t\t\t\t\thubertOutput.size());\n\t\t\t\t}\n\t\t\t\tcatch (Ort::Exception& e)\n\t\t\t\t{\n\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()).c_str());\n\t\t\t\t}\n\t\t\t\tauto hubertOutData = hubertOut[0].GetTensorMutableData<float>();\n\t\t\t\tauto hubertOutLen = hubertOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\t\t\tauto hubertOutShape = hubertOut[0].GetTensorTypeAndShapeInfo().GetShape();\n\n\t\t\t\tstd::vector<long long> inputPitch1, alignment;\n\t\t\t\tstd::vector<float> inputPitch2;\n\t\t\t\tF0PreProcess::V4Return v4_return;\n\t\t\t\tstd::vector<float> hubOutData(hubertOutData, hubertOutData + hubertOutLen);\n\t\t\t\tif (SV3)\n\t\t\t\t{\n\t\t\t\t\tif (_samplingRate / 16000 == 2)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (int64_t itS = hubertOutShape[1] - 1; itS + 1; --itS)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\thubOutData.insert(hubOutData.begin() + itS * 256, hubOutData.begin() + itS * 256, hubOutData.begin() + (itS + 1) * 256);\n\t\t\t\t\t\t}\n\t\t\t\t\t\thubertOutShape[1] *= 2;\n\t\t\t\t\t\thubertOutLen *= 2;\n\t\t\t\t\t\tinputPitch2 = featureInput.GetF0AndOtherInput3(source.data(), (long long)len, (long long)hubertOutShape[1], (long long)tran);\n\t\t\t\t\t}\n\t\t\t\t\telse if (_samplingRate / 16000 == 3)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (int64_t itS = hubertOutShape[1] - 1; itS + 1; --itS)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\thubOutData.insert(hubOutData.begin() + itS * 256, hubOutData.begin() + itS * 256, hubOutData.begin() + (itS + 1) * 256);\n\t\t\t\t\t\t\thubOutData.insert(hubOutData.begin() + itS * 256, hubOutData.begin() + itS * 256, hubOutData.begin() + (itS + 1) * 256);\n\t\t\t\t\t\t}\n\t\t\t\t\t\thubertOutShape[1] *= 3;\n\t\t\t\t\t\thubertOutLen *= 3;\n\t\t\t\t\t\tinputPitch2 = featureInput.GetF0AndOtherInput3(source.data(), (long long)len, (long long)hubertOutShape[1], (long long)tran);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tLibDLVoiceCodecThrow(\"SoVits3.0 Only Support Sr: 48K,32K\");\n\t\t\t\t}\n\t\t\t\telse if (SV4)\n\t\t\t\t{\n\t\t\t\t\talignment = getAligments(len / hop, hubertOutShape[1]);\n\t\t\t\t\tv4_return = featureInput.GetF0AndOtherInput4(source.data(), (long long)len, tran);\n\t\t\t\t}\n\t\t\t\telse if (_modelType == modelType::RVC)\n\t\t\t\t{\n\t\t\t\t\tfor (int64_t itS = hubertOutShape[1] - 1; itS + 1; --itS)\n\t\t\t\t\t{\n\t\t\t\t\t\thubOutData.insert(hubOutData.begin() + itS * 256, hubOutData.begin() + itS * 256, hubOutData.begin() + (itS + 1) * 256);\n\t\t\t\t\t}\n\t\t\t\t\thubertOutShape[1] *= 2;\n\t\t\t\t\thubertOutLen *= 2;\n\t\t\t\t\tauto f0data = featureInput.GetF0AndOtherInputR(source.data(), (long long)len, (long long)hubertOutShape[1], (long long)tran);\n\t\t\t\t\tinputPitch1 = std::move(f0data.f0);\n\t\t\t\t\tinputPitch2 = std::move(f0data.f0f);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tinputPitch1 = featureInput.GetF0AndOtherInput(source.data(), (long long)len, (long long)hubertOutShape[1], (long long)tran);\n\t\t\t\t}\n\n\t\t\t\tinputTensors.clear();\n\t\t\t\tauto SoVitsInput = soVitsInput;\n\t\t\t\t//vits\n\t\t\t\tconstexpr long long ashape[1] = { 1 };\n\t\t\t\tlong long ainput[1] = { hubertOutShape[1] };\n\t\t\t\tconst long long bshape[2] = { 1, featureInput.getLen() };\n\t\t\t\tlong long cdata[1] = { charEmb };\n\t\t\t\tconstexpr long long cshape[1] = { 1 };\n\t\t\t\tconst int64 zinputShape[3] = { 1,192,featureInput.getLen() };\n\t\t\t\tconst int64 zinputCount = featureInput.getLen() * 192;\n\t\t\t\tstd::vector<float> zinput(zinputCount, 0.0);\n\n\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, hubOutData.data(), hubertOutLen, hubertOutShape.data(), 3));\n\t\t\t\tstd::vector<float> T_Window(2048 * featureInput.getLen(), ddsp_noise_scale);\n\n\t\t\t\tint64_t T_WindowShape[] = { 1, 2048, featureInput.getLen() };\n\t\t\t\tif (!SV4)\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, ainput, 1, ashape, 1));\n\t\t\t\tif (SV3)\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor<float>(*memory_info, inputPitch2.data(), featureInput.getLen(), bshape, 2));\n\t\t\t\telse if (SV4)\n\t\t\t\t{\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, v4_return.f0.data(), featureInput.getLen(), bshape, 2));\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, alignment.data(), featureInput.getLen(), bshape, 2));\n\n\t\t\t\t\tif (!SVV2)\n\t\t\t\t\t{\n\t\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, v4_return.uv.data(), featureInput.getLen(), bshape, 2));\n\t\t\t\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\" };\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, T_Window.data(), T_Window.size(), T_WindowShape, 3));\n\t\t\t\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\" };\n\t\t\t\t\t}\n\t\t\t\t\tfor (auto& it : zinput)\n\t\t\t\t\t\tit = normal(gen) * noise_scale;\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, zinput.data(), zinputCount, zinputShape, 3));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, inputPitch1.data(), featureInput.getLen(), bshape, 2));\n\t\t\t\t\tif (_modelType == modelType::RVC)\n\t\t\t\t\t{\n\t\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, inputPitch2.data(), featureInput.getLen(), bshape, 2));\n\t\t\t\t\t\tSoVitsInput = RVCInput;\n\t\t\t\t\t\tfor (auto& it : zinput)\n\t\t\t\t\t\t\tit = normal(gen) * noise_scale;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, cdata, 1, cshape, 1));\n\t\t\t\tstd::vector<Ort::Value> finaOut;\n\t\t\t\tif (_modelType == modelType::RVC)\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, zinput.data(), zinputCount, zinputShape, 3));\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tfinaOut = VitsSvcModel->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\tSoVitsInput.data(),\n\t\t\t\t\t\tinputTensors.data(),\n\t\t\t\t\t\tinputTensors.size(),\n\t\t\t\t\t\tsoVitsOutput.data(),\n\t\t\t\t\t\tsoVitsOutput.size());\n\t\t\t\t}\n\t\t\t\tcatch (Ort::Exception& e)\n\t\t\t\t{\n\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: sovits\\n\") + e.what()).c_str());\n\t\t\t\t}\n\n\t\t\t\tconst auto shapeOut = finaOut[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\t\t\tconst auto dstWavLen = int64_t(len);\n\t\t\t\tstd::vector<int16_t> TempVecWav(dstWavLen, 0);\n\t\t\t\tif (shapeOut[2] < dstWavLen)\n\t\t\t\t{\n\t\t\t\t\tfor (int64_t bbb = 0; bbb < shapeOut[2]; bbb++)\n\t\t\t\t\t\tTempVecWav[bbb] = static_cast<int16_t>(finaOut[0].GetTensorData<float>()[bbb] * 32768.0f);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfor (int64_t bbb = 0; bbb < dstWavLen; bbb++)\n\t\t\t\t\t\tTempVecWav[bbb] = static_cast<int16_t>(finaOut[0].GetTensorData<float>()[bbb] * 32768.0f);\n\t\t\t\t}\n\t\t\t\t_data.insert(_data.end(), TempVecWav.data(), TempVecWav.data() + (dstWavLen));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst auto len = (info.cutOffset[i] - info.cutOffset[i - 1]) / 2;\n\t\t\t\tconst auto data = new int16_t[len];\n\t\t\t\tmemset(data, 0, len * 2);\n\t\t\t\t_data.insert(_data.end(), data, data + len);\n\t\t\t\tdelete[] data;\n\t\t\t}\n\t\t\t_callback(++proc, info.cutTag.size());\n\t\t}\n\t\tlogger.log(L\"[Inferring] \\\"\" + path + L\"\\\" Finished\");\n\t\tif (_Lens.size() == 1)\n\t\t{\n\t\t\tlogger.log(L\"[Info] Finished, Send To FrontEnd\");\n\t\t\treturn _data;\n\t\t}\n\t\tstd::wstring outPutPath = GetCurrentFolder() + L\"\\\\OutPuts\\\\\" + path.substr(path.rfind(L'\\\\') + 1, path.rfind(L'.')) + L'-' + std::to_wstring(uint64_t(path.data())) + L\".wav\";\n\t\tlogger.log(L\"[Inferring] Write To \\\"\" + outPutPath + L'\\\"');\n\t\tWav(_samplingRate, long(_data.size()) * 2, _data.data()).Writef(outPutPath);\n\t}\n\tlogger.log(L\"[Info] Finished\");\n\treturn {};\n}\n#endif\n\n/*\nstd::vector<Ort::Value> VitsSvc::InferSliceTensor(const MoeVSProjectSpace::MoeVSAudioSlice& _Slice, size_t SliceIdx,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams, std::vector<Ort::Value>& _Tensors,\n\tstd::vector<const char*>& SoVitsInput) const\n{\n\tint64_t charEmb = _InferParams.SpeakerId;\n\tfloat noise_scale = _InferParams.NoiseScale;\n\tfloat ddsp_noise_scale = _InferParams.DDSPNoiseScale;\n\n\tauto RawWav = TensorPreprocess::MoeVoiceStudioTensorExtractor::InterpResample(_Slice.Audio[SliceIdx], 48000, 16000, 32768.0f);\n\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)RawWav.size() };\n\tstd::vector<Ort::Value> HubertInputTensors, HubertOutPuts;\n\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RawWav.data(), RawWav.size(), HubertInputShape, 3));\n\ttry {\n\t\tHubertOutPuts = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\thubertInput.data(),\n\t\t\tHubertInputTensors.data(),\n\t\t\tHubertInputTensors.size(),\n\t\t\thubertOutput.data(),\n\t\t\thubertOutput.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()).c_str());\n\t}\n\tauto HubertSize = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tauto HubertOutPutData = HubertOutPuts[0].GetTensorMutableData<float>();\n\tauto HubertOutPutShape = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetShape();\n\tHubertInputTensors.clear();\n\tif (HubertOutPutShape[2] != HiddenUnitKDims)\n\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\");\n\n\tstd::vector srcHiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\n\n\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\n\t{\n\t\tfor (int64_t indexs = 0; indexs < HubertOutPutShape[1]; ++indexs)\n\t\t{\n\t\t\tconst auto curbeg = srcHiddenUnits.data() + indexs * HubertOutPutShape[2];\n\t\t\tconst auto curend = srcHiddenUnits.data() + (indexs + 1) * HubertOutPutShape[2];\n\t\t\tconst auto hu = Cluster->find({ curbeg ,curend }, long(charEmb));\n\t\t\tfor (int64_t ind = 0; ind < HubertOutPutShape[2]; ++ind)\n\t\t\t\t*(curbeg + ind) = *(curbeg + ind) * (1.f - _InferParams.ClusterRate) + hu[ind] * _InferParams.ClusterRate;\n\t\t}\n\t}\n\n\tconst auto HubertLen = int64_t(HubertSize) / HiddenUnitKDims;\n\tint64_t F0Shape[] = { 1, int64_t(_Slice.Audio[SliceIdx].size() * _samplingRate / 48000 / HopSize) };\n\tint64_t HiddenUnitShape[] = { 1, HubertLen, HiddenUnitKDims };\n\tconstexpr int64_t LengthShape[] = { 1 };\n\tint64_t CharaEmbShape[] = { 1 };\n\tint64_t CharaMixShape[] = { F0Shape[1], SpeakerCount };\n\tint64_t RandnShape[] = { 1, 192, F0Shape[1] };\n\tconst int64_t IstftShape[] = { 1, 2048, F0Shape[1] };\n\tint64_t RandnCount = F0Shape[1] * 192;\n\tconst int64_t IstftCount = F0Shape[1] * 2048;\n\n\tstd::vector<float> RandnInput, IstftInput, UV, InterpedF0;\n\tstd::vector<int64_t> alignment;\n\tint64_t XLength[1] = { HubertLen };\n\tstd::vector<int64_t> Nsff0;\n\t//auto SoVitsInput = soVitsInput;\n\tint64_t Chara[] = { charEmb };\n\tstd::vector<float> charaMix;\n\n\tauto srcF0Data = _Slice.F0[SliceIdx];\n\tfor (auto& ifo : srcF0Data)\n\t\tifo *= (float)pow(2.0, static_cast<double>(_InferParams.Keys) / 12.0);\n\tstd::vector<float> HiddenUnits;\n\tstd::vector<float> F0Data;\n\n\t//Compatible with all versions\n\tif (SoVits3)\n\t{\n\t\tint64_t upSample = _samplingRate / 16000;\n\t\tHiddenUnits.reserve(HubertSize * (upSample + 1));\n\t\tfor (int64_t itS = 0; itS < HiddenUnitShape[1]; ++itS)\n\t\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\n\t\t\t\tHiddenUnits.insert(HiddenUnits.end(), srcHiddenUnits.begin() + itS * HiddenUnitKDims, srcHiddenUnits.begin() + (itS + 1) * HiddenUnitKDims);\n\t\tHiddenUnitShape[1] *= upSample;\n\t\tHubertSize *= upSample;\n\t\tF0Data = GetInterpedF0(InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1])));\n\t\tF0Shape[1] = HiddenUnitShape[1];\n\t\tXLength[0] = HiddenUnitShape[1];\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, F0Data.data(), F0Data.size(), F0Shape, 2));\n\t}\n\telse if (SoVits2)\n\t{\n\t\tHiddenUnits = std::move(srcHiddenUnits);\n\t\tF0Shape[1] = HiddenUnitShape[1];\n\t\tF0Data = InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1]));\n\t\tXLength[0] = HiddenUnitShape[1];\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\n\t\tNsff0 = GetNSFF0(F0Data);\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Nsff0.data(), Nsff0.size(), F0Shape, 2));\n\t}\n\telse if (_modelType == modelType::RVC)\n\t{\n\t\tconstexpr int64_t upSample = 2;\n\t\tHiddenUnits.reserve(HubertSize * (upSample + 1));\n\t\tfor (int64_t itS = 0; itS < HiddenUnitShape[1]; ++itS)\n\t\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\n\t\t\t\tHiddenUnits.insert(HiddenUnits.end(), srcHiddenUnits.begin() + itS * HiddenUnitKDims, srcHiddenUnits.begin() + (itS + 1) * HiddenUnitKDims);\n\t\tHiddenUnitShape[1] *= upSample;\n\t\tHubertSize *= upSample;\n\t\tF0Data = InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1]));\n\t\tF0Shape[1] = HiddenUnitShape[1];\n\t\tXLength[0] = HiddenUnitShape[1];\n\t\tRandnCount = 192 * F0Shape[1];\n\t\tRandnShape[2] = F0Shape[1];\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\n\t\tInterpedF0 = GetInterpedF0(F0Data);\n\t\tNsff0 = GetNSFF0(InterpedF0);\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Nsff0.data(), Nsff0.size(), F0Shape, 2));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), InterpedF0.size(), F0Shape, 2));\n\t\tSoVitsInput = RVCInput;\n\t\tRandnInput = std::vector<float>(RandnCount, 0.f);\n\t\tfor (auto& it : RandnInput)\n\t\t\tit = normal(gen) * noise_scale;\n\t}\n\telse\n\t{\n\t\tHiddenUnits = std::move(srcHiddenUnits);\n\t\tF0Data = InterpFunc(srcF0Data, long(srcF0Data.size()), long(F0Shape[1]));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\n\t\tInterpedF0 = GetInterpedF0(F0Data);\n\t\talignment = GetAligments(F0Shape[1], HubertLen);\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), InterpedF0.size(), F0Shape, 2));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, alignment.data(), InterpedF0.size(), F0Shape, 2));\n\t\tif (!SoVitsDDSP)\n\t\t{\n\t\t\tUV = GetUV(F0Data);\n\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\" };\n\t\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, UV.data(), UV.size(), F0Shape, 2));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\" };\n\t\t\tIstftInput = std::vector<float>(IstftCount, ddsp_noise_scale);\n\t\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, IstftInput.data(), IstftInput.size(), IstftShape, 3));\n\t\t}\n\t\tRandnInput = std::vector<float>(RandnCount, 0.f);\n\t\tfor (auto& it : RandnInput)\n\t\t\tit = normal(gen) * noise_scale;\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RandnInput.data(), RandnCount, RandnShape, 3));\n\t}\n\n\n\tif (EnableCharaMix)\n\t{\n\t\tif (SpeakerCount > 1)\n\t\t\tcharaMix = GetCurrectSpkMixData(_Slice.Speaker[SliceIdx], F0Shape[1]);\n\t\tCharaMixShape[0] = F0Shape[1];\n\t\tif (charaMix.empty())\n\t\t{\n\t\t\tstd::vector charaMap(SpeakerCount, 0.f);\n\t\t\tcharaMap[charEmb] = 1.f;\n\t\t\tcharaMix.reserve((SpeakerCount + 1) * F0Shape[1]);\n\t\t\tfor (int64_t index = 0; index < F0Shape[1]; ++index)\n\t\t\t\tcharaMix.insert(charaMix.end(), charaMap.begin(), charaMap.end());\n\t\t}\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, charaMix.data(), charaMix.size(), CharaMixShape, 2));\n\t}\n\telse\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, Chara, 1, CharaEmbShape, 1));\n\n\tif (_modelType == modelType::RVC)\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RandnInput.data(), RandnCount, RandnShape, 3));\n\n\tstd::vector<float> VolumeData;\n\n\tif (EnableVolume)\n\t{\n\t\tSoVitsInput.emplace_back(\"vol\");\n\t\tVolumeData = InterpFunc(_Slice.Volume[SliceIdx], long(_Slice.Volume[SliceIdx].size()), long(F0Shape[1]));\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, VolumeData.data(), F0Shape[1], F0Shape, 2));\n\t}\n\n\treturn VitsSvcModel->Run(Ort::RunOptions{ nullptr },\n\t   SoVitsInput.data(),\n\t   _Tensors.data(),\n\t   _Tensors.size(),\n\t   soVitsOutput.data(),\n\t   soVitsOutput.size());\n}\n */\n\n#ifdef WIN32\n#ifdef MoeVSMui\n\nvoid VitsSvc::StartRT(Mui::Window::UIWindowBasic* window, const MoeVSProjectSpace::MoeVSSvcParams& _Params)\n{\n\tif (RTSTAT)\n\t\treturn;\n\n\tstd::wstring error;\n\n\trecoder = new MRecorder();\n\trecoder->InitRecorder(error, _samplingRate, 1, 16, Mui::_m_uint(_samplingRate * 0.5));\n\trecoder->Start();\n\n\taudio_player = new Mui::Render::MDS_AudioPlayer(window);\n\taudio_player->InitAudioPlayer(error);\n\n\taudio_stream = audio_player->CreateStreamPCM(recoder->GetFrameSize(), recoder->GetSampleRate(), recoder->GetChannels(), recoder->GetBitRate(), recoder->GetBlockAlign());\n\taudio_player->PlayTrack(audio_stream);\n\n\temptyLen = InferPCMData(std::vector<int16_t>(recoder->GetFrameSize() / 4 * 3), _samplingRate, _Params).size();\n\n\tstd::thread RT_RECORD_THREAD = std::thread([&]()\n\t\t{\n\t\t\tlogger.log(L\"[RTInference] Recording Thread Start!\");\n\t\t\twhile (RTSTAT)\n\t\t\t{\n\t\t\t\tconst auto PCM = recoder->GetStreamData();\n\t\t\t\tif (!PCM) continue;\n\t\t\t\trawInputBuffer.emplace_back((int16_t*)PCM->data, (int16_t*)(PCM->data + PCM->size));\n\t\t\t\tdelete PCM;\n\t\t\t}\n\t\t\tlogger.log(L\"[RTInference] Recording Thread End!\");\n\t\t});\n\n\tstd::thread RT_INPUT_CROSSFADE_THREAD = std::thread([&]()\n\t\t{\n\t\t\tlogger.log(L\"[RTInference] Input Crossfade Thread Start!\");\n\t\t\t//const auto config = _get_init_params();\n\t\t\twhile (RTSTAT)\n\t\t\t{\n\t\t\t\tif (rawInputBuffer.size() > 1)\n\t\t\t\t{\n\t\t\t\t\tstd::vector<int16_t> pBuffer;\n\t\t\t\t\tpBuffer.reserve(2 * rawInputBuffer[0].size());\n\t\t\t\t\tpBuffer.insert(pBuffer.end(), rawInputBuffer[0].begin(), rawInputBuffer[0].end());\n\t\t\t\t\tpBuffer.insert(pBuffer.end(), rawInputBuffer[1].begin(),\n\t\t\t\t\t\trawInputBuffer[1].begin() + int64_t(rawInputBuffer[1].size()) / 2);\n\t\t\t\t\tinputBuffer.emplace_back(std::move(pBuffer));\n\t\t\t\t\trawInputBuffer.pop_front();\n\t\t\t\t}\n\t\t\t\tif (rawInputBuffer.size() > 100)\n\t\t\t\t{\n\t\t\t\t\tlogger.log(L\"[RTInferenceWarn] Raw Input Buffer Is Too Large\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tlogger.log(L\"[RTInference] Input Crossfade Thread End!\");\n\t\t});\n\n\tstd::thread RT_INFERENCE_THREAD = std::thread([&]()\n\t\t{\n\t\t\tlogger.log(L\"[RTInference] Inferencing Thread Start!\");\n\t\t\tconst auto PCMSIZE = recoder->GetFrameSize() / 2;\n\t\t\twhile (RTSTAT)\n\t\t\t{\n\t\t\t\t//const auto configs = _get_init_params();\n\t\t\t\tif (!inputBuffer.empty())\n\t\t\t\t{\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tbool zeroVector = true;\n\t\t\t\t\t\tfor(const auto& i16data : inputBuffer[0])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(i16data> 1600)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tzeroVector = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(zeroVector)\n\t\t\t\t\t\t\trawOutputBuffer.emplace_back(std::vector<int16_t>(emptyLen, 0));\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tauto RtRES = InferPCMData(inputBuffer[0], _samplingRate, _Params);\n\t\t\t\t\t\t\trawOutputBuffer.emplace_back(std::move(RtRES));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinputBuffer.pop_front();\n\t\t\t\t\t}\n\t\t\t\t\tcatch (std::exception& e)\n\t\t\t\t\t{\n\t\t\t\t\t\tRTSTAT = false;\n\t\t\t\t\t\tinputBuffer.clear();\n\t\t\t\t\t\toutputBuffer.clear();\n\t\t\t\t\t\trawInputBuffer.clear();\n\t\t\t\t\t\trawOutputBuffer.clear();\n\t\t\t\t\t\tLibDLVoiceCodecThrow(e.what());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (inputBuffer.size() > 100)\n\t\t\t\t{\n\t\t\t\t\tlogger.log(L\"[RTInferenceWarn] Input Buffer Is Too Large\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tlogger.log(L\"[RTInference] Inferencing Thread End!\");\n\t\t});\n\n\tstd::thread RT_OUTPUT_CROSSFADE_THREAD = std::thread([&]()\n\t\t{\n\t\t\tlogger.log(L\"[RTInference] OutPut Crossfade Thread Start!\");\n\t\t\twhile (RTSTAT)\n\t\t\t{\n\t\t\t\tif (rawOutputBuffer.size() > 1)\n\t\t\t\t{\n\t\t\t\t\tconst auto cross_fade_size = int64_t(rawOutputBuffer[0].size()) / 3;\n\t\t\t\t\tconst auto PCMSIZE = cross_fade_size * 2;\n\t\t\t\t\tfor (int64_t i = 0; i < cross_fade_size; ++i)\n\t\t\t\t\t{\n\t\t\t\t\t\trawOutputBuffer[0][PCMSIZE + i] = int16_t(((double)rawOutputBuffer[0][PCMSIZE + i] * (1.0 - (double(i) / double(cross_fade_size)))) + ((double)rawOutputBuffer[1][i] * (double(i) / double(cross_fade_size))));\n\t\t\t\t\t\trawOutputBuffer[1][PCMSIZE + i] = int16_t(((double)rawOutputBuffer[0][PCMSIZE + i] * (1.0 - (double(i) / double(cross_fade_size)))) + ((double)rawOutputBuffer[1][i] * (double(i) / double(cross_fade_size))));\n\t\t\t\t\t}\n\t\t\t\t\tstd::vector pBuffer(rawOutputBuffer[0].data() + cross_fade_size / 2, rawOutputBuffer[0].data() + 2 * cross_fade_size + cross_fade_size / 2);\n\t\t\t\t\toutputBuffer.emplace_back(std::move(pBuffer));\n\t\t\t\t\trawOutputBuffer.pop_front();\n\t\t\t\t}\n\t\t\t}\n\t\t\tlogger.log(L\"[RTInference] OutPut Crossfade Thread End!\");\n\t\t});\n\n\tstd::thread RT_OUTPUT_THREAD = std::thread([&]()\n\t\t{\n\t\t\tlogger.log(L\"[RTInference] OutPut Thread Start!\");\n\t\t\tconst auto PCMSIZE = recoder->GetFrameSize();\n\t\t\tstd::vector<Mui::_m_byte> pBuffer(PCMSIZE);\n\t\t\tMui::_m_size lastSize = 0;\n\t\t\twhile (RTSTAT)\n\t\t\t{\n\t\t\t\tif (!outputBuffer.empty())\n\t\t\t\t{\n\t\t\t\t\t//audio_player->WriteStreamPCM(audio_stream, (Mui::_m_byte*)outputBuffer.front().data(), Mui::_m_size(RTAudioSize));\n\t\t\t\t\t//outputBuffer.pop_front();\n\t\t\t\t\tauto queue_data = (Mui::_m_byte*)outputBuffer[0].data();\n\t\t\t\t\tauto queue_dataSize = Mui::_m_size(outputBuffer[0].size() * 2);\n\t\t\t\t\twhile (queue_dataSize + lastSize >= PCMSIZE)\n\t\t\t\t\t{\n\t\t\t\t\t\t//每次从队列中拿走帧大小的数据\n\t\t\t\t\t\tconst auto dataSize = PCMSIZE - lastSize;\n\t\t\t\t\t\tmemcpy(pBuffer.data() + lastSize, queue_data, dataSize);\n\t\t\t\t\t\t//调用WriteStream 播放\n\t\t\t\t\t\taudio_player->WriteStreamPCM(audio_stream, pBuffer.data(), PCMSIZE);\n\t\t\t\t\t\t//指针偏移\n\t\t\t\t\t\tqueue_data += dataSize;\n\t\t\t\t\t\tqueue_dataSize -= dataSize;\n\t\t\t\t\t\tlastSize = 0;\n\t\t\t\t\t}\n\t\t\t\t\t//如果剩余数据不足PCMLength\n\t\t\t\t\tif (queue_dataSize > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t//检查本次queue能否把缓冲区填满\n\t\t\t\t\t\tif (lastSize + queue_dataSize >= PCMSIZE)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t//计算剩余空间\n\t\t\t\t\t\t\tconst auto dataSize = PCMSIZE - lastSize;\n\t\t\t\t\t\t\t//复制数据到buffer\n\t\t\t\t\t\t\tmemcpy(pBuffer.data() + lastSize, queue_data, dataSize);\n\t\t\t\t\t\t\taudio_player->WriteStreamPCM(audio_stream, pBuffer.data(), PCMSIZE);\n\t\t\t\t\t\t\tqueue_data += dataSize;\n\t\t\t\t\t\t\tqueue_dataSize -= dataSize;\n\t\t\t\t\t\t\tlastSize = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//如果剩余空间仍然不足PCMLength，将剩余数据复制到buffer中 等待下次循环\n\t\t\t\t\t\tif (queue_dataSize > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmemcpy(pBuffer.data() + lastSize, queue_data, queue_dataSize);\n\t\t\t\t\t\t\tlastSize += queue_dataSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlogger.log(L\"OUTPUTBUFFERLEN:\" + std::to_wstring(outputBuffer.size()));\n\t\t\t\t\tlogger.log(L\"INPUTBUFFERLEN:\" + std::to_wstring(inputBuffer.size()));\n\t\t\t\t\toutputBuffer.pop_front();\n\t\t\t\t}\n\t\t\t}\n\t\t\tlogger.log(L\"[RTInference] OutPut Thread End!\");\n\t\t});\n\n\tlogger.log(L\"[RTInference] Start RTInference!\");\n\tfor (uint64_t idx = 0; idx < 1; ++idx)\n\t\trawInputBuffer.emplace_back(recoder->GetFrameSize() / 2, 0);\n\tRTSTAT = true;\n\tRT_RECORD_THREAD.detach();\n\tRT_INPUT_CROSSFADE_THREAD.detach();\n\tRT_INFERENCE_THREAD.detach();\n\tRT_OUTPUT_CROSSFADE_THREAD.detach();\n\tRT_OUTPUT_THREAD.detach();\n\twhile (true);\n}\n\nvoid VitsSvc::EndRT()\n{\n\trecoder->Stop();\n\taudio_player->StopTrack(audio_stream);\n\taudio_player->DeleteTrack(audio_stream);\n\tdelete audio_stream;\n\tdelete audio_player;\n\tdelete recoder;\n\taudio_stream = nullptr;\n\taudio_player = nullptr;\n\trecoder = nullptr;\n\tif (RTSTAT)\n\t\tRTSTAT = false;\n\tinputBuffer.clear();\n\toutputBuffer.clear();\n\trawInputBuffer.clear();\n\trawOutputBuffer.clear();\n}\n#endif\n#endif\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libdlvoicecodec/Modules/Modules.cpp",
    "content": "﻿#include \"Modules.hpp\"\n#include \"InferTools/F0Extractor/DioF0Extractor/DioF0Extractor.hpp\"\n#include \"InferTools/F0Extractor/F0ExtractorManager.hpp\"\n#include \"InferTools/TensorExtractor/MoeVSCoreTensorExtractor.hpp\"\n#include \"InferTools/Cluster/MoeVSClusterManager.hpp\"\n#include \"InferTools/Cluster/MoeVSKmeansCluster.hpp\"\n#include \"InferTools/F0Extractor/HarvestF0Extractor/HarvestF0Extractor.hpp\"\n#include \"InferTools/Sampler/MoeVSSamplerManager.hpp\"\n#include \"InferTools/Sampler/MoeVSSamplers.hpp\"\n#include \"InferTools/F0Extractor/NetF0Predictors/NetF0Predictors.hpp\"\n#include \"InferTools/Stft/stft.hpp\"\n#ifdef MoeVoiceStudioIndexCluster\n#ifdef max\n#undef max\n#endif\n#include \"InferTools/Cluster/MoeVSIndexCluster.hpp\"\n#endif\n\n#define MoeVSRegisterF0Constructor(__RegisterName, __ClassName) MoeVSF0Extractor::RegisterF0Extractor(__RegisterName,   \\\n\t[](int32_t sampling_rate, int32_t hop_size,\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tint32_t n_f0_bins, double max_f0, double min_f0)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t-> MoeVSF0Extractor::F0Extractor\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn new MoeVSF0Extractor::__ClassName(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0);\t\t\t\t\t\\\n\t})\n\n#define MoeVSRegisterTensorConstructor(__RegisterName, __ClassName) MoeVSTensorPreprocess::RegisterTensorExtractor(__RegisterName,\\\n\t[](uint64_t _srcsr, uint64_t _sr, uint64_t _hop,\t\t\t\t\t\t\t\t\t\t\t\t\t        \\\n\t\tbool _smix, bool _volume, uint64_t _hidden_size,\t\t\t\t\t\t\t\t\t\t\t\t\t    \\\n\t\tuint64_t _nspeaker,\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t                    \\\n\t\tconst MoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others& _other)                             \\\n\t\t->MoeVSTensorPreprocess::TensorExtractor\t\t\t\t\t\t\t\t\t\t\t\t\t            \\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t    \\\n\t\treturn new MoeVSTensorPreprocess::__ClassName(_srcsr, _sr, _hop, _smix, _volume,\t\t\t\t\t\t\\\n\t\t\t_hidden_size, _nspeaker, _other);\t\t\t\t\t\t\t\t\t\t\t\t\t                \\\n\t})\n\n#define MoeVSRegisterCluster(__RegisterName, __ClassName) MoeVoiceStudioCluster::RegisterMoeVSCluster(__RegisterName,\\\n\t[](const std::wstring& _path, size_t hidden_size, size_t KmeansLen)\t\t\t\t\t\t\t\t\t\t\t\t \\\n\t\t->MoeVoiceStudioCluster::MoeVSCluster\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\n\t\treturn new MoeVoiceStudioCluster::__ClassName(_path, hidden_size, KmeansLen);\t\t\t\t\t\t\t\t \\\n\t})\n\n#define MoeVSRegisterSampler(__RegisterName, __ClassName) MoeVSSampler::RegisterMoeVSSampler(__RegisterName,\t\t \\\n\t[](Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins,\t\t\t\t\t\t\t\t \\\n\t\tconst MoeVSSampler::MoeVSBaseSampler::ProgressCallback& _ProgressCallback,\t\t\t\t\t\t\t\t \t \\\n\t\tOrt::MemoryInfo* memory) -> MoeVSSampler::MoeVSSampler\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\n\t\treturn new MoeVSSampler::__ClassName(alpha, dfn, pred, Mel_Bins, _ProgressCallback, memory);\t\t\t\t \\\n\t})\n\nnamespace MoeVSModuleManager\n{\n\tbool MoeVoiceStudioCoreInitStat = false;\n\n\tMoeVoiceStudioCore::VitsSvc* GlobalVitsSvcModel = nullptr;\n\n\tMoeVoiceStudioCore::DiffusionSvc* GlobalDiffusionSvcModel = nullptr;\n\n\tMoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback ProgessBar;\n\n\tint64_t VitsSamplingRate = 32000;\n\n\tvoid MoeVoiceStudioCoreInitSetup()\n\t{\n\t\tif (MoeVoiceStudioCoreInitStat)\n\t\t\treturn;\n\t\tMoeVSRegisterF0Constructor(L\"Dio\", DioF0Extractor);\n\t\tMoeVSRegisterF0Constructor(L\"Harvest\", HarvestF0Extractor);\n\t\tMoeVSRegisterF0Constructor(L\"RMVPE\", RMVPEF0Extractor);\n\t\tMoeVSRegisterF0Constructor(L\"FCPE\", MELPEF0Extractor);\n\t\tMoeVSRegisterTensorConstructor(L\"SoVits2.0\", SoVits2TensorExtractor);\n\t\tMoeVSRegisterTensorConstructor(L\"SoVits3.0\", SoVits3TensorExtractor);\n\t\tMoeVSRegisterTensorConstructor(L\"SoVits4.0\", SoVits4TensorExtractor);\n\t\tMoeVSRegisterTensorConstructor(L\"SoVits4.0-DDSP\", SoVits4DDSPTensorExtractor);\n\t\tMoeVSRegisterTensorConstructor(L\"RVC\", RVCTensorExtractor);\n\t\tMoeVSRegisterTensorConstructor(L\"DiffSvc\", DiffSvcTensorExtractor);\n\t\tMoeVSRegisterTensorConstructor(L\"DiffusionSvc\", DiffusionSvcTensorExtractor);\n\t\tMoeVSRegisterCluster(L\"KMeans\", KMeansCluster);\n#ifdef MoeVoiceStudioIndexCluster\n\t\tMoeVSRegisterCluster(L\"Index\", IndexCluster);\n#endif\n\t\tMoeVSRegisterSampler(L\"Pndm\", PndmSampler);\n\t\tMoeVSRegisterSampler(L\"DDim\", DDimSampler);\n\t\tconst auto BasicCleanerDir = GetCurrentFolder() + L\"/G2P/BasicCleaner.dll\";\n\t\tif (_waccess(BasicCleanerDir.c_str(), 0) != -1)\n\t\t{\n\t\t\tconst auto Cleaner = MoeVSG2P::GetDefCleaner();\n\t\t\tCleaner->loadG2p(BasicCleanerDir);\n\t\t\tCleaner->GetCleaner().LoadDict(GetCurrentFolder() + L\"/G2P\");\n\t\t}\n\t\tMoeVoiceStudioCoreInitStat = true;\n\t}\n\n\tMoeVoiceStudioCore::VitsSvc* GetVitsSvcModel()\n\t{\n\t\treturn GlobalVitsSvcModel;\n\t}\n\n\tMoeVoiceStudioCore::DiffusionSvc* GetDiffusionSvcModel()\n\t{\n\t\treturn GlobalDiffusionSvcModel;\n\t}\n\n\tvoid UnloadVitsSvcModel()\n\t{\n\t\tdelete GlobalVitsSvcModel;\n\t\tGlobalVitsSvcModel = nullptr;\n\t}\n\n\tvoid UnloadDiffusionSvcModel()\n\t{\n\t\tdelete GlobalDiffusionSvcModel;\n\t\tGlobalDiffusionSvcModel = nullptr;\n\t}\n\n\tvoid LoadVitsSvcModel(const MJson& Config,\n\t                  const MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\n\t                  int ProviderID, int NumThread, int DeviceID)\n\t{\n\t\tProgessBar = Callback;\n\t\tUnloadVitsSvcModel();\n\t\tif (Config[\"Type\"].GetString() == \"DiffSvc\")\n\t\t\tLibDLVoiceCodecThrow(\"Trying To Load Diffusion Model As VitsSvc Model!\")\n\n\t\tGlobalVitsSvcModel = new MoeVoiceStudioCore::VitsSvc(\n\t\t\tConfig, Callback,\n\t\t\tMoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders(ProviderID),\n\t\t\tDeviceID, NumThread\n\t\t);\n\n\t\tVitsSamplingRate = GlobalVitsSvcModel->GetSamplingRate();\n\t\tSamplingRate = VitsSamplingRate;\n\t}\n\n\tvoid LoadDiffusionSvcModel(const MJson& Config,\n\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\n\t\tint ProviderID, int NumThread, int DeviceID)\n\t{\n\t\tProgessBar = Callback;\n\t\tUnloadDiffusionSvcModel();\n\t\tif (Config[\"Type\"].GetString() == \"DiffSvc\")\n\t\t\tGlobalDiffusionSvcModel = new MoeVoiceStudioCore::DiffusionSvc(\n\t\t\t\tConfig, Callback,\n\t\t\t\tMoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders(ProviderID),\n\t\t\t\tDeviceID, NumThread\n\t\t\t);\n\t\telse\n\t\t\tLibDLVoiceCodecThrow(\"Trying To Load VitsSvc Model As Diffusion Model!\")\n\n\t\tif(VocoderEnabled())\n\t\t\tif (!GetVitsSvcModel() || (!GlobalDiffusionSvcModel->OldVersion() && GlobalDiffusionSvcModel->GetDiffSvcVer() == L\"DiffusionSvc\"))\n\t\t\t\tSamplingRate = GlobalDiffusionSvcModel->GetSamplingRate();\n\t}\n\n\tvoid LoadVocoderModel(const std::wstring& VocoderPath)\n\t{\n\t\tMoeVoiceStudioCore::LoadVocoderModel(VocoderPath);\n\t}\n\n\tvoid UnloadVocoderModel()\n\t{\n\t\tMoeVoiceStudioCore::UnLoadVocoderModel();\n\t}\n\n\tbool VocoderEnabled()\n\t{\n\t\treturn MoeVoiceStudioCore::VocoderEnabled();\n\t}\n\n\tstd::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\n\t\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams)\n\t{\n\t\tconst bool DiffusionModelEnabled = GlobalDiffusionSvcModel && VocoderEnabled();\n\t\tstd::vector<int16_t> RtnAudio;\n\t\tsize_t TotalAudioSize = 0;\n\t\tfor (const auto& data_size : _Slice.Slices)\n\t\t\tTotalAudioSize += data_size.OrgLen;\n\t\tRtnAudio.reserve(size_t(double(TotalAudioSize) * 1.5));\n\n\t\t//VitsSteps\n\t\tint64_t GlobalSteps = 0;\n\t\tif (GlobalVitsSvcModel)\n\t\t\tGlobalSteps = 1;\n\n\t\t//DiffusionSteps\n\t\tauto SkipDiffusionStep = (int64_t)_InferParams.Pndm;\n\t\tauto DiffusionTotalStep = (int64_t)_InferParams.Step;\n\t\t\n\t\tif (DiffusionModelEnabled && DiffusionTotalStep > GlobalDiffusionSvcModel->GetMaxStep()) \n\t\t\tDiffusionTotalStep = GlobalDiffusionSvcModel->GetMaxStep();\n\t\tif (SkipDiffusionStep >= DiffusionTotalStep) \n\t\t\tSkipDiffusionStep = DiffusionTotalStep / 5;\n\t\tif (SkipDiffusionStep == 0) \n\t\t\tSkipDiffusionStep = 1;\n\t\tconst auto RealDiffSteps = DiffusionTotalStep % SkipDiffusionStep ? DiffusionTotalStep / SkipDiffusionStep + 1 : DiffusionTotalStep / SkipDiffusionStep;\n\t\tif((DiffusionModelEnabled && !GlobalVitsSvcModel) || (DiffusionModelEnabled && ShallowDiffusionEnabled()))\n\t\t{\n\t\t\tif (GlobalDiffusionSvcModel->OldVersion())\n\t\t\t\tGlobalSteps += 1;\n\t\t\telse\n\t\t\t\tGlobalSteps += RealDiffSteps;\n\t\t}\n\n\t\t//TotalSteps\n\t\tconst int64_t TotalSteps = GlobalSteps * int64_t(_Slice.Slices.size());\n\t\tsize_t ProgressVal = 0;\n\t\tsize_t SliceIndex = 0;\n\t\tProgessBar(0, TotalSteps);\n\t\tfor (const auto& CurSlice : _Slice.Slices)\n\t\t{\n\t\t\tconst auto InferBeginTime = clock();\n\t\t\tconst auto CurRtn = SliceInference(CurSlice, _InferParams, ProgressVal);\n\t\t\tRtnAudio.insert(RtnAudio.end(), CurRtn.data(), CurRtn.data() + CurRtn.size());\n\t\t\tif (CurSlice.IsNotMute)\n\t\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Segment[\" + std::to_wstring(SliceIndex++) + L\"] Finished! Segment Use Time: \" + std::to_wstring(clock() - InferBeginTime) + L\"ms, Segment Duration: \" + std::to_wstring((size_t)CurSlice.OrgLen * 1000ull / 48000ull) + L\"ms\");\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (DiffusionModelEnabled && !GlobalDiffusionSvcModel->OldVersion())\n\t\t\t\t{\n\t\t\t\t\tProgressVal += RealDiffSteps;\n\t\t\t\t\tProgessBar(ProgressVal, TotalSteps);\n\t\t\t\t}\n\t\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Jump Empty Segment[\" + std::to_wstring(SliceIndex++) + L\"]!\");\n\t\t\t}\n\t\t\tif (DiffusionModelEnabled && GlobalDiffusionSvcModel->OldVersion())\n\t\t\t\tProgessBar(++ProgressVal, TotalSteps);\n\t\t\tif (GlobalVitsSvcModel)\n\t\t\t\tProgessBar(++ProgressVal, TotalSteps);\n\t\t}\n\n\t\tlogger.log(L\"[Inferring] \\\"\" + _Slice.Path + L\"\\\" Finished\");\n\n\t\treturn RtnAudio;\n\t}\n\n\tint CurStftSr = -1, CurHopSize = -1;\n\n\tDlCodecStft::Mel* MelOperator = nullptr;\n\n\tstd::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process)\n\t{\n\t\tconst bool DiffusionModelEnabled = GlobalDiffusionSvcModel && VocoderEnabled();\n\t\tint64_t SamplingRate_I64 = VitsSamplingRate;\n\t\tSamplingRate = VitsSamplingRate;\n\t\tif ((DiffusionModelEnabled && !GlobalVitsSvcModel) || (_InferParams.UseShallowDiffusion && DiffusionModelEnabled && ShallowDiffusionEnabled()))\n\t\t{\n\t\t\tSamplingRate_I64 = GlobalDiffusionSvcModel->GetSamplingRate();\n\t\t\tSamplingRate = GlobalDiffusionSvcModel->GetSamplingRate();\n\t\t}\n\t\tif (!_Slice.IsNotMute)\n\t\t\treturn { size_t(_Slice.OrgLen * SamplingRate_I64 / 48000), 0i16, std::allocator<int16_t>() };\n\t\tstd::vector<int16_t> RtnAudio;\n\t\tRtnAudio.reserve(size_t(double(_Slice.Audio.size()) * 1.5));\n\n\t\tif (GlobalVitsSvcModel)\n\t\t{\n\t\t\tauto BgnTime = clock();\n\t\t\tRtnAudio = GlobalVitsSvcModel->SliceInference(_Slice, _InferParams, _Process);\n\t\t\tlogger.log((\"[Inference] Slice Vits Use Time \" + std::to_string(clock() - BgnTime) + \"ms\").c_str());\n\t\t\tif(_InferParams.UseShallowDiffusion && DiffusionModelEnabled && !GlobalDiffusionSvcModel->OldVersion() && GlobalDiffusionSvcModel->GetDiffSvcVer() == L\"DiffusionSvc\")\n\t\t\t{\n\t\t\t\tif (CurStftSr != SamplingRate_I64 || CurHopSize != GlobalDiffusionSvcModel->GetHopSize())\n\t\t\t\t{\n\t\t\t\t\tdelete MelOperator;\n\t\t\t\t\tCurStftSr = (int)SamplingRate_I64;\n\t\t\t\t\tCurHopSize = GlobalDiffusionSvcModel->GetHopSize();\n\t\t\t\t\tMelOperator = new DlCodecStft::Mel(2048, CurHopSize, CurStftSr, (int)GlobalDiffusionSvcModel->GetMelBins());\n\t\t\t\t}\n\t\t\t\tconst std::vector<double> TempAudio = InferTools::InterpResample(RtnAudio, (long)VitsSamplingRate, CurStftSr, 32767.);\n\t\t\t\tauto Mel = MelOperator->operator()(TempAudio);\n\t\t\t\tauto ShallData = MoeVoiceStudioCore::GetDataForShallowDiffusion();\n\t\t\t\tBgnTime = clock();\n\t\t\t\tRtnAudio = GlobalDiffusionSvcModel->ShallowDiffusionInference(\n\t\t\t\t\tShallData._16KAudio, _InferParams, Mel,\n\t\t\t\t\tShallData.NeedPadding ? ShallData.CUDAF0 : _Slice.F0,\n\t\t\t\t\tShallData.NeedPadding ? ShallData.CUDAVolume : _Slice.Volume,\n\t\t\t\t\tShallData.NeedPadding ? ShallData.CUDASpeaker : _Slice.Speaker,\n\t\t\t\t\t_Process,\n\t\t\t\t\tTempAudio.size()\n\t\t\t\t);\n\t\t\t\tlogger.log((\"[Inference] Slice Diffusion Use Time \" + std::to_string(clock() - BgnTime) + \"ms\").c_str());\n\t\t\t}\n\t\t}\n\t\telse if (DiffusionModelEnabled)\n\t\t{\n\t\t\tconst auto BgnTime = clock();\n\t\t\tRtnAudio = GlobalDiffusionSvcModel->SliceInference(_Slice, _InferParams, _Process);\n\t\t\tlogger.log((\"[Inference] Slice Diffusion Use Time \" + std::to_string(clock() - BgnTime) + \"ms\").c_str());\n\t\t}\n\t\telse\n\t\t\tLibDLVoiceCodecThrow(\"You Must Load A Model To Inference!\");\n\n\t\treturn RtnAudio;\n\t}\n\n\tbool ShallowDiffusionEnabled()\n\t{\n\t\tconst bool DiffusionModelEnabled = GlobalDiffusionSvcModel && VocoderEnabled();\n\t\treturn DiffusionModelEnabled && !GlobalDiffusionSvcModel->OldVersion() && GlobalDiffusionSvcModel->GetDiffSvcVer() == L\"DiffusionSvc\";\n\t}\n}"
  },
  {
    "path": "libdlvoicecodec/Modules/Modules.hpp",
    "content": "﻿/**\n * FileName: Modules.hpp\n * Note: MoeVoiceStudioCore组件管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"Models/header/VitsSvc.hpp\"\n#include \"Models/header/DiffSvc.hpp\"\n#include \"Models/header/Vits.hpp\"\n\nnamespace MoeVSModuleManager\n{\n\tinline int64_t SpeakerCount = 0;\n\tinline int64_t SamplingRate = 32000;\n\n\t/**\n\t * \\brief 初始化所有组件\n\t */\n\tvoid MoeVoiceStudioCoreInitSetup();\n\n\t/**\n\t * \\brief 获取当前VitsSvc模型\n\t * \\return 当前模型的指针\n\t */\n\tMoeVoiceStudioCore::VitsSvc* GetVitsSvcModel();\n\n\t/**\n\t * \\brief 获取当前DiffusionSvc模型\n\t * \\return 当前模型的指针\n\t */\n\tMoeVoiceStudioCore::DiffusionSvc* GetDiffusionSvcModel();\n\n\t/**\n\t * \\brief 卸载模型\n\t */\n\tvoid UnloadVitsSvcModel();\n\n\t/**\n\t * \\brief 卸载模型\n\t */\n\tvoid UnloadDiffusionSvcModel();\n\n\t/**\n\t * \\brief 载入VitsSvc模型\n\t * \\param Config 一个MJson类的实例（配置文件的JSON）\n\t * \\param Callback 进度条回调函数\n\t * \\param ProviderID Provider在所有Provider中的ID（遵循Enum Class的定义）\n\t * \\param NumThread CPU推理时的线程数（最好设置高一点，GPU不支持的算子可能也会Fallback到CPU）\n\t * \\param DeviceID GPU设备ID\n\t */\n\tvoid LoadVitsSvcModel(const MJson& Config,\n\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\n\t\tint ProviderID, int NumThread, int DeviceID);\n\n\t/**\n\t * \\brief 载入DiffusionSvc模型\n\t * \\param Config 一个MJson类的实例（配置文件的JSON）\n\t * \\param Callback 进度条回调函数\n\t * \\param ProviderID Provider在所有Provider中的ID（遵循Enum Class的定义）\n\t * \\param NumThread CPU推理时的线程数（最好设置高一点，GPU不支持的算子可能也会Fallback到CPU）\n\t * \\param DeviceID GPU设备ID\n\t */\n\tvoid LoadDiffusionSvcModel(const MJson& Config,\n\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\n\t\tint ProviderID, int NumThread, int DeviceID);\n\n\t/**\n\t * \\brief 载入Vocoder模型\n\t * \\param VocoderPath Vocoder路径\n\t */\n\tvoid LoadVocoderModel(const std::wstring& VocoderPath);\n\n\t/**\n\t * \\brief 卸载Vocoder模型\n\t */\n\tvoid UnloadVocoderModel();\n\n\t/**\n\t * \\brief 检查Vocoder是否可用\n\t * \\return Vocoder状态\n\t */\n\tbool VocoderEnabled();\n\n\t/**\n\t * \\brief 推理多组数据\n\t * \\param _Slice 数据包\n\t * \\param _InferParams 参数\n\t * \\return 音频\n\t */\n\tstd::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\n\t                                    const MoeVSProjectSpace::MoeVSSvcParams& _InferParams);\n\n\t/**\n\t * \\brief 推理切片数据\n\t * \\param _Slice 切片数据\n\t * \\param _InferParams 参数\n\t * \\param _Process 进度条\n\t * \\return 音频\n\t */\n\tstd::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process);\n\n\tbool ShallowDiffusionEnabled();\n}\n\nnamespace MoeVSRename\n{\n\tusing MoeVSVitsBasedSvc = MoeVoiceStudioCore::VitsSvc;\n\tusing MoeVSDiffBasedSvc = MoeVoiceStudioCore::DiffusionSvc;\n}\n\n"
  },
  {
    "path": "libdlvoicecodec/Modules/README.md",
    "content": "# Example\n```c++\n#include \"Modules/Models/header/Vits.hpp\"\n\nint main(){\n  rapidjson::Document Config;\n  Config.Parse(\"Your Config\");\n  \n  //Progress bar\n  InferClass::BaseModelType::callback a_callback = [](size_t a, size_t b) {std::cout << std::to_string((float)a * 100.f / (float)b) << \"%\\n\"; };\n  \n  //return params for inference\n  InferClass::BaseModelType::callback_params b_callback = []()  \n\t{\n\t\tauto cbaaa = InferClass::InferConfigs();\n\t\tcbaaa.kmeans_rate = 0.5;\n\t\tcbaaa.keys = 0;\n\t\treturn cbaaa;\n\t};\n  \n  //modify duration per phoneme\n  InferClass::TTS::DurationCallback c_callback = [](std::vector<float>&) {};\n  \n  std::vector<int16_t> output;\n  try\n  {\n  \tstd::wstring inp(\"watashinoonaniomitekudasai\");\n  \tauto model = dynamic_cast<InferClass::BaseModelType*>(new InferClass::VitsSvc(modConfigJson, a_callback, b_callback));\n    \n  \toutput = model->Inference(inp);\n    \n  \tWav outWav(model->GetSamplingRate(), output.size() * 2, output.data());\n  \toutWav.Writef(L\"test.wav\");\n    \n  \tdelete model;\n  }\n  catch(std::exception& e)\n  {\n  \tstd::cout << e.what();\n  }\n}\n\n```\n"
  },
  {
    "path": "libdlvoicecodec/Modules/StringPreprocess.hpp",
    "content": "﻿#pragma once\n#include <codecvt>\n#include <vector>\n#include <string>\n#ifdef _WIN32\n#include <Windows.h>\n#else\n#error\n#endif\ninline std::string to_byte_string(const std::wstring& input)\n{\n\tstd::vector<char> ByteString(input.length() * 6);\n\tWideCharToMultiByte(\n\t\tCP_UTF8,\n\t\t0,\n\t\tinput.c_str(),\n\t\tint(input.length()),\n\t\tByteString.data(),\n\t\tint(ByteString.size()),\n\t\tnullptr,\n\t\tnullptr\n\t);\n\treturn ByteString.data();\n}\n\ninline std::string to_ansi_string(const std::wstring& input)\n{\n\tstd::vector<char> ByteString(input.length() * 6);\n\tWideCharToMultiByte(\n\t\tCP_ACP,\n\t\t0,\n\t\tinput.c_str(),\n\t\tint(input.length()),\n\t\tByteString.data(),\n\t\tint(ByteString.size()),\n\t\tnullptr,\n\t\tnullptr\n\t);\n\treturn ByteString.data();\n}\n\ninline std::wstring to_wide_string(const std::string& input)\n{\n\tstd::vector<wchar_t> WideString(input.length() * 2);\n\tMultiByteToWideChar(\n\t\tCP_UTF8,\n\t\t0,\n\t\tinput.c_str(),\n\t\tint(input.length()),\n\t\tWideString.data(),\n\t\tint(WideString.size())\n\t);\n\treturn WideString.data();\n}\n\ntemplate <typename T>\nstd::wstring vector_to_string(const std::vector<T>& vector)\n{\n\tstd::wstring vecstr = L\"[\";\n\tfor (const auto& it : vector)\n\t{\n\t\tstd::wstring TmpStr = std::to_wstring(it);\n\t\tif ((std::is_same_v<T, float> || std::is_same_v<T, double>) && TmpStr.find(L'.') != std::string::npos)\n\t\t{\n\t\t\twhile (TmpStr.back() == L'0')\n\t\t\t\tTmpStr.pop_back();\n\t\t\tif (TmpStr.back() == L'.')\n\t\t\t\tTmpStr += L\"0\";\n\t\t}\n\t\tvecstr += TmpStr + L\", \";\n\t}\n\tif (vecstr.length() > 2)\n\t\tvecstr = vecstr.substr(0, vecstr.length() - 2);\n\tvecstr += L']';\n\treturn vecstr;\n}\n\ninline std::wstring string_vector_to_string(const std::vector<std::string>& vector)\n{\n\tstd::wstring vecstr = L\"[\";\n\tfor (const auto& it : vector)\n\t\tif (!it.empty())\n\t\t\tvecstr += L'\\\"' + to_wide_string(it) + L\"\\\", \";\n\tif (vecstr.length() > 2)\n\t\tvecstr = vecstr.substr(0, vecstr.length() - 2);\n\tvecstr += L']';\n\treturn vecstr;\n}\n\ninline std::wstring wstring_vector_to_string(const std::vector<std::wstring>& vector)\n{\n\tstd::wstring vecstr = L\"[\";\n\tfor (const auto& it : vector)\n\t\tif (!it.empty())\n\t\t\tvecstr += L'\\\"' + it + L\"\\\", \";\n\tif (vecstr.length() > 2)\n\t\tvecstr = vecstr.substr(0, vecstr.length() - 2);\n\tvecstr += L']';\n\treturn vecstr;\n}"
  },
  {
    "path": "libdlvoicecodec/MoeVoiceStudioSvc - Core - Cmd.cpp",
    "content": "﻿#include <iostream>\n#include \"../libsvc/Api/header/libsvc.h\"\n\n//测试用代码\n#pragma pack(push, 1)\nstruct WavHeader {\n\tchar riff[4];        // \"RIFF\"标志\n\tDWORD fileSize;      // 文件大小\n\tchar wave[4];        // \"WAVE\"标志\n\tchar fmt[4];         // \"fmt \"标志\n\tDWORD fmtSize;       // 格式数据大小\n\tWORD audioFormat;    // 音频格式\n\tWORD numChannels;    // 声道数\n\tDWORD sampleRate;    // 采样率\n\tDWORD byteRate;      // 每秒字节数\n\tWORD blockAlign;     // 数据块对齐\n\tWORD bitsPerSample;  // 采样位数\n\tchar data[4];        // \"data\"标志\n\tDWORD dataSize;      // 音频数据大小\n};\n#pragma pack(pop)\nWavHeader header;\nbool ReadWavFile(const wchar_t* filename, std::vector<short>& audioData)\n{\n\tFILE* file = nullptr;\n\t_wfopen_s(&file, filename, L\"rb\");\n\tif (!file) {\n\t\treturn false;\n\t}\n\n\tfread(&header, sizeof(WavHeader), 1, file);\n\n\tif (memcmp(header.riff, \"RIFF\", 4) != 0 ||\n\t\tmemcmp(header.wave, \"WAVE\", 4) != 0 ||\n\t\tmemcmp(header.fmt, \"fmt \", 4) != 0 ||\n\t\tmemcmp(header.data, \"data\", 4) != 0) {\n\t\tfclose(file);\n\t\treturn false;\n\t}\n\n\taudioData.resize(header.dataSize / sizeof(short));\n\tfread(audioData.data(), sizeof(short), audioData.size(), file);\n\n\tfclose(file);\n\n\treturn true;\n}\n\nvoid WriteWavFile(const wchar_t* filename, const std::vector<short>& audioData)\n{\n\tFILE* file = nullptr;\n\t_wfopen_s(&file, filename, L\"wb+\");\n\tif (!file) {\n\t\treturn;\n\t}\n\n\tfwrite(&header, sizeof(WavHeader), 1, file);\n\n\tfwrite(audioData.data(), sizeof(short), audioData.size(), file);\n\n\tfclose(file);\n}\n\nint main()\n{\n\tlibsvc::Init();\n\tlibsvc::Config Config;\n\tConfig.TensorExtractor = L\"RVC\";\n\tConfig.SamplingRate = 40000;\n\tConfig.HopSize = 320;\n\tConfig.HubertPath = LR\"(S:\\VSGIT\\MoeVoiceStudioSvc - Core - Cmd\\x64\\Debug\\hubert\\vec-768-layer-12.onnx)\";\n\tConfig.SpeakerCount = 1;\n\tConfig.HiddenUnitKDims = 768;\n\tConfig.VitsSvc.VitsSvc = LR\"(S:\\VSGIT\\MoeVoiceStudioSvc - Core - Cmd\\x64\\Debug\\Models\\NaruseMioShirakana\\NaruseMioShirakana_RVC.onnx)\";\n\tlibsvc::LoadModel(libsvc::ModelType::Vits, Config, L\"Shirakana\", [](size_t, size_t) {}, MoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders::CPU, 0, 8);\n\tstd::vector<int16_t> _Pcm;\n\tReadWavFile(L\"input.wav\", _Pcm);\n\tInferTools::SlicerSettings _SS;\n\t_SS.SamplingRate = static_cast<int32_t>(header.sampleRate);\n\tconst auto pos = libsvc::SliceAudio(_Pcm, _SS);\n\tconst auto slices = libsvc::PreprocessSlices(_Pcm, pos, _SS, static_cast<int>(header.sampleRate));\n\tsize_t prop = 0;\n\t_Pcm.clear();\n\tfor(const auto& i : slices.Slices)\n\t{\n\t\tconst auto _Temp = libsvc::InferSlice(libsvc::ModelType::Vits, L\"Shirakana\", i, {}, prop);\n\t\t_Pcm.insert(_Pcm.end(), _Temp.begin(), _Temp.end());\n\t\tstd::cout << double(++prop) / double(slices.Slices.size()) * 100. << std::endl;\n\t}\n\t\n\tWriteWavFile(L\"output.wav\", _Pcm);\n}"
  },
  {
    "path": "libdlvoicecodec/MoeVoiceStudioSvc - Core - Cmd.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\packages\\VC-LTL.5.0.9\\build\\native\\VC-LTL.props\" Condition=\"Exists('..\\packages\\VC-LTL.5.0.9\\build\\native\\VC-LTL.props')\" />\n  <Import Project=\"..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.props\" Condition=\"Exists('..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.props')\" />\n  <Import Project=\"..\\packages\\Microsoft.ML.OnnxRuntime.DirectML.1.17.1\\build\\native\\Microsoft.ML.OnnxRuntime.DirectML.props\" Condition=\"Exists('..\\packages\\Microsoft.ML.OnnxRuntime.DirectML.1.17.1\\build\\native\\Microsoft.ML.OnnxRuntime.DirectML.props')\" />\n  <Import Project=\"..\\packages\\Microsoft.AI.DirectML.1.13.1\\build\\Microsoft.AI.DirectML.props\" Condition=\"Exists('..\\packages\\Microsoft.AI.DirectML.1.13.1\\build\\Microsoft.AI.DirectML.props')\" />\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <VCProjectVersion>16.0</VCProjectVersion>\n    <Keyword>Win32Proj</Keyword>\n    <ProjectGuid>{7a5aa3a6-7488-4be9-93c3-c0aa0e39219e}</ProjectGuid>\n    <RootNamespace>MoeVoiceStudioSvcCoreCmd</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\n    <ProjectName>MoeVoiceStudio - Core</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n    <SupportLTL>true</SupportLTL>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n    <SupportLTL>true</SupportLTL>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <IncludePath>$(IncludePath)</IncludePath>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <IncludePath>$(IncludePath)</IncludePath>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>_DEBUG;_CONSOLE;MOEVSDMLPROVIDER;MoeVoiceStudioCommandLineProg;MoeVoiceStudioIndexCluster;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <LanguageStandard>stdcpp17</LanguageStandard>\n      <DisableSpecificWarnings>4996</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalLibraryDirectories>S:\\VSGIT\\MoeVoiceStudioSvc - Core - Cmd\\x64\\libsvc\\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>libsvc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>NDEBUG;_CONSOLE;MOEVSDMLPROVIDER;MoeVoiceStudioCommandLineProg;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <LanguageStandard>stdcpp17</LanguageStandard>\n      <DisableSpecificWarnings>4996</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalLibraryDirectories>S:\\VSGIT\\MoeVoiceStudioSvc - Core - Cmd\\x64\\libsvc\\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>libsvc.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"MoeVoiceStudioSvc - Core - Cmd.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\.gitignore\" />\n    <None Include=\"..\\README.md\" />\n    <None Include=\"..\\README_en.md\" />\n    <None Include=\"analyse\\GptSoVits.md\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n    <Import Project=\"..\\packages\\Microsoft.AI.DirectML.1.13.1\\build\\Microsoft.AI.DirectML.targets\" Condition=\"Exists('..\\packages\\Microsoft.AI.DirectML.1.13.1\\build\\Microsoft.AI.DirectML.targets')\" />\n    <Import Project=\"..\\packages\\Microsoft.ML.OnnxRuntime.DirectML.1.17.1\\build\\native\\Microsoft.ML.OnnxRuntime.DirectML.targets\" Condition=\"Exists('..\\packages\\Microsoft.ML.OnnxRuntime.DirectML.1.17.1\\build\\native\\Microsoft.ML.OnnxRuntime.DirectML.targets')\" />\n    <Import Project=\"..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.targets\" Condition=\"Exists('..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.targets')\" />\n  </ImportGroup>\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.AI.DirectML.1.13.1\\build\\Microsoft.AI.DirectML.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.AI.DirectML.1.13.1\\build\\Microsoft.AI.DirectML.props'))\" />\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.AI.DirectML.1.13.1\\build\\Microsoft.AI.DirectML.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.AI.DirectML.1.13.1\\build\\Microsoft.AI.DirectML.targets'))\" />\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.ML.OnnxRuntime.DirectML.1.17.1\\build\\native\\Microsoft.ML.OnnxRuntime.DirectML.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.ML.OnnxRuntime.DirectML.1.17.1\\build\\native\\Microsoft.ML.OnnxRuntime.DirectML.props'))\" />\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.ML.OnnxRuntime.DirectML.1.17.1\\build\\native\\Microsoft.ML.OnnxRuntime.DirectML.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.ML.OnnxRuntime.DirectML.1.17.1\\build\\native\\Microsoft.ML.OnnxRuntime.DirectML.targets'))\" />\n    <Error Condition=\"!Exists('..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.props'))\" />\n    <Error Condition=\"!Exists('..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.targets'))\" />\n    <Error Condition=\"!Exists('..\\packages\\VC-LTL.5.0.9\\build\\native\\VC-LTL.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\VC-LTL.5.0.9\\build\\native\\VC-LTL.props'))\" />\n  </Target>\n</Project>"
  },
  {
    "path": "libdlvoicecodec/MoeVoiceStudioSvc - Core - Cmd.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"源文件\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"头文件\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"资源文件\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"MoeVoiceStudioSvc - Core - Cmd.cpp\">\n      <Filter>源文件</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\README.md\">\n      <Filter>资源文件</Filter>\n    </None>\n    <None Include=\"..\\README_en.md\">\n      <Filter>资源文件</Filter>\n    </None>\n    <None Include=\"..\\.gitignore\" />\n    <None Include=\"packages.config\" />\n    <None Include=\"$(MSBuildThisFileDirectory)..\\..\\runtimes\\win-x64\\native\\onnxruntime.dll\" />\n    <None Include=\"analyse\\GptSoVits.md\">\n      <Filter>资源文件</Filter>\n    </None>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "libdlvoicecodec/analyse/GptSoVits.md",
    "content": "# GptSoVits主要分为三个部分\n\n### VQ（内核为KMeans聚类）\n- Train：对训练集音频的ssl[^1]进行KMeans聚类，获取到的聚类中心构造一个Embedding（CodeBook.embed）\n- Infer：使用Indices获取聚类中心（CodeBook.embed）中的元素，构造一个ssl[^1]矩阵\n\n与SoVits的KMeans/Index聚类类似，只不过SoVits的聚类在使用时是使用输入的HuBert在CodeBook中查找与其距离排名前K的点后加权平均，而GptSoVits则是使用一个AR循环预测所需的HuBert在CodeBook中的下标，之后使用该下标获取CodeBook中对应元素\n\n---\n\n### AR(GPT)\n- Inputs:\n\t- text_seq：输入文本音素序列的数字ID（在Symbols数组中的下标）\n\t- text_bert：输入文本的Bert\n\t- ref_seq：参考文本音素序列的数字ID（在Symbols数组中的下标）\n\t- ref_bert：参考文本的Bert\n\t- ref_ssl：参考音频的ssl[^1]\n- OutPuts:\n\t- codes：输入到VQ的Indices，用于获取ssl[^1]的聚类中心\n\n与Gpt类似，使用一个AR循环，通过输入文本编码后的信息预测一个响应序列（序列终止为EOS），该响应序列为训练集音频聚类后的聚类中心在CodeBook中的下标，之后会从CodeBook中获取相应的元素，相当于SoVits中的Hubert。\n\n---\n\n### SoVits\n- Inputs:\n\t- codes：输入到VQ的Indices，用于获取ssl[^1]的聚类中心\n\t- text_seq：输入文本音素序列的数字ID（在Symbols数组中的下标）\n\t- ref_audio：参考音频（训练集内音频）\n\n与SoVits比较，其中的codes实际上相当于SoVits的Hubert，只不过这个Hubert是使用AR预测所得序列生成的。\nGptSoVits使用输入音素的Embedding，AR预测所得的Hubert以及参考音频的Mel共通指导音频生成，可以有效的控制音频的语气，感情。\n然而在一些时候，会出现漏字和错字的情况，可能和AR有较大的关系\n\n---\n\n### 实验方案\n将GptSovits中的AR部分去除，将VQ的输入从Indices（code）替换为ssl（即使用最临近点搜索）。即可获得一个svc模型。\n\n两个音频，一个训练集参考音频，一个输入音频。需完成以下步骤。\n\n1、训练集参考音频直接编码为mel记作ref_audio。\n\n2、输入音频经过一个asr处理为音素序列记作text_seq。\n\n3、输入音频经过hubert后使用最临近点搜索，从vq的embedding中取元素，记作ssl。\n\n4、将ssl，text_seq和ref_audio作为vits的输入进行推理。\n\n\n---\n\n[^1]: ssl其实就是音频的Hubert，与SoVits的Hubert一致\n"
  },
  {
    "path": "libdlvoicecodec/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.AI.DirectML\" version=\"1.13.1\" targetFramework=\"native\" />\n  <package id=\"Microsoft.ML.OnnxRuntime.DirectML\" version=\"1.17.1\" targetFramework=\"native\" />\n  <package id=\"VC-LTL\" version=\"5.0.9\" targetFramework=\"native\" />\n  <package id=\"YY.NuGet.Import.Helper\" version=\"1.0.0.4\" targetFramework=\"native\" />\n</packages>"
  },
  {
    "path": "libsvc/Api/header/NativeApi.h",
    "content": "#pragma once\n#ifdef LIBSVC_EXPORTS\n#define LibSvcApi __declspec(dllexport)\n#else\n#ifndef LibSvcStaticLib\n#define LibSvcApi __declspec(dllimport)\n#else\n#define LibSvcApi\n#endif\n#endif\n\n#ifdef __GNUC__\n#define LibSvcDeprecated __attribute__((deprecated))\n#else\n#ifdef _MSC_VER\n#define LibSvcDeprecated __declspec(deprecated)\n#endif\n#endif\n#ifdef _WIN32\n#include \"windows.h\"\n#endif\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _WIN32\n\ttypedef signed char         INT8, * PINT8;\n\ttypedef signed short        INT16, * PINT16;\n\ttypedef signed int          INT32, * PINT32;\n\ttypedef signed long long      INT64, * PINT64;\n\ttypedef unsigned char       UINT8, * PUINT8;\n\ttypedef unsigned short      UINT16, * PUINT16;\n\ttypedef unsigned int        UINT32, * PUINT32;\n\ttypedef unsigned long long    UINT64, * PUINT64;\n\ttypedef wchar_t* NWPSTR, * LPWSTR, * PWSTR, * BSTR;\n#endif\n\n\ttypedef void(*ProgCallback)(size_t, size_t);\n\n\tenum LibSvcExecutionProviders\n\t{\n\t\tCPU = 0,\n\t\tCUDA = 1,\n\t\tDML = 2\n\t};\n\n\tenum LibSvcModelType\n\t{\n\t\tVits,\n\t\tDiffusion,\n\t\tReflow\n\t};\n\n#ifdef _MSC_VER\n#pragma pack(push, 4)\n#else\n#pragma pack(4)\n#endif\n\n\tstruct LibSvcSlicerSettings\n\t{\n\t\tINT32 SamplingRate;\n\t\tdouble Threshold;\n\t\tdouble MinLength;\n\t\tINT32 WindowLength;\n\t\tINT32 HopSize;\n\t};\n\n\tstruct LibSvcParams\n\t{\n\t\t//ͨ\n\t\tfloat NoiseScale;\t\t\t\t\t\t\t\t//\t\t\t\t[   0 ~ 10   ]\n\t\tINT64 Seed;\t\t\t\t\t\t\t\t\t\t//\t\t\t\t\t\t[   INT64    ]\n\t\tINT64 SpeakerId;\t\t\t\t\t\t\t\t//ĬϽɫID\t\t\t\t\t[   0 ~ NS   ]\n\t\tsize_t SrcSamplingRate;\t\t\t\t\t\t\t//Դ\t\t\t\t\t[     SR     ]\n\t\tINT64 SpkCount;\t\t\t\t\t\t\t\t\t//ģͽɫ\t\t\t\t\t[\t  NS     ]\n\n\t\t//SVC\n\t\tfloat IndexRate;\t\t\t\t\t\t\t\t//\t\t\t\t\t\t[   0 ~ 1    ]\n\t\tfloat ClusterRate;\t\t\t\t\t\t\t\t//\t\t\t\t\t\t[   0 ~ 1    ]\n\t\tfloat DDSPNoiseScale;\t\t\t\t\t\t\t//DDSP\t\t\t[   0 ~ 10   ]\n\t\tfloat Keys;\t\t\t\t\t\t\t\t\t\t//\t\t\t\t\t\t[ -64 ~ 64   ]\n\t\tsize_t MeanWindowLength;\t\t\t\t\t\t//ֵ˲ڴС\t\t\t[   1 ~ 20   ]\n\t\tsize_t Pndm;\t\t\t\t\t\t\t\t\t//Diffusionٱ\t\t\t[   1 ~ 200  ]\n\t\tsize_t Step;\t\t\t\t\t\t\t\t\t//Diffusionܲ\t\t\t[   1 ~ 1000 ]\n\t\tfloat TBegin;\t\t\t\t\t\t\t\t\t//Reflowʼ\n\t\tfloat TEnd;\t\t\t\t\t\t\t\t\t\t//Reflowֹ\n\t\tLPWSTR Sampler;\t\t\t\t\t\t\t\t\t//Diffusion\t\t\t[\"Pndm\" \"DDim\"]\n\t\tLPWSTR ReflowSampler;\t\t\t\t\t\t\t//Reflow\t\t\t\t[\"Eular\" \"Rk4\" \"Heun\" \"Pecece\"]\n\t\tLPWSTR F0Method;\t\t\t\t\t\t\t\t//F0ȡ㷨\t\t\t\t\t[\"Dio\" \"Harvest\" \"RMVPE\" \"FCPE\"]\n\t\tINT32 UseShallowDiffusionOrEnhancer;\t\t\t//Ƿʹǳɢ/ǿ\t\t[0(false)/1(true)]\n\t\tvoid* _VocoderModel;\t\t\t\t\t\t\t//ģ\t\t\t\t\tDiffusionģͱ趨Ŀ\n\t\tvoid* _ShallowDiffusionModel;                   //ɢģ\t\t\t\t\tǳɢΪɢģ͵ַ\n\t\tINT32 ShallowDiffusionUseSrcAudio;              //ǳɢģǷʹԭʼƵ\t\t[0(false)/1(true)]\n\t\tINT32 VocoderHopSize;\t\t\t\t\t\t\t//HopSize\t\t\t\t[    Hop     ]\n\t\tINT32 VocoderMelBins;\t\t\t\t\t\t\t//MelBins\t\t\t\t[    Bins    ]\n\t\tINT32 VocoderSamplingRate;\t\t\t\t\t\t//\t\t\t\t[     SR     ]\n\t\tINT64 ShallowDiffuisonSpeaker;\t\t\t\t\t//ǳɢVitsģĽɫID\t[   0 ~ NS   ]\n\t};\n\n\tstruct DiffusionSvcPaths\n\t{\n\t\tLPWSTR Encoder;\n\t\tLPWSTR Denoise;\n\t\tLPWSTR Pred;\n\t\tLPWSTR After;\n\t\tLPWSTR Alpha;\n\t\tLPWSTR Naive;\n\n\t\tLPWSTR DiffSvc;\n\t};\n\n\tstruct ReflowSvcPaths\n\t{\n\t\tLPWSTR Encoder;\n\t\tLPWSTR VelocityFn;\n\t\tLPWSTR After;\n\t};\n\n\tstruct VitsSvcPaths\n\t{\n\t\tLPWSTR VitsSvc;\n\t};\n\n\tstruct LibSvcClusterConfig\n\t{\n\t\tINT64 ClusterCenterSize;\n\t\tLPWSTR Path;\n\t\tLPWSTR Type; //\"KMeans\" \"Index\"\n\t};\n\n\tstruct LibSvcHparams\n\t{\n\t\tLPWSTR TensorExtractor;\n\t\tLPWSTR HubertPath;\n\t\tDiffusionSvcPaths DiffusionSvc;\n\t\tVitsSvcPaths VitsSvc;\n\t\tReflowSvcPaths ReflowSvc;\n\t\tLibSvcClusterConfig Cluster;\n\n\t\tINT32 SamplingRate;\n\n\t\tINT32 HopSize;\n\t\tINT64 HiddenUnitKDims;\n\t\tINT64 SpeakerCount;\n\t\tINT32 EnableCharaMix;\n\t\tINT32 EnableVolume;\n\t\tINT32 VaeMode;\n\n\t\tINT64 MelBins;\n\t\tINT64 Pndms;\n\t\tINT64 MaxStep;\n\t\tfloat SpecMin;\n\t\tfloat SpecMax;\n\t\tfloat Scale;\n\t};\n\n#ifdef _MSC_VER\n#pragma pack(pop)\n#else\n#pragma pack()\n#endif\n\ttypedef void* FloatVector, * DoubleDimsFloatVector, * Int16Vector, * UInt64Vector, * MelType, * SliceType, * SlicesType, * SvcModel, * VocoderModel;\n\ttypedef const void* CFloatVector, * CDoubleDimsFloatVector, * CInt16Vector, * CUInt64Vector, * CMelType, * CSliceType, * CSlicesType;\n\n\tLibSvcApi void InitLibSvcHparams(LibSvcHparams* _Input);\n\n\tLibSvcApi void InitLibSvcParams(LibSvcParams* _Input);\n\n\tLibSvcApi void InitLibSvcSlicerSettings(LibSvcSlicerSettings* _Input);\n\n\tLibSvcApi float* LibSvcGetFloatVectorData(FloatVector _Obj);\n\n\tLibSvcApi size_t LibSvcGetFloatVectorSize(FloatVector _Obj);\n\n\t//DFloatVector\n\n\tLibSvcApi FloatVector LibSvcGetDFloatVectorData(DoubleDimsFloatVector _Obj, size_t _Index);\n\n\tLibSvcApi size_t LibSvcGetDFloatVectorSize(DoubleDimsFloatVector _Obj);\n\n\t//Audio - vector<int16_t>\n\n\tLibSvcApi Int16Vector LibSvcAllocateAudio();\n\n\tLibSvcApi void LibSvcReleaseAudio(Int16Vector _Obj);\n\n\tLibSvcApi void LibSvcSetAudioLength(Int16Vector _Obj, size_t _Size);\n\n\tLibSvcApi void LibSvcInsertAudio(Int16Vector _ObjA, Int16Vector _ObjB);\n\n\tLibSvcApi short* LibSvcGetAudioData(Int16Vector _Obj);\n\n\tLibSvcApi size_t LibSvcGetAudioSize(Int16Vector _Obj);\n\n\t//Offset - vector<size_t>\n\n\tLibSvcApi UInt64Vector LibSvcAllocateOffset();\n\n\tLibSvcApi void LibSvcReleaseOffset(UInt64Vector _Obj);\n\n\tLibSvcApi void LibSvcSetOffsetLength(UInt64Vector _Obj, size_t _Size);\n\n\tLibSvcApi size_t* LibSvcGetOffsetData(UInt64Vector _Obj);\n\n\tLibSvcApi size_t LibSvcGetOffsetSize(UInt64Vector _Obj);\n\n\t//Mel - pair<vector<float>, int64_t>\n\n\tLibSvcApi MelType LibSvcAllocateMel();\n\n\tLibSvcApi void LibSvcReleaseMel(MelType _Obj);\n\n\tLibSvcApi FloatVector LibSvcGetMelData(MelType _Obj);\n\n\tLibSvcApi INT64 LibSvcGetMelSize(MelType _Obj);\n\n\t//Slice - MoeVoiceStudioSvcSlice\n\n\tLibSvcApi Int16Vector LibSvcGetAudio(SliceType _Obj);\n\n\tLibSvcApi FloatVector LibSvcGetF0(SliceType _Obj);\n\n\tLibSvcApi FloatVector LibSvcGetVolume(SliceType _Obj);\n\n\tLibSvcApi DoubleDimsFloatVector LibSvcGetSpeaker(SliceType _Obj);\n\n\tLibSvcApi INT32 LibSvcGetSrcLength(SliceType _Obj);\n\n\tLibSvcApi INT32 LibSvcGetIsNotMute(SliceType _Obj);\n\n\tLibSvcApi void LibSvcSetSpeakerMixDataSize(SliceType _Obj, size_t _NSpeaker);\n\n\t//Slices - MoeVoiceStudioSvcData\n\n\tLibSvcApi SlicesType LibSvcAllocateSliceData();\n\n\tLibSvcApi void LibSvcReleaseSliceData(SlicesType _Obj);\n\n\tLibSvcApi BSTR LibSvcGetAudioPath(SlicesType _Obj);\n\n\tLibSvcApi SliceType LibSvcGetSlice(SlicesType _Obj, size_t _Index);\n\n\tLibSvcApi size_t LibSvcGetSliceCount(SlicesType _Obj);\n\n\t/******************************************Fun**********************************************/\n\n\tLibSvcApi void LibSvcInit();\n\n\tLibSvcApi void LibSvcFreeString(\n\t\tBSTR _String\n\t);\n\n\tLibSvcApi INT32 LibSvcSetGlobalEnv(\n\t\tUINT32 ThreadCount,\n\t\tUINT32 DeviceID,\n\t\tUINT32 Provider\n\t);\n\n\tLibSvcApi void LibSvcSetMaxErrorCount(\n\t\tsize_t Count\n\t);\n\n\tLibSvcApi BSTR LibSvcGetError(\n\t\tsize_t Index\n\t);\n\n\tLibSvcApi INT32 LibSvcSliceAudio(\n\t\tCInt16Vector _Audio,\t\t\t\t\t\t//std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n\t\tconst void* _Setting,\t\t\t\t\t\t//Ptr Of LibSvcSlicerSettings\n\t\tUInt64Vector _Output\t\t\t\t\t\t//std::vector<size_t> By \"LibSvcAllocateOffset()\"\n\t);\n\n\tLibSvcApi INT32 LibSvcPreprocess(\n\t\tCInt16Vector _Audio,\t\t\t\t\t\t//std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n\t\tCUInt64Vector _SlicePos,\t\t\t\t\t//std::vector<size_t> By \"LibSvcAllocateOffset()\"\n\t\tINT32 _SamplingRate,\n\t\tINT32 _HopSize,\n\t\tdouble _Threshold,\n\t\tconst wchar_t* _F0Method,\t\t\t\t\t//\"Dio\" \"Harvest\" \"RMVPE\" \"FCPE\"\n\t\tSlicesType _Output\t\t\t\t\t\t\t//Slices By \"LibSvcAllocateSliceData()\"\n\t);\n\n\tLibSvcApi INT32 LibSvcStft(\n\t\tCInt16Vector _Audio,\t\t\t\t\t\t//std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n\t\tINT32 _SamplingRate,\n\t\tINT32 _Hopsize,\n\t\tINT32 _MelBins,\n\t\tMelType _Output\t\t\t\t\t\t\t\t//Mel By \"LibSvcAllocateMel()\"\n\t);\n\n\tLibSvcApi INT32 LibSvcInferSlice(\n\t\tSvcModel _Model,\t\t\t\t\t\t\t//SingingVoiceConversion Model\n\t\tUINT32 _T,\n\t\tCSliceType _Slice,\t\t\t\t\t\t\t//Slices By \"LibSvcAllocateSliceData()\"\n\t\tconst void* _InferParams,\t\t\t\t\t//Ptr Of LibSvcParams\n\t\tsize_t* _Process, \n\t\tInt16Vector _Output\t\t\t\t\t\t\t//std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n\t);\n\n\tLibSvcApi INT32 LibSvcInferPCMData(\n\t\tSvcModel _Model,\t\t\t\t\t\t\t//SingingVoiceConversion Model\n\t\tUINT32 _T,\n\t\tCInt16Vector _PCMData,\n\t\tconst void* _InferParams,\t\t\t\t\t//Ptr Of LibSvcParams\n\t\tInt16Vector _Output\t\t\t\t\t\t\t//std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n\t);\n\n\tLibSvcApi LibSvcDeprecated INT32 LibSvcShallowDiffusionInference(\n\t\tSvcModel _Model,\t\t\t\t\t\t\t//SingingVoiceConversion Model\n\t\tCInt16Vector _16KAudioHubert,\t\t\t\t//SamplingRate Must Be 16000\n\t\tMelType _Mel,\t\t\t\t\t\t\t\t//Mel By \"LibSvcAllocateMel()\"\n\t\tCFloatVector _SrcF0, \n\t\tCFloatVector _SrcVolume, \n\t\tCDoubleDimsFloatVector _SrcSpeakerMap, \n\t\tINT64 _SrcSize,\n\t\tconst void* _InferParams,\t\t\t\t\t//Ptr Of LibSvcParams\n\t\tsize_t* _Process,\n\t\tInt16Vector _Output\t\t\t\t\t\t\t//std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n\t);\n\n\tLibSvcApi LibSvcDeprecated INT32 LibSvcVocoderEnhance(\n\t\tVocoderModel _Model,\t\t\t\t\t\t//Vocoder Model\n\t\tMelType _Mel,\t\t\t\t\t\t\t\t//Mel By \"LibSvcAllocateMel()\"\n\t\tCFloatVector _F0,\n\t\tINT32 _VocoderMelBins,\n\t\tInt16Vector _Output\t\t\t\t\t\t\t//std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n\t);\n\n\tLibSvcApi SvcModel LibSvcLoadModel(\n\t\tUINT32 _T,\n\t\tconst void* _Config,\t\t\t\t\t\t//Ptr Of LibSvcParams\n\t\tProgCallback _ProgressCallback,\n\t\tUINT32 _ExecutionProvider = CPU,\n\t\tUINT32 _DeviceID = 0,\n\t\tUINT32 _ThreadCount = 0\n\t);\n\n\tLibSvcApi INT32 LibSvcUnloadModel(\n\t\tUINT32 _T,\n\t\tSvcModel _Model\n\t);\n\n\tLibSvcApi VocoderModel LibSvcLoadVocoder(\n\t\tLPWSTR VocoderPath\n\t);\n\n\tLibSvcApi INT32 LibSvcUnloadVocoder(\n\t\tVocoderModel _Model\n\t);\n\n\tLibSvcApi INT32 LibSvcReadAudio(\n\t\tLPWSTR _AudioPath, \n\t\tINT32 _SamplingRate, \n\t\tInt16Vector _Output\n\t);\n\n\tLibSvcApi void LibSvcEnableFileLogger(\n\t\tbool _Cond\n\t);\n\n\tLibSvcApi void LibSvcWriteAudioFile(\n\t\tInt16Vector _PCMData, \n\t\tLPWSTR _OutputPath, \n\t\tINT32 _SamplingRate\n\t);\n\n#ifdef __cplusplus\n}\n#endif"
  },
  {
    "path": "libsvc/Api/header/libsvc.h",
    "content": "#pragma once\r\n#include \"../../Modules/header/Modules.hpp\"\r\n#include <any>\r\n\r\nnamespace libsvccore\r\n{\r\n\tusing Config = MoeVoiceStudioCore::Hparams;\r\n\tusing VitsSvc = MoeVoiceStudioCore::VitsSvc;\r\n\tusing DiffusionSvc = MoeVoiceStudioCore::DiffusionSvc;\r\n\tusing ReflowSvc = MoeVoiceStudioCore::ReflowSvc;\r\n\tusing ClusterBase = MoeVoiceStudioCluster::MoeVoiceStudioBaseCluster;\r\n\tusing TensorExtractorBase = MoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor;\r\n\tusing ProgressCallback = MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback;\r\n\tusing ExecutionProvider = MoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders;\r\n\tusing Slices = MoeVSProjectSpace::MoeVoiceStudioSvcData;\r\n\tusing SingleSlice = MoeVSProjectSpace::MoeVoiceStudioSvcSlice;\r\n\tusing Params = MoeVSProjectSpace::MoeVSSvcParams;\r\n\tenum class ModelType { Vits, Diffusion, Reflow };\r\n\r\n\tLibSvcApi void SliceAudio(size_t& _Id, const std::vector<int16_t>& _Audio, const InferTools::SlicerSettings& _Setting);\r\n\r\n\tLibSvcApi void Preprocess(size_t& _Id, const std::vector<int16_t>& _Audio, const std::vector<size_t>& _SlicePos, const InferTools::SlicerSettings& _Setting, int _SamplingRate, int _HopSize, const std::wstring& _F0Method);\r\n\r\n\tLibSvcApi int InferSlice(size_t& _Id, ModelType _T, const std::wstring& _Name, const SingleSlice& _Slice, const Params& _InferParams, size_t& _Process);\r\n\r\n\tLibSvcApi int ShallowDiffusionInference(size_t& _Id, const std::wstring& _Name, const std::vector<float>& _16KAudioHubert, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, const std::pair<std::vector<float>, int64_t>& _Mel, const std::vector<float>& _SrcF0, const std::vector<float>& _SrcVolume, const std::vector<std::vector<float>>& _SrcSpeakerMap, size_t& Process, int64_t SrcSize);\r\n\t\r\n\tLibSvcApi int Stft(size_t& _Id, const std::vector<double>& _NormalizedAudio, int _SamplingRate, int _Hopsize, int _MelBins);\r\n\r\n\tLibSvcApi int VocoderEnhance(size_t& _Id, const std::vector<float>& Mel, const std::vector<float>& F0, size_t MelSize, long VocoderMelBins);\r\n\r\n\tLibSvcApi int LoadModel(ModelType _T, const Config& _Config, const std::wstring& _Name, const ProgressCallback& _ProgressCallback,\r\n\t\tExecutionProvider ExecutionProvider_ = ExecutionProvider::CPU,\r\n\t\tunsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\r\n\r\n\tLibSvcApi void UnloadModel(ModelType _T, const std::wstring& _Name);\r\n\r\n\tLibSvcApi std::any& GetData(size_t _Id);\r\n\r\n\tLibSvcApi void PopData(size_t _Id);\r\n\r\n\t/// <summary>\r\n\t/// Errorе󳤶ȣErrorϢ\r\n\t/// </summary>\r\n\t/// <param name=\"Count\"></param>\r\n\t/// <returns></returns>\r\n\tLibSvcApi void SetMaxErrorCount(size_t Count);\r\n\r\n\t/// <summary>\r\n\t/// ȡErrorеĵIndex\r\n\t/// </summary>\r\n\t/// <param name=\"Index\"></param>\r\n\t/// <returns></returns>\r\n\tLibSvcApi std::wstring& GetLastError(size_t Index);\r\n\r\n\t/// <summary>\r\n\t/// Stft\r\n\t/// </summary>\r\n\t/// <returns></returns>\r\n\tLibSvcApi void EmptyStftCache();\r\n\r\n\t/// <summary>\r\n\t/// ģ\r\n\t/// </summary>\r\n\t/// <param name=\"VocoderPath\">ģ·</param>\r\n\t/// <returns></returns>\r\n\tLibSvcApi void LoadVocoder(const std::wstring& VocoderPath);\r\n\r\n\t/// <summary>\r\n\t/// ʼʹǰã\r\n\t/// </summary>\r\n\t/// <returns></returns>\r\n\tLibSvcApi void Init();\r\n\r\n\t/// <summary>\r\n\t/// ȫֻҪӰF0Predictor\r\n\t/// </summary>\r\n\t/// <returns></returns>\r\n\tLibSvcApi void SetGlobalEnv(unsigned ThreadCount, unsigned DeviceID, unsigned Provider);\r\n}\r\n\r\nnamespace libsvc\r\n{\r\n\tusing libsvccore::Config;\r\n\tusing libsvccore::VitsSvc;\r\n\tusing libsvccore::DiffusionSvc;\r\n\tusing libsvccore::ClusterBase;\r\n\tusing libsvccore::TensorExtractorBase;\r\n\tusing libsvccore::ProgressCallback;\r\n\tusing libsvccore::ExecutionProvider;\r\n\tusing libsvccore::ModelType;\r\n\tusing libsvccore::Slices;\r\n\tusing libsvccore::SingleSlice;\r\n\tusing libsvccore::Params;\r\n\tusing MelContainer = std::pair<std::vector<float>, int64_t>;\r\n\r\n\tusing libsvccore::SetMaxErrorCount;\r\n\tusing libsvccore::GetLastError;\r\n\tusing libsvccore::EmptyStftCache;\r\n\tusing libsvccore::LoadVocoder;\r\n\tusing libsvccore::Init;\r\n\tusing libsvccore::SetGlobalEnv;\r\n\r\n\t/// <summary>\r\n\t/// жһģ\r\n\t/// </summary>\r\n\t/// <param name=\"_T\">ģ</param>\r\n\t/// <param name=\"_Name\">ģID</param>\r\n\t/// <returns></returns>\r\n\tinline void UnloadModel(\r\n\t\tModelType _T,\r\n\t\tconst std::wstring& _Name\r\n\t)\r\n\t{\r\n\t\tlibsvccore::UnloadModel(_T, _Name);\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// һģ\r\n\t/// </summary>\r\n\t/// <param name=\"_T\">ģ</param>\r\n\t/// <param name=\"_Config\">Ŀ</param>\r\n\t/// <param name=\"_Name\">ģID</param>\r\n\t/// <param name=\"_ProgressCallback\">ص</param>\r\n\t/// <param name=\"ExecutionProvider_\">ExecutionProvider</param>\r\n\t/// <param name=\"DeviceID_\">GPUID</param>\r\n\t/// <param name=\"ThreadCount_\">߳</param>\r\n\t/// <returns>ɹأ0 ʧܣ0</returns>\r\n\tinline int LoadModel(\r\n\t\tModelType _T,\r\n\t\tconst Config& _Config,\r\n\t\tconst std::wstring& _Name,\r\n\t\tconst ProgressCallback& _ProgressCallback,\r\n\t\tExecutionProvider ExecutionProvider_ = ExecutionProvider::CPU,\r\n\t\tunsigned DeviceID_ = 0,\r\n\t\tunsigned ThreadCount_ = 0\r\n\t)\r\n\t{\r\n\t\treturn libsvccore::LoadModel(_T, _Config, _Name, _ProgressCallback, ExecutionProvider_, DeviceID_, ThreadCount_);\r\n\t}\r\n\r\n\t/**\r\n\t * \\brief ƬƵ\r\n\t * \\param _Audio ƵPCM-Signed-Int16 \r\n\t * \\param _Setting Ƭ\r\n\t * \\return ƬPos\r\n\t */\r\n\tinline std::vector<size_t> SliceAudio(\r\n\t\tconst std::vector<int16_t>& _Audio,\r\n\t\tconst InferTools::SlicerSettings& _Setting\r\n\t)\r\n\t{\r\n\t\tsize_t _Ptr = 0;\r\n\t\tlibsvccore::SliceAudio(_Ptr, _Audio, _Setting);\r\n\t\tstd::vector temp = std::any_cast<std::vector<size_t>>(libsvccore::GetData(_Ptr));\r\n\t\tlibsvccore::PopData(_Ptr);\r\n\t\treturn temp;\r\n\t}\r\n\r\n\t/**\r\n\t * \\brief ԤƬõƵ\r\n\t * \\param _Audio Ƶ\r\n\t * \\param _SlicePos ƬPos\r\n\t * \\param _Setting Ƭ\r\n\t * \\param _SamplingRate \r\n\t * \\param _HopSize Hopsize\r\n\t * \\param _F0Method F0㷨\r\n\t * \\return ԤݣԼһֱͽ\r\n\t */\r\n\tinline Slices PreprocessSlices(\r\n\t\tconst std::vector<int16_t>& _Audio,\r\n\t\tconst std::vector<size_t>& _SlicePos,\r\n\t\tconst InferTools::SlicerSettings& _Setting,\r\n\t\tint _SamplingRate = 48000,\r\n\t\tint _HopSize = 512,\r\n\t\tconst std::wstring& _F0Method = L\"Dio\"\r\n\t)\r\n\t{\r\n\t\tsize_t _Ptr = 0;\r\n\t\tlibsvccore::Preprocess(_Ptr, _Audio, _SlicePos, _Setting, _SamplingRate, _HopSize, _F0Method);\r\n\t\tSlices temp = std::any_cast<Slices>(libsvccore::GetData(_Ptr));\r\n\t\tlibsvccore::PopData(_Ptr);\r\n\t\treturn temp;\r\n\t}\r\n\r\n\t/**\r\n\t * \\brief ʱҶ任Mel\r\n\t * \\param _NormalizedAudio һƵPCM\r\n\t * \\param _SamplingRate \r\n\t * \\param _Hopsize HopSize\r\n\t * \\param _MelBins MelBins\r\n\t * \\return Mel\r\n\t */\r\n\tinline MelContainer Stft(\r\n\t\tconst std::vector<double>& _NormalizedAudio,\r\n\t\tint _SamplingRate,\r\n\t\tint _Hopsize,\r\n\t\tint _MelBins\r\n\t)\r\n\t{\r\n\t\tsize_t _Ptr = 0;\r\n\t\tlibsvccore::Stft(_Ptr, _NormalizedAudio, _SamplingRate, _Hopsize, _MelBins);\r\n\t\tMelContainer temp = std::any_cast<MelContainer>(libsvccore::GetData(_Ptr));\r\n\t\tlibsvccore::PopData(_Ptr);\r\n\t\treturn temp;\r\n\t}\r\n\r\n\t/**\r\n\t * \\brief һƬ\r\n\t * \\param _T ģ\r\n\t * \\param _Name ģID\r\n\t * \\param _Slice Ƭ\r\n\t * \\param _InferParams \r\n\t * \\param _Process ܽ\r\n\t * \\return ƵPCM\r\n\t */\r\n\tinline std::vector<int16_t> InferSlice(\r\n\t\tModelType _T,\r\n\t\tconst std::wstring& _Name,\r\n\t\tconst SingleSlice& _Slice,\r\n\t\tconst Params& _InferParams,\r\n\t\tsize_t& _Process\r\n\t)\r\n\t{\r\n\t\tsize_t _Ptr = 0;\r\n\t\tif(!libsvccore::InferSlice(_Ptr, _T, _Name, _Slice, _InferParams, _Process))\r\n\t\t{\r\n\t\t\tstd::vector<int16_t> temp = std::any_cast<std::vector<int16_t>>(libsvccore::GetData(_Ptr));\r\n\t\t\tlibsvccore::PopData(_Ptr);\r\n\t\t\treturn temp;\r\n\t\t}\r\n\t\treturn {};\r\n\t}\r\n\r\n\t/**\r\n\t * \\brief ǳɢ\r\n\t * \\param _Name DiffusionģID\r\n\t * \\param _16KAudioHubert 16000ʵԭʼƵǰƵ\r\n\t * \\param _InferParams \r\n\t * \\param _Mel Mel\r\n\t * \\param _SrcF0 Ƶ\r\n\t * \\param _SrcVolume \r\n\t * \\param _SrcSpeakerMap ˵˱\r\n\t * \\param Process \r\n\t * \\param SrcSize ԭʼƵȣƬƬĳȣ\r\n\t * \\return ƵPCM\r\n\t */\r\n\tinline std::vector<int16_t> ShallowDiffusionInference(\r\n\t\tconst std::wstring& _Name,\r\n\t\tconst std::vector<float>& _16KAudioHubert,\r\n\t\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\r\n\t\tconst MelContainer& _Mel,\r\n\t\tconst std::vector<float>& _SrcF0,\r\n\t\tconst std::vector<float>& _SrcVolume,\r\n\t\tconst std::vector<std::vector<float>>& _SrcSpeakerMap,\r\n\t\tsize_t& Process,\r\n\t\tint64_t SrcSize\r\n\t)\r\n\t{\r\n\t\tsize_t _Ptr = 0;\r\n\t\tif(!libsvccore::ShallowDiffusionInference(_Ptr, _Name, _16KAudioHubert, _InferParams, _Mel, _SrcF0, _SrcVolume, _SrcSpeakerMap, Process, SrcSize))\r\n\t\t{\r\n\t\t\tstd::vector<int16_t> temp = std::any_cast<std::vector<int16_t>>(libsvccore::GetData(_Ptr));\r\n\t\t\tlibsvccore::PopData(_Ptr);\r\n\t\t\treturn temp;\r\n\t\t}\r\n\t\treturn {};\r\n\t}\r\n\r\n\t/**\r\n\t * \\brief ǿ\r\n\t * \\param Mel Mel\r\n\t * \\param F0 Ƶ\r\n\t * \\param MelSize Mel֡\r\n\t * \\param VocoderMelBins MelBins\r\n\t * \\return PCM\r\n\t */\r\n\tinline std::vector<int16_t> VocoderEnhance(const std::vector<float>& Mel, const std::vector<float>& F0, size_t MelSize, long VocoderMelBins)\r\n\t{\r\n\t\tsize_t _Ptr = 0;\r\n\t\tif(!libsvccore::VocoderEnhance(_Ptr, Mel, F0, MelSize, VocoderMelBins))\r\n\t\t{\r\n\t\t\tstd::vector<int16_t> temp = std::any_cast<std::vector<int16_t>>(libsvccore::GetData(_Ptr));\r\n\t\t\tlibsvccore::PopData(_Ptr);\r\n\t\t\treturn temp;\r\n\t\t}\r\n\t\treturn {};\r\n\t}\r\n}\r\n"
  },
  {
    "path": "libsvc/Api/readme.md",
    "content": "```c\n#include \"NativeApi.h\"\n\n//注意，一切设置对象长度/大小的操作都会realloc，缓冲区的地址会发生变化\n\nvoid callback(size_t,size_t) {}\n\nSliceType _SingleSlice = 0;\nLibSvcSlicerSettings _Settings; //切片机设置\nshort* _InputBuffer = 0;\nPUINT64 _OffsetBuffer = 0;\nfloat* _F0Buffer = 0, * _VolumeBuffer = 0, * _CurSpeakerBuffer = 0;\nINT32 _Error = 0;\nsize_t _SliceCount = 0;\nFloatVector _F0 = 0, _Volume = 0, _CurSpeaker = 0;\nDoubleDimsFloatVector _Speaker = 0;\nLibSvcHparams _ModelConfig; //模型配置\nLibSvcParams _Params; //推理参数\nSvcModel _Model = 0;\nVocoderModel _Vocoder = 0;\nbool _SpeakerMix = false; //启用角色混合\nsize_t _Process = 0;\n\nvoid func(){\n    LibSvcInit(); //在进行所有操作之前，必须调用该函数（该函数只能调用一次）\n\n    //为内部实现类申请内存\n    Int16Vector _InputAudio = LibSvcAllocateAudio();\n    Int16Vector _OutPutAudio = LibSvcAllocateAudio();\n    UInt64Vector _SliceOffset = LibSvcAllocateOffset();\n    SlicesType _Slices = LibSvcAllocateSliceData();\n    MelType _Mel = LibSvcAllocateMel();\n\n    InitLibSvcSlicerSettings(&_Settings);\n    InitLibSvcHparams(&_ModelConfig);\n    InitLibSvcParams(&_Params);\n\n    //设置输入缓冲区的大小\n    LibSvcSetAudioLength(\n        _InputAudio, \n        114514 //输入音频的长度\n    );\n\n    //获取输入缓冲区\n    _InputBuffer = LibSvcGetAudioData(\n        _InputAudio\n    );\n    \n    /*\n        此处自行实现：将你输入的音频（格式必须为PCM-SignedInt16-LE）写入_InputBuffer\n    */\n    \n    /*\n        此处自行修改_Settings（切片机设置）\n    */\n    \n    //对音频进行切片（获取切片的位置）\n    _Error = LibSvcSliceAudio(\n        _InputAudio, \n        &_Settings, \n        _SliceOffset\n    );\n\n    if (_Error)\n    {\n        BSTR ErrorMessage = LibSvcGetError(0);\n        LibSvcFreeString(ErrorMessage);\n    }\n\n    /*\n        此时切片位置已经保存在了_SliceOffset中，你可以通过调用LibSvcGetOffsetData来获取\n        其缓冲区修改其数值，也可以调用LibSvcSetOffsetLength来修改切片位置的个数\n    */\n    \n    //预处理数据（提取F0、音量）\n    _Error = LibSvcPreprocess(\n        _InputAudio, \n        _SliceOffset, \n        32000, //输入音频的采样率\n        512, //STFT HopSize\n        20.0, //静音阈值（0 - 32767）\n        L\"Dio\", //F0算法（\"Dio\" \"Harvest\" \"RMVPE\" \"FCPE\"）\n        _Slices\n    );\n\n    if (_Error)\n    {\n        BSTR ErrorMessage = LibSvcGetError(0);\n        LibSvcFreeString(ErrorMessage);\n    }\n\n    /*\n\t\t此时推理所必须的数据均已存储入了_Slices中_Slices为一个切片的容器\n    */\n\n    //此处获取了数据的个数（等同于切片的个数）\n    _SliceCount = LibSvcGetSliceCount(\n        _Slices\n    );\n\n    //此处获取了指定Index的单个切片\n    _SingleSlice = LibSvcGetSlice(\n        _Slices,\n        0 //你需要获取到的Slice的索引\n    );\n\n    /*\n        _SingleSlice为其中一个切片的数据（要注意如果_Slices的内存被释放，那么该_SingleSlice也会被释放）\n    */\n\n    //获取F0容器，为一个Float数组，该数组的长度为音频长度（频谱帧数），表示每一帧的F0频率\n    _F0 = LibSvcGetF0(_SingleSlice);\n\n    //获取F0Buffer\n    _F0Buffer = LibSvcGetFloatVectorData(_F0);\n\n    //获取Volume容器，为一个Float数组，该数组的长度为音频长度（频谱帧数），表示每一帧的音量（0-1）\n    _Volume = LibSvcGetVolume(_SingleSlice);\n\n    //获取VolumeBuffer\n    _VolumeBuffer = LibSvcGetFloatVectorData(_Volume);\n\n    /*\n        此处自己使用_F0Buffer与_VolumeBuffer修改切片中F0和Volume的数值\n    */\n\n    if(_SpeakerMix){\n        //此Scope中代码处理说话人混合数据（如果不需要角色混合那么就忽略该Scope）\n\n        //设置说话人的数量（每一个SingleSlice都必须单独设置）\n        LibSvcSetSpeakerMixDataSize(\n            _SingleSlice,\n            114 //你模型说话人的数量\n        );\n\n        //获取说话人混合信息，包含所有说话人，一共[114]个（上一个函数中设置的说话人数量），相当于float[SpeakerCount][SpecFrameCount]\n        _Speaker = LibSvcGetSpeaker(\n            _SingleSlice\n        );\n\n        //获取指定ID的说话人混合信息，为一个Float数组，该数组的长度为音频长度（频谱帧数），相当于float[SpecFrameCount]，该容器代表每一帧中该角色的\n        //音色占全体说话人音色的比例，该容器中的数据必须 ≥ 0，可以 > 1，大于一的数据将会自动归一化（在Speaker维度上归一化）。\n        _CurSpeaker = LibSvcGetDFloatVectorData(\n            _Speaker,\n            0 //说话人ID\n        );\n\n        //获取说话人混合信息的Buffer\n        _CurSpeakerBuffer = LibSvcGetFloatVectorData(\n            _CurSpeaker\n        );\n\n        /*\n\t\t\t接下来就可以用_CurSpeakerBuffer修改角色混合比例了\n\t\t*/\n    }\n\n    //加载模型，第一个参数为Type，0为Vits系SVC，1为Diffusion/ReflowSvc\n    _Model = LibSvcLoadModel(\n        0, //模型类型（0为Vits系SVC，1为Diffusion/ReflowSvc）\n        &_ModelConfig, //模型配置\n        callback, //进度条回调函数\n        CPU, //算子提供器\n        0, //GPU ID\n        8 //线程数\n    );\n\n    if (!_Model)\n    {\n    \tBSTR ErrorMessage = LibSvcGetError(0);\n        LibSvcFreeString(ErrorMessage);\n    }\n\n    //加载声码器模型\n    _Vocoder = LibSvcLoadVocoder(\n        nullptr //声码器模型路径\n    );\n\n    if (!_Vocoder)\n    {\n        BSTR ErrorMessage = LibSvcGetError(0);\n        LibSvcFreeString(ErrorMessage);\n    }\n\n    //一定要把_Vocoder模型的指针加载到_Params中\n    _Params._VocoderModel = _Vocoder;\n\n    //普通推理\n\t{\n    \tLibSvcInferSlice(\n\t\t\t_Model, //模型\n\t\t\t0, //模型类型\n\t\t\t_SingleSlice, //切片\n\t\t\t&_Params, //参数\n\t\t\t&_Process, //当前进度\n\t\t\t_OutPutAudio //输出\n\t\t);\n\t}\n\n    //声码器增强\n    {\n        _Params.VocoderHopSize = 512;\n        _Params.VocoderMelBins = 128;\n        _Params.VocoderSamplingRate = 44100;\n        _Params._VocoderModel = _Vocoder;\n        LibSvcInferSlice(\n            _Model, //模型\n            0, //模型类型\n            _SingleSlice, //切片\n            &_Params, //参数\n            &_Process, //当前进度\n            _OutPutAudio //输出\n        );\n    }\n\n    //浅扩散推理\n    {\n        _Params.VocoderHopSize = 512;\n        _Params.VocoderMelBins = 128;\n        _Params.VocoderSamplingRate = 44100;\n        _Params._VocoderModel = _Vocoder;\n        _Params._ShallowDiffusionModel = nullptr; //改为你的Diffusion模型\n        LibSvcInferSlice(\n            _Model, //模型\n            0, //模型类型\n            _SingleSlice, //切片\n            &_Params, //参数\n            &_Process, //当前进度\n            _OutPutAudio //输出\n        );\n    }\n\n    //释放模型，第一个参数为类型\n    LibSvcUnloadModel(\n        0,\n        _Model\n    );\n\n    //释放声码器\n    LibSvcUnloadVocoder(\n        _Vocoder\n    );\n\n    //释放其他资源\n    LibSvcReleaseAudio(_OutPutAudio);\n    LibSvcReleaseAudio(_InputAudio);\n    LibSvcReleaseMel(_Mel);\n    LibSvcReleaseOffset(_SliceOffset);\n    LibSvcReleaseSliceData(_Slices);\n}\n```"
  },
  {
    "path": "libsvc/Api/src/NativeApi.cpp",
    "content": "#include \"../header/NativeApi.h\"\n#include <deque>\n#include <string>\n#include \"../../Modules/header/Modules.hpp\"\n#include \"../../header/InferTools/Stft/stft.hpp\"\n#include \"../../Modules/header/InferTools/AvCodec/AvCodeResample.h\"\n\n#ifdef _MSC_VER\n#pragma warning(disable:4996)\n#endif\n\nconst wchar_t* LibSvcNullString = L\"\";\n\n#define LibSvcNullStrCheck(Str) ((Str)?(Str):(LibSvcNullString))\n\n#ifndef _WIN32\nBSTR SysAllocString(const wchar_t* _String)\n{\n\twchar_t* ret = new wchar_t[wcslen(_String)];\n\twcscpy(ret, _String);\n\treturn ret;\n}\n\nvoid SysFreeString(BSTR _String)\n{\n\tdelete[] _String;\n}\n#endif\n\nstd::deque<std::wstring> ErrorQueue;\nsize_t MaxErrorCount = 20;\n\nusing Config = MoeVoiceStudioCore::Hparams;\nusing VitsSvc = MoeVoiceStudioCore::VitsSvc;\nusing UnionSvc = MoeVSModuleManager::UnionSvcModel;\nusing ReflowSvc = MoeVoiceStudioCore::ReflowSvc;\nusing ClusterBase = MoeVoiceStudioCluster::MoeVoiceStudioBaseCluster;\nusing TensorExtractorBase = MoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor;\nusing ProgressCallback = MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback;\nusing ExecutionProvider = MoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders;\nusing Slices = MoeVSProjectSpace::MoeVoiceStudioSvcData;\nusing SingleSlice = MoeVSProjectSpace::MoeVoiceStudioSvcSlice;\nusing Params = MoeVSProjectSpace::MoeVSSvcParams;\n\nusing AudioContainer = std::vector<int16_t>;\nusing OffsetContainer = std::vector<size_t>;\nusing MelContainer = std::pair<std::vector<float>, int64_t>;\nusing DataContainer = Slices;\n\nstd::unordered_map<std::wstring, DlCodecStft::Mel*> MelOperators;\n\nvoid InitLibSvcHparams(LibSvcHparams* _Input)\n{\n\t_Input->TensorExtractor = nullptr;\n\t_Input->HubertPath = nullptr;\n\t_Input->DiffusionSvc = {\n\t\tnullptr,\n\t\tnullptr,\n\t\tnullptr,\n\t\tnullptr,\n\t\tnullptr,\n\t\tnullptr,\n\t\tnullptr\n\t};\n\t_Input->VitsSvc = {\n\t\tnullptr\n\t};\n\t_Input->ReflowSvc = {\n\t\tnullptr,\n\t\tnullptr,\n\t\tnullptr\n\t};\n\t_Input->Cluster = {\n\t\t10000,\n\t\tnullptr,\n\t\tnullptr\n\t};\n\n\t_Input->SamplingRate = 22050;\n\n\t_Input->HopSize = 320;\n\t_Input->HiddenUnitKDims = 256;\n\t_Input->SpeakerCount = 1;\n\t_Input->EnableCharaMix = false;\n\t_Input->EnableVolume = false;\n\t_Input->VaeMode = true;\n\n\t_Input->MelBins = 128;\n\t_Input->Pndms = 100;\n\t_Input->MaxStep = 1000;\n\t_Input->SpecMin = -12;\n\t_Input->SpecMax = 2;\n\t_Input->Scale = 1000.f;\n}\n\nvoid InitLibSvcParams(LibSvcParams* _Input)\n{\n\t//ͨ\n\t_Input->NoiseScale = 0.3f;\t\t\t\t\t\t\t//          0-10\n\t_Input->Seed = 52468;\t\t\t\t\t\t\t\t\t//\n\t_Input->SpeakerId = 0;\t\t\t\t\t\t\t\t//ɫID\n\t_Input->SrcSamplingRate = 48000;\t\t\t\t\t\t//Դ\n\t_Input->SpkCount = 2;\t\t\t\t\t\t\t\t\t//ģͽɫ\n\n\t//SVC\n\t_Input->IndexRate = 0.f;\t\t\t\t\t\t\t\t//               0-1\n\t_Input->ClusterRate = 0.f;\t\t\t\t\t\t\t//               0-1\n\t_Input->DDSPNoiseScale = 0.8f;\t\t\t\t\t\t//DDSP      0-10\n\t_Input->Keys = 0.f;\t\t\t\t\t\t\t\t\t//               -64-64\n\t_Input->MeanWindowLength = 2;\t\t\t\t\t\t//ֵ˲ڴС     1-20\n\t_Input->Pndm = 100;\t\t\t\t\t\t\t\t\t//Diffusionٱ    1-200\n\t_Input->Step = 1000;\t\t\t\t\t\t\t\t\t//Diffusionܲ      1-1000\n\t_Input->TBegin = 0.f;\n\t_Input->TEnd = 1.f;\n\t_Input->Sampler = nullptr;\t\t\t\t\t\t\t//Diffusion\n\t_Input->ReflowSampler = nullptr;\t\t\t\t\t\t//Reflow\n\t_Input->F0Method = nullptr;\t\t\t\t\t\t\t//F0ȡ㷨\n\t_Input->UseShallowDiffusionOrEnhancer = false;                  //ʹǳɢ\n\t_Input->_VocoderModel = nullptr;\n\t_Input->_ShallowDiffusionModel = nullptr;\n\t_Input->ShallowDiffusionUseSrcAudio = 1;\n\t_Input->VocoderHopSize = 512;\n\t_Input->VocoderMelBins = 128;\n\t_Input->VocoderSamplingRate = 44100;\n\t_Input->ShallowDiffuisonSpeaker = 0;\n}\n\nvoid InitLibSvcSlicerSettings(LibSvcSlicerSettings* _Input)\n{\n\t_Input->SamplingRate = 48000;\n\t_Input->Threshold = 30.;\n\t_Input->MinLength = 3.;\n\t_Input->WindowLength = 2048;\n\t_Input->HopSize = 512;\n}\n\nfloat* LibSvcGetFloatVectorData(void* _Obj)\n{\n\tauto& Obj = *(std::vector<float>*)_Obj;\n\treturn Obj.data();\n}\n\nsize_t LibSvcGetFloatVectorSize(void* _Obj)\n{\n\tauto& Obj = *(std::vector<float>*)_Obj;\n\treturn Obj.size();\n}\n\nvoid* LibSvcGetDFloatVectorData(void* _Obj, size_t _Index)\n{\n\tauto& Obj = *(std::vector<std::vector<float>>*)_Obj;\n\treturn Obj.data() + _Index;\n}\n\nsize_t LibSvcGetDFloatVectorSize(void* _Obj)\n{\n\tauto& Obj = *(std::vector<std::vector<float>>*)_Obj;\n\treturn Obj.size();\n}\n\nvoid* LibSvcAllocateAudio()\n{\n\treturn new AudioContainer;\n}\n\nvoid* LibSvcAllocateMel()\n{\n\treturn new MelContainer;\n}\n\nvoid* LibSvcAllocateOffset()\n{\n\treturn new OffsetContainer;\n}\n\nvoid* LibSvcAllocateSliceData()\n{\n\treturn new DataContainer;\n}\n\nvoid LibSvcReleaseAudio(void* _Obj)\n{\n\tdelete (AudioContainer*)_Obj;\n}\n\nvoid LibSvcReleaseMel(void* _Obj)\n{\n\tdelete (MelContainer*)_Obj;\n}\n\nvoid LibSvcReleaseOffset(void* _Obj)\n{\n\tdelete (OffsetContainer*)_Obj;\n}\n\nvoid LibSvcSetOffsetLength(void* _Obj, size_t _Size)\n{\n\tauto& Obj = *(OffsetContainer*)_Obj;\n\tObj.resize(_Size);\n}\n\nvoid LibSvcReleaseSliceData(void* _Obj)\n{\n\tdelete (DataContainer*)_Obj;\n}\n\nsize_t* LibSvcGetOffsetData(void* _Obj)\n{\n\tauto& Obj = *(OffsetContainer*)_Obj;\n\treturn Obj.data();\n}\n\nsize_t LibSvcGetOffsetSize(void* _Obj)\n{\n\tauto& Obj = *(OffsetContainer*)_Obj;\n\treturn Obj.size();\n}\n\nvoid LibSvcSetAudioLength(void* _Obj, size_t _Size)\n{\n\tauto& Obj = *(AudioContainer*)_Obj;\n\tObj.resize(_Size);\n}\n\nvoid LibSvcInsertAudio(void* _ObjA, void* _ObjB)\n{\n\tauto& ObjA = *(AudioContainer*)_ObjA;\n\tauto& ObjB = *(AudioContainer*)_ObjB;\n\tObjA.insert(ObjA.end(), ObjB.begin(), ObjB.end());\n}\n\nint16_t* LibSvcGetAudioData(void* _Obj)\n{\n\tauto& Obj = *(AudioContainer*)_Obj;\n\treturn Obj.data();\n}\n\nsize_t LibSvcGetAudioSize(void* _Obj)\n{\n\tauto& Obj = *(AudioContainer*)_Obj;\n\treturn Obj.size();\n}\n\nvoid* LibSvcGetMelData(void* _Obj)\n{\n\tauto& Obj = *(MelContainer*)_Obj;\n\treturn &Obj.first;\n}\n\nint64_t LibSvcGetMelSize(void* _Obj)\n{\n\tauto& Obj = *(MelContainer*)_Obj;\n\treturn Obj.second;\n}\n\nvoid LibSvcSetMaxErrorCount(size_t Count)\n{\n\tMaxErrorCount = Count;\n}\n\nBSTR LibSvcGetAudioPath(void* _Obj)\n{\n\tauto& Obj = *(DataContainer*)_Obj;\n\treturn SysAllocString(Obj.Path.c_str());\n}\n\nvoid* LibSvcGetSlice(void* _Obj, size_t _Index)\n{\n\tauto& Obj = *(DataContainer*)_Obj;\n\treturn Obj.Slices.data() + _Index;\n}\n\nsize_t LibSvcGetSliceCount(void* _Obj)\n{\n\tauto& Obj = *(DataContainer*)_Obj;\n\treturn Obj.Slices.size();\n}\n\nvoid* LibSvcGetAudio(void* _Obj)\n{\n\tauto& Obj = *(SingleSlice*)_Obj;\n\treturn &Obj.Audio;\n}\n\nvoid* LibSvcGetF0(void* _Obj)\n{\n\tauto& Obj = *(SingleSlice*)_Obj;\n\treturn &Obj.F0;\n}\n\nvoid* LibSvcGetVolume(void* _Obj)\n{\n\tauto& Obj = *(SingleSlice*)_Obj;\n\treturn &Obj.Volume;\n}\n\nvoid* LibSvcGetSpeaker(void* _Obj)\n{\n\tauto& Obj = *(SingleSlice*)_Obj;\n\treturn &Obj.Speaker;\n}\n\nINT32 LibSvcGetSrcLength(void* _Obj)\n{\n\tauto& Obj = *(SingleSlice*)_Obj;\n\treturn Obj.OrgLen;\n}\n\nINT32 LibSvcGetIsNotMute(void* _Obj)\n{\n\tauto& Obj = *(SingleSlice*)_Obj;\n\treturn Obj.IsNotMute;\n}\n\nvoid LibSvcSetSpeakerMixDataSize(void* _Obj, size_t _NSpeaker)\n{\n\tauto& Obj = *(SingleSlice*)_Obj;\n\tObj.Speaker.resize(_NSpeaker, std::vector(Obj.F0.size(), 0.f));\n}\n\nvoid LibSvcInit()\n{\n\tMoeVSModuleManager::MoeVoiceStudioCoreInitSetup();\n\tmoevsenv::UseSingleOrtApiEnv(true);\n}\n\nstd::mutex ErrorMx;\n\nvoid LibSvcFreeString(BSTR _String)\n{\n\tSysFreeString(_String);\n}\n\nBSTR LibSvcGetError(size_t Index)\n{\n\tconst auto& Ref = ErrorQueue.at(Index);\n\tauto Ret = SysAllocString(Ref.c_str());\n\tErrorQueue.erase(ErrorQueue.begin() + ptrdiff_t(Index));\n\tErrorMx.unlock();\n\treturn Ret;\n}\n\nvoid RaiseError(const std::wstring& _Msg)\n{\n\tlogger.log(_Msg);\n\tErrorMx.lock();\n\tErrorQueue.emplace_front(_Msg);\n\tif (ErrorQueue.size() > MaxErrorCount)\n\t\tErrorQueue.pop_back();\n}\n\nINT32 LibSvcSetGlobalEnv(UINT32 ThreadCount, UINT32 DeviceID, UINT32 Provider)\n{\n\ttry\n\t{\n\t\tmoevsenv::GetGlobalMoeVSEnv().Load(ThreadCount, DeviceID, Provider);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n\nint32_t LibSvcSliceAudio(\n\tconst void* _Audio, //std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n\tconst void* _Setting, //LibSvcSlicerSettings\n\tvoid* _Output //std::vector<size_t> By \"LibSvcAllocateOffset()\"\n)\n{\n\tif (!_Audio)\n\t{\n\t\tRaiseError(L\"Audio Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Output)\n\t{\n\t\tRaiseError(L\"_Output Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tconst LibSvcSlicerSettings* _SettingInp = (const LibSvcSlicerSettings*)_Setting;\n\tauto& Ret = *(std::vector<size_t>*)(_Output);\n\tInferTools::SlicerSettings SliSetting{\n\t\t_SettingInp->SamplingRate,\n\t\t_SettingInp->Threshold,\n\t\t_SettingInp->MinLength,\n\t\t_SettingInp->WindowLength,\n\t\t_SettingInp->HopSize\n\t};\n\t\n\ttry\n\t{\n\t\tRet = InferTools::SliceAudio(*(const AudioContainer*)(_Audio), SliSetting);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n\nint32_t LibSvcPreprocess(\n\tconst void* _Audio, //std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n\tconst void* _SlicePos, //std::vector<size_t> By \"LibSvcAllocateOffset()\"\n\tint32_t _SamplingRate,\n\tint32_t _HopSize,\n\tdouble _Threshold,\n\tconst wchar_t* _F0Method,\n\tvoid* _Output // Slices By \"LibSvcAllocateSliceData()\"\n)\n{\n\tInferTools::SlicerSettings _Setting{\n\t\t.Threshold = _Threshold\n\t};\n\n\tif (!_Audio)\n\t{\n\t\tRaiseError(L\"Audio Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_SlicePos)\n\t{\n\t\tRaiseError(L\"Slice Pos Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif(!_Output) \n\t{\n\t\tRaiseError(L\"_Output Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tSlices& Ret = *static_cast<Slices*>(_Output);\n\ttry\n\t{\n\t\tRet = MoeVoiceStudioCore::SingingVoiceConversion::GetAudioSlice(\n\t\t\t*(const AudioContainer*)(_Audio),\n\t\t\t*(const OffsetContainer*)(_SlicePos),\n\t\t\t_Setting\n\t\t);\n\t\tMoeVoiceStudioCore::SingingVoiceConversion::PreProcessAudio(Ret, _SamplingRate, _HopSize, _F0Method);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n\nINT32 LibSvcStft(\n\tconst void* _Audio,\n\tINT32 _SamplingRate,\n\tINT32 _Hopsize,\n\tINT32 _MelBins,\n\tvoid* _Output\n)\n{\n\tif (!_Audio)\n\t{\n\t\tRaiseError(L\"Audio Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Output)\n\t{\n\t\tRaiseError(L\"_Output Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (MelOperators.size() > 5)\n\t{\n\t\tdelete MelOperators.begin()->second;\n\t\tMelOperators.erase(MelOperators.begin());\n\t}\n\n\ttry\n\t{\n\t\tconst std::wstring _Name = L\"S\" +\n\t\t\tstd::to_wstring(_SamplingRate) +\n\t\t\tL\"H\" + std::to_wstring(_Hopsize) +\n\t\t\tL\"M\" + std::to_wstring(_MelBins);\n\t\tif (!MelOperators.contains(_Name))\n\t\t\tMelOperators[_Name] = new DlCodecStft::Mel(_Hopsize * 4, _Hopsize, _SamplingRate, _MelBins);\n\t\tauto _NormalizedAudio = InferTools::InterpResample(\n\t\t\t*(const AudioContainer*)_Audio,\n\t\t\t_SamplingRate,\n\t\t\t_SamplingRate,\n\t\t\t32768.\n\t\t);\n\t\t*(MelContainer*)(_Output) = MelOperators.at(_Name)->operator()(_NormalizedAudio);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nINT32 LibSvcInferSlice(\n\tvoid* _Model,\n\tUINT32 _T,\n\tconst void* _Slice,\n\tconst void* _InferParams,\n\tsize_t* _Process,\n\tvoid* _Output\n)\n{\n\tif (!_Model)\n\t{\n\t\tRaiseError(L\"_Model Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Slice)\n\t{\n\t\tRaiseError(L\"_Slice Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_InferParams)\n\t{\n\t\tRaiseError(L\"_InferParams Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Process)\n\t{\n\t\tRaiseError(L\"_Process Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Output)\n\t{\n\t\tRaiseError(L\"_Output Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tconst auto& InpParam = *(const LibSvcParams*)(_InferParams);\n\n\tif (!InpParam._VocoderModel && _T == 1)\n\t{\n\t\tRaiseError(L\"_VocoderModel Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tconst Params Param\n\t{\n\t\tInpParam.NoiseScale,\n\t\tInpParam.Seed,\n\t\tInpParam.SpeakerId,\n\t\tInpParam.SrcSamplingRate,\n\t\tInpParam.SpkCount,\n\t\tInpParam.IndexRate,\n\t\tInpParam.ClusterRate,\n\t\tInpParam.DDSPNoiseScale,\n\t\tInpParam.Keys,\n\t\tInpParam.MeanWindowLength,\n\t\tInpParam.Pndm,\n\t\tInpParam.Step,\n\t\tInpParam.TBegin,\n\t\tInpParam.TEnd,\n\t\tLibSvcNullStrCheck(InpParam.Sampler),\n\t\tLibSvcNullStrCheck(InpParam.ReflowSampler),\n\t\tLibSvcNullStrCheck(InpParam.F0Method),\n\t\t(bool)InpParam.UseShallowDiffusionOrEnhancer,\n\t\tInpParam._VocoderModel,\n\t\tInpParam._ShallowDiffusionModel,\n\t\t(bool)InpParam.ShallowDiffusionUseSrcAudio,\n\t\tInpParam.VocoderHopSize,\n\t\tInpParam.VocoderMelBins,\n\t\tInpParam.VocoderSamplingRate,\n\t\tInpParam.ShallowDiffuisonSpeaker\n\t};\n\n\ttry\n\t{\n\t\tif (_T == 0)\n\t\t\t*(AudioContainer*)(_Output) = ((VitsSvc*)(_Model))->SliceInference(*(const SingleSlice*)(_Slice), Param, *_Process);\n\t\telse if (_T == 1)\n\t\t\t*(AudioContainer*)(_Output) = ((UnionSvc*)(_Model))->SliceInference(*(const SingleSlice*)(_Slice), Param, *_Process);\n\t\telse\n\t\t{\n\t\t\tRaiseError(L\"UnSupported Model Type!\");\n\t\t\treturn 1;\n\t\t}\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nINT32 LibSvcInferPCMData(\n\tSvcModel _Model,\t\t\t\t\t\t\t//SingingVoiceConversion Model\n\tUINT32 _T,\n\tCInt16Vector _PCMData,\n\tconst void* _InferParams,\t\t\t\t\t//Ptr Of LibSvcParams\n\tInt16Vector _Output\t\t\t\t\t\t\t//std::vector<int16_t> By \"LibSvcAllocateAudio()\"\n)\n{\n\tif (!_Model)\n\t{\n\t\tRaiseError(L\"_Model Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_PCMData)\n\t{\n\t\tRaiseError(L\"_PCMData Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_InferParams)\n\t{\n\t\tRaiseError(L\"_InferParams Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Output)\n\t{\n\t\tRaiseError(L\"_Output Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tconst auto& InpParam = *(const LibSvcParams*)(_InferParams);\n\n\tif (!InpParam._VocoderModel && _T == 1)\n\t{\n\t\tRaiseError(L\"_VocoderModel Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tconst Params Param\n\t{\n\t\tInpParam.NoiseScale,\n\t\tInpParam.Seed,\n\t\tInpParam.SpeakerId,\n\t\tInpParam.SrcSamplingRate,\n\t\tInpParam.SpkCount,\n\t\tInpParam.IndexRate,\n\t\tInpParam.ClusterRate,\n\t\tInpParam.DDSPNoiseScale,\n\t\tInpParam.Keys,\n\t\tInpParam.MeanWindowLength,\n\t\tInpParam.Pndm,\n\t\tInpParam.Step,\n\t\tInpParam.TBegin,\n\t\tInpParam.TEnd,\n\t\tLibSvcNullStrCheck(InpParam.Sampler),\n\t\tLibSvcNullStrCheck(InpParam.ReflowSampler),\n\t\tLibSvcNullStrCheck(InpParam.F0Method),\n\t\t(bool)InpParam.UseShallowDiffusionOrEnhancer,\n\t\tInpParam._VocoderModel,\n\t\tInpParam._ShallowDiffusionModel,\n\t\t(bool)InpParam.ShallowDiffusionUseSrcAudio,\n\t\tInpParam.VocoderHopSize,\n\t\tInpParam.VocoderMelBins,\n\t\tInpParam.VocoderSamplingRate,\n\t\tInpParam.ShallowDiffuisonSpeaker\n\t};\n\n\tauto& InputData = *(const AudioContainer*)(_PCMData);\n\n\ttry\n\t{\n\t\tif (_T == 0)\n\t\t\t*(AudioContainer*)(_Output) = ((VitsSvc*)(_Model))->InferPCMData(InputData, (long)InputData.size(), Param);\n\t\telse if (_T == 1)\n\t\t\t*(AudioContainer*)(_Output) = ((UnionSvc*)(_Model))->InferPCMData(InputData, (long)InputData.size(), Param);\n\t\telse\n\t\t{\n\t\t\tRaiseError(L\"UnSupported Model Type!\");\n\t\t\treturn 1;\n\t\t}\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nINT32 LibSvcShallowDiffusionInference(\n\tvoid* _Model,\n\tconst void* _16KAudioHubert,\n\tvoid* _Mel,\n\tconst void* _SrcF0,\n\tconst void* _SrcVolume,\n\tconst void* _SrcSpeakerMap,\n\tINT64 _SrcSize,\n\tconst void* _InferParams,\n\tsize_t* _Process,\n\tvoid* _Output\n)\n{\n\tif (!_Model)\n\t{\n\t\tRaiseError(L\"_Model Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_16KAudioHubert)\n\t{\n\t\tRaiseError(L\"_16KAudioHubert Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Mel)\n\t{\n\t\tRaiseError(L\"_Mel Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_SrcF0)\n\t{\n\t\tRaiseError(L\"_SrcF0 Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_SrcVolume)\n\t{\n\t\tRaiseError(L\"_SrcVolume Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_SrcSpeakerMap)\n\t{\n\t\tRaiseError(L\"_SrcSpeakerMap Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_InferParams)\n\t{\n\t\tRaiseError(L\"_InferParams Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Process)\n\t{\n\t\tRaiseError(L\"_Process Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Output)\n\t{\n\t\tRaiseError(L\"_Output Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tconst auto& InpParam = *(const LibSvcParams*)(_InferParams);\n\n\tif(!InpParam._VocoderModel)\n\t{\n\t\tRaiseError(L\"_VocoderModel Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tconst Params Param\n\t{\n\t\tInpParam.NoiseScale,\n\t\tInpParam.Seed,\n\t\tInpParam.SpeakerId,\n\t\tInpParam.SrcSamplingRate,\n\t\tInpParam.SpkCount,\n\t\tInpParam.IndexRate,\n\t\tInpParam.ClusterRate,\n\t\tInpParam.DDSPNoiseScale,\n\t\tInpParam.Keys,\n\t\tInpParam.MeanWindowLength,\n\t\tInpParam.Pndm,\n\t\tInpParam.Step,\n\t\tInpParam.TBegin,\n\t\tInpParam.TEnd,\n\t\tLibSvcNullStrCheck(InpParam.Sampler),\n\t\tLibSvcNullStrCheck(InpParam.ReflowSampler),\n\t\tLibSvcNullStrCheck(InpParam.F0Method),\n\t\t(bool)InpParam.UseShallowDiffusionOrEnhancer,\n\t\tInpParam._VocoderModel,\n\t\tInpParam._ShallowDiffusionModel,\n\t\t(bool)InpParam.ShallowDiffusionUseSrcAudio,\n\t\tInpParam.VocoderHopSize,\n\t\tInpParam.VocoderMelBins,\n\t\tInpParam.VocoderSamplingRate,\n\t\tInpParam.ShallowDiffuisonSpeaker\n\t};\n\n\tauto _NormalizedAudio = InferTools::InterpResample(\n\t\t*(const AudioContainer*)_16KAudioHubert,\n\t\t16000,\n\t\t16000,\n\t\t32768.f\n\t);\n\n\ttry\n\t{\n\t\t*(AudioContainer*)(_Output) = ((UnionSvc*)(_Model))->ShallowDiffusionInference(\n\t\t\t_NormalizedAudio,\n\t\t\tParam,\n\t\t\t*(MelContainer*)(_Mel),\n\t\t\t*(const std::vector<float>*)(_SrcF0),\n\t\t\t*(const std::vector<float>*)(_SrcVolume),\n\t\t\t*(const std::vector<std::vector<float>>*)(_SrcSpeakerMap),\n\t\t\t*_Process,\n\t\t\t_SrcSize\n\t\t);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nINT32 LibSvcVocoderEnhance(\n\tvoid* _Model,\n\tvoid* _Mel,\n\tconst void* _F0,\n\tINT32 _VocoderMelBins,\n\tvoid* _Output\n)\n{\n\tif (!_Model)\n\t{\n\t\tRaiseError(L\"_Model Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_F0)\n\t{\n\t\tRaiseError(L\"_16KAudioHubert Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Mel)\n\t{\n\t\tRaiseError(L\"_Mel Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tif (!_Output)\n\t{\n\t\tRaiseError(L\"_Output Could Not Be Null!\");\n\t\treturn 1;\n\t}\n\n\tauto Rf0 = *(const std::vector<float>*)(_F0);\n\tauto& MelTemp = *(MelContainer*)(_Mel);\n\tif (Rf0.size() != (size_t)MelTemp.second)\n\t\tRf0 = InferTools::InterpFunc(Rf0, (long)Rf0.size(), (long)MelTemp.second);\n\ttry\n\t{\n\t\t*(AudioContainer*)(_Output) = MoeVoiceStudioCore::VocoderInfer(\n\t\t   MelTemp.first,\n\t\t   Rf0,\n\t\t   _VocoderMelBins,\n\t\t   MelTemp.second,\n\t\t   moevsenv::GetGlobalMoeVSEnv().GetMemoryInfo(),\n\t\t   _Model\n\t   );\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nvoid* LibSvcLoadModel(\n\tUINT32 _T,\n\tconst void* _Config,\n\tProgCallback _ProgressCallback,\n\tUINT32 _ExecutionProvider,\n\tUINT32 _DeviceID,\n\tUINT32 _ThreadCount\n)\n{\n\tif (!_Config)\n\t{\n\t\tRaiseError(L\"_Model Could Not Be Null!\");\n\t\treturn nullptr;\n\t}\n\n\tauto& Config = *(const LibSvcHparams*)(_Config);\n\n\t//printf(\"%lld\", (long long)(Config.DiffusionSvc.Encoder));\n\n\tMoeVoiceStudioCore::Hparams ModelConfig{\n\t\tLibSvcNullStrCheck(Config.TensorExtractor),\n\t\tLibSvcNullStrCheck(Config.HubertPath),\n\t\t{\n\t\t\tLibSvcNullStrCheck(Config.DiffusionSvc.Encoder),\n\t\t\tLibSvcNullStrCheck(Config.DiffusionSvc.Denoise),\n\t\t\tLibSvcNullStrCheck(Config.DiffusionSvc.Pred),\n\t\t\tLibSvcNullStrCheck(Config.DiffusionSvc.After),\n\t\t\tLibSvcNullStrCheck(Config.DiffusionSvc.Alpha),\n\t\t\tLibSvcNullStrCheck(Config.DiffusionSvc.Naive),\n\t\t\tLibSvcNullStrCheck(Config.DiffusionSvc.DiffSvc)\n\t\t},\n\t\t{\n\t\t\tLibSvcNullStrCheck(Config.VitsSvc.VitsSvc)\n\t\t},\n\t\t{\n\t\t\tLibSvcNullStrCheck(Config.ReflowSvc.Encoder),\n\t\t\tLibSvcNullStrCheck(Config.ReflowSvc.VelocityFn),\n\t\t\tLibSvcNullStrCheck(Config.ReflowSvc.After)\n\t\t},\n\t\t{\n\t\t\tConfig.Cluster.ClusterCenterSize,\n\t\t\tLibSvcNullStrCheck(Config.Cluster.Path),\n\t\t\tLibSvcNullStrCheck(Config.Cluster.Type)\n\t\t},\n\t\tConfig.SamplingRate,\n\t\tConfig.HopSize,\n\t\tConfig.HiddenUnitKDims,\n\t\tConfig.SpeakerCount,\n\t\t(bool)Config.EnableCharaMix,\n\t\t(bool)Config.EnableVolume,\n\t\t(bool)Config.VaeMode,\n\t\tConfig.MelBins,\n\t\tConfig.Pndms,\n\t\tConfig.MaxStep,\n\t\tConfig.SpecMin,\n\t\tConfig.SpecMax,\n\t\tConfig.Scale\n\t};\n\t\n\ttry\n\t{\n\t\tif(_T == 0)\n\t\t{\n\t\t\treturn new VitsSvc(ModelConfig, _ProgressCallback, static_cast<MoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders>(_ExecutionProvider), _DeviceID, _ThreadCount);\n\t\t}\n\t\treturn new UnionSvc(ModelConfig, _ProgressCallback, int(_ExecutionProvider), int(_DeviceID), int(_ThreadCount));\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn nullptr;\n\t}\n}\n\nINT32 LibSvcUnloadModel(\n\tUINT32 _T,\n\tvoid* _Model\n)\n{\n\ttry\n\t{\n\t\tif (_T == 0)\n\t\t\tdelete (VitsSvc*)_Model;\n\t\telse\n\t\t\tdelete (UnionSvc*)_Model;\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nvoid* LibSvcLoadVocoder(LPWSTR VocoderPath)\n{\n\tif (!VocoderPath)\n\t{\n\t\tRaiseError(L\"VocoderPath Could Not Be Null\");\n\t\treturn nullptr;\n\t}\n\t\n\tconst auto& Env = moevsenv::GetGlobalMoeVSEnv();\n\ttry\n\t{\n\t\treturn new Ort::Session(*Env.GetEnv(), VocoderPath, *Env.GetSessionOptions());\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn nullptr;\n\t}\n}\n\nINT32 LibSvcUnloadVocoder(void* _Model)\n{\n\ttry\n\t{\n\t\tdelete (Ort::Session*)_Model;\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nINT32 LibSvcReadAudio(LPWSTR _AudioPath, INT32 _SamplingRate, void* _Output)\n{\n\ttry\n\t{\n\t\t*(std::vector<int16_t>*)(_Output) = AudioPreprocess().codec(_AudioPath, _SamplingRate);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nvoid LibSvcEnableFileLogger(bool _Cond)\n{\n\tMoeSSLogger::GetLogger().enable(_Cond);\n}\n\nvoid LibSvcWriteAudioFile(void* _PCMData, LPWSTR _OutputPath, INT32 _SamplingRate)\n{\n\tInferTools::Wav::WritePCMData(_SamplingRate, 1, *(std::vector<int16_t>*)(_PCMData), _OutputPath);\n}"
  },
  {
    "path": "libsvc/Api/src/libsvc.cpp",
    "content": "#include \"../header/libsvc.h\"\r\n#include <queue>\r\n#include \"../../header/InferTools/Stft/stft.hpp\"\r\n#include <random>\r\nnamespace libsvccore\r\n{\r\n\tstd::unordered_map<std::wstring, DiffusionSvc*> DiffusionSvcSessions;\r\n\tstd::unordered_map<std::wstring, VitsSvc*> VitsSvcSessions;\r\n\tstd::unordered_map<std::wstring, ReflowSvc*> ReflowSvcSessions;\r\n\tstd::deque<std::wstring> ErrorMessage;\r\n\tstd::wstring NoneError;\r\n\tsize_t MaxErrorCount = 10;\r\n\tstd::unordered_map<std::wstring, DlCodecStft::Mel*> MelOperators;\r\n\tOrt::MemoryInfo* vocoder_memory_info = nullptr;\r\n\tstd::any NoneType(false);\r\n\r\n\tvoid RaiseError(const std::wstring& _Msg)\r\n\t{\r\n\t\tErrorMessage.emplace_back(_Msg);\r\n\t\tlogger.log(_Msg);\r\n\t\tif (ErrorMessage.size() > MaxErrorCount)\r\n\t\t\tErrorMessage.pop_front();\r\n\t}\r\n\r\n\tvoid UnloadVitsSvcSession(const std::wstring& _Name)\r\n\t{\r\n\t\tconst auto ModelPair = VitsSvcSessions.find(_Name);\r\n\t\tif (ModelPair != VitsSvcSessions.end())\r\n\t\t{\r\n\t\t\tdelete ModelPair->second;\r\n\t\t\tVitsSvcSessions.erase(ModelPair);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid UnloadDiffusionSvcSession(const std::wstring& _Name)\r\n\t{\r\n\t\tconst auto ModelPair = DiffusionSvcSessions.find(_Name);\r\n\t\tif (ModelPair != DiffusionSvcSessions.end())\r\n\t\t{\r\n\t\t\tdelete ModelPair->second;\r\n\t\t\tDiffusionSvcSessions.erase(ModelPair);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid UnloadReflowSvcSession(const std::wstring& _Name)\r\n\t{\r\n\t\tconst auto ModelPair = ReflowSvcSessions.find(_Name);\r\n\t\tif (ModelPair != ReflowSvcSessions.end())\r\n\t\t{\r\n\t\t\tdelete ModelPair->second;\r\n\t\t\tReflowSvcSessions.erase(ModelPair);\r\n\t\t}\r\n\t}\r\n\r\n\tint LoadDiffusionSvcSession(const Config& _Config, const std::wstring& _Name, const ProgressCallback& _ProgressCallback, ExecutionProvider ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_)\r\n\t{\r\n\t\tconst auto ModelPair = DiffusionSvcSessions.find(_Name);\r\n\t\tif(ModelPair != DiffusionSvcSessions.end())\r\n\t\t\tdelete ModelPair->second;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tDiffusionSvcSessions[_Name] = new MoeVoiceStudioCore::DiffusionSvc(\r\n\t\t\t\t_Config, _ProgressCallback,\r\n\t\t\t\tExecutionProvider_,\r\n\t\t\t\tDeviceID_, ThreadCount_\r\n\t\t\t);\r\n\t\t}\r\n\t\tcatch (std::exception& e)\r\n\t\t{\r\n\t\t\tRaiseError(to_wide_string(e.what()));\r\n\t\t\tUnloadDiffusionSvcSession(_Name);\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tint LoadReflowSvcSession(const Config& _Config, const std::wstring& _Name, const ProgressCallback& _ProgressCallback, ExecutionProvider ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_)\r\n\t{\r\n\t\tconst auto ModelPair = ReflowSvcSessions.find(_Name);\r\n\t\tif (ModelPair != ReflowSvcSessions.end())\r\n\t\t\tdelete ModelPair->second;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tReflowSvcSessions[_Name] = new MoeVoiceStudioCore::ReflowSvc(\r\n\t\t\t\t_Config, _ProgressCallback,\r\n\t\t\t\tExecutionProvider_,\r\n\t\t\t\tDeviceID_, ThreadCount_\r\n\t\t\t);\r\n\t\t}\r\n\t\tcatch (std::exception& e)\r\n\t\t{\r\n\t\t\tRaiseError(to_wide_string(e.what()));\r\n\t\t\tUnloadDiffusionSvcSession(_Name);\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tint LoadVitsSvcSession(const Config& _Config, const std::wstring& _Name, const ProgressCallback& _ProgressCallback, ExecutionProvider ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_)\r\n\t{\r\n\t\tconst auto ModelPair = VitsSvcSessions.find(_Name);\r\n\t\tif (ModelPair != VitsSvcSessions.end())\r\n\t\t\tdelete ModelPair->second;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tVitsSvcSessions[_Name] = new MoeVoiceStudioCore::VitsSvc(\r\n\t\t\t\t_Config, _ProgressCallback,\r\n\t\t\t\tExecutionProvider_,\r\n\t\t\t\tDeviceID_, ThreadCount_\r\n\t\t\t);\r\n\t\t}\r\n\t\tcatch (std::exception& e)\r\n\t\t{\r\n\t\t\tRaiseError(to_wide_string(e.what()));\r\n\t\t\tUnloadVitsSvcSession(_Name);\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tvoid SetMaxErrorCount(size_t Count)\r\n\t{\r\n\t\tMaxErrorCount = Count;\r\n\t}\r\n\r\n\tstd::wstring& GetLastError(size_t Index)\r\n\t{\r\n\t\tif (Index < MaxErrorCount)\r\n\t\t\treturn ErrorMessage.at(MaxErrorCount - Index - 1);\r\n\t\treturn NoneError;\r\n\t}\r\n\r\n\tint LoadModel(ModelType _T, const Config& _Config, const std::wstring& _Name, const ProgressCallback& _ProgressCallback, ExecutionProvider ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_)\r\n\t{\r\n\t\tif (_T == ModelType::Vits)\r\n\t\t\treturn LoadVitsSvcSession(_Config, _Name, _ProgressCallback, ExecutionProvider_, DeviceID_, ThreadCount_);\r\n\t\tif (_T == ModelType::Diffusion)\r\n\t\t\treturn LoadDiffusionSvcSession(_Config, _Name, _ProgressCallback, ExecutionProvider_, DeviceID_, ThreadCount_);\r\n\t\treturn LoadReflowSvcSession(_Config, _Name, _ProgressCallback, ExecutionProvider_, DeviceID_, ThreadCount_);\r\n\t}\r\n\r\n\tvoid UnloadModel(ModelType _T, const std::wstring& _Name)\r\n\t{\r\n\t\tif (_T == ModelType::Diffusion)\r\n\t\t\tUnloadDiffusionSvcSession(_Name);\r\n\t\telse if (_T == ModelType::Vits)\r\n\t\t\tUnloadVitsSvcSession(_Name);\r\n\t\telse\r\n\t\t\tUnloadReflowSvcSession(_Name);\r\n\t}\r\n\r\n\tstd::mt19937 gen(114514);\r\n\tstd::uniform_int_distribution<size_t> normal;\r\n\tstd::unordered_map<size_t, std::any> LibSvcRtnData;\r\n\r\n\tstd::mutex RtnDataMx;\r\n\tvoid EmplaceRtnData(size_t& _Id, std::any&& _Val)\r\n\t{\r\n\t\tstd::lock_guard lg(RtnDataMx);\r\n\t\tfor (_Id = normal(gen); LibSvcRtnData.find(_Id) != LibSvcRtnData.end(); ) _Id = normal(gen);\r\n\t\tLibSvcRtnData[_Id] = std::move(_Val);\r\n\t}\r\n\r\n\tvoid SliceAudio(size_t& _Id, const std::vector<int16_t>& _Audio, const InferTools::SlicerSettings& _Setting)\r\n\t{\r\n\t\tEmplaceRtnData(_Id, InferTools::SliceAudio(_Audio, _Setting));\r\n\t}\r\n\r\n\tvoid Preprocess(size_t& _Id, const std::vector<int16_t>& _Audio, const std::vector<size_t>& _SlicePos, const InferTools::SlicerSettings& _Setting, int _SamplingRate, int _HopSize, const std::wstring& _F0Method)\r\n\t{\r\n\t\tauto Rtn = MoeVoiceStudioCore::SingingVoiceConversion::GetAudioSlice(_Audio, _SlicePos, _Setting);\r\n\t\tMoeVoiceStudioCore::SingingVoiceConversion::PreProcessAudio(Rtn, _SamplingRate, _HopSize, _F0Method);\r\n\t\tEmplaceRtnData(_Id, std::move(Rtn));\r\n\t}\r\n\r\n\tint InferSlice(size_t& _Id, ModelType _T, const std::wstring& _Name, const SingleSlice& _Slice, const Params& _InferParams, size_t& _Process)\r\n\t{\r\n\t\tconst MoeVoiceStudioCore::SingingVoiceConversion* _Model = nullptr;\r\n\t\tif (_T == ModelType::Vits && VitsSvcSessions.find(_Name) != VitsSvcSessions.end())\r\n\t\t\t_Model = dynamic_cast<MoeVoiceStudioCore::SingingVoiceConversion*>(VitsSvcSessions.at(_Name));\r\n\t\telse if (_T == ModelType::Diffusion && DiffusionSvcSessions.find(_Name) != DiffusionSvcSessions.end())\r\n\t\t{\r\n\t\t\t_Model = dynamic_cast<MoeVoiceStudioCore::SingingVoiceConversion*>(DiffusionSvcSessions.at(_Name));\r\n\t\t\tif(!MoeVSModuleManager::VocoderEnabled())\r\n\t\t\t{\r\n\t\t\t\tRaiseError(L\"Vocoder Not Exists\");\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(_T == ModelType::Reflow && ReflowSvcSessions.find(_Name) != ReflowSvcSessions.end())\r\n\t\t{\r\n\t\t\t_Model = dynamic_cast<MoeVoiceStudioCore::SingingVoiceConversion*>(ReflowSvcSessions.at(_Name));\r\n\t\t\tif (!MoeVSModuleManager::VocoderEnabled())\r\n\t\t\t{\r\n\t\t\t\tRaiseError(L\"Vocoder Not Exists\");\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(!_Model)\r\n\t\t{\r\n\t\t\tRaiseError(L\"Model Not Exists\");\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tstd::vector<int16_t> Rtn;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tRtn = _Model->SliceInference(_Slice, _InferParams, _Process);\r\n\t\t}\r\n\t\tcatch (std::exception& e)\r\n\t\t{\r\n\t\t\tRaiseError(to_wide_string(e.what()));\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tEmplaceRtnData(_Id, std::move(Rtn));\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tint ShallowDiffusionInference(size_t& _Id, const std::wstring& _Name, const std::vector<float>& _16KAudioHubert, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, const std::pair<std::vector<float>, int64_t>& _Mel, const std::vector<float>& _SrcF0, const std::vector<float>& _SrcVolume, const std::vector<std::vector<float>>& _SrcSpeakerMap, size_t& Process, int64_t SrcSize)\r\n\t{\r\n\t\tif (!MoeVSModuleManager::VocoderEnabled())\r\n\t\t{\r\n\t\t\tRaiseError(L\"Vocoder Not Exists\");\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif(DiffusionSvcSessions.find(_Name) != DiffusionSvcSessions.end())\r\n\t\t{\r\n\t\t\tstd::vector<int16_t> Rtn;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tauto _Hubert = _16KAudioHubert;\r\n\t\t\t\tauto _MelCopy = _Mel;\r\n\t\t\t\tRtn = DiffusionSvcSessions.at(_Name)->ShallowDiffusionInference(_Hubert, _InferParams, _MelCopy, _SrcF0, _SrcVolume, _SrcSpeakerMap, Process, SrcSize);\r\n\t\t\t}\r\n\t\t\tcatch (std::exception& e)\r\n\t\t\t{\r\n\t\t\t\tRaiseError(to_wide_string(e.what()));\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\tEmplaceRtnData(_Id, std::move(Rtn));\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tRaiseError(L\"Model Not Exists\");\r\n\t\treturn 1;\r\n\t}\r\n\r\n\tint Stft(size_t& _Id, const std::vector<double>& _NormalizedAudio, int _SamplingRate, int _Hopsize, int _MelBins)\r\n\t{\r\n\t\tconst std::wstring _Name = L\"S\" + std::to_wstring(_SamplingRate) + L\"H\" + std::to_wstring(_Hopsize) + L\"M\" + std::to_wstring(_MelBins);\r\n\t\tif (MelOperators.find(_Name) == MelOperators.end())\r\n\t\t\tMelOperators[_Name] = new DlCodecStft::Mel(_Hopsize * 4, _Hopsize, _SamplingRate, _MelBins);\r\n\t\tEmplaceRtnData(_Id, MelOperators.at(_Name)->operator()(_NormalizedAudio));\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tint VocoderEnhance(size_t& _Id, const std::vector<float>& Mel, const std::vector<float>& F0, size_t MelSize, long VocoderMelBins)\r\n\t{\r\n\t\tif(!MoeVoiceStudioCore::VocoderEnabled())\r\n\t\t{\r\n\t\t\tRaiseError(L\"Vocoder Not Exists\");\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tauto Rf0 = F0;\r\n\t\tauto MelTemp = Mel;\r\n\t\tif (Rf0.size() != MelSize)\r\n\t\t\tRf0 = InferTools::InterpFunc(Rf0, (long)Rf0.size(), (long)MelSize);\r\n\t\tEmplaceRtnData(_Id, MoeVoiceStudioCore::VocoderInfer(\r\n\t\t\tMelTemp,\r\n\t\t\tRf0,\r\n\t\t\tVocoderMelBins,\r\n\t\t\t(int64_t)MelSize,\r\n\t\t\tvocoder_memory_info\r\n\t\t));\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tvoid EmptyStftCache()\r\n\t{\r\n\t\tfor (const auto& i : MelOperators)\r\n\t\t\tdelete i.second;\r\n\t\tMelOperators.clear();\r\n\t}\r\n\r\n\tvoid LoadVocoder(const std::wstring& VocoderPath)\r\n\t{\r\n\t\tMoeVoiceStudioCore::LoadVocoderModel(VocoderPath);\r\n\t}\r\n\r\n\tvoid Init()\r\n\t{\r\n\t\tMoeVSModuleManager::MoeVoiceStudioCoreInitSetup();\r\n\t\tvocoder_memory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\r\n\t\tmoevsenv::UseSingleOrtApiEnv(true);\r\n\t}\r\n\r\n\tvoid SetGlobalEnv(unsigned ThreadCount, unsigned DeviceID, unsigned Provider)\r\n\t{\r\n\t\tmoevsenv::GetGlobalMoeVSEnv().Load(ThreadCount, DeviceID, Provider);\r\n\t}\r\n\r\n\tstd::any& GetData(size_t _Id)\r\n\t{\r\n\t\tif (LibSvcRtnData.find(_Id) != LibSvcRtnData.end())\r\n\t\t\treturn LibSvcRtnData.at(_Id);\r\n\t\treturn NoneType;\r\n\t}\r\n\r\n\tvoid PopData(size_t _Id)\r\n\t{\r\n\t\tstd::lock_guard lg(RtnDataMx);\r\n\t\tLibSvcRtnData.erase(_Id);\r\n\t}\r\n\r\n}"
  },
  {
    "path": "libsvc/Modules/Lib/MJson/MJson.cpp",
    "content": "#include \"MJson.h\"\r\n\r\nclass FileGuard\r\n{\r\npublic:\r\n\tFileGuard() = delete;\r\n\t~FileGuard()\r\n\t{\r\n\t\tif (_fp) fclose(_fp);\r\n\t\t_fp = nullptr;\r\n\t}\r\n\tFileGuard(const char* _path)\r\n\t{\r\n\t\tif (_fp) fclose(_fp);\r\n\t\t_wfopen_s(&_fp, to_wide_string(_path).c_str(), L\"rb\");\r\n\t}\r\n\toperator FILE* () const\r\n\t{\r\n\t\treturn _fp;\r\n\t}\r\nprivate:\r\n\tFILE* _fp = nullptr;\r\n\tstatic std::wstring to_wide_string(const std::string& input)\r\n\t{\r\n\t\tstd::vector<wchar_t> WideString(input.length() * 2);\r\n\t\tMultiByteToWideChar(\r\n\t\t\tCP_UTF8,\r\n\t\t\t0,\r\n\t\t\tinput.c_str(),\r\n\t\t\tint(input.length()),\r\n\t\t\tWideString.data(),\r\n\t\t\tint(WideString.size())\r\n\t\t);\r\n\t\treturn WideString.data();\r\n\t}\r\n};\r\n\r\nMJson::MJson(const char* _path)\r\n{\r\n\tconst auto file = FileGuard(_path);\r\n\t_document = yyjson_read_file(_path, YYJSON_READ_NOFLAG, nullptr, nullptr);\r\n\tif (!_document)\r\n\t\tthrow std::exception(\"Json Parse Error !\");\r\n\troot = yyjson_doc_get_root(_document);\r\n}\r\n\r\nMJson::MJson(const std::string& _data, bool _read_from_string)\r\n{\r\n\tif (_read_from_string)\r\n\t\t_document = yyjson_read(_data.c_str(), _data.length(), YYJSON_READ_NOFLAG);\r\n\telse\r\n\t{\r\n\t\tconst auto file = FileGuard(_data.c_str());\r\n\t\t_document = yyjson_read_fp(file, YYJSON_READ_NOFLAG, nullptr, nullptr);\r\n\t}\r\n\tif (!_document)\r\n\t\tthrow std::exception(\"Json Parse Error !\");\r\n\troot = yyjson_doc_get_root(_document);\r\n}\r\n"
  },
  {
    "path": "libsvc/Modules/Lib/MJson/MJson.h",
    "content": "#pragma once\r\n#include \"../../framework.h\"\r\n#include <string>\r\n#include \"yyjson.h\"\r\n#include <vector>\r\n#ifdef _WIN32\r\n#include <Windows.h>\r\n#else\r\n#error\r\n#endif\r\n\r\nclass MJsonValue\r\n{\r\npublic:\r\n\tMJsonValue() = default;\r\n\tMJsonValue(yyjson_val* _val) : _Ptr(_val) {}\r\n\t~MJsonValue() = default;\r\n\tMJsonValue(MJsonValue&& _val) noexcept\r\n\t{\r\n\t\t_Ptr = _val._Ptr;\r\n\t\t_val._Ptr = nullptr;\r\n\t}\r\n\tMJsonValue(const MJsonValue& _val) = delete;\r\n\tMJsonValue& operator=(MJsonValue&& _val) noexcept\r\n\t{\r\n\t\t_Ptr = _val._Ptr;\r\n\t\t_val._Ptr = nullptr;\r\n\t\treturn *this;\r\n\t}\r\n\tMJsonValue& operator=(const MJsonValue& _val) = delete;\r\n\t[[nodiscard]] bool IsNull() const\r\n\t{\r\n\t\treturn yyjson_is_null(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool IsBoolean() const\r\n\t{\r\n\t\treturn yyjson_is_bool(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool IsBool() const\r\n\t{\r\n\t\treturn yyjson_is_bool(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool IsInt() const\r\n\t{\r\n\t\treturn yyjson_is_num(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool IsFloat() const\r\n\t{\r\n\t\treturn yyjson_is_num(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool IsInt64() const\r\n\t{\r\n\t\treturn yyjson_is_num(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool IsDouble() const\r\n\t{\r\n\t\treturn yyjson_is_num(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool IsString() const\r\n\t{\r\n\t\treturn yyjson_is_str(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool IsArray() const\r\n\t{\r\n\t\treturn yyjson_is_arr(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool GetBool() const\r\n\t{\r\n\t\treturn yyjson_get_bool(_Ptr);\r\n\t}\r\n\t[[nodiscard]] bool GetBoolean() const\r\n\t{\r\n\t\treturn yyjson_get_bool(_Ptr);\r\n\t}\r\n\t[[nodiscard]] int GetInt() const\r\n\t{\r\n\t\treturn int(yyjson_get_num(_Ptr));\r\n\t}\r\n\t[[nodiscard]] int64_t GetInt64() const\r\n\t{\r\n\t\treturn int64_t(yyjson_get_num(_Ptr));\r\n\t}\r\n\t[[nodiscard]] float GetFloat() const\r\n\t{\r\n\t\treturn float(yyjson_get_num(_Ptr));\r\n\t}\r\n\t[[nodiscard]] double GetDouble() const \r\n\t{\r\n\t\treturn yyjson_get_num(_Ptr);\r\n\t}\r\n\t[[nodiscard]] std::string GetString() const\r\n\t{\r\n\t\tif (const auto _str = yyjson_get_str(_Ptr))\r\n\t\t\treturn _str;\r\n\t\treturn \"\";\r\n\t}\r\n\t[[nodiscard]] std::vector<MJsonValue> GetArray() const\r\n\t{\r\n\t\tstd::vector<MJsonValue> _ret;\r\n\t\tif (!IsArray())\r\n\t\t\treturn {};\r\n\t\tconst auto _PArray = _Ptr;\r\n\t\tsize_t idx, max;\r\n\t\tyyjson_val* _Object;\r\n\t\tyyjson_arr_foreach(_PArray, idx, max, _Object)\r\n\t\t\t_ret.emplace_back(_Object);\r\n\t\treturn _ret;\r\n\t}\r\n\t[[nodiscard]] size_t GetSize() const\r\n\t{\r\n\t\treturn yyjson_get_len(_Ptr);\r\n\t}\r\n\t[[nodiscard]] size_t Size() const\r\n\t{\r\n\t\treturn yyjson_get_len(_Ptr);\r\n\t}\r\n\t[[nodiscard]] size_t GetStringLength() const\r\n\t{\r\n\t\treturn yyjson_get_len(_Ptr);\r\n\t}\r\n\t[[nodiscard]] MJsonValue Get(const std::string& _key) const\r\n\t{\r\n\t\treturn yyjson_obj_get(_Ptr, _key.c_str());\r\n\t}\r\n\t[[nodiscard]] MJsonValue operator[](const std::string& _key) const\r\n\t{\r\n\t\treturn yyjson_obj_get(_Ptr, _key.c_str());\r\n\t}\r\n\t[[nodiscard]] MJsonValue operator[](size_t _idx) const\r\n\t{\r\n\t\tif (!IsArray())\r\n\t\t\treturn _Ptr;\r\n\t\tconst auto _max = yyjson_arr_size(_Ptr);\r\n\t\tconst auto _val = yyjson_arr_get_first(_Ptr);\r\n\t\treturn _idx < _max ? _val + _idx : _val + _max - 1;\r\n\t}\r\n\t[[nodiscard]] bool Empty() const\r\n\t{\r\n\t\tif (!IsArray() && !IsString())\r\n\t\t\treturn true;\r\n\t\tauto _max = yyjson_arr_size(_Ptr);\r\n\t\tif (IsString()) _max = yyjson_get_len(_Ptr);\r\n\t\treturn !_max;\r\n\t}\r\n\t[[nodiscard]] size_t GetMemberCount() const\r\n\t{\r\n\t\treturn yyjson_obj_size(_Ptr);\r\n\t}\r\n\t[[nodiscard]] std::vector<std::pair<std::string, MJsonValue>> GetMemberArray() const\r\n\t{\r\n\t\tstd::vector<std::pair<std::string, MJsonValue>> ret;\r\n\t\tyyjson_val* key;\r\n\t\tyyjson_obj_iter iter = yyjson_obj_iter_with(_Ptr);\r\n\t\twhile ((key = yyjson_obj_iter_next(&iter))) {\r\n\t\t\tconst auto val = yyjson_obj_iter_get_val(key);\r\n\t\t\tret.emplace_back(MJsonValue(key).GetString(), val);\r\n\t\t}\r\n\t\treturn ret;\r\n\t}\r\n\t[[nodiscard]] bool HasMember(const std::string& _key) const\r\n\t{\r\n\t\treturn yyjson_obj_get(_Ptr, _key.c_str());\r\n\t}\r\nprivate:\r\n\tyyjson_val* _Ptr = nullptr;\r\n};\r\n\r\nclass MJson\r\n{\r\npublic:\r\n\tMJson() = default;\r\n\tLibSvcApi MJson(const char* _path);\r\n\tLibSvcApi MJson(const std::string& _data, bool _read_from_string);\r\n\t~MJson()\r\n\t{\r\n\t\tif(_document)\r\n\t\t{\r\n\t\t\tyyjson_doc_free(_document);\r\n\t\t\t_document = nullptr;\r\n\t\t\troot = nullptr;\r\n\t\t}\r\n\t}\r\n\tMJson(MJson&& _Right) noexcept\r\n\t{\r\n\t\t_document = _Right._document;\r\n\t\t_Right._document = nullptr;\r\n\t\troot = yyjson_doc_get_root(_document);\r\n\t}\r\n\tMJson(const MJson& _Right) = delete;\r\n\tMJson& operator=(MJson&& _Right) noexcept\r\n\t{\r\n\t\tif (_document)\r\n\t\t\tyyjson_doc_free(_document);\r\n\t\t_document = _Right._document;\r\n\t\t_Right._document = nullptr;\r\n\t\troot = yyjson_doc_get_root(_document);\r\n\t\treturn *this;\r\n\t}\r\n\tMJson& operator=(const MJson& _Right) = delete;\r\n\tvoid Parse(const std::string& _str)\r\n\t{\r\n\t\t_document = yyjson_read(_str.c_str(), _str.length(), YYJSON_READ_NOFLAG);\r\n\t\tif (!_document)\r\n\t\t\tthrow std::exception(\"Json Parse Error !\");\r\n\t\troot = yyjson_doc_get_root(_document);\r\n\t}\r\n\t[[nodiscard]] bool HasMember(const std::string& _key) const\r\n\t{\r\n\t\treturn yyjson_obj_get(root, _key.c_str());\r\n\t}\r\n\t[[nodiscard]] MJsonValue Get(const std::string& _key) const\r\n\t{\r\n\t\treturn yyjson_obj_get(root, _key.c_str());\r\n\t}\r\n\t[[nodiscard]] MJsonValue operator[](const std::string& _key) const\r\n\t{\r\n\t\treturn yyjson_obj_get(root, _key.c_str());\r\n\t}\r\n\t[[nodiscard]] MJsonValue operator[](size_t _idx) const\r\n\t{\r\n\t\tif (MJsonValue(root).IsArray())\r\n\t\t\treturn root;\r\n\t\tconst auto _max = yyjson_arr_size(root);\r\n\t\tconst auto _val = yyjson_arr_get_first(root);\r\n\t\treturn _idx < _max ? _val + _idx : _val + _max - 1;\r\n\t}\r\n\t[[nodiscard]] bool HasParseError() const\r\n\t{\r\n\t\treturn _document == nullptr;\r\n\t}\r\n\t[[nodiscard]] bool IsNull() const\r\n\t{\r\n\t\treturn yyjson_is_null(root);\r\n\t}\r\n\t[[nodiscard]] bool IsBoolean() const\r\n\t{\r\n\t\treturn yyjson_is_bool(root);\r\n\t}\r\n\t[[nodiscard]] bool IsBool() const\r\n\t{\r\n\t\treturn yyjson_is_bool(root);\r\n\t}\r\n\t[[nodiscard]] bool IsInt() const\r\n\t{\r\n\t\treturn yyjson_is_num(root);\r\n\t}\r\n\t[[nodiscard]] bool IsFloat() const\r\n\t{\r\n\t\treturn yyjson_is_num(root);\r\n\t}\r\n\t[[nodiscard]] bool IsInt64() const\r\n\t{\r\n\t\treturn yyjson_is_num(root);\r\n\t}\r\n\t[[nodiscard]] bool IsDouble() const\r\n\t{\r\n\t\treturn yyjson_is_num(root);\r\n\t}\r\n\t[[nodiscard]] bool IsString() const\r\n\t{\r\n\t\treturn yyjson_is_str(root);\r\n\t}\r\n\t[[nodiscard]] bool IsArray() const\r\n\t{\r\n\t\treturn yyjson_is_arr(root);\r\n\t}\r\n\t[[nodiscard]] bool GetBool() const\r\n\t{\r\n\t\treturn yyjson_get_bool(root);\r\n\t}\r\n\t[[nodiscard]] bool GetBoolean() const\r\n\t{\r\n\t\treturn yyjson_get_bool(root);\r\n\t}\r\n\t[[nodiscard]] int GetInt() const\r\n\t{\r\n\t\treturn int(yyjson_get_num(root));\r\n\t}\r\n\t[[nodiscard]] int64_t GetInt64() const\r\n\t{\r\n\t\treturn int64_t(yyjson_get_num(root));\r\n\t}\r\n\t[[nodiscard]] float GetFloat() const\r\n\t{\r\n\t\treturn float(yyjson_get_num(root));\r\n\t}\r\n\t[[nodiscard]] double GetDouble() const\r\n\t{\r\n\t\treturn yyjson_get_num(root);\r\n\t}\r\n\t[[nodiscard]] std::string GetString() const\r\n\t{\r\n\t\tif (const auto _str = yyjson_get_str(root))\r\n\t\t\treturn _str;\r\n\t\treturn \"\";\r\n\t}\r\n\t[[nodiscard]] std::vector<MJsonValue> GetArray() const\r\n\t{\r\n\t\tstd::vector<MJsonValue> _ret;\r\n\t\tif (!IsArray())\r\n\t\t\treturn {};\r\n\t\tconst auto _PArray = root;\r\n\t\tsize_t idx, max;\r\n\t\tyyjson_val* _Object;\r\n\t\tyyjson_arr_foreach(_PArray, idx, max, _Object)\r\n\t\t\t_ret.emplace_back(_Object);\r\n\t\treturn _ret;\r\n\t}\r\n\t[[nodiscard]] size_t GetSize() const\r\n\t{\r\n\t\treturn yyjson_get_len(root);\r\n\t}\r\n\t[[nodiscard]] size_t Size() const\r\n\t{\r\n\t\treturn yyjson_get_len(root);\r\n\t}\r\n\t[[nodiscard]] size_t GetStringLength() const\r\n\t{\r\n\t\treturn yyjson_get_len(root);\r\n\t}\r\n\t[[nodiscard]] size_t GetMemberCount() const\r\n\t{\r\n\t\treturn yyjson_obj_size(root);\r\n\t}\r\n\t[[nodiscard]] std::vector<std::pair<std::string,MJsonValue>> GetMemberArray() const\r\n\t{\r\n\t\tstd::vector<std::pair<std::string, MJsonValue>> ret;\r\n\t\tyyjson_val* key;\r\n\t\tyyjson_obj_iter iter = yyjson_obj_iter_with(root);\r\n\t\twhile ((key = yyjson_obj_iter_next(&iter))) {\r\n\t\t\tconst auto val = yyjson_obj_iter_get_val(key);\r\n\t\t\tret.emplace_back(MJsonValue(key).GetString(), val);\r\n\t\t}\r\n\t\treturn ret;\r\n\t}\r\nprivate:\r\n\tyyjson_doc* _document = nullptr;\r\n\tyyjson_val* root = nullptr;\r\n};"
  },
  {
    "path": "libsvc/Modules/Lib/MJson/yyjson.c",
    "content": "/*==============================================================================\n * Created by Yaoyuan on 2019/3/9.\n * Copyright (C) 2019 Yaoyuan <ibireme@gmail.com>.\n *\n * Released under the MIT License:\n * https://github.com/ibireme/yyjson/blob/master/LICENSE\n *============================================================================*/\n\n#include \"yyjson.h\"\n#include <math.h>\n\n\n\n/*==============================================================================\n * Compile Hint Begin\n *============================================================================*/\n\n/* warning suppress begin */\n#if defined(__clang__)\n#   pragma clang diagnostic push\n#   pragma clang diagnostic ignored \"-Wunused-function\"\n#   pragma clang diagnostic ignored \"-Wunused-parameter\"\n#   pragma clang diagnostic ignored \"-Wunused-label\"\n#   pragma clang diagnostic ignored \"-Wunused-macros\"\n#elif defined(__GNUC__)\n#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)\n#   pragma GCC diagnostic push\n#   endif\n#   pragma GCC diagnostic ignored \"-Wunused-function\"\n#   pragma GCC diagnostic ignored \"-Wunused-parameter\"\n#   pragma GCC diagnostic ignored \"-Wunused-label\"\n#   pragma GCC diagnostic ignored \"-Wunused-macros\"\n#elif defined(_MSC_VER)\n#   pragma warning(push)\n#   pragma warning(disable:4100) /* unreferenced formal parameter */\n#   pragma warning(disable:4102) /* unreferenced label */\n#   pragma warning(disable:4127) /* conditional expression is constant */\n#   pragma warning(disable:4706) /* assignment within conditional expression */\n#endif\n\n\n\n/*==============================================================================\n * Version\n *============================================================================*/\n\nuint32_t yyjson_version(void) {\n    return YYJSON_VERSION_HEX;\n}\n\n\n\n/*==============================================================================\n * Flags\n *============================================================================*/\n\n/* gcc version check */\n#if defined(__GNUC__)\n#   if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)\n#       define yyjson_gcc_available(major, minor, patch) \\\n            ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) \\\n            >= (major * 10000 + minor * 100 + patch))\n#   elif defined(__GNUC_MINOR__)\n#       define yyjson_gcc_available(major, minor, patch) \\\n            ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100) \\\n            >= (major * 10000 + minor * 100 + patch))\n#   else\n#       define yyjson_gcc_available(major, minor, patch) \\\n            ((__GNUC__ * 10000) >= (major * 10000 + minor * 100 + patch))\n#   endif\n#else\n#       define yyjson_gcc_available(major, minor, patch) 0\n#endif\n\n/* real gcc check */\n#if !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(__ICC) && \\\n    defined(__GNUC__) && defined(__GNUC_MINOR__)\n#   define YYJSON_IS_REAL_GCC 1\n#else\n#   define YYJSON_IS_REAL_GCC 0\n#endif\n\n/* msvc intrinsic */\n#if YYJSON_MSC_VER >= 1400\n#   include <intrin.h>\n#   if defined(_M_AMD64) || defined(_M_ARM64)\n#       define MSC_HAS_BIT_SCAN_64 1\n#       pragma intrinsic(_BitScanForward64)\n#       pragma intrinsic(_BitScanReverse64)\n#   else\n#       define MSC_HAS_BIT_SCAN_64 0\n#   endif\n#   if defined(_M_AMD64) || defined(_M_ARM64) || \\\n        defined(_M_IX86) || defined(_M_ARM)\n#       define MSC_HAS_BIT_SCAN 1\n#       pragma intrinsic(_BitScanForward)\n#       pragma intrinsic(_BitScanReverse)\n#   else\n#       define MSC_HAS_BIT_SCAN 0\n#   endif\n#   if defined(_M_AMD64)\n#       define MSC_HAS_UMUL128 1\n#       pragma intrinsic(_umul128)\n#   else\n#       define MSC_HAS_UMUL128 0\n#   endif\n#else\n#   define MSC_HAS_BIT_SCAN_64 0\n#   define MSC_HAS_BIT_SCAN 0\n#   define MSC_HAS_UMUL128 0\n#endif\n\n/* gcc builtin */\n#if yyjson_has_builtin(__builtin_clzll) || yyjson_gcc_available(3, 4, 0)\n#   define GCC_HAS_CLZLL 1\n#else\n#   define GCC_HAS_CLZLL 0\n#endif\n\n#if yyjson_has_builtin(__builtin_ctzll) || yyjson_gcc_available(3, 4, 0)\n#   define GCC_HAS_CTZLL 1\n#else\n#   define GCC_HAS_CTZLL 0\n#endif\n\n/* int128 type */\n#if defined(__SIZEOF_INT128__) && (__SIZEOF_INT128__ == 16) && \\\n    (defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER))\n#    define YYJSON_HAS_INT128 1\n#else\n#    define YYJSON_HAS_INT128 0\n#endif\n\n/* IEEE 754 floating-point binary representation */\n#if defined(__STDC_IEC_559__) || defined(__STDC_IEC_60559_BFP__)\n#   define YYJSON_HAS_IEEE_754 1\n#elif (FLT_RADIX == 2) && (DBL_MANT_DIG == 53) && (DBL_DIG == 15) && \\\n     (DBL_MIN_EXP == -1021) && (DBL_MAX_EXP == 1024) && \\\n     (DBL_MIN_10_EXP == -307) && (DBL_MAX_10_EXP == 308)\n#   define YYJSON_HAS_IEEE_754 1\n#else\n#   define YYJSON_HAS_IEEE_754 0\n#endif\n\n/*\n Correct rounding in double number computations.\n \n On the x86 architecture, some compilers may use x87 FPU instructions for\n floating-point arithmetic. The x87 FPU loads all floating point number as\n 80-bit double-extended precision internally, then rounds the result to original\n precision, which may produce inaccurate results. For a more detailed\n explanation, see the paper: https://arxiv.org/abs/cs/0701192\n \n Here are some examples of double precision calculation error:\n \n     2877.0 / 1e6   == 0.002877,  but x87 returns 0.0028770000000000002\n     43683.0 * 1e21 == 4.3683e25, but x87 returns 4.3683000000000004e25\n \n Here are some examples of compiler flags to generate x87 instructions on x86:\n \n     clang -m32 -mno-sse\n     gcc/icc -m32 -mfpmath=387\n     msvc /arch:SSE or /arch:IA32\n \n If we are sure that there's no similar error described above, we can define the\n YYJSON_DOUBLE_MATH_CORRECT as 1 to enable the fast path calculation. This is\n not an accurate detection, it's just try to avoid the error at compile-time.\n An accurate detection can be done at run-time:\n \n     bool is_double_math_correct(void) {\n         volatile double r = 43683.0;\n         r *= 1e21;\n         return r == 4.3683e25;\n     }\n \n See also: utils.h in https://github.com/google/double-conversion/\n */\n#if !defined(FLT_EVAL_METHOD) && defined(__FLT_EVAL_METHOD__)\n#    define FLT_EVAL_METHOD __FLT_EVAL_METHOD__\n#endif\n\n#if defined(FLT_EVAL_METHOD) && FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1\n#    define YYJSON_DOUBLE_MATH_CORRECT 0\n#elif defined(i386) || defined(__i386) || defined(__i386__) || \\\n    defined(_X86_) || defined(__X86__) || defined(_M_IX86) || \\\n    defined(__I86__) || defined(__IA32__) || defined(__THW_INTEL)\n#   if (defined(_MSC_VER) && defined(_M_IX86_FP) && _M_IX86_FP == 2) || \\\n        (defined(__SSE2_MATH__) && __SSE2_MATH__)\n#       define YYJSON_DOUBLE_MATH_CORRECT 1\n#   else\n#       define YYJSON_DOUBLE_MATH_CORRECT 0\n#   endif\n#elif defined(__mc68000__) || defined(__pnacl__) || defined(__native_client__)\n#   define YYJSON_DOUBLE_MATH_CORRECT 0\n#else\n#   define YYJSON_DOUBLE_MATH_CORRECT 1\n#endif\n\n/* endian */\n#if yyjson_has_include(<sys/types.h>)\n#    include <sys/types.h>\n#endif\n\n#if yyjson_has_include(<endian.h>)\n#    include <endian.h>\n#elif yyjson_has_include(<machine/endian.h>)\n#    include <machine/endian.h>\n#elif yyjson_has_include(<sys/endian.h>)\n#    include <sys/endian.h>\n#endif\n\n#define YYJSON_BIG_ENDIAN       4321\n#define YYJSON_LITTLE_ENDIAN    1234\n\n#if defined(__BYTE_ORDER__) && __BYTE_ORDER__\n#   if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__\n#       define YYJSON_ENDIAN YYJSON_BIG_ENDIAN\n#   elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__\n#       define YYJSON_ENDIAN YYJSON_LITTLE_ENDIAN\n#   endif\n\n#elif defined(__BYTE_ORDER) && __BYTE_ORDER\n#   if __BYTE_ORDER == __BIG_ENDIAN\n#       define YYJSON_ENDIAN YYJSON_BIG_ENDIAN\n#   elif __BYTE_ORDER == __LITTLE_ENDIAN\n#       define YYJSON_ENDIAN YYJSON_LITTLE_ENDIAN\n#   endif\n\n#elif defined(BYTE_ORDER) && BYTE_ORDER\n#   if BYTE_ORDER == BIG_ENDIAN\n#       define YYJSON_ENDIAN YYJSON_BIG_ENDIAN\n#   elif BYTE_ORDER == LITTLE_ENDIAN\n#       define YYJSON_ENDIAN YYJSON_LITTLE_ENDIAN\n#   endif\n\n#elif (defined(__LITTLE_ENDIAN__) && __LITTLE_ENDIAN__ == 1) || \\\n    defined(__i386) || defined(__i386__) || \\\n    defined(_X86_) || defined(__X86__) || \\\n    defined(_M_IX86) || defined(__THW_INTEL__) || \\\n    defined(__x86_64) || defined(__x86_64__) || \\\n    defined(__amd64) || defined(__amd64__) || \\\n    defined(_M_AMD64) || defined(_M_X64) || \\\n    defined(__ia64) || defined(_IA64) || defined(__IA64__) ||  \\\n    defined(__ia64__) || defined(_M_IA64) || defined(__itanium__) || \\\n    defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \\\n    defined(__alpha) || defined(__alpha__) || defined(_M_ALPHA) || \\\n    defined(__riscv) || defined(__riscv__) || \\\n    defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__) || \\\n    defined(__EMSCRIPTEN__) || defined(__wasm__) || \\\n    defined(__loongarch__)\n#   define YYJSON_ENDIAN YYJSON_LITTLE_ENDIAN\n\n#elif (defined(__BIG_ENDIAN__) && __BIG_ENDIAN__ == 1) || \\\n    defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \\\n    defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) || \\\n    defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \\\n    defined(__ppc) || defined(__ppc__) || \\\n    defined(__sparc) || defined(__sparc__) || defined(__sparc64__) || \\\n    defined(__or1k__) || defined(__OR1K__)\n#   define YYJSON_ENDIAN YYJSON_BIG_ENDIAN\n\n#else\n#   define YYJSON_ENDIAN 0 /* unknown endian, detect at run-time */\n#endif\n\n/*\n Unaligned memory access detection.\n \n Some architectures cannot perform unaligned memory access, or unaligned memory\n accesses can have a large performance penalty. Modern compilers can make some\n optimizations for unaligned access. For example: https://godbolt.org/z/Ejo3Pa\n \n    typedef struct { char c[2] } vec2;\n    void copy_vec2(vec2 *dst, vec2 *src) {\n        *dst = *src;\n    }\n \n Compiler may generate `load/store` or `move` instruction if target architecture\n supports unaligned access, otherwise it may generate `call memcpy` instruction.\n \n We want to avoid `memcpy` calls, so we should disable unaligned access by\n define `YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS` as 1 on these architectures.\n */\n#ifndef YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n#   if defined(i386) || defined(__i386) || defined(__i386__) || \\\n        defined(__i486__) || defined(__i586__) || defined(__i686__) || \\\n        defined(_X86_) || defined(__X86__) || defined(_M_IX86) || \\\n        defined(__I86__) || defined(__IA32__) || \\\n        defined(__THW_INTEL) || defined(__THW_INTEL__) || \\\n        defined(__x86_64) || defined(__x86_64__) || \\\n        defined(__amd64) || defined(__amd64__) || \\\n        defined(_M_AMD64) || defined(_M_X64)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* x86 */\n\n#   elif defined(__ia64) || defined(_IA64) || defined(__IA64__) ||  \\\n        defined(__ia64__) || defined(_M_IA64) || defined(__itanium__)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 1 /* Itanium */\n\n#   elif defined(__arm64) || defined(__arm64__) || \\\n        defined(__AARCH64EL__) || defined(__AARCH64EB__) || \\\n        defined(__aarch64__) || defined(_M_ARM64)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* ARM64 */\n\n#   elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || \\\n        defined(__ARM_ARCH_5TEJ__) || defined(__ARM_ARCH_5TE__) || \\\n        defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6KZ__) || \\\n        defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6K__)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 1 /* ARM */\n\n#   elif defined(__ppc64__) || defined(__PPC64__) || \\\n        defined(__powerpc64__) || defined(_ARCH_PPC64) || \\\n        defined(__ppc) || defined(__ppc__) || defined(__PPC__) || \\\n        defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) || \\\n        defined(_ARCH_PPC) || defined(_M_PPC) || \\\n        defined(__PPCGECKO__) || defined(__PPCBROADWAY__) || defined(_XENON)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* PowerPC */\n\n#   elif defined(__loongarch__)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* loongarch */\n\n#   else\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* Unknown */\n#   endif\n\n#endif\n\n/*\n Estimated initial ratio of the JSON data (data_size / value_count).\n For example:\n    \n    data:        {\"id\":12345678,\"name\":\"Harry\"}\n    data_size:   30\n    value_count: 5\n    ratio:       6\n    \n yyjson uses dynamic memory with a growth factor of 1.5 when reading and writing\n JSON, the ratios below are used to determine the initial memory size.\n \n A too large ratio will waste memory, and a too small ratio will cause multiple\n memory growths and degrade performance. Currently, these ratios are generated\n with some commonly used JSON datasets.\n */\n#define YYJSON_READER_ESTIMATED_PRETTY_RATIO 16\n#define YYJSON_READER_ESTIMATED_MINIFY_RATIO 6\n#define YYJSON_WRITER_ESTIMATED_PRETTY_RATIO 32\n#define YYJSON_WRITER_ESTIMATED_MINIFY_RATIO 18\n\n/* The initial and maximum size of the memory pool's chunk in yyjson_mut_doc. */\n#define YYJSON_MUT_DOC_STR_POOL_INIT_SIZE   0x100\n#define YYJSON_MUT_DOC_STR_POOL_MAX_SIZE    0x10000000\n#define YYJSON_MUT_DOC_VAL_POOL_INIT_SIZE   (0x10 * sizeof(yyjson_mut_val))\n#define YYJSON_MUT_DOC_VAL_POOL_MAX_SIZE    (0x1000000 * sizeof(yyjson_mut_val))\n\n/* Default value for compile-time options. */\n#ifndef YYJSON_DISABLE_READER\n#define YYJSON_DISABLE_READER 0\n#endif\n#ifndef YYJSON_DISABLE_WRITER\n#define YYJSON_DISABLE_WRITER 0\n#endif\n#ifndef YYJSON_DISABLE_UTILS\n#define YYJSON_DISABLE_UTILS 0\n#endif\n#ifndef YYJSON_DISABLE_FAST_FP_CONV\n#define YYJSON_DISABLE_FAST_FP_CONV 0\n#endif\n#ifndef YYJSON_DISABLE_NON_STANDARD\n#define YYJSON_DISABLE_NON_STANDARD 0\n#endif\n\n\n\n/*==============================================================================\n * Macros\n *============================================================================*/\n\n/* Macros used for loop unrolling and other purpose. */\n#define repeat2(x)  { x x }\n#define repeat3(x)  { x x x }\n#define repeat4(x)  { x x x x }\n#define repeat8(x)  { x x x x x x x x }\n#define repeat16(x) { x x x x x x x x x x x x x x x x }\n\n#define repeat2_incr(x)  { x(0) x(1) }\n#define repeat4_incr(x)  { x(0) x(1) x(2) x(3) }\n#define repeat8_incr(x)  { x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7) }\n#define repeat16_incr(x) { x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7) \\\n                           x(8) x(9) x(10) x(11) x(12) x(13) x(14) x(15) }\n#define repeat_in_1_18(x) { x(1) x(2) x(3) x(4) x(5) x(6) x(7) \\\n                            x(8) x(9) x(10) x(11) x(12) x(13) x(14) x(15) \\\n                            x(16) x(17) x(18) }\n\n/* Macros used to provide branch prediction information for compiler. */\n#undef  likely\n#define likely(x)       yyjson_likely(x)\n#undef  unlikely\n#define unlikely(x)     yyjson_unlikely(x)\n\n/* Macros used to provide inline information for compiler. */\n#undef  static_inline\n#define static_inline   static yyjson_inline\n#undef  static_noinline\n#define static_noinline static yyjson_noinline\n\n/* Macros for min and max. */\n#undef  yyjson_min\n#define yyjson_min(x, y) ((x) < (y) ? (x) : (y))\n#undef  yyjson_max\n#define yyjson_max(x, y) ((x) > (y) ? (x) : (y))\n\n/* Used to write u64 literal for C89 which doesn't support \"ULL\" suffix. */\n#undef  U64\n#define U64(hi, lo) ((((u64)hi##UL) << 32U) + lo##UL)\n\n/* Used to cast away (remove) const qualifier. */\n#define constcast(type) (type)(void *)(size_t)(const void *)\n\n\n\n/*==============================================================================\n * Integer Constants\n *============================================================================*/\n\n/* U64 constant values */\n#undef  U64_MAX\n#define U64_MAX         U64(0xFFFFFFFF, 0xFFFFFFFF)\n#undef  I64_MAX\n#define I64_MAX         U64(0x7FFFFFFF, 0xFFFFFFFF)\n#undef  USIZE_MAX\n#define USIZE_MAX       ((usize)(~(usize)0))\n\n/* Maximum number of digits for reading u32/u64/usize safety (not overflow). */\n#undef  U32_SAFE_DIG\n#define U32_SAFE_DIG    9   /* u32 max is 4294967295, 10 digits */\n#undef  U64_SAFE_DIG\n#define U64_SAFE_DIG    19  /* u64 max is 18446744073709551615, 20 digits */\n#undef  USIZE_SAFE_DIG\n#define USIZE_SAFE_DIG  (sizeof(usize) == 64 ? U64_SAFE_DIG : U32_SAFE_DIG)\n\n\n\n/*==============================================================================\n * IEEE-754 Double Number Constants\n *============================================================================*/\n\n/* Inf raw value (positive) */\n#define F64_RAW_INF U64(0x7FF00000, 0x00000000)\n\n/* NaN raw value (quiet NaN, no payload, no sign) */\n#if defined(__hppa__) || (defined(__mips__) && !defined(__mips_nan2008))\n#define F64_RAW_NAN U64(0x7FF7FFFF, 0xFFFFFFFF)\n#else\n#define F64_RAW_NAN U64(0x7FF80000, 0x00000000)\n#endif\n\n/* double number bits */\n#define F64_BITS 64\n\n/* double number exponent part bits */\n#define F64_EXP_BITS 11\n\n/* double number significand part bits */\n#define F64_SIG_BITS 52\n\n/* double number significand part bits (with 1 hidden bit) */\n#define F64_SIG_FULL_BITS 53\n\n/* double number significand bit mask */\n#define F64_SIG_MASK U64(0x000FFFFF, 0xFFFFFFFF)\n\n/* double number exponent bit mask */\n#define F64_EXP_MASK U64(0x7FF00000, 0x00000000)\n\n/* double number exponent bias */\n#define F64_EXP_BIAS 1023\n\n/* double number significant digits count in decimal */\n#define F64_DEC_DIG 17\n\n/* max significant digits count in decimal when reading double number */\n#define F64_MAX_DEC_DIG 768\n\n/* maximum decimal power of double number (1.7976931348623157e308) */\n#define F64_MAX_DEC_EXP 308\n\n/* minimum decimal power of double number (4.9406564584124654e-324) */\n#define F64_MIN_DEC_EXP (-324)\n\n/* maximum binary power of double number */\n#define F64_MAX_BIN_EXP 1024\n\n/* minimum binary power of double number */\n#define F64_MIN_BIN_EXP (-1021)\n\n\n\n/*==============================================================================\n * Types\n *============================================================================*/\n\n/** Type define for primitive types. */\ntypedef float       f32;\ntypedef double      f64;\ntypedef int8_t      i8;\ntypedef uint8_t     u8;\ntypedef int16_t     i16;\ntypedef uint16_t    u16;\ntypedef int32_t     i32;\ntypedef uint32_t    u32;\ntypedef int64_t     i64;\ntypedef uint64_t    u64;\ntypedef size_t      usize;\n\n/** 128-bit integer, used by floating-point number reader and writer. */\n#if YYJSON_HAS_INT128\n__extension__ typedef __int128          i128;\n__extension__ typedef unsigned __int128 u128;\n#endif\n\n/** 16/32/64-bit vector */\ntypedef struct v16 { char c1, c2; } v16;\ntypedef struct v32 { char c1, c2, c3, c4; } v32;\ntypedef struct v64 { char c1, c2, c3, c4, c5, c6, c7, c8; } v64;\n\n/** 16/32/64-bit vector union, used for unaligned memory access on modern CPU */\ntypedef union v16_uni { v16 v; u16 u; } v16_uni;\ntypedef union v32_uni { v32 v; u32 u; } v32_uni;\ntypedef union v64_uni { v64 v; u64 u; } v64_uni;\n\n\n\n/*==============================================================================\n * Load/Store Utils\n *============================================================================*/\n\n#define byte_move_idx(x) ((u8 *)dst)[x] = ((u8 *)src)[x];\n\nstatic_inline void byte_move_2(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat2_incr(byte_move_idx)\n#else\n    memmove(dst, src, 2);\n#endif\n}\n\nstatic_inline void byte_move_4(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat4_incr(byte_move_idx)\n#else\n    memmove(dst, src, 4);\n#endif\n}\n\nstatic_inline void byte_move_8(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat8_incr(byte_move_idx)\n#else\n    memmove(dst, src, 8);\n#endif\n}\n\nstatic_inline void byte_move_16(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat16_incr(byte_move_idx)\n#else\n    memmove(dst, src, 16);\n#endif\n}\n\nstatic_inline void byte_copy_2(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat2_incr(byte_move_idx)\n#else\n    memcpy(dst, src, 2);\n#endif\n}\n\nstatic_inline void byte_copy_4(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat4_incr(byte_move_idx)\n#else\n    memcpy(dst, src, 4);\n#endif\n}\n\nstatic_inline void byte_copy_8(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat8_incr(byte_move_idx)\n#else\n    memcpy(dst, src, 8);\n#endif\n}\n\nstatic_inline void byte_copy_16(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat16_incr(byte_move_idx)\n#else\n    memcpy(dst, src, 16);\n#endif\n}\n\nstatic_inline bool byte_match_2(void *buf, const char *pat) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    return\n    ((u8 *)buf)[0] == ((const u8 *)pat)[0] &&\n    ((u8 *)buf)[1] == ((const u8 *)pat)[1];\n#else\n    v16_uni u1, u2;\n    u1.v = *(const v16 *)pat;\n    u2.v = *(const v16 *)buf;\n    return u1.u == u2.u;\n#endif\n}\n\nstatic_inline bool byte_match_4(void *buf, const char *pat) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    return\n    ((u8 *)buf)[0] == ((const u8 *)pat)[0] &&\n    ((u8 *)buf)[1] == ((const u8 *)pat)[1] &&\n    ((u8 *)buf)[2] == ((const u8 *)pat)[2] &&\n    ((u8 *)buf)[3] == ((const u8 *)pat)[3];\n#else\n    v32_uni u1, u2;\n    u1.v = *(const v32 *)pat;\n    u2.v = *(const v32 *)buf;\n    return u1.u == u2.u;\n#endif\n}\n\nstatic_inline u16 byte_load_2(const void *src) {\n    v16_uni uni;\n    uni.v = *(const v16 *)src;\n    return uni.u;\n}\n\nstatic_inline u32 byte_load_3(const void *src) {\n    v32_uni uni;\n    ((v16_uni *)&uni)->v = *(const v16 *)src;\n    uni.v.c3 = ((const char *)src)[2];\n    uni.v.c4 = 0;\n    return uni.u;\n}\n\nstatic_inline u32 byte_load_4(const void *src) {\n    v32_uni uni;\n    uni.v = *(const v32 *)src;\n    return uni.u;\n}\n\n#undef byte_move_expr\n\n\n\n/*==============================================================================\n * Number Utils\n * These functions are used to detect and convert NaN and Inf numbers.\n *============================================================================*/\n\n/**\n This union is used to avoid violating the strict aliasing rule in C.\n `memcpy` can be used in both C and C++, but it may reduce performance without\n compiler optimization.\n */\ntypedef union { u64 u; f64 f; } f64_uni;\n\n/** Convert raw binary to double. */\nstatic_inline f64 f64_from_raw(u64 u) {\n#ifndef __cplusplus\n    f64_uni uni;\n    uni.u = u;\n    return uni.f;\n#else\n    f64 f;\n    memcpy(&f, &u, 8);\n    return f;\n#endif\n}\n\n/** Convert double to raw binary. */\nstatic_inline u64 f64_to_raw(f64 f) {\n#ifndef __cplusplus\n    f64_uni uni;\n    uni.f = f;\n    return uni.u;\n#else\n    u64 u;\n    memcpy(&u, &f, 8);\n    return u;\n#endif\n}\n\n/** Get raw 'infinity' with sign. */\nstatic_inline u64 f64_raw_get_inf(bool sign) {\n#if YYJSON_HAS_IEEE_754\n    return F64_RAW_INF | ((u64)sign << 63);\n#elif defined(INFINITY)\n    return f64_to_raw(sign ? -INFINITY : INFINITY);\n#else\n    return f64_to_raw(sign ? -HUGE_VAL : HUGE_VAL);\n#endif\n}\n\n/** Get raw 'nan' with sign. */\nstatic_inline u64 f64_raw_get_nan(bool sign) {\n#if YYJSON_HAS_IEEE_754\n    return F64_RAW_NAN | ((u64)sign << 63);\n#elif defined(NAN)\n    return f64_to_raw(sign ? (f64)-NAN : (f64)NAN);\n#else\n    return f64_to_raw((sign ? -0.0 : 0.0) / 0.0);\n#endif\n}\n\n/**\n Convert normalized u64 (highest bit is 1) to f64.\n \n Some compiler (such as Microsoft Visual C++ 6.0) do not support converting\n number from u64 to f64. This function will first convert u64 to i64 and then\n to f64, with `to nearest` rounding mode.\n */\nstatic_inline f64 normalized_u64_to_f64(u64 val) {\n#if YYJSON_U64_TO_F64_NO_IMPL\n    i64 sig = (i64)((val >> 1) | (val & 1));\n    return ((f64)sig) * (f64)2.0;\n#else\n    return (f64)val;\n#endif\n}\n\n\n\n/*==============================================================================\n * Size Utils\n * These functions are used for memory allocation.\n *============================================================================*/\n\n/** Returns whether the size is overflow after increment. */\nstatic_inline bool size_add_is_overflow(usize size, usize add) {\n    return size > (size + add);\n}\n\n/** Returns whether the size is power of 2 (size should not be 0). */\nstatic_inline bool size_is_pow2(usize size) {\n    return (size & (size - 1)) == 0;\n}\n\n/** Align size upwards (may overflow). */\nstatic_inline usize size_align_up(usize size, usize align) {\n    if (size_is_pow2(align)) {\n        return (size + (align - 1)) & ~(align - 1);\n    } else {\n        return size + align - (size + align - 1) % align - 1;\n    }\n}\n\n/** Align size downwards. */\nstatic_inline usize size_align_down(usize size, usize align) {\n    if (size_is_pow2(align)) {\n        return size & ~(align - 1);\n    } else {\n        return size - (size % align);\n    }\n}\n\n/** Align address upwards (may overflow). */\nstatic_inline void *mem_align_up(void *mem, usize align) {\n    usize size;\n    memcpy(&size, &mem, sizeof(usize));\n    size = size_align_up(size, align);\n    memcpy(&mem, &size, sizeof(usize));\n    return mem;\n}\n\n\n\n/*==============================================================================\n * Bits Utils\n * These functions are used by the floating-point number reader and writer.\n *============================================================================*/\n\n/** Returns the number of leading 0-bits in value (input should not be 0). */\nstatic_inline u32 u64_lz_bits(u64 v) {\n#if GCC_HAS_CLZLL\n    return (u32)__builtin_clzll(v);\n#elif MSC_HAS_BIT_SCAN_64\n    unsigned long r;\n    _BitScanReverse64(&r, v);\n    return (u32)63 - (u32)r;\n#elif MSC_HAS_BIT_SCAN\n    unsigned long hi, lo;\n    bool hi_set = _BitScanReverse(&hi, (u32)(v >> 32)) != 0;\n    _BitScanReverse(&lo, (u32)v);\n    hi |= 32;\n    return (u32)63 - (u32)(hi_set ? hi : lo);\n#else\n    /*\n     branchless, use de Bruijn sequences\n     see: https://www.chessprogramming.org/BitScan\n     */\n    const u8 table[64] = {\n        63, 16, 62,  7, 15, 36, 61,  3,  6, 14, 22, 26, 35, 47, 60,  2,\n         9,  5, 28, 11, 13, 21, 42, 19, 25, 31, 34, 40, 46, 52, 59,  1,\n        17,  8, 37,  4, 23, 27, 48, 10, 29, 12, 43, 20, 32, 41, 53, 18,\n        38, 24, 49, 30, 44, 33, 54, 39, 50, 45, 55, 51, 56, 57, 58,  0\n    };\n    v |= v >> 1;\n    v |= v >> 2;\n    v |= v >> 4;\n    v |= v >> 8;\n    v |= v >> 16;\n    v |= v >> 32;\n    return table[(v * U64(0x03F79D71, 0xB4CB0A89)) >> 58];\n#endif\n}\n\n/** Returns the number of trailing 0-bits in value (input should not be 0). */\nstatic_inline u32 u64_tz_bits(u64 v) {\n#if GCC_HAS_CTZLL\n    return (u32)__builtin_ctzll(v);\n#elif MSC_HAS_BIT_SCAN_64\n    unsigned long r;\n    _BitScanForward64(&r, v);\n    return (u32)r;\n#elif MSC_HAS_BIT_SCAN\n    unsigned long lo, hi;\n    bool lo_set = _BitScanForward(&lo, (u32)(v)) != 0;\n    _BitScanForward(&hi, (u32)(v >> 32));\n    hi += 32;\n    return lo_set ? lo : hi;\n#else\n    /*\n     branchless, use de Bruijn sequences\n     see: https://www.chessprogramming.org/BitScan\n     */\n    const u8 table[64] = {\n         0,  1,  2, 53,  3,  7, 54, 27,  4, 38, 41,  8, 34, 55, 48, 28,\n        62,  5, 39, 46, 44, 42, 22,  9, 24, 35, 59, 56, 49, 18, 29, 11,\n        63, 52,  6, 26, 37, 40, 33, 47, 61, 45, 43, 21, 23, 58, 17, 10,\n        51, 25, 36, 32, 60, 20, 57, 16, 50, 31, 19, 15, 30, 14, 13, 12\n    };\n    return table[((v & (~v + 1)) * U64(0x022FDD63, 0xCC95386D)) >> 58];\n#endif\n}\n\n\n\n/*==============================================================================\n * 128-bit Integer Utils\n * These functions are used by the floating-point number reader and writer.\n *============================================================================*/\n\n/** Multiplies two 64-bit unsigned integers (a * b),\n    returns the 128-bit result as 'hi' and 'lo'. */\nstatic_inline void u128_mul(u64 a, u64 b, u64 *hi, u64 *lo) {\n#if YYJSON_HAS_INT128\n    u128 m = (u128)a * b;\n    *hi = (u64)(m >> 64);\n    *lo = (u64)(m);\n#elif MSC_HAS_UMUL128\n    *lo = _umul128(a, b, hi);\n#else\n    u32 a0 = (u32)(a), a1 = (u32)(a >> 32);\n    u32 b0 = (u32)(b), b1 = (u32)(b >> 32);\n    u64 p00 = (u64)a0 * b0, p01 = (u64)a0 * b1;\n    u64 p10 = (u64)a1 * b0, p11 = (u64)a1 * b1;\n    u64 m0 = p01 + (p00 >> 32);\n    u32 m00 = (u32)(m0), m01 = (u32)(m0 >> 32);\n    u64 m1 = p10 + m00;\n    u32 m10 = (u32)(m1), m11 = (u32)(m1 >> 32);\n    *hi = p11 + m01 + m11;\n    *lo = ((u64)m10 << 32) | (u32)p00;\n#endif\n}\n\n/** Multiplies two 64-bit unsigned integers and add a value (a * b + c),\n    returns the 128-bit result as 'hi' and 'lo'. */\nstatic_inline void u128_mul_add(u64 a, u64 b, u64 c, u64 *hi, u64 *lo) {\n#if YYJSON_HAS_INT128\n    u128 m = (u128)a * b + c;\n    *hi = (u64)(m >> 64);\n    *lo = (u64)(m);\n#else\n    u64 h, l, t;\n    u128_mul(a, b, &h, &l);\n    t = l + c;\n    h += (u64)(((t < l) | (t < c)));\n    *hi = h;\n    *lo = t;\n#endif\n}\n\n\n\n/*==============================================================================\n * File Utils\n * These functions are used to read and write JSON files.\n *============================================================================*/\n\n#define YYJSON_FOPEN_EXT\n#if !defined(_MSC_VER) && defined(__GLIBC__) && defined(__GLIBC_PREREQ)\n#   if __GLIBC_PREREQ(2, 7)\n#       undef YYJSON_FOPEN_EXT\n#       define YYJSON_FOPEN_EXT \"e\" /* glibc extension to enable O_CLOEXEC */\n#   endif\n#endif\n\nstatic_inline FILE *fopen_safe(const char *path, const char *mode) {\n#if YYJSON_MSC_VER >= 1400\n    FILE *file = NULL;\n    if (fopen_s(&file, path, mode) != 0) return NULL;\n    return file;\n#else\n    return fopen(path, mode);\n#endif\n}\n\nstatic_inline FILE *fopen_readonly(const char *path) {\n    return fopen_safe(path, \"rb\" YYJSON_FOPEN_EXT);\n}\n\nstatic_inline FILE *fopen_writeonly(const char *path) {\n    return fopen_safe(path, \"wb\" YYJSON_FOPEN_EXT);\n}\n\nstatic_inline usize fread_safe(void *buf, usize size, FILE *file) {\n#if YYJSON_MSC_VER >= 1400\n    return fread_s(buf, size, 1, size, file);\n#else\n    return fread(buf, 1, size, file);\n#endif\n}\n\n\n\n/*==============================================================================\n * Default Memory Allocator\n * This is a simple libc memory allocator wrapper.\n *============================================================================*/\n\nstatic void *default_malloc(void *ctx, usize size) {\n    return malloc(size);\n}\n\nstatic void *default_realloc(void *ctx, void *ptr, usize old_size, usize size) {\n    return realloc(ptr, size);\n}\n\nstatic void default_free(void *ctx, void *ptr) {\n    free(ptr);\n}\n\nstatic const yyjson_alc YYJSON_DEFAULT_ALC = {\n    default_malloc,\n    default_realloc,\n    default_free,\n    NULL\n};\n\nstatic void *null_malloc(void *ctx, usize size) {\n    return NULL;\n}\n\nstatic void *null_realloc(void *ctx, void *ptr, usize old_size, usize size) {\n    return NULL;\n}\n\nstatic void null_free(void *ctx, void *ptr) {\n    return;\n}\n\nstatic const yyjson_alc YYJSON_NULL_ALC = {\n    null_malloc,\n    null_realloc,\n    null_free,\n    NULL\n};\n\n\n\n/*==============================================================================\n * Pool Memory Allocator\n * This is a simple memory allocator that uses linked list memory chunk.\n * The following code will be executed only when the library user creates\n * this allocator manually.\n *============================================================================*/\n\n/** chunk header */\ntypedef struct pool_chunk {\n    usize size; /* chunk memory size (include chunk header) */\n    struct pool_chunk *next;\n} pool_chunk;\n\n/** ctx header */\ntypedef struct pool_ctx {\n    usize size; /* total memory size (include ctx header) */\n    pool_chunk *free_list;\n} pool_ctx;\n\nstatic void *pool_malloc(void *ctx_ptr, usize size) {\n    pool_ctx *ctx = (pool_ctx *)ctx_ptr;\n    pool_chunk *next, *prev = NULL, *cur = ctx->free_list;\n    \n    if (unlikely(size == 0 || size >= ctx->size)) return NULL;\n    size = size_align_up(size, sizeof(pool_chunk)) + sizeof(pool_chunk);\n    \n    while (cur) {\n        if (cur->size < size) {\n            /* not enough space, try next chunk */\n            prev = cur;\n            cur = cur->next;\n            continue;\n        }\n        if (cur->size >= size + sizeof(pool_chunk) * 2) {\n            /* too much space, split this chunk */\n            next = (pool_chunk *)(void *)((u8 *)cur + size);\n            next->size = cur->size - size;\n            next->next = cur->next;\n            cur->size = size;\n        } else {\n            /* just enough space, use whole chunk */\n            next = cur->next;\n        }\n        if (prev) prev->next = next;\n        else ctx->free_list = next;\n        return (void *)(cur + 1);\n    }\n    return NULL;\n}\n\nstatic void pool_free(void *ctx_ptr, void *ptr) {\n    pool_ctx *ctx = (pool_ctx *)ctx_ptr;\n    pool_chunk *cur = ((pool_chunk *)ptr) - 1;\n    pool_chunk *prev = NULL, *next = ctx->free_list;\n    \n    while (next && next < cur) {\n        prev = next;\n        next = next->next;\n    }\n    if (prev) prev->next = cur;\n    else ctx->free_list = cur;\n    cur->next = next;\n    \n    if (next && ((u8 *)cur + cur->size) == (u8 *)next) {\n        /* merge cur to higher chunk */\n        cur->size += next->size;\n        cur->next = next->next;\n    }\n    if (prev && ((u8 *)prev + prev->size) == (u8 *)cur) {\n        /* merge cur to lower chunk */\n        prev->size += cur->size;\n        prev->next = cur->next;\n    }\n}\n\nstatic void *pool_realloc(void *ctx_ptr, void *ptr,\n                          usize old_size, usize size) {\n    pool_ctx *ctx = (pool_ctx *)ctx_ptr;\n    pool_chunk *cur = ((pool_chunk *)ptr) - 1, *prev, *next, *tmp;\n    usize free_size;\n    void *new_ptr;\n    \n    if (unlikely(size == 0 || size >= ctx->size)) return NULL;\n    size = size_align_up(size, sizeof(pool_chunk)) + sizeof(pool_chunk);\n    \n    /* reduce size */\n    if (unlikely(size <= cur->size)) {\n        free_size = cur->size - size;\n        if (free_size >= sizeof(pool_chunk) * 2) {\n            tmp = (pool_chunk *)(void *)((u8 *)cur + cur->size - free_size);\n            tmp->size = free_size;\n            pool_free(ctx_ptr, (void *)(tmp + 1));\n            cur->size -= free_size;\n        }\n        return ptr;\n    }\n    \n    /* find next and prev chunk */\n    prev = NULL;\n    next = ctx->free_list;\n    while (next && next < cur) {\n        prev = next;\n        next = next->next;\n    }\n    \n    /* merge to higher chunk if they are contiguous */\n    if ((u8 *)cur + cur->size == (u8 *)next &&\n        cur->size + next->size >= size) {\n        free_size = cur->size + next->size - size;\n        if (free_size > sizeof(pool_chunk) * 2) {\n            tmp = (pool_chunk *)(void *)((u8 *)cur + size);\n            if (prev) prev->next = tmp;\n            else ctx->free_list = tmp;\n            tmp->next = next->next;\n            tmp->size = free_size;\n            cur->size = size;\n        } else {\n            if (prev) prev->next = next->next;\n            else ctx->free_list = next->next;\n            cur->size += next->size;\n        }\n        return ptr;\n    }\n    \n    /* fallback to malloc and memcpy */\n    new_ptr = pool_malloc(ctx_ptr, size - sizeof(pool_chunk));\n    if (new_ptr) {\n        memcpy(new_ptr, ptr, cur->size - sizeof(pool_chunk));\n        pool_free(ctx_ptr, ptr);\n    }\n    return new_ptr;\n}\n\nbool yyjson_alc_pool_init(yyjson_alc *alc, void *buf, usize size) {\n    pool_chunk *chunk;\n    pool_ctx *ctx;\n    \n    if (unlikely(!alc)) return false;\n    *alc = YYJSON_NULL_ALC;\n    if (size < sizeof(pool_ctx) * 4) return false;\n    ctx = (pool_ctx *)mem_align_up(buf, sizeof(pool_ctx));\n    if (unlikely(!ctx)) return false;\n    size -= (usize)((u8 *)ctx - (u8 *)buf);\n    size = size_align_down(size, sizeof(pool_ctx));\n    \n    chunk = (pool_chunk *)(ctx + 1);\n    chunk->size = size - sizeof(pool_ctx);\n    chunk->next = NULL;\n    ctx->size = size;\n    ctx->free_list = chunk;\n    \n    alc->malloc = pool_malloc;\n    alc->realloc = pool_realloc;\n    alc->free = pool_free;\n    alc->ctx = (void *)ctx;\n    return true;\n}\n\n\n\n/*==============================================================================\n * JSON document and value\n *============================================================================*/\n\nstatic_inline void unsafe_yyjson_str_pool_release(yyjson_str_pool *pool,\n                                                  yyjson_alc *alc) {\n    yyjson_str_chunk *chunk = pool->chunks, *next;\n    while (chunk) {\n        next = chunk->next;\n        alc->free(alc->ctx, chunk);\n        chunk = next;\n    }\n}\n\nstatic_inline void unsafe_yyjson_val_pool_release(yyjson_val_pool *pool,\n                                                  yyjson_alc *alc) {\n    yyjson_val_chunk *chunk = pool->chunks, *next;\n    while (chunk) {\n        next = chunk->next;\n        alc->free(alc->ctx, chunk);\n        chunk = next;\n    }\n}\n\nbool unsafe_yyjson_str_pool_grow(yyjson_str_pool *pool,\n                                 const yyjson_alc *alc, usize len) {\n    yyjson_str_chunk *chunk;\n    usize size, max_len;\n    \n    /* create a new chunk */\n    max_len = USIZE_MAX - sizeof(yyjson_str_chunk);\n    if (unlikely(len > max_len)) return false;\n    size = len + sizeof(yyjson_str_chunk);\n    size = yyjson_max(pool->chunk_size, size);\n    chunk = (yyjson_str_chunk *)alc->malloc(alc->ctx, size);\n    if (unlikely(!chunk)) return false;\n    \n    /* insert the new chunk as the head of the linked list */\n    chunk->next = pool->chunks;\n    chunk->chunk_size = size;\n    pool->chunks = chunk;\n    pool->cur = (char *)chunk + sizeof(yyjson_str_chunk);\n    pool->end = (char *)chunk + size;\n    \n    /* the next chunk is twice the size of the current one */\n    size = yyjson_min(pool->chunk_size * 2, pool->chunk_size_max);\n    if (size < pool->chunk_size) size = pool->chunk_size_max; /* overflow */\n    pool->chunk_size = size;\n    return true;\n}\n\nbool unsafe_yyjson_val_pool_grow(yyjson_val_pool *pool,\n                                 const yyjson_alc *alc, usize count) {\n    yyjson_val_chunk *chunk;\n    usize size, max_count;\n    \n    /* create a new chunk */\n    max_count = USIZE_MAX / sizeof(yyjson_mut_val) - 1;\n    if (unlikely(count > max_count)) return false;\n    size = (count + 1) * sizeof(yyjson_mut_val);\n    size = yyjson_max(pool->chunk_size, size);\n    chunk = (yyjson_val_chunk *)alc->malloc(alc->ctx, size);\n    if (unlikely(!chunk)) return false;\n    \n    /* insert the new chunk as the head of the linked list */\n    chunk->next = pool->chunks;\n    chunk->chunk_size = size;\n    pool->chunks = chunk;\n    pool->cur = (yyjson_mut_val *)(void *)((u8 *)chunk) + 1;\n    pool->end = (yyjson_mut_val *)(void *)((u8 *)chunk + size);\n    \n    /* the next chunk is twice the size of the current one */\n    size = yyjson_min(pool->chunk_size * 2, pool->chunk_size_max);\n    if (size < pool->chunk_size) size = pool->chunk_size_max; /* overflow */\n    pool->chunk_size = size;\n    return true;\n}\n\nbool yyjson_mut_doc_set_str_pool_size(yyjson_mut_doc *doc, size_t len) {\n    usize max_size = USIZE_MAX - sizeof(yyjson_str_chunk);\n    if (!doc || !len || len > max_size) return false;\n    doc->str_pool.chunk_size = len + sizeof(yyjson_str_chunk);\n    return true;\n}\n\nbool yyjson_mut_doc_set_val_pool_size(yyjson_mut_doc *doc, size_t count) {\n    usize max_count = USIZE_MAX / sizeof(yyjson_mut_val) - 1;\n    if (!doc || !count || count > max_count) return false;\n    doc->val_pool.chunk_size = (count + 1) * sizeof(yyjson_mut_val);\n    return true;\n}\n\nvoid yyjson_mut_doc_free(yyjson_mut_doc *doc) {\n    if (doc) {\n        yyjson_alc alc = doc->alc;\n        unsafe_yyjson_str_pool_release(&doc->str_pool, &alc);\n        unsafe_yyjson_val_pool_release(&doc->val_pool, &alc);\n        alc.free(alc.ctx, doc);\n    }\n}\n\nyyjson_mut_doc *yyjson_mut_doc_new(const yyjson_alc *alc) {\n    yyjson_mut_doc *doc;\n    if (!alc) alc = &YYJSON_DEFAULT_ALC;\n    doc = (yyjson_mut_doc *)alc->malloc(alc->ctx, sizeof(yyjson_mut_doc));\n    if (!doc) return NULL;\n    memset(doc, 0, sizeof(yyjson_mut_doc));\n    \n    doc->alc = *alc;\n    doc->str_pool.chunk_size = YYJSON_MUT_DOC_STR_POOL_INIT_SIZE;\n    doc->str_pool.chunk_size_max = YYJSON_MUT_DOC_STR_POOL_MAX_SIZE;\n    doc->val_pool.chunk_size = YYJSON_MUT_DOC_VAL_POOL_INIT_SIZE;\n    doc->val_pool.chunk_size_max = YYJSON_MUT_DOC_VAL_POOL_MAX_SIZE;\n    return doc;\n}\n\nyyjson_mut_doc *yyjson_doc_mut_copy(yyjson_doc *doc, const yyjson_alc *alc) {\n    yyjson_mut_doc *m_doc;\n    yyjson_mut_val *m_val;\n    \n    if (!doc || !doc->root) return NULL;\n    m_doc = yyjson_mut_doc_new(alc);\n    if (!m_doc) return NULL;\n    m_val = yyjson_val_mut_copy(m_doc, doc->root);\n    if (!m_val) {\n        yyjson_mut_doc_free(m_doc);\n        return NULL;\n    }\n    yyjson_mut_doc_set_root(m_doc, m_val);\n    return m_doc;\n}\n\nyyjson_mut_doc *yyjson_mut_doc_mut_copy(yyjson_mut_doc *doc,\n                                        const yyjson_alc *alc) {\n    yyjson_mut_doc *m_doc;\n    yyjson_mut_val *m_val;\n    \n    if (!doc) return NULL;\n    if (!doc->root) return yyjson_mut_doc_new(alc);\n    \n    m_doc = yyjson_mut_doc_new(alc);\n    if (!m_doc) return NULL;\n    m_val = yyjson_mut_val_mut_copy(m_doc, doc->root);\n    if (!m_val) {\n        yyjson_mut_doc_free(m_doc);\n        return NULL;\n    }\n    yyjson_mut_doc_set_root(m_doc, m_val);\n    return m_doc;\n}\n\nyyjson_mut_val *yyjson_val_mut_copy(yyjson_mut_doc *m_doc,\n                                    yyjson_val *i_vals) {\n    /*\n     The immutable object or array stores all sub-values in a contiguous memory,\n     We copy them to another contiguous memory as mutable values,\n     then reconnect the mutable values with the original relationship.\n     */\n    \n    usize i_vals_len;\n    yyjson_mut_val *m_vals, *m_val;\n    yyjson_val *i_val, *i_end;\n    \n    if (!m_doc || !i_vals) return NULL;\n    i_end = unsafe_yyjson_get_next(i_vals);\n    i_vals_len = (usize)(unsafe_yyjson_get_next(i_vals) - i_vals);\n    m_vals = unsafe_yyjson_mut_val(m_doc, i_vals_len);\n    if (!m_vals) return NULL;\n    i_val = i_vals;\n    m_val = m_vals;\n    \n    for (; i_val < i_end; i_val++, m_val++) {\n        yyjson_type type = unsafe_yyjson_get_type(i_val);\n        m_val->tag = i_val->tag;\n        m_val->uni.u64 = i_val->uni.u64;\n        if (type == YYJSON_TYPE_STR || type == YYJSON_TYPE_RAW) {\n            const char *str = i_val->uni.str;\n            usize str_len = unsafe_yyjson_get_len(i_val);\n            m_val->uni.str = unsafe_yyjson_mut_strncpy(m_doc, str, str_len);\n            if (!m_val->uni.str) return NULL;\n        } else if (type == YYJSON_TYPE_ARR) {\n            usize len = unsafe_yyjson_get_len(i_val);\n            if (len > 0) {\n                yyjson_val *ii_val = i_val + 1, *ii_next;\n                yyjson_mut_val *mm_val = m_val + 1, *mm_ctn = m_val, *mm_next;\n                while (len-- > 1) {\n                    ii_next = unsafe_yyjson_get_next(ii_val);\n                    mm_next = mm_val + (ii_next - ii_val);\n                    mm_val->next = mm_next;\n                    ii_val = ii_next;\n                    mm_val = mm_next;\n                }\n                mm_val->next = mm_ctn + 1;\n                mm_ctn->uni.ptr = mm_val;\n            }\n        } else if (type == YYJSON_TYPE_OBJ) {\n            usize len = unsafe_yyjson_get_len(i_val);\n            if (len > 0) {\n                yyjson_val *ii_key = i_val + 1, *ii_nextkey;\n                yyjson_mut_val *mm_key = m_val + 1, *mm_ctn = m_val;\n                yyjson_mut_val *mm_nextkey;\n                while (len-- > 1) {\n                    ii_nextkey = unsafe_yyjson_get_next(ii_key + 1);\n                    mm_nextkey = mm_key + (ii_nextkey - ii_key);\n                    mm_key->next = mm_key + 1;\n                    mm_key->next->next = mm_nextkey;\n                    ii_key = ii_nextkey;\n                    mm_key = mm_nextkey;\n                }\n                mm_key->next = mm_key + 1;\n                mm_key->next->next = mm_ctn + 1;\n                mm_ctn->uni.ptr = mm_key;\n            }\n        }\n    }\n    \n    return m_vals;\n}\n\nstatic yyjson_mut_val *unsafe_yyjson_mut_val_mut_copy(yyjson_mut_doc *m_doc,\n                                                      yyjson_mut_val *m_vals) {\n    /*\n     The mutable object or array stores all sub-values in a circular linked\n     list, so we can traverse them in the same loop. The traversal starts from\n     the last item, continues with the first item in a list, and ends with the\n     second to last item, which needs to be linked to the last item to close the\n     circle.\n     */\n    \n    yyjson_mut_val *m_val = unsafe_yyjson_mut_val(m_doc, 1);\n    if (unlikely(!m_val)) return NULL;\n    m_val->tag = m_vals->tag;\n    \n    switch (unsafe_yyjson_get_type(m_vals)) {\n        case YYJSON_TYPE_OBJ:\n        case YYJSON_TYPE_ARR:\n            if (unsafe_yyjson_get_len(m_vals) > 0) {\n                yyjson_mut_val *last = (yyjson_mut_val *)m_vals->uni.ptr;\n                yyjson_mut_val *next = last->next, *prev;\n                prev = unsafe_yyjson_mut_val_mut_copy(m_doc, last);\n                if (!prev) return NULL;\n                m_val->uni.ptr = (void *)prev;\n                while (next != last) {\n                    prev->next = unsafe_yyjson_mut_val_mut_copy(m_doc, next);\n                    if (!prev->next) return NULL;\n                    prev = prev->next;\n                    next = next->next;\n                }\n                prev->next = (yyjson_mut_val *)m_val->uni.ptr;\n            }\n            break;\n        \n        case YYJSON_TYPE_RAW:\n        case YYJSON_TYPE_STR: {\n            const char *str = m_vals->uni.str;\n            usize str_len = unsafe_yyjson_get_len(m_vals);\n            m_val->uni.str = unsafe_yyjson_mut_strncpy(m_doc, str, str_len);\n            if (!m_val->uni.str) return NULL;\n            break;\n        }\n        \n        default:\n            m_val->uni = m_vals->uni;\n            break;\n    }\n    \n    return m_val;\n}\n\nyyjson_mut_val *yyjson_mut_val_mut_copy(yyjson_mut_doc *doc,\n                                        yyjson_mut_val *val) {\n    if (doc && val) return unsafe_yyjson_mut_val_mut_copy(doc, val);\n    return NULL;\n}\n\n/* Count the number of values and the total length of the strings. */\nstatic void yyjson_mut_stat(yyjson_mut_val *val,\n                            usize *val_sum, usize *str_sum) {\n    yyjson_type type = unsafe_yyjson_get_type(val);\n    *val_sum += 1;\n    if (type == YYJSON_TYPE_ARR || type == YYJSON_TYPE_OBJ) {\n        yyjson_mut_val *child = (yyjson_mut_val *)val->uni.ptr;\n        usize len = unsafe_yyjson_get_len(val), i;\n        len <<= (u8)(type == YYJSON_TYPE_OBJ);\n        *val_sum += len;\n        for (i = 0; i < len; i++) {\n            yyjson_type stype = unsafe_yyjson_get_type(child);\n            if (stype == YYJSON_TYPE_STR || stype == YYJSON_TYPE_RAW) {\n                *str_sum += unsafe_yyjson_get_len(child) + 1;\n            } else if (stype == YYJSON_TYPE_ARR || stype == YYJSON_TYPE_OBJ) {\n                yyjson_mut_stat(child, val_sum, str_sum);\n                *val_sum -= 1;\n            }\n            child = child->next;\n        }\n    } else if (type == YYJSON_TYPE_STR || type == YYJSON_TYPE_RAW) {\n        *str_sum += unsafe_yyjson_get_len(val) + 1;\n    }\n}\n\n/* Copy mutable values to immutable value pool. */\nstatic usize yyjson_imut_copy(yyjson_val **val_ptr, char **buf_ptr,\n                              yyjson_mut_val *mval) {\n    yyjson_val *val = *val_ptr;\n    yyjson_type type = unsafe_yyjson_get_type(mval);\n    if (type == YYJSON_TYPE_ARR || type == YYJSON_TYPE_OBJ) {\n        yyjson_mut_val *child = (yyjson_mut_val *)mval->uni.ptr;\n        usize len = unsafe_yyjson_get_len(mval), i;\n        usize val_sum = 1;\n        if (type == YYJSON_TYPE_OBJ) {\n            if (len) child = child->next->next;\n            len <<= 1;\n        } else {\n            if (len) child = child->next;\n        }\n        *val_ptr = val + 1;\n        for (i = 0; i < len; i++) {\n            val_sum += yyjson_imut_copy(val_ptr, buf_ptr, child);\n            child = child->next;\n        }\n        val->tag = mval->tag;\n        val->uni.ofs = val_sum * sizeof(yyjson_val);\n        return val_sum;\n    } else if (type == YYJSON_TYPE_STR || type == YYJSON_TYPE_RAW) {\n        char *buf = *buf_ptr;\n        usize len = unsafe_yyjson_get_len(mval);\n        memcpy((void *)buf, (const void *)mval->uni.str, len);\n        buf[len] = '\\0';\n        val->tag = mval->tag;\n        val->uni.str = buf;\n        *val_ptr = val + 1;\n        *buf_ptr = buf + len + 1;\n        return 1;\n    } else {\n        val->tag = mval->tag;\n        val->uni = mval->uni;\n        *val_ptr = val + 1;\n        return 1;\n    }\n}\n\nyyjson_doc *yyjson_mut_doc_imut_copy(yyjson_mut_doc *mdoc,\n                                     const yyjson_alc *alc) {\n    if (!mdoc) return NULL;\n    return yyjson_mut_val_imut_copy(mdoc->root, alc);\n}\n\nyyjson_doc *yyjson_mut_val_imut_copy(yyjson_mut_val *mval,\n                                     const yyjson_alc *alc) {\n    usize val_num = 0, str_sum = 0, hdr_size, buf_size;\n    yyjson_doc *doc = NULL;\n    yyjson_val *val_hdr = NULL;\n    \n    /* This value should be NULL here. Setting a non-null value suppresses\n       warning from the clang analyzer. */\n    char *str_hdr = (char *)(void *)&str_sum;\n    if (!mval) return NULL;\n    if (!alc) alc = &YYJSON_DEFAULT_ALC;\n    \n    /* traverse the input value to get pool size */\n    yyjson_mut_stat(mval, &val_num, &str_sum);\n    \n    /* create doc and val pool */\n    hdr_size = size_align_up(sizeof(yyjson_doc), sizeof(yyjson_val));\n    buf_size = hdr_size + val_num * sizeof(yyjson_val);\n    doc = (yyjson_doc *)alc->malloc(alc->ctx, buf_size);\n    if (!doc) return NULL;\n    memset(doc, 0, sizeof(yyjson_doc));\n    val_hdr = (yyjson_val *)(void *)((char *)(void *)doc + hdr_size);\n    doc->root = val_hdr;\n    doc->alc = *alc;\n    \n    /* create str pool */\n    if (str_sum > 0) {\n        str_hdr = (char *)alc->malloc(alc->ctx, str_sum);\n        doc->str_pool = str_hdr;\n        if (!str_hdr) {\n            alc->free(alc->ctx, (void *)doc);\n            return NULL;\n        }\n    }\n    \n    /* copy vals and strs */\n    doc->val_read = yyjson_imut_copy(&val_hdr, &str_hdr, mval);\n    doc->dat_read = str_sum + 1;\n    return doc;\n}\n\nstatic_inline bool unsafe_yyjson_num_equals(void *lhs, void *rhs) {\n    yyjson_val_uni *luni = &((yyjson_val *)lhs)->uni;\n    yyjson_val_uni *runi = &((yyjson_val *)rhs)->uni;\n    yyjson_subtype lt = unsafe_yyjson_get_subtype(lhs);\n    yyjson_subtype rt = unsafe_yyjson_get_subtype(rhs);\n    if (lt == rt)\n        return luni->u64 == runi->u64;\n    if (lt == YYJSON_SUBTYPE_SINT && rt == YYJSON_SUBTYPE_UINT)\n        return luni->i64 >= 0 && luni->u64 == runi->u64;\n    if (lt == YYJSON_SUBTYPE_UINT && rt == YYJSON_SUBTYPE_SINT)\n        return runi->i64 >= 0 && luni->u64 == runi->u64;\n    return false;\n}\n\nstatic_inline bool unsafe_yyjson_str_equals(void *lhs, void *rhs) {\n    usize len = unsafe_yyjson_get_len(lhs);\n    if (len != unsafe_yyjson_get_len(rhs)) return false;\n    return !memcmp(unsafe_yyjson_get_str(lhs),\n                   unsafe_yyjson_get_str(rhs), len);\n}\n\nbool unsafe_yyjson_equals(yyjson_val *lhs, yyjson_val *rhs) {\n    yyjson_type type = unsafe_yyjson_get_type(lhs);\n    if (type != unsafe_yyjson_get_type(rhs)) return false;\n    \n    switch (type) {\n        case YYJSON_TYPE_OBJ: {\n            usize len = unsafe_yyjson_get_len(lhs);\n            if (len != unsafe_yyjson_get_len(rhs)) return false;\n            if (len > 0) {\n                yyjson_obj_iter iter;\n                yyjson_obj_iter_init(rhs, &iter);\n                lhs = unsafe_yyjson_get_first(lhs);\n                while (len-- > 0) {\n                    rhs = yyjson_obj_iter_getn(&iter, lhs->uni.str,\n                                               unsafe_yyjson_get_len(lhs));\n                    if (!rhs || !unsafe_yyjson_equals(lhs + 1, rhs))\n                        return false;\n                    lhs = unsafe_yyjson_get_next(lhs + 1);\n                }\n            }\n            /* yyjson allows duplicate keys, so the check may be inaccurate */\n            return true;\n        }\n        \n        case YYJSON_TYPE_ARR: {\n            usize len = unsafe_yyjson_get_len(lhs);\n            if (len != unsafe_yyjson_get_len(rhs)) return false;\n            if (len > 0) {\n                lhs = unsafe_yyjson_get_first(lhs);\n                rhs = unsafe_yyjson_get_first(rhs);\n                while (len-- > 0) {\n                    if (!unsafe_yyjson_equals(lhs, rhs)) return false;\n                    lhs = unsafe_yyjson_get_next(lhs);\n                    rhs = unsafe_yyjson_get_next(rhs);\n                }\n            }\n            return true;\n        }\n        \n        case YYJSON_TYPE_NUM:\n            return unsafe_yyjson_num_equals(lhs, rhs);\n        \n        case YYJSON_TYPE_RAW:\n        case YYJSON_TYPE_STR:\n            return unsafe_yyjson_str_equals(lhs, rhs);\n        \n        case YYJSON_TYPE_NULL:\n        case YYJSON_TYPE_BOOL:\n            return lhs->tag == rhs->tag;\n        \n        default:\n            return false;\n    }\n}\n\nbool unsafe_yyjson_mut_equals(yyjson_mut_val *lhs, yyjson_mut_val *rhs) {\n    yyjson_type type = unsafe_yyjson_get_type(lhs);\n    if (type != unsafe_yyjson_get_type(rhs)) return false;\n    \n    switch (type) {\n        case YYJSON_TYPE_OBJ: {\n            usize len = unsafe_yyjson_get_len(lhs);\n            if (len != unsafe_yyjson_get_len(rhs)) return false;\n            if (len > 0) {\n                yyjson_mut_obj_iter iter;\n                yyjson_mut_obj_iter_init(rhs, &iter);\n                lhs = (yyjson_mut_val *)lhs->uni.ptr;\n                while (len-- > 0) {\n                    rhs = yyjson_mut_obj_iter_getn(&iter, lhs->uni.str,\n                                                   unsafe_yyjson_get_len(lhs));\n                    if (!rhs || !unsafe_yyjson_mut_equals(lhs->next, rhs))\n                        return false;\n                    lhs = lhs->next->next;\n                }\n            }\n            /* yyjson allows duplicate keys, so the check may be inaccurate */\n            return true;\n        }\n        \n        case YYJSON_TYPE_ARR: {\n            usize len = unsafe_yyjson_get_len(lhs);\n            if (len != unsafe_yyjson_get_len(rhs)) return false;\n            if (len > 0) {\n                lhs = (yyjson_mut_val *)lhs->uni.ptr;\n                rhs = (yyjson_mut_val *)rhs->uni.ptr;\n                while (len-- > 0) {\n                    if (!unsafe_yyjson_mut_equals(lhs, rhs)) return false;\n                    lhs = lhs->next;\n                    rhs = rhs->next;\n                }\n            }\n            return true;\n        }\n        \n        case YYJSON_TYPE_NUM:\n            return unsafe_yyjson_num_equals(lhs, rhs);\n        \n        case YYJSON_TYPE_RAW:\n        case YYJSON_TYPE_STR:\n            return unsafe_yyjson_str_equals(lhs, rhs);\n        \n        case YYJSON_TYPE_NULL:\n        case YYJSON_TYPE_BOOL:\n            return lhs->tag == rhs->tag;\n        \n        default:\n            return false;\n    }\n}\n\n\n\n#if !YYJSON_DISABLE_UTILS\n\n/*==============================================================================\n * JSON Pointer API (RFC 6901)\n *============================================================================*/\n\n/**\n Get a token from JSON pointer string.\n @param ptr [in,out]\n                in:  string that points to current token prefix `/`\n                out: string that points to next token prefix `/`, or string end\n @param end [in] end of the entire JSON Pointer string\n @param len [out] unescaped token length\n @param esc [out] number of escaped characters in this token\n @return head of the token, or NULL if syntax error\n */\nstatic_inline const char *ptr_next_token(const char **ptr, const char *end,\n                                         usize *len, usize *esc) {\n    const char *hdr = *ptr + 1;\n    const char *cur = hdr;\n    /* skip unescaped characters */\n    while (cur < end && *cur != '/' && *cur != '~') cur++;\n    if (likely(cur == end || *cur != '~')) {\n        /* no escaped characters, return */\n        *ptr = cur;\n        *len = (usize)(cur - hdr);\n        *esc = 0;\n        return hdr;\n    } else {\n        /* handle escaped characters */\n        usize esc_num = 0;\n        while (cur < end && *cur != '/') {\n            if (*cur++ == '~') {\n                if (cur == end || (*cur != '0' && *cur != '1')) {\n                    *ptr = cur - 1;\n                    return NULL;\n                }\n                esc_num++;\n            }\n        }\n        *ptr = cur;\n        *len = (usize)(cur - hdr) - esc_num;\n        *esc = esc_num;\n        return hdr;\n    }\n}\n\n/**\n Convert token string to index.\n @param cur [in]  token head\n @param len [in]  token length\n @param idx [out] the index number, or USIZE_MAX if token is '-'\n @return true if token is a valid array index\n */\nstatic_inline bool ptr_token_to_idx(const char *cur, usize len, usize *idx) {\n    const char *end = cur + len;\n    usize num = 0, add;\n    if (unlikely(len == 0 || len > USIZE_SAFE_DIG)) return false;\n    if (*cur == '0') {\n        if (unlikely(len > 1)) return false;\n        *idx = 0;\n        return true;\n    }\n    if (*cur == '-') {\n        if (unlikely(len > 1)) return false;\n        *idx = USIZE_MAX;\n        return true;\n    }\n    for (; cur < end && (add = (usize)((u8)*cur - (u8)'0')) <= 9; cur++) {\n        num = num * 10 + add;\n    }\n    if (unlikely(num == 0 || cur < end)) return false;\n    *idx = num;\n    return true;\n}\n\n/**\n Compare JSON key with token.\n @param key a string key (yyjson_val or yyjson_mut_val)\n @param tag the expected string key tag\n @param token a JSON pointer token\n @param len unescaped token length\n @param esc number of escaped characters in this token\n @return true if `str` is equals to `token`\n */\nstatic_inline bool ptr_token_eq(void *key, u64 tag,\n                                const char *token, usize len, usize esc) {\n    yyjson_val *val = (yyjson_val *)key;\n    if (val->tag != tag) return false;\n    if (likely(!esc)) {\n        return memcmp(val->uni.str, token, len) == 0;\n    } else {\n        const char *str = val->uni.str;\n        for (; len-- > 0; token++, str++) {\n            if (*token == '~') {\n                if (*str != (*++token == '0' ? '~' : '/')) return false;\n            } else {\n                if (*str != *token) return false;\n            }\n        }\n        return true;\n    }\n}\n\n/**\n Get a value from array by token.\n @param arr   an array, should not be NULL or non-array type\n @param token a JSON pointer token\n @param len   unescaped token length\n @param esc   number of escaped characters in this token\n @return value at index, or NULL if token is not index or index is out of range\n */\nstatic_inline yyjson_val *ptr_arr_get(yyjson_val *arr, const char *token,\n                                      usize len, usize esc) {\n    yyjson_val *val = unsafe_yyjson_get_first(arr);\n    usize num = unsafe_yyjson_get_len(arr), idx;\n    if (unlikely(num == 0)) return NULL;\n    if (unlikely(!ptr_token_to_idx(token, len, &idx))) return NULL;\n    if (unlikely(idx >= num)) return NULL;\n    if (unsafe_yyjson_arr_is_flat(arr)) {\n        return val + idx;\n    } else {\n        while (idx-- > 0) val = unsafe_yyjson_get_next(val);\n        return val;\n    }\n}\n\n/**\n Get a value from object by token.\n @param obj   [in] an object, should not be NULL or non-object type\n @param token [in] a JSON pointer token\n @param len   [in] unescaped token length\n @param esc   [in] number of escaped characters in this token\n @return value associated with the token, or NULL if no value\n */\nstatic_inline yyjson_val *ptr_obj_get(yyjson_val *obj, const char *token,\n                                      usize len, usize esc) {\n    u64 tag = (((u64)len) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    yyjson_val *key = unsafe_yyjson_get_first(obj);\n    usize num = unsafe_yyjson_get_len(obj);\n    if (unlikely(num == 0)) return NULL;\n    for (; num > 0; num--, key = unsafe_yyjson_get_next(key + 1)) {\n        if (ptr_token_eq(key, tag, token, len, esc)) return key + 1;\n    }\n    return NULL;\n}\n\n/**\n Get a value from array by token.\n @param arr   [in] an array, should not be NULL or non-array type\n @param token [in] a JSON pointer token\n @param len   [in] unescaped token length\n @param esc   [in] number of escaped characters in this token\n @param pre   [out] previous (sibling) value of the returned value\n @param last  [out] whether index is last\n @return value at index, or NULL if token is not index or index is out of range\n */\nstatic_inline yyjson_mut_val *ptr_mut_arr_get(yyjson_mut_val *arr,\n                                              const char *token,\n                                              usize len, usize esc,\n                                              yyjson_mut_val **pre,\n                                              bool *last) {\n    yyjson_mut_val *val = (yyjson_mut_val *)arr->uni.ptr; /* last (tail) */\n    usize num = unsafe_yyjson_get_len(arr), idx;\n    if (last) *last = false;\n    if (pre) *pre = NULL;\n    if (unlikely(num == 0)) {\n        if (last && len == 1 && (*token == '0' || *token == '-')) *last = true;\n        return NULL;\n    }\n    if (unlikely(!ptr_token_to_idx(token, len, &idx))) return NULL;\n    if (last) *last = (idx == num || idx == USIZE_MAX);\n    if (unlikely(idx >= num)) return NULL;\n    while (idx-- > 0) val = val->next;\n    *pre = val;\n    return val->next;\n}\n\n/**\n Get a value from object by token.\n @param obj   [in] an object, should not be NULL or non-object type\n @param token [in] a JSON pointer token\n @param len   [in] unescaped token length\n @param esc   [in] number of escaped characters in this token\n @param pre   [out] previous (sibling) key of the returned value's key\n @return value associated with the token, or NULL if no value\n */\nstatic_inline yyjson_mut_val *ptr_mut_obj_get(yyjson_mut_val *obj,\n                                              const char *token,\n                                              usize len, usize esc,\n                                              yyjson_mut_val **pre) {\n    u64 tag = (((u64)len) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    yyjson_mut_val *pre_key = (yyjson_mut_val *)obj->uni.ptr, *key;\n    usize num = unsafe_yyjson_get_len(obj);\n    if (pre) *pre = NULL;\n    if (unlikely(num == 0)) return NULL;\n    for (; num > 0; num--, pre_key = key) {\n        key = pre_key->next->next;\n        if (ptr_token_eq(key, tag, token, len, esc)) {\n            *pre = pre_key;\n            return key->next;\n        }\n    }\n    return NULL;\n}\n\n/**\n Create a string value with JSON pointer token.\n @param token [in] a JSON pointer token\n @param len   [in] unescaped token length\n @param esc   [in] number of escaped characters in this token\n @param doc   [in] used for memory allocation when creating value\n @return new string value, or NULL if memory allocation failed\n */\nstatic_inline yyjson_mut_val *ptr_new_key(const char *token,\n                                          usize len, usize esc,\n                                          yyjson_mut_doc *doc) {\n    const char *src = token;\n    if (likely(!esc)) {\n        return yyjson_mut_strncpy(doc, src, len);\n    } else {\n        const char *end = src + len + esc;\n        char *dst = unsafe_yyjson_mut_str_alc(doc, len + esc);\n        char *str = dst;\n        if (unlikely(!dst)) return NULL;\n        for (; src < end; src++, dst++) {\n            if (*src != '~') *dst = *src;\n            else *dst = (*++src == '0' ? '~' : '/');\n        }\n        *dst = '\\0';\n        return yyjson_mut_strn(doc, str, len);\n    }\n}\n\n/* macros for yyjson_ptr */\n#define return_err(_ret, _code, _pos, _msg) do { \\\n    if (err) { \\\n        err->code = YYJSON_PTR_ERR_##_code; \\\n        err->msg = _msg; \\\n        err->pos = (usize)(_pos); \\\n    } \\\n    return _ret; \\\n} while (false)\n\n#define return_err_resolve(_ret, _pos) \\\n    return_err(_ret, RESOLVE, _pos, \"JSON pointer cannot be resolved\")\n#define return_err_syntax(_ret, _pos) \\\n    return_err(_ret, SYNTAX, _pos, \"invalid escaped character\")\n#define return_err_alloc(_ret) \\\n    return_err(_ret, MEMORY_ALLOCATION, 0, \"failed to create value\")\n\nyyjson_val *unsafe_yyjson_ptr_getx(yyjson_val *val,\n                                   const char *ptr, size_t ptr_len,\n                                   yyjson_ptr_err *err) {\n    \n    const char *hdr = ptr, *end = ptr + ptr_len, *token;\n    usize len, esc;\n    yyjson_type type;\n    \n    while (true) {\n        token = ptr_next_token(&ptr, end, &len, &esc);\n        if (unlikely(!token)) return_err_syntax(NULL, ptr - hdr);\n        type = unsafe_yyjson_get_type(val);\n        if (type == YYJSON_TYPE_OBJ) {\n            val = ptr_obj_get(val, token, len, esc);\n        } else if (type == YYJSON_TYPE_ARR) {\n            val = ptr_arr_get(val, token, len, esc);\n        } else {\n            val = NULL;\n        }\n        if (!val) return_err_resolve(NULL, token - hdr);\n        if (ptr == end) return val;\n    }\n}\n\nyyjson_mut_val *unsafe_yyjson_mut_ptr_getx(yyjson_mut_val *val,\n                                           const char *ptr,\n                                           size_t ptr_len,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err) {\n    \n    const char *hdr = ptr, *end = ptr + ptr_len, *token;\n    usize len, esc;\n    yyjson_mut_val *ctn, *pre = NULL;\n    yyjson_type type;\n    bool idx_is_last = false;\n    \n    while (true) {\n        token = ptr_next_token(&ptr, end, &len, &esc);\n        if (unlikely(!token)) return_err_syntax(NULL, ptr - hdr);\n        ctn = val;\n        type = unsafe_yyjson_get_type(val);\n        if (type == YYJSON_TYPE_OBJ) {\n            val = ptr_mut_obj_get(val, token, len, esc, &pre);\n        } else if (type == YYJSON_TYPE_ARR) {\n            val = ptr_mut_arr_get(val, token, len, esc, &pre, &idx_is_last);\n        } else {\n            val = NULL;\n        }\n        if (ctx && (ptr == end)) {\n            if (type == YYJSON_TYPE_OBJ ||\n                (type == YYJSON_TYPE_ARR && (val || idx_is_last))) {\n                ctx->ctn = ctn;\n                ctx->pre = pre;\n            }\n        }\n        if (!val) return_err_resolve(NULL, token - hdr);\n        if (ptr == end) return val;\n    }\n}\n\nbool unsafe_yyjson_mut_ptr_putx(yyjson_mut_val *val,\n                                const char *ptr, size_t ptr_len,\n                                yyjson_mut_val *new_val,\n                                yyjson_mut_doc *doc,\n                                bool create_parent, bool insert_new,\n                                yyjson_ptr_ctx *ctx,\n                                yyjson_ptr_err *err) {\n    \n    const char *hdr = ptr, *end = ptr + ptr_len, *token;\n    usize token_len, esc, ctn_len;\n    yyjson_mut_val *ctn, *key, *pre = NULL;\n    yyjson_mut_val *sep_ctn = NULL, *sep_key = NULL, *sep_val = NULL;\n    yyjson_type ctn_type;\n    bool idx_is_last = false;\n    \n    /* skip exist parent nodes */\n    while (true) {\n        token = ptr_next_token(&ptr, end, &token_len, &esc);\n        if (unlikely(!token)) return_err_syntax(false, ptr - hdr);\n        ctn = val;\n        ctn_type = unsafe_yyjson_get_type(ctn);\n        if (ctn_type == YYJSON_TYPE_OBJ) {\n            val = ptr_mut_obj_get(ctn, token, token_len, esc, &pre);\n        } else if (ctn_type == YYJSON_TYPE_ARR) {\n            val = ptr_mut_arr_get(ctn, token, token_len, esc, &pre,\n                                  &idx_is_last);\n        } else return_err_resolve(false, token - hdr);\n        if (!val) break;\n        if (ptr == end) break; /* is last token */\n    }\n    \n    /* create parent nodes if not exist */\n    if (unlikely(ptr != end)) { /* not last token */\n        if (!create_parent) return_err_resolve(false, token - hdr);\n        \n        /* add value at last index if container is array */\n        if (ctn_type == YYJSON_TYPE_ARR) {\n            if (!idx_is_last || !insert_new) {\n                return_err_resolve(false, token - hdr);\n            }\n            val = yyjson_mut_obj(doc);\n            if (!val) return_err_alloc(false);\n            \n            /* delay attaching until all operations are completed */\n            sep_ctn = ctn;\n            sep_key = NULL;\n            sep_val = val;\n            \n            /* move to next token */\n            ctn = val;\n            val = NULL;\n            ctn_type = YYJSON_TYPE_OBJ;\n            token = ptr_next_token(&ptr, end, &token_len, &esc);\n            if (unlikely(!token)) return_err_resolve(false, token - hdr);\n        }\n        \n        /* container is object, create parent nodes */\n        while (ptr != end) { /* not last token */\n            key = ptr_new_key(token, token_len, esc, doc);\n            if (!key) return_err_alloc(false);\n            val = yyjson_mut_obj(doc);\n            if (!val) return_err_alloc(false);\n            \n            /* delay attaching until all operations are completed */\n            if (!sep_ctn) {\n                sep_ctn = ctn;\n                sep_key = key;\n                sep_val = val;\n            } else {\n                yyjson_mut_obj_add(ctn, key, val);\n            }\n            \n            /* move to next token */\n            ctn = val;\n            val = NULL;\n            token = ptr_next_token(&ptr, end, &token_len, &esc);\n            if (unlikely(!token)) return_err_syntax(false, ptr - hdr);\n        }\n    }\n    \n    /* JSON pointer is resolved, insert or replace target value */\n    ctn_len = unsafe_yyjson_get_len(ctn);\n    if (ctn_type == YYJSON_TYPE_OBJ) {\n        if (ctx) ctx->ctn = ctn;\n        if (!val || insert_new) {\n            /* insert new key-value pair */\n            key = ptr_new_key(token, token_len, esc, doc);\n            if (unlikely(!key)) return_err_alloc(false);\n            if (ctx) ctx->pre = ctn_len ? (yyjson_mut_val *)ctn->uni.ptr : key;\n            unsafe_yyjson_mut_obj_add(ctn, key, new_val, ctn_len);\n        } else {\n            /* replace exist value */\n            key = pre->next->next;\n            if (ctx) ctx->pre = pre;\n            if (ctx) ctx->old = val;\n            yyjson_mut_obj_put(ctn, key, new_val);\n        }\n    } else {\n        /* array */\n        if (ctx && (val || idx_is_last)) ctx->ctn = ctn;\n        if (insert_new) {\n            /* append new value */\n            if (val) {\n                pre->next = new_val;\n                new_val->next = val;\n                if (ctx) ctx->pre = pre;\n                unsafe_yyjson_set_len(ctn, ctn_len + 1);\n            } else if (idx_is_last) {\n                if (ctx) ctx->pre = ctn_len ?\n                    (yyjson_mut_val *)ctn->uni.ptr : new_val;\n                yyjson_mut_arr_append(ctn, new_val);\n            } else {\n                return_err_resolve(false, token - hdr);\n            }\n        } else {\n            /* replace exist value */\n            if (!val) return_err_resolve(false, token - hdr);\n            if (ctn_len > 1) {\n                new_val->next = val->next;\n                pre->next = new_val;\n                if (ctn->uni.ptr == val) ctn->uni.ptr = new_val;\n            } else {\n                new_val->next = new_val;\n                ctn->uni.ptr = new_val;\n                pre = new_val;\n            }\n            if (ctx) ctx->pre = pre;\n            if (ctx) ctx->old = val;\n        }\n    }\n    \n    /* all operations are completed, attach the new components to the target */\n    if (unlikely(sep_ctn)) {\n        if (sep_key) yyjson_mut_obj_add(sep_ctn, sep_key, sep_val);\n        else yyjson_mut_arr_append(sep_ctn, sep_val);\n    }\n    return true;\n}\n\nyyjson_mut_val *unsafe_yyjson_mut_ptr_replacex(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err) {\n    \n    yyjson_mut_val *cur_val;\n    yyjson_ptr_ctx cur_ctx;\n    memset(&cur_ctx, 0, sizeof(cur_ctx));\n    if (!ctx) ctx = &cur_ctx;\n    cur_val = unsafe_yyjson_mut_ptr_getx(val, ptr, len, ctx, err);\n    if (!cur_val) return NULL;\n    \n    if (yyjson_mut_is_obj(ctx->ctn)) {\n        yyjson_mut_val *key = ctx->pre->next->next;\n        yyjson_mut_obj_put(ctx->ctn, key, new_val);\n    } else {\n        yyjson_ptr_ctx_replace(ctx, new_val);\n    }\n    ctx->old = cur_val;\n    return cur_val;\n}\n\nyyjson_mut_val *unsafe_yyjson_mut_ptr_removex(yyjson_mut_val *val,\n                                              const char *ptr,\n                                              size_t len,\n                                              yyjson_ptr_ctx *ctx,\n                                              yyjson_ptr_err *err) {\n    yyjson_mut_val *cur_val;\n    yyjson_ptr_ctx cur_ctx;\n    memset(&cur_ctx, 0, sizeof(cur_ctx));\n    if (!ctx) ctx = &cur_ctx;\n    cur_val = unsafe_yyjson_mut_ptr_getx(val, ptr, len, ctx, err);\n    if (cur_val) {\n        if (yyjson_mut_is_obj(ctx->ctn)) {\n            yyjson_mut_val *key = ctx->pre->next->next;\n            yyjson_mut_obj_put(ctx->ctn, key, NULL);\n        } else {\n            yyjson_ptr_ctx_remove(ctx);\n        }\n        ctx->pre = NULL;\n        ctx->old = cur_val;\n    }\n    return cur_val;\n}\n\n/* macros for yyjson_ptr */\n#undef return_err\n#undef return_err_resolve\n#undef return_err_syntax\n#undef return_err_alloc\n\n\n\n/*==============================================================================\n * JSON Patch API (RFC 6902)\n *============================================================================*/\n\n/* JSON Patch operation */\ntypedef enum patch_op {\n    PATCH_OP_ADD,       /* path, value */\n    PATCH_OP_REMOVE,    /* path */\n    PATCH_OP_REPLACE,   /* path, value */\n    PATCH_OP_MOVE,      /* from, path */\n    PATCH_OP_COPY,      /* from, path */\n    PATCH_OP_TEST,      /* path, value */\n    PATCH_OP_NONE       /* invalid */\n} patch_op;\n\nstatic patch_op patch_op_get(yyjson_val *op) {\n    const char *str = op->uni.str;\n    switch (unsafe_yyjson_get_len(op)) {\n        case 3:\n            if (!memcmp(str, \"add\", 3)) return PATCH_OP_ADD;\n            return PATCH_OP_NONE;\n        case 4:\n            if (!memcmp(str, \"move\", 4)) return PATCH_OP_MOVE;\n            if (!memcmp(str, \"copy\", 4)) return PATCH_OP_COPY;\n            if (!memcmp(str, \"test\", 4)) return PATCH_OP_TEST;\n            return PATCH_OP_NONE;\n        case 6:\n            if (!memcmp(str, \"remove\", 6)) return PATCH_OP_REMOVE;\n            return PATCH_OP_NONE;\n        case 7:\n            if (!memcmp(str, \"replace\", 7)) return PATCH_OP_REPLACE;\n            return PATCH_OP_NONE;\n        default:\n            return PATCH_OP_NONE;\n    }\n}\n\n/* macros for yyjson_patch */\n#define return_err(_code, _msg) do { \\\n    if (err->ptr.code == YYJSON_PTR_ERR_MEMORY_ALLOCATION) { \\\n        err->code = YYJSON_PATCH_ERROR_MEMORY_ALLOCATION; \\\n        err->msg = _msg; \\\n        memset(&err->ptr, 0, sizeof(yyjson_ptr_err)); \\\n    } else { \\\n        err->code = YYJSON_PATCH_ERROR_##_code; \\\n        err->msg = _msg; \\\n        err->idx = iter.idx ? iter.idx - 1 : 0; \\\n    } \\\n    return NULL; \\\n} while (false)\n\n#define return_err_copy() \\\n    return_err(MEMORY_ALLOCATION, \"failed to copy value\")\n#define return_err_key(_key) \\\n    return_err(MISSING_KEY, \"missing key \" _key)\n#define return_err_val(_key) \\\n    return_err(INVALID_MEMBER, \"invalid member \" _key)\n\n#define ptr_get(_ptr) yyjson_mut_ptr_getx( \\\n    root, _ptr->uni.str, _ptr##_len, NULL, &err->ptr)\n#define ptr_add(_ptr, _val) yyjson_mut_ptr_addx( \\\n    root, _ptr->uni.str, _ptr##_len, _val, doc, false, NULL, &err->ptr)\n#define ptr_remove(_ptr) yyjson_mut_ptr_removex( \\\n    root, _ptr->uni.str, _ptr##_len, NULL, &err->ptr)\n#define ptr_replace(_ptr, _val)yyjson_mut_ptr_replacex( \\\n    root, _ptr->uni.str, _ptr##_len, _val, NULL, &err->ptr)\n    \nyyjson_mut_val *yyjson_patch(yyjson_mut_doc *doc,\n                             yyjson_val *orig,\n                             yyjson_val *patch,\n                             yyjson_patch_err *err) {\n\n    yyjson_mut_val *root;\n    yyjson_val *obj;\n    yyjson_arr_iter iter;\n    yyjson_patch_err err_tmp;\n    if (!err) err = &err_tmp;\n    memset(err, 0, sizeof(*err));\n    memset(&iter, 0, sizeof(iter));\n    \n    if (unlikely(!doc || !orig || !patch)) {\n        return_err(INVALID_PARAMETER, \"input parameter is NULL\");\n    }\n    if (unlikely(!yyjson_is_arr(patch))) {\n        return_err(INVALID_PARAMETER, \"input patch is not array\");\n    }\n    root = yyjson_val_mut_copy(doc, orig);\n    if (unlikely(!root)) return_err_copy();\n    \n    /* iterate through the patch array */\n    yyjson_arr_iter_init(patch, &iter);\n    while ((obj = yyjson_arr_iter_next(&iter))) {\n        patch_op op_enum;\n        yyjson_val *op, *path, *from = NULL, *value;\n        yyjson_mut_val *val = NULL, *test;\n        usize path_len, from_len = 0;\n        if (unlikely(!unsafe_yyjson_is_obj(obj))) {\n            return_err(INVALID_OPERATION, \"JSON patch operation is not object\");\n        }\n        \n        /* get required member: op */\n        op = yyjson_obj_get(obj, \"op\");\n        if (unlikely(!op)) return_err_key(\"`op`\");\n        if (unlikely(!yyjson_is_str(op))) return_err_val(\"`op`\");\n        op_enum = patch_op_get(op);\n        \n        /* get required member: path */\n        path = yyjson_obj_get(obj, \"path\");\n        if (unlikely(!path)) return_err_key(\"`path`\");\n        if (unlikely(!yyjson_is_str(path))) return_err_val(\"`path`\");\n        path_len = unsafe_yyjson_get_len(path);\n        \n        /* get required member: value, from */\n        switch (op_enum) {\n            case PATCH_OP_ADD: case PATCH_OP_REPLACE: case PATCH_OP_TEST:\n                value = yyjson_obj_get(obj, \"value\");\n                if (unlikely(!value)) return_err_key(\"`value`\");\n                val = yyjson_val_mut_copy(doc, value);\n                if (unlikely(!val)) return_err_copy();\n                break;\n            case PATCH_OP_MOVE: case PATCH_OP_COPY:\n                from = yyjson_obj_get(obj, \"from\");\n                if (unlikely(!from)) return_err_key(\"`from`\");\n                if (unlikely(!yyjson_is_str(from))) return_err_val(\"`from`\");\n                from_len = unsafe_yyjson_get_len(from);\n                break;\n            default:\n                break;\n        }\n        \n        /* perform an operation */\n        switch (op_enum) {\n            case PATCH_OP_ADD: /* add(path, val) */\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_REMOVE: /* remove(path) */\n                if (unlikely(!ptr_remove(path))) {\n                    return_err(POINTER, \"failed to remove `path`\");\n                }\n                break;\n            case PATCH_OP_REPLACE: /* replace(path, val) */\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_replace(path, val))) {\n                    return_err(POINTER, \"failed to replace `path`\");\n                }\n                break;\n            case PATCH_OP_MOVE: /* val = remove(from), add(path, val) */\n                if (unlikely(from_len == 0 && path_len == 0)) break;\n                val = ptr_remove(from);\n                if (unlikely(!val)) {\n                    return_err(POINTER, \"failed to remove `from`\");\n                }\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_COPY: /* val = get(from).copy, add(path, val) */\n                val = ptr_get(from);\n                if (unlikely(!val)) {\n                    return_err(POINTER, \"failed to get `from`\");\n                }\n                if (unlikely(path_len == 0)) { root = val; break; }\n                val = yyjson_mut_val_mut_copy(doc, val);\n                if (unlikely(!val)) return_err_copy();\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_TEST: /* test = get(path), test.eq(val) */\n                test = ptr_get(path);\n                if (unlikely(!test)) {\n                    return_err(POINTER, \"failed to get `path`\");\n                }\n                if (unlikely(!yyjson_mut_equals(val, test))) {\n                    return_err(EQUAL, \"failed to test equal\");\n                }\n                break;\n            default:\n                return_err(INVALID_MEMBER, \"unsupported `op`\");\n        }\n    }\n    return root;\n}\n\nyyjson_mut_val *yyjson_mut_patch(yyjson_mut_doc *doc,\n                                 yyjson_mut_val *orig,\n                                 yyjson_mut_val *patch,\n                                 yyjson_patch_err *err) {\n    yyjson_mut_val *root, *obj;\n    yyjson_mut_arr_iter iter;\n    yyjson_patch_err err_tmp;\n    if (!err) err = &err_tmp;\n    memset(err, 0, sizeof(*err));\n    memset(&iter, 0, sizeof(iter));\n    \n    if (unlikely(!doc || !orig || !patch)) {\n        return_err(INVALID_PARAMETER, \"input parameter is NULL\");\n    }\n    if (unlikely(!yyjson_mut_is_arr(patch))) {\n        return_err(INVALID_PARAMETER, \"input patch is not array\");\n    }\n    root = yyjson_mut_val_mut_copy(doc, orig);\n    if (unlikely(!root)) return_err_copy();\n    \n    /* iterate through the patch array */\n    yyjson_mut_arr_iter_init(patch, &iter);\n    while ((obj = yyjson_mut_arr_iter_next(&iter))) {\n        patch_op op_enum;\n        yyjson_mut_val *op, *path, *from = NULL, *value;\n        yyjson_mut_val *val = NULL, *test;\n        usize path_len, from_len = 0;\n        if (!unsafe_yyjson_is_obj(obj)) {\n            return_err(INVALID_OPERATION, \"JSON patch operation is not object\");\n        }\n        \n        /* get required member: op */\n        op = yyjson_mut_obj_get(obj, \"op\");\n        if (unlikely(!op)) return_err_key(\"`op`\");\n        if (unlikely(!yyjson_mut_is_str(op))) return_err_val(\"`op`\");\n        op_enum = patch_op_get((yyjson_val *)(void *)op);\n        \n        /* get required member: path */\n        path = yyjson_mut_obj_get(obj, \"path\");\n        if (unlikely(!path)) return_err_key(\"`path`\");\n        if (unlikely(!yyjson_mut_is_str(path))) return_err_val(\"`path`\");\n        path_len = unsafe_yyjson_get_len(path);\n        \n        /* get required member: value, from */\n        switch (op_enum) {\n            case PATCH_OP_ADD: case PATCH_OP_REPLACE: case PATCH_OP_TEST:\n                value = yyjson_mut_obj_get(obj, \"value\");\n                if (unlikely(!value)) return_err_key(\"`value`\");\n                val = yyjson_mut_val_mut_copy(doc, value);\n                if (unlikely(!val)) return_err_copy();\n                break;\n            case PATCH_OP_MOVE: case PATCH_OP_COPY:\n                from = yyjson_mut_obj_get(obj, \"from\");\n                if (unlikely(!from)) return_err_key(\"`from`\");\n                if (unlikely(!yyjson_mut_is_str(from))) {\n                    return_err_val(\"`from`\");\n                }\n                from_len = unsafe_yyjson_get_len(from);\n                break;\n            default:\n                break;\n        }\n        \n        /* perform an operation */\n        switch (op_enum) {\n            case PATCH_OP_ADD: /* add(path, val) */\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_REMOVE: /* remove(path) */\n                if (unlikely(!ptr_remove(path))) {\n                    return_err(POINTER, \"failed to remove `path`\");\n                }\n                break;\n            case PATCH_OP_REPLACE: /* replace(path, val) */\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_replace(path, val))) {\n                    return_err(POINTER, \"failed to replace `path`\");\n                }\n                break;\n            case PATCH_OP_MOVE: /* val = remove(from), add(path, val) */\n                if (unlikely(from_len == 0 && path_len == 0)) break;\n                val = ptr_remove(from);\n                if (unlikely(!val)) {\n                    return_err(POINTER, \"failed to remove `from`\");\n                }\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_COPY: /* val = get(from).copy, add(path, val) */\n                val = ptr_get(from);\n                if (unlikely(!val)) {\n                    return_err(POINTER, \"failed to get `from`\");\n                }\n                if (unlikely(path_len == 0)) { root = val; break; }\n                val = yyjson_mut_val_mut_copy(doc, val);\n                if (unlikely(!val)) return_err_copy();\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_TEST: /* test = get(path), test.eq(val) */\n                test = ptr_get(path);\n                if (unlikely(!test)) {\n                    return_err(POINTER, \"failed to get `path`\");\n                }\n                if (unlikely(!yyjson_mut_equals(val, test))) {\n                    return_err(EQUAL, \"failed to test equal\");\n                }\n                break;\n            default:\n                return_err(INVALID_MEMBER, \"unsupported `op`\");\n        }\n    }\n    return root;\n}\n\n/* macros for yyjson_patch */\n#undef return_err\n#undef return_err_copy\n#undef return_err_key\n#undef return_err_val\n#undef ptr_get\n#undef ptr_add\n#undef ptr_remove\n#undef ptr_replace\n\n\n\n/*==============================================================================\n * JSON Merge-Patch API (RFC 7386)\n *============================================================================*/\n\nyyjson_mut_val *yyjson_merge_patch(yyjson_mut_doc *doc,\n                                   yyjson_val *orig,\n                                   yyjson_val *patch) {\n    usize idx, max;\n    yyjson_val *key, *orig_val, *patch_val, local_orig;\n    yyjson_mut_val *builder, *mut_key, *mut_val, *merged_val;\n    \n    if (unlikely(!yyjson_is_obj(patch))) {\n        return yyjson_val_mut_copy(doc, patch);\n    }\n    \n    builder = yyjson_mut_obj(doc);\n    if (unlikely(!builder)) return NULL;\n    \n    if (!yyjson_is_obj(orig)) {\n        orig = &local_orig;\n        orig->tag = builder->tag;\n        orig->uni = builder->uni;\n    }\n    \n    /* If orig is contributing, copy any items not modified by the patch */\n    if (orig != &local_orig)\n    {\n        yyjson_obj_foreach(orig, idx, max, key, orig_val) {\n            patch_val = yyjson_obj_getn(patch,\n                                        unsafe_yyjson_get_str(key),\n                                        unsafe_yyjson_get_len(key));\n            if (!patch_val) {\n                mut_key = yyjson_val_mut_copy(doc, key);\n                mut_val = yyjson_val_mut_copy(doc, orig_val);\n                if (!yyjson_mut_obj_add(builder, mut_key, mut_val)) return NULL;\n            }\n        }\n    }\n\n    /* Merge items modified by the patch. */\n    yyjson_obj_foreach(patch, idx, max, key, patch_val) {\n        /* null indicates the field is removed. */\n        if (unsafe_yyjson_is_null(patch_val)) {\n            continue;\n        }\n        mut_key = yyjson_val_mut_copy(doc, key);\n        orig_val = yyjson_obj_getn(orig,\n                                   unsafe_yyjson_get_str(key),\n                                   unsafe_yyjson_get_len(key));\n        merged_val = yyjson_merge_patch(doc, orig_val, patch_val);\n        if (!yyjson_mut_obj_add(builder, mut_key, merged_val)) return NULL;\n    }\n    \n    return builder;\n}\n\nyyjson_mut_val *yyjson_mut_merge_patch(yyjson_mut_doc *doc,\n                                       yyjson_mut_val *orig,\n                                       yyjson_mut_val *patch) {\n    usize idx, max;\n    yyjson_mut_val *key, *orig_val, *patch_val, local_orig;\n    yyjson_mut_val *builder, *mut_key, *mut_val, *merged_val;\n    \n    if (unlikely(!yyjson_mut_is_obj(patch))) {\n        return yyjson_mut_val_mut_copy(doc, patch);\n    }\n    \n    builder = yyjson_mut_obj(doc);\n    if (unlikely(!builder)) return NULL;\n    \n    if (!yyjson_mut_is_obj(orig)) {\n        orig = &local_orig;\n        orig->tag = builder->tag;\n        orig->uni = builder->uni;\n    }\n    \n    /* If orig is contributing, copy any items not modified by the patch */\n    if (orig != &local_orig)\n    {\n        yyjson_mut_obj_foreach(orig, idx, max, key, orig_val) {\n            patch_val = yyjson_mut_obj_getn(patch,\n                                            unsafe_yyjson_get_str(key),\n                                            unsafe_yyjson_get_len(key));\n            if (!patch_val) {\n                mut_key = yyjson_mut_val_mut_copy(doc, key);\n                mut_val = yyjson_mut_val_mut_copy(doc, orig_val);\n                if (!yyjson_mut_obj_add(builder, mut_key, mut_val)) return NULL;\n            }\n        }\n    }\n\n    /* Merge items modified by the patch. */\n    yyjson_mut_obj_foreach(patch, idx, max, key, patch_val) {\n        /* null indicates the field is removed. */\n        if (unsafe_yyjson_is_null(patch_val)) {\n            continue;\n        }\n        mut_key = yyjson_mut_val_mut_copy(doc, key);\n        orig_val = yyjson_mut_obj_getn(orig,\n                                       unsafe_yyjson_get_str(key),\n                                       unsafe_yyjson_get_len(key));\n        merged_val = yyjson_mut_merge_patch(doc, orig_val, patch_val);\n        if (!yyjson_mut_obj_add(builder, mut_key, merged_val)) return NULL;\n    }\n    \n    return builder;\n}\n\n#endif /* YYJSON_DISABLE_UTILS */\n\n\n\n/*==============================================================================\n * Power10 Lookup Table\n * These data are used by the floating-point number reader and writer.\n *============================================================================*/\n\n#if (!YYJSON_DISABLE_READER || !YYJSON_DISABLE_WRITER) && \\\n    (!YYJSON_DISABLE_FAST_FP_CONV)\n\n/** Minimum decimal exponent in pow10_sig_table. */\n#define POW10_SIG_TABLE_MIN_EXP -343\n\n/** Maximum decimal exponent in pow10_sig_table. */\n#define POW10_SIG_TABLE_MAX_EXP 324\n\n/** Minimum exact decimal exponent in pow10_sig_table */\n#define POW10_SIG_TABLE_MIN_EXACT_EXP 0\n\n/** Maximum exact decimal exponent in pow10_sig_table */\n#define POW10_SIG_TABLE_MAX_EXACT_EXP 55\n\n/** Normalized significant 128 bits of pow10, no rounded up (size: 10.4KB).\n    This lookup table is used by both the double number reader and writer.\n    (generate with misc/make_tables.c) */\nstatic const u64 pow10_sig_table[] = {\n    U64(0xBF29DCAB, 0xA82FDEAE), U64(0x7432EE87, 0x3880FC33), /* ~= 10^-343 */\n    U64(0xEEF453D6, 0x923BD65A), U64(0x113FAA29, 0x06A13B3F), /* ~= 10^-342 */\n    U64(0x9558B466, 0x1B6565F8), U64(0x4AC7CA59, 0xA424C507), /* ~= 10^-341 */\n    U64(0xBAAEE17F, 0xA23EBF76), U64(0x5D79BCF0, 0x0D2DF649), /* ~= 10^-340 */\n    U64(0xE95A99DF, 0x8ACE6F53), U64(0xF4D82C2C, 0x107973DC), /* ~= 10^-339 */\n    U64(0x91D8A02B, 0xB6C10594), U64(0x79071B9B, 0x8A4BE869), /* ~= 10^-338 */\n    U64(0xB64EC836, 0xA47146F9), U64(0x9748E282, 0x6CDEE284), /* ~= 10^-337 */\n    U64(0xE3E27A44, 0x4D8D98B7), U64(0xFD1B1B23, 0x08169B25), /* ~= 10^-336 */\n    U64(0x8E6D8C6A, 0xB0787F72), U64(0xFE30F0F5, 0xE50E20F7), /* ~= 10^-335 */\n    U64(0xB208EF85, 0x5C969F4F), U64(0xBDBD2D33, 0x5E51A935), /* ~= 10^-334 */\n    U64(0xDE8B2B66, 0xB3BC4723), U64(0xAD2C7880, 0x35E61382), /* ~= 10^-333 */\n    U64(0x8B16FB20, 0x3055AC76), U64(0x4C3BCB50, 0x21AFCC31), /* ~= 10^-332 */\n    U64(0xADDCB9E8, 0x3C6B1793), U64(0xDF4ABE24, 0x2A1BBF3D), /* ~= 10^-331 */\n    U64(0xD953E862, 0x4B85DD78), U64(0xD71D6DAD, 0x34A2AF0D), /* ~= 10^-330 */\n    U64(0x87D4713D, 0x6F33AA6B), U64(0x8672648C, 0x40E5AD68), /* ~= 10^-329 */\n    U64(0xA9C98D8C, 0xCB009506), U64(0x680EFDAF, 0x511F18C2), /* ~= 10^-328 */\n    U64(0xD43BF0EF, 0xFDC0BA48), U64(0x0212BD1B, 0x2566DEF2), /* ~= 10^-327 */\n    U64(0x84A57695, 0xFE98746D), U64(0x014BB630, 0xF7604B57), /* ~= 10^-326 */\n    U64(0xA5CED43B, 0x7E3E9188), U64(0x419EA3BD, 0x35385E2D), /* ~= 10^-325 */\n    U64(0xCF42894A, 0x5DCE35EA), U64(0x52064CAC, 0x828675B9), /* ~= 10^-324 */\n    U64(0x818995CE, 0x7AA0E1B2), U64(0x7343EFEB, 0xD1940993), /* ~= 10^-323 */\n    U64(0xA1EBFB42, 0x19491A1F), U64(0x1014EBE6, 0xC5F90BF8), /* ~= 10^-322 */\n    U64(0xCA66FA12, 0x9F9B60A6), U64(0xD41A26E0, 0x77774EF6), /* ~= 10^-321 */\n    U64(0xFD00B897, 0x478238D0), U64(0x8920B098, 0x955522B4), /* ~= 10^-320 */\n    U64(0x9E20735E, 0x8CB16382), U64(0x55B46E5F, 0x5D5535B0), /* ~= 10^-319 */\n    U64(0xC5A89036, 0x2FDDBC62), U64(0xEB2189F7, 0x34AA831D), /* ~= 10^-318 */\n    U64(0xF712B443, 0xBBD52B7B), U64(0xA5E9EC75, 0x01D523E4), /* ~= 10^-317 */\n    U64(0x9A6BB0AA, 0x55653B2D), U64(0x47B233C9, 0x2125366E), /* ~= 10^-316 */\n    U64(0xC1069CD4, 0xEABE89F8), U64(0x999EC0BB, 0x696E840A), /* ~= 10^-315 */\n    U64(0xF148440A, 0x256E2C76), U64(0xC00670EA, 0x43CA250D), /* ~= 10^-314 */\n    U64(0x96CD2A86, 0x5764DBCA), U64(0x38040692, 0x6A5E5728), /* ~= 10^-313 */\n    U64(0xBC807527, 0xED3E12BC), U64(0xC6050837, 0x04F5ECF2), /* ~= 10^-312 */\n    U64(0xEBA09271, 0xE88D976B), U64(0xF7864A44, 0xC633682E), /* ~= 10^-311 */\n    U64(0x93445B87, 0x31587EA3), U64(0x7AB3EE6A, 0xFBE0211D), /* ~= 10^-310 */\n    U64(0xB8157268, 0xFDAE9E4C), U64(0x5960EA05, 0xBAD82964), /* ~= 10^-309 */\n    U64(0xE61ACF03, 0x3D1A45DF), U64(0x6FB92487, 0x298E33BD), /* ~= 10^-308 */\n    U64(0x8FD0C162, 0x06306BAB), U64(0xA5D3B6D4, 0x79F8E056), /* ~= 10^-307 */\n    U64(0xB3C4F1BA, 0x87BC8696), U64(0x8F48A489, 0x9877186C), /* ~= 10^-306 */\n    U64(0xE0B62E29, 0x29ABA83C), U64(0x331ACDAB, 0xFE94DE87), /* ~= 10^-305 */\n    U64(0x8C71DCD9, 0xBA0B4925), U64(0x9FF0C08B, 0x7F1D0B14), /* ~= 10^-304 */\n    U64(0xAF8E5410, 0x288E1B6F), U64(0x07ECF0AE, 0x5EE44DD9), /* ~= 10^-303 */\n    U64(0xDB71E914, 0x32B1A24A), U64(0xC9E82CD9, 0xF69D6150), /* ~= 10^-302 */\n    U64(0x892731AC, 0x9FAF056E), U64(0xBE311C08, 0x3A225CD2), /* ~= 10^-301 */\n    U64(0xAB70FE17, 0xC79AC6CA), U64(0x6DBD630A, 0x48AAF406), /* ~= 10^-300 */\n    U64(0xD64D3D9D, 0xB981787D), U64(0x092CBBCC, 0xDAD5B108), /* ~= 10^-299 */\n    U64(0x85F04682, 0x93F0EB4E), U64(0x25BBF560, 0x08C58EA5), /* ~= 10^-298 */\n    U64(0xA76C5823, 0x38ED2621), U64(0xAF2AF2B8, 0x0AF6F24E), /* ~= 10^-297 */\n    U64(0xD1476E2C, 0x07286FAA), U64(0x1AF5AF66, 0x0DB4AEE1), /* ~= 10^-296 */\n    U64(0x82CCA4DB, 0x847945CA), U64(0x50D98D9F, 0xC890ED4D), /* ~= 10^-295 */\n    U64(0xA37FCE12, 0x6597973C), U64(0xE50FF107, 0xBAB528A0), /* ~= 10^-294 */\n    U64(0xCC5FC196, 0xFEFD7D0C), U64(0x1E53ED49, 0xA96272C8), /* ~= 10^-293 */\n    U64(0xFF77B1FC, 0xBEBCDC4F), U64(0x25E8E89C, 0x13BB0F7A), /* ~= 10^-292 */\n    U64(0x9FAACF3D, 0xF73609B1), U64(0x77B19161, 0x8C54E9AC), /* ~= 10^-291 */\n    U64(0xC795830D, 0x75038C1D), U64(0xD59DF5B9, 0xEF6A2417), /* ~= 10^-290 */\n    U64(0xF97AE3D0, 0xD2446F25), U64(0x4B057328, 0x6B44AD1D), /* ~= 10^-289 */\n    U64(0x9BECCE62, 0x836AC577), U64(0x4EE367F9, 0x430AEC32), /* ~= 10^-288 */\n    U64(0xC2E801FB, 0x244576D5), U64(0x229C41F7, 0x93CDA73F), /* ~= 10^-287 */\n    U64(0xF3A20279, 0xED56D48A), U64(0x6B435275, 0x78C1110F), /* ~= 10^-286 */\n    U64(0x9845418C, 0x345644D6), U64(0x830A1389, 0x6B78AAA9), /* ~= 10^-285 */\n    U64(0xBE5691EF, 0x416BD60C), U64(0x23CC986B, 0xC656D553), /* ~= 10^-284 */\n    U64(0xEDEC366B, 0x11C6CB8F), U64(0x2CBFBE86, 0xB7EC8AA8), /* ~= 10^-283 */\n    U64(0x94B3A202, 0xEB1C3F39), U64(0x7BF7D714, 0x32F3D6A9), /* ~= 10^-282 */\n    U64(0xB9E08A83, 0xA5E34F07), U64(0xDAF5CCD9, 0x3FB0CC53), /* ~= 10^-281 */\n    U64(0xE858AD24, 0x8F5C22C9), U64(0xD1B3400F, 0x8F9CFF68), /* ~= 10^-280 */\n    U64(0x91376C36, 0xD99995BE), U64(0x23100809, 0xB9C21FA1), /* ~= 10^-279 */\n    U64(0xB5854744, 0x8FFFFB2D), U64(0xABD40A0C, 0x2832A78A), /* ~= 10^-278 */\n    U64(0xE2E69915, 0xB3FFF9F9), U64(0x16C90C8F, 0x323F516C), /* ~= 10^-277 */\n    U64(0x8DD01FAD, 0x907FFC3B), U64(0xAE3DA7D9, 0x7F6792E3), /* ~= 10^-276 */\n    U64(0xB1442798, 0xF49FFB4A), U64(0x99CD11CF, 0xDF41779C), /* ~= 10^-275 */\n    U64(0xDD95317F, 0x31C7FA1D), U64(0x40405643, 0xD711D583), /* ~= 10^-274 */\n    U64(0x8A7D3EEF, 0x7F1CFC52), U64(0x482835EA, 0x666B2572), /* ~= 10^-273 */\n    U64(0xAD1C8EAB, 0x5EE43B66), U64(0xDA324365, 0x0005EECF), /* ~= 10^-272 */\n    U64(0xD863B256, 0x369D4A40), U64(0x90BED43E, 0x40076A82), /* ~= 10^-271 */\n    U64(0x873E4F75, 0xE2224E68), U64(0x5A7744A6, 0xE804A291), /* ~= 10^-270 */\n    U64(0xA90DE353, 0x5AAAE202), U64(0x711515D0, 0xA205CB36), /* ~= 10^-269 */\n    U64(0xD3515C28, 0x31559A83), U64(0x0D5A5B44, 0xCA873E03), /* ~= 10^-268 */\n    U64(0x8412D999, 0x1ED58091), U64(0xE858790A, 0xFE9486C2), /* ~= 10^-267 */\n    U64(0xA5178FFF, 0x668AE0B6), U64(0x626E974D, 0xBE39A872), /* ~= 10^-266 */\n    U64(0xCE5D73FF, 0x402D98E3), U64(0xFB0A3D21, 0x2DC8128F), /* ~= 10^-265 */\n    U64(0x80FA687F, 0x881C7F8E), U64(0x7CE66634, 0xBC9D0B99), /* ~= 10^-264 */\n    U64(0xA139029F, 0x6A239F72), U64(0x1C1FFFC1, 0xEBC44E80), /* ~= 10^-263 */\n    U64(0xC9874347, 0x44AC874E), U64(0xA327FFB2, 0x66B56220), /* ~= 10^-262 */\n    U64(0xFBE91419, 0x15D7A922), U64(0x4BF1FF9F, 0x0062BAA8), /* ~= 10^-261 */\n    U64(0x9D71AC8F, 0xADA6C9B5), U64(0x6F773FC3, 0x603DB4A9), /* ~= 10^-260 */\n    U64(0xC4CE17B3, 0x99107C22), U64(0xCB550FB4, 0x384D21D3), /* ~= 10^-259 */\n    U64(0xF6019DA0, 0x7F549B2B), U64(0x7E2A53A1, 0x46606A48), /* ~= 10^-258 */\n    U64(0x99C10284, 0x4F94E0FB), U64(0x2EDA7444, 0xCBFC426D), /* ~= 10^-257 */\n    U64(0xC0314325, 0x637A1939), U64(0xFA911155, 0xFEFB5308), /* ~= 10^-256 */\n    U64(0xF03D93EE, 0xBC589F88), U64(0x793555AB, 0x7EBA27CA), /* ~= 10^-255 */\n    U64(0x96267C75, 0x35B763B5), U64(0x4BC1558B, 0x2F3458DE), /* ~= 10^-254 */\n    U64(0xBBB01B92, 0x83253CA2), U64(0x9EB1AAED, 0xFB016F16), /* ~= 10^-253 */\n    U64(0xEA9C2277, 0x23EE8BCB), U64(0x465E15A9, 0x79C1CADC), /* ~= 10^-252 */\n    U64(0x92A1958A, 0x7675175F), U64(0x0BFACD89, 0xEC191EC9), /* ~= 10^-251 */\n    U64(0xB749FAED, 0x14125D36), U64(0xCEF980EC, 0x671F667B), /* ~= 10^-250 */\n    U64(0xE51C79A8, 0x5916F484), U64(0x82B7E127, 0x80E7401A), /* ~= 10^-249 */\n    U64(0x8F31CC09, 0x37AE58D2), U64(0xD1B2ECB8, 0xB0908810), /* ~= 10^-248 */\n    U64(0xB2FE3F0B, 0x8599EF07), U64(0x861FA7E6, 0xDCB4AA15), /* ~= 10^-247 */\n    U64(0xDFBDCECE, 0x67006AC9), U64(0x67A791E0, 0x93E1D49A), /* ~= 10^-246 */\n    U64(0x8BD6A141, 0x006042BD), U64(0xE0C8BB2C, 0x5C6D24E0), /* ~= 10^-245 */\n    U64(0xAECC4991, 0x4078536D), U64(0x58FAE9F7, 0x73886E18), /* ~= 10^-244 */\n    U64(0xDA7F5BF5, 0x90966848), U64(0xAF39A475, 0x506A899E), /* ~= 10^-243 */\n    U64(0x888F9979, 0x7A5E012D), U64(0x6D8406C9, 0x52429603), /* ~= 10^-242 */\n    U64(0xAAB37FD7, 0xD8F58178), U64(0xC8E5087B, 0xA6D33B83), /* ~= 10^-241 */\n    U64(0xD5605FCD, 0xCF32E1D6), U64(0xFB1E4A9A, 0x90880A64), /* ~= 10^-240 */\n    U64(0x855C3BE0, 0xA17FCD26), U64(0x5CF2EEA0, 0x9A55067F), /* ~= 10^-239 */\n    U64(0xA6B34AD8, 0xC9DFC06F), U64(0xF42FAA48, 0xC0EA481E), /* ~= 10^-238 */\n    U64(0xD0601D8E, 0xFC57B08B), U64(0xF13B94DA, 0xF124DA26), /* ~= 10^-237 */\n    U64(0x823C1279, 0x5DB6CE57), U64(0x76C53D08, 0xD6B70858), /* ~= 10^-236 */\n    U64(0xA2CB1717, 0xB52481ED), U64(0x54768C4B, 0x0C64CA6E), /* ~= 10^-235 */\n    U64(0xCB7DDCDD, 0xA26DA268), U64(0xA9942F5D, 0xCF7DFD09), /* ~= 10^-234 */\n    U64(0xFE5D5415, 0x0B090B02), U64(0xD3F93B35, 0x435D7C4C), /* ~= 10^-233 */\n    U64(0x9EFA548D, 0x26E5A6E1), U64(0xC47BC501, 0x4A1A6DAF), /* ~= 10^-232 */\n    U64(0xC6B8E9B0, 0x709F109A), U64(0x359AB641, 0x9CA1091B), /* ~= 10^-231 */\n    U64(0xF867241C, 0x8CC6D4C0), U64(0xC30163D2, 0x03C94B62), /* ~= 10^-230 */\n    U64(0x9B407691, 0xD7FC44F8), U64(0x79E0DE63, 0x425DCF1D), /* ~= 10^-229 */\n    U64(0xC2109436, 0x4DFB5636), U64(0x985915FC, 0x12F542E4), /* ~= 10^-228 */\n    U64(0xF294B943, 0xE17A2BC4), U64(0x3E6F5B7B, 0x17B2939D), /* ~= 10^-227 */\n    U64(0x979CF3CA, 0x6CEC5B5A), U64(0xA705992C, 0xEECF9C42), /* ~= 10^-226 */\n    U64(0xBD8430BD, 0x08277231), U64(0x50C6FF78, 0x2A838353), /* ~= 10^-225 */\n    U64(0xECE53CEC, 0x4A314EBD), U64(0xA4F8BF56, 0x35246428), /* ~= 10^-224 */\n    U64(0x940F4613, 0xAE5ED136), U64(0x871B7795, 0xE136BE99), /* ~= 10^-223 */\n    U64(0xB9131798, 0x99F68584), U64(0x28E2557B, 0x59846E3F), /* ~= 10^-222 */\n    U64(0xE757DD7E, 0xC07426E5), U64(0x331AEADA, 0x2FE589CF), /* ~= 10^-221 */\n    U64(0x9096EA6F, 0x3848984F), U64(0x3FF0D2C8, 0x5DEF7621), /* ~= 10^-220 */\n    U64(0xB4BCA50B, 0x065ABE63), U64(0x0FED077A, 0x756B53A9), /* ~= 10^-219 */\n    U64(0xE1EBCE4D, 0xC7F16DFB), U64(0xD3E84959, 0x12C62894), /* ~= 10^-218 */\n    U64(0x8D3360F0, 0x9CF6E4BD), U64(0x64712DD7, 0xABBBD95C), /* ~= 10^-217 */\n    U64(0xB080392C, 0xC4349DEC), U64(0xBD8D794D, 0x96AACFB3), /* ~= 10^-216 */\n    U64(0xDCA04777, 0xF541C567), U64(0xECF0D7A0, 0xFC5583A0), /* ~= 10^-215 */\n    U64(0x89E42CAA, 0xF9491B60), U64(0xF41686C4, 0x9DB57244), /* ~= 10^-214 */\n    U64(0xAC5D37D5, 0xB79B6239), U64(0x311C2875, 0xC522CED5), /* ~= 10^-213 */\n    U64(0xD77485CB, 0x25823AC7), U64(0x7D633293, 0x366B828B), /* ~= 10^-212 */\n    U64(0x86A8D39E, 0xF77164BC), U64(0xAE5DFF9C, 0x02033197), /* ~= 10^-211 */\n    U64(0xA8530886, 0xB54DBDEB), U64(0xD9F57F83, 0x0283FDFC), /* ~= 10^-210 */\n    U64(0xD267CAA8, 0x62A12D66), U64(0xD072DF63, 0xC324FD7B), /* ~= 10^-209 */\n    U64(0x8380DEA9, 0x3DA4BC60), U64(0x4247CB9E, 0x59F71E6D), /* ~= 10^-208 */\n    U64(0xA4611653, 0x8D0DEB78), U64(0x52D9BE85, 0xF074E608), /* ~= 10^-207 */\n    U64(0xCD795BE8, 0x70516656), U64(0x67902E27, 0x6C921F8B), /* ~= 10^-206 */\n    U64(0x806BD971, 0x4632DFF6), U64(0x00BA1CD8, 0xA3DB53B6), /* ~= 10^-205 */\n    U64(0xA086CFCD, 0x97BF97F3), U64(0x80E8A40E, 0xCCD228A4), /* ~= 10^-204 */\n    U64(0xC8A883C0, 0xFDAF7DF0), U64(0x6122CD12, 0x8006B2CD), /* ~= 10^-203 */\n    U64(0xFAD2A4B1, 0x3D1B5D6C), U64(0x796B8057, 0x20085F81), /* ~= 10^-202 */\n    U64(0x9CC3A6EE, 0xC6311A63), U64(0xCBE33036, 0x74053BB0), /* ~= 10^-201 */\n    U64(0xC3F490AA, 0x77BD60FC), U64(0xBEDBFC44, 0x11068A9C), /* ~= 10^-200 */\n    U64(0xF4F1B4D5, 0x15ACB93B), U64(0xEE92FB55, 0x15482D44), /* ~= 10^-199 */\n    U64(0x99171105, 0x2D8BF3C5), U64(0x751BDD15, 0x2D4D1C4A), /* ~= 10^-198 */\n    U64(0xBF5CD546, 0x78EEF0B6), U64(0xD262D45A, 0x78A0635D), /* ~= 10^-197 */\n    U64(0xEF340A98, 0x172AACE4), U64(0x86FB8971, 0x16C87C34), /* ~= 10^-196 */\n    U64(0x9580869F, 0x0E7AAC0E), U64(0xD45D35E6, 0xAE3D4DA0), /* ~= 10^-195 */\n    U64(0xBAE0A846, 0xD2195712), U64(0x89748360, 0x59CCA109), /* ~= 10^-194 */\n    U64(0xE998D258, 0x869FACD7), U64(0x2BD1A438, 0x703FC94B), /* ~= 10^-193 */\n    U64(0x91FF8377, 0x5423CC06), U64(0x7B6306A3, 0x4627DDCF), /* ~= 10^-192 */\n    U64(0xB67F6455, 0x292CBF08), U64(0x1A3BC84C, 0x17B1D542), /* ~= 10^-191 */\n    U64(0xE41F3D6A, 0x7377EECA), U64(0x20CABA5F, 0x1D9E4A93), /* ~= 10^-190 */\n    U64(0x8E938662, 0x882AF53E), U64(0x547EB47B, 0x7282EE9C), /* ~= 10^-189 */\n    U64(0xB23867FB, 0x2A35B28D), U64(0xE99E619A, 0x4F23AA43), /* ~= 10^-188 */\n    U64(0xDEC681F9, 0xF4C31F31), U64(0x6405FA00, 0xE2EC94D4), /* ~= 10^-187 */\n    U64(0x8B3C113C, 0x38F9F37E), U64(0xDE83BC40, 0x8DD3DD04), /* ~= 10^-186 */\n    U64(0xAE0B158B, 0x4738705E), U64(0x9624AB50, 0xB148D445), /* ~= 10^-185 */\n    U64(0xD98DDAEE, 0x19068C76), U64(0x3BADD624, 0xDD9B0957), /* ~= 10^-184 */\n    U64(0x87F8A8D4, 0xCFA417C9), U64(0xE54CA5D7, 0x0A80E5D6), /* ~= 10^-183 */\n    U64(0xA9F6D30A, 0x038D1DBC), U64(0x5E9FCF4C, 0xCD211F4C), /* ~= 10^-182 */\n    U64(0xD47487CC, 0x8470652B), U64(0x7647C320, 0x0069671F), /* ~= 10^-181 */\n    U64(0x84C8D4DF, 0xD2C63F3B), U64(0x29ECD9F4, 0x0041E073), /* ~= 10^-180 */\n    U64(0xA5FB0A17, 0xC777CF09), U64(0xF4681071, 0x00525890), /* ~= 10^-179 */\n    U64(0xCF79CC9D, 0xB955C2CC), U64(0x7182148D, 0x4066EEB4), /* ~= 10^-178 */\n    U64(0x81AC1FE2, 0x93D599BF), U64(0xC6F14CD8, 0x48405530), /* ~= 10^-177 */\n    U64(0xA21727DB, 0x38CB002F), U64(0xB8ADA00E, 0x5A506A7C), /* ~= 10^-176 */\n    U64(0xCA9CF1D2, 0x06FDC03B), U64(0xA6D90811, 0xF0E4851C), /* ~= 10^-175 */\n    U64(0xFD442E46, 0x88BD304A), U64(0x908F4A16, 0x6D1DA663), /* ~= 10^-174 */\n    U64(0x9E4A9CEC, 0x15763E2E), U64(0x9A598E4E, 0x043287FE), /* ~= 10^-173 */\n    U64(0xC5DD4427, 0x1AD3CDBA), U64(0x40EFF1E1, 0x853F29FD), /* ~= 10^-172 */\n    U64(0xF7549530, 0xE188C128), U64(0xD12BEE59, 0xE68EF47C), /* ~= 10^-171 */\n    U64(0x9A94DD3E, 0x8CF578B9), U64(0x82BB74F8, 0x301958CE), /* ~= 10^-170 */\n    U64(0xC13A148E, 0x3032D6E7), U64(0xE36A5236, 0x3C1FAF01), /* ~= 10^-169 */\n    U64(0xF18899B1, 0xBC3F8CA1), U64(0xDC44E6C3, 0xCB279AC1), /* ~= 10^-168 */\n    U64(0x96F5600F, 0x15A7B7E5), U64(0x29AB103A, 0x5EF8C0B9), /* ~= 10^-167 */\n    U64(0xBCB2B812, 0xDB11A5DE), U64(0x7415D448, 0xF6B6F0E7), /* ~= 10^-166 */\n    U64(0xEBDF6617, 0x91D60F56), U64(0x111B495B, 0x3464AD21), /* ~= 10^-165 */\n    U64(0x936B9FCE, 0xBB25C995), U64(0xCAB10DD9, 0x00BEEC34), /* ~= 10^-164 */\n    U64(0xB84687C2, 0x69EF3BFB), U64(0x3D5D514F, 0x40EEA742), /* ~= 10^-163 */\n    U64(0xE65829B3, 0x046B0AFA), U64(0x0CB4A5A3, 0x112A5112), /* ~= 10^-162 */\n    U64(0x8FF71A0F, 0xE2C2E6DC), U64(0x47F0E785, 0xEABA72AB), /* ~= 10^-161 */\n    U64(0xB3F4E093, 0xDB73A093), U64(0x59ED2167, 0x65690F56), /* ~= 10^-160 */\n    U64(0xE0F218B8, 0xD25088B8), U64(0x306869C1, 0x3EC3532C), /* ~= 10^-159 */\n    U64(0x8C974F73, 0x83725573), U64(0x1E414218, 0xC73A13FB), /* ~= 10^-158 */\n    U64(0xAFBD2350, 0x644EEACF), U64(0xE5D1929E, 0xF90898FA), /* ~= 10^-157 */\n    U64(0xDBAC6C24, 0x7D62A583), U64(0xDF45F746, 0xB74ABF39), /* ~= 10^-156 */\n    U64(0x894BC396, 0xCE5DA772), U64(0x6B8BBA8C, 0x328EB783), /* ~= 10^-155 */\n    U64(0xAB9EB47C, 0x81F5114F), U64(0x066EA92F, 0x3F326564), /* ~= 10^-154 */\n    U64(0xD686619B, 0xA27255A2), U64(0xC80A537B, 0x0EFEFEBD), /* ~= 10^-153 */\n    U64(0x8613FD01, 0x45877585), U64(0xBD06742C, 0xE95F5F36), /* ~= 10^-152 */\n    U64(0xA798FC41, 0x96E952E7), U64(0x2C481138, 0x23B73704), /* ~= 10^-151 */\n    U64(0xD17F3B51, 0xFCA3A7A0), U64(0xF75A1586, 0x2CA504C5), /* ~= 10^-150 */\n    U64(0x82EF8513, 0x3DE648C4), U64(0x9A984D73, 0xDBE722FB), /* ~= 10^-149 */\n    U64(0xA3AB6658, 0x0D5FDAF5), U64(0xC13E60D0, 0xD2E0EBBA), /* ~= 10^-148 */\n    U64(0xCC963FEE, 0x10B7D1B3), U64(0x318DF905, 0x079926A8), /* ~= 10^-147 */\n    U64(0xFFBBCFE9, 0x94E5C61F), U64(0xFDF17746, 0x497F7052), /* ~= 10^-146 */\n    U64(0x9FD561F1, 0xFD0F9BD3), U64(0xFEB6EA8B, 0xEDEFA633), /* ~= 10^-145 */\n    U64(0xC7CABA6E, 0x7C5382C8), U64(0xFE64A52E, 0xE96B8FC0), /* ~= 10^-144 */\n    U64(0xF9BD690A, 0x1B68637B), U64(0x3DFDCE7A, 0xA3C673B0), /* ~= 10^-143 */\n    U64(0x9C1661A6, 0x51213E2D), U64(0x06BEA10C, 0xA65C084E), /* ~= 10^-142 */\n    U64(0xC31BFA0F, 0xE5698DB8), U64(0x486E494F, 0xCFF30A62), /* ~= 10^-141 */\n    U64(0xF3E2F893, 0xDEC3F126), U64(0x5A89DBA3, 0xC3EFCCFA), /* ~= 10^-140 */\n    U64(0x986DDB5C, 0x6B3A76B7), U64(0xF8962946, 0x5A75E01C), /* ~= 10^-139 */\n    U64(0xBE895233, 0x86091465), U64(0xF6BBB397, 0xF1135823), /* ~= 10^-138 */\n    U64(0xEE2BA6C0, 0x678B597F), U64(0x746AA07D, 0xED582E2C), /* ~= 10^-137 */\n    U64(0x94DB4838, 0x40B717EF), U64(0xA8C2A44E, 0xB4571CDC), /* ~= 10^-136 */\n    U64(0xBA121A46, 0x50E4DDEB), U64(0x92F34D62, 0x616CE413), /* ~= 10^-135 */\n    U64(0xE896A0D7, 0xE51E1566), U64(0x77B020BA, 0xF9C81D17), /* ~= 10^-134 */\n    U64(0x915E2486, 0xEF32CD60), U64(0x0ACE1474, 0xDC1D122E), /* ~= 10^-133 */\n    U64(0xB5B5ADA8, 0xAAFF80B8), U64(0x0D819992, 0x132456BA), /* ~= 10^-132 */\n    U64(0xE3231912, 0xD5BF60E6), U64(0x10E1FFF6, 0x97ED6C69), /* ~= 10^-131 */\n    U64(0x8DF5EFAB, 0xC5979C8F), U64(0xCA8D3FFA, 0x1EF463C1), /* ~= 10^-130 */\n    U64(0xB1736B96, 0xB6FD83B3), U64(0xBD308FF8, 0xA6B17CB2), /* ~= 10^-129 */\n    U64(0xDDD0467C, 0x64BCE4A0), U64(0xAC7CB3F6, 0xD05DDBDE), /* ~= 10^-128 */\n    U64(0x8AA22C0D, 0xBEF60EE4), U64(0x6BCDF07A, 0x423AA96B), /* ~= 10^-127 */\n    U64(0xAD4AB711, 0x2EB3929D), U64(0x86C16C98, 0xD2C953C6), /* ~= 10^-126 */\n    U64(0xD89D64D5, 0x7A607744), U64(0xE871C7BF, 0x077BA8B7), /* ~= 10^-125 */\n    U64(0x87625F05, 0x6C7C4A8B), U64(0x11471CD7, 0x64AD4972), /* ~= 10^-124 */\n    U64(0xA93AF6C6, 0xC79B5D2D), U64(0xD598E40D, 0x3DD89BCF), /* ~= 10^-123 */\n    U64(0xD389B478, 0x79823479), U64(0x4AFF1D10, 0x8D4EC2C3), /* ~= 10^-122 */\n    U64(0x843610CB, 0x4BF160CB), U64(0xCEDF722A, 0x585139BA), /* ~= 10^-121 */\n    U64(0xA54394FE, 0x1EEDB8FE), U64(0xC2974EB4, 0xEE658828), /* ~= 10^-120 */\n    U64(0xCE947A3D, 0xA6A9273E), U64(0x733D2262, 0x29FEEA32), /* ~= 10^-119 */\n    U64(0x811CCC66, 0x8829B887), U64(0x0806357D, 0x5A3F525F), /* ~= 10^-118 */\n    U64(0xA163FF80, 0x2A3426A8), U64(0xCA07C2DC, 0xB0CF26F7), /* ~= 10^-117 */\n    U64(0xC9BCFF60, 0x34C13052), U64(0xFC89B393, 0xDD02F0B5), /* ~= 10^-116 */\n    U64(0xFC2C3F38, 0x41F17C67), U64(0xBBAC2078, 0xD443ACE2), /* ~= 10^-115 */\n    U64(0x9D9BA783, 0x2936EDC0), U64(0xD54B944B, 0x84AA4C0D), /* ~= 10^-114 */\n    U64(0xC5029163, 0xF384A931), U64(0x0A9E795E, 0x65D4DF11), /* ~= 10^-113 */\n    U64(0xF64335BC, 0xF065D37D), U64(0x4D4617B5, 0xFF4A16D5), /* ~= 10^-112 */\n    U64(0x99EA0196, 0x163FA42E), U64(0x504BCED1, 0xBF8E4E45), /* ~= 10^-111 */\n    U64(0xC06481FB, 0x9BCF8D39), U64(0xE45EC286, 0x2F71E1D6), /* ~= 10^-110 */\n    U64(0xF07DA27A, 0x82C37088), U64(0x5D767327, 0xBB4E5A4C), /* ~= 10^-109 */\n    U64(0x964E858C, 0x91BA2655), U64(0x3A6A07F8, 0xD510F86F), /* ~= 10^-108 */\n    U64(0xBBE226EF, 0xB628AFEA), U64(0x890489F7, 0x0A55368B), /* ~= 10^-107 */\n    U64(0xEADAB0AB, 0xA3B2DBE5), U64(0x2B45AC74, 0xCCEA842E), /* ~= 10^-106 */\n    U64(0x92C8AE6B, 0x464FC96F), U64(0x3B0B8BC9, 0x0012929D), /* ~= 10^-105 */\n    U64(0xB77ADA06, 0x17E3BBCB), U64(0x09CE6EBB, 0x40173744), /* ~= 10^-104 */\n    U64(0xE5599087, 0x9DDCAABD), U64(0xCC420A6A, 0x101D0515), /* ~= 10^-103 */\n    U64(0x8F57FA54, 0xC2A9EAB6), U64(0x9FA94682, 0x4A12232D), /* ~= 10^-102 */\n    U64(0xB32DF8E9, 0xF3546564), U64(0x47939822, 0xDC96ABF9), /* ~= 10^-101 */\n    U64(0xDFF97724, 0x70297EBD), U64(0x59787E2B, 0x93BC56F7), /* ~= 10^-100 */\n    U64(0x8BFBEA76, 0xC619EF36), U64(0x57EB4EDB, 0x3C55B65A), /* ~= 10^-99 */\n    U64(0xAEFAE514, 0x77A06B03), U64(0xEDE62292, 0x0B6B23F1), /* ~= 10^-98 */\n    U64(0xDAB99E59, 0x958885C4), U64(0xE95FAB36, 0x8E45ECED), /* ~= 10^-97 */\n    U64(0x88B402F7, 0xFD75539B), U64(0x11DBCB02, 0x18EBB414), /* ~= 10^-96 */\n    U64(0xAAE103B5, 0xFCD2A881), U64(0xD652BDC2, 0x9F26A119), /* ~= 10^-95 */\n    U64(0xD59944A3, 0x7C0752A2), U64(0x4BE76D33, 0x46F0495F), /* ~= 10^-94 */\n    U64(0x857FCAE6, 0x2D8493A5), U64(0x6F70A440, 0x0C562DDB), /* ~= 10^-93 */\n    U64(0xA6DFBD9F, 0xB8E5B88E), U64(0xCB4CCD50, 0x0F6BB952), /* ~= 10^-92 */\n    U64(0xD097AD07, 0xA71F26B2), U64(0x7E2000A4, 0x1346A7A7), /* ~= 10^-91 */\n    U64(0x825ECC24, 0xC873782F), U64(0x8ED40066, 0x8C0C28C8), /* ~= 10^-90 */\n    U64(0xA2F67F2D, 0xFA90563B), U64(0x72890080, 0x2F0F32FA), /* ~= 10^-89 */\n    U64(0xCBB41EF9, 0x79346BCA), U64(0x4F2B40A0, 0x3AD2FFB9), /* ~= 10^-88 */\n    U64(0xFEA126B7, 0xD78186BC), U64(0xE2F610C8, 0x4987BFA8), /* ~= 10^-87 */\n    U64(0x9F24B832, 0xE6B0F436), U64(0x0DD9CA7D, 0x2DF4D7C9), /* ~= 10^-86 */\n    U64(0xC6EDE63F, 0xA05D3143), U64(0x91503D1C, 0x79720DBB), /* ~= 10^-85 */\n    U64(0xF8A95FCF, 0x88747D94), U64(0x75A44C63, 0x97CE912A), /* ~= 10^-84 */\n    U64(0x9B69DBE1, 0xB548CE7C), U64(0xC986AFBE, 0x3EE11ABA), /* ~= 10^-83 */\n    U64(0xC24452DA, 0x229B021B), U64(0xFBE85BAD, 0xCE996168), /* ~= 10^-82 */\n    U64(0xF2D56790, 0xAB41C2A2), U64(0xFAE27299, 0x423FB9C3), /* ~= 10^-81 */\n    U64(0x97C560BA, 0x6B0919A5), U64(0xDCCD879F, 0xC967D41A), /* ~= 10^-80 */\n    U64(0xBDB6B8E9, 0x05CB600F), U64(0x5400E987, 0xBBC1C920), /* ~= 10^-79 */\n    U64(0xED246723, 0x473E3813), U64(0x290123E9, 0xAAB23B68), /* ~= 10^-78 */\n    U64(0x9436C076, 0x0C86E30B), U64(0xF9A0B672, 0x0AAF6521), /* ~= 10^-77 */\n    U64(0xB9447093, 0x8FA89BCE), U64(0xF808E40E, 0x8D5B3E69), /* ~= 10^-76 */\n    U64(0xE7958CB8, 0x7392C2C2), U64(0xB60B1D12, 0x30B20E04), /* ~= 10^-75 */\n    U64(0x90BD77F3, 0x483BB9B9), U64(0xB1C6F22B, 0x5E6F48C2), /* ~= 10^-74 */\n    U64(0xB4ECD5F0, 0x1A4AA828), U64(0x1E38AEB6, 0x360B1AF3), /* ~= 10^-73 */\n    U64(0xE2280B6C, 0x20DD5232), U64(0x25C6DA63, 0xC38DE1B0), /* ~= 10^-72 */\n    U64(0x8D590723, 0x948A535F), U64(0x579C487E, 0x5A38AD0E), /* ~= 10^-71 */\n    U64(0xB0AF48EC, 0x79ACE837), U64(0x2D835A9D, 0xF0C6D851), /* ~= 10^-70 */\n    U64(0xDCDB1B27, 0x98182244), U64(0xF8E43145, 0x6CF88E65), /* ~= 10^-69 */\n    U64(0x8A08F0F8, 0xBF0F156B), U64(0x1B8E9ECB, 0x641B58FF), /* ~= 10^-68 */\n    U64(0xAC8B2D36, 0xEED2DAC5), U64(0xE272467E, 0x3D222F3F), /* ~= 10^-67 */\n    U64(0xD7ADF884, 0xAA879177), U64(0x5B0ED81D, 0xCC6ABB0F), /* ~= 10^-66 */\n    U64(0x86CCBB52, 0xEA94BAEA), U64(0x98E94712, 0x9FC2B4E9), /* ~= 10^-65 */\n    U64(0xA87FEA27, 0xA539E9A5), U64(0x3F2398D7, 0x47B36224), /* ~= 10^-64 */\n    U64(0xD29FE4B1, 0x8E88640E), U64(0x8EEC7F0D, 0x19A03AAD), /* ~= 10^-63 */\n    U64(0x83A3EEEE, 0xF9153E89), U64(0x1953CF68, 0x300424AC), /* ~= 10^-62 */\n    U64(0xA48CEAAA, 0xB75A8E2B), U64(0x5FA8C342, 0x3C052DD7), /* ~= 10^-61 */\n    U64(0xCDB02555, 0x653131B6), U64(0x3792F412, 0xCB06794D), /* ~= 10^-60 */\n    U64(0x808E1755, 0x5F3EBF11), U64(0xE2BBD88B, 0xBEE40BD0), /* ~= 10^-59 */\n    U64(0xA0B19D2A, 0xB70E6ED6), U64(0x5B6ACEAE, 0xAE9D0EC4), /* ~= 10^-58 */\n    U64(0xC8DE0475, 0x64D20A8B), U64(0xF245825A, 0x5A445275), /* ~= 10^-57 */\n    U64(0xFB158592, 0xBE068D2E), U64(0xEED6E2F0, 0xF0D56712), /* ~= 10^-56 */\n    U64(0x9CED737B, 0xB6C4183D), U64(0x55464DD6, 0x9685606B), /* ~= 10^-55 */\n    U64(0xC428D05A, 0xA4751E4C), U64(0xAA97E14C, 0x3C26B886), /* ~= 10^-54 */\n    U64(0xF5330471, 0x4D9265DF), U64(0xD53DD99F, 0x4B3066A8), /* ~= 10^-53 */\n    U64(0x993FE2C6, 0xD07B7FAB), U64(0xE546A803, 0x8EFE4029), /* ~= 10^-52 */\n    U64(0xBF8FDB78, 0x849A5F96), U64(0xDE985204, 0x72BDD033), /* ~= 10^-51 */\n    U64(0xEF73D256, 0xA5C0F77C), U64(0x963E6685, 0x8F6D4440), /* ~= 10^-50 */\n    U64(0x95A86376, 0x27989AAD), U64(0xDDE70013, 0x79A44AA8), /* ~= 10^-49 */\n    U64(0xBB127C53, 0xB17EC159), U64(0x5560C018, 0x580D5D52), /* ~= 10^-48 */\n    U64(0xE9D71B68, 0x9DDE71AF), U64(0xAAB8F01E, 0x6E10B4A6), /* ~= 10^-47 */\n    U64(0x92267121, 0x62AB070D), U64(0xCAB39613, 0x04CA70E8), /* ~= 10^-46 */\n    U64(0xB6B00D69, 0xBB55C8D1), U64(0x3D607B97, 0xC5FD0D22), /* ~= 10^-45 */\n    U64(0xE45C10C4, 0x2A2B3B05), U64(0x8CB89A7D, 0xB77C506A), /* ~= 10^-44 */\n    U64(0x8EB98A7A, 0x9A5B04E3), U64(0x77F3608E, 0x92ADB242), /* ~= 10^-43 */\n    U64(0xB267ED19, 0x40F1C61C), U64(0x55F038B2, 0x37591ED3), /* ~= 10^-42 */\n    U64(0xDF01E85F, 0x912E37A3), U64(0x6B6C46DE, 0xC52F6688), /* ~= 10^-41 */\n    U64(0x8B61313B, 0xBABCE2C6), U64(0x2323AC4B, 0x3B3DA015), /* ~= 10^-40 */\n    U64(0xAE397D8A, 0xA96C1B77), U64(0xABEC975E, 0x0A0D081A), /* ~= 10^-39 */\n    U64(0xD9C7DCED, 0x53C72255), U64(0x96E7BD35, 0x8C904A21), /* ~= 10^-38 */\n    U64(0x881CEA14, 0x545C7575), U64(0x7E50D641, 0x77DA2E54), /* ~= 10^-37 */\n    U64(0xAA242499, 0x697392D2), U64(0xDDE50BD1, 0xD5D0B9E9), /* ~= 10^-36 */\n    U64(0xD4AD2DBF, 0xC3D07787), U64(0x955E4EC6, 0x4B44E864), /* ~= 10^-35 */\n    U64(0x84EC3C97, 0xDA624AB4), U64(0xBD5AF13B, 0xEF0B113E), /* ~= 10^-34 */\n    U64(0xA6274BBD, 0xD0FADD61), U64(0xECB1AD8A, 0xEACDD58E), /* ~= 10^-33 */\n    U64(0xCFB11EAD, 0x453994BA), U64(0x67DE18ED, 0xA5814AF2), /* ~= 10^-32 */\n    U64(0x81CEB32C, 0x4B43FCF4), U64(0x80EACF94, 0x8770CED7), /* ~= 10^-31 */\n    U64(0xA2425FF7, 0x5E14FC31), U64(0xA1258379, 0xA94D028D), /* ~= 10^-30 */\n    U64(0xCAD2F7F5, 0x359A3B3E), U64(0x096EE458, 0x13A04330), /* ~= 10^-29 */\n    U64(0xFD87B5F2, 0x8300CA0D), U64(0x8BCA9D6E, 0x188853FC), /* ~= 10^-28 */\n    U64(0x9E74D1B7, 0x91E07E48), U64(0x775EA264, 0xCF55347D), /* ~= 10^-27 */\n    U64(0xC6120625, 0x76589DDA), U64(0x95364AFE, 0x032A819D), /* ~= 10^-26 */\n    U64(0xF79687AE, 0xD3EEC551), U64(0x3A83DDBD, 0x83F52204), /* ~= 10^-25 */\n    U64(0x9ABE14CD, 0x44753B52), U64(0xC4926A96, 0x72793542), /* ~= 10^-24 */\n    U64(0xC16D9A00, 0x95928A27), U64(0x75B7053C, 0x0F178293), /* ~= 10^-23 */\n    U64(0xF1C90080, 0xBAF72CB1), U64(0x5324C68B, 0x12DD6338), /* ~= 10^-22 */\n    U64(0x971DA050, 0x74DA7BEE), U64(0xD3F6FC16, 0xEBCA5E03), /* ~= 10^-21 */\n    U64(0xBCE50864, 0x92111AEA), U64(0x88F4BB1C, 0xA6BCF584), /* ~= 10^-20 */\n    U64(0xEC1E4A7D, 0xB69561A5), U64(0x2B31E9E3, 0xD06C32E5), /* ~= 10^-19 */\n    U64(0x9392EE8E, 0x921D5D07), U64(0x3AFF322E, 0x62439FCF), /* ~= 10^-18 */\n    U64(0xB877AA32, 0x36A4B449), U64(0x09BEFEB9, 0xFAD487C2), /* ~= 10^-17 */\n    U64(0xE69594BE, 0xC44DE15B), U64(0x4C2EBE68, 0x7989A9B3), /* ~= 10^-16 */\n    U64(0x901D7CF7, 0x3AB0ACD9), U64(0x0F9D3701, 0x4BF60A10), /* ~= 10^-15 */\n    U64(0xB424DC35, 0x095CD80F), U64(0x538484C1, 0x9EF38C94), /* ~= 10^-14 */\n    U64(0xE12E1342, 0x4BB40E13), U64(0x2865A5F2, 0x06B06FB9), /* ~= 10^-13 */\n    U64(0x8CBCCC09, 0x6F5088CB), U64(0xF93F87B7, 0x442E45D3), /* ~= 10^-12 */\n    U64(0xAFEBFF0B, 0xCB24AAFE), U64(0xF78F69A5, 0x1539D748), /* ~= 10^-11 */\n    U64(0xDBE6FECE, 0xBDEDD5BE), U64(0xB573440E, 0x5A884D1B), /* ~= 10^-10 */\n    U64(0x89705F41, 0x36B4A597), U64(0x31680A88, 0xF8953030), /* ~= 10^-9 */\n    U64(0xABCC7711, 0x8461CEFC), U64(0xFDC20D2B, 0x36BA7C3D), /* ~= 10^-8 */\n    U64(0xD6BF94D5, 0xE57A42BC), U64(0x3D329076, 0x04691B4C), /* ~= 10^-7 */\n    U64(0x8637BD05, 0xAF6C69B5), U64(0xA63F9A49, 0xC2C1B10F), /* ~= 10^-6 */\n    U64(0xA7C5AC47, 0x1B478423), U64(0x0FCF80DC, 0x33721D53), /* ~= 10^-5 */\n    U64(0xD1B71758, 0xE219652B), U64(0xD3C36113, 0x404EA4A8), /* ~= 10^-4 */\n    U64(0x83126E97, 0x8D4FDF3B), U64(0x645A1CAC, 0x083126E9), /* ~= 10^-3 */\n    U64(0xA3D70A3D, 0x70A3D70A), U64(0x3D70A3D7, 0x0A3D70A3), /* ~= 10^-2 */\n    U64(0xCCCCCCCC, 0xCCCCCCCC), U64(0xCCCCCCCC, 0xCCCCCCCC), /* ~= 10^-1 */\n    U64(0x80000000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^0 */\n    U64(0xA0000000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^1 */\n    U64(0xC8000000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^2 */\n    U64(0xFA000000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^3 */\n    U64(0x9C400000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^4 */\n    U64(0xC3500000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^5 */\n    U64(0xF4240000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^6 */\n    U64(0x98968000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^7 */\n    U64(0xBEBC2000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^8 */\n    U64(0xEE6B2800, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^9 */\n    U64(0x9502F900, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^10 */\n    U64(0xBA43B740, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^11 */\n    U64(0xE8D4A510, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^12 */\n    U64(0x9184E72A, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^13 */\n    U64(0xB5E620F4, 0x80000000), U64(0x00000000, 0x00000000), /* == 10^14 */\n    U64(0xE35FA931, 0xA0000000), U64(0x00000000, 0x00000000), /* == 10^15 */\n    U64(0x8E1BC9BF, 0x04000000), U64(0x00000000, 0x00000000), /* == 10^16 */\n    U64(0xB1A2BC2E, 0xC5000000), U64(0x00000000, 0x00000000), /* == 10^17 */\n    U64(0xDE0B6B3A, 0x76400000), U64(0x00000000, 0x00000000), /* == 10^18 */\n    U64(0x8AC72304, 0x89E80000), U64(0x00000000, 0x00000000), /* == 10^19 */\n    U64(0xAD78EBC5, 0xAC620000), U64(0x00000000, 0x00000000), /* == 10^20 */\n    U64(0xD8D726B7, 0x177A8000), U64(0x00000000, 0x00000000), /* == 10^21 */\n    U64(0x87867832, 0x6EAC9000), U64(0x00000000, 0x00000000), /* == 10^22 */\n    U64(0xA968163F, 0x0A57B400), U64(0x00000000, 0x00000000), /* == 10^23 */\n    U64(0xD3C21BCE, 0xCCEDA100), U64(0x00000000, 0x00000000), /* == 10^24 */\n    U64(0x84595161, 0x401484A0), U64(0x00000000, 0x00000000), /* == 10^25 */\n    U64(0xA56FA5B9, 0x9019A5C8), U64(0x00000000, 0x00000000), /* == 10^26 */\n    U64(0xCECB8F27, 0xF4200F3A), U64(0x00000000, 0x00000000), /* == 10^27 */\n    U64(0x813F3978, 0xF8940984), U64(0x40000000, 0x00000000), /* == 10^28 */\n    U64(0xA18F07D7, 0x36B90BE5), U64(0x50000000, 0x00000000), /* == 10^29 */\n    U64(0xC9F2C9CD, 0x04674EDE), U64(0xA4000000, 0x00000000), /* == 10^30 */\n    U64(0xFC6F7C40, 0x45812296), U64(0x4D000000, 0x00000000), /* == 10^31 */\n    U64(0x9DC5ADA8, 0x2B70B59D), U64(0xF0200000, 0x00000000), /* == 10^32 */\n    U64(0xC5371912, 0x364CE305), U64(0x6C280000, 0x00000000), /* == 10^33 */\n    U64(0xF684DF56, 0xC3E01BC6), U64(0xC7320000, 0x00000000), /* == 10^34 */\n    U64(0x9A130B96, 0x3A6C115C), U64(0x3C7F4000, 0x00000000), /* == 10^35 */\n    U64(0xC097CE7B, 0xC90715B3), U64(0x4B9F1000, 0x00000000), /* == 10^36 */\n    U64(0xF0BDC21A, 0xBB48DB20), U64(0x1E86D400, 0x00000000), /* == 10^37 */\n    U64(0x96769950, 0xB50D88F4), U64(0x13144480, 0x00000000), /* == 10^38 */\n    U64(0xBC143FA4, 0xE250EB31), U64(0x17D955A0, 0x00000000), /* == 10^39 */\n    U64(0xEB194F8E, 0x1AE525FD), U64(0x5DCFAB08, 0x00000000), /* == 10^40 */\n    U64(0x92EFD1B8, 0xD0CF37BE), U64(0x5AA1CAE5, 0x00000000), /* == 10^41 */\n    U64(0xB7ABC627, 0x050305AD), U64(0xF14A3D9E, 0x40000000), /* == 10^42 */\n    U64(0xE596B7B0, 0xC643C719), U64(0x6D9CCD05, 0xD0000000), /* == 10^43 */\n    U64(0x8F7E32CE, 0x7BEA5C6F), U64(0xE4820023, 0xA2000000), /* == 10^44 */\n    U64(0xB35DBF82, 0x1AE4F38B), U64(0xDDA2802C, 0x8A800000), /* == 10^45 */\n    U64(0xE0352F62, 0xA19E306E), U64(0xD50B2037, 0xAD200000), /* == 10^46 */\n    U64(0x8C213D9D, 0xA502DE45), U64(0x4526F422, 0xCC340000), /* == 10^47 */\n    U64(0xAF298D05, 0x0E4395D6), U64(0x9670B12B, 0x7F410000), /* == 10^48 */\n    U64(0xDAF3F046, 0x51D47B4C), U64(0x3C0CDD76, 0x5F114000), /* == 10^49 */\n    U64(0x88D8762B, 0xF324CD0F), U64(0xA5880A69, 0xFB6AC800), /* == 10^50 */\n    U64(0xAB0E93B6, 0xEFEE0053), U64(0x8EEA0D04, 0x7A457A00), /* == 10^51 */\n    U64(0xD5D238A4, 0xABE98068), U64(0x72A49045, 0x98D6D880), /* == 10^52 */\n    U64(0x85A36366, 0xEB71F041), U64(0x47A6DA2B, 0x7F864750), /* == 10^53 */\n    U64(0xA70C3C40, 0xA64E6C51), U64(0x999090B6, 0x5F67D924), /* == 10^54 */\n    U64(0xD0CF4B50, 0xCFE20765), U64(0xFFF4B4E3, 0xF741CF6D), /* == 10^55 */\n    U64(0x82818F12, 0x81ED449F), U64(0xBFF8F10E, 0x7A8921A4), /* ~= 10^56 */\n    U64(0xA321F2D7, 0x226895C7), U64(0xAFF72D52, 0x192B6A0D), /* ~= 10^57 */\n    U64(0xCBEA6F8C, 0xEB02BB39), U64(0x9BF4F8A6, 0x9F764490), /* ~= 10^58 */\n    U64(0xFEE50B70, 0x25C36A08), U64(0x02F236D0, 0x4753D5B4), /* ~= 10^59 */\n    U64(0x9F4F2726, 0x179A2245), U64(0x01D76242, 0x2C946590), /* ~= 10^60 */\n    U64(0xC722F0EF, 0x9D80AAD6), U64(0x424D3AD2, 0xB7B97EF5), /* ~= 10^61 */\n    U64(0xF8EBAD2B, 0x84E0D58B), U64(0xD2E08987, 0x65A7DEB2), /* ~= 10^62 */\n    U64(0x9B934C3B, 0x330C8577), U64(0x63CC55F4, 0x9F88EB2F), /* ~= 10^63 */\n    U64(0xC2781F49, 0xFFCFA6D5), U64(0x3CBF6B71, 0xC76B25FB), /* ~= 10^64 */\n    U64(0xF316271C, 0x7FC3908A), U64(0x8BEF464E, 0x3945EF7A), /* ~= 10^65 */\n    U64(0x97EDD871, 0xCFDA3A56), U64(0x97758BF0, 0xE3CBB5AC), /* ~= 10^66 */\n    U64(0xBDE94E8E, 0x43D0C8EC), U64(0x3D52EEED, 0x1CBEA317), /* ~= 10^67 */\n    U64(0xED63A231, 0xD4C4FB27), U64(0x4CA7AAA8, 0x63EE4BDD), /* ~= 10^68 */\n    U64(0x945E455F, 0x24FB1CF8), U64(0x8FE8CAA9, 0x3E74EF6A), /* ~= 10^69 */\n    U64(0xB975D6B6, 0xEE39E436), U64(0xB3E2FD53, 0x8E122B44), /* ~= 10^70 */\n    U64(0xE7D34C64, 0xA9C85D44), U64(0x60DBBCA8, 0x7196B616), /* ~= 10^71 */\n    U64(0x90E40FBE, 0xEA1D3A4A), U64(0xBC8955E9, 0x46FE31CD), /* ~= 10^72 */\n    U64(0xB51D13AE, 0xA4A488DD), U64(0x6BABAB63, 0x98BDBE41), /* ~= 10^73 */\n    U64(0xE264589A, 0x4DCDAB14), U64(0xC696963C, 0x7EED2DD1), /* ~= 10^74 */\n    U64(0x8D7EB760, 0x70A08AEC), U64(0xFC1E1DE5, 0xCF543CA2), /* ~= 10^75 */\n    U64(0xB0DE6538, 0x8CC8ADA8), U64(0x3B25A55F, 0x43294BCB), /* ~= 10^76 */\n    U64(0xDD15FE86, 0xAFFAD912), U64(0x49EF0EB7, 0x13F39EBE), /* ~= 10^77 */\n    U64(0x8A2DBF14, 0x2DFCC7AB), U64(0x6E356932, 0x6C784337), /* ~= 10^78 */\n    U64(0xACB92ED9, 0x397BF996), U64(0x49C2C37F, 0x07965404), /* ~= 10^79 */\n    U64(0xD7E77A8F, 0x87DAF7FB), U64(0xDC33745E, 0xC97BE906), /* ~= 10^80 */\n    U64(0x86F0AC99, 0xB4E8DAFD), U64(0x69A028BB, 0x3DED71A3), /* ~= 10^81 */\n    U64(0xA8ACD7C0, 0x222311BC), U64(0xC40832EA, 0x0D68CE0C), /* ~= 10^82 */\n    U64(0xD2D80DB0, 0x2AABD62B), U64(0xF50A3FA4, 0x90C30190), /* ~= 10^83 */\n    U64(0x83C7088E, 0x1AAB65DB), U64(0x792667C6, 0xDA79E0FA), /* ~= 10^84 */\n    U64(0xA4B8CAB1, 0xA1563F52), U64(0x577001B8, 0x91185938), /* ~= 10^85 */\n    U64(0xCDE6FD5E, 0x09ABCF26), U64(0xED4C0226, 0xB55E6F86), /* ~= 10^86 */\n    U64(0x80B05E5A, 0xC60B6178), U64(0x544F8158, 0x315B05B4), /* ~= 10^87 */\n    U64(0xA0DC75F1, 0x778E39D6), U64(0x696361AE, 0x3DB1C721), /* ~= 10^88 */\n    U64(0xC913936D, 0xD571C84C), U64(0x03BC3A19, 0xCD1E38E9), /* ~= 10^89 */\n    U64(0xFB587849, 0x4ACE3A5F), U64(0x04AB48A0, 0x4065C723), /* ~= 10^90 */\n    U64(0x9D174B2D, 0xCEC0E47B), U64(0x62EB0D64, 0x283F9C76), /* ~= 10^91 */\n    U64(0xC45D1DF9, 0x42711D9A), U64(0x3BA5D0BD, 0x324F8394), /* ~= 10^92 */\n    U64(0xF5746577, 0x930D6500), U64(0xCA8F44EC, 0x7EE36479), /* ~= 10^93 */\n    U64(0x9968BF6A, 0xBBE85F20), U64(0x7E998B13, 0xCF4E1ECB), /* ~= 10^94 */\n    U64(0xBFC2EF45, 0x6AE276E8), U64(0x9E3FEDD8, 0xC321A67E), /* ~= 10^95 */\n    U64(0xEFB3AB16, 0xC59B14A2), U64(0xC5CFE94E, 0xF3EA101E), /* ~= 10^96 */\n    U64(0x95D04AEE, 0x3B80ECE5), U64(0xBBA1F1D1, 0x58724A12), /* ~= 10^97 */\n    U64(0xBB445DA9, 0xCA61281F), U64(0x2A8A6E45, 0xAE8EDC97), /* ~= 10^98 */\n    U64(0xEA157514, 0x3CF97226), U64(0xF52D09D7, 0x1A3293BD), /* ~= 10^99 */\n    U64(0x924D692C, 0xA61BE758), U64(0x593C2626, 0x705F9C56), /* ~= 10^100 */\n    U64(0xB6E0C377, 0xCFA2E12E), U64(0x6F8B2FB0, 0x0C77836C), /* ~= 10^101 */\n    U64(0xE498F455, 0xC38B997A), U64(0x0B6DFB9C, 0x0F956447), /* ~= 10^102 */\n    U64(0x8EDF98B5, 0x9A373FEC), U64(0x4724BD41, 0x89BD5EAC), /* ~= 10^103 */\n    U64(0xB2977EE3, 0x00C50FE7), U64(0x58EDEC91, 0xEC2CB657), /* ~= 10^104 */\n    U64(0xDF3D5E9B, 0xC0F653E1), U64(0x2F2967B6, 0x6737E3ED), /* ~= 10^105 */\n    U64(0x8B865B21, 0x5899F46C), U64(0xBD79E0D2, 0x0082EE74), /* ~= 10^106 */\n    U64(0xAE67F1E9, 0xAEC07187), U64(0xECD85906, 0x80A3AA11), /* ~= 10^107 */\n    U64(0xDA01EE64, 0x1A708DE9), U64(0xE80E6F48, 0x20CC9495), /* ~= 10^108 */\n    U64(0x884134FE, 0x908658B2), U64(0x3109058D, 0x147FDCDD), /* ~= 10^109 */\n    U64(0xAA51823E, 0x34A7EEDE), U64(0xBD4B46F0, 0x599FD415), /* ~= 10^110 */\n    U64(0xD4E5E2CD, 0xC1D1EA96), U64(0x6C9E18AC, 0x7007C91A), /* ~= 10^111 */\n    U64(0x850FADC0, 0x9923329E), U64(0x03E2CF6B, 0xC604DDB0), /* ~= 10^112 */\n    U64(0xA6539930, 0xBF6BFF45), U64(0x84DB8346, 0xB786151C), /* ~= 10^113 */\n    U64(0xCFE87F7C, 0xEF46FF16), U64(0xE6126418, 0x65679A63), /* ~= 10^114 */\n    U64(0x81F14FAE, 0x158C5F6E), U64(0x4FCB7E8F, 0x3F60C07E), /* ~= 10^115 */\n    U64(0xA26DA399, 0x9AEF7749), U64(0xE3BE5E33, 0x0F38F09D), /* ~= 10^116 */\n    U64(0xCB090C80, 0x01AB551C), U64(0x5CADF5BF, 0xD3072CC5), /* ~= 10^117 */\n    U64(0xFDCB4FA0, 0x02162A63), U64(0x73D9732F, 0xC7C8F7F6), /* ~= 10^118 */\n    U64(0x9E9F11C4, 0x014DDA7E), U64(0x2867E7FD, 0xDCDD9AFA), /* ~= 10^119 */\n    U64(0xC646D635, 0x01A1511D), U64(0xB281E1FD, 0x541501B8), /* ~= 10^120 */\n    U64(0xF7D88BC2, 0x4209A565), U64(0x1F225A7C, 0xA91A4226), /* ~= 10^121 */\n    U64(0x9AE75759, 0x6946075F), U64(0x3375788D, 0xE9B06958), /* ~= 10^122 */\n    U64(0xC1A12D2F, 0xC3978937), U64(0x0052D6B1, 0x641C83AE), /* ~= 10^123 */\n    U64(0xF209787B, 0xB47D6B84), U64(0xC0678C5D, 0xBD23A49A), /* ~= 10^124 */\n    U64(0x9745EB4D, 0x50CE6332), U64(0xF840B7BA, 0x963646E0), /* ~= 10^125 */\n    U64(0xBD176620, 0xA501FBFF), U64(0xB650E5A9, 0x3BC3D898), /* ~= 10^126 */\n    U64(0xEC5D3FA8, 0xCE427AFF), U64(0xA3E51F13, 0x8AB4CEBE), /* ~= 10^127 */\n    U64(0x93BA47C9, 0x80E98CDF), U64(0xC66F336C, 0x36B10137), /* ~= 10^128 */\n    U64(0xB8A8D9BB, 0xE123F017), U64(0xB80B0047, 0x445D4184), /* ~= 10^129 */\n    U64(0xE6D3102A, 0xD96CEC1D), U64(0xA60DC059, 0x157491E5), /* ~= 10^130 */\n    U64(0x9043EA1A, 0xC7E41392), U64(0x87C89837, 0xAD68DB2F), /* ~= 10^131 */\n    U64(0xB454E4A1, 0x79DD1877), U64(0x29BABE45, 0x98C311FB), /* ~= 10^132 */\n    U64(0xE16A1DC9, 0xD8545E94), U64(0xF4296DD6, 0xFEF3D67A), /* ~= 10^133 */\n    U64(0x8CE2529E, 0x2734BB1D), U64(0x1899E4A6, 0x5F58660C), /* ~= 10^134 */\n    U64(0xB01AE745, 0xB101E9E4), U64(0x5EC05DCF, 0xF72E7F8F), /* ~= 10^135 */\n    U64(0xDC21A117, 0x1D42645D), U64(0x76707543, 0xF4FA1F73), /* ~= 10^136 */\n    U64(0x899504AE, 0x72497EBA), U64(0x6A06494A, 0x791C53A8), /* ~= 10^137 */\n    U64(0xABFA45DA, 0x0EDBDE69), U64(0x0487DB9D, 0x17636892), /* ~= 10^138 */\n    U64(0xD6F8D750, 0x9292D603), U64(0x45A9D284, 0x5D3C42B6), /* ~= 10^139 */\n    U64(0x865B8692, 0x5B9BC5C2), U64(0x0B8A2392, 0xBA45A9B2), /* ~= 10^140 */\n    U64(0xA7F26836, 0xF282B732), U64(0x8E6CAC77, 0x68D7141E), /* ~= 10^141 */\n    U64(0xD1EF0244, 0xAF2364FF), U64(0x3207D795, 0x430CD926), /* ~= 10^142 */\n    U64(0x8335616A, 0xED761F1F), U64(0x7F44E6BD, 0x49E807B8), /* ~= 10^143 */\n    U64(0xA402B9C5, 0xA8D3A6E7), U64(0x5F16206C, 0x9C6209A6), /* ~= 10^144 */\n    U64(0xCD036837, 0x130890A1), U64(0x36DBA887, 0xC37A8C0F), /* ~= 10^145 */\n    U64(0x80222122, 0x6BE55A64), U64(0xC2494954, 0xDA2C9789), /* ~= 10^146 */\n    U64(0xA02AA96B, 0x06DEB0FD), U64(0xF2DB9BAA, 0x10B7BD6C), /* ~= 10^147 */\n    U64(0xC83553C5, 0xC8965D3D), U64(0x6F928294, 0x94E5ACC7), /* ~= 10^148 */\n    U64(0xFA42A8B7, 0x3ABBF48C), U64(0xCB772339, 0xBA1F17F9), /* ~= 10^149 */\n    U64(0x9C69A972, 0x84B578D7), U64(0xFF2A7604, 0x14536EFB), /* ~= 10^150 */\n    U64(0xC38413CF, 0x25E2D70D), U64(0xFEF51385, 0x19684ABA), /* ~= 10^151 */\n    U64(0xF46518C2, 0xEF5B8CD1), U64(0x7EB25866, 0x5FC25D69), /* ~= 10^152 */\n    U64(0x98BF2F79, 0xD5993802), U64(0xEF2F773F, 0xFBD97A61), /* ~= 10^153 */\n    U64(0xBEEEFB58, 0x4AFF8603), U64(0xAAFB550F, 0xFACFD8FA), /* ~= 10^154 */\n    U64(0xEEAABA2E, 0x5DBF6784), U64(0x95BA2A53, 0xF983CF38), /* ~= 10^155 */\n    U64(0x952AB45C, 0xFA97A0B2), U64(0xDD945A74, 0x7BF26183), /* ~= 10^156 */\n    U64(0xBA756174, 0x393D88DF), U64(0x94F97111, 0x9AEEF9E4), /* ~= 10^157 */\n    U64(0xE912B9D1, 0x478CEB17), U64(0x7A37CD56, 0x01AAB85D), /* ~= 10^158 */\n    U64(0x91ABB422, 0xCCB812EE), U64(0xAC62E055, 0xC10AB33A), /* ~= 10^159 */\n    U64(0xB616A12B, 0x7FE617AA), U64(0x577B986B, 0x314D6009), /* ~= 10^160 */\n    U64(0xE39C4976, 0x5FDF9D94), U64(0xED5A7E85, 0xFDA0B80B), /* ~= 10^161 */\n    U64(0x8E41ADE9, 0xFBEBC27D), U64(0x14588F13, 0xBE847307), /* ~= 10^162 */\n    U64(0xB1D21964, 0x7AE6B31C), U64(0x596EB2D8, 0xAE258FC8), /* ~= 10^163 */\n    U64(0xDE469FBD, 0x99A05FE3), U64(0x6FCA5F8E, 0xD9AEF3BB), /* ~= 10^164 */\n    U64(0x8AEC23D6, 0x80043BEE), U64(0x25DE7BB9, 0x480D5854), /* ~= 10^165 */\n    U64(0xADA72CCC, 0x20054AE9), U64(0xAF561AA7, 0x9A10AE6A), /* ~= 10^166 */\n    U64(0xD910F7FF, 0x28069DA4), U64(0x1B2BA151, 0x8094DA04), /* ~= 10^167 */\n    U64(0x87AA9AFF, 0x79042286), U64(0x90FB44D2, 0xF05D0842), /* ~= 10^168 */\n    U64(0xA99541BF, 0x57452B28), U64(0x353A1607, 0xAC744A53), /* ~= 10^169 */\n    U64(0xD3FA922F, 0x2D1675F2), U64(0x42889B89, 0x97915CE8), /* ~= 10^170 */\n    U64(0x847C9B5D, 0x7C2E09B7), U64(0x69956135, 0xFEBADA11), /* ~= 10^171 */\n    U64(0xA59BC234, 0xDB398C25), U64(0x43FAB983, 0x7E699095), /* ~= 10^172 */\n    U64(0xCF02B2C2, 0x1207EF2E), U64(0x94F967E4, 0x5E03F4BB), /* ~= 10^173 */\n    U64(0x8161AFB9, 0x4B44F57D), U64(0x1D1BE0EE, 0xBAC278F5), /* ~= 10^174 */\n    U64(0xA1BA1BA7, 0x9E1632DC), U64(0x6462D92A, 0x69731732), /* ~= 10^175 */\n    U64(0xCA28A291, 0x859BBF93), U64(0x7D7B8F75, 0x03CFDCFE), /* ~= 10^176 */\n    U64(0xFCB2CB35, 0xE702AF78), U64(0x5CDA7352, 0x44C3D43E), /* ~= 10^177 */\n    U64(0x9DEFBF01, 0xB061ADAB), U64(0x3A088813, 0x6AFA64A7), /* ~= 10^178 */\n    U64(0xC56BAEC2, 0x1C7A1916), U64(0x088AAA18, 0x45B8FDD0), /* ~= 10^179 */\n    U64(0xF6C69A72, 0xA3989F5B), U64(0x8AAD549E, 0x57273D45), /* ~= 10^180 */\n    U64(0x9A3C2087, 0xA63F6399), U64(0x36AC54E2, 0xF678864B), /* ~= 10^181 */\n    U64(0xC0CB28A9, 0x8FCF3C7F), U64(0x84576A1B, 0xB416A7DD), /* ~= 10^182 */\n    U64(0xF0FDF2D3, 0xF3C30B9F), U64(0x656D44A2, 0xA11C51D5), /* ~= 10^183 */\n    U64(0x969EB7C4, 0x7859E743), U64(0x9F644AE5, 0xA4B1B325), /* ~= 10^184 */\n    U64(0xBC4665B5, 0x96706114), U64(0x873D5D9F, 0x0DDE1FEE), /* ~= 10^185 */\n    U64(0xEB57FF22, 0xFC0C7959), U64(0xA90CB506, 0xD155A7EA), /* ~= 10^186 */\n    U64(0x9316FF75, 0xDD87CBD8), U64(0x09A7F124, 0x42D588F2), /* ~= 10^187 */\n    U64(0xB7DCBF53, 0x54E9BECE), U64(0x0C11ED6D, 0x538AEB2F), /* ~= 10^188 */\n    U64(0xE5D3EF28, 0x2A242E81), U64(0x8F1668C8, 0xA86DA5FA), /* ~= 10^189 */\n    U64(0x8FA47579, 0x1A569D10), U64(0xF96E017D, 0x694487BC), /* ~= 10^190 */\n    U64(0xB38D92D7, 0x60EC4455), U64(0x37C981DC, 0xC395A9AC), /* ~= 10^191 */\n    U64(0xE070F78D, 0x3927556A), U64(0x85BBE253, 0xF47B1417), /* ~= 10^192 */\n    U64(0x8C469AB8, 0x43B89562), U64(0x93956D74, 0x78CCEC8E), /* ~= 10^193 */\n    U64(0xAF584166, 0x54A6BABB), U64(0x387AC8D1, 0x970027B2), /* ~= 10^194 */\n    U64(0xDB2E51BF, 0xE9D0696A), U64(0x06997B05, 0xFCC0319E), /* ~= 10^195 */\n    U64(0x88FCF317, 0xF22241E2), U64(0x441FECE3, 0xBDF81F03), /* ~= 10^196 */\n    U64(0xAB3C2FDD, 0xEEAAD25A), U64(0xD527E81C, 0xAD7626C3), /* ~= 10^197 */\n    U64(0xD60B3BD5, 0x6A5586F1), U64(0x8A71E223, 0xD8D3B074), /* ~= 10^198 */\n    U64(0x85C70565, 0x62757456), U64(0xF6872D56, 0x67844E49), /* ~= 10^199 */\n    U64(0xA738C6BE, 0xBB12D16C), U64(0xB428F8AC, 0x016561DB), /* ~= 10^200 */\n    U64(0xD106F86E, 0x69D785C7), U64(0xE13336D7, 0x01BEBA52), /* ~= 10^201 */\n    U64(0x82A45B45, 0x0226B39C), U64(0xECC00246, 0x61173473), /* ~= 10^202 */\n    U64(0xA34D7216, 0x42B06084), U64(0x27F002D7, 0xF95D0190), /* ~= 10^203 */\n    U64(0xCC20CE9B, 0xD35C78A5), U64(0x31EC038D, 0xF7B441F4), /* ~= 10^204 */\n    U64(0xFF290242, 0xC83396CE), U64(0x7E670471, 0x75A15271), /* ~= 10^205 */\n    U64(0x9F79A169, 0xBD203E41), U64(0x0F0062C6, 0xE984D386), /* ~= 10^206 */\n    U64(0xC75809C4, 0x2C684DD1), U64(0x52C07B78, 0xA3E60868), /* ~= 10^207 */\n    U64(0xF92E0C35, 0x37826145), U64(0xA7709A56, 0xCCDF8A82), /* ~= 10^208 */\n    U64(0x9BBCC7A1, 0x42B17CCB), U64(0x88A66076, 0x400BB691), /* ~= 10^209 */\n    U64(0xC2ABF989, 0x935DDBFE), U64(0x6ACFF893, 0xD00EA435), /* ~= 10^210 */\n    U64(0xF356F7EB, 0xF83552FE), U64(0x0583F6B8, 0xC4124D43), /* ~= 10^211 */\n    U64(0x98165AF3, 0x7B2153DE), U64(0xC3727A33, 0x7A8B704A), /* ~= 10^212 */\n    U64(0xBE1BF1B0, 0x59E9A8D6), U64(0x744F18C0, 0x592E4C5C), /* ~= 10^213 */\n    U64(0xEDA2EE1C, 0x7064130C), U64(0x1162DEF0, 0x6F79DF73), /* ~= 10^214 */\n    U64(0x9485D4D1, 0xC63E8BE7), U64(0x8ADDCB56, 0x45AC2BA8), /* ~= 10^215 */\n    U64(0xB9A74A06, 0x37CE2EE1), U64(0x6D953E2B, 0xD7173692), /* ~= 10^216 */\n    U64(0xE8111C87, 0xC5C1BA99), U64(0xC8FA8DB6, 0xCCDD0437), /* ~= 10^217 */\n    U64(0x910AB1D4, 0xDB9914A0), U64(0x1D9C9892, 0x400A22A2), /* ~= 10^218 */\n    U64(0xB54D5E4A, 0x127F59C8), U64(0x2503BEB6, 0xD00CAB4B), /* ~= 10^219 */\n    U64(0xE2A0B5DC, 0x971F303A), U64(0x2E44AE64, 0x840FD61D), /* ~= 10^220 */\n    U64(0x8DA471A9, 0xDE737E24), U64(0x5CEAECFE, 0xD289E5D2), /* ~= 10^221 */\n    U64(0xB10D8E14, 0x56105DAD), U64(0x7425A83E, 0x872C5F47), /* ~= 10^222 */\n    U64(0xDD50F199, 0x6B947518), U64(0xD12F124E, 0x28F77719), /* ~= 10^223 */\n    U64(0x8A5296FF, 0xE33CC92F), U64(0x82BD6B70, 0xD99AAA6F), /* ~= 10^224 */\n    U64(0xACE73CBF, 0xDC0BFB7B), U64(0x636CC64D, 0x1001550B), /* ~= 10^225 */\n    U64(0xD8210BEF, 0xD30EFA5A), U64(0x3C47F7E0, 0x5401AA4E), /* ~= 10^226 */\n    U64(0x8714A775, 0xE3E95C78), U64(0x65ACFAEC, 0x34810A71), /* ~= 10^227 */\n    U64(0xA8D9D153, 0x5CE3B396), U64(0x7F1839A7, 0x41A14D0D), /* ~= 10^228 */\n    U64(0xD31045A8, 0x341CA07C), U64(0x1EDE4811, 0x1209A050), /* ~= 10^229 */\n    U64(0x83EA2B89, 0x2091E44D), U64(0x934AED0A, 0xAB460432), /* ~= 10^230 */\n    U64(0xA4E4B66B, 0x68B65D60), U64(0xF81DA84D, 0x5617853F), /* ~= 10^231 */\n    U64(0xCE1DE406, 0x42E3F4B9), U64(0x36251260, 0xAB9D668E), /* ~= 10^232 */\n    U64(0x80D2AE83, 0xE9CE78F3), U64(0xC1D72B7C, 0x6B426019), /* ~= 10^233 */\n    U64(0xA1075A24, 0xE4421730), U64(0xB24CF65B, 0x8612F81F), /* ~= 10^234 */\n    U64(0xC94930AE, 0x1D529CFC), U64(0xDEE033F2, 0x6797B627), /* ~= 10^235 */\n    U64(0xFB9B7CD9, 0xA4A7443C), U64(0x169840EF, 0x017DA3B1), /* ~= 10^236 */\n    U64(0x9D412E08, 0x06E88AA5), U64(0x8E1F2895, 0x60EE864E), /* ~= 10^237 */\n    U64(0xC491798A, 0x08A2AD4E), U64(0xF1A6F2BA, 0xB92A27E2), /* ~= 10^238 */\n    U64(0xF5B5D7EC, 0x8ACB58A2), U64(0xAE10AF69, 0x6774B1DB), /* ~= 10^239 */\n    U64(0x9991A6F3, 0xD6BF1765), U64(0xACCA6DA1, 0xE0A8EF29), /* ~= 10^240 */\n    U64(0xBFF610B0, 0xCC6EDD3F), U64(0x17FD090A, 0x58D32AF3), /* ~= 10^241 */\n    U64(0xEFF394DC, 0xFF8A948E), U64(0xDDFC4B4C, 0xEF07F5B0), /* ~= 10^242 */\n    U64(0x95F83D0A, 0x1FB69CD9), U64(0x4ABDAF10, 0x1564F98E), /* ~= 10^243 */\n    U64(0xBB764C4C, 0xA7A4440F), U64(0x9D6D1AD4, 0x1ABE37F1), /* ~= 10^244 */\n    U64(0xEA53DF5F, 0xD18D5513), U64(0x84C86189, 0x216DC5ED), /* ~= 10^245 */\n    U64(0x92746B9B, 0xE2F8552C), U64(0x32FD3CF5, 0xB4E49BB4), /* ~= 10^246 */\n    U64(0xB7118682, 0xDBB66A77), U64(0x3FBC8C33, 0x221DC2A1), /* ~= 10^247 */\n    U64(0xE4D5E823, 0x92A40515), U64(0x0FABAF3F, 0xEAA5334A), /* ~= 10^248 */\n    U64(0x8F05B116, 0x3BA6832D), U64(0x29CB4D87, 0xF2A7400E), /* ~= 10^249 */\n    U64(0xB2C71D5B, 0xCA9023F8), U64(0x743E20E9, 0xEF511012), /* ~= 10^250 */\n    U64(0xDF78E4B2, 0xBD342CF6), U64(0x914DA924, 0x6B255416), /* ~= 10^251 */\n    U64(0x8BAB8EEF, 0xB6409C1A), U64(0x1AD089B6, 0xC2F7548E), /* ~= 10^252 */\n    U64(0xAE9672AB, 0xA3D0C320), U64(0xA184AC24, 0x73B529B1), /* ~= 10^253 */\n    U64(0xDA3C0F56, 0x8CC4F3E8), U64(0xC9E5D72D, 0x90A2741E), /* ~= 10^254 */\n    U64(0x88658996, 0x17FB1871), U64(0x7E2FA67C, 0x7A658892), /* ~= 10^255 */\n    U64(0xAA7EEBFB, 0x9DF9DE8D), U64(0xDDBB901B, 0x98FEEAB7), /* ~= 10^256 */\n    U64(0xD51EA6FA, 0x85785631), U64(0x552A7422, 0x7F3EA565), /* ~= 10^257 */\n    U64(0x8533285C, 0x936B35DE), U64(0xD53A8895, 0x8F87275F), /* ~= 10^258 */\n    U64(0xA67FF273, 0xB8460356), U64(0x8A892ABA, 0xF368F137), /* ~= 10^259 */\n    U64(0xD01FEF10, 0xA657842C), U64(0x2D2B7569, 0xB0432D85), /* ~= 10^260 */\n    U64(0x8213F56A, 0x67F6B29B), U64(0x9C3B2962, 0x0E29FC73), /* ~= 10^261 */\n    U64(0xA298F2C5, 0x01F45F42), U64(0x8349F3BA, 0x91B47B8F), /* ~= 10^262 */\n    U64(0xCB3F2F76, 0x42717713), U64(0x241C70A9, 0x36219A73), /* ~= 10^263 */\n    U64(0xFE0EFB53, 0xD30DD4D7), U64(0xED238CD3, 0x83AA0110), /* ~= 10^264 */\n    U64(0x9EC95D14, 0x63E8A506), U64(0xF4363804, 0x324A40AA), /* ~= 10^265 */\n    U64(0xC67BB459, 0x7CE2CE48), U64(0xB143C605, 0x3EDCD0D5), /* ~= 10^266 */\n    U64(0xF81AA16F, 0xDC1B81DA), U64(0xDD94B786, 0x8E94050A), /* ~= 10^267 */\n    U64(0x9B10A4E5, 0xE9913128), U64(0xCA7CF2B4, 0x191C8326), /* ~= 10^268 */\n    U64(0xC1D4CE1F, 0x63F57D72), U64(0xFD1C2F61, 0x1F63A3F0), /* ~= 10^269 */\n    U64(0xF24A01A7, 0x3CF2DCCF), U64(0xBC633B39, 0x673C8CEC), /* ~= 10^270 */\n    U64(0x976E4108, 0x8617CA01), U64(0xD5BE0503, 0xE085D813), /* ~= 10^271 */\n    U64(0xBD49D14A, 0xA79DBC82), U64(0x4B2D8644, 0xD8A74E18), /* ~= 10^272 */\n    U64(0xEC9C459D, 0x51852BA2), U64(0xDDF8E7D6, 0x0ED1219E), /* ~= 10^273 */\n    U64(0x93E1AB82, 0x52F33B45), U64(0xCABB90E5, 0xC942B503), /* ~= 10^274 */\n    U64(0xB8DA1662, 0xE7B00A17), U64(0x3D6A751F, 0x3B936243), /* ~= 10^275 */\n    U64(0xE7109BFB, 0xA19C0C9D), U64(0x0CC51267, 0x0A783AD4), /* ~= 10^276 */\n    U64(0x906A617D, 0x450187E2), U64(0x27FB2B80, 0x668B24C5), /* ~= 10^277 */\n    U64(0xB484F9DC, 0x9641E9DA), U64(0xB1F9F660, 0x802DEDF6), /* ~= 10^278 */\n    U64(0xE1A63853, 0xBBD26451), U64(0x5E7873F8, 0xA0396973), /* ~= 10^279 */\n    U64(0x8D07E334, 0x55637EB2), U64(0xDB0B487B, 0x6423E1E8), /* ~= 10^280 */\n    U64(0xB049DC01, 0x6ABC5E5F), U64(0x91CE1A9A, 0x3D2CDA62), /* ~= 10^281 */\n    U64(0xDC5C5301, 0xC56B75F7), U64(0x7641A140, 0xCC7810FB), /* ~= 10^282 */\n    U64(0x89B9B3E1, 0x1B6329BA), U64(0xA9E904C8, 0x7FCB0A9D), /* ~= 10^283 */\n    U64(0xAC2820D9, 0x623BF429), U64(0x546345FA, 0x9FBDCD44), /* ~= 10^284 */\n    U64(0xD732290F, 0xBACAF133), U64(0xA97C1779, 0x47AD4095), /* ~= 10^285 */\n    U64(0x867F59A9, 0xD4BED6C0), U64(0x49ED8EAB, 0xCCCC485D), /* ~= 10^286 */\n    U64(0xA81F3014, 0x49EE8C70), U64(0x5C68F256, 0xBFFF5A74), /* ~= 10^287 */\n    U64(0xD226FC19, 0x5C6A2F8C), U64(0x73832EEC, 0x6FFF3111), /* ~= 10^288 */\n    U64(0x83585D8F, 0xD9C25DB7), U64(0xC831FD53, 0xC5FF7EAB), /* ~= 10^289 */\n    U64(0xA42E74F3, 0xD032F525), U64(0xBA3E7CA8, 0xB77F5E55), /* ~= 10^290 */\n    U64(0xCD3A1230, 0xC43FB26F), U64(0x28CE1BD2, 0xE55F35EB), /* ~= 10^291 */\n    U64(0x80444B5E, 0x7AA7CF85), U64(0x7980D163, 0xCF5B81B3), /* ~= 10^292 */\n    U64(0xA0555E36, 0x1951C366), U64(0xD7E105BC, 0xC332621F), /* ~= 10^293 */\n    U64(0xC86AB5C3, 0x9FA63440), U64(0x8DD9472B, 0xF3FEFAA7), /* ~= 10^294 */\n    U64(0xFA856334, 0x878FC150), U64(0xB14F98F6, 0xF0FEB951), /* ~= 10^295 */\n    U64(0x9C935E00, 0xD4B9D8D2), U64(0x6ED1BF9A, 0x569F33D3), /* ~= 10^296 */\n    U64(0xC3B83581, 0x09E84F07), U64(0x0A862F80, 0xEC4700C8), /* ~= 10^297 */\n    U64(0xF4A642E1, 0x4C6262C8), U64(0xCD27BB61, 0x2758C0FA), /* ~= 10^298 */\n    U64(0x98E7E9CC, 0xCFBD7DBD), U64(0x8038D51C, 0xB897789C), /* ~= 10^299 */\n    U64(0xBF21E440, 0x03ACDD2C), U64(0xE0470A63, 0xE6BD56C3), /* ~= 10^300 */\n    U64(0xEEEA5D50, 0x04981478), U64(0x1858CCFC, 0xE06CAC74), /* ~= 10^301 */\n    U64(0x95527A52, 0x02DF0CCB), U64(0x0F37801E, 0x0C43EBC8), /* ~= 10^302 */\n    U64(0xBAA718E6, 0x8396CFFD), U64(0xD3056025, 0x8F54E6BA), /* ~= 10^303 */\n    U64(0xE950DF20, 0x247C83FD), U64(0x47C6B82E, 0xF32A2069), /* ~= 10^304 */\n    U64(0x91D28B74, 0x16CDD27E), U64(0x4CDC331D, 0x57FA5441), /* ~= 10^305 */\n    U64(0xB6472E51, 0x1C81471D), U64(0xE0133FE4, 0xADF8E952), /* ~= 10^306 */\n    U64(0xE3D8F9E5, 0x63A198E5), U64(0x58180FDD, 0xD97723A6), /* ~= 10^307 */\n    U64(0x8E679C2F, 0x5E44FF8F), U64(0x570F09EA, 0xA7EA7648), /* ~= 10^308 */\n    U64(0xB201833B, 0x35D63F73), U64(0x2CD2CC65, 0x51E513DA), /* ~= 10^309 */\n    U64(0xDE81E40A, 0x034BCF4F), U64(0xF8077F7E, 0xA65E58D1), /* ~= 10^310 */\n    U64(0x8B112E86, 0x420F6191), U64(0xFB04AFAF, 0x27FAF782), /* ~= 10^311 */\n    U64(0xADD57A27, 0xD29339F6), U64(0x79C5DB9A, 0xF1F9B563), /* ~= 10^312 */\n    U64(0xD94AD8B1, 0xC7380874), U64(0x18375281, 0xAE7822BC), /* ~= 10^313 */\n    U64(0x87CEC76F, 0x1C830548), U64(0x8F229391, 0x0D0B15B5), /* ~= 10^314 */\n    U64(0xA9C2794A, 0xE3A3C69A), U64(0xB2EB3875, 0x504DDB22), /* ~= 10^315 */\n    U64(0xD433179D, 0x9C8CB841), U64(0x5FA60692, 0xA46151EB), /* ~= 10^316 */\n    U64(0x849FEEC2, 0x81D7F328), U64(0xDBC7C41B, 0xA6BCD333), /* ~= 10^317 */\n    U64(0xA5C7EA73, 0x224DEFF3), U64(0x12B9B522, 0x906C0800), /* ~= 10^318 */\n    U64(0xCF39E50F, 0xEAE16BEF), U64(0xD768226B, 0x34870A00), /* ~= 10^319 */\n    U64(0x81842F29, 0xF2CCE375), U64(0xE6A11583, 0x00D46640), /* ~= 10^320 */\n    U64(0xA1E53AF4, 0x6F801C53), U64(0x60495AE3, 0xC1097FD0), /* ~= 10^321 */\n    U64(0xCA5E89B1, 0x8B602368), U64(0x385BB19C, 0xB14BDFC4), /* ~= 10^322 */\n    U64(0xFCF62C1D, 0xEE382C42), U64(0x46729E03, 0xDD9ED7B5), /* ~= 10^323 */\n    U64(0x9E19DB92, 0xB4E31BA9), U64(0x6C07A2C2, 0x6A8346D1)  /* ~= 10^324 */\n};\n\n/**\n Get the cached pow10 value from pow10_sig_table.\n @param exp10 The exponent of pow(10, e). This value must in range\n              POW10_SIG_TABLE_MIN_EXP to POW10_SIG_TABLE_MAX_EXP.\n @param hi    The highest 64 bits of pow(10, e).\n @param lo    The lower 64 bits after `hi`.\n */\nstatic_inline void pow10_table_get_sig(i32 exp10, u64 *hi, u64 *lo) {\n    i32 idx = exp10 - (POW10_SIG_TABLE_MIN_EXP);\n    *hi = pow10_sig_table[idx * 2];\n    *lo = pow10_sig_table[idx * 2 + 1];\n}\n\n/**\n Get the exponent (base 2) for highest 64 bits significand in pow10_sig_table.\n */\nstatic_inline void pow10_table_get_exp(i32 exp10, i32 *exp2) {\n    /* e2 = floor(log2(pow(10, e))) - 64 + 1 */\n    /*    = floor(e * log2(10) - 63)         */\n    *exp2 = (exp10 * 217706 - 4128768) >> 16;\n}\n\n#endif\n\n\n\n#if !YYJSON_DISABLE_READER\n\n/*==============================================================================\n * JSON Character Matcher\n *============================================================================*/\n\n/** Character type */\ntypedef u8 char_type;\n\n/** Whitespace character: ' ', '\\\\t', '\\\\n', '\\\\r'. */\nstatic const char_type CHAR_TYPE_SPACE      = 1 << 0;\n\n/** Number character: '-', [0-9]. */\nstatic const char_type CHAR_TYPE_NUMBER     = 1 << 1;\n\n/** JSON Escaped character: '\"', '\\', [0x00-0x1F]. */\nstatic const char_type CHAR_TYPE_ESC_ASCII  = 1 << 2;\n\n/** Non-ASCII character: [0x80-0xFF]. */\nstatic const char_type CHAR_TYPE_NON_ASCII  = 1 << 3;\n\n/** JSON container character: '{', '['. */\nstatic const char_type CHAR_TYPE_CONTAINER  = 1 << 4;\n\n/** Comment character: '/'. */\nstatic const char_type CHAR_TYPE_COMMENT    = 1 << 5;\n\n/** Line end character: '\\\\n', '\\\\r', '\\0'. */\nstatic const char_type CHAR_TYPE_LINE_END   = 1 << 6;\n\n/** Hexadecimal numeric character: [0-9a-fA-F]. */\nstatic const char_type CHAR_TYPE_HEX        = 1 << 7;\n\n/** Character type table (generate with misc/make_tables.c) */\nstatic const char_type char_table[256] = {\n    0x44, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,\n    0x04, 0x05, 0x45, 0x04, 0x04, 0x45, 0x04, 0x04,\n    0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,\n    0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,\n    0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x20,\n    0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,\n    0x82, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00,\n    0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08\n};\n\n/** Match a character with specified type. */\nstatic_inline bool char_is_type(u8 c, char_type type) {\n    return (char_table[c] & type) != 0;\n}\n\n/** Match a whitespace: ' ', '\\\\t', '\\\\n', '\\\\r'. */\nstatic_inline bool char_is_space(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_SPACE);\n}\n\n/** Match a whitespace or comment: ' ', '\\\\t', '\\\\n', '\\\\r', '/'. */\nstatic_inline bool char_is_space_or_comment(u8 c) {\n    return char_is_type(c, (char_type)(CHAR_TYPE_SPACE | CHAR_TYPE_COMMENT));\n}\n\n/** Match a JSON number: '-', [0-9]. */\nstatic_inline bool char_is_number(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_NUMBER);\n}\n\n/** Match a JSON container: '{', '['. */\nstatic_inline bool char_is_container(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_CONTAINER);\n}\n\n/** Match a stop character in ASCII string: '\"', '\\', [0x00-0x1F,0x80-0xFF]. */\nstatic_inline bool char_is_ascii_stop(u8 c) {\n    return char_is_type(c, (char_type)(CHAR_TYPE_ESC_ASCII |\n                                       CHAR_TYPE_NON_ASCII));\n}\n\n/** Match a line end character: '\\\\n', '\\\\r', '\\0'. */\nstatic_inline bool char_is_line_end(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_LINE_END);\n}\n\n/** Match a hexadecimal numeric character: [0-9a-fA-F]. */\nstatic_inline bool char_is_hex(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_HEX);\n}\n\n\n\n/*==============================================================================\n * Digit Character Matcher\n *============================================================================*/\n\n/** Digit type */\ntypedef u8 digi_type;\n\n/** Digit: '0'. */\nstatic const digi_type DIGI_TYPE_ZERO       = 1 << 0;\n\n/** Digit: [1-9]. */\nstatic const digi_type DIGI_TYPE_NONZERO    = 1 << 1;\n\n/** Plus sign (positive): '+'. */\nstatic const digi_type DIGI_TYPE_POS        = 1 << 2;\n\n/** Minus sign (negative): '-'. */\nstatic const digi_type DIGI_TYPE_NEG        = 1 << 3;\n\n/** Decimal point: '.' */\nstatic const digi_type DIGI_TYPE_DOT        = 1 << 4;\n\n/** Exponent sign: 'e, 'E'. */\nstatic const digi_type DIGI_TYPE_EXP        = 1 << 5;\n\n/** Digit type table (generate with misc/make_tables.c) */\nstatic const digi_type digi_table[256] = {\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x10, 0x00,\n    0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,\n    0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n};\n\n/** Match a character with specified type. */\nstatic_inline bool digi_is_type(u8 d, digi_type type) {\n    return (digi_table[d] & type) != 0;\n}\n\n/** Match a sign: '+', '-' */\nstatic_inline bool digi_is_sign(u8 d) {\n    return digi_is_type(d, (digi_type)(DIGI_TYPE_POS | DIGI_TYPE_NEG));\n}\n\n/** Match a none zero digit: [1-9] */\nstatic_inline bool digi_is_nonzero(u8 d) {\n    return digi_is_type(d, (digi_type)DIGI_TYPE_NONZERO);\n}\n\n/** Match a digit: [0-9] */\nstatic_inline bool digi_is_digit(u8 d) {\n    return digi_is_type(d, (digi_type)(DIGI_TYPE_ZERO | DIGI_TYPE_NONZERO));\n}\n\n/** Match an exponent sign: 'e', 'E'. */\nstatic_inline bool digi_is_exp(u8 d) {\n    return digi_is_type(d, (digi_type)DIGI_TYPE_EXP);\n}\n\n/** Match a floating point indicator: '.', 'e', 'E'. */\nstatic_inline bool digi_is_fp(u8 d) {\n    return digi_is_type(d, (digi_type)(DIGI_TYPE_DOT | DIGI_TYPE_EXP));\n}\n\n/** Match a digit or floating point indicator: [0-9], '.', 'e', 'E'. */\nstatic_inline bool digi_is_digit_or_fp(u8 d) {\n    return digi_is_type(d, (digi_type)(DIGI_TYPE_ZERO | DIGI_TYPE_NONZERO |\n                                       DIGI_TYPE_DOT | DIGI_TYPE_EXP));\n}\n\n\n\n/*==============================================================================\n * Hex Character Reader\n * This function is used by JSON reader to read escaped characters.\n *============================================================================*/\n\n/**\n This table is used to convert 4 hex character sequence to a number.\n A valid hex character [0-9A-Fa-f] will mapped to it's raw number [0x00, 0x0F],\n an invalid hex character will mapped to [0xF0].\n (generate with misc/make_tables.c)\n */\nstatic const u8 hex_conv_table[256] = {\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n    0x08, 0x09, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0\n};\n\n/**\n Scans an escaped character sequence as a UTF-16 code unit (branchless).\n e.g. \"\\\\u005C\" should pass \"005C\" as `cur`.\n \n This requires the string has 4-byte zero padding.\n */\nstatic_inline bool read_hex_u16(const u8 *cur, u16 *val) {\n    u16 c0, c1, c2, c3, t0, t1;\n    c0 = hex_conv_table[cur[0]];\n    c1 = hex_conv_table[cur[1]];\n    c2 = hex_conv_table[cur[2]];\n    c3 = hex_conv_table[cur[3]];\n    t0 = (u16)((c0 << 8) | c2);\n    t1 = (u16)((c1 << 8) | c3);\n    *val = (u16)((t0 << 4) | t1);\n    return ((t0 | t1) & (u16)0xF0F0) == 0;\n}\n\n\n\n/*==============================================================================\n * JSON Reader Utils\n * These functions are used by JSON reader to read literals and comments.\n *============================================================================*/\n\n/** Read 'true' literal, '*cur' should be 't'. */\nstatic_inline bool read_true(u8 **ptr, yyjson_val *val) {\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if (likely(byte_match_4(cur, \"true\"))) {\n        val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE;\n        *end = cur + 4;\n        return true;\n    }\n    return false;\n}\n\n/** Read 'false' literal, '*cur' should be 'f'. */\nstatic_inline bool read_false(u8 **ptr, yyjson_val *val) {\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if (likely(byte_match_4(cur + 1, \"alse\"))) {\n        val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE;\n        *end = cur + 5;\n        return true;\n    }\n    return false;\n}\n\n/** Read 'null' literal, '*cur' should be 'n'. */\nstatic_inline bool read_null(u8 **ptr, yyjson_val *val) {\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if (likely(byte_match_4(cur, \"null\"))) {\n        val->tag = YYJSON_TYPE_NULL;\n        *end = cur + 4;\n        return true;\n    }\n    return false;\n}\n\n/** Read 'Inf' or 'Infinity' literal (ignoring case). */\nstatic_inline bool read_inf(bool sign, u8 **ptr, u8 **pre, yyjson_val *val) {\n#if !YYJSON_DISABLE_NON_STANDARD\n    u8 *hdr = *ptr - sign;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if ((cur[0] == 'I' || cur[0] == 'i') &&\n        (cur[1] == 'N' || cur[1] == 'n') &&\n        (cur[2] == 'F' || cur[2] == 'f')) {\n        if ((cur[3] == 'I' || cur[3] == 'i') &&\n            (cur[4] == 'N' || cur[4] == 'n') &&\n            (cur[5] == 'I' || cur[5] == 'i') &&\n            (cur[6] == 'T' || cur[6] == 't') &&\n            (cur[7] == 'Y' || cur[7] == 'y')) {\n            cur += 8;\n        } else {\n            cur += 3;\n        }\n        *end = cur;\n        if (pre) {\n            /* add null-terminator for previous raw string */\n            if (*pre) **pre = '\\0';\n            *pre = cur;\n            val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW;\n            val->uni.str = (const char *)hdr;\n        } else {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n            val->uni.u64 = f64_raw_get_inf(sign);\n        }\n        return true;\n    }\n#endif\n    return false;\n}\n\n/** Read 'NaN' literal (ignoring case). */\nstatic_inline bool read_nan(bool sign, u8 **ptr, u8 **pre, yyjson_val *val) {\n#if !YYJSON_DISABLE_NON_STANDARD\n    u8 *hdr = *ptr - sign;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if ((cur[0] == 'N' || cur[0] == 'n') &&\n        (cur[1] == 'A' || cur[1] == 'a') &&\n        (cur[2] == 'N' || cur[2] == 'n')) {\n        cur += 3;\n        *end = cur;\n        if (pre) {\n            /* add null-terminator for previous raw string */\n            if (*pre) **pre = '\\0';\n            *pre = cur;\n            val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW;\n            val->uni.str = (const char *)hdr;\n        } else {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n            val->uni.u64 = f64_raw_get_nan(sign);\n        }\n        return true;\n    }\n#endif\n    return false;\n}\n\n/** Read 'Inf', 'Infinity' or 'NaN' literal (ignoring case). */\nstatic_inline bool read_inf_or_nan(bool sign, u8 **ptr, u8 **pre,\n                                   yyjson_val *val) {\n    if (read_inf(sign, ptr, pre, val)) return true;\n    if (read_nan(sign, ptr, pre, val)) return true;\n    return false;\n}\n\n/** Read a JSON number as raw string. */\nstatic_noinline bool read_number_raw(u8 **ptr,\n                                     u8 **pre,\n                                     yyjson_read_flag flg,\n                                     yyjson_val *val,\n                                     const char **msg) {\n    \n#define return_err(_pos, _msg) do { \\\n    *msg = _msg; \\\n    *end = _pos; \\\n    return false; \\\n} while (false)\n    \n#define return_raw() do { \\\n    val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW; \\\n    val->uni.str = (const char *)hdr; \\\n    *pre = cur; *end = cur; return true; \\\n} while (false)\n    \n    u8 *hdr = *ptr;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    \n    /* add null-terminator for previous raw string */\n    if (*pre) **pre = '\\0';\n    \n    /* skip sign */\n    cur += (*cur == '-');\n    \n    /* read first digit, check leading zero */\n    if (unlikely(!digi_is_digit(*cur))) {\n        if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) {\n            if (read_inf_or_nan(*hdr == '-', &cur, pre, val)) return_raw();\n        }\n        return_err(cur, \"no digit after minus sign\");\n    }\n    \n    /* read integral part */\n    if (*cur == '0') {\n        cur++;\n        if (unlikely(digi_is_digit(*cur))) {\n            return_err(cur - 1, \"number with leading zero is not allowed\");\n        }\n        if (!digi_is_fp(*cur)) return_raw();\n    } else {\n        while (digi_is_digit(*cur)) cur++;\n        if (!digi_is_fp(*cur)) return_raw();\n    }\n    \n    /* read fraction part */\n    if (*cur == '.') {\n        cur++;\n        if (!digi_is_digit(*cur++)) {\n            return_err(cur, \"no digit after decimal point\");\n        }\n        while (digi_is_digit(*cur)) cur++;\n    }\n    \n    /* read exponent part */\n    if (digi_is_exp(*cur)) {\n        cur += 1 + digi_is_sign(cur[1]);\n        if (!digi_is_digit(*cur++)) {\n            return_err(cur, \"no digit after exponent sign\");\n        }\n        while (digi_is_digit(*cur)) cur++;\n    }\n    \n    return_raw();\n    \n#undef return_err\n#undef return_raw\n}\n\n/**\n Skips spaces and comments as many as possible.\n \n It will return false in these cases:\n    1. No character is skipped. The 'end' pointer is set as input cursor.\n    2. A multiline comment is not closed. The 'end' pointer is set as the head\n       of this comment block.\n */\nstatic_noinline bool skip_spaces_and_comments(u8 **ptr) {\n    u8 *hdr = *ptr;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    while (true) {\n        if (byte_match_2(cur, \"/*\")) {\n            hdr = cur;\n            cur += 2;\n            while (true) {\n                if (byte_match_2(cur, \"*/\")) {\n                    cur += 2;\n                    break;\n                }\n                if (*cur == 0) {\n                    *end = hdr;\n                    return false;\n                }\n                cur++;\n            }\n            continue;\n        }\n        if (byte_match_2(cur, \"//\")) {\n            cur += 2;\n            while (!char_is_line_end(*cur)) cur++;\n            continue;\n        }\n        if (char_is_space(*cur)) {\n            cur += 1;\n            while (char_is_space(*cur)) cur++;\n            continue;\n        }\n        break;\n    }\n    *end = cur;\n    return hdr != cur;\n}\n\n/**\n Check truncated string.\n Returns true if `cur` match `str` but is truncated.\n */\nstatic_inline bool is_truncated_str(u8 *cur, u8 *end,\n                                    const char *str,\n                                    bool case_sensitive) {\n    usize len = strlen(str);\n    if (cur + len <= end || end <= cur) return false;\n    if (case_sensitive) {\n        return memcmp(cur, str, (usize)(end - cur)) == 0;\n    }\n    for (; cur < end; cur++, str++) {\n        if ((*cur != (u8)*str) && (*cur != (u8)*str - 'a' + 'A')) {\n            return false;\n        }\n    }\n    return true;\n}\n\n/**\n Check truncated JSON on parsing errors.\n Returns true if the input is valid but truncated.\n */\nstatic_noinline bool is_truncated_end(u8 *hdr, u8 *cur, u8 *end,\n                                      yyjson_read_code code,\n                                      yyjson_read_flag flg) {\n    if (cur >= end) return true;\n    if (code == YYJSON_READ_ERROR_LITERAL) {\n        if (is_truncated_str(cur, end, \"true\", true) ||\n            is_truncated_str(cur, end, \"false\", true) ||\n            is_truncated_str(cur, end, \"null\", true)) {\n            return true;\n        }\n    }\n    if (code == YYJSON_READ_ERROR_UNEXPECTED_CHARACTER ||\n        code == YYJSON_READ_ERROR_INVALID_NUMBER ||\n        code == YYJSON_READ_ERROR_LITERAL) {\n        if ((flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (*cur == '-') cur++;\n            if (is_truncated_str(cur, end, \"infinity\", false) ||\n                is_truncated_str(cur, end, \"nan\", false)) {\n                return true;\n            }\n        }\n    }\n    if (code == YYJSON_READ_ERROR_UNEXPECTED_CONTENT) {\n        if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) {\n            if (hdr + 3 <= cur &&\n                is_truncated_str(cur - 3, end, \"infinity\", false)) {\n                return true; /* e.g. infin would be read as inf + in */\n            }\n        }\n    }\n    if (code == YYJSON_READ_ERROR_INVALID_STRING) {\n        usize len = (usize)(end - cur);\n        \n        /* unicode escape sequence */\n        if (*cur == '\\\\') {\n            if (len == 1) return true;\n            if (len <= 5) {\n                if (*++cur != 'u') return false;\n                for (++cur; cur < end; cur++) {\n                    if (!char_is_hex(*cur)) return false;\n                }\n                return true;\n            }\n            return false;\n        }\n        \n        /* 2 to 4 bytes UTF-8, see `read_string()` for details. */\n        if (*cur & 0x80) {\n            u8 c0 = cur[0], c1 = cur[1], c2 = cur[2];\n            if (len == 1) {\n                /* 2 bytes UTF-8, truncated */\n                if ((c0 & 0xE0) == 0xC0 && (c0 & 0x1E) != 0x00) return true;\n                /* 3 bytes UTF-8, truncated */\n                if ((c0 & 0xF0) == 0xE0) return true;\n                /* 4 bytes UTF-8, truncated */\n                if ((c0 & 0xF8) == 0xF0 && (c0 & 0x07) <= 0x04) return true;\n            }\n            if (len == 2) {\n                /* 3 bytes UTF-8, truncated */\n                if ((c0 & 0xF0) == 0xE0 &&\n                    (c1 & 0xC0) == 0x80) {\n                    u8 pat = (u8)(((c0 & 0x0F) << 1) | ((c1 & 0x20) >> 5));\n                    return 0x01 <= pat && pat != 0x1B;\n                }\n                /* 4 bytes UTF-8, truncated */\n                if ((c0 & 0xF8) == 0xF0 &&\n                    (c1 & 0xC0) == 0x80) {\n                    u8 pat = (u8)(((c0 & 0x07) << 2) | ((c1 & 0x30) >> 4));\n                    return 0x01 <= pat && pat <= 0x10;\n                }\n            }\n            if (len == 3) {\n                /* 4 bytes UTF-8, truncated */\n                if ((c0 & 0xF8) == 0xF0 &&\n                    (c1 & 0xC0) == 0x80 &&\n                    (c2 & 0xC0) == 0x80) {\n                    u8 pat = (u8)(((c0 & 0x07) << 2) | ((c1 & 0x30) >> 4));\n                    return 0x01 <= pat && pat <= 0x10;\n                }\n            }\n        }\n    }\n    return false;\n}\n\n\n\n#if YYJSON_HAS_IEEE_754 && !YYJSON_DISABLE_FAST_FP_CONV /* FP_READER */\n\n/*==============================================================================\n * BigInt For Floating Point Number Reader\n *\n * The bigint algorithm is used by floating-point number reader to get correctly\n * rounded result for numbers with lots of digits. This part of code is rarely\n * used for common numbers.\n *============================================================================*/\n\n/** Maximum exponent of exact pow10 */\n#define U64_POW10_MAX_EXP 19\n\n/** Table: [ 10^0, ..., 10^19 ] (generate with misc/make_tables.c) */\nstatic const u64 u64_pow10_table[U64_POW10_MAX_EXP + 1] = {\n    U64(0x00000000, 0x00000001), U64(0x00000000, 0x0000000A),\n    U64(0x00000000, 0x00000064), U64(0x00000000, 0x000003E8),\n    U64(0x00000000, 0x00002710), U64(0x00000000, 0x000186A0),\n    U64(0x00000000, 0x000F4240), U64(0x00000000, 0x00989680),\n    U64(0x00000000, 0x05F5E100), U64(0x00000000, 0x3B9ACA00),\n    U64(0x00000002, 0x540BE400), U64(0x00000017, 0x4876E800),\n    U64(0x000000E8, 0xD4A51000), U64(0x00000918, 0x4E72A000),\n    U64(0x00005AF3, 0x107A4000), U64(0x00038D7E, 0xA4C68000),\n    U64(0x002386F2, 0x6FC10000), U64(0x01634578, 0x5D8A0000),\n    U64(0x0DE0B6B3, 0xA7640000), U64(0x8AC72304, 0x89E80000)\n};\n\n/** Maximum numbers of chunks used by a bigint (58 is enough here). */\n#define BIGINT_MAX_CHUNKS 64\n\n/** Unsigned arbitrarily large integer */\ntypedef struct bigint {\n    u32 used; /* used chunks count, should not be 0 */\n    u64 bits[BIGINT_MAX_CHUNKS]; /* chunks */\n} bigint;\n\n/**\n Evaluate 'big += val'.\n @param big A big number (can be 0).\n @param val An unsigned integer (can be 0).\n */\nstatic_inline void bigint_add_u64(bigint *big, u64 val) {\n    u32 idx, max;\n    u64 num = big->bits[0];\n    u64 add = num + val;\n    big->bits[0] = add;\n    if (likely((add >= num) || (add >= val))) return;\n    for ((void)(idx = 1), max = big->used; idx < max; idx++) {\n        if (likely(big->bits[idx] != U64_MAX)) {\n            big->bits[idx] += 1;\n            return;\n        }\n        big->bits[idx] = 0;\n    }\n    big->bits[big->used++] = 1;\n}\n\n/**\n Evaluate 'big *= val'.\n @param big A big number (can be 0).\n @param val An unsigned integer (cannot be 0).\n */\nstatic_inline void bigint_mul_u64(bigint *big, u64 val) {\n    u32 idx = 0, max = big->used;\n    u64 hi, lo, carry = 0;\n    for (; idx < max; idx++) {\n        if (big->bits[idx]) break;\n    }\n    for (; idx < max; idx++) {\n        u128_mul_add(big->bits[idx], val, carry, &hi, &lo);\n        big->bits[idx] = lo;\n        carry = hi;\n    }\n    if (carry) big->bits[big->used++] = carry;\n}\n\n/**\n Evaluate 'big *= 2^exp'.\n @param big A big number (can be 0).\n @param exp An exponent integer (can be 0).\n */\nstatic_inline void bigint_mul_pow2(bigint *big, u32 exp) {\n    u32 shft = exp % 64;\n    u32 move = exp / 64;\n    u32 idx = big->used;\n    if (unlikely(shft == 0)) {\n        for (; idx > 0; idx--) {\n            big->bits[idx + move - 1] = big->bits[idx - 1];\n        }\n        big->used += move;\n        while (move) big->bits[--move] = 0;\n    } else {\n        big->bits[idx] = 0;\n        for (; idx > 0; idx--) {\n            u64 num = big->bits[idx] << shft;\n            num |= big->bits[idx - 1] >> (64 - shft);\n            big->bits[idx + move] = num;\n        }\n        big->bits[move] = big->bits[0] << shft;\n        big->used += move + (big->bits[big->used + move] > 0);\n        while (move) big->bits[--move] = 0;\n    }\n}\n\n/**\n Evaluate 'big *= 10^exp'.\n @param big A big number (can be 0).\n @param exp An exponent integer (cannot be 0).\n */\nstatic_inline void bigint_mul_pow10(bigint *big, i32 exp) {\n    for (; exp >= U64_POW10_MAX_EXP; exp -= U64_POW10_MAX_EXP) {\n        bigint_mul_u64(big, u64_pow10_table[U64_POW10_MAX_EXP]);\n    }\n    if (exp) {\n        bigint_mul_u64(big, u64_pow10_table[exp]);\n    }\n}\n\n/**\n Compare two bigint.\n @return -1 if 'a < b', +1 if 'a > b', 0 if 'a == b'.\n */\nstatic_inline i32 bigint_cmp(bigint *a, bigint *b) {\n    u32 idx = a->used;\n    if (a->used < b->used) return -1;\n    if (a->used > b->used) return +1;\n    while (idx-- > 0) {\n        u64 av = a->bits[idx];\n        u64 bv = b->bits[idx];\n        if (av < bv) return -1;\n        if (av > bv) return +1;\n    }\n    return 0;\n}\n\n/**\n Evaluate 'big = val'.\n @param big A big number (can be 0).\n @param val An unsigned integer (can be 0).\n */\nstatic_inline void bigint_set_u64(bigint *big, u64 val) {\n    big->used = 1;\n    big->bits[0] = val;\n}\n\n/** Set a bigint with floating point number string. */\nstatic_noinline void bigint_set_buf(bigint *big, u64 sig, i32 *exp,\n                                    u8 *sig_cut, u8 *sig_end, u8 *dot_pos) {\n    \n    if (unlikely(!sig_cut)) {\n        /* no digit cut, set significant part only */\n        bigint_set_u64(big, sig);\n        return;\n        \n    } else {\n        /* some digits were cut, read them from 'sig_cut' to 'sig_end' */\n        u8 *hdr = sig_cut;\n        u8 *cur = hdr;\n        u32 len = 0;\n        u64 val = 0;\n        bool dig_big_cut = false;\n        bool has_dot = (hdr < dot_pos) & (dot_pos < sig_end);\n        u32 dig_len_total = U64_SAFE_DIG + (u32)(sig_end - hdr) - has_dot;\n        \n        sig -= (*sig_cut >= '5'); /* sig was rounded before */\n        if (dig_len_total > F64_MAX_DEC_DIG) {\n            dig_big_cut = true;\n            sig_end -= dig_len_total - (F64_MAX_DEC_DIG + 1);\n            sig_end -= (dot_pos + 1 == sig_end);\n            dig_len_total = (F64_MAX_DEC_DIG + 1);\n        }\n        *exp -= (i32)dig_len_total - U64_SAFE_DIG;\n        \n        big->used = 1;\n        big->bits[0] = sig;\n        while (cur < sig_end) {\n            if (likely(cur != dot_pos)) {\n                val = val * 10 + (u8)(*cur++ - '0');\n                len++;\n                if (unlikely(cur == sig_end && dig_big_cut)) {\n                    /* The last digit must be non-zero,    */\n                    /* set it to '1' for correct rounding. */\n                    val = val - (val % 10) + 1;\n                }\n                if (len == U64_SAFE_DIG || cur == sig_end) {\n                    bigint_mul_pow10(big, (i32)len);\n                    bigint_add_u64(big, val);\n                    val = 0;\n                    len = 0;\n                }\n            } else {\n                cur++;\n            }\n        }\n    }\n}\n\n\n\n/*==============================================================================\n * Diy Floating Point\n *============================================================================*/\n\n/** \"Do It Yourself Floating Point\" struct. */\ntypedef struct diy_fp {\n    u64 sig; /* significand */\n    i32 exp; /* exponent, base 2 */\n    i32 pad; /* padding, useless */\n} diy_fp;\n\n/** Get cached rounded diy_fp with pow(10, e) The input value must in range\n    [POW10_SIG_TABLE_MIN_EXP, POW10_SIG_TABLE_MAX_EXP]. */\nstatic_inline diy_fp diy_fp_get_cached_pow10(i32 exp10) {\n    diy_fp fp;\n    u64 sig_ext;\n    pow10_table_get_sig(exp10, &fp.sig, &sig_ext);\n    pow10_table_get_exp(exp10, &fp.exp);\n    fp.sig += (sig_ext >> 63);\n    return fp;\n}\n\n/** Returns fp * fp2. */\nstatic_inline diy_fp diy_fp_mul(diy_fp fp, diy_fp fp2) {\n    u64 hi, lo;\n    u128_mul(fp.sig, fp2.sig, &hi, &lo);\n    fp.sig = hi + (lo >> 63);\n    fp.exp += fp2.exp + 64;\n    return fp;\n}\n\n/** Convert diy_fp to IEEE-754 raw value. */\nstatic_inline u64 diy_fp_to_ieee_raw(diy_fp fp) {\n    u64 sig = fp.sig;\n    i32 exp = fp.exp;\n    u32 lz_bits;\n    if (unlikely(fp.sig == 0)) return 0;\n    \n    lz_bits = u64_lz_bits(sig);\n    sig <<= lz_bits;\n    sig >>= F64_BITS - F64_SIG_FULL_BITS;\n    exp -= (i32)lz_bits;\n    exp += F64_BITS - F64_SIG_FULL_BITS;\n    exp += F64_SIG_BITS;\n    \n    if (unlikely(exp >= F64_MAX_BIN_EXP)) {\n        /* overflow */\n        return F64_RAW_INF;\n    } else if (likely(exp >= F64_MIN_BIN_EXP - 1)) {\n        /* normal */\n        exp += F64_EXP_BIAS;\n        return ((u64)exp << F64_SIG_BITS) | (sig & F64_SIG_MASK);\n    } else if (likely(exp >= F64_MIN_BIN_EXP - F64_SIG_FULL_BITS)) {\n        /* subnormal */\n        return sig >> (F64_MIN_BIN_EXP - exp - 1);\n    } else {\n        /* underflow */\n        return 0;\n    }\n}\n\n\n\n/*==============================================================================\n * JSON Number Reader (IEEE-754)\n *============================================================================*/\n\n/** Maximum exact pow10 exponent for double value. */\n#define F64_POW10_EXP_MAX_EXACT 22\n\n/** Cached pow10 table. */\nstatic const f64 f64_pow10_table[] = {\n    1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12,\n    1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22\n};\n\n/**\n Read a JSON number.\n \n 1. This function assume that the floating-point number is in IEEE-754 format.\n 2. This function support uint64/int64/double number. If an integer number\n    cannot fit in uint64/int64, it will returns as a double number. If a double\n    number is infinite, the return value is based on flag.\n 3. This function (with inline attribute) may generate a lot of instructions.\n */\nstatic_inline bool read_number(u8 **ptr,\n                               u8 **pre,\n                               yyjson_read_flag flg,\n                               yyjson_val *val,\n                               const char **msg) {\n    \n#define return_err(_pos, _msg) do { \\\n    *msg = _msg; \\\n    *end = _pos; \\\n    return false; \\\n} while (false)\n    \n#define return_0() do { \\\n    val->tag = YYJSON_TYPE_NUM | (u8)((u8)sign << 3); \\\n    val->uni.u64 = 0; \\\n    *end = cur; return true; \\\n} while (false)\n\n#define return_i64(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | (u8)((u8)sign << 3); \\\n    val->uni.u64 = (u64)(sign ? (u64)(~(_v) + 1) : (u64)(_v)); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_f64(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL; \\\n    val->uni.f64 = sign ? -(f64)(_v) : (f64)(_v); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_f64_bin(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL; \\\n    val->uni.u64 = ((u64)sign << 63) | (u64)(_v); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_inf() do { \\\n    if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw(); \\\n    if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) return_f64_bin(F64_RAW_INF); \\\n    else return_err(hdr, \"number is infinity when parsed as double\"); \\\n} while (false)\n    \n#define return_raw() do { \\\n    if (*pre) **pre = '\\0'; /* add null-terminator for previous raw string */ \\\n    val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW; \\\n    val->uni.str = (const char *)hdr; \\\n    *pre = cur; *end = cur; return true; \\\n} while (false)\n    \n    u8 *sig_cut = NULL; /* significant part cutting position for long number */\n    u8 *sig_end = NULL; /* significant part ending position */\n    u8 *dot_pos = NULL; /* decimal point position */\n    \n    u64 sig = 0; /* significant part of the number */\n    i32 exp = 0; /* exponent part of the number */\n    \n    bool exp_sign; /* temporary exponent sign from literal part */\n    i64 exp_sig = 0; /* temporary exponent number from significant part */\n    i64 exp_lit = 0; /* temporary exponent number from exponent literal part */\n    u64 num; /* temporary number for reading */\n    u8 *tmp; /* temporary cursor for reading */\n    \n    u8 *hdr = *ptr;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    bool sign;\n    \n    /* read number as raw string if has `YYJSON_READ_NUMBER_AS_RAW` flag */\n    if (unlikely(pre && !(flg & YYJSON_READ_BIGNUM_AS_RAW))) {\n        return read_number_raw(ptr, pre, flg, val, msg);\n    }\n    \n    sign = (*hdr == '-');\n    cur += sign;\n    \n    /* begin with a leading zero or non-digit */\n    if (unlikely(!digi_is_nonzero(*cur))) { /* 0 or non-digit char */\n        if (unlikely(*cur != '0')) { /* non-digit char */\n            if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) {\n                if (read_inf_or_nan(sign, &cur, pre, val)) {\n                    *end = cur;\n                    return true;\n                }\n            }\n            return_err(cur, \"no digit after minus sign\");\n        }\n        /* begin with 0 */\n        if (likely(!digi_is_digit_or_fp(*++cur))) return_0();\n        if (likely(*cur == '.')) {\n            dot_pos = cur++;\n            if (unlikely(!digi_is_digit(*cur))) {\n                return_err(cur, \"no digit after decimal point\");\n            }\n            while (unlikely(*cur == '0')) cur++;\n            if (likely(digi_is_digit(*cur))) {\n                /* first non-zero digit after decimal point */\n                sig = (u64)(*cur - '0'); /* read first digit */\n                cur--;\n                goto digi_frac_1; /* continue read fraction part */\n            }\n        }\n        if (unlikely(digi_is_digit(*cur))) {\n            return_err(cur - 1, \"number with leading zero is not allowed\");\n        }\n        if (unlikely(digi_is_exp(*cur))) { /* 0 with any exponent is still 0 */\n            cur += (usize)1 + digi_is_sign(cur[1]);\n            if (unlikely(!digi_is_digit(*cur))) {\n                return_err(cur, \"no digit after exponent sign\");\n            }\n            while (digi_is_digit(*++cur));\n        }\n        return_f64_bin(0);\n    }\n    \n    /* begin with non-zero digit */\n    sig = (u64)(*cur - '0');\n    \n    /*\n     Read integral part, same as the following code.\n     \n         for (int i = 1; i <= 18; i++) {\n            num = cur[i] - '0';\n            if (num <= 9) sig = num + sig * 10;\n            else goto digi_sepr_i;\n         }\n     */\n#define expr_intg(i) \\\n    if (likely((num = (u64)(cur[i] - (u8)'0')) <= 9)) sig = num + sig * 10; \\\n    else { goto digi_sepr_##i; }\n    repeat_in_1_18(expr_intg)\n#undef expr_intg\n    \n    \n    cur += 19; /* skip continuous 19 digits */\n    if (!digi_is_digit_or_fp(*cur)) {\n        /* this number is an integer consisting of 19 digits */\n        if (sign && (sig > ((u64)1 << 63))) { /* overflow */\n            if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw();\n            return_f64(normalized_u64_to_f64(sig));\n        }\n        return_i64(sig);\n    }\n    goto digi_intg_more; /* read more digits in integral part */\n    \n    \n    /* process first non-digit character */\n#define expr_sepr(i) \\\n    digi_sepr_##i: \\\n    if (likely(!digi_is_fp(cur[i]))) { cur += i; return_i64(sig); } \\\n    dot_pos = cur + i; \\\n    if (likely(cur[i] == '.')) goto digi_frac_##i; \\\n    cur += i; sig_end = cur; goto digi_exp_more;\n    repeat_in_1_18(expr_sepr)\n#undef expr_sepr\n    \n    \n    /* read fraction part */\n#define expr_frac(i) \\\n    digi_frac_##i: \\\n    if (likely((num = (u64)(cur[i + 1] - (u8)'0')) <= 9)) \\\n        sig = num + sig * 10; \\\n    else { goto digi_stop_##i; }\n    repeat_in_1_18(expr_frac)\n#undef expr_frac\n    \n    cur += 20; /* skip 19 digits and 1 decimal point */\n    if (!digi_is_digit(*cur)) goto digi_frac_end; /* fraction part end */\n    goto digi_frac_more; /* read more digits in fraction part */\n    \n    \n    /* significant part end */\n#define expr_stop(i) \\\n    digi_stop_##i: \\\n    cur += i + 1; \\\n    goto digi_frac_end;\n    repeat_in_1_18(expr_stop)\n#undef expr_stop\n    \n    \n    /* read more digits in integral part */\ndigi_intg_more:\n    if (digi_is_digit(*cur)) {\n        if (!digi_is_digit_or_fp(cur[1])) {\n            /* this number is an integer consisting of 20 digits */\n            num = (u64)(*cur - '0');\n            if ((sig < (U64_MAX / 10)) ||\n                (sig == (U64_MAX / 10) && num <= (U64_MAX % 10))) {\n                sig = num + sig * 10;\n                cur++;\n                /* convert to double if overflow */\n                if (sign) {\n                    if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw();\n                    return_f64(normalized_u64_to_f64(sig));\n                }\n                return_i64(sig);\n            }\n        }\n    }\n    \n    if (digi_is_exp(*cur)) {\n        dot_pos = cur;\n        goto digi_exp_more;\n    }\n    \n    if (*cur == '.') {\n        dot_pos = cur++;\n        if (!digi_is_digit(*cur)) {\n            return_err(cur, \"no digit after decimal point\");\n        }\n    }\n    \n    \n    /* read more digits in fraction part */\ndigi_frac_more:\n    sig_cut = cur; /* too large to fit in u64, excess digits need to be cut */\n    sig += (*cur >= '5'); /* round */\n    while (digi_is_digit(*++cur));\n    if (!dot_pos) {\n        if (!digi_is_fp(*cur) && (flg & YYJSON_READ_BIGNUM_AS_RAW)) {\n            return_raw(); /* it's a large integer */\n        }\n        dot_pos = cur;\n        if (*cur == '.') {\n            if (!digi_is_digit(*++cur)) {\n                return_err(cur, \"no digit after decimal point\");\n            }\n            while (digi_is_digit(*cur)) cur++;\n        }\n    }\n    exp_sig = (i64)(dot_pos - sig_cut);\n    exp_sig += (dot_pos < sig_cut);\n    \n    /* ignore trailing zeros */\n    tmp = cur - 1;\n    while (*tmp == '0' || *tmp == '.') tmp--;\n    if (tmp < sig_cut) {\n        sig_cut = NULL;\n    } else {\n        sig_end = cur;\n    }\n    \n    if (digi_is_exp(*cur)) goto digi_exp_more;\n    goto digi_exp_finish;\n    \n    \n    /* fraction part end */\ndigi_frac_end:\n    if (unlikely(dot_pos + 1 == cur)) {\n        return_err(cur, \"no digit after decimal point\");\n    }\n    sig_end = cur;\n    exp_sig = -(i64)((u64)(cur - dot_pos) - 1);\n    if (likely(!digi_is_exp(*cur))) {\n        if (unlikely(exp_sig < F64_MIN_DEC_EXP - 19)) {\n            return_f64_bin(0); /* underflow */\n        }\n        exp = (i32)exp_sig;\n        goto digi_finish;\n    } else {\n        goto digi_exp_more;\n    }\n    \n    \n    /* read exponent part */\ndigi_exp_more:\n    exp_sign = (*++cur == '-');\n    cur += digi_is_sign(*cur);\n    if (unlikely(!digi_is_digit(*cur))) {\n        return_err(cur, \"no digit after exponent sign\");\n    }\n    while (*cur == '0') cur++;\n    \n    /* read exponent literal */\n    tmp = cur;\n    while (digi_is_digit(*cur)) {\n        exp_lit = (i64)((u8)(*cur++ - '0') + (u64)exp_lit * 10);\n    }\n    if (unlikely(cur - tmp >= U64_SAFE_DIG)) {\n        if (exp_sign) {\n            return_f64_bin(0); /* underflow */\n        } else {\n            return_inf(); /* overflow */\n        }\n    }\n    exp_sig += exp_sign ? -exp_lit : exp_lit;\n    \n    \n    /* validate exponent value */\ndigi_exp_finish:\n    if (unlikely(exp_sig < F64_MIN_DEC_EXP - 19)) {\n        return_f64_bin(0); /* underflow */\n    }\n    if (unlikely(exp_sig > F64_MAX_DEC_EXP)) {\n        return_inf(); /* overflow */\n    }\n    exp = (i32)exp_sig;\n    \n    \n    /* all digit read finished */\ndigi_finish:\n    \n    /*\n     Fast path 1:\n     \n     1. The floating-point number calculation should be accurate, see the\n        comments of macro `YYJSON_DOUBLE_MATH_CORRECT`.\n     2. Correct rounding should be performed (fegetround() == FE_TONEAREST).\n     3. The input of floating point number calculation does not lose precision,\n        which means: 64 - leading_zero(input) - trailing_zero(input) < 53.\n    \n     We don't check all available inputs here, because that would make the code\n     more complicated, and not friendly to branch predictor.\n     */\n#if YYJSON_DOUBLE_MATH_CORRECT\n    if (sig < ((u64)1 << 53) &&\n        exp >= -F64_POW10_EXP_MAX_EXACT &&\n        exp <= +F64_POW10_EXP_MAX_EXACT) {\n        f64 dbl = (f64)sig;\n        if (exp < 0) {\n            dbl /= f64_pow10_table[-exp];\n        } else {\n            dbl *= f64_pow10_table[+exp];\n        }\n        return_f64(dbl);\n    }\n#endif\n    \n    /*\n     Fast path 2:\n     \n     To keep it simple, we only accept normal number here,\n     let the slow path to handle subnormal and infinity number.\n     */\n    if (likely(!sig_cut &&\n               exp > -F64_MAX_DEC_EXP + 1 &&\n               exp < +F64_MAX_DEC_EXP - 20)) {\n        /*\n         The result value is exactly equal to (sig * 10^exp),\n         the exponent part (10^exp) can be converted to (sig2 * 2^exp2).\n         \n         The sig2 can be an infinite length number, only the highest 128 bits\n         is cached in the pow10_sig_table.\n         \n         Now we have these bits:\n         sig1 (normalized 64bit)        : aaaaaaaa\n         sig2 (higher 64bit)            : bbbbbbbb\n         sig2_ext (lower 64bit)         : cccccccc\n         sig2_cut (extra unknown bits)  : dddddddddddd....\n         \n         And the calculation process is:\n         ----------------------------------------\n                 aaaaaaaa *\n                 bbbbbbbbccccccccdddddddddddd....\n         ----------------------------------------\n         abababababababab +\n                 acacacacacacacac +\n                         adadadadadadadadadad....\n         ----------------------------------------\n         [hi____][lo____] +\n                 [hi2___][lo2___] +\n                         [unknown___________....]\n         ----------------------------------------\n         \n         The addition with carry may affect higher bits, but if there is a 0\n         in higher bits, the bits higher than 0 will not be affected.\n         \n         `lo2` + `unknown` may get a carry bit and may affect `hi2`, the max\n         value of `hi2` is 0xFFFFFFFFFFFFFFFE, so `hi2` will not overflow.\n         \n         `lo` + `hi2` may also get a carry bit and may affect `hi`, but only\n         the highest significant 53 bits of `hi` is needed. If there is a 0\n         in the lower bits of `hi`, then all the following bits can be dropped.\n         \n         To convert the result to IEEE-754 double number, we need to perform\n         correct rounding:\n         1. if bit 54 is 0, round down,\n         2. if bit 54 is 1 and any bit beyond bit 54 is 1, round up,\n         3. if bit 54 is 1 and all bits beyond bit 54 are 0, round to even,\n            as the extra bits is unknown, this case will not be handled here.\n         */\n        \n        u64 raw;\n        u64 sig1, sig2, sig2_ext, hi, lo, hi2, lo2, add, bits;\n        i32 exp2;\n        u32 lz;\n        bool exact = false, carry, round_up;\n        \n        /* convert (10^exp) to (sig2 * 2^exp2) */\n        pow10_table_get_sig(exp, &sig2, &sig2_ext);\n        pow10_table_get_exp(exp, &exp2);\n        \n        /* normalize and multiply */\n        lz = u64_lz_bits(sig);\n        sig1 = sig << lz;\n        exp2 -= (i32)lz;\n        u128_mul(sig1, sig2, &hi, &lo);\n        \n        /*\n         The `hi` is in range [0x4000000000000000, 0xFFFFFFFFFFFFFFFE],\n         To get normalized value, `hi` should be shifted to the left by 0 or 1.\n         \n         The highest significant 53 bits is used by IEEE-754 double number,\n         and the bit 54 is used to detect rounding direction.\n         \n         The lowest (64 - 54 - 1) bits is used to check whether it contains 0.\n         */\n        bits = hi & (((u64)1 << (64 - 54 - 1)) - 1);\n        if (bits - 1 < (((u64)1 << (64 - 54 - 1)) - 2)) {\n            /*\n             (bits != 0 && bits != 0x1FF) => (bits - 1 < 0x1FF - 1)\n             The `bits` is not zero, so we don't need to check `round to even`\n             case. The `bits` contains bit `0`, so we can drop the extra bits\n             after `0`.\n             */\n            exact = true;\n            \n        } else {\n            /*\n             (bits == 0 || bits == 0x1FF)\n             The `bits` is filled with all `0` or all `1`, so we need to check\n             lower bits with another 64-bit multiplication.\n             */\n            u128_mul(sig1, sig2_ext, &hi2, &lo2);\n            \n            add = lo + hi2;\n            if (add + 1 > (u64)1) {\n                /*\n                 (add != 0 && add != U64_MAX) => (add + 1 > 1)\n                 The `add` is not zero, so we don't need to check `round to\n                 even` case. The `add` contains bit `0`, so we can drop the\n                 extra bits after `0`. The `hi` cannot be U64_MAX, so it will\n                 not overflow.\n                 */\n                carry = add < lo || add < hi2;\n                hi += carry;\n                exact = true;\n            }\n        }\n        \n        if (exact) {\n            /* normalize */\n            lz = hi < ((u64)1 << 63);\n            hi <<= lz;\n            exp2 -= (i32)lz;\n            exp2 += 64;\n            \n            /* test the bit 54 and get rounding direction */\n            round_up = (hi & ((u64)1 << (64 - 54))) > (u64)0;\n            hi += (round_up ? ((u64)1 << (64 - 54)) : (u64)0);\n            \n            /* test overflow */\n            if (hi < ((u64)1 << (64 - 54))) {\n                hi = ((u64)1 << 63);\n                exp2 += 1;\n            }\n            \n            /* This is a normal number, convert it to IEEE-754 format. */\n            hi >>= F64_BITS - F64_SIG_FULL_BITS;\n            exp2 += F64_BITS - F64_SIG_FULL_BITS + F64_SIG_BITS;\n            exp2 += F64_EXP_BIAS;\n            raw = ((u64)exp2 << F64_SIG_BITS) | (hi & F64_SIG_MASK);\n            return_f64_bin(raw);\n        }\n    }\n    \n    /*\n     Slow path: read double number exactly with diyfp.\n     1. Use cached diyfp to get an approximation value.\n     2. Use bigcomp to check the approximation value if needed.\n     \n     This algorithm refers to google's double-conversion project:\n     https://github.com/google/double-conversion\n     */\n    {\n        const i32 ERR_ULP_LOG = 3;\n        const i32 ERR_ULP = 1 << ERR_ULP_LOG;\n        const i32 ERR_CACHED_POW = ERR_ULP / 2;\n        const i32 ERR_MUL_FIXED = ERR_ULP / 2;\n        const i32 DIY_SIG_BITS = 64;\n        const i32 EXP_BIAS = F64_EXP_BIAS + F64_SIG_BITS;\n        const i32 EXP_SUBNORMAL = -EXP_BIAS + 1;\n        \n        u64 fp_err;\n        u32 bits;\n        i32 order_of_magnitude;\n        i32 effective_significand_size;\n        i32 precision_digits_count;\n        u64 precision_bits;\n        u64 half_way;\n        \n        u64 raw;\n        diy_fp fp, fp_upper;\n        bigint big_full, big_comp;\n        i32 cmp;\n        \n        fp.sig = sig;\n        fp.exp = 0;\n        fp_err = sig_cut ? (u64)(ERR_ULP / 2) : (u64)0;\n        \n        /* normalize */\n        bits = u64_lz_bits(fp.sig);\n        fp.sig <<= bits;\n        fp.exp -= (i32)bits;\n        fp_err <<= bits;\n        \n        /* multiply and add error */\n        fp = diy_fp_mul(fp, diy_fp_get_cached_pow10(exp));\n        fp_err += (u64)ERR_CACHED_POW + (fp_err != 0) + (u64)ERR_MUL_FIXED;\n        \n        /* normalize */\n        bits = u64_lz_bits(fp.sig);\n        fp.sig <<= bits;\n        fp.exp -= (i32)bits;\n        fp_err <<= bits;\n        \n        /* effective significand */\n        order_of_magnitude = DIY_SIG_BITS + fp.exp;\n        if (likely(order_of_magnitude >= EXP_SUBNORMAL + F64_SIG_FULL_BITS)) {\n            effective_significand_size = F64_SIG_FULL_BITS;\n        } else if (order_of_magnitude <= EXP_SUBNORMAL) {\n            effective_significand_size = 0;\n        } else {\n            effective_significand_size = order_of_magnitude - EXP_SUBNORMAL;\n        }\n        \n        /* precision digits count */\n        precision_digits_count = DIY_SIG_BITS - effective_significand_size;\n        if (unlikely(precision_digits_count + ERR_ULP_LOG >= DIY_SIG_BITS)) {\n            i32 shr = (precision_digits_count + ERR_ULP_LOG) - DIY_SIG_BITS + 1;\n            fp.sig >>= shr;\n            fp.exp += shr;\n            fp_err = (fp_err >> shr) + 1 + (u32)ERR_ULP;\n            precision_digits_count -= shr;\n        }\n        \n        /* half way */\n        precision_bits = fp.sig & (((u64)1 << precision_digits_count) - 1);\n        precision_bits *= (u32)ERR_ULP;\n        half_way = (u64)1 << (precision_digits_count - 1);\n        half_way *= (u32)ERR_ULP;\n        \n        /* rounding */\n        fp.sig >>= precision_digits_count;\n        fp.sig += (precision_bits >= half_way + fp_err);\n        fp.exp += precision_digits_count;\n        \n        /* get IEEE double raw value */\n        raw = diy_fp_to_ieee_raw(fp);\n        if (unlikely(raw == F64_RAW_INF)) return_inf();\n        if (likely(precision_bits <= half_way - fp_err ||\n                   precision_bits >= half_way + fp_err)) {\n            return_f64_bin(raw); /* number is accurate */\n        }\n        /* now the number is the correct value, or the next lower value */\n        \n        /* upper boundary */\n        if (raw & F64_EXP_MASK) {\n            fp_upper.sig = (raw & F64_SIG_MASK) + ((u64)1 << F64_SIG_BITS);\n            fp_upper.exp = (i32)((raw & F64_EXP_MASK) >> F64_SIG_BITS);\n        } else {\n            fp_upper.sig = (raw & F64_SIG_MASK);\n            fp_upper.exp = 1;\n        }\n        fp_upper.exp -= F64_EXP_BIAS + F64_SIG_BITS;\n        fp_upper.sig <<= 1;\n        fp_upper.exp -= 1;\n        fp_upper.sig += 1; /* add half ulp */\n        \n        /* compare with bigint */\n        bigint_set_buf(&big_full, sig, &exp, sig_cut, sig_end, dot_pos);\n        bigint_set_u64(&big_comp, fp_upper.sig);\n        if (exp >= 0) {\n            bigint_mul_pow10(&big_full, +exp);\n        } else {\n            bigint_mul_pow10(&big_comp, -exp);\n        }\n        if (fp_upper.exp > 0) {\n            bigint_mul_pow2(&big_comp, (u32)+fp_upper.exp);\n        } else {\n            bigint_mul_pow2(&big_full, (u32)-fp_upper.exp);\n        }\n        cmp = bigint_cmp(&big_full, &big_comp);\n        if (likely(cmp != 0)) {\n            /* round down or round up */\n            raw += (cmp > 0);\n        } else {\n            /* falls midway, round to even */\n            raw += (raw & 1);\n        }\n        \n        if (unlikely(raw == F64_RAW_INF)) return_inf();\n        return_f64_bin(raw);\n    }\n    \n#undef return_err\n#undef return_inf\n#undef return_0\n#undef return_i64\n#undef return_f64\n#undef return_f64_bin\n#undef return_raw\n}\n\n\n\n#else /* FP_READER */\n\n/**\n Read a JSON number.\n This is a fallback function if the custom number reader is disabled.\n This function use libc's strtod() to read floating-point number.\n */\nstatic_noinline bool read_number(u8 **ptr,\n                                 u8 **pre,\n                                 yyjson_read_flag flg,\n                                 yyjson_val *val,\n                                 const char **msg) {\n    \n#define return_err(_pos, _msg) do { \\\n    *msg = _msg; \\\n    *end = _pos; \\\n    return false; \\\n} while (false)\n    \n#define return_0() do { \\\n    val->tag = YYJSON_TYPE_NUM | (u64)((u8)sign << 3); \\\n    val->uni.u64 = 0; \\\n    *end = cur; return true; \\\n} while (false)\n\n#define return_i64(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | (u64)((u8)sign << 3); \\\n    val->uni.u64 = (u64)(sign ? (u64)(~(_v) + 1) : (u64)(_v)); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_f64(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL; \\\n    val->uni.f64 = sign ? -(f64)(_v) : (f64)(_v); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_f64_bin(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL; \\\n    val->uni.u64 = ((u64)sign << 63) | (u64)(_v); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_inf() do { \\\n    if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw(); \\\n    if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) return_f64_bin(F64_RAW_INF); \\\n    else return_err(hdr, \"number is infinity when parsed as double\"); \\\n} while (false)\n    \n#define return_raw() do { \\\n    if (*pre) **pre = '\\0'; /* add null-terminator for previous raw string */ \\\n    val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW; \\\n    val->uni.str = (const char *)hdr; \\\n    *pre = cur; *end = cur; return true; \\\n} while (false)\n    \n    u64 sig, num;\n    u8 *hdr = *ptr;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    u8 *dot = NULL;\n    u8 *f64_end = NULL;\n    bool sign;\n    \n    /* read number as raw string if has `YYJSON_READ_NUMBER_AS_RAW` flag */\n    if (unlikely(pre && !(flg & YYJSON_READ_BIGNUM_AS_RAW))) {\n        return read_number_raw(ptr, pre, flg, val, msg);\n    }\n    \n    sign = (*hdr == '-');\n    cur += sign;\n    sig = (u8)(*cur - '0');\n    \n    /* read first digit, check leading zero */\n    if (unlikely(!digi_is_digit(*cur))) {\n        if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) {\n            if (read_inf_or_nan(sign, &cur, pre, val)) {\n                *end = cur;\n                return true;\n            }\n        }\n        return_err(cur, \"no digit after minus sign\");\n    }\n    if (*cur == '0') {\n        cur++;\n        if (unlikely(digi_is_digit(*cur))) {\n            return_err(cur - 1, \"number with leading zero is not allowed\");\n        }\n        if (!digi_is_fp(*cur)) return_0();\n        goto read_double;\n    }\n    \n    /* read continuous digits, up to 19 characters */\n#define expr_intg(i) \\\n    if (likely((num = (u64)(cur[i] - (u8)'0')) <= 9)) sig = num + sig * 10; \\\n    else { cur += i; goto intg_end; }\n    repeat_in_1_18(expr_intg)\n#undef expr_intg\n    \n    /* here are 19 continuous digits, skip them */\n    cur += 19;\n    if (digi_is_digit(cur[0]) && !digi_is_digit_or_fp(cur[1])) {\n        /* this number is an integer consisting of 20 digits */\n        num = (u8)(*cur - '0');\n        if ((sig < (U64_MAX / 10)) ||\n            (sig == (U64_MAX / 10) && num <= (U64_MAX % 10))) {\n            sig = num + sig * 10;\n            cur++;\n            if (sign) {\n                if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw();\n                return_f64(normalized_u64_to_f64(sig));\n            }\n            return_i64(sig);\n        }\n    }\n    \nintg_end:\n    /* continuous digits ended */\n    if (!digi_is_digit_or_fp(*cur)) {\n        /* this number is an integer consisting of 1 to 19 digits */\n        if (sign && (sig > ((u64)1 << 63))) {\n            if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw();\n            return_f64(normalized_u64_to_f64(sig));\n        }\n        return_i64(sig);\n    }\n    \nread_double:\n    /* this number should be read as double */\n    while (digi_is_digit(*cur)) cur++;\n    if (!digi_is_fp(*cur) && (flg & YYJSON_READ_BIGNUM_AS_RAW)) {\n        return_raw(); /* it's a large integer */\n    }\n    if (*cur == '.') {\n        /* skip fraction part */\n        dot = cur;\n        cur++;\n        if (!digi_is_digit(*cur)) {\n            return_err(cur, \"no digit after decimal point\");\n        }\n        cur++;\n        while (digi_is_digit(*cur)) cur++;\n    }\n    if (digi_is_exp(*cur)) {\n        /* skip exponent part */\n        cur += 1 + digi_is_sign(cur[1]);\n        if (!digi_is_digit(*cur)) {\n            return_err(cur, \"no digit after exponent sign\");\n        }\n        cur++;\n        while (digi_is_digit(*cur)) cur++;\n    }\n    \n    /*\n     libc's strtod() is used to parse the floating-point number.\n     \n     Note that the decimal point character used by strtod() is locale-dependent,\n     and the rounding direction may affected by fesetround().\n     \n     For currently known locales, (en, zh, ja, ko, am, he, hi) use '.' as the\n     decimal point, while other locales use ',' as the decimal point.\n     \n     Here strtod() is called twice for different locales, but if another thread\n     happens calls setlocale() between two strtod(), parsing may still fail.\n     */\n    val->uni.f64 = strtod((const char *)hdr, (char **)&f64_end);\n    if (unlikely(f64_end != cur)) {\n        /* replace '.' with ',' for locale */\n        bool cut = (*cur == ',');\n        if (cut) *cur = ' ';\n        if (dot) *dot = ',';\n        val->uni.f64 = strtod((const char *)hdr, (char **)&f64_end);\n        /* restore ',' to '.' */\n        if (cut) *cur = ',';\n        if (dot) *dot = '.';\n        if (unlikely(f64_end != cur)) {\n            return_err(hdr, \"strtod() failed to parse the number\");\n        }\n    }\n    if (unlikely(val->uni.f64 >= HUGE_VAL || val->uni.f64 <= -HUGE_VAL)) {\n        return_inf();\n    }\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n    *end = cur;\n    return true;\n    \n#undef return_err\n#undef return_0\n#undef return_i64\n#undef return_f64\n#undef return_f64_bin\n#undef return_inf\n#undef return_raw\n}\n\n#endif /* FP_READER */\n\n\n\n/*==============================================================================\n * JSON String Reader\n *============================================================================*/\n\n/**\n Read a JSON string.\n @param ptr The head pointer of string before '\"' prefix (inout).\n @param lst JSON last position.\n @param inv Allow invalid unicode.\n @param val The string value to be written.\n @param msg The error message pointer.\n @return Whether success.\n */\nstatic_inline bool read_string(u8 **ptr,\n                               u8 *lst,\n                               bool inv,\n                               yyjson_val *val,\n                               const char **msg) {\n    /*\n     Each unicode code point is encoded as 1 to 4 bytes in UTF-8 encoding,\n     we use 4-byte mask and pattern value to validate UTF-8 byte sequence,\n     this requires the input data to have 4-byte zero padding.\n     ---------------------------------------------------\n     1 byte\n     unicode range [U+0000, U+007F]\n     unicode min   [.......0]\n     unicode max   [.1111111]\n     bit pattern   [0.......]\n     ---------------------------------------------------\n     2 byte\n     unicode range [U+0080, U+07FF]\n     unicode min   [......10 ..000000]\n     unicode max   [...11111 ..111111]\n     bit require   [...xxxx. ........] (1E 00)\n     bit mask      [xxx..... xx......] (E0 C0)\n     bit pattern   [110..... 10......] (C0 80)\n     ---------------------------------------------------\n     3 byte\n     unicode range [U+0800, U+FFFF]\n     unicode min   [........ ..100000 ..000000]\n     unicode max   [....1111 ..111111 ..111111]\n     bit require   [....xxxx ..x..... ........] (0F 20 00)\n     bit mask      [xxxx.... xx...... xx......] (F0 C0 C0)\n     bit pattern   [1110.... 10...... 10......] (E0 80 80)\n     ---------------------------------------------------\n     3 byte invalid (reserved for surrogate halves)\n     unicode range [U+D800, U+DFFF]\n     unicode min   [....1101 ..100000 ..000000]\n     unicode max   [....1101 ..111111 ..111111]\n     bit mask      [....xxxx ..x..... ........] (0F 20 00)\n     bit pattern   [....1101 ..1..... ........] (0D 20 00)\n     ---------------------------------------------------\n     4 byte\n     unicode range [U+10000, U+10FFFF]\n     unicode min   [........ ...10000 ..000000 ..000000]\n     unicode max   [.....100 ..001111 ..111111 ..111111]\n     bit require   [.....xxx ..xx.... ........ ........] (07 30 00 00)\n     bit mask      [xxxxx... xx...... xx...... xx......] (F8 C0 C0 C0)\n     bit pattern   [11110... 10...... 10...... 10......] (F0 80 80 80)\n     ---------------------------------------------------\n     */\n#if YYJSON_ENDIAN == YYJSON_BIG_ENDIAN\n    const u32 b1_mask = 0x80000000UL;\n    const u32 b1_patt = 0x00000000UL;\n    const u32 b2_mask = 0xE0C00000UL;\n    const u32 b2_patt = 0xC0800000UL;\n    const u32 b2_requ = 0x1E000000UL;\n    const u32 b3_mask = 0xF0C0C000UL;\n    const u32 b3_patt = 0xE0808000UL;\n    const u32 b3_requ = 0x0F200000UL;\n    const u32 b3_erro = 0x0D200000UL;\n    const u32 b4_mask = 0xF8C0C0C0UL;\n    const u32 b4_patt = 0xF0808080UL;\n    const u32 b4_requ = 0x07300000UL;\n    const u32 b4_err0 = 0x04000000UL;\n    const u32 b4_err1 = 0x03300000UL;\n#elif YYJSON_ENDIAN == YYJSON_LITTLE_ENDIAN\n    const u32 b1_mask = 0x00000080UL;\n    const u32 b1_patt = 0x00000000UL;\n    const u32 b2_mask = 0x0000C0E0UL;\n    const u32 b2_patt = 0x000080C0UL;\n    const u32 b2_requ = 0x0000001EUL;\n    const u32 b3_mask = 0x00C0C0F0UL;\n    const u32 b3_patt = 0x008080E0UL;\n    const u32 b3_requ = 0x0000200FUL;\n    const u32 b3_erro = 0x0000200DUL;\n    const u32 b4_mask = 0xC0C0C0F8UL;\n    const u32 b4_patt = 0x808080F0UL;\n    const u32 b4_requ = 0x00003007UL;\n    const u32 b4_err0 = 0x00000004UL;\n    const u32 b4_err1 = 0x00003003UL;\n#else\n    v32_uni b1_mask_uni = {{ 0x80, 0x00, 0x00, 0x00 }};\n    v32_uni b1_patt_uni = {{ 0x00, 0x00, 0x00, 0x00 }};\n    v32_uni b2_mask_uni = {{ 0xE0, 0xC0, 0x00, 0x00 }};\n    v32_uni b2_patt_uni = {{ 0xC0, 0x80, 0x00, 0x00 }};\n    v32_uni b2_requ_uni = {{ 0x1E, 0x00, 0x00, 0x00 }};\n    v32_uni b3_mask_uni = {{ 0xF0, 0xC0, 0xC0, 0x00 }};\n    v32_uni b3_patt_uni = {{ 0xE0, 0x80, 0x80, 0x00 }};\n    v32_uni b3_requ_uni = {{ 0x0F, 0x20, 0x00, 0x00 }};\n    v32_uni b3_erro_uni = {{ 0x0D, 0x20, 0x00, 0x00 }};\n    v32_uni b4_mask_uni = {{ 0xF8, 0xC0, 0xC0, 0xC0 }};\n    v32_uni b4_patt_uni = {{ 0xF0, 0x80, 0x80, 0x80 }};\n    v32_uni b4_requ_uni = {{ 0x07, 0x30, 0x00, 0x00 }};\n    v32_uni b4_err0_uni = {{ 0x04, 0x00, 0x00, 0x00 }};\n    v32_uni b4_err1_uni = {{ 0x03, 0x30, 0x00, 0x00 }};\n    u32 b1_mask = b1_mask_uni.u;\n    u32 b1_patt = b1_patt_uni.u;\n    u32 b2_mask = b2_mask_uni.u;\n    u32 b2_patt = b2_patt_uni.u;\n    u32 b2_requ = b2_requ_uni.u;\n    u32 b3_mask = b3_mask_uni.u;\n    u32 b3_patt = b3_patt_uni.u;\n    u32 b3_requ = b3_requ_uni.u;\n    u32 b3_erro = b3_erro_uni.u;\n    u32 b4_mask = b4_mask_uni.u;\n    u32 b4_patt = b4_patt_uni.u;\n    u32 b4_requ = b4_requ_uni.u;\n    u32 b4_err0 = b4_err0_uni.u;\n    u32 b4_err1 = b4_err1_uni.u;\n#endif\n    \n#define is_valid_seq_1(uni) ( \\\n    ((uni & b1_mask) == b1_patt) \\\n)\n\n#define is_valid_seq_2(uni) ( \\\n    ((uni & b2_mask) == b2_patt) && \\\n    ((uni & b2_requ)) \\\n)\n    \n#define is_valid_seq_3(uni) ( \\\n    ((uni & b3_mask) == b3_patt) && \\\n    ((tmp = (uni & b3_requ))) && \\\n    ((tmp != b3_erro)) \\\n)\n    \n#define is_valid_seq_4(uni) ( \\\n    ((uni & b4_mask) == b4_patt) && \\\n    ((tmp = (uni & b4_requ))) && \\\n    ((tmp & b4_err0) == 0 || (tmp & b4_err1) == 0) \\\n)\n    \n#define return_err(_end, _msg) do { \\\n    *msg = _msg; \\\n    *end = _end; \\\n    return false; \\\n} while (false)\n    \n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    u8 *src = ++cur, *dst, *pos;\n    u16 hi, lo;\n    u32 uni, tmp;\n    \nskip_ascii:\n    /* Most strings have no escaped characters, so we can jump them quickly. */\n    \nskip_ascii_begin:\n    /*\n     We want to make loop unrolling, as shown in the following code. Some\n     compiler may not generate instructions as expected, so we rewrite it with\n     explicit goto statements. We hope the compiler can generate instructions\n     like this: https://godbolt.org/z/8vjsYq\n     \n         while (true) repeat16({\n            if (likely(!(char_is_ascii_stop(*src)))) src++;\n            else break;\n         })\n     */\n#define expr_jump(i) \\\n    if (likely(!char_is_ascii_stop(src[i]))) {} \\\n    else goto skip_ascii_stop##i;\n    \n#define expr_stop(i) \\\n    skip_ascii_stop##i: \\\n    src += i; \\\n    goto skip_ascii_end;\n    \n    repeat16_incr(expr_jump)\n    src += 16;\n    goto skip_ascii_begin;\n    repeat16_incr(expr_stop)\n    \n#undef expr_jump\n#undef expr_stop\n    \nskip_ascii_end:\n    \n    /*\n     GCC may store src[i] in a register at each line of expr_jump(i) above.\n     These instructions are useless and will degrade performance.\n     This inline asm is a hint for gcc: \"the memory has been modified,\n     do not cache it\".\n     \n     MSVC, Clang, ICC can generate expected instructions without this hint.\n     */\n#if YYJSON_IS_REAL_GCC\n    __asm__ volatile(\"\":\"=m\"(*src));\n#endif\n    if (likely(*src == '\"')) {\n        val->tag = ((u64)(src - cur) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = (const char *)cur;\n        *src = '\\0';\n        *end = src + 1;\n        return true;\n    }\n    \nskip_utf8:\n    if (*src & 0x80) { /* non-ASCII character */\n        /*\n         Non-ASCII character appears here, which means that the text is likely\n         to be written in non-English or emoticons. According to some common\n         data set statistics, byte sequences of the same length may appear\n         consecutively. We process the byte sequences of the same length in each\n         loop, which is more friendly to branch prediction.\n         */\n        pos = src;\n        uni = byte_load_4(src);\n        while (is_valid_seq_3(uni)) {\n            src += 3;\n            uni = byte_load_4(src);\n        }\n        if (is_valid_seq_1(uni)) goto skip_ascii;\n        while (is_valid_seq_2(uni)) {\n            src += 2;\n            uni = byte_load_4(src);\n        }\n        while (is_valid_seq_4(uni)) {\n            src += 4;\n            uni = byte_load_4(src);\n        }\n        if (unlikely(pos == src)) {\n            if (!inv) return_err(src, \"invalid UTF-8 encoding in string\");\n            ++src;\n        }\n        goto skip_ascii;\n    }\n    \n    /* The escape character appears, we need to copy it. */\n    dst = src;\ncopy_escape:\n    if (likely(*src == '\\\\')) {\n        switch (*++src) {\n            case '\"':  *dst++ = '\"';  src++; break;\n            case '\\\\': *dst++ = '\\\\'; src++; break;\n            case '/':  *dst++ = '/';  src++; break;\n            case 'b':  *dst++ = '\\b'; src++; break;\n            case 'f':  *dst++ = '\\f'; src++; break;\n            case 'n':  *dst++ = '\\n'; src++; break;\n            case 'r':  *dst++ = '\\r'; src++; break;\n            case 't':  *dst++ = '\\t'; src++; break;\n            case 'u':\n                if (unlikely(!read_hex_u16(++src, &hi))) {\n                    return_err(src - 2, \"invalid escaped sequence in string\");\n                }\n                src += 4;\n                if (likely((hi & 0xF800) != 0xD800)) {\n                    /* a BMP character */\n                    if (hi >= 0x800) {\n                        *dst++ = (u8)(0xE0 | (hi >> 12));\n                        *dst++ = (u8)(0x80 | ((hi >> 6) & 0x3F));\n                        *dst++ = (u8)(0x80 | (hi & 0x3F));\n                    } else if (hi >= 0x80) {\n                        *dst++ = (u8)(0xC0 | (hi >> 6));\n                        *dst++ = (u8)(0x80 | (hi & 0x3F));\n                    } else {\n                        *dst++ = (u8)hi;\n                    }\n                } else {\n                    /* a non-BMP character, represented as a surrogate pair */\n                    if (unlikely((hi & 0xFC00) != 0xD800)) {\n                        return_err(src - 6, \"invalid high surrogate in string\");\n                    }\n                    if (unlikely(!byte_match_2(src, \"\\\\u\"))) {\n                        return_err(src, \"no low surrogate in string\");\n                    }\n                    if (unlikely(!read_hex_u16(src + 2, &lo))) {\n                        return_err(src, \"invalid escaped sequence in string\");\n                    }\n                    if (unlikely((lo & 0xFC00) != 0xDC00)) {\n                        return_err(src, \"invalid low surrogate in string\");\n                    }\n                    uni = ((((u32)hi - 0xD800) << 10) |\n                            ((u32)lo - 0xDC00)) + 0x10000;\n                    *dst++ = (u8)(0xF0 | (uni >> 18));\n                    *dst++ = (u8)(0x80 | ((uni >> 12) & 0x3F));\n                    *dst++ = (u8)(0x80 | ((uni >> 6) & 0x3F));\n                    *dst++ = (u8)(0x80 | (uni & 0x3F));\n                    src += 6;\n                }\n                break;\n            default: return_err(src, \"invalid escaped character in string\");\n        }\n    } else if (likely(*src == '\"')) {\n        val->tag = ((u64)(dst - cur) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = (const char *)cur;\n        *dst = '\\0';\n        *end = src + 1;\n        return true;\n    } else {\n        if (!inv) return_err(src, \"unexpected control character in string\");\n        if (src >= lst) return_err(src, \"unclosed string\");\n        *dst++ = *src++;\n    }\n    \ncopy_ascii:\n    /*\n     Copy continuous ASCII, loop unrolling, same as the following code:\n     \n         while (true) repeat16({\n            if (unlikely(char_is_ascii_stop(*src))) break;\n            *dst++ = *src++;\n         })\n     */\n#if YYJSON_IS_REAL_GCC\n#   define expr_jump(i) \\\n    if (likely(!(char_is_ascii_stop(src[i])))) {} \\\n    else { __asm__ volatile(\"\":\"=m\"(src[i])); goto copy_ascii_stop_##i; }\n#else\n#   define expr_jump(i) \\\n    if (likely(!(char_is_ascii_stop(src[i])))) {} \\\n    else { goto copy_ascii_stop_##i; }\n#endif\n    repeat16_incr(expr_jump)\n#undef expr_jump\n    \n    byte_move_16(dst, src);\n    src += 16;\n    dst += 16;\n    goto copy_ascii;\n    \ncopy_ascii_stop_0:\n    goto copy_utf8;\ncopy_ascii_stop_1:\n    byte_move_2(dst, src);\n    src += 1;\n    dst += 1;\n    goto copy_utf8;\ncopy_ascii_stop_2:\n    byte_move_2(dst, src);\n    src += 2;\n    dst += 2;\n    goto copy_utf8;\ncopy_ascii_stop_3:\n    byte_move_4(dst, src);\n    src += 3;\n    dst += 3;\n    goto copy_utf8;\ncopy_ascii_stop_4:\n    byte_move_4(dst, src);\n    src += 4;\n    dst += 4;\n    goto copy_utf8;\ncopy_ascii_stop_5:\n    byte_move_4(dst, src);\n    byte_move_2(dst + 4, src + 4);\n    src += 5;\n    dst += 5;\n    goto copy_utf8;\ncopy_ascii_stop_6:\n    byte_move_4(dst, src);\n    byte_move_2(dst + 4, src + 4);\n    src += 6;\n    dst += 6;\n    goto copy_utf8;\ncopy_ascii_stop_7:\n    byte_move_8(dst, src);\n    src += 7;\n    dst += 7;\n    goto copy_utf8;\ncopy_ascii_stop_8:\n    byte_move_8(dst, src);\n    src += 8;\n    dst += 8;\n    goto copy_utf8;\ncopy_ascii_stop_9:\n    byte_move_8(dst, src);\n    byte_move_2(dst + 8, src + 8);\n    src += 9;\n    dst += 9;\n    goto copy_utf8;\ncopy_ascii_stop_10:\n    byte_move_8(dst, src);\n    byte_move_2(dst + 8, src + 8);\n    src += 10;\n    dst += 10;\n    goto copy_utf8;\ncopy_ascii_stop_11:\n    byte_move_8(dst, src);\n    byte_move_4(dst + 8, src + 8);\n    src += 11;\n    dst += 11;\n    goto copy_utf8;\ncopy_ascii_stop_12:\n    byte_move_8(dst, src);\n    byte_move_4(dst + 8, src + 8);\n    src += 12;\n    dst += 12;\n    goto copy_utf8;\ncopy_ascii_stop_13:\n    byte_move_8(dst, src);\n    byte_move_4(dst + 8, src + 8);\n    byte_move_2(dst + 12, src + 12);\n    src += 13;\n    dst += 13;\n    goto copy_utf8;\ncopy_ascii_stop_14:\n    byte_move_8(dst, src);\n    byte_move_4(dst + 8, src + 8);\n    byte_move_2(dst + 12, src + 12);\n    src += 14;\n    dst += 14;\n    goto copy_utf8;\ncopy_ascii_stop_15:\n    byte_move_16(dst, src);\n    src += 15;\n    dst += 15;\n    goto copy_utf8;\n    \ncopy_utf8:\n    if (*src & 0x80) { /* non-ASCII character */\n        pos = src;\n        uni = byte_load_4(src);\n        while (is_valid_seq_3(uni)) {\n            byte_move_4(dst, &uni);\n            dst += 3;\n            src += 3;\n            uni = byte_load_4(src);\n        }\n        if (is_valid_seq_1(uni)) goto copy_ascii;\n        while (is_valid_seq_2(uni)) {\n            byte_move_2(dst, &uni);\n            dst += 2;\n            src += 2;\n            uni = byte_load_4(src);\n        }\n        while (is_valid_seq_4(uni)) {\n            byte_move_4(dst, &uni);\n            dst += 4;\n            src += 4;\n            uni = byte_load_4(src);\n        }\n        if (unlikely(pos == src)) {\n            if (!inv) return_err(src, \"invalid UTF-8 encoding in string\");\n            goto copy_ascii_stop_1;\n        }\n        goto copy_ascii;\n    }\n    goto copy_escape;\n    \n#undef return_err\n#undef is_valid_seq_1\n#undef is_valid_seq_2\n#undef is_valid_seq_3\n#undef is_valid_seq_4\n}\n\n\n\n/*==============================================================================\n * JSON Reader Implementation\n *\n * We use goto statements to build the finite state machine (FSM).\n * The FSM's state was held by program counter (PC) and the 'goto' make the\n * state transitions.\n *============================================================================*/\n\n/** Read single value JSON document. */\nstatic_noinline yyjson_doc *read_root_single(u8 *hdr,\n                                             u8 *cur,\n                                             u8 *end,\n                                             yyjson_alc alc,\n                                             yyjson_read_flag flg,\n                                             yyjson_read_err *err) {\n    \n#define has_flag(_flag) unlikely((flg & YYJSON_READ_##_flag) != 0)\n    \n#define return_err(_pos, _code, _msg) do { \\\n    if (is_truncated_end(hdr, _pos, end, YYJSON_READ_ERROR_##_code, flg)) { \\\n        err->pos = (usize)(end - hdr); \\\n        err->code = YYJSON_READ_ERROR_UNEXPECTED_END; \\\n        err->msg = \"unexpected end of data\"; \\\n    } else { \\\n        err->pos = (usize)(_pos - hdr); \\\n        err->code = YYJSON_READ_ERROR_##_code; \\\n        err->msg = _msg; \\\n    } \\\n    if (val_hdr) alc.free(alc.ctx, (void *)val_hdr); \\\n    return NULL; \\\n} while (false)\n    \n    usize hdr_len; /* value count used by doc */\n    usize alc_num; /* value count capacity */\n    yyjson_val *val_hdr; /* the head of allocated values */\n    yyjson_val *val; /* current value */\n    yyjson_doc *doc; /* the JSON document, equals to val_hdr */\n    const char *msg; /* error message */\n    \n    bool raw; /* read number as raw */\n    bool inv; /* allow invalid unicode */\n    u8 *raw_end; /* raw end for null-terminator */\n    u8 **pre; /* previous raw end pointer */\n    \n    hdr_len = sizeof(yyjson_doc) / sizeof(yyjson_val);\n    hdr_len += (sizeof(yyjson_doc) % sizeof(yyjson_val)) > 0;\n    alc_num = hdr_len + 1; /* single value */\n    \n    val_hdr = (yyjson_val *)alc.malloc(alc.ctx, alc_num * sizeof(yyjson_val));\n    if (unlikely(!val_hdr)) goto fail_alloc;\n    val = val_hdr + hdr_len;\n    raw = (flg & (YYJSON_READ_NUMBER_AS_RAW | YYJSON_READ_BIGNUM_AS_RAW)) != 0;\n    inv = (flg & YYJSON_READ_ALLOW_INVALID_UNICODE) != 0;\n    raw_end = NULL;\n    pre = raw ? &raw_end : NULL;\n    \n    if (char_is_number(*cur)) {\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto doc_end;\n        goto fail_number;\n    }\n    if (*cur == '\"') {\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto doc_end;\n        goto fail_string;\n    }\n    if (*cur == 't') {\n        if (likely(read_true(&cur, val))) goto doc_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        if (likely(read_false(&cur, val))) goto doc_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        if (likely(read_null(&cur, val))) goto doc_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto doc_end;\n        }\n        goto fail_literal;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n        if (read_inf_or_nan(false, &cur, pre, val)) goto doc_end;\n    }\n    goto fail_character;\n    \ndoc_end:\n    /* check invalid contents after json document */\n    if (unlikely(cur < end) && !has_flag(STOP_WHEN_DONE)) {\n        if (has_flag(ALLOW_COMMENTS)) {\n            if (!skip_spaces_and_comments(&cur)) {\n                if (byte_match_2(cur, \"/*\")) goto fail_comment;\n            }\n        } else {\n            while (char_is_space(*cur)) cur++;\n        }\n        if (unlikely(cur < end)) goto fail_garbage;\n    }\n    \n    if (pre && *pre) **pre = '\\0';\n    doc = (yyjson_doc *)val_hdr;\n    doc->root = val_hdr + hdr_len;\n    doc->alc = alc;\n    doc->dat_read = (usize)(cur - hdr);\n    doc->val_read = 1;\n    doc->str_pool = has_flag(INSITU) ? NULL : (char *)hdr;\n    return doc;\n    \nfail_string:\n    return_err(cur, INVALID_STRING, msg);\nfail_number:\n    return_err(cur, INVALID_NUMBER, msg);\nfail_alloc:\n    return_err(cur, MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_literal:\n    return_err(cur, LITERAL, \"invalid literal\");\nfail_comment:\n    return_err(cur, INVALID_COMMENT, \"unclosed multiline comment\");\nfail_character:\n    return_err(cur, UNEXPECTED_CHARACTER, \"unexpected character\");\nfail_garbage:\n    return_err(cur, UNEXPECTED_CONTENT, \"unexpected content after document\");\n    \n#undef has_flag\n#undef return_err\n}\n\n/** Read JSON document (accept all style, but optimized for minify). */\nstatic_inline yyjson_doc *read_root_minify(u8 *hdr,\n                                           u8 *cur,\n                                           u8 *end,\n                                           yyjson_alc alc,\n                                           yyjson_read_flag flg,\n                                           yyjson_read_err *err) {\n    \n#define has_flag(_flag) unlikely((flg & YYJSON_READ_##_flag) != 0)\n    \n#define return_err(_pos, _code, _msg) do { \\\n    if (is_truncated_end(hdr, _pos, end, YYJSON_READ_ERROR_##_code, flg)) { \\\n        err->pos = (usize)(end - hdr); \\\n        err->code = YYJSON_READ_ERROR_UNEXPECTED_END; \\\n        err->msg = \"unexpected end of data\"; \\\n    } else { \\\n        err->pos = (usize)(_pos - hdr); \\\n        err->code = YYJSON_READ_ERROR_##_code; \\\n        err->msg = _msg; \\\n    } \\\n    if (val_hdr) alc.free(alc.ctx, (void *)val_hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define val_incr() do { \\\n    val++; \\\n    if (unlikely(val >= val_end)) { \\\n        usize alc_old = alc_len; \\\n        alc_len += alc_len / 2; \\\n        if ((alc_len >= alc_max)) goto fail_alloc; \\\n        val_tmp = (yyjson_val *)alc.realloc(alc.ctx, (void *)val_hdr, \\\n            alc_old * sizeof(yyjson_val), \\\n            alc_len * sizeof(yyjson_val)); \\\n        if ((!val_tmp)) goto fail_alloc; \\\n        val = val_tmp + (usize)(val - val_hdr); \\\n        ctn = val_tmp + (usize)(ctn - val_hdr); \\\n        val_hdr = val_tmp; \\\n        val_end = val_tmp + (alc_len - 2); \\\n    } \\\n} while (false)\n    \n    usize dat_len; /* data length in bytes, hint for allocator */\n    usize hdr_len; /* value count used by yyjson_doc */\n    usize alc_len; /* value count allocated */\n    usize alc_max; /* maximum value count for allocator */\n    usize ctn_len; /* the number of elements in current container */\n    yyjson_val *val_hdr; /* the head of allocated values */\n    yyjson_val *val_end; /* the end of allocated values */\n    yyjson_val *val_tmp; /* temporary pointer for realloc */\n    yyjson_val *val; /* current JSON value */\n    yyjson_val *ctn; /* current container */\n    yyjson_val *ctn_parent; /* parent of current container */\n    yyjson_doc *doc; /* the JSON document, equals to val_hdr */\n    const char *msg; /* error message */\n    \n    bool raw; /* read number as raw */\n    bool inv; /* allow invalid unicode */\n    u8 *raw_end; /* raw end for null-terminator */\n    u8 **pre; /* previous raw end pointer */\n    \n    dat_len = has_flag(STOP_WHEN_DONE) ? 256 : (usize)(end - cur);\n    hdr_len = sizeof(yyjson_doc) / sizeof(yyjson_val);\n    hdr_len += (sizeof(yyjson_doc) % sizeof(yyjson_val)) > 0;\n    alc_max = USIZE_MAX / sizeof(yyjson_val);\n    alc_len = hdr_len + (dat_len / YYJSON_READER_ESTIMATED_MINIFY_RATIO) + 4;\n    alc_len = yyjson_min(alc_len, alc_max);\n    \n    val_hdr = (yyjson_val *)alc.malloc(alc.ctx, alc_len * sizeof(yyjson_val));\n    if (unlikely(!val_hdr)) goto fail_alloc;\n    val_end = val_hdr + (alc_len - 2); /* padding for key-value pair reading */\n    val = val_hdr + hdr_len;\n    ctn = val;\n    ctn_len = 0;\n    raw = (flg & (YYJSON_READ_NUMBER_AS_RAW | YYJSON_READ_BIGNUM_AS_RAW)) != 0;\n    inv = (flg & YYJSON_READ_ALLOW_INVALID_UNICODE) != 0;\n    raw_end = NULL;\n    pre = raw ? &raw_end : NULL;\n    \n    if (*cur++ == '{') {\n        ctn->tag = YYJSON_TYPE_OBJ;\n        ctn->uni.ofs = 0;\n        goto obj_key_begin;\n    } else {\n        ctn->tag = YYJSON_TYPE_ARR;\n        ctn->uni.ofs = 0;\n        goto arr_val_begin;\n    }\n    \narr_begin:\n    /* save current container */\n    ctn->tag = (((u64)ctn_len + 1) << YYJSON_TAG_BIT) |\n               (ctn->tag & YYJSON_TAG_MASK);\n    \n    /* create a new array value, save parent container offset */\n    val_incr();\n    val->tag = YYJSON_TYPE_ARR;\n    val->uni.ofs = (usize)((u8 *)val - (u8 *)ctn);\n    \n    /* push the new array value as current container */\n    ctn = val;\n    ctn_len = 0;\n    \narr_val_begin:\n    if (*cur == '{') {\n        cur++;\n        goto obj_begin;\n    }\n    if (*cur == '[') {\n        cur++;\n        goto arr_begin;\n    }\n    if (char_is_number(*cur)) {\n        val_incr();\n        ctn_len++;\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto arr_val_end;\n        goto fail_number;\n    }\n    if (*cur == '\"') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto arr_val_end;\n        goto fail_string;\n    }\n    if (*cur == 't') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_true(&cur, val))) goto arr_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_false(&cur, val))) goto arr_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_null(&cur, val))) goto arr_val_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto arr_val_end;\n        }\n        goto fail_literal;\n    }\n    if (*cur == ']') {\n        cur++;\n        if (likely(ctn_len == 0)) goto arr_end;\n        if (has_flag(ALLOW_TRAILING_COMMAS)) goto arr_end;\n        while (*cur != ',') cur--;\n        goto fail_trailing_comma;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto arr_val_begin;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN) &&\n        (*cur == 'i' || *cur == 'I' || *cur == 'N')) {\n        val_incr();\n        ctn_len++;\n        if (read_inf_or_nan(false, &cur, pre, val)) goto arr_val_end;\n        goto fail_character;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto arr_val_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \narr_val_end:\n    if (*cur == ',') {\n        cur++;\n        goto arr_val_begin;\n    }\n    if (*cur == ']') {\n        cur++;\n        goto arr_end;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto arr_val_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto arr_val_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \narr_end:\n    /* get parent container */\n    ctn_parent = (yyjson_val *)(void *)((u8 *)ctn - ctn->uni.ofs);\n    \n    /* save the next sibling value offset */\n    ctn->uni.ofs = (usize)((u8 *)val - (u8 *)ctn) + sizeof(yyjson_val);\n    ctn->tag = ((ctn_len) << YYJSON_TAG_BIT) | YYJSON_TYPE_ARR;\n    if (unlikely(ctn == ctn_parent)) goto doc_end;\n    \n    /* pop parent as current container */\n    ctn = ctn_parent;\n    ctn_len = (usize)(ctn->tag >> YYJSON_TAG_BIT);\n    if ((ctn->tag & YYJSON_TYPE_MASK) == YYJSON_TYPE_OBJ) {\n        goto obj_val_end;\n    } else {\n        goto arr_val_end;\n    }\n    \nobj_begin:\n    /* push container */\n    ctn->tag = (((u64)ctn_len + 1) << YYJSON_TAG_BIT) |\n               (ctn->tag & YYJSON_TAG_MASK);\n    val_incr();\n    val->tag = YYJSON_TYPE_OBJ;\n    /* offset to the parent */\n    val->uni.ofs = (usize)((u8 *)val - (u8 *)ctn);\n    ctn = val;\n    ctn_len = 0;\n    \nobj_key_begin:\n    if (likely(*cur == '\"')) {\n        val_incr();\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto obj_key_end;\n        goto fail_string;\n    }\n    if (likely(*cur == '}')) {\n        cur++;\n        if (likely(ctn_len == 0)) goto obj_end;\n        if (has_flag(ALLOW_TRAILING_COMMAS)) goto obj_end;\n        while (*cur != ',') cur--;\n        goto fail_trailing_comma;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_key_begin;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_key_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_key_end:\n    if (*cur == ':') {\n        cur++;\n        goto obj_val_begin;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_key_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_key_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_val_begin:\n    if (*cur == '\"') {\n        val++;\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto obj_val_end;\n        goto fail_string;\n    }\n    if (char_is_number(*cur)) {\n        val++;\n        ctn_len++;\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto obj_val_end;\n        goto fail_number;\n    }\n    if (*cur == '{') {\n        cur++;\n        goto obj_begin;\n    }\n    if (*cur == '[') {\n        cur++;\n        goto arr_begin;\n    }\n    if (*cur == 't') {\n        val++;\n        ctn_len++;\n        if (likely(read_true(&cur, val))) goto obj_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        val++;\n        ctn_len++;\n        if (likely(read_false(&cur, val))) goto obj_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        val++;\n        ctn_len++;\n        if (likely(read_null(&cur, val))) goto obj_val_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto obj_val_end;\n        }\n        goto fail_literal;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_val_begin;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN) &&\n        (*cur == 'i' || *cur == 'I' || *cur == 'N')) {\n        val++;\n        ctn_len++;\n        if (read_inf_or_nan(false, &cur, pre, val)) goto obj_val_end;\n        goto fail_character;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_val_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_val_end:\n    if (likely(*cur == ',')) {\n        cur++;\n        goto obj_key_begin;\n    }\n    if (likely(*cur == '}')) {\n        cur++;\n        goto obj_end;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_val_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_val_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_end:\n    /* pop container */\n    ctn_parent = (yyjson_val *)(void *)((u8 *)ctn - ctn->uni.ofs);\n    /* point to the next value */\n    ctn->uni.ofs = (usize)((u8 *)val - (u8 *)ctn) + sizeof(yyjson_val);\n    ctn->tag = (ctn_len << (YYJSON_TAG_BIT - 1)) | YYJSON_TYPE_OBJ;\n    if (unlikely(ctn == ctn_parent)) goto doc_end;\n    ctn = ctn_parent;\n    ctn_len = (usize)(ctn->tag >> YYJSON_TAG_BIT);\n    if ((ctn->tag & YYJSON_TYPE_MASK) == YYJSON_TYPE_OBJ) {\n        goto obj_val_end;\n    } else {\n        goto arr_val_end;\n    }\n    \ndoc_end:\n    /* check invalid contents after json document */\n    if (unlikely(cur < end) && !has_flag(STOP_WHEN_DONE)) {\n        if (has_flag(ALLOW_COMMENTS)) {\n            skip_spaces_and_comments(&cur);\n            if (byte_match_2(cur, \"/*\")) goto fail_comment;\n        }\n        else while (char_is_space(*cur)) cur++;\n        if (unlikely(cur < end)) goto fail_garbage;\n    }\n    \n    if (pre && *pre) **pre = '\\0';\n    doc = (yyjson_doc *)val_hdr;\n    doc->root = val_hdr + hdr_len;\n    doc->alc = alc;\n    doc->dat_read = (usize)(cur - hdr);\n    doc->val_read = (usize)((val - doc->root) + 1);\n    doc->str_pool = has_flag(INSITU) ? NULL : (char *)hdr;\n    return doc;\n    \nfail_string:\n    return_err(cur, INVALID_STRING, msg);\nfail_number:\n    return_err(cur, INVALID_NUMBER, msg);\nfail_alloc:\n    return_err(cur, MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_trailing_comma:\n    return_err(cur, JSON_STRUCTURE, \"trailing comma is not allowed\");\nfail_literal:\n    return_err(cur, LITERAL, \"invalid literal\");\nfail_comment:\n    return_err(cur, INVALID_COMMENT, \"unclosed multiline comment\");\nfail_character:\n    return_err(cur, UNEXPECTED_CHARACTER, \"unexpected character\");\nfail_garbage:\n    return_err(cur, UNEXPECTED_CONTENT, \"unexpected content after document\");\n    \n#undef has_flag\n#undef val_incr\n#undef return_err\n}\n\n/** Read JSON document (accept all style, but optimized for pretty). */\nstatic_inline yyjson_doc *read_root_pretty(u8 *hdr,\n                                           u8 *cur,\n                                           u8 *end,\n                                           yyjson_alc alc,\n                                           yyjson_read_flag flg,\n                                           yyjson_read_err *err) {\n    \n#define has_flag(_flag) unlikely((flg & YYJSON_READ_##_flag) != 0)\n    \n#define return_err(_pos, _code, _msg) do { \\\n    if (is_truncated_end(hdr, _pos, end, YYJSON_READ_ERROR_##_code, flg)) { \\\n        err->pos = (usize)(end - hdr); \\\n        err->code = YYJSON_READ_ERROR_UNEXPECTED_END; \\\n        err->msg = \"unexpected end of data\"; \\\n    } else { \\\n        err->pos = (usize)(_pos - hdr); \\\n        err->code = YYJSON_READ_ERROR_##_code; \\\n        err->msg = _msg; \\\n    } \\\n    if (val_hdr) alc.free(alc.ctx, (void *)val_hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define val_incr() do { \\\n    val++; \\\n    if (unlikely(val >= val_end)) { \\\n        usize alc_old = alc_len; \\\n        alc_len += alc_len / 2; \\\n        if ((alc_len >= alc_max)) goto fail_alloc; \\\n        val_tmp = (yyjson_val *)alc.realloc(alc.ctx, (void *)val_hdr, \\\n            alc_old * sizeof(yyjson_val), \\\n            alc_len * sizeof(yyjson_val)); \\\n        if ((!val_tmp)) goto fail_alloc; \\\n        val = val_tmp + (usize)(val - val_hdr); \\\n        ctn = val_tmp + (usize)(ctn - val_hdr); \\\n        val_hdr = val_tmp; \\\n        val_end = val_tmp + (alc_len - 2); \\\n    } \\\n} while (false)\n    \n    usize dat_len; /* data length in bytes, hint for allocator */\n    usize hdr_len; /* value count used by yyjson_doc */\n    usize alc_len; /* value count allocated */\n    usize alc_max; /* maximum value count for allocator */\n    usize ctn_len; /* the number of elements in current container */\n    yyjson_val *val_hdr; /* the head of allocated values */\n    yyjson_val *val_end; /* the end of allocated values */\n    yyjson_val *val_tmp; /* temporary pointer for realloc */\n    yyjson_val *val; /* current JSON value */\n    yyjson_val *ctn; /* current container */\n    yyjson_val *ctn_parent; /* parent of current container */\n    yyjson_doc *doc; /* the JSON document, equals to val_hdr */\n    const char *msg; /* error message */\n    \n    bool raw; /* read number as raw */\n    bool inv; /* allow invalid unicode */\n    u8 *raw_end; /* raw end for null-terminator */\n    u8 **pre; /* previous raw end pointer */\n    \n    dat_len = has_flag(STOP_WHEN_DONE) ? 256 : (usize)(end - cur);\n    hdr_len = sizeof(yyjson_doc) / sizeof(yyjson_val);\n    hdr_len += (sizeof(yyjson_doc) % sizeof(yyjson_val)) > 0;\n    alc_max = USIZE_MAX / sizeof(yyjson_val);\n    alc_len = hdr_len + (dat_len / YYJSON_READER_ESTIMATED_PRETTY_RATIO) + 4;\n    alc_len = yyjson_min(alc_len, alc_max);\n    \n    val_hdr = (yyjson_val *)alc.malloc(alc.ctx, alc_len * sizeof(yyjson_val));\n    if (unlikely(!val_hdr)) goto fail_alloc;\n    val_end = val_hdr + (alc_len - 2); /* padding for key-value pair reading */\n    val = val_hdr + hdr_len;\n    ctn = val;\n    ctn_len = 0;\n    raw = (flg & (YYJSON_READ_NUMBER_AS_RAW | YYJSON_READ_BIGNUM_AS_RAW)) != 0;\n    inv = (flg & YYJSON_READ_ALLOW_INVALID_UNICODE) != 0;\n    raw_end = NULL;\n    pre = raw ? &raw_end : NULL;\n    \n    if (*cur++ == '{') {\n        ctn->tag = YYJSON_TYPE_OBJ;\n        ctn->uni.ofs = 0;\n        if (*cur == '\\n') cur++;\n        goto obj_key_begin;\n    } else {\n        ctn->tag = YYJSON_TYPE_ARR;\n        ctn->uni.ofs = 0;\n        if (*cur == '\\n') cur++;\n        goto arr_val_begin;\n    }\n    \narr_begin:\n    /* save current container */\n    ctn->tag = (((u64)ctn_len + 1) << YYJSON_TAG_BIT) |\n               (ctn->tag & YYJSON_TAG_MASK);\n    \n    /* create a new array value, save parent container offset */\n    val_incr();\n    val->tag = YYJSON_TYPE_ARR;\n    val->uni.ofs = (usize)((u8 *)val - (u8 *)ctn);\n    \n    /* push the new array value as current container */\n    ctn = val;\n    ctn_len = 0;\n    if (*cur == '\\n') cur++;\n    \narr_val_begin:\n#if YYJSON_IS_REAL_GCC\n    while (true) repeat16({\n        if (byte_match_2(cur, \"  \")) cur += 2;\n        else break;\n    })\n#else\n    while (true) repeat16({\n        if (likely(byte_match_2(cur, \"  \"))) cur += 2;\n        else break;\n    })\n#endif\n    \n    if (*cur == '{') {\n        cur++;\n        goto obj_begin;\n    }\n    if (*cur == '[') {\n        cur++;\n        goto arr_begin;\n    }\n    if (char_is_number(*cur)) {\n        val_incr();\n        ctn_len++;\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto arr_val_end;\n        goto fail_number;\n    }\n    if (*cur == '\"') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto arr_val_end;\n        goto fail_string;\n    }\n    if (*cur == 't') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_true(&cur, val))) goto arr_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_false(&cur, val))) goto arr_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_null(&cur, val))) goto arr_val_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto arr_val_end;\n        }\n        goto fail_literal;\n    }\n    if (*cur == ']') {\n        cur++;\n        if (likely(ctn_len == 0)) goto arr_end;\n        if (has_flag(ALLOW_TRAILING_COMMAS)) goto arr_end;\n        while (*cur != ',') cur--;\n        goto fail_trailing_comma;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto arr_val_begin;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN) &&\n        (*cur == 'i' || *cur == 'I' || *cur == 'N')) {\n        val_incr();\n        ctn_len++;\n        if (read_inf_or_nan(false, &cur, pre, val)) goto arr_val_end;\n        goto fail_character;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto arr_val_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \narr_val_end:\n    if (byte_match_2(cur, \",\\n\")) {\n        cur += 2;\n        goto arr_val_begin;\n    }\n    if (*cur == ',') {\n        cur++;\n        goto arr_val_begin;\n    }\n    if (*cur == ']') {\n        cur++;\n        goto arr_end;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto arr_val_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto arr_val_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \narr_end:\n    /* get parent container */\n    ctn_parent = (yyjson_val *)(void *)((u8 *)ctn - ctn->uni.ofs);\n    \n    /* save the next sibling value offset */\n    ctn->uni.ofs = (usize)((u8 *)val - (u8 *)ctn) + sizeof(yyjson_val);\n    ctn->tag = ((ctn_len) << YYJSON_TAG_BIT) | YYJSON_TYPE_ARR;\n    if (unlikely(ctn == ctn_parent)) goto doc_end;\n    \n    /* pop parent as current container */\n    ctn = ctn_parent;\n    ctn_len = (usize)(ctn->tag >> YYJSON_TAG_BIT);\n    if (*cur == '\\n') cur++;\n    if ((ctn->tag & YYJSON_TYPE_MASK) == YYJSON_TYPE_OBJ) {\n        goto obj_val_end;\n    } else {\n        goto arr_val_end;\n    }\n    \nobj_begin:\n    /* push container */\n    ctn->tag = (((u64)ctn_len + 1) << YYJSON_TAG_BIT) |\n               (ctn->tag & YYJSON_TAG_MASK);\n    val_incr();\n    val->tag = YYJSON_TYPE_OBJ;\n    /* offset to the parent */\n    val->uni.ofs = (usize)((u8 *)val - (u8 *)ctn);\n    ctn = val;\n    ctn_len = 0;\n    if (*cur == '\\n') cur++;\n    \nobj_key_begin:\n#if YYJSON_IS_REAL_GCC\n    while (true) repeat16({\n        if (byte_match_2(cur, \"  \")) cur += 2;\n        else break;\n    })\n#else\n    while (true) repeat16({\n        if (likely(byte_match_2(cur, \"  \"))) cur += 2;\n        else break;\n    })\n#endif\n    if (likely(*cur == '\"')) {\n        val_incr();\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto obj_key_end;\n        goto fail_string;\n    }\n    if (likely(*cur == '}')) {\n        cur++;\n        if (likely(ctn_len == 0)) goto obj_end;\n        if (has_flag(ALLOW_TRAILING_COMMAS)) goto obj_end;\n        while (*cur != ',') cur--;\n        goto fail_trailing_comma;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_key_begin;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_key_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_key_end:\n    if (byte_match_2(cur, \": \")) {\n        cur += 2;\n        goto obj_val_begin;\n    }\n    if (*cur == ':') {\n        cur++;\n        goto obj_val_begin;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_key_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_key_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_val_begin:\n    if (*cur == '\"') {\n        val++;\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto obj_val_end;\n        goto fail_string;\n    }\n    if (char_is_number(*cur)) {\n        val++;\n        ctn_len++;\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto obj_val_end;\n        goto fail_number;\n    }\n    if (*cur == '{') {\n        cur++;\n        goto obj_begin;\n    }\n    if (*cur == '[') {\n        cur++;\n        goto arr_begin;\n    }\n    if (*cur == 't') {\n        val++;\n        ctn_len++;\n        if (likely(read_true(&cur, val))) goto obj_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        val++;\n        ctn_len++;\n        if (likely(read_false(&cur, val))) goto obj_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        val++;\n        ctn_len++;\n        if (likely(read_null(&cur, val))) goto obj_val_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto obj_val_end;\n        }\n        goto fail_literal;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_val_begin;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN) &&\n        (*cur == 'i' || *cur == 'I' || *cur == 'N')) {\n        val++;\n        ctn_len++;\n        if (read_inf_or_nan(false, &cur, pre, val)) goto obj_val_end;\n        goto fail_character;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_val_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_val_end:\n    if (byte_match_2(cur, \",\\n\")) {\n        cur += 2;\n        goto obj_key_begin;\n    }\n    if (likely(*cur == ',')) {\n        cur++;\n        goto obj_key_begin;\n    }\n    if (likely(*cur == '}')) {\n        cur++;\n        goto obj_end;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_val_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_val_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_end:\n    /* pop container */\n    ctn_parent = (yyjson_val *)(void *)((u8 *)ctn - ctn->uni.ofs);\n    /* point to the next value */\n    ctn->uni.ofs = (usize)((u8 *)val - (u8 *)ctn) + sizeof(yyjson_val);\n    ctn->tag = (ctn_len << (YYJSON_TAG_BIT - 1)) | YYJSON_TYPE_OBJ;\n    if (unlikely(ctn == ctn_parent)) goto doc_end;\n    ctn = ctn_parent;\n    ctn_len = (usize)(ctn->tag >> YYJSON_TAG_BIT);\n    if (*cur == '\\n') cur++;\n    if ((ctn->tag & YYJSON_TYPE_MASK) == YYJSON_TYPE_OBJ) {\n        goto obj_val_end;\n    } else {\n        goto arr_val_end;\n    }\n    \ndoc_end:\n    /* check invalid contents after json document */\n    if (unlikely(cur < end) && !has_flag(STOP_WHEN_DONE)) {\n        if (has_flag(ALLOW_COMMENTS)) {\n            skip_spaces_and_comments(&cur);\n            if (byte_match_2(cur, \"/*\")) goto fail_comment;\n        }\n        else while (char_is_space(*cur)) cur++;\n        if (unlikely(cur < end)) goto fail_garbage;\n    }\n    \n    if (pre && *pre) **pre = '\\0';\n    doc = (yyjson_doc *)val_hdr;\n    doc->root = val_hdr + hdr_len;\n    doc->alc = alc;\n    doc->dat_read = (usize)(cur - hdr);\n    doc->val_read = (usize)((val - val_hdr)) - hdr_len + 1;\n    doc->str_pool = has_flag(INSITU) ? NULL : (char *)hdr;\n    return doc;\n    \nfail_string:\n    return_err(cur, INVALID_STRING, msg);\nfail_number:\n    return_err(cur, INVALID_NUMBER, msg);\nfail_alloc:\n    return_err(cur, MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_trailing_comma:\n    return_err(cur, JSON_STRUCTURE, \"trailing comma is not allowed\");\nfail_literal:\n    return_err(cur, LITERAL, \"invalid literal\");\nfail_comment:\n    return_err(cur, INVALID_COMMENT, \"unclosed multiline comment\");\nfail_character:\n    return_err(cur, UNEXPECTED_CHARACTER, \"unexpected character\");\nfail_garbage:\n    return_err(cur, UNEXPECTED_CONTENT, \"unexpected content after document\");\n    \n#undef has_flag\n#undef val_incr\n#undef return_err\n}\n\n\n\n/*==============================================================================\n * JSON Reader Entrance\n *============================================================================*/\n\nyyjson_doc *yyjson_read_opts(char *dat,\n                             usize len,\n                             yyjson_read_flag flg,\n                             const yyjson_alc *alc_ptr,\n                             yyjson_read_err *err) {\n    \n#define has_flag(_flag) unlikely((flg & YYJSON_READ_##_flag) != 0)\n    \n#define return_err(_pos, _code, _msg) do { \\\n    err->pos = (usize)(_pos); \\\n    err->msg = _msg; \\\n    err->code = YYJSON_READ_ERROR_##_code; \\\n    if (!has_flag(INSITU) && hdr) alc.free(alc.ctx, (void *)hdr); \\\n    return NULL; \\\n} while (false)\n    \n    yyjson_read_err dummy_err;\n    yyjson_alc alc;\n    yyjson_doc *doc;\n    u8 *hdr = NULL, *end, *cur;\n    \n#if YYJSON_DISABLE_NON_STANDARD\n    flg &= ~YYJSON_READ_ALLOW_TRAILING_COMMAS;\n    flg &= ~YYJSON_READ_ALLOW_COMMENTS;\n    flg &= ~YYJSON_READ_ALLOW_INF_AND_NAN;\n    flg &= ~YYJSON_READ_ALLOW_INVALID_UNICODE;\n#endif\n    \n    /* validate input parameters */\n    if (!err) err = &dummy_err;\n    if (likely(!alc_ptr)) {\n        alc = YYJSON_DEFAULT_ALC;\n    } else {\n        alc = *alc_ptr;\n    }\n    if (unlikely(!dat)) {\n        return_err(0, INVALID_PARAMETER, \"input data is NULL\");\n    }\n    if (unlikely(!len)) {\n        return_err(0, INVALID_PARAMETER, \"input length is 0\");\n    }\n    \n    /* add 4-byte zero padding for input data if necessary */\n    if (has_flag(INSITU)) {\n        hdr = (u8 *)dat;\n        end = (u8 *)dat + len;\n        cur = (u8 *)dat;\n    } else {\n        if (unlikely(len >= USIZE_MAX - YYJSON_PADDING_SIZE)) {\n            return_err(0, MEMORY_ALLOCATION, \"memory allocation failed\");\n        }\n        hdr = (u8 *)alc.malloc(alc.ctx, len + YYJSON_PADDING_SIZE);\n        if (unlikely(!hdr)) {\n            return_err(0, MEMORY_ALLOCATION, \"memory allocation failed\");\n        }\n        end = hdr + len;\n        cur = hdr;\n        memcpy(hdr, dat, len);\n        memset(end, 0, YYJSON_PADDING_SIZE);\n    }\n    \n    /* skip empty contents before json document */\n    if (unlikely(char_is_space_or_comment(*cur))) {\n        if (has_flag(ALLOW_COMMENTS)) {\n            if (!skip_spaces_and_comments(&cur)) {\n                return_err(cur - hdr, INVALID_COMMENT,\n                           \"unclosed multiline comment\");\n            }\n        } else {\n            if (likely(char_is_space(*cur))) {\n                while (char_is_space(*++cur));\n            }\n        }\n        if (unlikely(cur >= end)) {\n            return_err(0, EMPTY_CONTENT, \"input data is empty\");\n        }\n    }\n    \n    /* read json document */\n    if (likely(char_is_container(*cur))) {\n        if (char_is_space(cur[1]) && char_is_space(cur[2])) {\n            doc = read_root_pretty(hdr, cur, end, alc, flg, err);\n        } else {\n            doc = read_root_minify(hdr, cur, end, alc, flg, err);\n        }\n    } else {\n        doc = read_root_single(hdr, cur, end, alc, flg, err);\n    }\n    \n    /* check result */\n    if (likely(doc)) {\n        memset(err, 0, sizeof(yyjson_read_err));\n    } else {\n        /* RFC 8259: JSON text MUST be encoded using UTF-8 */\n        if (err->pos == 0 && err->code != YYJSON_READ_ERROR_MEMORY_ALLOCATION) {\n            if ((hdr[0] == 0xEF && hdr[1] == 0xBB && hdr[2] == 0xBF)) {\n                err->msg = \"byte order mark (BOM) is not supported\";\n            } else if (len >= 4 &&\n                       ((hdr[0] == 0x00 && hdr[1] == 0x00 &&\n                         hdr[2] == 0xFE && hdr[3] == 0xFF) ||\n                        (hdr[0] == 0xFF && hdr[1] == 0xFE &&\n                         hdr[2] == 0x00 && hdr[3] == 0x00))) {\n                err->msg = \"UTF-32 encoding is not supported\";\n            } else if (len >= 2 &&\n                       ((hdr[0] == 0xFE && hdr[1] == 0xFF) ||\n                        (hdr[0] == 0xFF && hdr[1] == 0xFE))) {\n                err->msg = \"UTF-16 encoding is not supported\";\n            }\n        }\n        if (!has_flag(INSITU)) alc.free(alc.ctx, (void *)hdr);\n    }\n    return doc;\n    \n#undef has_flag\n#undef return_err\n}\n\nyyjson_doc *yyjson_read_file(const char *path,\n                             yyjson_read_flag flg,\n                             const yyjson_alc *alc_ptr,\n                             yyjson_read_err *err) {\n#define return_err(_code, _msg) do { \\\n    err->pos = 0; \\\n    err->msg = _msg; \\\n    err->code = YYJSON_READ_ERROR_##_code; \\\n    return NULL; \\\n} while (false)\n    \n    yyjson_read_err dummy_err;\n    yyjson_doc *doc;\n    FILE *file;\n    \n    if (!err) err = &dummy_err;\n    if (unlikely(!path)) return_err(INVALID_PARAMETER, \"input path is NULL\");\n    \n    file = fopen_readonly(path);\n    if (unlikely(!file)) return_err(FILE_OPEN, \"file opening failed\");\n    \n    doc = yyjson_read_fp(file, flg, alc_ptr, err);\n    fclose(file);\n    return doc;\n    \n#undef return_err\n}\n\nyyjson_doc *yyjson_read_fp(FILE *file,\n                           yyjson_read_flag flg,\n                           const yyjson_alc *alc_ptr,\n                           yyjson_read_err *err) {\n#define return_err(_code, _msg) do { \\\n    err->pos = 0; \\\n    err->msg = _msg; \\\n    err->code = YYJSON_READ_ERROR_##_code; \\\n    if (buf) alc.free(alc.ctx, buf); \\\n    return NULL; \\\n} while (false)\n    \n    yyjson_read_err dummy_err;\n    yyjson_alc alc = alc_ptr ? *alc_ptr : YYJSON_DEFAULT_ALC;\n    yyjson_doc *doc;\n    \n    long file_size = 0, file_pos;\n    void *buf = NULL;\n    usize buf_size = 0;\n    \n    /* validate input parameters */\n    if (!err) err = &dummy_err;\n    if (unlikely(!file)) return_err(INVALID_PARAMETER, \"input file is NULL\");\n    \n    /* get current position */\n    file_pos = ftell(file);\n    if (file_pos != -1) {\n        /* get total file size, may fail */\n        if (fseek(file, 0, SEEK_END) == 0) file_size = ftell(file);\n        /* reset to original position, may fail */\n        if (fseek(file, file_pos, SEEK_SET) != 0) file_size = 0;\n        /* get file size from current postion to end */\n        if (file_size > 0) file_size -= file_pos;\n    }\n    \n    /* read file */\n    if (file_size > 0) {\n        /* read the entire file in one call */\n        buf_size = (usize)file_size + YYJSON_PADDING_SIZE;\n        buf = alc.malloc(alc.ctx, buf_size);\n        if (buf == NULL) {\n            return_err(MEMORY_ALLOCATION, \"fail to alloc memory\");\n        }\n        if (fread_safe(buf, (usize)file_size, file) != (usize)file_size) {\n            return_err(FILE_READ, \"file reading failed\");\n        }\n    } else {\n        /* failed to get file size, read it as a stream */\n        usize chunk_min = (usize)64;\n        usize chunk_max = (usize)512 * 1024 * 1024;\n        usize chunk_now = chunk_min;\n        usize read_size;\n        void *tmp;\n        \n        buf_size = YYJSON_PADDING_SIZE;\n        while (true) {\n            if (buf_size + chunk_now < buf_size) { /* overflow */\n                return_err(MEMORY_ALLOCATION, \"fail to alloc memory\");\n            }\n            buf_size += chunk_now;\n            if (!buf) {\n                buf = alc.malloc(alc.ctx, buf_size);\n                if (!buf) return_err(MEMORY_ALLOCATION, \"fail to alloc memory\");\n            } else {\n                tmp = alc.realloc(alc.ctx, buf, buf_size - chunk_now, buf_size);\n                if (!tmp) return_err(MEMORY_ALLOCATION, \"fail to alloc memory\");\n                buf = tmp;\n            }\n            tmp = ((u8 *)buf) + buf_size - YYJSON_PADDING_SIZE - chunk_now;\n            read_size = fread_safe(tmp, chunk_now, file);\n            file_size += (long)read_size;\n            if (read_size != chunk_now) break;\n            \n            chunk_now *= 2;\n            if (chunk_now > chunk_max) chunk_now = chunk_max;\n        }\n    }\n    \n    /* read JSON */\n    memset((u8 *)buf + file_size, 0, YYJSON_PADDING_SIZE);\n    flg |= YYJSON_READ_INSITU;\n    doc = yyjson_read_opts((char *)buf, (usize)file_size, flg, &alc, err);\n    if (doc) {\n        doc->str_pool = (char *)buf;\n        return doc;\n    } else {\n        alc.free(alc.ctx, buf);\n        return NULL;\n    }\n    \n#undef return_err\n}\n\n\n\nconst char *yyjson_read_number(const char *dat,\n                               yyjson_val *val,\n                               yyjson_read_flag flg,\n                               const yyjson_alc *alc,\n                               yyjson_read_err *err) {\n#define return_err(_pos, _code, _msg) do { \\\n    err->pos = _pos > hdr ? (usize)(_pos - hdr) : 0; \\\n    err->msg = _msg; \\\n    err->code = YYJSON_READ_ERROR_##_code; \\\n    return NULL; \\\n} while (false)\n    \n    u8 *hdr = constcast(u8 *)dat, *cur = hdr;\n    bool raw; /* read number as raw */\n    u8 *raw_end; /* raw end for null-terminator */\n    u8 **pre; /* previous raw end pointer */\n    const char *msg;\n    yyjson_read_err dummy_err;\n    \n#if !YYJSON_HAS_IEEE_754 || YYJSON_DISABLE_FAST_FP_CONV\n    u8 buf[128];\n    usize dat_len;\n#endif\n    \n    if (!err) err = &dummy_err;\n    if (unlikely(!dat)) {\n        return_err(cur, INVALID_PARAMETER, \"input data is NULL\");\n    }\n    if (unlikely(!val)) {\n        return_err(cur, INVALID_PARAMETER, \"output value is NULL\");\n    }\n    \n#if !YYJSON_HAS_IEEE_754 || YYJSON_DISABLE_FAST_FP_CONV\n    if (!alc) alc = &YYJSON_DEFAULT_ALC;\n    dat_len = strlen(dat);\n    if (dat_len < sizeof(buf)) {\n        memcpy(buf, dat, dat_len + 1);\n        hdr = buf;\n        cur = hdr;\n    } else {\n        hdr = (u8 *)alc->malloc(alc->ctx, dat_len + 1);\n        cur = hdr;\n        if (unlikely(!hdr)) {\n            return_err(cur, MEMORY_ALLOCATION, \"memory allocation failed\");\n        }\n        memcpy(hdr, dat, dat_len + 1);\n    }\n    hdr[dat_len] = 0;\n#endif\n    \n#if YYJSON_DISABLE_NON_STANDARD\n    flg &= ~YYJSON_READ_ALLOW_INF_AND_NAN;\n#endif\n    \n    raw = (flg & (YYJSON_READ_NUMBER_AS_RAW | YYJSON_READ_BIGNUM_AS_RAW)) != 0;\n    raw_end = NULL;\n    pre = raw ? &raw_end : NULL;\n    \n#if !YYJSON_HAS_IEEE_754 || YYJSON_DISABLE_FAST_FP_CONV\n    if (!read_number(&cur, pre, flg, val, &msg)) {\n        if (dat_len >= sizeof(buf)) alc->free(alc->ctx, hdr);\n        return_err(cur, INVALID_NUMBER, msg);\n    }\n    if (dat_len >= sizeof(buf)) alc->free(alc->ctx, hdr);\n    if (yyjson_is_raw(val)) val->uni.str = dat;\n    return dat + (cur - hdr);\n#else\n    if (!read_number(&cur, pre, flg, val, &msg)) {\n        return_err(cur, INVALID_NUMBER, msg);\n    }\n    return (const char *)cur;\n#endif\n    \n#undef return_err\n}\n\n#endif /* YYJSON_DISABLE_READER */\n\n\n\n#if !YYJSON_DISABLE_WRITER\n\n/*==============================================================================\n * Integer Writer\n *\n * The maximum value of uint32_t is 4294967295 (10 digits),\n * these digits are named as 'aabbccddee' here.\n *\n * Although most compilers may convert the \"division by constant value\" into\n * \"multiply and shift\", manual conversion can still help some compilers\n * generate fewer and better instructions.\n *\n * Reference:\n * Division by Invariant Integers using Multiplication, 1994.\n * https://gmplib.org/~tege/divcnst-pldi94.pdf\n * Improved division by invariant integers, 2011.\n * https://gmplib.org/~tege/division-paper.pdf\n *============================================================================*/\n\n/** Digit table from 00 to 99. */\nyyjson_align(2)\nstatic const char digit_table[200] = {\n    '0', '0', '0', '1', '0', '2', '0', '3', '0', '4',\n    '0', '5', '0', '6', '0', '7', '0', '8', '0', '9',\n    '1', '0', '1', '1', '1', '2', '1', '3', '1', '4',\n    '1', '5', '1', '6', '1', '7', '1', '8', '1', '9',\n    '2', '0', '2', '1', '2', '2', '2', '3', '2', '4',\n    '2', '5', '2', '6', '2', '7', '2', '8', '2', '9',\n    '3', '0', '3', '1', '3', '2', '3', '3', '3', '4',\n    '3', '5', '3', '6', '3', '7', '3', '8', '3', '9',\n    '4', '0', '4', '1', '4', '2', '4', '3', '4', '4',\n    '4', '5', '4', '6', '4', '7', '4', '8', '4', '9',\n    '5', '0', '5', '1', '5', '2', '5', '3', '5', '4',\n    '5', '5', '5', '6', '5', '7', '5', '8', '5', '9',\n    '6', '0', '6', '1', '6', '2', '6', '3', '6', '4',\n    '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',\n    '7', '0', '7', '1', '7', '2', '7', '3', '7', '4',\n    '7', '5', '7', '6', '7', '7', '7', '8', '7', '9',\n    '8', '0', '8', '1', '8', '2', '8', '3', '8', '4',\n    '8', '5', '8', '6', '8', '7', '8', '8', '8', '9',\n    '9', '0', '9', '1', '9', '2', '9', '3', '9', '4',\n    '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'\n};\n\nstatic_inline u8 *write_u32_len_8(u32 val, u8 *buf) {\n    u32 aa, bb, cc, dd, aabb, ccdd;                 /* 8 digits: aabbccdd */\n    aabb = (u32)(((u64)val * 109951163) >> 40);     /* (val / 10000) */\n    ccdd = val - aabb * 10000;                      /* (val % 10000) */\n    aa = (aabb * 5243) >> 19;                       /* (aabb / 100) */\n    cc = (ccdd * 5243) >> 19;                       /* (ccdd / 100) */\n    bb = aabb - aa * 100;                           /* (aabb % 100) */\n    dd = ccdd - cc * 100;                           /* (ccdd % 100) */\n    ((v16 *)buf)[0] = ((const v16 *)digit_table)[aa];\n    ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n    ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n    ((v16 *)buf)[3] = ((const v16 *)digit_table)[dd];\n    return buf + 8;\n}\n\nstatic_inline u8 *write_u32_len_4(u32 val, u8 *buf) {\n    u32 aa, bb;                                     /* 4 digits: aabb */\n    aa = (val * 5243) >> 19;                        /* (val / 100) */\n    bb = val - aa * 100;                            /* (val % 100) */\n    ((v16 *)buf)[0] = ((const v16 *)digit_table)[aa];\n    ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n    return buf + 4;\n}\n\nstatic_inline u8 *write_u32_len_1_8(u32 val, u8 *buf) {\n    u32 aa, bb, cc, dd, aabb, bbcc, ccdd, lz;\n    \n    if (val < 100) {                                /* 1-2 digits: aa */\n        lz = val < 10;                              /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (val * 2 + lz));\n        buf -= lz;\n        return buf + 2;\n        \n    } else if (val < 10000) {                       /* 3-4 digits: aabb */\n        aa = (val * 5243) >> 19;                    /* (val / 100) */\n        bb = val - aa * 100;                        /* (val % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        return buf + 4;\n        \n    } else if (val < 1000000) {                     /* 5-6 digits: aabbcc */\n        aa = (u32)(((u64)val * 429497) >> 32);      /* (val / 10000) */\n        bbcc = val - aa * 10000;                    /* (val % 10000) */\n        bb = (bbcc * 5243) >> 19;                   /* (bbcc / 100) */\n        cc = bbcc - bb * 100;                       /* (bbcc % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n        return buf + 6;\n        \n    } else {                                        /* 7-8 digits: aabbccdd */\n        aabb = (u32)(((u64)val * 109951163) >> 40); /* (val / 10000) */\n        ccdd = val - aabb * 10000;                  /* (val % 10000) */\n        aa = (aabb * 5243) >> 19;                   /* (aabb / 100) */\n        cc = (ccdd * 5243) >> 19;                   /* (ccdd / 100) */\n        bb = aabb - aa * 100;                       /* (aabb % 100) */\n        dd = ccdd - cc * 100;                       /* (ccdd % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n        ((v16 *)buf)[3] = ((const v16 *)digit_table)[dd];\n        return buf + 8;\n    }\n}\n\nstatic_inline u8 *write_u64_len_5_8(u32 val, u8 *buf) {\n    u32 aa, bb, cc, dd, aabb, bbcc, ccdd, lz;\n    \n    if (val < 1000000) {                            /* 5-6 digits: aabbcc */\n        aa = (u32)(((u64)val * 429497) >> 32);      /* (val / 10000) */\n        bbcc = val - aa * 10000;                    /* (val % 10000) */\n        bb = (bbcc * 5243) >> 19;                   /* (bbcc / 100) */\n        cc = bbcc - bb * 100;                       /* (bbcc % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n        return buf + 6;\n        \n    } else {                                        /* 7-8 digits: aabbccdd */\n        aabb = (u32)(((u64)val * 109951163) >> 40); /* (val / 10000) */\n        ccdd = val - aabb * 10000;                  /* (val % 10000) */\n        aa = (aabb * 5243) >> 19;                   /* (aabb / 100) */\n        cc = (ccdd * 5243) >> 19;                   /* (ccdd / 100) */\n        bb = aabb - aa * 100;                       /* (aabb % 100) */\n        dd = ccdd - cc * 100;                       /* (ccdd % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n        ((v16 *)buf)[3] = ((const v16 *)digit_table)[dd];\n        return buf + 8;\n    }\n}\n\nstatic_inline u8 *write_u64(u64 val, u8 *buf) {\n    u64 tmp, hgh;\n    u32 mid, low;\n    \n    if (val < 100000000) {                          /* 1-8 digits */\n        buf = write_u32_len_1_8((u32)val, buf);\n        return buf;\n        \n    } else if (val < (u64)100000000 * 100000000) {  /* 9-16 digits */\n        hgh = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - hgh * 100000000);         /* (val % 100000000) */\n        buf = write_u32_len_1_8((u32)hgh, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n        \n    } else {                                        /* 17-20 digits */\n        tmp = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - tmp * 100000000);         /* (val % 100000000) */\n        hgh = (u32)(tmp / 10000);                   /* (tmp / 10000) */\n        mid = (u32)(tmp - hgh * 10000);             /* (tmp % 10000) */\n        buf = write_u64_len_5_8((u32)hgh, buf);\n        buf = write_u32_len_4(mid, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n    }\n}\n\n\n\n/*==============================================================================\n * Number Writer\n *============================================================================*/\n\n#if YYJSON_HAS_IEEE_754 && !YYJSON_DISABLE_FAST_FP_CONV  /* FP_WRITER */\n\n/** Trailing zero count table for number 0 to 99.\n    (generate with misc/make_tables.c) */\nstatic const u8 dec_trailing_zero_table[] = {\n    2, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0\n};\n\n/** Write an unsigned integer with a length of 1 to 16. */\nstatic_inline u8 *write_u64_len_1_to_16(u64 val, u8 *buf) {\n    u64 hgh;\n    u32 low;\n    if (val < 100000000) {                          /* 1-8 digits */\n        buf = write_u32_len_1_8((u32)val, buf);\n        return buf;\n    } else {                                        /* 9-16 digits */\n        hgh = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - hgh * 100000000);         /* (val % 100000000) */\n        buf = write_u32_len_1_8((u32)hgh, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n    }\n}\n\n/** Write an unsigned integer with a length of 1 to 17. */\nstatic_inline u8 *write_u64_len_1_to_17(u64 val, u8 *buf) {\n    u64 hgh;\n    u32 mid, low, one;\n    if (val >= (u64)100000000 * 10000000) {         /* len: 16 to 17 */\n        hgh = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - hgh * 100000000);         /* (val % 100000000) */\n        one = (u32)(hgh / 100000000);               /* (hgh / 100000000) */\n        mid = (u32)(hgh - (u64)one * 100000000);    /* (hgh % 100000000) */\n        *buf = (u8)((u8)one + (u8)'0');\n        buf += one > 0;\n        buf = write_u32_len_8(mid, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n    } else if (val >= (u64)100000000){              /* len: 9 to 15 */\n        hgh = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - hgh * 100000000);         /* (val % 100000000) */\n        buf = write_u32_len_1_8((u32)hgh, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n    } else { /* len: 1 to 8 */\n        buf = write_u32_len_1_8((u32)val, buf);\n        return buf;\n    }\n}\n\n/**\n Write an unsigned integer with a length of 15 to 17 with trailing zero trimmed.\n These digits are named as \"aabbccddeeffgghhii\" here.\n For example, input 1234567890123000, output \"1234567890123\".\n */\nstatic_inline u8 *write_u64_len_15_to_17_trim(u8 *buf, u64 sig) {\n    bool lz;                                        /* leading zero */\n    u32 tz1, tz2, tz;                               /* trailing zero */\n    \n    u32 abbccddee = (u32)(sig / 100000000);\n    u32 ffgghhii = (u32)(sig - (u64)abbccddee * 100000000);\n    u32 abbcc = abbccddee / 10000;                  /* (abbccddee / 10000) */\n    u32 ddee = abbccddee - abbcc * 10000;           /* (abbccddee % 10000) */\n    u32 abb = (u32)(((u64)abbcc * 167773) >> 24);   /* (abbcc / 100) */\n    u32 a = (abb * 41) >> 12;                       /* (abb / 100) */\n    u32 bb = abb - a * 100;                         /* (abb % 100) */\n    u32 cc = abbcc - abb * 100;                     /* (abbcc % 100) */\n    \n    /* write abbcc */\n    buf[0] = (u8)(a + '0');\n    buf += a > 0;\n    lz = bb < 10 && a == 0;\n    ((v16 *)buf)[0] = *(const v16 *)(digit_table + (bb * 2 + lz));\n    buf -= lz;\n    ((v16 *)buf)[1] = ((const v16 *)digit_table)[cc];\n    \n    if (ffgghhii) {\n        u32 dd = (ddee * 5243) >> 19;               /* (ddee / 100) */\n        u32 ee = ddee - dd * 100;                   /* (ddee % 100) */\n        u32 ffgg = (u32)(((u64)ffgghhii * 109951163) >> 40); /* (val / 10000) */\n        u32 hhii = ffgghhii - ffgg * 10000;         /* (val % 10000) */\n        u32 ff = (ffgg * 5243) >> 19;               /* (aabb / 100) */\n        u32 gg = ffgg - ff * 100;                   /* (aabb % 100) */\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[dd];\n        ((v16 *)buf)[3] = ((const v16 *)digit_table)[ee];\n        ((v16 *)buf)[4] = ((const v16 *)digit_table)[ff];\n        ((v16 *)buf)[5] = ((const v16 *)digit_table)[gg];\n        if (hhii) {\n            u32 hh = (hhii * 5243) >> 19;           /* (ccdd / 100) */\n            u32 ii = hhii - hh * 100;               /* (ccdd % 100) */\n            ((v16 *)buf)[6] = ((const v16 *)digit_table)[hh];\n            ((v16 *)buf)[7] = ((const v16 *)digit_table)[ii];\n            tz1 = dec_trailing_zero_table[hh];\n            tz2 = dec_trailing_zero_table[ii];\n            tz = ii ? tz2 : (tz1 + 2);\n            buf += 16 - tz;\n            return buf;\n        } else {\n            tz1 = dec_trailing_zero_table[ff];\n            tz2 = dec_trailing_zero_table[gg];\n            tz = gg ? tz2 : (tz1 + 2);\n            buf += 12 - tz;\n            return buf;\n        }\n    } else {\n        if (ddee) {\n            u32 dd = (ddee * 5243) >> 19;           /* (ddee / 100) */\n            u32 ee = ddee - dd * 100;               /* (ddee % 100) */\n            ((v16 *)buf)[2] = ((const v16 *)digit_table)[dd];\n            ((v16 *)buf)[3] = ((const v16 *)digit_table)[ee];\n            tz1 = dec_trailing_zero_table[dd];\n            tz2 = dec_trailing_zero_table[ee];\n            tz = ee ? tz2 : (tz1 + 2);\n            buf += 8 - tz;\n            return buf;\n        } else {\n            tz1 = dec_trailing_zero_table[bb];\n            tz2 = dec_trailing_zero_table[cc];\n            tz = cc ? tz2 : (tz1 + tz2);\n            buf += 4 - tz;\n            return buf;\n        }\n    }\n}\n\n/** Write a signed integer in the range -324 to 308. */\nstatic_inline u8 *write_f64_exp(i32 exp, u8 *buf) {\n    buf[0] = '-';\n    buf += exp < 0;\n    exp = exp < 0 ? -exp : exp;\n    if (exp < 100) {\n        u32 lz = exp < 10;\n        *(v16 *)&buf[0] = *(const v16 *)(digit_table + ((u32)exp * 2 + lz));\n        return buf + 2 - lz;\n    } else {\n        u32 hi = ((u32)exp * 656) >> 16;            /* exp / 100 */\n        u32 lo = (u32)exp - hi * 100;               /* exp % 100 */\n        buf[0] = (u8)((u8)hi + (u8)'0');\n        *(v16 *)&buf[1] = *(const v16 *)(digit_table + (lo * 2));\n        return buf + 3;\n    }\n}\n\n/** Multiplies 128-bit integer and returns highest 64-bit rounded value. */\nstatic_inline u64 round_to_odd(u64 hi, u64 lo, u64 cp) {\n    u64 x_hi, x_lo, y_hi, y_lo;\n    u128_mul(cp, lo, &x_hi, &x_lo);\n    u128_mul_add(cp, hi, x_hi, &y_hi, &y_lo);\n    return y_hi | (y_lo > 1);\n}\n\n/**\n Convert double number from binary to decimal.\n The output significand is shortest decimal but may have trailing zeros.\n \n This function use the Schubfach algorithm:\n Raffaello Giulietti, The Schubfach way to render doubles (5th version), 2022.\n https://drive.google.com/file/d/1gp5xv4CAa78SVgCeWfGqqI4FfYYYuNFb\n https://mail.openjdk.java.net/pipermail/core-libs-dev/2021-November/083536.html\n https://github.com/openjdk/jdk/pull/3402 (Java implementation)\n https://github.com/abolz/Drachennest (C++ implementation)\n \n See also:\n Dragonbox: A New Floating-Point Binary-to-Decimal Conversion Algorithm, 2022.\n https://github.com/jk-jeon/dragonbox/blob/master/other_files/Dragonbox.pdf\n https://github.com/jk-jeon/dragonbox\n \n @param sig_raw The raw value of significand in IEEE 754 format.\n @param exp_raw The raw value of exponent in IEEE 754 format.\n @param sig_bin The decoded value of significand in binary.\n @param exp_bin The decoded value of exponent in binary.\n @param sig_dec The output value of significand in decimal.\n @param exp_dec The output value of exponent in decimal.\n @warning The input double number should not be 0, inf, nan.\n */\nstatic_inline void f64_bin_to_dec(u64 sig_raw, u32 exp_raw,\n                                  u64 sig_bin, i32 exp_bin,\n                                  u64 *sig_dec, i32 *exp_dec) {\n    \n    bool is_even, regular_spacing, u_inside, w_inside, round_up;\n    u64 s, sp, cb, cbl, cbr, vb, vbl, vbr, pow10hi, pow10lo, upper, lower, mid;\n    i32 k, h, exp10;\n    \n    is_even = !(sig_bin & 1);\n    regular_spacing = (sig_raw == 0 && exp_raw > 1);\n    \n    cbl = 4 * sig_bin - 2 + regular_spacing;\n    cb  = 4 * sig_bin;\n    cbr = 4 * sig_bin + 2;\n    \n    /* exp_bin: [-1074, 971]                                                  */\n    /* k = regular_spacing ? floor(log10(pow(2, exp_bin)))                    */\n    /*                     : floor(log10(pow(2, exp_bin) * 3.0 / 4.0))        */\n    /*   = regular_spacing ? floor(exp_bin * log10(2))                        */\n    /*                     : floor(exp_bin * log10(2) + log10(3.0 / 4.0))     */\n    k = (i32)(exp_bin * 315653 - (regular_spacing ? 131237 : 0)) >> 20;\n    \n    /* k: [-324, 292]                                                         */\n    /* h = exp_bin + floor(log2(pow(10, e)))                                  */\n    /*   = exp_bin + floor(log2(10) * e)                                      */\n    exp10 = -k;\n    h = exp_bin + ((exp10 * 217707) >> 16) + 1;\n    \n    pow10_table_get_sig(exp10, &pow10hi, &pow10lo);\n    pow10lo += (exp10 < POW10_SIG_TABLE_MIN_EXACT_EXP ||\n                exp10 > POW10_SIG_TABLE_MAX_EXACT_EXP);\n    vbl = round_to_odd(pow10hi, pow10lo, cbl << h);\n    vb  = round_to_odd(pow10hi, pow10lo, cb  << h);\n    vbr = round_to_odd(pow10hi, pow10lo, cbr << h);\n    \n    lower = vbl + !is_even;\n    upper = vbr - !is_even;\n    \n    s = vb / 4;\n    if (s >= 10) {\n        sp = s / 10;\n        u_inside = (lower <= 40 * sp);\n        w_inside = (upper >= 40 * sp + 40);\n        if (u_inside != w_inside) {\n            *sig_dec = sp + w_inside;\n            *exp_dec = k + 1;\n            return;\n        }\n    }\n    \n    u_inside = (lower <= 4 * s);\n    w_inside = (upper >= 4 * s + 4);\n    \n    mid = 4 * s + 2;\n    round_up = (vb > mid) || (vb == mid && (s & 1) != 0);\n    \n    *sig_dec = s + ((u_inside != w_inside) ? w_inside : round_up);\n    *exp_dec = k;\n}\n\n/**\n Write a double number (requires 32 bytes buffer).\n \n We follows the ECMAScript specification to print floating point numbers,\n but with the following changes:\n 1. Keep the negative sign of 0.0 to preserve input information.\n 2. Keep decimal point to indicate the number is floating point.\n 3. Remove positive sign of exponent part.\n */\nstatic_noinline u8 *write_f64_raw(u8 *buf, u64 raw, yyjson_write_flag flg) {\n    u64 sig_bin, sig_dec, sig_raw;\n    i32 exp_bin, exp_dec, sig_len, dot_pos, i, max;\n    u32 exp_raw, hi, lo;\n    u8 *hdr, *num_hdr, *num_end, *dot_end;\n    bool sign;\n    \n    /* decode raw bytes from IEEE-754 double format. */\n    sign = (bool)(raw >> (F64_BITS - 1));\n    sig_raw = raw & F64_SIG_MASK;\n    exp_raw = (u32)((raw & F64_EXP_MASK) >> F64_SIG_BITS);\n    \n    /* return inf and nan */\n    if (unlikely(exp_raw == ((u32)1 << F64_EXP_BITS) - 1)) {\n        if (flg & YYJSON_WRITE_INF_AND_NAN_AS_NULL) {\n            byte_copy_4(buf, \"null\");\n            return buf + 4;\n        } else if (flg & YYJSON_WRITE_ALLOW_INF_AND_NAN) {\n            if (sig_raw == 0) {\n                buf[0] = '-';\n                buf += sign;\n                byte_copy_8(buf, \"Infinity\");\n                buf += 8;\n                return buf;\n            } else {\n                byte_copy_4(buf, \"NaN\");\n                return buf + 3;\n            }\n        } else {\n            return NULL;\n        }\n    }\n    \n    /* add sign for all finite double value, including 0.0 and inf */\n    buf[0] = '-';\n    buf += sign;\n    hdr = buf;\n    \n    /* return zero */\n    if ((raw << 1) == 0) {\n        byte_copy_4(buf, \"0.0\");\n        buf += 3;\n        return buf;\n    }\n    \n    if (likely(exp_raw != 0)) {\n        /* normal number */\n        sig_bin = sig_raw | ((u64)1 << F64_SIG_BITS);\n        exp_bin = (i32)exp_raw - F64_EXP_BIAS - F64_SIG_BITS;\n        \n        /* fast path for small integer number without fraction */\n        if (-F64_SIG_BITS <= exp_bin && exp_bin <= 0) {\n            if (u64_tz_bits(sig_bin) >= (u32)-exp_bin) {\n                /* number is integer in range 1 to 0x1FFFFFFFFFFFFF */\n                sig_dec = sig_bin >> -exp_bin;\n                buf = write_u64_len_1_to_16(sig_dec, buf);\n                byte_copy_2(buf, \".0\");\n                buf += 2;\n                return buf;\n            }\n        }\n        \n        /* binary to decimal */\n        f64_bin_to_dec(sig_raw, exp_raw, sig_bin, exp_bin, &sig_dec, &exp_dec);\n        \n        /* the sig length is 15 to 17 */\n        sig_len = 17;\n        sig_len -= (sig_dec < (u64)100000000 * 100000000);\n        sig_len -= (sig_dec < (u64)100000000 * 10000000);\n        \n        /* the decimal point position relative to the first digit */\n        dot_pos = sig_len + exp_dec;\n        \n        if (-6 < dot_pos && dot_pos <= 21) {\n            /* no need to write exponent part */\n            if (dot_pos <= 0) {\n                /* dot before first digit */\n                /* such as 0.1234, 0.000001234 */\n                num_hdr = hdr + (2 - dot_pos);\n                num_end = write_u64_len_15_to_17_trim(num_hdr, sig_dec);\n                hdr[0] = '0';\n                hdr[1] = '.';\n                hdr += 2;\n                max = -dot_pos;\n                for (i = 0; i < max; i++) hdr[i] = '0';\n                return num_end;\n            } else {\n                /* dot after first digit */\n                /* such as 1.234, 1234.0, 123400000000000000000.0 */\n                memset(hdr +  0, '0', 8);\n                memset(hdr +  8, '0', 8);\n                memset(hdr + 16, '0', 8);\n                num_hdr = hdr + 1;\n                num_end = write_u64_len_15_to_17_trim(num_hdr, sig_dec);\n                for (i = 0; i < dot_pos; i++) hdr[i] = hdr[i + 1];\n                hdr[dot_pos] = '.';\n                dot_end = hdr + dot_pos + 2;\n                return dot_end < num_end ? num_end : dot_end;\n            }\n        } else {\n            /* write with scientific notation */\n            /* such as 1.234e56 */\n            u8 *end = write_u64_len_15_to_17_trim(buf + 1, sig_dec);\n            end -= (end == buf + 2); /* remove '.0', e.g. 2.0e34 -> 2e34 */\n            exp_dec += sig_len - 1;\n            hdr[0] = hdr[1];\n            hdr[1] = '.';\n            end[0] = 'e';\n            buf = write_f64_exp(exp_dec, end + 1);\n            return buf;\n        }\n        \n    } else {\n        /* subnormal number */\n        sig_bin = sig_raw;\n        exp_bin = 1 - F64_EXP_BIAS - F64_SIG_BITS;\n        \n        /* binary to decimal */\n        f64_bin_to_dec(sig_raw, exp_raw, sig_bin, exp_bin, &sig_dec, &exp_dec);\n        \n        /* write significand part */\n        buf = write_u64_len_1_to_17(sig_dec, buf + 1);\n        hdr[0] = hdr[1];\n        hdr[1] = '.';\n        do {\n            buf--;\n            exp_dec++;\n        } while (*buf == '0');\n        exp_dec += (i32)(buf - hdr - 2);\n        buf += (*buf != '.');\n        buf[0] = 'e';\n        buf++;\n        \n        /* write exponent part */\n        buf[0] = '-';\n        buf++;\n        exp_dec = -exp_dec;\n        hi = ((u32)exp_dec * 656) >> 16; /* exp / 100 */\n        lo = (u32)exp_dec - hi * 100; /* exp % 100 */\n        buf[0] = (u8)((u8)hi + (u8)'0');\n        *(v16 *)&buf[1] = *(const v16 *)(digit_table + (lo * 2));\n        buf += 3;\n        return buf;\n    }\n}\n\n#else /* FP_WRITER */\n\n/** Write a double number (requires 32 bytes buffer). */\nstatic_noinline u8 *write_f64_raw(u8 *buf, u64 raw, yyjson_write_flag flg) {\n    /*\n     For IEEE 754, `DBL_DECIMAL_DIG` is 17 for round-trip.\n     For non-IEEE formats, 17 is used to avoid buffer overflow,\n     round-trip is not guaranteed.\n     */\n#if defined(DBL_DECIMAL_DIG) && DBL_DECIMAL_DIG != 17\n    int dig = DBL_DECIMAL_DIG > 17 ? 17 : DBL_DECIMAL_DIG;\n#else\n    int dig = 17;\n#endif\n    \n    /*\n     The snprintf() function is locale-dependent. For currently known locales,\n     (en, zh, ja, ko, am, he, hi) use '.' as the decimal point, while other\n     locales use ',' as the decimal point. we need to replace ',' with '.'\n     to avoid the locale setting.\n     */\n    f64 val = f64_from_raw(raw);\n#if YYJSON_MSC_VER >= 1400\n    int len = sprintf_s((char *)buf, 32, \"%.*g\", dig, val);\n#elif defined(snprintf) || (YYJSON_STDC_VER >= 199901L)\n    int len = snprintf((char *)buf, 32, \"%.*g\", dig, val);\n#else\n    int len = sprintf((char *)buf, \"%.*g\", dig, val);\n#endif\n    \n    u8 *cur = buf;\n    if (unlikely(len < 1)) return NULL;\n    cur += (*cur == '-');\n    if (unlikely(!digi_is_digit(*cur))) {\n        /* nan, inf, or bad output */\n        if (flg & YYJSON_WRITE_INF_AND_NAN_AS_NULL) {\n            byte_copy_4(buf, \"null\");\n            return buf + 4;\n        } else if (flg & YYJSON_WRITE_ALLOW_INF_AND_NAN) {\n            if (*cur == 'i') {\n                byte_copy_8(cur, \"Infinity\");\n                cur += 8;\n                return cur;\n            } else if (*cur == 'n') {\n                byte_copy_4(buf, \"NaN\");\n                return buf + 3;\n            }\n        }\n        return NULL;\n    } else {\n        /* finite number */\n        int i = 0;\n        bool fp = false;\n        for (; i < len; i++) {\n            if (buf[i] == ',') buf[i] = '.';\n            if (digi_is_fp((u8)buf[i])) fp = true;\n        }\n        if (!fp) {\n            buf[len++] = '.';\n            buf[len++] = '0';\n        }\n    }\n    return buf + len;\n}\n\n#endif /* FP_WRITER */\n\n/** Write a JSON number (requires 32 bytes buffer). */\nstatic_inline u8 *write_number(u8 *cur, yyjson_val *val,\n                               yyjson_write_flag flg) {\n    if (val->tag & YYJSON_SUBTYPE_REAL) {\n        u64 raw = val->uni.u64;\n        return write_f64_raw(cur, raw, flg);\n    } else {\n        u64 pos = val->uni.u64;\n        u64 neg = ~pos + 1;\n        usize sgn = ((val->tag & YYJSON_SUBTYPE_SINT) > 0) & ((i64)pos < 0);\n        *cur = '-';\n        return write_u64(sgn ? neg : pos, cur + sgn);\n    }\n}\n\n\n\n/*==============================================================================\n * String Writer\n *============================================================================*/\n\n/** Character encode type, if (type > CHAR_ENC_ERR_1) bytes = type / 2; */\ntypedef u8 char_enc_type;\n#define CHAR_ENC_CPY_1  0 /* 1-byte UTF-8, copy. */\n#define CHAR_ENC_ERR_1  1 /* 1-byte UTF-8, error. */\n#define CHAR_ENC_ESC_A  2 /* 1-byte ASCII, escaped as '\\x'. */\n#define CHAR_ENC_ESC_1  3 /* 1-byte UTF-8, escaped as '\\uXXXX'. */\n#define CHAR_ENC_CPY_2  4 /* 2-byte UTF-8, copy. */\n#define CHAR_ENC_ESC_2  5 /* 2-byte UTF-8, escaped as '\\uXXXX'. */\n#define CHAR_ENC_CPY_3  6 /* 3-byte UTF-8, copy. */\n#define CHAR_ENC_ESC_3  7 /* 3-byte UTF-8, escaped as '\\uXXXX'. */\n#define CHAR_ENC_CPY_4  8 /* 4-byte UTF-8, copy. */\n#define CHAR_ENC_ESC_4  9 /* 4-byte UTF-8, escaped as '\\uXXXX\\uXXXX'. */\n\n/** Character encode type table: don't escape unicode, don't escape '/'.\n    (generate with misc/make_tables.c) */\nstatic const char_enc_type enc_table_cpy[256] = {\n    3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 3,\n    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n    0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n    8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1\n};\n\n/** Character encode type table: don't escape unicode, escape '/'.\n    (generate with misc/make_tables.c) */\nstatic const char_enc_type enc_table_cpy_slash[256] = {\n    3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 3,\n    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n    0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n    8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1\n};\n\n/** Character encode type table: escape unicode, don't escape '/'.\n    (generate with misc/make_tables.c) */\nstatic const char_enc_type enc_table_esc[256] = {\n    3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 3,\n    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n    0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n    9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1\n};\n\n/** Character encode type table: escape unicode, escape '/'.\n    (generate with misc/make_tables.c) */\nstatic const char_enc_type enc_table_esc_slash[256] = {\n    3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 3,\n    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n    0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n    9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1\n};\n\n/** Escaped hex character table: [\"00\" \"01\" \"02\" ... \"FD\" \"FE\" \"FF\"].\n    (generate with misc/make_tables.c) */\nyyjson_align(2)\nstatic const u8 esc_hex_char_table[512] = {\n    '0', '0', '0', '1', '0', '2', '0', '3',\n    '0', '4', '0', '5', '0', '6', '0', '7',\n    '0', '8', '0', '9', '0', 'A', '0', 'B',\n    '0', 'C', '0', 'D', '0', 'E', '0', 'F',\n    '1', '0', '1', '1', '1', '2', '1', '3',\n    '1', '4', '1', '5', '1', '6', '1', '7',\n    '1', '8', '1', '9', '1', 'A', '1', 'B',\n    '1', 'C', '1', 'D', '1', 'E', '1', 'F',\n    '2', '0', '2', '1', '2', '2', '2', '3',\n    '2', '4', '2', '5', '2', '6', '2', '7',\n    '2', '8', '2', '9', '2', 'A', '2', 'B',\n    '2', 'C', '2', 'D', '2', 'E', '2', 'F',\n    '3', '0', '3', '1', '3', '2', '3', '3',\n    '3', '4', '3', '5', '3', '6', '3', '7',\n    '3', '8', '3', '9', '3', 'A', '3', 'B',\n    '3', 'C', '3', 'D', '3', 'E', '3', 'F',\n    '4', '0', '4', '1', '4', '2', '4', '3',\n    '4', '4', '4', '5', '4', '6', '4', '7',\n    '4', '8', '4', '9', '4', 'A', '4', 'B',\n    '4', 'C', '4', 'D', '4', 'E', '4', 'F',\n    '5', '0', '5', '1', '5', '2', '5', '3',\n    '5', '4', '5', '5', '5', '6', '5', '7',\n    '5', '8', '5', '9', '5', 'A', '5', 'B',\n    '5', 'C', '5', 'D', '5', 'E', '5', 'F',\n    '6', '0', '6', '1', '6', '2', '6', '3',\n    '6', '4', '6', '5', '6', '6', '6', '7',\n    '6', '8', '6', '9', '6', 'A', '6', 'B',\n    '6', 'C', '6', 'D', '6', 'E', '6', 'F',\n    '7', '0', '7', '1', '7', '2', '7', '3',\n    '7', '4', '7', '5', '7', '6', '7', '7',\n    '7', '8', '7', '9', '7', 'A', '7', 'B',\n    '7', 'C', '7', 'D', '7', 'E', '7', 'F',\n    '8', '0', '8', '1', '8', '2', '8', '3',\n    '8', '4', '8', '5', '8', '6', '8', '7',\n    '8', '8', '8', '9', '8', 'A', '8', 'B',\n    '8', 'C', '8', 'D', '8', 'E', '8', 'F',\n    '9', '0', '9', '1', '9', '2', '9', '3',\n    '9', '4', '9', '5', '9', '6', '9', '7',\n    '9', '8', '9', '9', '9', 'A', '9', 'B',\n    '9', 'C', '9', 'D', '9', 'E', '9', 'F',\n    'A', '0', 'A', '1', 'A', '2', 'A', '3',\n    'A', '4', 'A', '5', 'A', '6', 'A', '7',\n    'A', '8', 'A', '9', 'A', 'A', 'A', 'B',\n    'A', 'C', 'A', 'D', 'A', 'E', 'A', 'F',\n    'B', '0', 'B', '1', 'B', '2', 'B', '3',\n    'B', '4', 'B', '5', 'B', '6', 'B', '7',\n    'B', '8', 'B', '9', 'B', 'A', 'B', 'B',\n    'B', 'C', 'B', 'D', 'B', 'E', 'B', 'F',\n    'C', '0', 'C', '1', 'C', '2', 'C', '3',\n    'C', '4', 'C', '5', 'C', '6', 'C', '7',\n    'C', '8', 'C', '9', 'C', 'A', 'C', 'B',\n    'C', 'C', 'C', 'D', 'C', 'E', 'C', 'F',\n    'D', '0', 'D', '1', 'D', '2', 'D', '3',\n    'D', '4', 'D', '5', 'D', '6', 'D', '7',\n    'D', '8', 'D', '9', 'D', 'A', 'D', 'B',\n    'D', 'C', 'D', 'D', 'D', 'E', 'D', 'F',\n    'E', '0', 'E', '1', 'E', '2', 'E', '3',\n    'E', '4', 'E', '5', 'E', '6', 'E', '7',\n    'E', '8', 'E', '9', 'E', 'A', 'E', 'B',\n    'E', 'C', 'E', 'D', 'E', 'E', 'E', 'F',\n    'F', '0', 'F', '1', 'F', '2', 'F', '3',\n    'F', '4', 'F', '5', 'F', '6', 'F', '7',\n    'F', '8', 'F', '9', 'F', 'A', 'F', 'B',\n    'F', 'C', 'F', 'D', 'F', 'E', 'F', 'F'\n};\n\n/** Escaped single character table. (generate with misc/make_tables.c) */\nyyjson_align(2)\nstatic const u8 esc_single_char_table[512] = {\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    '\\\\', 'b', '\\\\', 't', '\\\\', 'n', ' ', ' ',\n    '\\\\', 'f', '\\\\', 'r', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', '\\\\', '\"', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', '\\\\', '/',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    '\\\\', '\\\\', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '\n};\n\n/** Returns the encode table with options. */\nstatic_inline const char_enc_type *get_enc_table_with_flag(\n    yyjson_read_flag flg) {\n    if (unlikely(flg & YYJSON_WRITE_ESCAPE_UNICODE)) {\n        if (unlikely(flg & YYJSON_WRITE_ESCAPE_SLASHES)) {\n            return enc_table_esc_slash;\n        } else {\n            return enc_table_esc;\n        }\n    } else {\n        if (unlikely(flg & YYJSON_WRITE_ESCAPE_SLASHES)) {\n            return enc_table_cpy_slash;\n        } else {\n            return enc_table_cpy;\n        }\n    }\n}\n\n/** Write raw string. */\nstatic_inline u8 *write_raw(u8 *cur, const u8 *raw, usize raw_len) {\n    memcpy(cur, raw, raw_len);\n    return cur + raw_len;\n}\n\n/**\n Write UTF-8 string (requires len * 6 + 2 bytes buffer).\n @param cur Buffer cursor.\n @param esc Escape unicode.\n @param inv Allow invalid unicode.\n @param str A UTF-8 string, null-terminator is not required.\n @param str_len Length of string in bytes.\n @param enc_table Encode type table for character.\n @return The buffer cursor after string, or NULL on invalid unicode.\n */\nstatic_inline u8 *write_string(u8 *cur, bool esc, bool inv,\n                               const u8 *str, usize str_len,\n                               const char_enc_type *enc_table) {\n    \n    /* UTF-8 character mask and pattern, see `read_string()` for details. */\n#if YYJSON_ENDIAN == YYJSON_BIG_ENDIAN\n    const u16 b2_mask = 0xE0C0UL;\n    const u16 b2_patt = 0xC080UL;\n    const u16 b2_requ = 0x1E00UL;\n    const u32 b3_mask = 0xF0C0C000UL;\n    const u32 b3_patt = 0xE0808000UL;\n    const u32 b3_requ = 0x0F200000UL;\n    const u32 b3_erro = 0x0D200000UL;\n    const u32 b4_mask = 0xF8C0C0C0UL;\n    const u32 b4_patt = 0xF0808080UL;\n    const u32 b4_requ = 0x07300000UL;\n    const u32 b4_err0 = 0x04000000UL;\n    const u32 b4_err1 = 0x03300000UL;\n#elif YYJSON_ENDIAN == YYJSON_LITTLE_ENDIAN\n    const u16 b2_mask = 0xC0E0UL;\n    const u16 b2_patt = 0x80C0UL;\n    const u16 b2_requ = 0x001EUL;\n    const u32 b3_mask = 0x00C0C0F0UL;\n    const u32 b3_patt = 0x008080E0UL;\n    const u32 b3_requ = 0x0000200FUL;\n    const u32 b3_erro = 0x0000200DUL;\n    const u32 b4_mask = 0xC0C0C0F8UL;\n    const u32 b4_patt = 0x808080F0UL;\n    const u32 b4_requ = 0x00003007UL;\n    const u32 b4_err0 = 0x00000004UL;\n    const u32 b4_err1 = 0x00003003UL;\n#else\n    v16_uni b2_mask_uni = {{ 0xE0, 0xC0 }};\n    v16_uni b2_patt_uni = {{ 0xC0, 0x80 }};\n    v16_uni b2_requ_uni = {{ 0x1E, 0x00 }};\n    v32_uni b3_mask_uni = {{ 0xF0, 0xC0, 0xC0, 0x00 }};\n    v32_uni b3_patt_uni = {{ 0xE0, 0x80, 0x80, 0x00 }};\n    v32_uni b3_requ_uni = {{ 0x0F, 0x20, 0x00, 0x00 }};\n    v32_uni b3_erro_uni = {{ 0x0D, 0x20, 0x00, 0x00 }};\n    v32_uni b4_mask_uni = {{ 0xF8, 0xC0, 0xC0, 0xC0 }};\n    v32_uni b4_patt_uni = {{ 0xF0, 0x80, 0x80, 0x80 }};\n    v32_uni b4_requ_uni = {{ 0x07, 0x30, 0x00, 0x00 }};\n    v32_uni b4_err0_uni = {{ 0x04, 0x00, 0x00, 0x00 }};\n    v32_uni b4_err1_uni = {{ 0x03, 0x30, 0x00, 0x00 }};\n    u16 b2_mask = b2_mask_uni.u;\n    u16 b2_patt = b2_patt_uni.u;\n    u16 b2_requ = b2_requ_uni.u;\n    u32 b3_mask = b3_mask_uni.u;\n    u32 b3_patt = b3_patt_uni.u;\n    u32 b3_requ = b3_requ_uni.u;\n    u32 b3_erro = b3_erro_uni.u;\n    u32 b4_mask = b4_mask_uni.u;\n    u32 b4_patt = b4_patt_uni.u;\n    u32 b4_requ = b4_requ_uni.u;\n    u32 b4_err0 = b4_err0_uni.u;\n    u32 b4_err1 = b4_err1_uni.u;\n#endif\n    \n#define is_valid_seq_2(uni) ( \\\n    ((uni & b2_mask) == b2_patt) && \\\n    ((uni & b2_requ)) \\\n)\n    \n#define is_valid_seq_3(uni) ( \\\n    ((uni & b3_mask) == b3_patt) && \\\n    ((tmp = (uni & b3_requ))) && \\\n    ((tmp != b3_erro)) \\\n)\n    \n#define is_valid_seq_4(uni) ( \\\n    ((uni & b4_mask) == b4_patt) && \\\n    ((tmp = (uni & b4_requ))) && \\\n    ((tmp & b4_err0) == 0 || (tmp & b4_err1) == 0) \\\n)\n    \n    /* The replacement character U+FFFD, used to indicate invalid character. */\n    const v32 rep = { 'F', 'F', 'F', 'D' };\n    const v32 pre = { '\\\\', 'u', '0', '0' };\n    \n    const u8 *src = str;\n    const u8 *end = str + str_len;\n    *cur++ = '\"';\n    \ncopy_ascii:\n    /*\n     Copy continuous ASCII, loop unrolling, same as the following code:\n     \n         while (end > src) (\n            if (unlikely(enc_table[*src])) break;\n            *cur++ = *src++;\n         );\n     */\n#define expr_jump(i) \\\n    if (unlikely(enc_table[src[i]])) goto stop_char_##i;\n    \n#define expr_stop(i) \\\n    stop_char_##i: \\\n    memcpy(cur, src, i); \\\n    cur += i; src += i; goto copy_utf8;\n    \n    while (end - src >= 16) {\n        repeat16_incr(expr_jump)\n        byte_copy_16(cur, src);\n        cur += 16; src += 16;\n    }\n    \n    while (end - src >= 4) {\n        repeat4_incr(expr_jump)\n        byte_copy_4(cur, src);\n        cur += 4; src += 4;\n    }\n    \n    while (end > src) {\n        expr_jump(0)\n        *cur++ = *src++;\n    }\n    \n    *cur++ = '\"';\n    return cur;\n    \n    repeat16_incr(expr_stop)\n    \n#undef expr_jump\n#undef expr_stop\n    \ncopy_utf8:\n    if (unlikely(src + 4 > end)) {\n        if (end == src) goto copy_end;\n        if (end - src < enc_table[*src] / 2) goto err_one;\n    }\n    switch (enc_table[*src]) {\n        case CHAR_ENC_CPY_1: {\n            *cur++ = *src++;\n            goto copy_ascii;\n        }\n        case CHAR_ENC_CPY_2: {\n            u16 v;\n            v = byte_load_2(src);\n            if (unlikely(!is_valid_seq_2(v))) goto err_cpy;\n            \n            byte_copy_2(cur, src);\n            cur += 2;\n            src += 2;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_CPY_3: {\n            u32 v, tmp;\n            if (likely(src + 4 <= end)) {\n                v = byte_load_4(src);\n                if (unlikely(!is_valid_seq_3(v))) goto err_cpy;\n                byte_copy_4(cur, src);\n            } else {\n                v = byte_load_3(src);\n                if (unlikely(!is_valid_seq_3(v))) goto err_cpy;\n                byte_copy_4(cur, &v);\n            }\n            cur += 3;\n            src += 3;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_CPY_4: {\n            u32 v, tmp;\n            v = byte_load_4(src);\n            if (unlikely(!is_valid_seq_4(v))) goto err_cpy;\n            \n            byte_copy_4(cur, src);\n            cur += 4;\n            src += 4;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_A: {\n            byte_move_2(cur, &esc_single_char_table[*src * 2]);\n            cur += 2;\n            src += 1;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_1: {\n            byte_copy_4(cur + 0, &pre);\n            byte_copy_2(cur + 4, &esc_hex_char_table[*src * 2]);\n            cur += 6;\n            src += 1;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_2: {\n            u16 u, v;\n            v = byte_load_2(src);\n            if (unlikely(!is_valid_seq_2(v))) goto err_esc;\n            \n            u = (u16)(((u16)(src[0] & 0x1F) << 6) |\n                      ((u16)(src[1] & 0x3F) << 0));\n            byte_copy_2(cur + 0, &pre);\n            byte_copy_2(cur + 2, &esc_hex_char_table[(u >> 8) * 2]);\n            byte_copy_2(cur + 4, &esc_hex_char_table[(u & 0xFF) * 2]);\n            cur += 6;\n            src += 2;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_3: {\n            u16 u;\n            u32 v, tmp;\n            v = byte_load_3(src);\n            if (unlikely(!is_valid_seq_3(v))) goto err_esc;\n            \n            u = (u16)(((u16)(src[0] & 0x0F) << 12) |\n                      ((u16)(src[1] & 0x3F) << 6) |\n                      ((u16)(src[2] & 0x3F) << 0));\n            byte_copy_2(cur + 0, &pre);\n            byte_copy_2(cur + 2, &esc_hex_char_table[(u >> 8) * 2]);\n            byte_copy_2(cur + 4, &esc_hex_char_table[(u & 0xFF) * 2]);\n            cur += 6;\n            src += 3;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_4: {\n            u32 hi, lo, u, v, tmp;\n            v = byte_load_4(src);\n            if (unlikely(!is_valid_seq_4(v))) goto err_esc;\n            \n            u = ((u32)(src[0] & 0x07) << 18) |\n                ((u32)(src[1] & 0x3F) << 12) |\n                ((u32)(src[2] & 0x3F) << 6) |\n                ((u32)(src[3] & 0x3F) << 0);\n            u -= 0x10000;\n            hi = (u >> 10) + 0xD800;\n            lo = (u & 0x3FF) + 0xDC00;\n            byte_copy_2(cur + 0, &pre);\n            byte_copy_2(cur + 2, &esc_hex_char_table[(hi >> 8) * 2]);\n            byte_copy_2(cur + 4, &esc_hex_char_table[(hi & 0xFF) * 2]);\n            byte_copy_2(cur + 6, &pre);\n            byte_copy_2(cur + 8, &esc_hex_char_table[(lo >> 8) * 2]);\n            byte_copy_2(cur + 10, &esc_hex_char_table[(lo & 0xFF) * 2]);\n            cur += 12;\n            src += 4;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ERR_1: {\n            goto err_one;\n        }\n        default: break;\n    }\n    \ncopy_end:\n    *cur++ = '\"';\n    return cur;\n    \nerr_one:\n    if (esc) goto err_esc;\n    else goto err_cpy;\n    \nerr_cpy:\n    if (!inv) return NULL;\n    *cur++ = *src++;\n    goto copy_utf8;\n    \nerr_esc:\n    if (!inv) return NULL;\n    byte_copy_2(cur + 0, &pre);\n    byte_copy_4(cur + 2, &rep);\n    cur += 6;\n    src += 1;\n    goto copy_utf8;\n    \n#undef is_valid_seq_2\n#undef is_valid_seq_3\n#undef is_valid_seq_4\n}\n\n\n\n/*==============================================================================\n * Writer Utilities\n *============================================================================*/\n\n/** Write null (requires 8 bytes buffer). */\nstatic_inline u8 *write_null(u8 *cur) {\n    v64 v = { 'n', 'u', 'l', 'l', ',', '\\n', 0, 0 };\n    byte_copy_8(cur, &v);\n    return cur + 4;\n}\n\n/** Write bool (requires 8 bytes buffer). */\nstatic_inline u8 *write_bool(u8 *cur, bool val) {\n    v64 v0 = { 'f', 'a', 'l', 's', 'e', ',', '\\n', 0 };\n    v64 v1 = { 't', 'r', 'u', 'e', ',', '\\n', 0, 0 };\n    if (val) {\n        byte_copy_8(cur, &v1);\n    } else {\n        byte_copy_8(cur, &v0);\n    }\n    return cur + 5 - val;\n}\n\n/** Write indent (requires level x 4 bytes buffer).\n    Param spaces should not larger than 4. */\nstatic_inline u8 *write_indent(u8 *cur, usize level, usize spaces) {\n    while (level-- > 0) {\n        byte_copy_4(cur, \"    \");\n        cur += spaces;\n    }\n    return cur;\n}\n\n/** Write data to file pointer. */\nstatic bool write_dat_to_fp(FILE *fp, u8 *dat, usize len,\n                            yyjson_write_err *err) {\n    if (fwrite(dat, len, 1, fp) != 1) {\n        err->msg = \"file writing failed\";\n        err->code = YYJSON_WRITE_ERROR_FILE_WRITE;\n        return false;\n    }\n    return true;\n}\n\n/** Write data to file. */\nstatic bool write_dat_to_file(const char *path, u8 *dat, usize len,\n                              yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    err->msg = _msg; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    if (file) fclose(file); \\\n    return false; \\\n} while (false)\n    \n    FILE *file = fopen_writeonly(path);\n    if (file == NULL) {\n        return_err(FILE_OPEN, \"file opening failed\");\n    }\n    if (fwrite(dat, len, 1, file) != 1) {\n        return_err(FILE_WRITE, \"file writing failed\");\n    }\n    if (fclose(file) != 0) {\n        file = NULL;\n        return_err(FILE_WRITE, \"file closing failed\");\n    }\n    return true;\n    \n#undef return_err\n}\n\n\n\n/*==============================================================================\n * JSON Writer Implementation\n *============================================================================*/\n\ntypedef struct yyjson_write_ctx {\n    usize tag;\n} yyjson_write_ctx;\n\nstatic_inline void yyjson_write_ctx_set(yyjson_write_ctx *ctx,\n                                        usize size, bool is_obj) {\n    ctx->tag = (size << 1) | (usize)is_obj;\n}\n\nstatic_inline void yyjson_write_ctx_get(yyjson_write_ctx *ctx,\n                                        usize *size, bool *is_obj) {\n    usize tag = ctx->tag;\n    *size = tag >> 1;\n    *is_obj = (bool)(tag & 1);\n}\n\n/** Write single JSON value. */\nstatic_inline u8 *yyjson_write_single(yyjson_val *val,\n                                      yyjson_write_flag flg,\n                                      yyjson_alc alc,\n                                      usize *dat_len,\n                                      yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    if (hdr) alc.free(alc.ctx, (void *)hdr); \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    hdr = (u8 *)alc.malloc(alc.ctx, _len); \\\n    if (!hdr) goto fail_alloc; \\\n    cur = hdr; \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    u8 *hdr = NULL, *cur;\n    usize str_len;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    \n    switch (unsafe_yyjson_get_type(val)) {\n        case YYJSON_TYPE_RAW:\n            str_len = unsafe_yyjson_get_len(val);\n            str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n            check_str_len(str_len);\n            incr_len(str_len + 1);\n            cur = write_raw(cur, str_ptr, str_len);\n            break;\n            \n        case YYJSON_TYPE_STR:\n            str_len = unsafe_yyjson_get_len(val);\n            str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n            check_str_len(str_len);\n            incr_len(str_len * 6 + 4);\n            cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n            if (unlikely(!cur)) goto fail_str;\n            break;\n            \n        case YYJSON_TYPE_NUM:\n            incr_len(32);\n            cur = write_number(cur, val, flg);\n            if (unlikely(!cur)) goto fail_num;\n            break;\n            \n        case YYJSON_TYPE_BOOL:\n            incr_len(8);\n            cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n            break;\n            \n        case YYJSON_TYPE_NULL:\n            incr_len(8);\n            cur = write_null(cur);\n            break;\n            \n        case YYJSON_TYPE_ARR:\n            incr_len(4);\n            byte_copy_2(cur, \"[]\");\n            cur += 2;\n            break;\n            \n        case YYJSON_TYPE_OBJ:\n            incr_len(4);\n            byte_copy_2(cur, \"{}\");\n            cur += 2;\n            break;\n            \n        default:\n            goto fail_type;\n    }\n    \n    *cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    memset(err, 0, sizeof(yyjson_write_err));\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef check_str_len\n#undef incr_len\n}\n\n/** Write JSON document minify.\n    The root of this document should be a non-empty container. */\nstatic_inline u8 *yyjson_write_minify(const yyjson_val *root,\n                                      const yyjson_write_flag flg,\n                                      const yyjson_alc alc,\n                                      usize *dat_len,\n                                      yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    if (hdr) alc.free(alc.ctx, hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    ext_len = (usize)(_len); \\\n    if (unlikely((u8 *)(cur + ext_len) >= (u8 *)ctx)) { \\\n        alc_inc = yyjson_max(alc_len / 2, ext_len); \\\n        alc_inc = size_align_up(alc_inc, sizeof(yyjson_write_ctx)); \\\n        if (size_add_is_overflow(alc_len, alc_inc)) goto fail_alloc; \\\n        alc_len += alc_inc; \\\n        tmp = (u8 *)alc.realloc(alc.ctx, hdr, alc_len - alc_inc, alc_len); \\\n        if (unlikely(!tmp)) goto fail_alloc; \\\n        ctx_len = (usize)(end - (u8 *)ctx); \\\n        ctx_tmp = (yyjson_write_ctx *)(void *)(tmp + (alc_len - ctx_len)); \\\n        memmove((void *)ctx_tmp, (void *)(tmp + ((u8 *)ctx - hdr)), ctx_len); \\\n        ctx = ctx_tmp; \\\n        cur = tmp + (cur - hdr); \\\n        end = tmp + alc_len; \\\n        hdr = tmp; \\\n    } \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    yyjson_val *val;\n    yyjson_type val_type;\n    usize ctn_len, ctn_len_tmp;\n    bool ctn_obj, ctn_obj_tmp, is_key;\n    u8 *hdr, *cur, *end, *tmp;\n    yyjson_write_ctx *ctx, *ctx_tmp;\n    usize alc_len, alc_inc, ctx_len, ext_len, str_len;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    \n    alc_len = root->uni.ofs / sizeof(yyjson_val);\n    alc_len = alc_len * YYJSON_WRITER_ESTIMATED_MINIFY_RATIO + 64;\n    alc_len = size_align_up(alc_len, sizeof(yyjson_write_ctx));\n    hdr = (u8 *)alc.malloc(alc.ctx, alc_len);\n    if (!hdr) goto fail_alloc;\n    cur = hdr;\n    end = hdr + alc_len;\n    ctx = (yyjson_write_ctx *)(void *)end;\n    \ndoc_begin:\n    val = constcast(yyjson_val *)root;\n    val_type = unsafe_yyjson_get_type(val);\n    ctn_obj = (val_type == YYJSON_TYPE_OBJ);\n    ctn_len = unsafe_yyjson_get_len(val) << (u8)ctn_obj;\n    *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n    val++;\n    \nval_begin:\n    val_type = unsafe_yyjson_get_type(val);\n    if (val_type == YYJSON_TYPE_STR) {\n        is_key = ((u8)ctn_obj & (u8)~ctn_len);\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len * 6 + 16);\n        cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n        if (unlikely(!cur)) goto fail_str;\n        *cur++ = is_key ? ':' : ',';\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NUM) {\n        incr_len(32);\n        cur = write_number(cur, val, flg);\n        if (unlikely(!cur)) goto fail_num;\n        *cur++ = ',';\n        goto val_end;\n    }\n    if ((val_type & (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) ==\n                    (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) {\n        ctn_len_tmp = unsafe_yyjson_get_len(val);\n        ctn_obj_tmp = (val_type == YYJSON_TYPE_OBJ);\n        incr_len(16);\n        if (unlikely(ctn_len_tmp == 0)) {\n            /* write empty container */\n            *cur++ = (u8)('[' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = (u8)(']' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = ',';\n            goto val_end;\n        } else {\n            /* push context, setup new container */\n            yyjson_write_ctx_set(--ctx, ctn_len, ctn_obj);\n            ctn_len = ctn_len_tmp << (u8)ctn_obj_tmp;\n            ctn_obj = ctn_obj_tmp;\n            *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n            val++;\n            goto val_begin;\n        }\n    }\n    if (val_type == YYJSON_TYPE_BOOL) {\n        incr_len(16);\n        cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n        cur++;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NULL) {\n        incr_len(16);\n        cur = write_null(cur);\n        cur++;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_RAW) {\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len + 2);\n        cur = write_raw(cur, str_ptr, str_len);\n        *cur++ = ',';\n        goto val_end;\n    }\n    goto fail_type;\n    \nval_end:\n    val++;\n    ctn_len--;\n    if (unlikely(ctn_len == 0)) goto ctn_end;\n    goto val_begin;\n    \nctn_end:\n    cur--;\n    *cur++ = (u8)(']' | ((u8)ctn_obj << 5));\n    *cur++ = ',';\n    if (unlikely((u8 *)ctx >= end)) goto doc_end;\n    yyjson_write_ctx_get(ctx++, &ctn_len, &ctn_obj);\n    ctn_len--;\n    if (likely(ctn_len > 0)) {\n        goto val_begin;\n    } else {\n        goto ctn_end;\n    }\n    \ndoc_end:\n    *--cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    memset(err, 0, sizeof(yyjson_write_err));\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef incr_len\n#undef check_str_len\n}\n\n/** Write JSON document pretty.\n    The root of this document should be a non-empty container. */\nstatic_inline u8 *yyjson_write_pretty(const yyjson_val *root,\n                                      const yyjson_write_flag flg,\n                                      const yyjson_alc alc,\n                                      usize *dat_len,\n                                      yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    if (hdr) alc.free(alc.ctx, hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    ext_len = (usize)(_len); \\\n    if (unlikely((u8 *)(cur + ext_len) >= (u8 *)ctx)) { \\\n        alc_inc = yyjson_max(alc_len / 2, ext_len); \\\n        alc_inc = size_align_up(alc_inc, sizeof(yyjson_write_ctx)); \\\n        if (size_add_is_overflow(alc_len, alc_inc)) goto fail_alloc; \\\n        alc_len += alc_inc; \\\n        tmp = (u8 *)alc.realloc(alc.ctx, hdr, alc_len - alc_inc, alc_len); \\\n        if (unlikely(!tmp)) goto fail_alloc; \\\n        ctx_len = (usize)(end - (u8 *)ctx); \\\n        ctx_tmp = (yyjson_write_ctx *)(void *)(tmp + (alc_len - ctx_len)); \\\n        memmove((void *)ctx_tmp, (void *)(tmp + ((u8 *)ctx - hdr)), ctx_len); \\\n        ctx = ctx_tmp; \\\n        cur = tmp + (cur - hdr); \\\n        end = tmp + alc_len; \\\n        hdr = tmp; \\\n    } \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    yyjson_val *val;\n    yyjson_type val_type;\n    usize ctn_len, ctn_len_tmp;\n    bool ctn_obj, ctn_obj_tmp, is_key, no_indent;\n    u8 *hdr, *cur, *end, *tmp;\n    yyjson_write_ctx *ctx, *ctx_tmp;\n    usize alc_len, alc_inc, ctx_len, ext_len, str_len, level;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    usize spaces = (flg & YYJSON_WRITE_PRETTY_TWO_SPACES) ? 2 : 4;\n    \n    alc_len = root->uni.ofs / sizeof(yyjson_val);\n    alc_len = alc_len * YYJSON_WRITER_ESTIMATED_PRETTY_RATIO + 64;\n    alc_len = size_align_up(alc_len, sizeof(yyjson_write_ctx));\n    hdr = (u8 *)alc.malloc(alc.ctx, alc_len);\n    if (!hdr) goto fail_alloc;\n    cur = hdr;\n    end = hdr + alc_len;\n    ctx = (yyjson_write_ctx *)(void *)end;\n    \ndoc_begin:\n    val = constcast(yyjson_val *)root;\n    val_type = unsafe_yyjson_get_type(val);\n    ctn_obj = (val_type == YYJSON_TYPE_OBJ);\n    ctn_len = unsafe_yyjson_get_len(val) << (u8)ctn_obj;\n    *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n    *cur++ = '\\n';\n    val++;\n    level = 1;\n    \nval_begin:\n    val_type = unsafe_yyjson_get_type(val);\n    if (val_type == YYJSON_TYPE_STR) {\n        is_key = (bool)((u8)ctn_obj & (u8)~ctn_len);\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len * 6 + 16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n        if (unlikely(!cur)) goto fail_str;\n        *cur++ = is_key ? ':' : ',';\n        *cur++ = is_key ? ' ' : '\\n';\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NUM) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(32 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_number(cur, val, flg);\n        if (unlikely(!cur)) goto fail_num;\n        *cur++ = ',';\n        *cur++ = '\\n';\n        goto val_end;\n    }\n    if ((val_type & (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) ==\n                    (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        ctn_len_tmp = unsafe_yyjson_get_len(val);\n        ctn_obj_tmp = (val_type == YYJSON_TYPE_OBJ);\n        if (unlikely(ctn_len_tmp == 0)) {\n            /* write empty container */\n            incr_len(16 + (no_indent ? 0 : level * 4));\n            cur = write_indent(cur, no_indent ? 0 : level, spaces);\n            *cur++ = (u8)('[' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = (u8)(']' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = ',';\n            *cur++ = '\\n';\n            goto val_end;\n        } else {\n            /* push context, setup new container */\n            incr_len(32 + (no_indent ? 0 : level * 4));\n            yyjson_write_ctx_set(--ctx, ctn_len, ctn_obj);\n            ctn_len = ctn_len_tmp << (u8)ctn_obj_tmp;\n            ctn_obj = ctn_obj_tmp;\n            cur = write_indent(cur, no_indent ? 0 : level, spaces);\n            level++;\n            *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n            *cur++ = '\\n';\n            val++;\n            goto val_begin;\n        }\n    }\n    if (val_type == YYJSON_TYPE_BOOL) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n        cur += 2;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NULL) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_null(cur);\n        cur += 2;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_RAW) {\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len + 3);\n        cur = write_raw(cur, str_ptr, str_len);\n        *cur++ = ',';\n        *cur++ = '\\n';\n        goto val_end;\n    }\n    goto fail_type;\n    \nval_end:\n    val++;\n    ctn_len--;\n    if (unlikely(ctn_len == 0)) goto ctn_end;\n    goto val_begin;\n    \nctn_end:\n    cur -= 2;\n    *cur++ = '\\n';\n    incr_len(level * 4);\n    cur = write_indent(cur, --level, spaces);\n    *cur++ = (u8)(']' | ((u8)ctn_obj << 5));\n    if (unlikely((u8 *)ctx >= end)) goto doc_end;\n    yyjson_write_ctx_get(ctx++, &ctn_len, &ctn_obj);\n    ctn_len--;\n    *cur++ = ',';\n    *cur++ = '\\n';\n    if (likely(ctn_len > 0)) {\n        goto val_begin;\n    } else {\n        goto ctn_end;\n    }\n    \ndoc_end:\n    *cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    memset(err, 0, sizeof(yyjson_write_err));\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef incr_len\n#undef check_str_len\n}\n\nchar *yyjson_val_write_opts(const yyjson_val *val,\n                            yyjson_write_flag flg,\n                            const yyjson_alc *alc_ptr,\n                            usize *dat_len,\n                            yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    usize dummy_dat_len;\n    yyjson_alc alc = alc_ptr ? *alc_ptr : YYJSON_DEFAULT_ALC;\n    yyjson_val *root = constcast(yyjson_val *)val;\n    \n    err = err ? err : &dummy_err;\n    dat_len = dat_len ? dat_len : &dummy_dat_len;\n    \n#if YYJSON_DISABLE_NON_STANDARD\n    flg &= ~YYJSON_WRITE_ALLOW_INF_AND_NAN;\n    flg &= ~YYJSON_WRITE_ALLOW_INVALID_UNICODE;\n#endif\n    \n    if (unlikely(!root)) {\n        *dat_len = 0;\n        err->msg = \"input JSON is NULL\";\n        err->code = YYJSON_READ_ERROR_INVALID_PARAMETER;\n        return NULL;\n    }\n    \n    if (!unsafe_yyjson_is_ctn(root) || unsafe_yyjson_get_len(root) == 0) {\n        return (char *)yyjson_write_single(root, flg, alc, dat_len, err);\n    } else if (flg & (YYJSON_WRITE_PRETTY | YYJSON_WRITE_PRETTY_TWO_SPACES)) {\n        return (char *)yyjson_write_pretty(root, flg, alc, dat_len, err);\n    } else {\n        return (char *)yyjson_write_minify(root, flg, alc, dat_len, err);\n    }\n}\n\nchar *yyjson_write_opts(const yyjson_doc *doc,\n                        yyjson_write_flag flg,\n                        const yyjson_alc *alc_ptr,\n                        usize *dat_len,\n                        yyjson_write_err *err) {\n    yyjson_val *root = doc ? doc->root : NULL;\n    return yyjson_val_write_opts(root, flg, alc_ptr, dat_len, err);\n}\n\nbool yyjson_val_write_file(const char *path,\n                           const yyjson_val *val,\n                           yyjson_write_flag flg,\n                           const yyjson_alc *alc_ptr,\n                           yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    u8 *dat;\n    usize dat_len = 0;\n    yyjson_val *root = constcast(yyjson_val *)val;\n    bool suc;\n    \n    alc_ptr = alc_ptr ? alc_ptr : &YYJSON_DEFAULT_ALC;\n    err = err ? err : &dummy_err;\n    if (unlikely(!path || !*path)) {\n        err->msg = \"input path is invalid\";\n        err->code = YYJSON_READ_ERROR_INVALID_PARAMETER;\n        return false;\n    }\n    \n    dat = (u8 *)yyjson_val_write_opts(root, flg, alc_ptr, &dat_len, err);\n    if (unlikely(!dat)) return false;\n    suc = write_dat_to_file(path, dat, dat_len, err);\n    alc_ptr->free(alc_ptr->ctx, dat);\n    return suc;\n}\n\nbool yyjson_val_write_fp(FILE *fp,\n                         const yyjson_val *val,\n                         yyjson_write_flag flg,\n                         const yyjson_alc *alc_ptr,\n                         yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    u8 *dat;\n    usize dat_len = 0;\n    yyjson_val *root = constcast(yyjson_val *)val;\n    bool suc;\n    \n    alc_ptr = alc_ptr ? alc_ptr : &YYJSON_DEFAULT_ALC;\n    err = err ? err : &dummy_err;\n    if (unlikely(!fp)) {\n        err->msg = \"input fp is invalid\";\n        err->code = YYJSON_READ_ERROR_INVALID_PARAMETER;\n        return false;\n    }\n    \n    dat = (u8 *)yyjson_val_write_opts(root, flg, alc_ptr, &dat_len, err);\n    if (unlikely(!dat)) return false;\n    suc = write_dat_to_fp(fp, dat, dat_len, err);\n    alc_ptr->free(alc_ptr->ctx, dat);\n    return suc;\n}\n\nbool yyjson_write_file(const char *path,\n                       const yyjson_doc *doc,\n                       yyjson_write_flag flg,\n                       const yyjson_alc *alc_ptr,\n                       yyjson_write_err *err) {\n    yyjson_val *root = doc ? doc->root : NULL;\n    return yyjson_val_write_file(path, root, flg, alc_ptr, err);\n}\n\nbool yyjson_write_fp(FILE *fp,\n                    const yyjson_doc *doc,\n                    yyjson_write_flag flg,\n                     const yyjson_alc *alc_ptr,\n                    yyjson_write_err *err) {\n    yyjson_val *root = doc ? doc->root : NULL;\n    return yyjson_val_write_fp(fp, root, flg, alc_ptr, err);\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Writer Implementation\n *============================================================================*/\n\ntypedef struct yyjson_mut_write_ctx {\n    usize tag;\n    yyjson_mut_val *ctn;\n} yyjson_mut_write_ctx;\n\nstatic_inline void yyjson_mut_write_ctx_set(yyjson_mut_write_ctx *ctx,\n                                            yyjson_mut_val *ctn,\n                                            usize size, bool is_obj) {\n    ctx->tag = (size << 1) | (usize)is_obj;\n    ctx->ctn = ctn;\n}\n\nstatic_inline void yyjson_mut_write_ctx_get(yyjson_mut_write_ctx *ctx,\n                                            yyjson_mut_val **ctn,\n                                            usize *size, bool *is_obj) {\n    usize tag = ctx->tag;\n    *size = tag >> 1;\n    *is_obj = (bool)(tag & 1);\n    *ctn = ctx->ctn;\n}\n\n/** Get the estimated number of values for the mutable JSON document. */\nstatic_inline usize yyjson_mut_doc_estimated_val_num(\n    const yyjson_mut_doc *doc) {\n    usize sum = 0;\n    yyjson_val_chunk *chunk = doc->val_pool.chunks;\n    while (chunk) {\n        sum += chunk->chunk_size / sizeof(yyjson_mut_val) - 1;\n        if (chunk == doc->val_pool.chunks) {\n            sum -= (usize)(doc->val_pool.end - doc->val_pool.cur);\n        }\n        chunk = chunk->next;\n    }\n    return sum;\n}\n\n/** Write single JSON value. */\nstatic_inline u8 *yyjson_mut_write_single(yyjson_mut_val *val,\n                                          yyjson_write_flag flg,\n                                          yyjson_alc alc,\n                                          usize *dat_len,\n                                          yyjson_write_err *err) {\n    return yyjson_write_single((yyjson_val *)val, flg, alc, dat_len, err);\n}\n\n/** Write JSON document minify.\n    The root of this document should be a non-empty container. */\nstatic_inline u8 *yyjson_mut_write_minify(const yyjson_mut_val *root,\n                                          usize estimated_val_num,\n                                          yyjson_write_flag flg,\n                                          yyjson_alc alc,\n                                          usize *dat_len,\n                                          yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    if (hdr) alc.free(alc.ctx, hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    ext_len = (usize)(_len); \\\n    if (unlikely((u8 *)(cur + ext_len) >= (u8 *)ctx)) { \\\n        alc_inc = yyjson_max(alc_len / 2, ext_len); \\\n        alc_inc = size_align_up(alc_inc, sizeof(yyjson_mut_write_ctx)); \\\n        if (size_add_is_overflow(alc_len, alc_inc)) goto fail_alloc; \\\n        alc_len += alc_inc; \\\n        tmp = (u8 *)alc.realloc(alc.ctx, hdr, alc_len - alc_inc, alc_len); \\\n        if (unlikely(!tmp)) goto fail_alloc; \\\n        ctx_len = (usize)(end - (u8 *)ctx); \\\n        ctx_tmp = (yyjson_mut_write_ctx *)(void *)(tmp + (alc_len - ctx_len)); \\\n        memmove((void *)ctx_tmp, (void *)(tmp + ((u8 *)ctx - hdr)), ctx_len); \\\n        ctx = ctx_tmp; \\\n        cur = tmp + (cur - hdr); \\\n        end = tmp + alc_len; \\\n        hdr = tmp; \\\n    } \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    yyjson_mut_val *val, *ctn;\n    yyjson_type val_type;\n    usize ctn_len, ctn_len_tmp;\n    bool ctn_obj, ctn_obj_tmp, is_key;\n    u8 *hdr, *cur, *end, *tmp;\n    yyjson_mut_write_ctx *ctx, *ctx_tmp;\n    usize alc_len, alc_inc, ctx_len, ext_len, str_len;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    \n    alc_len = estimated_val_num * YYJSON_WRITER_ESTIMATED_MINIFY_RATIO + 64;\n    alc_len = size_align_up(alc_len, sizeof(yyjson_mut_write_ctx));\n    hdr = (u8 *)alc.malloc(alc.ctx, alc_len);\n    if (!hdr) goto fail_alloc;\n    cur = hdr;\n    end = hdr + alc_len;\n    ctx = (yyjson_mut_write_ctx *)(void *)end;\n    \ndoc_begin:\n    val = constcast(yyjson_mut_val *)root;\n    val_type = unsafe_yyjson_get_type(val);\n    ctn_obj = (val_type == YYJSON_TYPE_OBJ);\n    ctn_len = unsafe_yyjson_get_len(val) << (u8)ctn_obj;\n    *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n    ctn = val;\n    val = (yyjson_mut_val *)val->uni.ptr; /* tail */\n    val = ctn_obj ? val->next->next : val->next;\n    \nval_begin:\n    val_type = unsafe_yyjson_get_type(val);\n    if (val_type == YYJSON_TYPE_STR) {\n        is_key = ((u8)ctn_obj & (u8)~ctn_len);\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len * 6 + 16);\n        cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n        if (unlikely(!cur)) goto fail_str;\n        *cur++ = is_key ? ':' : ',';\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NUM) {\n        incr_len(32);\n        cur = write_number(cur, (yyjson_val *)val, flg);\n        if (unlikely(!cur)) goto fail_num;\n        *cur++ = ',';\n        goto val_end;\n    }\n    if ((val_type & (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) ==\n                    (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) {\n        ctn_len_tmp = unsafe_yyjson_get_len(val);\n        ctn_obj_tmp = (val_type == YYJSON_TYPE_OBJ);\n        incr_len(16);\n        if (unlikely(ctn_len_tmp == 0)) {\n            /* write empty container */\n            *cur++ = (u8)('[' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = (u8)(']' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = ',';\n            goto val_end;\n        } else {\n            /* push context, setup new container */\n            yyjson_mut_write_ctx_set(--ctx, ctn, ctn_len, ctn_obj);\n            ctn_len = ctn_len_tmp << (u8)ctn_obj_tmp;\n            ctn_obj = ctn_obj_tmp;\n            *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n            ctn = val;\n            val = (yyjson_mut_val *)ctn->uni.ptr; /* tail */\n            val = ctn_obj ? val->next->next : val->next;\n            goto val_begin;\n        }\n    }\n    if (val_type == YYJSON_TYPE_BOOL) {\n        incr_len(16);\n        cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n        cur++;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NULL) {\n        incr_len(16);\n        cur = write_null(cur);\n        cur++;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_RAW) {\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len + 2);\n        cur = write_raw(cur, str_ptr, str_len);\n        *cur++ = ',';\n        goto val_end;\n    }\n    goto fail_type;\n    \nval_end:\n    ctn_len--;\n    if (unlikely(ctn_len == 0)) goto ctn_end;\n    val = val->next;\n    goto val_begin;\n    \nctn_end:\n    cur--;\n    *cur++ = (u8)(']' | ((u8)ctn_obj << 5));\n    *cur++ = ',';\n    if (unlikely((u8 *)ctx >= end)) goto doc_end;\n    val = ctn->next;\n    yyjson_mut_write_ctx_get(ctx++, &ctn, &ctn_len, &ctn_obj);\n    ctn_len--;\n    if (likely(ctn_len > 0)) {\n        goto val_begin;\n    } else {\n        goto ctn_end;\n    }\n    \ndoc_end:\n    *--cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    err->code = YYJSON_WRITE_SUCCESS;\n    err->msg = \"success\";\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef incr_len\n#undef check_str_len\n}\n\n/** Write JSON document pretty.\n    The root of this document should be a non-empty container. */\nstatic_inline u8 *yyjson_mut_write_pretty(const yyjson_mut_val *root,\n                                          usize estimated_val_num,\n                                          yyjson_write_flag flg,\n                                          yyjson_alc alc,\n                                          usize *dat_len,\n                                          yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    if (hdr) alc.free(alc.ctx, hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    ext_len = (usize)(_len); \\\n    if (unlikely((u8 *)(cur + ext_len) >= (u8 *)ctx)) { \\\n        alc_inc = yyjson_max(alc_len / 2, ext_len); \\\n        alc_inc = size_align_up(alc_inc, sizeof(yyjson_mut_write_ctx)); \\\n        if (size_add_is_overflow(alc_len, alc_inc)) goto fail_alloc; \\\n        alc_len += alc_inc; \\\n        tmp = (u8 *)alc.realloc(alc.ctx, hdr, alc_len - alc_inc, alc_len); \\\n        if (unlikely(!tmp)) goto fail_alloc; \\\n        ctx_len = (usize)(end - (u8 *)ctx); \\\n        ctx_tmp = (yyjson_mut_write_ctx *)(void *)(tmp + (alc_len - ctx_len)); \\\n        memmove((void *)ctx_tmp, (void *)(tmp + ((u8 *)ctx - hdr)), ctx_len); \\\n        ctx = ctx_tmp; \\\n        cur = tmp + (cur - hdr); \\\n        end = tmp + alc_len; \\\n        hdr = tmp; \\\n    } \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    yyjson_mut_val *val, *ctn;\n    yyjson_type val_type;\n    usize ctn_len, ctn_len_tmp;\n    bool ctn_obj, ctn_obj_tmp, is_key, no_indent;\n    u8 *hdr, *cur, *end, *tmp;\n    yyjson_mut_write_ctx *ctx, *ctx_tmp;\n    usize alc_len, alc_inc, ctx_len, ext_len, str_len, level;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    usize spaces = (flg & YYJSON_WRITE_PRETTY_TWO_SPACES) ? 2 : 4;\n    \n    alc_len = estimated_val_num * YYJSON_WRITER_ESTIMATED_PRETTY_RATIO + 64;\n    alc_len = size_align_up(alc_len, sizeof(yyjson_mut_write_ctx));\n    hdr = (u8 *)alc.malloc(alc.ctx, alc_len);\n    if (!hdr) goto fail_alloc;\n    cur = hdr;\n    end = hdr + alc_len;\n    ctx = (yyjson_mut_write_ctx *)(void *)end;\n    \ndoc_begin:\n    val = constcast(yyjson_mut_val *)root;\n    val_type = unsafe_yyjson_get_type(val);\n    ctn_obj = (val_type == YYJSON_TYPE_OBJ);\n    ctn_len = unsafe_yyjson_get_len(val) << (u8)ctn_obj;\n    *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n    *cur++ = '\\n';\n    ctn = val;\n    val = (yyjson_mut_val *)val->uni.ptr; /* tail */\n    val = ctn_obj ? val->next->next : val->next;\n    level = 1;\n    \nval_begin:\n    val_type = unsafe_yyjson_get_type(val);\n    if (val_type == YYJSON_TYPE_STR) {\n        is_key = (bool)((u8)ctn_obj & (u8)~ctn_len);\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len * 6 + 16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n        if (unlikely(!cur)) goto fail_str;\n        *cur++ = is_key ? ':' : ',';\n        *cur++ = is_key ? ' ' : '\\n';\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NUM) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(32 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_number(cur, (yyjson_val *)val, flg);\n        if (unlikely(!cur)) goto fail_num;\n        *cur++ = ',';\n        *cur++ = '\\n';\n        goto val_end;\n    }\n    if ((val_type & (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) ==\n                    (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        ctn_len_tmp = unsafe_yyjson_get_len(val);\n        ctn_obj_tmp = (val_type == YYJSON_TYPE_OBJ);\n        if (unlikely(ctn_len_tmp == 0)) {\n            /* write empty container */\n            incr_len(16 + (no_indent ? 0 : level * 4));\n            cur = write_indent(cur, no_indent ? 0 : level, spaces);\n            *cur++ = (u8)('[' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = (u8)(']' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = ',';\n            *cur++ = '\\n';\n            goto val_end;\n        } else {\n            /* push context, setup new container */\n            incr_len(32 + (no_indent ? 0 : level * 4));\n            yyjson_mut_write_ctx_set(--ctx, ctn, ctn_len, ctn_obj);\n            ctn_len = ctn_len_tmp << (u8)ctn_obj_tmp;\n            ctn_obj = ctn_obj_tmp;\n            cur = write_indent(cur, no_indent ? 0 : level, spaces);\n            level++;\n            *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n            *cur++ = '\\n';\n            ctn = val;\n            val = (yyjson_mut_val *)ctn->uni.ptr; /* tail */\n            val = ctn_obj ? val->next->next : val->next;\n            goto val_begin;\n        }\n    }\n    if (val_type == YYJSON_TYPE_BOOL) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n        cur += 2;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NULL) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_null(cur);\n        cur += 2;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_RAW) {\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len + 3);\n        cur = write_raw(cur, str_ptr, str_len);\n        *cur++ = ',';\n        *cur++ = '\\n';\n        goto val_end;\n    }\n    goto fail_type;\n    \nval_end:\n    ctn_len--;\n    if (unlikely(ctn_len == 0)) goto ctn_end;\n    val = val->next;\n    goto val_begin;\n    \nctn_end:\n    cur -= 2;\n    *cur++ = '\\n';\n    incr_len(level * 4);\n    cur = write_indent(cur, --level, spaces);\n    *cur++ = (u8)(']' | ((u8)ctn_obj << 5));\n    if (unlikely((u8 *)ctx >= end)) goto doc_end;\n    val = ctn->next;\n    yyjson_mut_write_ctx_get(ctx++, &ctn, &ctn_len, &ctn_obj);\n    ctn_len--;\n    *cur++ = ',';\n    *cur++ = '\\n';\n    if (likely(ctn_len > 0)) {\n        goto val_begin;\n    } else {\n        goto ctn_end;\n    }\n    \ndoc_end:\n    *cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    err->code = YYJSON_WRITE_SUCCESS;\n    err->msg = \"success\";\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef incr_len\n#undef check_str_len\n}\n\nstatic char *yyjson_mut_write_opts_impl(const yyjson_mut_val *val,\n                                        usize estimated_val_num,\n                                        yyjson_write_flag flg,\n                                        const yyjson_alc *alc_ptr,\n                                        usize *dat_len,\n                                        yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    usize dummy_dat_len;\n    yyjson_alc alc = alc_ptr ? *alc_ptr : YYJSON_DEFAULT_ALC;\n    yyjson_mut_val *root = constcast(yyjson_mut_val *)val;\n    \n    err = err ? err : &dummy_err;\n    dat_len = dat_len ? dat_len : &dummy_dat_len;\n    \n#if YYJSON_DISABLE_NON_STANDARD\n    flg &= ~YYJSON_WRITE_ALLOW_INF_AND_NAN;\n    flg &= ~YYJSON_WRITE_ALLOW_INVALID_UNICODE;\n#endif\n    \n    if (unlikely(!root)) {\n        *dat_len = 0;\n        err->msg = \"input JSON is NULL\";\n        err->code = YYJSON_WRITE_ERROR_INVALID_PARAMETER;\n        return NULL;\n    }\n    \n    if (!unsafe_yyjson_is_ctn(root) || unsafe_yyjson_get_len(root) == 0) {\n        return (char *)yyjson_mut_write_single(root, flg, alc, dat_len, err);\n    } else if (flg & (YYJSON_WRITE_PRETTY | YYJSON_WRITE_PRETTY_TWO_SPACES)) {\n        return (char *)yyjson_mut_write_pretty(root, estimated_val_num,\n                                               flg, alc, dat_len, err);\n    } else {\n        return (char *)yyjson_mut_write_minify(root, estimated_val_num,\n                                               flg, alc, dat_len, err);\n    }\n}\n\nchar *yyjson_mut_val_write_opts(const yyjson_mut_val *val,\n                                yyjson_write_flag flg,\n                                const yyjson_alc *alc_ptr,\n                                usize *dat_len,\n                                yyjson_write_err *err) {\n    return yyjson_mut_write_opts_impl(val, 0, flg, alc_ptr, dat_len, err);\n}\n\nchar *yyjson_mut_write_opts(const yyjson_mut_doc *doc,\n                            yyjson_write_flag flg,\n                            const yyjson_alc *alc_ptr,\n                            usize *dat_len,\n                            yyjson_write_err *err) {\n    yyjson_mut_val *root;\n    usize estimated_val_num;\n    if (likely(doc)) {\n        root = doc->root;\n        estimated_val_num = yyjson_mut_doc_estimated_val_num(doc);\n    } else {\n        root = NULL;\n        estimated_val_num = 0;\n    }\n    return yyjson_mut_write_opts_impl(root, estimated_val_num,\n                                      flg, alc_ptr, dat_len, err);\n}\n\nbool yyjson_mut_val_write_file(const char *path,\n                               const yyjson_mut_val *val,\n                               yyjson_write_flag flg,\n                               const yyjson_alc *alc_ptr,\n                               yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    u8 *dat;\n    usize dat_len = 0;\n    yyjson_mut_val *root = constcast(yyjson_mut_val *)val;\n    bool suc;\n    \n    alc_ptr = alc_ptr ? alc_ptr : &YYJSON_DEFAULT_ALC;\n    err = err ? err : &dummy_err;\n    if (unlikely(!path || !*path)) {\n        err->msg = \"input path is invalid\";\n        err->code = YYJSON_WRITE_ERROR_INVALID_PARAMETER;\n        return false;\n    }\n    \n    dat = (u8 *)yyjson_mut_val_write_opts(root, flg, alc_ptr, &dat_len, err);\n    if (unlikely(!dat)) return false;\n    suc = write_dat_to_file(path, dat, dat_len, err);\n    alc_ptr->free(alc_ptr->ctx, dat);\n    return suc;\n}\n\nbool yyjson_mut_val_write_fp(FILE *fp,\n                             const yyjson_mut_val *val,\n                             yyjson_write_flag flg,\n                             const yyjson_alc *alc_ptr,\n                             yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    u8 *dat;\n    usize dat_len = 0;\n    yyjson_mut_val *root = constcast(yyjson_mut_val *)val;\n    bool suc;\n    \n    alc_ptr = alc_ptr ? alc_ptr : &YYJSON_DEFAULT_ALC;\n    err = err ? err : &dummy_err;\n    if (unlikely(!fp)) {\n        err->msg = \"input fp is invalid\";\n        err->code = YYJSON_WRITE_ERROR_INVALID_PARAMETER;\n        return false;\n    }\n    \n    dat = (u8 *)yyjson_mut_val_write_opts(root, flg, alc_ptr, &dat_len, err);\n    if (unlikely(!dat)) return false;\n    suc = write_dat_to_fp(fp, dat, dat_len, err);\n    alc_ptr->free(alc_ptr->ctx, dat);\n    return suc;\n}\n\nbool yyjson_mut_write_file(const char *path,\n                           const yyjson_mut_doc *doc,\n                           yyjson_write_flag flg,\n                           const yyjson_alc *alc_ptr,\n                           yyjson_write_err *err) {\n    yyjson_mut_val *root = doc ? doc->root : NULL;\n    return yyjson_mut_val_write_file(path, root, flg, alc_ptr, err);\n}\n\nbool yyjson_mut_write_fp(FILE *fp,\n                         const yyjson_mut_doc *doc,\n                         yyjson_write_flag flg,\n                         const yyjson_alc *alc_ptr,\n                         yyjson_write_err *err) {\n    yyjson_mut_val *root = doc ? doc->root : NULL;\n    return yyjson_mut_val_write_fp(fp, root, flg, alc_ptr, err);\n}\n\n#endif /* YYJSON_DISABLE_WRITER */\n\n\n\n/*==============================================================================\n * Compiler Hint End\n *============================================================================*/\n\n#if defined(__clang__)\n#   pragma clang diagnostic pop\n#elif defined(__GNUC__)\n#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)\n#   pragma GCC diagnostic pop\n#   endif\n#elif defined(_MSC_VER)\n#   pragma warning(pop)\n#endif /* warning suppress end */\n"
  },
  {
    "path": "libsvc/Modules/Lib/MJson/yyjson.h",
    "content": "/*==============================================================================\n * Created by Yaoyuan on 2019/3/9.\n * Copyright (C) 2019 Yaoyuan <ibireme@gmail.com>.\n *\n * Released under the MIT License:\n * https://github.com/ibireme/yyjson/blob/master/LICENSE\n *============================================================================*/\n\n/** @file yyjson.h */\n\n#ifndef YYJSON_H\n#define YYJSON_H\n\n/*==============================================================================\n * Header Files\n *============================================================================*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <stddef.h>\n#include <limits.h>\n#include <string.h>\n#include <float.h>\n\n\n\n/*==============================================================================\n * Compile-time Options\n *============================================================================*/\n\n/*\n Define as 1 to disable JSON reader if JSON parsing is not required.\n \n This will disable these functions at compile-time:\n    - yyjson_read_opts()\n    - yyjson_read_file()\n    - yyjson_read()\n    - yyjson_read_number()\n    - yyjson_mut_read_number()\n \n This will reduce the binary size by about 60%.\n */\n#ifndef YYJSON_DISABLE_READER\n#endif\n\n/*\n Define as 1 to disable JSON writer if JSON serialization is not required.\n \n This will disable these functions at compile-time:\n    - yyjson_write()\n    - yyjson_write_file()\n    - yyjson_write_opts()\n    - yyjson_val_write()\n    - yyjson_val_write_file()\n    - yyjson_val_write_opts()\n    - yyjson_mut_write()\n    - yyjson_mut_write_file()\n    - yyjson_mut_write_opts()\n    - yyjson_mut_val_write()\n    - yyjson_mut_val_write_file()\n    - yyjson_mut_val_write_opts()\n \n This will reduce the binary size by about 30%.\n */\n#ifndef YYJSON_DISABLE_WRITER\n#endif\n\n/*\n Define as 1 to disable JSON Pointer, JSON Patch and JSON Merge Patch supports.\n \n This will disable these functions at compile-time:\n    - yyjson_ptr_xxx()\n    - yyjson_mut_ptr_xxx()\n    - yyjson_doc_ptr_xxx()\n    - yyjson_mut_doc_ptr_xxx()\n    - yyjson_patch()\n    - yyjson_mut_patch()\n    - yyjson_merge_patch()\n    - yyjson_mut_merge_patch()\n */\n#ifndef YYJSON_DISABLE_UTILS\n#endif\n\n/*\n Define as 1 to disable the fast floating-point number conversion in yyjson,\n and use libc's `strtod/snprintf` instead.\n \n This will reduce the binary size by about 30%, but significantly slow down the\n floating-point read/write speed.\n */\n#ifndef YYJSON_DISABLE_FAST_FP_CONV\n#endif\n\n/*\n Define as 1 to disable non-standard JSON support at compile-time:\n    - Reading and writing inf/nan literal, such as `NaN`, `-Infinity`.\n    - Single line and multiple line comments.\n    - Single trailing comma at the end of an object or array.\n    - Invalid unicode in string value.\n \n This will also invalidate these run-time options:\n    - YYJSON_READ_ALLOW_INF_AND_NAN\n    - YYJSON_READ_ALLOW_COMMENTS\n    - YYJSON_READ_ALLOW_TRAILING_COMMAS\n    - YYJSON_READ_ALLOW_INVALID_UNICODE\n    - YYJSON_WRITE_ALLOW_INF_AND_NAN\n    - YYJSON_WRITE_ALLOW_INVALID_UNICODE\n \n This will reduce the binary size by about 10%, and slightly improve the JSON\n read/write speed.\n */\n#ifndef YYJSON_DISABLE_NON_STANDARD\n#endif\n\n/*\n Define as 1 to disable unaligned memory access if target architecture does not\n support unaligned memory access (such as some embedded processors).\n \n If this value is not defined, yyjson will perform some automatic detection.\n The wrong definition of this option may cause some performance degradation,\n but will not cause any run-time errors.\n */\n#ifndef YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n#endif\n\n/* Define as 1 to export symbols when building this library as Windows DLL. */\n#ifndef YYJSON_EXPORTS\n#endif\n\n/* Define as 1 to import symbols when using this library as Windows DLL. */\n#ifndef YYJSON_IMPORTS\n#endif\n\n/* Define as 1 to include <stdint.h> for compiler which doesn't support C99. */\n#ifndef YYJSON_HAS_STDINT_H\n#endif\n\n/* Define as 1 to include <stdbool.h> for compiler which doesn't support C99. */\n#ifndef YYJSON_HAS_STDBOOL_H\n#endif\n\n\n\n/*==============================================================================\n * Compiler Macros\n *============================================================================*/\n\n/** compiler version (MSVC) */\n#ifdef _MSC_VER\n#   define YYJSON_MSC_VER _MSC_VER\n#else\n#   define YYJSON_MSC_VER 0\n#endif\n\n/** compiler version (GCC) */\n#ifdef __GNUC__\n#   define YYJSON_GCC_VER __GNUC__\n#else\n#   define YYJSON_GCC_VER 0\n#endif\n\n/** C version (STDC) */\n#if defined(__STDC__) && (__STDC__ >= 1) && defined(__STDC_VERSION__)\n#   define YYJSON_STDC_VER __STDC_VERSION__\n#else\n#   define YYJSON_STDC_VER 0\n#endif\n\n/** C++ version */\n#if defined(__cplusplus)\n#   define YYJSON_CPP_VER __cplusplus\n#else\n#   define YYJSON_CPP_VER 0\n#endif\n\n/** compiler builtin check (since gcc 10.0, clang 2.6, icc 2021) */\n#ifndef yyjson_has_builtin\n#   ifdef __has_builtin\n#       define yyjson_has_builtin(x) __has_builtin(x)\n#   else\n#       define yyjson_has_builtin(x) 0\n#   endif\n#endif\n\n/** compiler attribute check (since gcc 5.0, clang 2.9, icc 17) */\n#ifndef yyjson_has_attribute\n#   ifdef __has_attribute\n#       define yyjson_has_attribute(x) __has_attribute(x)\n#   else\n#       define yyjson_has_attribute(x) 0\n#   endif\n#endif\n\n/** compiler feature check (since clang 2.6, icc 17) */\n#ifndef yyjson_has_feature\n#   ifdef __has_feature\n#       define yyjson_has_feature(x) __has_feature(x)\n#   else\n#       define yyjson_has_feature(x) 0\n#   endif\n#endif\n\n/** include check (since gcc 5.0, clang 2.7, icc 16, msvc 2017 15.3) */\n#ifndef yyjson_has_include\n#   ifdef __has_include\n#       define yyjson_has_include(x) __has_include(x)\n#   else\n#       define yyjson_has_include(x) 0\n#   endif\n#endif\n\n/** inline for compiler */\n#ifndef yyjson_inline\n#   if YYJSON_MSC_VER >= 1200\n#       define yyjson_inline __forceinline\n#   elif defined(_MSC_VER)\n#       define yyjson_inline __inline\n#   elif yyjson_has_attribute(always_inline) || YYJSON_GCC_VER >= 4\n#       define yyjson_inline __inline__ __attribute__((always_inline))\n#   elif defined(__clang__) || defined(__GNUC__)\n#       define yyjson_inline __inline__\n#   elif defined(__cplusplus) || YYJSON_STDC_VER >= 199901L\n#       define yyjson_inline inline\n#   else\n#       define yyjson_inline\n#   endif\n#endif\n\n/** noinline for compiler */\n#ifndef yyjson_noinline\n#   if YYJSON_MSC_VER >= 1400\n#       define yyjson_noinline __declspec(noinline)\n#   elif yyjson_has_attribute(noinline) || YYJSON_GCC_VER >= 4\n#       define yyjson_noinline __attribute__((noinline))\n#   else\n#       define yyjson_noinline\n#   endif\n#endif\n\n/** align for compiler */\n#ifndef yyjson_align\n#   if YYJSON_MSC_VER >= 1300\n#       define yyjson_align(x) __declspec(align(x))\n#   elif yyjson_has_attribute(aligned) || defined(__GNUC__)\n#       define yyjson_align(x) __attribute__((aligned(x)))\n#   elif YYJSON_CPP_VER >= 201103L\n#       define yyjson_align(x) alignas(x)\n#   else\n#       define yyjson_align(x)\n#   endif\n#endif\n\n/** likely for compiler */\n#ifndef yyjson_likely\n#   if yyjson_has_builtin(__builtin_expect) || \\\n    (YYJSON_GCC_VER >= 4 && YYJSON_GCC_VER != 5)\n#       define yyjson_likely(expr) __builtin_expect(!!(expr), 1)\n#   else\n#       define yyjson_likely(expr) (expr)\n#   endif\n#endif\n\n/** unlikely for compiler */\n#ifndef yyjson_unlikely\n#   if yyjson_has_builtin(__builtin_expect) || \\\n    (YYJSON_GCC_VER >= 4 && YYJSON_GCC_VER != 5)\n#       define yyjson_unlikely(expr) __builtin_expect(!!(expr), 0)\n#   else\n#       define yyjson_unlikely(expr) (expr)\n#   endif\n#endif\n\n/** deprecate warning */\n#ifndef yyjson_deprecated\n#   if YYJSON_MSC_VER >= 1400\n#       define yyjson_deprecated(msg) __declspec(deprecated(msg))\n#   elif yyjson_has_feature(attribute_deprecated_with_message) || \\\n        (YYJSON_GCC_VER > 4 || (YYJSON_GCC_VER == 4 && __GNUC_MINOR__ >= 5))\n#       define yyjson_deprecated(msg) __attribute__((deprecated(msg)))\n#   elif YYJSON_GCC_VER >= 3\n#       define yyjson_deprecated(msg) __attribute__((deprecated))\n#   else\n#       define yyjson_deprecated(msg)\n#   endif\n#endif\n\n/** function export */\n#ifndef yyjson_api\n#   if defined(_WIN32)\n#       if defined(YYJSON_EXPORTS) && YYJSON_EXPORTS\n#           define yyjson_api __declspec(dllexport)\n#       elif defined(YYJSON_IMPORTS) && YYJSON_IMPORTS\n#           define yyjson_api __declspec(dllimport)\n#       else\n#           define yyjson_api\n#       endif\n#   elif yyjson_has_attribute(visibility) || YYJSON_GCC_VER >= 4\n#       define yyjson_api __attribute__((visibility(\"default\")))\n#   else\n#       define yyjson_api\n#   endif\n#endif\n\n/** inline function export */\n#ifndef yyjson_api_inline\n#   define yyjson_api_inline static yyjson_inline\n#endif\n\n/** stdint (C89 compatible) */\n#if (defined(YYJSON_HAS_STDINT_H) && YYJSON_HAS_STDINT_H) || \\\n    YYJSON_MSC_VER >= 1600 || YYJSON_STDC_VER >= 199901L || \\\n    defined(_STDINT_H) || defined(_STDINT_H_) || \\\n    defined(__CLANG_STDINT_H) || defined(_STDINT_H_INCLUDED) || \\\n    yyjson_has_include(<stdint.h>)\n#   include <stdint.h>\n#elif defined(_MSC_VER)\n#   if _MSC_VER < 1300\n        typedef signed char         int8_t;\n        typedef signed short        int16_t;\n        typedef signed int          int32_t;\n        typedef unsigned char       uint8_t;\n        typedef unsigned short      uint16_t;\n        typedef unsigned int        uint32_t;\n        typedef signed __int64      int64_t;\n        typedef unsigned __int64    uint64_t;\n#   else\n        typedef signed __int8       int8_t;\n        typedef signed __int16      int16_t;\n        typedef signed __int32      int32_t;\n        typedef unsigned __int8     uint8_t;\n        typedef unsigned __int16    uint16_t;\n        typedef unsigned __int32    uint32_t;\n        typedef signed __int64      int64_t;\n        typedef unsigned __int64    uint64_t;\n#   endif\n#else\n#   if UCHAR_MAX == 0xFFU\n        typedef signed char     int8_t;\n        typedef unsigned char   uint8_t;\n#   else\n#       error cannot find 8-bit integer type\n#   endif\n#   if USHRT_MAX == 0xFFFFU\n        typedef unsigned short  uint16_t;\n        typedef signed short    int16_t;\n#   elif UINT_MAX == 0xFFFFU\n        typedef unsigned int    uint16_t;\n        typedef signed int      int16_t;\n#   else\n#       error cannot find 16-bit integer type\n#   endif\n#   if UINT_MAX == 0xFFFFFFFFUL\n        typedef unsigned int    uint32_t;\n        typedef signed int      int32_t;\n#   elif ULONG_MAX == 0xFFFFFFFFUL\n        typedef unsigned long   uint32_t;\n        typedef signed long     int32_t;\n#   elif USHRT_MAX == 0xFFFFFFFFUL\n        typedef unsigned short  uint32_t;\n        typedef signed short    int32_t;\n#   else\n#       error cannot find 32-bit integer type\n#   endif\n#   if defined(__INT64_TYPE__) && defined(__UINT64_TYPE__)\n        typedef __INT64_TYPE__  int64_t;\n        typedef __UINT64_TYPE__ uint64_t;\n#   elif defined(__GNUC__) || defined(__clang__)\n#       if !defined(_SYS_TYPES_H) && !defined(__int8_t_defined)\n        __extension__ typedef long long             int64_t;\n#       endif\n        __extension__ typedef unsigned long long    uint64_t;\n#   elif defined(_LONG_LONG) || defined(__MWERKS__) || defined(_CRAYC) || \\\n        defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n        typedef long long           int64_t;\n        typedef unsigned long long  uint64_t;\n#   elif (defined(__BORLANDC__) && __BORLANDC__ > 0x460) || \\\n        defined(__WATCOM_INT64__) || defined (__alpha) || defined (__DECC)\n        typedef __int64             int64_t;\n        typedef unsigned __int64    uint64_t;\n#   else\n#       error cannot find 64-bit integer type\n#   endif\n#endif\n\n/** stdbool (C89 compatible) */\n#if (defined(YYJSON_HAS_STDBOOL_H) && YYJSON_HAS_STDBOOL_H) || \\\n    (yyjson_has_include(<stdbool.h>) && !defined(__STRICT_ANSI__)) || \\\n    YYJSON_MSC_VER >= 1800 || YYJSON_STDC_VER >= 199901L\n#   include <stdbool.h>\n#elif !defined(__bool_true_false_are_defined)\n#   define __bool_true_false_are_defined 1\n#   if defined(__cplusplus)\n#       if defined(__GNUC__) && !defined(__STRICT_ANSI__)\n#           define _Bool bool\n#           if __cplusplus < 201103L\n#               define bool bool\n#               define false false\n#               define true true\n#           endif\n#       endif\n#   else\n#       define bool unsigned char\n#       define true 1\n#       define false 0\n#   endif\n#endif\n\n/** char bit check */\n#if defined(CHAR_BIT)\n#   if CHAR_BIT != 8\n#       error non 8-bit char is not supported\n#   endif\n#endif\n\n/**\n Microsoft Visual C++ 6.0 doesn't support converting number from u64 to f64:\n error C2520: conversion from unsigned __int64 to double not implemented.\n */\n#ifndef YYJSON_U64_TO_F64_NO_IMPL\n#   if (0 < YYJSON_MSC_VER) && (YYJSON_MSC_VER <= 1200)\n#       define YYJSON_U64_TO_F64_NO_IMPL 1\n#   else\n#       define YYJSON_U64_TO_F64_NO_IMPL 0\n#   endif\n#endif\n\n\n\n/*==============================================================================\n * Compile Hint Begin\n *============================================================================*/\n\n/* extern \"C\" begin */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* warning suppress begin */\n#if defined(__clang__)\n#   pragma clang diagnostic push\n#   pragma clang diagnostic ignored \"-Wunused-function\"\n#   pragma clang diagnostic ignored \"-Wunused-parameter\"\n#elif defined(__GNUC__)\n#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)\n#   pragma GCC diagnostic push\n#   endif\n#   pragma GCC diagnostic ignored \"-Wunused-function\"\n#   pragma GCC diagnostic ignored \"-Wunused-parameter\"\n#elif defined(_MSC_VER)\n#   pragma warning(push)\n#   pragma warning(disable:4800) /* 'int': forcing value to 'true' or 'false' */\n#endif\n\n\n\n/*==============================================================================\n * Version\n *============================================================================*/\n\n/** The major version of yyjson. */\n#define YYJSON_VERSION_MAJOR  0\n\n/** The minor version of yyjson. */\n#define YYJSON_VERSION_MINOR  7\n\n/** The patch version of yyjson. */\n#define YYJSON_VERSION_PATCH  0\n\n/** The version of yyjson in hex: `(major << 16) | (minor << 8) | (patch)`. */\n#define YYJSON_VERSION_HEX    0x000700\n\n/** The version string of yyjson. */\n#define YYJSON_VERSION_STRING \"0.7.0\"\n\n/** The version of yyjson in hex, same as `YYJSON_VERSION_HEX`. */\nyyjson_api uint32_t yyjson_version(void);\n\n\n\n/*==============================================================================\n * JSON Types\n *============================================================================*/\n\n/** Type of JSON value (3 bit). */\ntypedef uint8_t yyjson_type;\n#define YYJSON_TYPE_NONE        ((uint8_t)0)        /* _____000 */\n#define YYJSON_TYPE_RAW         ((uint8_t)1)        /* _____001 */\n#define YYJSON_TYPE_NULL        ((uint8_t)2)        /* _____010 */\n#define YYJSON_TYPE_BOOL        ((uint8_t)3)        /* _____011 */\n#define YYJSON_TYPE_NUM         ((uint8_t)4)        /* _____100 */\n#define YYJSON_TYPE_STR         ((uint8_t)5)        /* _____101 */\n#define YYJSON_TYPE_ARR         ((uint8_t)6)        /* _____110 */\n#define YYJSON_TYPE_OBJ         ((uint8_t)7)        /* _____111 */\n\n/** Subtype of JSON value (2 bit). */\ntypedef uint8_t yyjson_subtype;\n#define YYJSON_SUBTYPE_NONE     ((uint8_t)(0 << 3)) /* ___00___ */\n#define YYJSON_SUBTYPE_FALSE    ((uint8_t)(0 << 3)) /* ___00___ */\n#define YYJSON_SUBTYPE_TRUE     ((uint8_t)(1 << 3)) /* ___01___ */\n#define YYJSON_SUBTYPE_UINT     ((uint8_t)(0 << 3)) /* ___00___ */\n#define YYJSON_SUBTYPE_SINT     ((uint8_t)(1 << 3)) /* ___01___ */\n#define YYJSON_SUBTYPE_REAL     ((uint8_t)(2 << 3)) /* ___10___ */\n\n/** Mask and bits of JSON value tag. */\n#define YYJSON_TYPE_MASK        ((uint8_t)0x07)     /* _____111 */\n#define YYJSON_TYPE_BIT         ((uint8_t)3)\n#define YYJSON_SUBTYPE_MASK     ((uint8_t)0x18)     /* ___11___ */\n#define YYJSON_SUBTYPE_BIT      ((uint8_t)2)\n#define YYJSON_RESERVED_MASK    ((uint8_t)0xE0)     /* 111_____ */\n#define YYJSON_RESERVED_BIT     ((uint8_t)3)\n#define YYJSON_TAG_MASK         ((uint8_t)0xFF)     /* 11111111 */\n#define YYJSON_TAG_BIT          ((uint8_t)8)\n\n/** Padding size for JSON reader. */\n#define YYJSON_PADDING_SIZE     4\n\n\n\n/*==============================================================================\n * Allocator\n *============================================================================*/\n\n/**\n A memory allocator.\n \n Typically you don't need to use it, unless you want to customize your own\n memory allocator.\n */\ntypedef struct yyjson_alc {\n    /** Same as libc's malloc(size), should not be NULL. */\n    void *(*malloc)(void *ctx, size_t size);\n    /** Same as libc's realloc(ptr, size), should not be NULL. */\n    void *(*realloc)(void *ctx, void *ptr, size_t old_size, size_t size);\n    /** Same as libc's free(ptr), should not be NULL. */\n    void (*free)(void *ctx, void *ptr);\n    /** A context for malloc/realloc/free, can be NULL. */\n    void *ctx;\n} yyjson_alc;\n\n/**\n A pool allocator uses fixed length pre-allocated memory.\n \n This allocator may be used to avoid malloc/realloc calls. The pre-allocated \n memory should be held by the caller. The maximum amount of memory required to\n read a JSON can be calculated using the `yyjson_read_max_memory_usage()`\n function, but the amount of memory required to write a JSON cannot be directly \n calculated.\n \n This is not a general-purpose allocator. If used to read multiple JSON \n documents and only some of them are released, it may cause memory\n fragmentation, leading to performance degradation and memory waste. Therefore, \n it is recommended to use this allocator only for reading or writing a single \n JSON document.\n \n @param alc The allocator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n    If `buf` or `size` is invalid, this will be set to an empty allocator.\n @param buf The buffer memory for this allocator.\n    If this parameter is NULL, the function will fail and return false.\n @param size The size of `buf`, in bytes.\n    If this parameter is less than 8 words (32/64 bytes on 32/64-bit OS), the\n    function will fail and return false.\n @return true if the `alc` has been successfully initialized.\n \n @par Example\n @code\n    // parse JSON with stack memory\n    char buf[1024];\n    yyjson_alc alc;\n    yyjson_alc_pool_init(&alc, buf, 1024);\n    \n    const char *json = \"{\\\"name\\\":\\\"Helvetica\\\",\\\"size\\\":16}\"\n    yyjson_doc *doc = yyjson_read_opts(json, strlen(json), 0, &alc, NULL);\n    // the memory of `doc` is on the stack\n @endcode\n */\nyyjson_api bool yyjson_alc_pool_init(yyjson_alc *alc, void *buf, size_t size);\n\n\n\n/*==============================================================================\n * JSON Structure\n *============================================================================*/\n\n/**\n An immutable document for reading JSON.\n This document holds memory for all its JSON values and strings. When it is no\n longer used, the user should call `yyjson_doc_free()` to free its memory.\n */\ntypedef struct yyjson_doc yyjson_doc;\n\n/**\n An immutable value for reading JSON.\n A JSON Value has the same lifetime as its document. The memory is held by its\n document and and cannot be freed alone.\n */\ntypedef struct yyjson_val yyjson_val;\n\n/**\n A mutable document for building JSON.\n This document holds memory for all its JSON values and strings. When it is no\n longer used, the user should call `yyjson_mut_doc_free()` to free its memory.\n */\ntypedef struct yyjson_mut_doc yyjson_mut_doc;\n\n/**\n A mutable value for building JSON.\n A JSON Value has the same lifetime as its document. The memory is held by its\n document and and cannot be freed alone.\n */\ntypedef struct yyjson_mut_val yyjson_mut_val;\n\n\n\n/*==============================================================================\n * JSON Reader API\n *============================================================================*/\n\n/** Run-time options for JSON reader. */\ntypedef uint32_t yyjson_read_flag;\n\n/** Default option (RFC 8259 compliant):\n    - Read positive integer as uint64_t.\n    - Read negative integer as int64_t.\n    - Read floating-point number as double with round-to-nearest mode.\n    - Read integer which cannot fit in uint64_t or int64_t as double.\n    - Report error if double number is infinity.\n    - Report error if string contains invalid UTF-8 character or BOM.\n    - Report error on trailing commas, comments, inf and nan literals. */\nstatic const yyjson_read_flag YYJSON_READ_NOFLAG                = 0 << 0;\n\n/** Read the input data in-situ.\n    This option allows the reader to modify and use input data to store string\n    values, which can increase reading speed slightly.\n    The caller should hold the input data before free the document.\n    The input data must be padded by at least `YYJSON_PADDING_SIZE` bytes.\n    For example: `[1,2]` should be `[1,2]\\0\\0\\0\\0`, input length should be 5. */\nstatic const yyjson_read_flag YYJSON_READ_INSITU                = 1 << 0;\n\n/** Stop when done instead of issuing an error if there's additional content\n    after a JSON document. This option may be used to parse small pieces of JSON\n    in larger data, such as `NDJSON`. */\nstatic const yyjson_read_flag YYJSON_READ_STOP_WHEN_DONE        = 1 << 1;\n\n/** Allow single trailing comma at the end of an object or array,\n    such as `[1,2,3,]`, `{\"a\":1,\"b\":2,}` (non-standard). */\nstatic const yyjson_read_flag YYJSON_READ_ALLOW_TRAILING_COMMAS = 1 << 2;\n\n/** Allow C-style single line and multiple line comments (non-standard). */\nstatic const yyjson_read_flag YYJSON_READ_ALLOW_COMMENTS        = 1 << 3;\n\n/** Allow inf/nan number and literal, case-insensitive,\n    such as 1e999, NaN, inf, -Infinity (non-standard). */\nstatic const yyjson_read_flag YYJSON_READ_ALLOW_INF_AND_NAN     = 1 << 4;\n\n/** Read all numbers as raw strings (value with `YYJSON_TYPE_RAW` type),\n    inf/nan literal is also read as raw with `ALLOW_INF_AND_NAN` flag. */\nstatic const yyjson_read_flag YYJSON_READ_NUMBER_AS_RAW         = 1 << 5;\n\n/** Allow reading invalid unicode when parsing string values (non-standard).\n    Invalid characters will be allowed to appear in the string values, but\n    invalid escape sequences will still be reported as errors.\n    This flag does not affect the performance of correctly encoded strings.\n    \n    @warning Strings in JSON values may contain incorrect encoding when this\n    option is used, you need to handle these strings carefully to avoid security\n    risks. */\nstatic const yyjson_read_flag YYJSON_READ_ALLOW_INVALID_UNICODE = 1 << 6;\n\n/** Read big numbers as raw strings. These big numbers include integers that\n    cannot be represented by `int64_t` and `uint64_t`, and floating-point\n    numbers that cannot be represented by finite `double`.\n    The flag will be overridden by `YYJSON_READ_NUMBER_AS_RAW` flag. */\nstatic const yyjson_read_flag YYJSON_READ_BIGNUM_AS_RAW         = 1 << 7;\n\n\n\n/** Result code for JSON reader. */\ntypedef uint32_t yyjson_read_code;\n\n/** Success, no error. */\nstatic const yyjson_read_code YYJSON_READ_SUCCESS                       = 0;\n\n/** Invalid parameter, such as NULL input string or 0 input length. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_INVALID_PARAMETER       = 1;\n\n/** Memory allocation failure occurs. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_MEMORY_ALLOCATION       = 2;\n\n/** Input JSON string is empty. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_EMPTY_CONTENT           = 3;\n\n/** Unexpected content after document, such as `[123]abc`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_CONTENT      = 4;\n\n/** Unexpected ending, such as `[123`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_END          = 5;\n\n/** Unexpected character inside the document, such as `[abc]`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_CHARACTER    = 6;\n\n/** Invalid JSON structure, such as `[1,]`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_JSON_STRUCTURE          = 7;\n\n/** Invalid comment, such as unclosed multi-line comment. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_INVALID_COMMENT         = 8;\n\n/** Invalid number, such as `123.e12`, `000`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_INVALID_NUMBER          = 9;\n\n/** Invalid string, such as invalid escaped character inside a string. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_INVALID_STRING          = 10;\n\n/** Invalid JSON literal, such as `truu`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_LITERAL                 = 11;\n\n/** Failed to open a file. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_FILE_OPEN               = 12;\n\n/** Failed to read a file. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_FILE_READ               = 13;\n\n/** Error information for JSON reader. */\ntypedef struct yyjson_read_err {\n    /** Error code, see `yyjson_read_code` for all possible values. */\n    yyjson_read_code code;\n    /** Error message, constant, no need to free (NULL if success). */\n    const char *msg;\n    /** Error byte position for input data (0 if success). */\n    size_t pos;\n} yyjson_read_err;\n\n\n\n/**\n Read JSON with options.\n \n This function is thread-safe when:\n 1. The `dat` is not modified by other threads.\n 2. The `alc` is thread-safe or NULL.\n \n @param dat The JSON data (UTF-8 without BOM), null-terminator is not required.\n    If this parameter is NULL, the function will fail and return NULL.\n    The `dat` will not be modified without the flag `YYJSON_READ_INSITU`, so you\n    can pass a `const char *` string and case it to `char *` if you don't use\n    the `YYJSON_READ_INSITU` flag.\n @param len The length of JSON data in bytes.\n    If this parameter is 0, the function will fail and return NULL.\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON reader.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON document, or NULL if an error occurs.\n    When it's no longer needed, it should be freed with `yyjson_doc_free()`.\n */\nyyjson_api yyjson_doc *yyjson_read_opts(char *dat,\n                                        size_t len,\n                                        yyjson_read_flag flg,\n                                        const yyjson_alc *alc,\n                                        yyjson_read_err *err);\n\n/**\n Read a JSON file.\n \n This function is thread-safe when:\n 1. The file is not modified by other threads.\n 2. The `alc` is thread-safe or NULL.\n \n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return NULL.\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON reader.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON document, or NULL if an error occurs.\n    When it's no longer needed, it should be freed with `yyjson_doc_free()`.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to read.\n */\nyyjson_api yyjson_doc *yyjson_read_file(const char *path,\n                                        yyjson_read_flag flg,\n                                        const yyjson_alc *alc,\n                                        yyjson_read_err *err);\n\n/**\n Read JSON from a file pointer.\n \n @param fp The file pointer.\n    The data will be read from the current position of the FILE to the end.\n    If this fp is NULL or invalid, the function will fail and return NULL.\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON reader.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON document, or NULL if an error occurs.\n    When it's no longer needed, it should be freed with `yyjson_doc_free()`.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to read.\n */\nyyjson_api yyjson_doc *yyjson_read_fp(FILE *fp,\n                                      yyjson_read_flag flg,\n                                      const yyjson_alc *alc,\n                                      yyjson_read_err *err);\n\n/**\n Read a JSON string.\n \n This function is thread-safe.\n \n @param dat The JSON data (UTF-8 without BOM), null-terminator is not required.\n    If this parameter is NULL, the function will fail and return NULL.\n @param len The length of JSON data in bytes.\n    If this parameter is 0, the function will fail and return NULL.\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @return A new JSON document, or NULL if an error occurs.\n    When it's no longer needed, it should be freed with `yyjson_doc_free()`.\n */\nyyjson_api_inline yyjson_doc *yyjson_read(const char *dat,\n                                          size_t len,\n                                          yyjson_read_flag flg) {\n    flg &= ~YYJSON_READ_INSITU; /* const string cannot be modified */\n    return yyjson_read_opts((char *)(void *)(size_t)(const void *)dat,\n                            len, flg, NULL, NULL);\n}\n\n/**\n Returns the size of maximum memory usage to read a JSON data.\n \n You may use this value to avoid malloc() or calloc() call inside the reader\n to get better performance, or read multiple JSON with one piece of memory.\n \n @param len The length of JSON data in bytes.\n @param flg The JSON read options.\n @return The maximum memory size to read this JSON, or 0 if overflow.\n \n @par Example\n @code\n    // read multiple JSON with same pre-allocated memory\n    \n    char *dat1, *dat2, *dat3; // JSON data\n    size_t len1, len2, len3; // JSON length\n    size_t max_len = MAX(len1, MAX(len2, len3));\n    yyjson_doc *doc;\n    \n    // use one allocator for multiple JSON\n    size_t size = yyjson_read_max_memory_usage(max_len, 0);\n    void *buf = malloc(size);\n    yyjson_alc alc;\n    yyjson_alc_pool_init(&alc, buf, size);\n    \n    // no more alloc() or realloc() call during reading\n    doc = yyjson_read_opts(dat1, len1, 0, &alc, NULL);\n    yyjson_doc_free(doc);\n    doc = yyjson_read_opts(dat2, len2, 0, &alc, NULL);\n    yyjson_doc_free(doc);\n    doc = yyjson_read_opts(dat3, len3, 0, &alc, NULL);\n    yyjson_doc_free(doc);\n    \n    free(buf);\n @endcode\n @see yyjson_alc_pool_init()\n */\nyyjson_api_inline size_t yyjson_read_max_memory_usage(size_t len,\n                                                      yyjson_read_flag flg) {\n    /*\n     1. The max value count is (json_size / 2 + 1),\n        for example: \"[1,2,3,4]\" size is 9, value count is 5.\n     2. Some broken JSON may cost more memory during reading, but fail at end,\n        for example: \"[[[[[[[[\".\n     3. yyjson use 16 bytes per value, see struct yyjson_val.\n     4. yyjson use dynamic memory with a growth factor of 1.5.\n     \n     The max memory size is (json_size / 2 * 16 * 1.5 + padding).\n     */\n    size_t mul = (size_t)12 + !(flg & YYJSON_READ_INSITU);\n    size_t pad = 256;\n    size_t max = (size_t)(~(size_t)0);\n    if (flg & YYJSON_READ_STOP_WHEN_DONE) len = len < 256 ? 256 : len;\n    if (len >= (max - pad - mul) / mul) return 0;\n    return len * mul + pad;\n}\n\n/**\n Read a JSON number.\n\n This function is thread-safe when data is not modified by other threads.\n\n @param dat The JSON data (UTF-8 without BOM), null-terminator is required.\n    If this parameter is NULL, the function will fail and return NULL.\n @param val The output value where result is stored.\n    If this parameter is NULL, the function will fail and return NULL.\n    The value will hold either UINT or SINT or REAL number;\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n    Supports `YYJSON_READ_NUMBER_AS_RAW` and `YYJSON_READ_ALLOW_INF_AND_NAN`.\n @param alc The memory allocator used for long number.\n    It is only used when the built-in floating point reader is disabled.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return If successful, a pointer to the character after the last character\n    used in the conversion, NULL if an error occurs.\n */\nyyjson_api const char *yyjson_read_number(const char *dat,\n                                          yyjson_val *val,\n                                          yyjson_read_flag flg,\n                                          const yyjson_alc *alc,\n                                          yyjson_read_err *err);\n\n/**\n Read a JSON number.\n\n This function is thread-safe when data is not modified by other threads.\n\n @param dat The JSON data (UTF-8 without BOM), null-terminator is required.\n    If this parameter is NULL, the function will fail and return NULL.\n @param val The output value where result is stored.\n    If this parameter is NULL, the function will fail and return NULL.\n    The value will hold either UINT or SINT or REAL number;\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n    Supports `YYJSON_READ_NUMBER_AS_RAW` and `YYJSON_READ_ALLOW_INF_AND_NAN`.\n @param alc The memory allocator used for long number.\n    It is only used when the built-in floating point reader is disabled.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return If successful, a pointer to the character after the last character\n    used in the conversion, NULL if an error occurs.\n */\nyyjson_api_inline const char *yyjson_mut_read_number(const char *dat,\n                                                     yyjson_mut_val *val,\n                                                     yyjson_read_flag flg,\n                                                     const yyjson_alc *alc,\n                                                     yyjson_read_err *err) {\n    return yyjson_read_number(dat, (yyjson_val *)val, flg, alc, err);\n}\n\n\n/*==============================================================================\n * JSON Writer API\n *============================================================================*/\n\n/** Run-time options for JSON writer. */\ntypedef uint32_t yyjson_write_flag;\n\n/** Default option:\n    - Write JSON minify.\n    - Report error on inf or nan number.\n    - Report error on invalid UTF-8 string.\n    - Do not escape unicode or slash. */\nstatic const yyjson_write_flag YYJSON_WRITE_NOFLAG                  = 0 << 0;\n\n/** Write JSON pretty with 4 space indent. */\nstatic const yyjson_write_flag YYJSON_WRITE_PRETTY                  = 1 << 0;\n\n/** Escape unicode as `uXXXX`, make the output ASCII only. */\nstatic const yyjson_write_flag YYJSON_WRITE_ESCAPE_UNICODE          = 1 << 1;\n\n/** Escape '/' as '\\/'. */\nstatic const yyjson_write_flag YYJSON_WRITE_ESCAPE_SLASHES          = 1 << 2;\n\n/** Write inf and nan number as 'Infinity' and 'NaN' literal (non-standard). */\nstatic const yyjson_write_flag YYJSON_WRITE_ALLOW_INF_AND_NAN       = 1 << 3;\n\n/** Write inf and nan number as null literal.\n    This flag will override `YYJSON_WRITE_ALLOW_INF_AND_NAN` flag. */\nstatic const yyjson_write_flag YYJSON_WRITE_INF_AND_NAN_AS_NULL     = 1 << 4;\n\n/** Allow invalid unicode when encoding string values (non-standard).\n    Invalid characters in string value will be copied byte by byte.\n    If `YYJSON_WRITE_ESCAPE_UNICODE` flag is also set, invalid character will be\n    escaped as `U+FFFD` (replacement character).\n    This flag does not affect the performance of correctly encoded strings. */\nstatic const yyjson_write_flag YYJSON_WRITE_ALLOW_INVALID_UNICODE   = 1 << 5;\n\n/** Write JSON pretty with 2 space indent.\n    This flag will override `YYJSON_WRITE_PRETTY` flag. */\nstatic const yyjson_write_flag YYJSON_WRITE_PRETTY_TWO_SPACES       = 1 << 6;\n\n\n\n/** Result code for JSON writer */\ntypedef uint32_t yyjson_write_code;\n\n/** Success, no error. */\nstatic const yyjson_write_code YYJSON_WRITE_SUCCESS                     = 0;\n\n/** Invalid parameter, such as NULL document. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_PARAMETER     = 1;\n\n/** Memory allocation failure occurs. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_MEMORY_ALLOCATION     = 2;\n\n/** Invalid value type in JSON document. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_VALUE_TYPE    = 3;\n\n/** NaN or Infinity number occurs. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_NAN_OR_INF            = 4;\n\n/** Failed to open a file. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_FILE_OPEN             = 5;\n\n/** Failed to write a file. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_FILE_WRITE            = 6;\n\n/** Invalid unicode in string. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_STRING        = 7;\n\n/** Error information for JSON writer. */\ntypedef struct yyjson_write_err {\n    /** Error code, see `yyjson_write_code` for all possible values. */\n    yyjson_write_code code;\n    /** Error message, constant, no need to free (NULL if success). */\n    const char *msg;\n} yyjson_write_err;\n\n\n\n/*==============================================================================\n * JSON Document Writer API\n *============================================================================*/\n\n/**\n Write a document to JSON string with options.\n \n This function is thread-safe when:\n The `alc` is thread-safe or NULL.\n \n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free() or alc->free().\n */\nyyjson_api char *yyjson_write_opts(const yyjson_doc *doc,\n                                   yyjson_write_flag flg,\n                                   const yyjson_alc *alc,\n                                   size_t *len,\n                                   yyjson_write_err *err);\n\n/**\n Write a document to JSON file with options.\n \n This function is thread-safe when:\n 1. The file is not accessed by other threads.\n 2. The `alc` is thread-safe or NULL.\n\n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return false.\n    If this file is not empty, the content will be discarded.\n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_write_file(const char *path,\n                                  const yyjson_doc *doc,\n                                  yyjson_write_flag flg,\n                                  const yyjson_alc *alc,\n                                  yyjson_write_err *err);\n\n/**\n Write a document to file pointer with options.\n \n @param fp The file pointer.\n    The data will be written to the current position of the file.\n    If this fp is NULL or invalid, the function will fail and return false.\n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_write_fp(FILE *fp,\n                                const yyjson_doc *doc,\n                                yyjson_write_flag flg,\n                                const yyjson_alc *alc,\n                                yyjson_write_err *err);\n\n/**\n Write a document to JSON string.\n \n This function is thread-safe.\n \n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free().\n */\nyyjson_api_inline char *yyjson_write(const yyjson_doc *doc,\n                                     yyjson_write_flag flg,\n                                     size_t *len) {\n    return yyjson_write_opts(doc, flg, NULL, len, NULL);\n}\n\n\n\n/**\n Write a document to JSON string with options.\n \n This function is thread-safe when:\n 1. The `doc` is not modified by other threads.\n 2. The `alc` is thread-safe or NULL.\n\n @param doc The mutable JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free() or alc->free().\n */\nyyjson_api char *yyjson_mut_write_opts(const yyjson_mut_doc *doc,\n                                       yyjson_write_flag flg,\n                                       const yyjson_alc *alc,\n                                       size_t *len,\n                                       yyjson_write_err *err);\n\n/**\n Write a document to JSON file with options.\n \n This function is thread-safe when:\n 1. The file is not accessed by other threads.\n 2. The `doc` is not modified by other threads.\n 3. The `alc` is thread-safe or NULL.\n \n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return false.\n    If this file is not empty, the content will be discarded.\n @param doc The mutable JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_mut_write_file(const char *path,\n                                      const yyjson_mut_doc *doc,\n                                      yyjson_write_flag flg,\n                                      const yyjson_alc *alc,\n                                      yyjson_write_err *err);\n\n/**\n Write a document to file pointer with options.\n \n @param fp The file pointer.\n    The data will be written to the current position of the file.\n    If this fp is NULL or invalid, the function will fail and return false.\n @param doc The mutable JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_mut_write_fp(FILE *fp,\n                                    const yyjson_mut_doc *doc,\n                                    yyjson_write_flag flg,\n                                    const yyjson_alc *alc,\n                                    yyjson_write_err *err);\n\n/**\n Write a document to JSON string.\n \n This function is thread-safe when:\n The `doc` is not modified by other threads.\n \n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free().\n */\nyyjson_api_inline char *yyjson_mut_write(const yyjson_mut_doc *doc,\n                                         yyjson_write_flag flg,\n                                         size_t *len) {\n    return yyjson_mut_write_opts(doc, flg, NULL, len, NULL);\n}\n\n\n\n/*==============================================================================\n * JSON Value Writer API\n *============================================================================*/\n\n/**\n Write a value to JSON string with options.\n \n This function is thread-safe when:\n The `alc` is thread-safe or NULL.\n \n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free() or alc->free().\n */\nyyjson_api char *yyjson_val_write_opts(const yyjson_val *val,\n                                       yyjson_write_flag flg,\n                                       const yyjson_alc *alc,\n                                       size_t *len,\n                                       yyjson_write_err *err);\n\n/**\n Write a value to JSON file with options.\n \n This function is thread-safe when:\n 1. The file is not accessed by other threads.\n 2. The `alc` is thread-safe or NULL.\n \n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return false.\n    If this file is not empty, the content will be discarded.\n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_val_write_file(const char *path,\n                                      const yyjson_val *val,\n                                      yyjson_write_flag flg,\n                                      const yyjson_alc *alc,\n                                      yyjson_write_err *err);\n\n/**\n Write a value to file pointer with options.\n \n @param fp The file pointer.\n    The data will be written to the current position of the file.\n    If this path is NULL or invalid, the function will fail and return false.\n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_val_write_fp(FILE *fp,\n                                    const yyjson_val *val,\n                                    yyjson_write_flag flg,\n                                    const yyjson_alc *alc,\n                                    yyjson_write_err *err);\n\n/**\n Write a value to JSON string.\n \n This function is thread-safe.\n \n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free().\n */\nyyjson_api_inline char *yyjson_val_write(const yyjson_val *val,\n                                         yyjson_write_flag flg,\n                                         size_t *len) {\n    return yyjson_val_write_opts(val, flg, NULL, len, NULL);\n}\n\n/**\n Write a value to JSON string with options.\n \n This function is thread-safe when:\n 1. The `val` is not modified by other threads.\n 2. The `alc` is thread-safe or NULL.\n \n @param val The mutable JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return  A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free() or alc->free().\n */\nyyjson_api char *yyjson_mut_val_write_opts(const yyjson_mut_val *val,\n                                           yyjson_write_flag flg,\n                                           const yyjson_alc *alc,\n                                           size_t *len,\n                                           yyjson_write_err *err);\n\n/**\n Write a value to JSON file with options.\n \n This function is thread-safe when:\n 1. The file is not accessed by other threads.\n 2. The `val` is not modified by other threads.\n 3. The `alc` is thread-safe or NULL.\n \n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return false.\n    If this file is not empty, the content will be discarded.\n @param val The mutable JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_mut_val_write_file(const char *path,\n                                          const yyjson_mut_val *val,\n                                          yyjson_write_flag flg,\n                                          const yyjson_alc *alc,\n                                          yyjson_write_err *err);\n\n/**\n Write a value to JSON file with options.\n \n @param fp The file pointer.\n    The data will be written to the current position of the file.\n    If this path is NULL or invalid, the function will fail and return false.\n @param val The mutable JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_mut_val_write_fp(FILE *fp,\n                                        const yyjson_mut_val *val,\n                                        yyjson_write_flag flg,\n                                        const yyjson_alc *alc,\n                                        yyjson_write_err *err);\n\n/**\n Write a value to JSON string.\n \n This function is thread-safe when:\n The `val` is not modified by other threads.\n \n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free().\n */\nyyjson_api_inline char *yyjson_mut_val_write(const yyjson_mut_val *val,\n                                             yyjson_write_flag flg,\n                                             size_t *len) {\n    return yyjson_mut_val_write_opts(val, flg, NULL, len, NULL);\n}\n\n\n\n/*==============================================================================\n * JSON Document API\n *============================================================================*/\n\n/** Returns the root value of this JSON document.\n    Returns NULL if `doc` is NULL. */\nyyjson_api_inline yyjson_val *yyjson_doc_get_root(yyjson_doc *doc);\n\n/** Returns read size of input JSON data.\n    Returns 0 if `doc` is NULL.\n    For example: the read size of `[1,2,3]` is 7 bytes.  */\nyyjson_api_inline size_t yyjson_doc_get_read_size(yyjson_doc *doc);\n\n/** Returns total value count in this JSON document.\n    Returns 0 if `doc` is NULL.\n    For example: the value count of `[1,2,3]` is 4. */\nyyjson_api_inline size_t yyjson_doc_get_val_count(yyjson_doc *doc);\n\n/** Release the JSON document and free the memory.\n    After calling this function, the `doc` and all values from the `doc` are no\n    longer available. This function will do nothing if the `doc` is NULL. */\nyyjson_api_inline void yyjson_doc_free(yyjson_doc *doc);\n\n\n\n/*==============================================================================\n * JSON Value Type API\n *============================================================================*/\n\n/** Returns whether the JSON value is raw.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_raw(yyjson_val *val);\n\n/** Returns whether the JSON value is `null`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_null(yyjson_val *val);\n\n/** Returns whether the JSON value is `true`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_true(yyjson_val *val);\n\n/** Returns whether the JSON value is `false`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_false(yyjson_val *val);\n\n/** Returns whether the JSON value is bool (true/false).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_bool(yyjson_val *val);\n\n/** Returns whether the JSON value is unsigned integer (uint64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_uint(yyjson_val *val);\n\n/** Returns whether the JSON value is signed integer (int64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_sint(yyjson_val *val);\n\n/** Returns whether the JSON value is integer (uint64_t/int64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_int(yyjson_val *val);\n\n/** Returns whether the JSON value is real number (double).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_real(yyjson_val *val);\n\n/** Returns whether the JSON value is number (uint64_t/int64_t/double).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_num(yyjson_val *val);\n\n/** Returns whether the JSON value is string.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_str(yyjson_val *val);\n\n/** Returns whether the JSON value is array.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_arr(yyjson_val *val);\n\n/** Returns whether the JSON value is object.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_obj(yyjson_val *val);\n\n/** Returns whether the JSON value is container (array/object).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_ctn(yyjson_val *val);\n\n\n\n/*==============================================================================\n * JSON Value Content API\n *============================================================================*/\n\n/** Returns the JSON value's type.\n    Returns YYJSON_TYPE_NONE if `val` is NULL. */\nyyjson_api_inline yyjson_type yyjson_get_type(yyjson_val *val);\n\n/** Returns the JSON value's subtype.\n    Returns YYJSON_SUBTYPE_NONE if `val` is NULL. */\nyyjson_api_inline yyjson_subtype yyjson_get_subtype(yyjson_val *val);\n\n/** Returns the JSON value's tag.\n    Returns 0 if `val` is NULL. */\nyyjson_api_inline uint8_t yyjson_get_tag(yyjson_val *val);\n\n/** Returns the JSON value's type description.\n    The return value should be one of these strings: \"raw\", \"null\", \"string\",\n    \"array\", \"object\", \"true\", \"false\", \"uint\", \"sint\", \"real\", \"unknown\". */\nyyjson_api_inline const char *yyjson_get_type_desc(yyjson_val *val);\n\n/** Returns the content if the value is raw.\n    Returns NULL if `val` is NULL or type is not raw. */\nyyjson_api_inline const char *yyjson_get_raw(yyjson_val *val);\n\n/** Returns the content if the value is bool.\n    Returns NULL if `val` is NULL or type is not bool. */\nyyjson_api_inline bool yyjson_get_bool(yyjson_val *val);\n\n/** Returns the content and cast to uint64_t.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline uint64_t yyjson_get_uint(yyjson_val *val);\n\n/** Returns the content and cast to int64_t.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline int64_t yyjson_get_sint(yyjson_val *val);\n\n/** Returns the content and cast to int.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline int yyjson_get_int(yyjson_val *val);\n\n/** Returns the content if the value is real number, or 0.0 on error.\n    Returns 0.0 if `val` is NULL or type is not real(double). */\nyyjson_api_inline double yyjson_get_real(yyjson_val *val);\n\n/** Returns the content and typecast to `double` if the value is number.\n    Returns 0.0 if `val` is NULL or type is not number(uint/sint/real). */\nyyjson_api_inline double yyjson_get_num(yyjson_val *val);\n\n/** Returns the content if the value is string.\n    Returns NULL if `val` is NULL or type is not string. */\nyyjson_api_inline const char *yyjson_get_str(yyjson_val *val);\n\n/** Returns the content length (string length, array size, object size.\n    Returns 0 if `val` is NULL or type is not string/array/object. */\nyyjson_api_inline size_t yyjson_get_len(yyjson_val *val);\n\n/** Returns whether the JSON value is equals to a string.\n    Returns false if input is NULL or type is not string. */\nyyjson_api_inline bool yyjson_equals_str(yyjson_val *val, const char *str);\n\n/** Returns whether the JSON value is equals to a string.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    Returns false if input is NULL or type is not string. */\nyyjson_api_inline bool yyjson_equals_strn(yyjson_val *val, const char *str,\n                                          size_t len);\n\n/** Returns whether two JSON values are equal (deep compare).\n    Returns false if input is NULL.\n    @note the result may be inaccurate if object has duplicate keys.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api_inline bool yyjson_equals(yyjson_val *lhs, yyjson_val *rhs);\n\n/** Set the value to raw.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_raw(yyjson_val *val,\n                                      const char *raw, size_t len);\n\n/** Set the value to null.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_null(yyjson_val *val);\n\n/** Set the value to bool.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_bool(yyjson_val *val, bool num);\n\n/** Set the value to uint.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_uint(yyjson_val *val, uint64_t num);\n\n/** Set the value to sint.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_sint(yyjson_val *val, int64_t num);\n\n/** Set the value to int.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_int(yyjson_val *val, int num);\n\n/** Set the value to real.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_real(yyjson_val *val, double num);\n\n/** Set the value to string (null-terminated).\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_str(yyjson_val *val, const char *str);\n\n/** Set the value to string (with length).\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_strn(yyjson_val *val,\n                                       const char *str, size_t len);\n\n\n\n/*==============================================================================\n * JSON Array API\n *============================================================================*/\n\n/** Returns the number of elements in this array.\n    Returns 0 if `arr` is NULL or type is not array. */\nyyjson_api_inline size_t yyjson_arr_size(yyjson_val *arr);\n\n/** Returns the element at the specified position in this array.\n    Returns NULL if array is NULL/empty or the index is out of bounds.\n    @warning This function takes a linear search time if array is not flat.\n        For example: `[1,{},3]` is flat, `[1,[2],3]` is not flat. */\nyyjson_api_inline yyjson_val *yyjson_arr_get(yyjson_val *arr, size_t idx);\n\n/** Returns the first element of this array.\n    Returns NULL if `arr` is NULL/empty or type is not array. */\nyyjson_api_inline yyjson_val *yyjson_arr_get_first(yyjson_val *arr);\n\n/** Returns the last element of this array.\n    Returns NULL if `arr` is NULL/empty or type is not array.\n    @warning This function takes a linear search time if array is not flat.\n        For example: `[1,{},3]` is flat, `[1,[2],3]` is not flat.*/\nyyjson_api_inline yyjson_val *yyjson_arr_get_last(yyjson_val *arr);\n\n\n\n/*==============================================================================\n * JSON Array Iterator API\n *============================================================================*/\n\n/**\n A JSON array iterator.\n \n @par Example\n @code\n    yyjson_val *val;\n    yyjson_arr_iter iter = yyjson_arr_iter_with(arr);\n    while ((val = yyjson_arr_iter_next(&iter))) {\n        your_func(val);\n    }\n @endcode\n */\ntypedef struct yyjson_arr_iter {\n    size_t idx; /**< next value's index */\n    size_t max; /**< maximum index (arr.size) */\n    yyjson_val *cur; /**< next value */\n} yyjson_arr_iter;\n\n/**\n Initialize an iterator for this array.\n \n @param arr The array to be iterated over.\n    If this parameter is NULL or not an array, `iter` will be set to empty.\n @param iter The iterator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n @return true if the `iter` has been successfully initialized.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline bool yyjson_arr_iter_init(yyjson_val *arr,\n                                            yyjson_arr_iter *iter);\n\n/**\n Create an iterator with an array , same as `yyjson_arr_iter_init()`.\n \n @param arr The array to be iterated over.\n    If this parameter is NULL or not an array, an empty iterator will returned.\n @return A new iterator for the array.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline yyjson_arr_iter yyjson_arr_iter_with(yyjson_val *arr);\n\n/**\n Returns whether the iteration has more elements.\n If `iter` is NULL, this function will return false.\n */\nyyjson_api_inline bool yyjson_arr_iter_has_next(yyjson_arr_iter *iter);\n\n/**\n Returns the next element in the iteration, or NULL on end.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_val *yyjson_arr_iter_next(yyjson_arr_iter *iter);\n\n/**\n Macro for iterating over an array.\n It works like iterator, but with a more intuitive API.\n \n @par Example\n @code\n    size_t idx, max;\n    yyjson_val *val;\n    yyjson_arr_foreach(arr, idx, max, val) {\n        your_func(idx, val);\n    }\n @endcode\n */\n#define yyjson_arr_foreach(arr, idx, max, val) \\\n    for ((idx) = 0, \\\n        (max) = yyjson_arr_size(arr), \\\n        (val) = yyjson_arr_get_first(arr); \\\n        (idx) < (max); \\\n        (idx)++, \\\n        (val) = unsafe_yyjson_get_next(val))\n\n\n\n/*==============================================================================\n * JSON Object API\n *============================================================================*/\n\n/** Returns the number of key-value pairs in this object.\n    Returns 0 if `obj` is NULL or type is not object. */\nyyjson_api_inline size_t yyjson_obj_size(yyjson_val *obj);\n\n/** Returns the value to which the specified key is mapped.\n    Returns NULL if this object contains no mapping for the key.\n    Returns NULL if `obj/key` is NULL, or type is not object.\n    \n    The `key` should be a null-terminated UTF-8 string.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_val *yyjson_obj_get(yyjson_val *obj, const char *key);\n\n/** Returns the value to which the specified key is mapped.\n    Returns NULL if this object contains no mapping for the key.\n    Returns NULL if `obj/key` is NULL, or type is not object.\n    \n    The `key` should be a UTF-8 string, null-terminator is not required.\n    The `key_len` should be the length of the key, in bytes.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_val *yyjson_obj_getn(yyjson_val *obj, const char *key,\n                                              size_t key_len);\n\n\n\n/*==============================================================================\n * JSON Object Iterator API\n *============================================================================*/\n\n/**\n A JSON object iterator.\n \n @par Example\n @code\n    yyjson_val *key, *val;\n    yyjson_obj_iter iter = yyjson_obj_iter_with(obj);\n    while ((key = yyjson_obj_iter_next(&iter))) {\n        val = yyjson_obj_iter_get_val(key);\n        your_func(key, val);\n    }\n @endcode\n \n If the ordering of the keys is known at compile-time, you can use this method\n to speed up value lookups:\n @code\n    // {\"k1\":1, \"k2\": 3, \"k3\": 3}\n    yyjson_val *key, *val;\n    yyjson_obj_iter iter = yyjson_obj_iter_with(obj);\n    yyjson_val *v1 = yyjson_obj_iter_get(&iter, \"k1\");\n    yyjson_val *v3 = yyjson_obj_iter_get(&iter, \"k3\");\n @endcode\n @see yyjson_obj_iter_get() and yyjson_obj_iter_getn()\n */\ntypedef struct yyjson_obj_iter {\n    size_t idx; /**< next key's index */\n    size_t max; /**< maximum key index (obj.size) */\n    yyjson_val *cur; /**< next key */\n    yyjson_val *obj; /**< the object being iterated */\n} yyjson_obj_iter;\n\n/**\n Initialize an iterator for this object.\n \n @param obj The object to be iterated over.\n    If this parameter is NULL or not an object, `iter` will be set to empty.\n @param iter The iterator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n @return true if the `iter` has been successfully initialized.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline bool yyjson_obj_iter_init(yyjson_val *obj,\n                                            yyjson_obj_iter *iter);\n\n/**\n Create an iterator with an object, same as `yyjson_obj_iter_init()`.\n \n @param obj The object to be iterated over.\n    If this parameter is NULL or not an object, an empty iterator will returned.\n @return A new iterator for the object.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline yyjson_obj_iter yyjson_obj_iter_with(yyjson_val *obj);\n\n/**\n Returns whether the iteration has more elements.\n If `iter` is NULL, this function will return false.\n */\nyyjson_api_inline bool yyjson_obj_iter_has_next(yyjson_obj_iter *iter);\n\n/**\n Returns the next key in the iteration, or NULL on end.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_val *yyjson_obj_iter_next(yyjson_obj_iter *iter);\n\n/**\n Returns the value for key inside the iteration.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_val *yyjson_obj_iter_get_val(yyjson_val *key);\n\n/**\n Iterates to a specified key and returns the value.\n \n This function does the same thing as `yyjson_obj_get()`, but is much faster\n if the ordering of the keys is known at compile-time and you are using the same\n order to look up the values. If the key exists in this object, then the\n iterator will stop at the next key, otherwise the iterator will not change and\n NULL is returned.\n \n @param iter The object iterator, should not be NULL.\n @param key The key, should be a UTF-8 string with null-terminator.\n @return The value to which the specified key is mapped.\n    NULL if this object contains no mapping for the key or input is invalid.\n \n @warning This function takes a linear search time if the key is not nearby.\n */\nyyjson_api_inline yyjson_val *yyjson_obj_iter_get(yyjson_obj_iter *iter,\n                                                  const char *key);\n\n/**\n Iterates to a specified key and returns the value.\n\n This function does the same thing as `yyjson_obj_getn()`, but is much faster\n if the ordering of the keys is known at compile-time and you are using the same\n order to look up the values. If the key exists in this object, then the\n iterator will stop at the next key, otherwise the iterator will not change and\n NULL is returned.\n \n @param iter The object iterator, should not be NULL.\n @param key The key, should be a UTF-8 string, null-terminator is not required.\n @param key_len The the length of `key`, in bytes.\n @return The value to which the specified key is mapped.\n    NULL if this object contains no mapping for the key or input is invalid.\n \n @warning This function takes a linear search time if the key is not nearby.\n */\nyyjson_api_inline yyjson_val *yyjson_obj_iter_getn(yyjson_obj_iter *iter,\n                                                   const char *key,\n                                                   size_t key_len);\n\n/**\n Macro for iterating over an object.\n It works like iterator, but with a more intuitive API.\n \n @par Example\n @code\n    size_t idx, max;\n    yyjson_val *key, *val;\n    yyjson_obj_foreach(obj, idx, max, key, val) {\n        your_func(key, val);\n    }\n @endcode\n */\n#define yyjson_obj_foreach(obj, idx, max, key, val) \\\n    for ((idx) = 0, \\\n        (max) = yyjson_obj_size(obj), \\\n        (key) = (obj) ? unsafe_yyjson_get_first(obj) : NULL, \\\n        (val) = (key) + 1; \\\n        (idx) < (max); \\\n        (idx)++, \\\n        (key) = unsafe_yyjson_get_next(val), \\\n        (val) = (key) + 1)\n\n\n\n/*==============================================================================\n * Mutable JSON Document API\n *============================================================================*/\n\n/** Returns the root value of this JSON document.\n    Returns NULL if `doc` is NULL. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_root(yyjson_mut_doc *doc);\n\n/** Sets the root value of this JSON document.\n    Pass NULL to clear root value of the document. */\nyyjson_api_inline void yyjson_mut_doc_set_root(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *root);\n\n/**\n Set the string pool size for a mutable document.\n This function does not allocate memory immediately, but uses the size when\n the next memory allocation is needed.\n \n If the caller knows the approximate bytes of strings that the document needs to\n store (e.g. copy string with `yyjson_mut_strcpy` function), setting a larger\n size can avoid multiple memory allocations and improve performance.\n \n @param doc The mutable document.\n @param len The desired string pool size in bytes (total string length).\n @return true if successful, false if size is 0 or overflow.\n */\nyyjson_api bool yyjson_mut_doc_set_str_pool_size(yyjson_mut_doc *doc,\n                                                 size_t len);\n\n/**\n Set the value pool size for a mutable document.\n This function does not allocate memory immediately, but uses the size when\n the next memory allocation is needed.\n \n If the caller knows the approximate number of values that the document needs to\n store (e.g. create new value with `yyjson_mut_xxx` functions), setting a larger\n size can avoid multiple memory allocations and improve performance.\n \n @param doc The mutable document.\n @param count The desired value pool size (number of `yyjson_mut_val`).\n @return true if successful, false if size is 0 or overflow.\n */\nyyjson_api bool yyjson_mut_doc_set_val_pool_size(yyjson_mut_doc *doc,\n                                                 size_t count);\n\n/** Release the JSON document and free the memory.\n    After calling this function, the `doc` and all values from the `doc` are no\n    longer available. This function will do nothing if the `doc` is NULL.  */\nyyjson_api void yyjson_mut_doc_free(yyjson_mut_doc *doc);\n\n/** Creates and returns a new mutable JSON document, returns NULL on error.\n    If allocator is NULL, the default allocator will be used. */\nyyjson_api yyjson_mut_doc *yyjson_mut_doc_new(const yyjson_alc *alc);\n\n/** Copies and returns a new mutable document from input, returns NULL on error.\n    This makes a `deep-copy` on the immutable document.\n    If allocator is NULL, the default allocator will be used.\n    @note `imut_doc` -> `mut_doc`. */\nyyjson_api yyjson_mut_doc *yyjson_doc_mut_copy(yyjson_doc *doc,\n                                               const yyjson_alc *alc);\n\n/** Copies and returns a new mutable document from input, returns NULL on error.\n    This makes a `deep-copy` on the mutable document.\n    If allocator is NULL, the default allocator will be used.\n    @note `mut_doc` -> `mut_doc`. */\nyyjson_api yyjson_mut_doc *yyjson_mut_doc_mut_copy(yyjson_mut_doc *doc,\n                                                   const yyjson_alc *alc);\n\n/** Copies and returns a new mutable value from input, returns NULL on error.\n    This makes a `deep-copy` on the immutable value.\n    The memory was managed by mutable document.\n    @note `imut_val` -> `mut_val`. */\nyyjson_api yyjson_mut_val *yyjson_val_mut_copy(yyjson_mut_doc *doc,\n                                               yyjson_val *val);\n\n/** Copies and returns a new mutable value from input, returns NULL on error.\n    This makes a `deep-copy` on the mutable value.\n    The memory was managed by mutable document.\n    @note `mut_val` -> `mut_val`.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api yyjson_mut_val *yyjson_mut_val_mut_copy(yyjson_mut_doc *doc,\n                                                   yyjson_mut_val *val);\n\n/** Copies and returns a new immutable document from input,\n    returns NULL on error. This makes a `deep-copy` on the mutable document.\n    The returned document should be freed with `yyjson_doc_free()`.\n    @note `mut_doc` -> `imut_doc`.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api yyjson_doc *yyjson_mut_doc_imut_copy(yyjson_mut_doc *doc,\n                                                const yyjson_alc *alc);\n\n/** Copies and returns a new immutable document from input,\n    returns NULL on error. This makes a `deep-copy` on the mutable value.\n    The returned document should be freed with `yyjson_doc_free()`.\n    @note `mut_val` -> `imut_doc`.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api yyjson_doc *yyjson_mut_val_imut_copy(yyjson_mut_val *val,\n                                                const yyjson_alc *alc);\n\n\n\n/*==============================================================================\n * Mutable JSON Value Type API\n *============================================================================*/\n\n/** Returns whether the JSON value is raw.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_raw(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is `null`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_null(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is `true`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_true(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is `false`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_false(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is bool (true/false).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_bool(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is unsigned integer (uint64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_uint(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is signed integer (int64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_sint(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is integer (uint64_t/int64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_int(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is real number (double).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_real(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is number (uint/sint/real).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_num(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is string.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_str(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is array.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_arr(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is object.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_obj(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is container (array/object).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_ctn(yyjson_mut_val *val);\n\n\n\n/*==============================================================================\n * Mutable JSON Value Content API\n *============================================================================*/\n\n/** Returns the JSON value's type.\n    Returns `YYJSON_TYPE_NONE` if `val` is NULL. */\nyyjson_api_inline yyjson_type yyjson_mut_get_type(yyjson_mut_val *val);\n\n/** Returns the JSON value's subtype.\n    Returns `YYJSON_SUBTYPE_NONE` if `val` is NULL. */\nyyjson_api_inline yyjson_subtype yyjson_mut_get_subtype(yyjson_mut_val *val);\n\n/** Returns the JSON value's tag.\n    Returns 0 if `val` is NULL. */\nyyjson_api_inline uint8_t yyjson_mut_get_tag(yyjson_mut_val *val);\n\n/** Returns the JSON value's type description.\n    The return value should be one of these strings: \"raw\", \"null\", \"string\",\n    \"array\", \"object\", \"true\", \"false\", \"uint\", \"sint\", \"real\", \"unknown\". */\nyyjson_api_inline const char *yyjson_mut_get_type_desc(yyjson_mut_val *val);\n\n/** Returns the content if the value is raw.\n    Returns NULL if `val` is NULL or type is not raw. */\nyyjson_api_inline const char *yyjson_mut_get_raw(yyjson_mut_val *val);\n\n/** Returns the content if the value is bool.\n    Returns NULL if `val` is NULL or type is not bool. */\nyyjson_api_inline bool yyjson_mut_get_bool(yyjson_mut_val *val);\n\n/** Returns the content and cast to uint64_t.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline uint64_t yyjson_mut_get_uint(yyjson_mut_val *val);\n\n/** Returns the content and cast to int64_t.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline int64_t yyjson_mut_get_sint(yyjson_mut_val *val);\n\n/** Returns the content and cast to int.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline int yyjson_mut_get_int(yyjson_mut_val *val);\n\n/** Returns the content if the value is real number.\n    Returns 0.0 if `val` is NULL or type is not real(double). */\nyyjson_api_inline double yyjson_mut_get_real(yyjson_mut_val *val);\n\n/** Returns the content and typecast to `double` if the value is number.\n    Returns 0.0 if `val` is NULL or type is not number(uint/sint/real). */\nyyjson_api_inline double yyjson_mut_get_num(yyjson_mut_val *val);\n\n/** Returns the content if the value is string.\n    Returns NULL if `val` is NULL or type is not string. */\nyyjson_api_inline const char *yyjson_mut_get_str(yyjson_mut_val *val);\n\n/** Returns the content length (string length, array size, object size.\n    Returns 0 if `val` is NULL or type is not string/array/object. */\nyyjson_api_inline size_t yyjson_mut_get_len(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is equals to a string.\n    The `str` should be a null-terminated UTF-8 string.\n    Returns false if input is NULL or type is not string. */\nyyjson_api_inline bool yyjson_mut_equals_str(yyjson_mut_val *val,\n                                             const char *str);\n\n/** Returns whether the JSON value is equals to a string.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    Returns false if input is NULL or type is not string. */\nyyjson_api_inline bool yyjson_mut_equals_strn(yyjson_mut_val *val,\n                                              const char *str, size_t len);\n\n/** Returns whether two JSON values are equal (deep compare).\n    Returns false if input is NULL.\n    @note the result may be inaccurate if object has duplicate keys.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api_inline bool yyjson_mut_equals(yyjson_mut_val *lhs,\n                                         yyjson_mut_val *rhs);\n\n/** Set the value to raw.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_raw(yyjson_mut_val *val,\n                                          const char *raw, size_t len);\n\n/** Set the value to null.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_null(yyjson_mut_val *val);\n\n/** Set the value to bool.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_bool(yyjson_mut_val *val, bool num);\n\n/** Set the value to uint.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_uint(yyjson_mut_val *val, uint64_t num);\n\n/** Set the value to sint.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_sint(yyjson_mut_val *val, int64_t num);\n\n/** Set the value to int.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_int(yyjson_mut_val *val, int num);\n\n/** Set the value to real.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_real(yyjson_mut_val *val, double num);\n\n/** Set the value to string (null-terminated).\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_str(yyjson_mut_val *val, const char *str);\n\n/** Set the value to string (with length).\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_strn(yyjson_mut_val *val,\n                                           const char *str, size_t len);\n\n/** Set the value to array.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_arr(yyjson_mut_val *val);\n\n/** Set the value to array.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_obj(yyjson_mut_val *val);\n\n\n\n/*==============================================================================\n * Mutable JSON Value Creation API\n *============================================================================*/\n\n/** Creates and returns a raw value, returns NULL on error.\n    The `str` should be a null-terminated UTF-8 string.\n    \n    @warning The input string is not copied, you should keep this string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_raw(yyjson_mut_doc *doc,\n                                                 const char *str);\n\n/** Creates and returns a raw value, returns NULL on error.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    \n    @warning The input string is not copied, you should keep this string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawn(yyjson_mut_doc *doc,\n                                                  const char *str,\n                                                  size_t len);\n\n/** Creates and returns a raw value, returns NULL on error.\n    The `str` should be a null-terminated UTF-8 string.\n    The input string is copied and held by the document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawcpy(yyjson_mut_doc *doc,\n                                                    const char *str);\n\n/** Creates and returns a raw value, returns NULL on error.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    The input string is copied and held by the document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawncpy(yyjson_mut_doc *doc,\n                                                     const char *str,\n                                                     size_t len);\n\n/** Creates and returns a null value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_null(yyjson_mut_doc *doc);\n\n/** Creates and returns a true value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_true(yyjson_mut_doc *doc);\n\n/** Creates and returns a false value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_false(yyjson_mut_doc *doc);\n\n/** Creates and returns a bool value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_bool(yyjson_mut_doc *doc,\n                                                  bool val);\n\n/** Creates and returns an unsigned integer value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_uint(yyjson_mut_doc *doc,\n                                                  uint64_t num);\n\n/** Creates and returns a signed integer value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_sint(yyjson_mut_doc *doc,\n                                                  int64_t num);\n\n/** Creates and returns a signed integer value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_int(yyjson_mut_doc *doc,\n                                                 int64_t num);\n\n/** Creates and returns an real number value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_real(yyjson_mut_doc *doc,\n                                                  double num);\n\n/** Creates and returns a string value, returns NULL on error.\n    The `str` should be a null-terminated UTF-8 string.\n    @warning The input string is not copied, you should keep this string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_str(yyjson_mut_doc *doc,\n                                                 const char *str);\n\n/** Creates and returns a string value, returns NULL on error.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    @warning The input string is not copied, you should keep this string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strn(yyjson_mut_doc *doc,\n                                                  const char *str,\n                                                  size_t len);\n\n/** Creates and returns a string value, returns NULL on error.\n    The `str` should be a null-terminated UTF-8 string.\n    The input string is copied and held by the document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strcpy(yyjson_mut_doc *doc,\n                                                    const char *str);\n\n/** Creates and returns a string value, returns NULL on error.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    The input string is copied and held by the document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strncpy(yyjson_mut_doc *doc,\n                                                     const char *str,\n                                                     size_t len);\n\n\n\n/*==============================================================================\n * Mutable JSON Array API\n *============================================================================*/\n\n/** Returns the number of elements in this array.\n    Returns 0 if `arr` is NULL or type is not array. */\nyyjson_api_inline size_t yyjson_mut_arr_size(yyjson_mut_val *arr);\n\n/** Returns the element at the specified position in this array.\n    Returns NULL if array is NULL/empty or the index is out of bounds.\n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get(yyjson_mut_val *arr,\n                                                     size_t idx);\n\n/** Returns the first element of this array.\n    Returns NULL if `arr` is NULL/empty or type is not array. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_first(yyjson_mut_val *arr);\n\n/** Returns the last element of this array.\n    Returns NULL if `arr` is NULL/empty or type is not array. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_last(yyjson_mut_val *arr);\n\n\n\n/*==============================================================================\n * Mutable JSON Array Iterator API\n *============================================================================*/\n\n/**\n A mutable JSON array iterator.\n \n @warning You should not modify the array while iterating over it, but you can\n    use `yyjson_mut_arr_iter_remove()` to remove current value.\n \n @par Example\n @code\n    yyjson_mut_val *val;\n    yyjson_mut_arr_iter iter = yyjson_mut_arr_iter_with(arr);\n    while ((val = yyjson_mut_arr_iter_next(&iter))) {\n        your_func(val);\n        if (your_val_is_unused(val)) {\n            yyjson_mut_arr_iter_remove(&iter);\n        }\n    }\n @endcode\n */\ntypedef struct yyjson_mut_arr_iter {\n    size_t idx; /**< next value's index */\n    size_t max; /**< maximum index (arr.size) */\n    yyjson_mut_val *cur; /**< current value */\n    yyjson_mut_val *pre; /**< previous value */\n    yyjson_mut_val *arr; /**< the array being iterated */\n} yyjson_mut_arr_iter;\n\n/**\n Initialize an iterator for this array.\n \n @param arr The array to be iterated over.\n    If this parameter is NULL or not an array, `iter` will be set to empty.\n @param iter The iterator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n @return true if the `iter` has been successfully initialized.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline bool yyjson_mut_arr_iter_init(yyjson_mut_val *arr,\n    yyjson_mut_arr_iter *iter);\n\n/**\n Create an iterator with an array , same as `yyjson_mut_arr_iter_init()`.\n \n @param arr The array to be iterated over.\n    If this parameter is NULL or not an array, an empty iterator will returned.\n @return A new iterator for the array.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline yyjson_mut_arr_iter yyjson_mut_arr_iter_with(\n    yyjson_mut_val *arr);\n\n/**\n Returns whether the iteration has more elements.\n If `iter` is NULL, this function will return false.\n */\nyyjson_api_inline bool yyjson_mut_arr_iter_has_next(\n    yyjson_mut_arr_iter *iter);\n\n/**\n Returns the next element in the iteration, or NULL on end.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_next(\n    yyjson_mut_arr_iter *iter);\n\n/**\n Removes and returns current element in the iteration.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_remove(\n    yyjson_mut_arr_iter *iter);\n\n/**\n Macro for iterating over an array.\n It works like iterator, but with a more intuitive API.\n \n @warning You should not modify the array while iterating over it.\n \n @par Example\n @code\n    size_t idx, max;\n    yyjson_mut_val *val;\n    yyjson_mut_arr_foreach(arr, idx, max, val) {\n        your_func(idx, val);\n    }\n @endcode\n */\n#define yyjson_mut_arr_foreach(arr, idx, max, val) \\\n    for ((idx) = 0, \\\n        (max) = yyjson_mut_arr_size(arr), \\\n        (val) = yyjson_mut_arr_get_first(arr); \\\n        (idx) < (max); \\\n        (idx)++, \\\n        (val) = (val)->next)\n\n\n\n/*==============================================================================\n * Mutable JSON Array Creation API\n *============================================================================*/\n\n/**\n Creates and returns an empty mutable array.\n @param doc A mutable document, used for memory allocation only.\n @return The new array. NULL if input is NULL or memory allocation failed.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr(yyjson_mut_doc *doc);\n\n/**\n Creates and returns a new mutable array with the given boolean values.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of boolean values.\n @param count The value count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const bool vals[3] = { true, false, true };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_bool(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_bool(\n    yyjson_mut_doc *doc, const bool *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given sint numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of sint numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int64_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint64(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint(\n    yyjson_mut_doc *doc, const int64_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const uint64_t vals[3] = { 0, 1, 0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_uint(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint(\n    yyjson_mut_doc *doc, const uint64_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given real numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of real numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const double vals[3] = { 0.1, 0.2, 0.3 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_real(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_real(\n    yyjson_mut_doc *doc, const double *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given int8 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of int8 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int8_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint8(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint8(\n    yyjson_mut_doc *doc, const int8_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given int16 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of int16 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int16_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint16(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint16(\n    yyjson_mut_doc *doc, const int16_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given int32 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of int32 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int32_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint32(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint32(\n    yyjson_mut_doc *doc, const int32_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given int64 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of int64 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int64_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint64(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint64(\n    yyjson_mut_doc *doc, const int64_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint8 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint8 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const uint8_t vals[3] = { 0, 1, 0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_uint8(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint8(\n    yyjson_mut_doc *doc, const uint8_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint16 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint16 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const uint16_t vals[3] = { 0, 1, 0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_uint16(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint16(\n    yyjson_mut_doc *doc, const uint16_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint32 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint32 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const uint32_t vals[3] = { 0, 1, 0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_uint32(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint32(\n    yyjson_mut_doc *doc, const uint32_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint64 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint64 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n     const uint64_t vals[3] = { 0, 1, 0 };\n     yyjson_mut_val *arr = yyjson_mut_arr_with_uint64(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint64(\n    yyjson_mut_doc *doc, const uint64_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given float numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of float numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const float vals[3] = { -1.0f, 0.0f, 1.0f };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_float(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_float(\n    yyjson_mut_doc *doc, const float *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given double numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of double numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const double vals[3] = { -1.0, 0.0, 1.0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_double(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_double(\n    yyjson_mut_doc *doc, const double *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given strings, these strings\n will not be copied.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of UTF-8 null-terminator strings.\n    If this array contains NULL, the function will fail and return NULL.\n @param count The number of values in `vals`.\n    If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @warning The input strings are not copied, you should keep these strings\n    unmodified for the lifetime of this JSON document. If these strings will be\n    modified, you should use `yyjson_mut_arr_with_strcpy()` instead.\n \n @par Example\n @code\n    const char *vals[3] = { \"a\", \"b\", \"c\" };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_str(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_str(\n    yyjson_mut_doc *doc, const char **vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given strings and string\n lengths, these strings will not be copied.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of UTF-8 strings, null-terminator is not required.\n    If this array contains NULL, the function will fail and return NULL.\n @param lens A C array of string lengths, in bytes.\n @param count The number of strings in `vals`.\n    If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @warning The input strings are not copied, you should keep these strings\n    unmodified for the lifetime of this JSON document. If these strings will be\n    modified, you should use `yyjson_mut_arr_with_strncpy()` instead.\n \n @par Example\n @code\n    const char *vals[3] = { \"a\", \"bb\", \"c\" };\n    const size_t lens[3] = { 1, 2, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_strn(doc, vals, lens, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strn(\n    yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count);\n\n/**\n Creates and returns a new mutable array with the given strings, these strings\n will be copied.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of UTF-8 null-terminator strings.\n    If this array contains NULL, the function will fail and return NULL.\n @param count The number of values in `vals`.\n    If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const char *vals[3] = { \"a\", \"b\", \"c\" };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_strcpy(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strcpy(\n    yyjson_mut_doc *doc, const char **vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given strings and string\n lengths, these strings will be copied.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of UTF-8 strings, null-terminator is not required.\n    If this array contains NULL, the function will fail and return NULL.\n @param lens A C array of string lengths, in bytes.\n @param count The number of strings in `vals`.\n    If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const char *vals[3] = { \"a\", \"bb\", \"c\" };\n    const size_t lens[3] = { 1, 2, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_strn(doc, vals, lens, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strncpy(\n    yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count);\n\n\n\n/*==============================================================================\n * Mutable JSON Array Modification API\n *============================================================================*/\n\n/**\n Inserts a value into an array at a given index.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The value to be inserted. Returns false if it is NULL.\n @param idx The index to which to insert the new value.\n    Returns false if the index is out of range.\n @return Whether successful.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_arr_insert(yyjson_mut_val *arr,\n                                             yyjson_mut_val *val, size_t idx);\n\n/**\n Inserts a value at the end of the array.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The value to be inserted. Returns false if it is NULL.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_append(yyjson_mut_val *arr,\n                                             yyjson_mut_val *val);\n\n/**\n Inserts a value at the head of the array.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The value to be inserted. Returns false if it is NULL.\n @return    Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_prepend(yyjson_mut_val *arr,\n                                              yyjson_mut_val *val);\n\n/**\n Replaces a value at index and returns old value.\n @param arr The array to which the value is to be replaced.\n    Returns false if it is NULL or not an array.\n @param idx The index to which to replace the value.\n    Returns false if the index is out of range.\n @param val The new value to replace. Returns false if it is NULL.\n @return Old value, or NULL on error.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_replace(yyjson_mut_val *arr,\n                                                         size_t idx,\n                                                         yyjson_mut_val *val);\n\n/**\n Removes and returns a value at index.\n @param arr The array from which the value is to be removed.\n    Returns false if it is NULL or not an array.\n @param idx The index from which to remove the value.\n    Returns false if the index is out of range.\n @return Old value, or NULL on error.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove(yyjson_mut_val *arr,\n                                                        size_t idx);\n\n/**\n Removes and returns the first value in this array.\n @param arr The array from which the value is to be removed.\n    Returns false if it is NULL or not an array.\n @return The first value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_first(\n    yyjson_mut_val *arr);\n\n/**\n Removes and returns the last value in this array.\n @param arr The array from which the value is to be removed.\n    Returns false if it is NULL or not an array.\n @return The last value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_last(\n    yyjson_mut_val *arr);\n\n/**\n Removes all values within a specified range in the array.\n @param arr The array from which the value is to be removed.\n    Returns false if it is NULL or not an array.\n @param idx The start index of the range (0 is the first).\n @param len The number of items in the range (can be 0).\n @return Whether successful.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_arr_remove_range(yyjson_mut_val *arr,\n                                                   size_t idx, size_t len);\n\n/**\n Removes all values in this array.\n @param arr The array from which all of the values are to be removed.\n    Returns false if it is NULL or not an array.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_clear(yyjson_mut_val *arr);\n\n/**\n Rotates values in this array for the given number of times.\n For example: `[1,2,3,4,5]` rotate 2 is `[3,4,5,1,2]`.\n @param arr The array to be rotated.\n @param idx Index (or times) to rotate.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_arr_rotate(yyjson_mut_val *arr,\n                                             size_t idx);\n\n\n\n/*==============================================================================\n * Mutable JSON Array Modification Convenience API\n *============================================================================*/\n\n/**\n Adds a value at the end of the array.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The value to be inserted. Returns false if it is NULL.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_val(yyjson_mut_val *arr,\n                                              yyjson_mut_val *val);\n\n/**\n Adds a `null` value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_null(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr);\n\n/**\n Adds a `true` value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_true(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr);\n\n/**\n Adds a `false` value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_false(yyjson_mut_doc *doc,\n                                                yyjson_mut_val *arr);\n\n/**\n Adds a bool value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The bool value to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_bool(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               bool val);\n\n/**\n Adds an unsigned integer value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param num The number to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_uint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               uint64_t num);\n\n/**\n Adds a signed integer value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param num The number to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_sint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               int64_t num);\n\n/**\n Adds a integer value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param num The number to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_int(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *arr,\n                                              int64_t num);\n\n/**\n Adds a double value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param num The number to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_real(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               double num);\n\n/**\n Adds a string value at the end of the array (no copy).\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param str A null-terminated UTF-8 string.\n @return Whether successful.\n @warning The input string is not copied, you should keep this string unmodified\n    for the lifetime of this JSON document.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_str(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *arr,\n                                              const char *str);\n\n/**\n Adds a string value at the end of the array (no copy).\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param str A UTF-8 string, null-terminator is not required.\n @param len The length of the string, in bytes.\n @return Whether successful.\n @warning The input string is not copied, you should keep this string unmodified\n    for the lifetime of this JSON document.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_strn(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               const char *str,\n                                               size_t len);\n\n/**\n Adds a string value at the end of the array (copied).\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param str A null-terminated UTF-8 string.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_strcpy(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *arr,\n                                                 const char *str);\n\n/**\n Adds a string value at the end of the array (copied).\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param str A UTF-8 string, null-terminator is not required.\n @param len The length of the string, in bytes.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_strncpy(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *arr,\n                                                  const char *str,\n                                                  size_t len);\n\n/**\n Creates and adds a new array at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return The new array, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_arr(yyjson_mut_doc *doc,\n                                                         yyjson_mut_val *arr);\n\n/**\n Creates and adds a new object at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return The new object, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_obj(yyjson_mut_doc *doc,\n                                                         yyjson_mut_val *arr);\n\n\n\n/*==============================================================================\n * Mutable JSON Object API\n *============================================================================*/\n\n/** Returns the number of key-value pairs in this object.\n    Returns 0 if `obj` is NULL or type is not object. */\nyyjson_api_inline size_t yyjson_mut_obj_size(yyjson_mut_val *obj);\n\n/** Returns the value to which the specified key is mapped.\n    Returns NULL if this object contains no mapping for the key.\n    Returns NULL if `obj/key` is NULL, or type is not object.\n    \n    The `key` should be a null-terminated UTF-8 string.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_get(yyjson_mut_val *obj,\n                                                     const char *key);\n\n/** Returns the value to which the specified key is mapped.\n    Returns NULL if this object contains no mapping for the key.\n    Returns NULL if `obj/key` is NULL, or type is not object.\n    \n    The `key` should be a UTF-8 string, null-terminator is not required.\n    The `key_len` should be the length of the key, in bytes.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_getn(yyjson_mut_val *obj,\n                                                      const char *key,\n                                                      size_t key_len);\n\n\n\n/*==============================================================================\n * Mutable JSON Object Iterator API\n *============================================================================*/\n\n/**\n A mutable JSON object iterator.\n \n @warning You should not modify the object while iterating over it, but you can\n    use `yyjson_mut_obj_iter_remove()` to remove current value.\n \n @par Example\n @code\n    yyjson_mut_val *key, *val;\n    yyjson_mut_obj_iter iter = yyjson_mut_obj_iter_with(obj);\n    while ((key = yyjson_mut_obj_iter_next(&iter))) {\n        val = yyjson_mut_obj_iter_get_val(key);\n        your_func(key, val);\n        if (your_val_is_unused(key, val)) {\n            yyjson_mut_obj_iter_remove(&iter);\n        }\n    }\n @endcode\n \n If the ordering of the keys is known at compile-time, you can use this method\n to speed up value lookups:\n @code\n    // {\"k1\":1, \"k2\": 3, \"k3\": 3}\n    yyjson_mut_val *key, *val;\n    yyjson_mut_obj_iter iter = yyjson_mut_obj_iter_with(obj);\n    yyjson_mut_val *v1 = yyjson_mut_obj_iter_get(&iter, \"k1\");\n    yyjson_mut_val *v3 = yyjson_mut_obj_iter_get(&iter, \"k3\");\n @endcode\n @see `yyjson_mut_obj_iter_get()` and `yyjson_mut_obj_iter_getn()`\n */\ntypedef struct yyjson_mut_obj_iter {\n    size_t idx; /**< next key's index */\n    size_t max; /**< maximum key index (obj.size) */\n    yyjson_mut_val *cur; /**< current key */\n    yyjson_mut_val *pre; /**< previous key */\n    yyjson_mut_val *obj; /**< the object being iterated */\n} yyjson_mut_obj_iter;\n\n/**\n Initialize an iterator for this object.\n \n @param obj The object to be iterated over.\n    If this parameter is NULL or not an array, `iter` will be set to empty.\n @param iter The iterator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n @return true if the `iter` has been successfully initialized.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline bool yyjson_mut_obj_iter_init(yyjson_mut_val *obj,\n    yyjson_mut_obj_iter *iter);\n\n/**\n Create an iterator with an object, same as `yyjson_obj_iter_init()`.\n \n @param obj The object to be iterated over.\n    If this parameter is NULL or not an object, an empty iterator will returned.\n @return A new iterator for the object.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline yyjson_mut_obj_iter yyjson_mut_obj_iter_with(\n    yyjson_mut_val *obj);\n\n/**\n Returns whether the iteration has more elements.\n If `iter` is NULL, this function will return false.\n */\nyyjson_api_inline bool yyjson_mut_obj_iter_has_next(\n    yyjson_mut_obj_iter *iter);\n\n/**\n Returns the next key in the iteration, or NULL on end.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_next(\n    yyjson_mut_obj_iter *iter);\n\n/**\n Returns the value for key inside the iteration.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get_val(\n    yyjson_mut_val *key);\n\n/**\n Removes current key-value pair in the iteration, returns the removed value.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_remove(\n    yyjson_mut_obj_iter *iter);\n\n/**\n Iterates to a specified key and returns the value.\n \n This function does the same thing as `yyjson_mut_obj_get()`, but is much faster\n if the ordering of the keys is known at compile-time and you are using the same\n order to look up the values. If the key exists in this object, then the\n iterator will stop at the next key, otherwise the iterator will not change and\n NULL is returned.\n \n @param iter The object iterator, should not be NULL.\n @param key The key, should be a UTF-8 string with null-terminator.\n @return The value to which the specified key is mapped.\n    NULL if this object contains no mapping for the key or input is invalid.\n \n @warning This function takes a linear search time if the key is not nearby.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get(\n    yyjson_mut_obj_iter *iter, const char *key);\n\n/**\n Iterates to a specified key and returns the value.\n \n This function does the same thing as `yyjson_mut_obj_getn()` but is much faster\n if the ordering of the keys is known at compile-time and you are using the same\n order to look up the values. If the key exists in this object, then the\n iterator will stop at the next key, otherwise the iterator will not change and\n NULL is returned.\n \n @param iter The object iterator, should not be NULL.\n @param key The key, should be a UTF-8 string, null-terminator is not required.\n @param key_len The the length of `key`, in bytes.\n @return The value to which the specified key is mapped.\n    NULL if this object contains no mapping for the key or input is invalid.\n \n @warning This function takes a linear search time if the key is not nearby.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_getn(\n    yyjson_mut_obj_iter *iter, const char *key, size_t key_len);\n\n/**\n Macro for iterating over an object.\n It works like iterator, but with a more intuitive API.\n \n @warning You should not modify the object while iterating over it.\n \n @par Example\n @code\n    size_t idx, max;\n    yyjson_val *key, *val;\n    yyjson_obj_foreach(obj, idx, max, key, val) {\n        your_func(key, val);\n    }\n @endcode\n */\n#define yyjson_mut_obj_foreach(obj, idx, max, key, val) \\\n    for ((idx) = 0, \\\n        (max) = yyjson_mut_obj_size(obj), \\\n        (key) = (max) ? ((yyjson_mut_val *)(obj)->uni.ptr)->next->next : NULL, \\\n        (val) = (key) ? (key)->next : NULL; \\\n        (idx) < (max); \\\n        (idx)++, \\\n        (key) = (val)->next, \\\n        (val) = (key)->next)\n\n\n\n/*==============================================================================\n * Mutable JSON Object Creation API\n *============================================================================*/\n\n/** Creates and returns a mutable object, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj(yyjson_mut_doc *doc);\n\n/**\n Creates and returns a mutable object with keys and values, returns NULL on\n error. The keys and values are not copied. The strings should be a\n null-terminated UTF-8 string.\n \n @warning The input string is not copied, you should keep this string\n    unmodified for the lifetime of this JSON document.\n \n @par Example\n @code\n    const char *keys[2] = { \"id\", \"name\" };\n    const char *vals[2] = { \"01\", \"Harry\" };\n    yyjson_mut_val *obj = yyjson_mut_obj_with_str(doc, keys, vals, 2);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_str(yyjson_mut_doc *doc,\n                                                          const char **keys,\n                                                          const char **vals,\n                                                          size_t count);\n\n/**\n Creates and returns a mutable object with key-value pairs and pair count,\n returns NULL on error. The keys and values are not copied. The strings should\n be a null-terminated UTF-8 string.\n \n @warning The input string is not copied, you should keep this string\n    unmodified for the lifetime of this JSON document.\n \n @par Example\n @code\n    const char *kv_pairs[4] = { \"id\", \"01\", \"name\", \"Harry\" };\n    yyjson_mut_val *obj = yyjson_mut_obj_with_kv(doc, kv_pairs, 2);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_kv(yyjson_mut_doc *doc,\n                                                         const char **kv_pairs,\n                                                         size_t pair_count);\n\n\n\n/*==============================================================================\n * Mutable JSON Object Modification API\n *============================================================================*/\n\n/**\n Adds a key-value pair at the end of the object.\n This function allows duplicated key in one object.\n @param obj The object to which the new key-value pair is to be added.\n @param key The key, should be a string which is created by `yyjson_mut_str()`,\n    `yyjson_mut_strn()`, `yyjson_mut_strcpy()` or `yyjson_mut_strncpy()`.\n @param val The value to add to the object.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_obj_add(yyjson_mut_val *obj,\n                                          yyjson_mut_val *key,\n                                          yyjson_mut_val *val);\n/**\n Sets a key-value pair at the end of the object.\n This function may remove all key-value pairs for the given key before add.\n @param obj The object to which the new key-value pair is to be added.\n @param key The key, should be a string which is created by `yyjson_mut_str()`,\n    `yyjson_mut_strn()`, `yyjson_mut_strcpy()` or `yyjson_mut_strncpy()`.\n @param val The value to add to the object. If this value is null, the behavior\n    is same as `yyjson_mut_obj_remove()`.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_obj_put(yyjson_mut_val *obj,\n                                          yyjson_mut_val *key,\n                                          yyjson_mut_val *val);\n\n/**\n Inserts a key-value pair to the object at the given position.\n This function allows duplicated key in one object.\n @param obj The object to which the new key-value pair is to be added.\n @param key The key, should be a string which is created by `yyjson_mut_str()`,\n    `yyjson_mut_strn()`, `yyjson_mut_strcpy()` or `yyjson_mut_strncpy()`.\n @param val The value to add to the object.\n @param idx The index to which to insert the new pair.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_obj_insert(yyjson_mut_val *obj,\n                                             yyjson_mut_val *key,\n                                             yyjson_mut_val *val,\n                                             size_t idx);\n\n/**\n Removes all key-value pair from the object with given key.\n @param obj The object from which the key-value pair is to be removed.\n @param key The key, should be a string value.\n @return The first matched value, or NULL if no matched value.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove(yyjson_mut_val *obj,\n                                                        yyjson_mut_val *key);\n\n/**\n Removes all key-value pair from the object with given key.\n @param obj The object from which the key-value pair is to be removed.\n @param key The key, should be a UTF-8 string with null-terminator.\n @return The first matched value, or NULL if no matched value.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_key(\n    yyjson_mut_val *obj, const char *key);\n\n/**\n Removes all key-value pair from the object with given key.\n @param obj The object from which the key-value pair is to be removed.\n @param key The key, should be a UTF-8 string, null-terminator is not required.\n @param key_len The length of the key.\n @return The first matched value, or NULL if no matched value.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_keyn(\n    yyjson_mut_val *obj, const char *key, size_t key_len);\n\n/**\n Removes all key-value pairs in this object.\n @param obj The object from which all of the values are to be removed.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_obj_clear(yyjson_mut_val *obj);\n\n/**\n Replaces value from the object with given key.\n If the key is not exist, or the value is NULL, it will fail.\n @param obj The object to which the value is to be replaced.\n @param key The key, should be a string value.\n @param val The value to replace into the object.\n @return Whether successful.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_obj_replace(yyjson_mut_val *obj,\n                                              yyjson_mut_val *key,\n                                              yyjson_mut_val *val);\n\n/**\n Rotates key-value pairs in the object for the given number of times.\n For example: `{\"a\":1,\"b\":2,\"c\":3,\"d\":4}` rotate 1 is\n `{\"b\":2,\"c\":3,\"d\":4,\"a\":1}`.\n @param obj The object to be rotated.\n @param idx Index (or times) to rotate.\n @return Whether successful.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_obj_rotate(yyjson_mut_val *obj,\n                                             size_t idx);\n\n\n\n/*==============================================================================\n * Mutable JSON Object Modification Convenience API\n *============================================================================*/\n\n/** Adds a `null` value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_null(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key);\n\n/** Adds a `true` value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_true(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key);\n\n/** Adds a `false` value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_false(yyjson_mut_doc *doc,\n                                                yyjson_mut_val *obj,\n                                                const char *key);\n\n/** Adds a bool value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_bool(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key, bool val);\n\n/** Adds an unsigned integer value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_uint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key, uint64_t val);\n\n/** Adds a signed integer value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_sint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key, int64_t val);\n\n/** Adds an int value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_int(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *key, int64_t val);\n\n/** Adds a double value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_real(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key, double val);\n\n/** Adds a string value at the end of the object.\n    The `key` and `val` should be null-terminated UTF-8 strings.\n    This function allows duplicated key in one object.\n    \n    @warning The key/value string are not copied, you should keep these strings\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_str(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *key, const char *val);\n\n/** Adds a string value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    The `val` should be a UTF-8 string, null-terminator is not required.\n    The `len` should be the length of the `val`, in bytes.\n    This function allows duplicated key in one object.\n    \n    @warning The key/value string are not copied, you should keep these strings\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_strn(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key,\n                                               const char *val, size_t len);\n\n/** Adds a string value at the end of the object.\n    The `key` and `val` should be null-terminated UTF-8 strings.\n    The value string is copied.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_strcpy(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *obj,\n                                                 const char *key,\n                                                 const char *val);\n\n/** Adds a string value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    The `val` should be a UTF-8 string, null-terminator is not required.\n    The `len` should be the length of the `val`, in bytes.\n    This function allows duplicated key in one object.\n    \n    @warning The key/value string are not copied, you should keep these strings\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_strncpy(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *obj,\n                                                  const char *key,\n                                                  const char *val, size_t len);\n\n/** Adds a JSON value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_val(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *key,\n                                              yyjson_mut_val *val);\n\n/** Removes all key-value pairs for the given key.\n    Returns the first value to which the specified key is mapped or NULL if this\n    object contains no mapping for the key.\n    The `key` should be a null-terminated UTF-8 string.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_str(\n    yyjson_mut_val *obj, const char *key);\n\n/** Removes all key-value pairs for the given key.\n    Returns the first value to which the specified key is mapped or NULL if this\n    object contains no mapping for the key.\n    The `key` should be a UTF-8 string, null-terminator is not required.\n    The `len` should be the length of the key, in bytes.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_strn(\n    yyjson_mut_val *obj, const char *key, size_t len);\n\n/** Replaces all matching keys with the new key.\n    Returns true if at least one key was renamed.\n    The `key` and `new_key` should be a null-terminated UTF-8 string.\n    The `new_key` is copied and held by doc.\n    \n    @warning This function takes a linear search time.\n    If `new_key` already exists, it will cause duplicate keys.\n */\nyyjson_api_inline bool yyjson_mut_obj_rename_key(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *obj,\n                                                 const char *key,\n                                                 const char *new_key);\n\n/** Replaces all matching keys with the new key.\n    Returns true if at least one key was renamed.\n    The `key` and `new_key` should be a UTF-8 string,\n    null-terminator is not required. The `new_key` is copied and held by doc.\n    \n    @warning This function takes a linear search time.\n    If `new_key` already exists, it will cause duplicate keys.\n */\nyyjson_api_inline bool yyjson_mut_obj_rename_keyn(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *obj,\n                                                  const char *key,\n                                                  size_t len,\n                                                  const char *new_key,\n                                                  size_t new_len);\n\n\n\n/*==============================================================================\n * JSON Pointer API (RFC 6901)\n * https://tools.ietf.org/html/rfc6901\n *============================================================================*/\n\n/** JSON Pointer error code. */\ntypedef uint32_t yyjson_ptr_code;\n\n/** No JSON pointer error. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_NONE = 0;\n\n/** Invalid input parameter, such as NULL input. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_PARAMETER = 1;\n\n/** JSON pointer syntax error, such as invalid escape, token no prefix. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_SYNTAX = 2;\n\n/** JSON pointer resolve failed, such as index out of range, key not found. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_RESOLVE = 3;\n\n/** Document's root is NULL, but it is required for the function call. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_NULL_ROOT = 4;\n\n/** Cannot set root as the target is not a document. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_SET_ROOT = 5;\n\n/** The memory allocation failed and a new value could not be created. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_MEMORY_ALLOCATION = 6;\n\n/** Error information for JSON pointer. */\ntypedef struct yyjson_ptr_err {\n    /** Error code, see `yyjson_ptr_code` for all possible values. */\n    yyjson_ptr_code code;\n    /** Error message, constant, no need to free (NULL if no error). */\n    const char *msg;\n    /** Error byte position for input JSON pointer (0 if no error). */\n    size_t pos;\n} yyjson_ptr_err;\n\n/**\n A context for JSON pointer operation.\n \n This struct stores the context of JSON Pointer operation result. The struct\n can be used with three helper functions: `ctx_append()`, `ctx_replace()`, and\n `ctx_remove()`, which perform the corresponding operations on the container\n without re-parsing the JSON Pointer.\n \n For example:\n @code\n    // doc before: {\"a\":[0,1,null]}\n    // ptr: \"/a/2\"\n    val = yyjson_mut_doc_ptr_getx(doc, ptr, strlen(ptr), &ctx, &err);\n    if (yyjson_is_null(val)) {\n        yyjson_ptr_ctx_remove(&ctx);\n    }\n    // doc after: {\"a\":[0,1]}\n @endcode\n */\ntypedef struct yyjson_ptr_ctx {\n    /**\n     The container (parent) of the target value. It can be either an array or\n     an object. If the target location has no value, but all its parent\n     containers exist, and the target location can be used to insert a new\n     value, then `ctn` is the parent container of the target location.\n     Otherwise, `ctn` is NULL.\n     */\n    yyjson_mut_val *ctn;\n    /**\n     The previous sibling of the target value. It can be either a value in an\n     array or a key in an object. As the container is a `circular linked list`\n     of elements, `pre` is the previous node of the target value. If the\n     operation is `add` or `set`, then `pre` is the previous node of the new\n     value, not the original target value. If the target value does not exist,\n     `pre` is NULL.\n     */\n    yyjson_mut_val *pre;\n    /**\n     The removed value if the operation is `set`, `replace` or `remove`. It can\n     be used to restore the original state of the document if needed.\n     */\n    yyjson_mut_val *old;\n} yyjson_ptr_ctx;\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_get(yyjson_doc *doc,\n                                                 const char *ptr);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_getn(yyjson_doc *doc,\n                                                  const char *ptr, size_t len);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_getx(yyjson_doc *doc,\n                                                  const char *ptr, size_t len,\n                                                  yyjson_ptr_err *err);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_ptr_get(yyjson_val *val,\n                                             const char *ptr);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_ptr_getn(yyjson_val *val,\n                                              const char *ptr, size_t len);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_ptr_getx(yyjson_val *val,\n                                              const char *ptr, size_t len,\n                                              yyjson_ptr_err *err);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_get(yyjson_mut_doc *doc,\n                                                         const char *ptr);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getn(yyjson_mut_doc *doc,\n                                                          const char *ptr,\n                                                          size_t len);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getx(yyjson_mut_doc *doc,\n                                                          const char *ptr,\n                                                          size_t len,\n                                                          yyjson_ptr_ctx *ctx,\n                                                          yyjson_ptr_err *err);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_get(yyjson_mut_val *val,\n                                                     const char *ptr);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getn(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getx(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len,\n                                                      yyjson_ptr_ctx *ctx,\n                                                      yyjson_ptr_err *err);\n\n/**\n Add (insert) value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The value to be added.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n @note The parent nodes will be created if they do not exist.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_add(yyjson_mut_doc *doc,\n                                              const char *ptr,\n                                              yyjson_mut_val *new_val);\n\n/**\n Add (insert) value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be added.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n @note The parent nodes will be created if they do not exist.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_addn(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val);\n\n/**\n Add (insert) value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be added.\n @param create_parent Whether to create parent nodes if not exist.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_addx(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val,\n                                               bool create_parent,\n                                               yyjson_ptr_ctx *ctx,\n                                               yyjson_ptr_err *err);\n\n/**\n Add (insert) value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param doc Only used to create new values when needed.\n @param new_val The value to be added.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n @note The parent nodes will be created if they do not exist.\n */\nyyjson_api_inline bool yyjson_mut_ptr_add(yyjson_mut_val *val,\n                                          const char *ptr,\n                                          yyjson_mut_val *new_val,\n                                          yyjson_mut_doc *doc);\n\n/**\n Add (insert) value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param doc Only used to create new values when needed.\n @param new_val The value to be added.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n @note The parent nodes will be created if they do not exist.\n */\nyyjson_api_inline bool yyjson_mut_ptr_addn(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc);\n\n/**\n Add (insert) value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param doc Only used to create new values when needed.\n @param new_val The value to be added.\n @param create_parent Whether to create parent nodes if not exist.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n */\nyyjson_api_inline bool yyjson_mut_ptr_addx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err);\n\n/**\n Set value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The value to be set, pass NULL to remove.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note The parent nodes will be created if they do not exist.\n    If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_set(yyjson_mut_doc *doc,\n                                              const char *ptr,\n                                              yyjson_mut_val *new_val);\n\n/**\n Set value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be set, pass NULL to remove.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note The parent nodes will be created if they do not exist.\n    If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_setn(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val);\n\n/**\n Set value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be set, pass NULL to remove.\n @param create_parent Whether to create parent nodes if not exist.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_setx(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val,\n                                               bool create_parent,\n                                               yyjson_ptr_ctx *ctx,\n                                               yyjson_ptr_err *err);\n\n/**\n Set value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The value to be set, pass NULL to remove.\n @param doc Only used to create new values when needed.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note The parent nodes will be created if they do not exist.\n    If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_ptr_set(yyjson_mut_val *val,\n                                          const char *ptr,\n                                          yyjson_mut_val *new_val,\n                                          yyjson_mut_doc *doc);\n\n/**\n Set value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be set, pass NULL to remove.\n @param doc Only used to create new values when needed.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note The parent nodes will be created if they do not exist.\n    If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_ptr_setn(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc);\n\n/**\n Set value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be set, pass NULL to remove.\n @param doc Only used to create new values when needed.\n @param create_parent Whether to create parent nodes if not exist.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_ptr_setx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err);\n\n/**\n Replace value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The new value to replace the old one.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replace(\n    yyjson_mut_doc *doc, const char *ptr, yyjson_mut_val *new_val);\n\n/**\n Replace value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The new value to replace the old one.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacen(\n    yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val);\n\n/**\n Replace value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The new value to replace the old one.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacex(\n    yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err);\n\n/**\n Replace value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The new value to replace the old one.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replace(\n    yyjson_mut_val *val, const char *ptr, yyjson_mut_val *new_val);\n\n/**\n Replace value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The new value to replace the old one.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacen(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val);\n\n/**\n Replace value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The new value to replace the old one.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacex(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err);\n\n/**\n Remove value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_remove(\n    yyjson_mut_doc *doc, const char *ptr);\n\n/**\n Remove value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removen(\n    yyjson_mut_doc *doc, const char *ptr, size_t len);\n\n/**\n Remove value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removex(\n    yyjson_mut_doc *doc, const char *ptr, size_t len,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err);\n\n/**\n Remove value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_remove(yyjson_mut_val *val,\n                                                        const char *ptr);\n\n/**\n Remove value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removen(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len);\n\n/**\n Remove value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removex(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len,\n                                                         yyjson_ptr_ctx *ctx,\n                                                         yyjson_ptr_err *err);\n\n/**\n Append value by JSON pointer context.\n @param ctx The context from the `yyjson_mut_ptr_xxx()` calls.\n @param key New key if `ctx->ctn` is object, or NULL if `ctx->ctn` is array.\n @param val New value to be added.\n @return true on success or false on fail.\n */\nyyjson_api_inline bool yyjson_ptr_ctx_append(yyjson_ptr_ctx *ctx,\n                                             yyjson_mut_val *key,\n                                             yyjson_mut_val *val);\n\n/**\n Replace value by JSON pointer context.\n @param ctx The context from the `yyjson_mut_ptr_xxx()` calls.\n @param val New value to be replaced.\n @return true on success or false on fail.\n @note If success, the old value will be returned via `ctx->old`.\n */\nyyjson_api_inline bool yyjson_ptr_ctx_replace(yyjson_ptr_ctx *ctx,\n                                              yyjson_mut_val *val);\n\n/**\n Remove value by JSON pointer context.\n @param ctx The context from the `yyjson_mut_ptr_xxx()` calls.\n @return true on success or false on fail.\n @note If success, the old value will be returned via `ctx->old`.\n */\nyyjson_api_inline bool yyjson_ptr_ctx_remove(yyjson_ptr_ctx *ctx);\n\n\n\n/*==============================================================================\n * JSON Patch API (RFC 6902)\n * https://tools.ietf.org/html/rfc6902\n *============================================================================*/\n\n/** Result code for JSON patch. */\ntypedef uint32_t yyjson_patch_code;\n\n/** Success, no error. */\nstatic const yyjson_patch_code YYJSON_PATCH_SUCCESS = 0;\n\n/** Invalid parameter, such as NULL input or non-array patch. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_PARAMETER = 1;\n\n/** Memory allocation failure occurs. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_MEMORY_ALLOCATION = 2;\n\n/** JSON patch operation is not object type. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_OPERATION = 3;\n\n/** JSON patch operation is missing a required key. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_MISSING_KEY = 4;\n\n/** JSON patch operation member is invalid. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_MEMBER = 5;\n\n/** JSON patch operation `test` not equal. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_EQUAL = 6;\n\n/** JSON patch operation failed on JSON pointer. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_POINTER = 7;\n\n/** Error information for JSON patch. */\ntypedef struct yyjson_patch_err {\n    /** Error code, see `yyjson_patch_code` for all possible values. */\n    yyjson_patch_code code;\n    /** Index of the error operation (0 if no error). */\n    size_t idx;\n    /** Error message, constant, no need to free (NULL if no error). */\n    const char *msg;\n    /** JSON pointer error if `code == YYJSON_PATCH_ERROR_POINTER`. */\n    yyjson_ptr_err ptr;\n} yyjson_patch_err;\n\n/**\n Creates and returns a patched JSON value (RFC 6902).\n The memory of the returned value is allocated by the `doc`.\n The `err` is used to receive error information, pass NULL if not needed.\n Returns NULL if the patch could not be applied.\n */\nyyjson_api yyjson_mut_val *yyjson_patch(yyjson_mut_doc *doc,\n                                        yyjson_val *orig,\n                                        yyjson_val *patch,\n                                        yyjson_patch_err *err);\n\n/**\n Creates and returns a patched JSON value (RFC 6902).\n The memory of the returned value is allocated by the `doc`.\n The `err` is used to receive error information, pass NULL if not needed.\n Returns NULL if the patch could not be applied.\n */\nyyjson_api yyjson_mut_val *yyjson_mut_patch(yyjson_mut_doc *doc,\n                                            yyjson_mut_val *orig,\n                                            yyjson_mut_val *patch,\n                                            yyjson_patch_err *err);\n\n\n\n/*==============================================================================\n * JSON Merge-Patch API (RFC 7386)\n * https://tools.ietf.org/html/rfc7386\n *============================================================================*/\n\n/**\n Creates and returns a merge-patched JSON value (RFC 7386).\n The memory of the returned value is allocated by the `doc`.\n Returns NULL if the patch could not be applied.\n\n @warning This function is recursive and may cause a stack overflow if the\n    object level is too deep.\n */\nyyjson_api yyjson_mut_val *yyjson_merge_patch(yyjson_mut_doc *doc,\n                                              yyjson_val *orig,\n                                              yyjson_val *patch);\n\n/**\n Creates and returns a merge-patched JSON value (RFC 7386).\n The memory of the returned value is allocated by the `doc`.\n Returns NULL if the patch could not be applied.\n\n @warning This function is recursive and may cause a stack overflow if the\n    object level is too deep.\n */\nyyjson_api yyjson_mut_val *yyjson_mut_merge_patch(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *orig,\n                                                  yyjson_mut_val *patch);\n\n\n\n/*==============================================================================\n * JSON Structure (Implementation)\n *============================================================================*/\n\n/** Payload of a JSON value (8 bytes). */\ntypedef union yyjson_val_uni {\n    uint64_t    u64;\n    int64_t     i64;\n    double      f64;\n    const char *str;\n    void       *ptr;\n    size_t      ofs;\n} yyjson_val_uni;\n\n/**\n Immutable JSON value, 16 bytes.\n */\nstruct yyjson_val {\n    uint64_t tag; /**< type, subtype and length */\n    yyjson_val_uni uni; /**< payload */\n};\n\nstruct yyjson_doc {\n    /** Root value of the document (nonnull). */\n    yyjson_val *root;\n    /** Allocator used by document (nonnull). */\n    yyjson_alc alc;\n    /** The total number of bytes read when parsing JSON (nonzero). */\n    size_t dat_read;\n    /** The total number of value read when parsing JSON (nonzero). */\n    size_t val_read;\n    /** The string pool used by JSON values (nullable). */\n    char *str_pool;\n};\n\n\n\n/*==============================================================================\n * Unsafe JSON Value API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_type unsafe_yyjson_get_type(void *val) {\n    uint8_t tag = (uint8_t)((yyjson_val *)val)->tag;\n    return (yyjson_type)(tag & YYJSON_TYPE_MASK);\n}\n\nyyjson_api_inline yyjson_subtype unsafe_yyjson_get_subtype(void *val) {\n    uint8_t tag = (uint8_t)((yyjson_val *)val)->tag;\n    return (yyjson_subtype)(tag & YYJSON_SUBTYPE_MASK);\n}\n\nyyjson_api_inline uint8_t unsafe_yyjson_get_tag(void *val) {\n    uint8_t tag = (uint8_t)((yyjson_val *)val)->tag;\n    return (uint8_t)(tag & YYJSON_TAG_MASK);\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_raw(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_RAW;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_null(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_NULL;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_bool(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_BOOL;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_num(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_NUM;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_str(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_STR;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_arr(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_ARR;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_obj(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_OBJ;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_ctn(void *val) {\n    uint8_t mask = YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ;\n    return (unsafe_yyjson_get_tag(val) & mask) == mask;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_uint(void *val) {\n    const uint8_t patt = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_sint(void *val) {\n    const uint8_t patt = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_int(void *val) {\n    const uint8_t mask = YYJSON_TAG_MASK & (~YYJSON_SUBTYPE_SINT);\n    const uint8_t patt = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n    return (unsafe_yyjson_get_tag(val) & mask) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_real(void *val) {\n    const uint8_t patt = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_true(void *val) {\n    const uint8_t patt = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_false(void *val) {\n    const uint8_t patt = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_arr_is_flat(yyjson_val *val) {\n    size_t ofs = val->uni.ofs;\n    size_t len = (size_t)(val->tag >> YYJSON_TAG_BIT);\n    return len * sizeof(yyjson_val) + sizeof(yyjson_val) == ofs;\n}\n\nyyjson_api_inline const char *unsafe_yyjson_get_raw(void *val) {\n    return ((yyjson_val *)val)->uni.str;\n}\n\nyyjson_api_inline bool unsafe_yyjson_get_bool(void *val) {\n    uint8_t tag = unsafe_yyjson_get_tag(val);\n    return (bool)((tag & YYJSON_SUBTYPE_MASK) >> YYJSON_TYPE_BIT);\n}\n\nyyjson_api_inline uint64_t unsafe_yyjson_get_uint(void *val) {\n    return ((yyjson_val *)val)->uni.u64;\n}\n\nyyjson_api_inline int64_t unsafe_yyjson_get_sint(void *val) {\n    return ((yyjson_val *)val)->uni.i64;\n}\n\nyyjson_api_inline int unsafe_yyjson_get_int(void *val) {\n    return (int)((yyjson_val *)val)->uni.i64;\n}\n\nyyjson_api_inline double unsafe_yyjson_get_real(void *val) {\n    return ((yyjson_val *)val)->uni.f64;\n}\n\nyyjson_api_inline double unsafe_yyjson_get_num(void *val) {\n    uint8_t tag = unsafe_yyjson_get_tag(val);\n    if (tag == (YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL)) {\n        return ((yyjson_val *)val)->uni.f64;\n    } else if (tag == (YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT)) {\n        return (double)((yyjson_val *)val)->uni.i64;\n    } else if (tag == (YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT)) {\n#if YYJSON_U64_TO_F64_NO_IMPL\n        uint64_t msb = ((uint64_t)1) << 63;\n        uint64_t num = ((yyjson_val *)val)->uni.u64;\n        if ((num & msb) == 0) {\n            return (double)(int64_t)num;\n        } else {\n            return ((double)(int64_t)((num >> 1) | (num & 1))) * (double)2.0;\n        }\n#else\n        return (double)((yyjson_val *)val)->uni.u64;\n#endif\n    }\n    return 0.0;\n}\n\nyyjson_api_inline const char *unsafe_yyjson_get_str(void *val) {\n    return ((yyjson_val *)val)->uni.str;\n}\n\nyyjson_api_inline size_t unsafe_yyjson_get_len(void *val) {\n    return (size_t)(((yyjson_val *)val)->tag >> YYJSON_TAG_BIT);\n}\n\nyyjson_api_inline yyjson_val *unsafe_yyjson_get_first(yyjson_val *ctn) {\n    return ctn + 1;\n}\n\nyyjson_api_inline yyjson_val *unsafe_yyjson_get_next(yyjson_val *val) {\n    bool is_ctn = unsafe_yyjson_is_ctn(val);\n    size_t ctn_ofs = val->uni.ofs;\n    size_t ofs = (is_ctn ? ctn_ofs : sizeof(yyjson_val));\n    return (yyjson_val *)(void *)((uint8_t *)val + ofs);\n}\n\nyyjson_api_inline bool unsafe_yyjson_equals_strn(void *val, const char *str,\n                                                 size_t len) {\n    uint64_t tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    return ((yyjson_val *)val)->tag == tag &&\n    memcmp(((yyjson_val *)val)->uni.str, str, len) == 0;\n}\n\nyyjson_api_inline bool unsafe_yyjson_equals_str(void *val, const char *str) {\n    return unsafe_yyjson_equals_strn(val, str, strlen(str));\n}\n\nyyjson_api_inline void unsafe_yyjson_set_type(void *val, yyjson_type type,\n                                              yyjson_subtype subtype) {\n    uint8_t tag = (type | subtype);\n    uint64_t new_tag = ((yyjson_val *)val)->tag;\n    new_tag = (new_tag & (~(uint64_t)YYJSON_TAG_MASK)) | (uint64_t)tag;\n    ((yyjson_val *)val)->tag = new_tag;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_len(void *val, size_t len) {\n    uint64_t tag = ((yyjson_val *)val)->tag & YYJSON_TAG_MASK;\n    tag |= (uint64_t)len << YYJSON_TAG_BIT;\n    ((yyjson_val *)val)->tag = tag;\n}\n\nyyjson_api_inline void unsafe_yyjson_inc_len(void *val) {\n    uint64_t tag = ((yyjson_val *)val)->tag;\n    tag += (uint64_t)(1 << YYJSON_TAG_BIT);\n    ((yyjson_val *)val)->tag = tag;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_raw(void *val, const char *raw,\n                                             size_t len) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_RAW, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, len);\n    ((yyjson_val *)val)->uni.str = raw;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_null(void *val) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_NULL, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, 0);\n}\n\nyyjson_api_inline void unsafe_yyjson_set_bool(void *val, bool num) {\n    yyjson_subtype subtype = num ? YYJSON_SUBTYPE_TRUE : YYJSON_SUBTYPE_FALSE;\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_BOOL, subtype);\n    unsafe_yyjson_set_len(val, 0);\n}\n\nyyjson_api_inline void unsafe_yyjson_set_uint(void *val, uint64_t num) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_NUM, YYJSON_SUBTYPE_UINT);\n    unsafe_yyjson_set_len(val, 0);\n    ((yyjson_val *)val)->uni.u64 = num;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_sint(void *val, int64_t num) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_NUM, YYJSON_SUBTYPE_SINT);\n    unsafe_yyjson_set_len(val, 0);\n    ((yyjson_val *)val)->uni.i64 = num;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_real(void *val, double num) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_NUM, YYJSON_SUBTYPE_REAL);\n    unsafe_yyjson_set_len(val, 0);\n    ((yyjson_val *)val)->uni.f64 = num;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_str(void *val, const char *str) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_STR, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, strlen(str));\n    ((yyjson_val *)val)->uni.str = str;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_strn(void *val, const char *str,\n                                              size_t len) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_STR, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, len);\n    ((yyjson_val *)val)->uni.str = str;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_arr(void *val, size_t size) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_ARR, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, size);\n}\n\nyyjson_api_inline void unsafe_yyjson_set_obj(void *val, size_t size) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_OBJ, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, size);\n}\n\n\n\n/*==============================================================================\n * JSON Document API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_val *yyjson_doc_get_root(yyjson_doc *doc) {\n    return doc ? doc->root : NULL;\n}\n\nyyjson_api_inline size_t yyjson_doc_get_read_size(yyjson_doc *doc) {\n    return doc ? doc->dat_read : 0;\n}\n\nyyjson_api_inline size_t yyjson_doc_get_val_count(yyjson_doc *doc) {\n    return doc ? doc->val_read : 0;\n}\n\nyyjson_api_inline void yyjson_doc_free(yyjson_doc *doc) {\n    if (doc) {\n        yyjson_alc alc = doc->alc;\n        if (doc->str_pool) alc.free(alc.ctx, doc->str_pool);\n        alc.free(alc.ctx, doc);\n    }\n}\n\n\n\n/*==============================================================================\n * JSON Value Type API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_is_raw(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_raw(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_null(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_null(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_true(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_true(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_false(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_false(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_bool(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_bool(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_uint(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_uint(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_sint(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_sint(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_int(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_int(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_real(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_real(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_num(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_num(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_str(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_str(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_arr(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_arr(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_obj(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_obj(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_ctn(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_ctn(val) : false;\n}\n\n\n\n/*==============================================================================\n * JSON Value Content API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_type yyjson_get_type(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_type(val) : YYJSON_TYPE_NONE;\n}\n\nyyjson_api_inline yyjson_subtype yyjson_get_subtype(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_subtype(val) : YYJSON_SUBTYPE_NONE;\n}\n\nyyjson_api_inline uint8_t yyjson_get_tag(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_tag(val) : 0;\n}\n\nyyjson_api_inline const char *yyjson_get_type_desc(yyjson_val *val) {\n    switch (yyjson_get_tag(val)) {\n        case YYJSON_TYPE_RAW  | YYJSON_SUBTYPE_NONE:  return \"raw\";\n        case YYJSON_TYPE_NULL | YYJSON_SUBTYPE_NONE:  return \"null\";\n        case YYJSON_TYPE_STR  | YYJSON_SUBTYPE_NONE:  return \"string\";\n        case YYJSON_TYPE_ARR  | YYJSON_SUBTYPE_NONE:  return \"array\";\n        case YYJSON_TYPE_OBJ  | YYJSON_SUBTYPE_NONE:  return \"object\";\n        case YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE:  return \"true\";\n        case YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE: return \"false\";\n        case YYJSON_TYPE_NUM  | YYJSON_SUBTYPE_UINT:  return \"uint\";\n        case YYJSON_TYPE_NUM  | YYJSON_SUBTYPE_SINT:  return \"sint\";\n        case YYJSON_TYPE_NUM  | YYJSON_SUBTYPE_REAL:  return \"real\";\n        default:                                      return \"unknown\";\n    }\n}\n\nyyjson_api_inline const char *yyjson_get_raw(yyjson_val *val) {\n    return yyjson_is_raw(val) ? unsafe_yyjson_get_raw(val) : NULL;\n}\n\nyyjson_api_inline bool yyjson_get_bool(yyjson_val *val) {\n    return yyjson_is_bool(val) ? unsafe_yyjson_get_bool(val) : false;\n}\n\nyyjson_api_inline uint64_t yyjson_get_uint(yyjson_val *val) {\n    return yyjson_is_int(val) ? unsafe_yyjson_get_uint(val) : 0;\n}\n\nyyjson_api_inline int64_t yyjson_get_sint(yyjson_val *val) {\n    return yyjson_is_int(val) ? unsafe_yyjson_get_sint(val) : 0;\n}\n\nyyjson_api_inline int yyjson_get_int(yyjson_val *val) {\n    return yyjson_is_int(val) ? unsafe_yyjson_get_int(val) : 0;\n}\n\nyyjson_api_inline double yyjson_get_real(yyjson_val *val) {\n    return yyjson_is_real(val) ? unsafe_yyjson_get_real(val) : 0.0;\n}\n\nyyjson_api_inline double yyjson_get_num(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_num(val) : 0.0;\n}\n\nyyjson_api_inline const char *yyjson_get_str(yyjson_val *val) {\n    return yyjson_is_str(val) ? unsafe_yyjson_get_str(val) : NULL;\n}\n\nyyjson_api_inline size_t yyjson_get_len(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_len(val) : 0;\n}\n\nyyjson_api_inline bool yyjson_equals_str(yyjson_val *val, const char *str) {\n    if (yyjson_likely(val && str)) {\n        return unsafe_yyjson_equals_str(val, str);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_equals_strn(yyjson_val *val, const char *str,\n                                          size_t len) {\n    if (yyjson_likely(val && str)) {\n        return unsafe_yyjson_equals_strn(val, str, len);\n    }\n    return false;\n}\n\nyyjson_api bool unsafe_yyjson_equals(yyjson_val *lhs, yyjson_val *rhs);\n\nyyjson_api_inline bool yyjson_equals(yyjson_val *lhs, yyjson_val *rhs) {\n    if (yyjson_unlikely(!lhs || !rhs)) return false;\n    return unsafe_yyjson_equals(lhs, rhs);\n}\n\nyyjson_api_inline bool yyjson_set_raw(yyjson_val *val,\n                                      const char *raw, size_t len) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_raw(val, raw, len);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_null(yyjson_val *val) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_null(val);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_bool(yyjson_val *val, bool num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_bool(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_uint(yyjson_val *val, uint64_t num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_uint(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_sint(yyjson_val *val, int64_t num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_sint(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_int(yyjson_val *val, int num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_sint(val, (int64_t)num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_real(yyjson_val *val, double num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_real(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_str(yyjson_val *val, const char *str) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    if (yyjson_unlikely(!str)) return false;\n    unsafe_yyjson_set_str(val, str);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_strn(yyjson_val *val,\n                                       const char *str, size_t len) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    if (yyjson_unlikely(!str)) return false;\n    unsafe_yyjson_set_strn(val, str, len);\n    return true;\n}\n\n\n\n/*==============================================================================\n * JSON Array API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline size_t yyjson_arr_size(yyjson_val *arr) {\n    return yyjson_is_arr(arr) ? unsafe_yyjson_get_len(arr) : 0;\n}\n\nyyjson_api_inline yyjson_val *yyjson_arr_get(yyjson_val *arr, size_t idx) {\n    if (yyjson_likely(yyjson_is_arr(arr))) {\n        if (yyjson_likely(unsafe_yyjson_get_len(arr) > idx)) {\n            yyjson_val *val = unsafe_yyjson_get_first(arr);\n            if (unsafe_yyjson_arr_is_flat(arr)) {\n                return val + idx;\n            } else {\n                while (idx-- > 0) val = unsafe_yyjson_get_next(val);\n                return val;\n            }\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_val *yyjson_arr_get_first(yyjson_val *arr) {\n    if (yyjson_likely(yyjson_is_arr(arr))) {\n        if (yyjson_likely(unsafe_yyjson_get_len(arr) > 0)) {\n            return unsafe_yyjson_get_first(arr);\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_val *yyjson_arr_get_last(yyjson_val *arr) {\n    if (yyjson_likely(yyjson_is_arr(arr))) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(len > 0)) {\n            yyjson_val *val = unsafe_yyjson_get_first(arr);\n            if (unsafe_yyjson_arr_is_flat(arr)) {\n                return val + (len - 1);\n            } else {\n                while (len-- > 1) val = unsafe_yyjson_get_next(val);\n                return val;\n            }\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * JSON Array Iterator API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_arr_iter_init(yyjson_val *arr,\n                                            yyjson_arr_iter *iter) {\n    if (yyjson_likely(yyjson_is_arr(arr) && iter)) {\n        iter->idx = 0;\n        iter->max = unsafe_yyjson_get_len(arr);\n        iter->cur = unsafe_yyjson_get_first(arr);\n        return true;\n    }\n    if (iter) memset(iter, 0, sizeof(yyjson_arr_iter));\n    return false;\n}\n\nyyjson_api_inline yyjson_arr_iter yyjson_arr_iter_with(yyjson_val *arr) {\n    yyjson_arr_iter iter;\n    yyjson_arr_iter_init(arr, &iter);\n    return iter;\n}\n\nyyjson_api_inline bool yyjson_arr_iter_has_next(yyjson_arr_iter *iter) {\n    return iter ? iter->idx < iter->max : false;\n}\n\nyyjson_api_inline yyjson_val *yyjson_arr_iter_next(yyjson_arr_iter *iter) {\n    yyjson_val *val;\n    if (iter && iter->idx < iter->max) {\n        val = iter->cur;\n        iter->cur = unsafe_yyjson_get_next(val);\n        iter->idx++;\n        return val;\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * JSON Object API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline size_t yyjson_obj_size(yyjson_val *obj) {\n    return yyjson_is_obj(obj) ? unsafe_yyjson_get_len(obj) : 0;\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_get(yyjson_val *obj,\n                                             const char *key) {\n    return yyjson_obj_getn(obj, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_getn(yyjson_val *obj,\n                                              const char *_key,\n                                              size_t key_len) {\n    uint64_t tag = (((uint64_t)key_len) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    if (yyjson_likely(yyjson_is_obj(obj) && _key)) {\n        size_t len = unsafe_yyjson_get_len(obj);\n        yyjson_val *key = unsafe_yyjson_get_first(obj);\n        while (len-- > 0) {\n            if (key->tag == tag &&\n                memcmp(key->uni.ptr, _key, key_len) == 0) {\n                return key + 1;\n            }\n            key = unsafe_yyjson_get_next(key + 1);\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * JSON Object Iterator API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_obj_iter_init(yyjson_val *obj,\n                                            yyjson_obj_iter *iter) {\n    if (yyjson_likely(yyjson_is_obj(obj) && iter)) {\n        iter->idx = 0;\n        iter->max = unsafe_yyjson_get_len(obj);\n        iter->cur = unsafe_yyjson_get_first(obj);\n        iter->obj = obj;\n        return true;\n    }\n    if (iter) memset(iter, 0, sizeof(yyjson_obj_iter));\n    return false;\n}\n\nyyjson_api_inline yyjson_obj_iter yyjson_obj_iter_with(yyjson_val *obj) {\n    yyjson_obj_iter iter;\n    yyjson_obj_iter_init(obj, &iter);\n    return iter;\n}\n\nyyjson_api_inline bool yyjson_obj_iter_has_next(yyjson_obj_iter *iter) {\n    return iter ? iter->idx < iter->max : false;\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_iter_next(yyjson_obj_iter *iter) {\n    if (iter && iter->idx < iter->max) {\n        yyjson_val *key = iter->cur;\n        iter->idx++;\n        iter->cur = unsafe_yyjson_get_next(key + 1);\n        return key;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_iter_get_val(yyjson_val *key) {\n    return key ? key + 1 : NULL;\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_iter_get(yyjson_obj_iter *iter,\n                                                  const char *key) {\n    return yyjson_obj_iter_getn(iter, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_iter_getn(yyjson_obj_iter *iter,\n                                                   const char *key,\n                                                   size_t key_len) {\n    if (iter && key) {\n        size_t idx = iter->idx;\n        size_t max = iter->max;\n        yyjson_val *cur = iter->cur;\n        if (yyjson_unlikely(idx == max)) {\n            idx = 0;\n            cur = unsafe_yyjson_get_first(iter->obj);\n        }\n        while (idx++ < max) {\n            yyjson_val *next = unsafe_yyjson_get_next(cur + 1);\n            if (unsafe_yyjson_get_len(cur) == key_len &&\n                memcmp(cur->uni.str, key, key_len) == 0) {\n                iter->idx = idx;\n                iter->cur = next;\n                return cur + 1;\n            }\n            cur = next;\n            if (idx == iter->max && iter->idx < iter->max) {\n                idx = 0;\n                max = iter->idx;\n                cur = unsafe_yyjson_get_first(iter->obj);\n            }\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Structure (Implementation)\n *============================================================================*/\n\n/**\n Mutable JSON value, 24 bytes.\n The 'tag' and 'uni' field is same as immutable value.\n The 'next' field links all elements inside the container to be a cycle.\n */\nstruct yyjson_mut_val {\n    uint64_t tag; /**< type, subtype and length */\n    yyjson_val_uni uni; /**< payload */\n    yyjson_mut_val *next; /**< the next value in circular linked list */\n};\n\n/**\n A memory chunk in string memory pool.\n */\ntypedef struct yyjson_str_chunk {\n    struct yyjson_str_chunk *next; /* next chunk linked list */\n    size_t chunk_size; /* chunk size in bytes */\n    /* char str[]; flexible array member */\n} yyjson_str_chunk;\n\n/**\n A memory pool to hold all strings in a mutable document.\n */\ntypedef struct yyjson_str_pool {\n    char *cur; /* cursor inside current chunk */\n    char *end; /* the end of current chunk */\n    size_t chunk_size; /* chunk size in bytes while creating new chunk */\n    size_t chunk_size_max; /* maximum chunk size in bytes */\n    yyjson_str_chunk *chunks; /* a linked list of chunks, nullable */\n} yyjson_str_pool;\n\n/**\n A memory chunk in value memory pool.\n `sizeof(yyjson_val_chunk)` should not larger than `sizeof(yyjson_mut_val)`.\n */\ntypedef struct yyjson_val_chunk {\n    struct yyjson_val_chunk *next; /* next chunk linked list */\n    size_t chunk_size; /* chunk size in bytes */\n    /* char pad[sizeof(yyjson_mut_val) - sizeof(yyjson_val_chunk)]; padding */\n    /* yyjson_mut_val vals[]; flexible array member */\n} yyjson_val_chunk;\n\n/**\n A memory pool to hold all values in a mutable document.\n */\ntypedef struct yyjson_val_pool {\n    yyjson_mut_val *cur; /* cursor inside current chunk */\n    yyjson_mut_val *end; /* the end of current chunk */\n    size_t chunk_size; /* chunk size in bytes while creating new chunk */\n    size_t chunk_size_max; /* maximum chunk size in bytes */\n    yyjson_val_chunk *chunks; /* a linked list of chunks, nullable */\n} yyjson_val_pool;\n\nstruct yyjson_mut_doc {\n    yyjson_mut_val *root; /**< root value of the JSON document, nullable */\n    yyjson_alc alc; /**< a valid allocator, nonnull */\n    yyjson_str_pool str_pool; /**< string memory pool */\n    yyjson_val_pool val_pool; /**< value memory pool */\n};\n\n/* Ensures the capacity to at least equal to the specified byte length. */\nyyjson_api bool unsafe_yyjson_str_pool_grow(yyjson_str_pool *pool,\n                                            const yyjson_alc *alc,\n                                            size_t len);\n\n/* Ensures the capacity to at least equal to the specified value count. */\nyyjson_api bool unsafe_yyjson_val_pool_grow(yyjson_val_pool *pool,\n                                            const yyjson_alc *alc,\n                                            size_t count);\n\n/* Allocate memory for string. */\nyyjson_api_inline char *unsafe_yyjson_mut_str_alc(yyjson_mut_doc *doc,\n                                                  size_t len) {\n    char *mem;\n    const yyjson_alc *alc = &doc->alc;\n    yyjson_str_pool *pool = &doc->str_pool;\n    if (yyjson_unlikely((size_t)(pool->end - pool->cur) <= len)) {\n        if (yyjson_unlikely(!unsafe_yyjson_str_pool_grow(pool, alc, len + 1))) {\n            return NULL;\n        }\n    }\n    mem = pool->cur;\n    pool->cur = mem + len + 1;\n    return mem;\n}\n\nyyjson_api_inline char *unsafe_yyjson_mut_strncpy(yyjson_mut_doc *doc,\n                                                  const char *str, size_t len) {\n    char *mem = unsafe_yyjson_mut_str_alc(doc, len);\n    if (yyjson_unlikely(!mem)) return NULL;\n    memcpy((void *)mem, (const void *)str, len);\n    mem[len] = '\\0';\n    return mem;\n}\n\nyyjson_api_inline yyjson_mut_val *unsafe_yyjson_mut_val(yyjson_mut_doc *doc,\n                                                        size_t count) {\n    yyjson_mut_val *val;\n    yyjson_alc *alc = &doc->alc;\n    yyjson_val_pool *pool = &doc->val_pool;\n    if (yyjson_unlikely((size_t)(pool->end - pool->cur) < count)) {\n        if (yyjson_unlikely(!unsafe_yyjson_val_pool_grow(pool, alc, count))) {\n            return NULL;\n        }\n    }\n    val = pool->cur;\n    pool->cur += count;\n    return val;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Document API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_root(yyjson_mut_doc *doc) {\n    return doc ? doc->root : NULL;\n}\n\nyyjson_api_inline void yyjson_mut_doc_set_root(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *root) {\n    if (doc) doc->root = root;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Value Type API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_is_raw(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_raw(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_null(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_null(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_true(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_true(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_false(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_false(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_bool(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_bool(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_uint(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_uint(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_sint(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_sint(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_int(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_int(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_real(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_real(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_num(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_num(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_str(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_str(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_arr(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_arr(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_obj(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_obj(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_ctn(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_ctn(val) : false;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Value Content API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_type yyjson_mut_get_type(yyjson_mut_val *val) {\n    return yyjson_get_type((yyjson_val *)val);\n}\n\nyyjson_api_inline yyjson_subtype yyjson_mut_get_subtype(yyjson_mut_val *val) {\n    return yyjson_get_subtype((yyjson_val *)val);\n}\n\nyyjson_api_inline uint8_t yyjson_mut_get_tag(yyjson_mut_val *val) {\n    return yyjson_get_tag((yyjson_val *)val);\n}\n\nyyjson_api_inline const char *yyjson_mut_get_type_desc(yyjson_mut_val *val) {\n    return yyjson_get_type_desc((yyjson_val *)val);\n}\n\nyyjson_api_inline const char *yyjson_mut_get_raw(yyjson_mut_val *val) {\n    return yyjson_get_raw((yyjson_val *)val);\n}\n\nyyjson_api_inline bool yyjson_mut_get_bool(yyjson_mut_val *val) {\n    return yyjson_get_bool((yyjson_val *)val);\n}\n\nyyjson_api_inline uint64_t yyjson_mut_get_uint(yyjson_mut_val *val) {\n    return yyjson_get_uint((yyjson_val *)val);\n}\n\nyyjson_api_inline int64_t yyjson_mut_get_sint(yyjson_mut_val *val) {\n    return yyjson_get_sint((yyjson_val *)val);\n}\n\nyyjson_api_inline int yyjson_mut_get_int(yyjson_mut_val *val) {\n    return yyjson_get_int((yyjson_val *)val);\n}\n\nyyjson_api_inline double yyjson_mut_get_real(yyjson_mut_val *val) {\n    return yyjson_get_real((yyjson_val *)val);\n}\n\nyyjson_api_inline double yyjson_mut_get_num(yyjson_mut_val *val) {\n    return yyjson_get_num((yyjson_val *)val);\n}\n\nyyjson_api_inline const char *yyjson_mut_get_str(yyjson_mut_val *val) {\n    return yyjson_get_str((yyjson_val *)val);\n}\n\nyyjson_api_inline size_t yyjson_mut_get_len(yyjson_mut_val *val) {\n    return yyjson_get_len((yyjson_val *)val);\n}\n\nyyjson_api_inline bool yyjson_mut_equals_str(yyjson_mut_val *val,\n                                             const char *str) {\n    return yyjson_equals_str((yyjson_val *)val, str);\n}\n\nyyjson_api_inline bool yyjson_mut_equals_strn(yyjson_mut_val *val,\n                                              const char *str, size_t len) {\n    return yyjson_equals_strn((yyjson_val *)val, str, len);\n}\n\nyyjson_api bool unsafe_yyjson_mut_equals(yyjson_mut_val *lhs,\n                                         yyjson_mut_val *rhs);\n\nyyjson_api_inline bool yyjson_mut_equals(yyjson_mut_val *lhs,\n                                         yyjson_mut_val *rhs) {\n    if (yyjson_unlikely(!lhs || !rhs)) return false;\n    return unsafe_yyjson_mut_equals(lhs, rhs);\n}\n\nyyjson_api_inline bool yyjson_mut_set_raw(yyjson_mut_val *val,\n                                          const char *raw, size_t len) {\n    if (yyjson_unlikely(!val || !raw)) return false;\n    unsafe_yyjson_set_raw(val, raw, len);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_null(yyjson_mut_val *val) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_null(val);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_bool(yyjson_mut_val *val, bool num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_bool(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_uint(yyjson_mut_val *val, uint64_t num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_uint(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_sint(yyjson_mut_val *val, int64_t num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_sint(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_int(yyjson_mut_val *val, int num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_sint(val, (int64_t)num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_real(yyjson_mut_val *val, double num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_real(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_str(yyjson_mut_val *val,\n                                          const char *str) {\n    if (yyjson_unlikely(!val || !str)) return false;\n    unsafe_yyjson_set_str(val, str);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_strn(yyjson_mut_val *val,\n                                           const char *str, size_t len) {\n    if (yyjson_unlikely(!val || !str)) return false;\n    unsafe_yyjson_set_strn(val, str, len);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_arr(yyjson_mut_val *val) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_arr(val, 0);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_obj(yyjson_mut_val *val) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_obj(val, 0);\n    return true;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Value Creation API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_raw(yyjson_mut_doc *doc,\n                                                 const char *str) {\n    if (yyjson_likely(str)) return yyjson_mut_rawn(doc, str, strlen(str));\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawn(yyjson_mut_doc *doc,\n                                                  const char *str,\n                                                  size_t len) {\n    if (yyjson_likely(doc && str)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW;\n            val->uni.str = str;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawcpy(yyjson_mut_doc *doc,\n                                                    const char *str) {\n    if (yyjson_likely(str)) return yyjson_mut_rawncpy(doc, str, strlen(str));\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawncpy(yyjson_mut_doc *doc,\n                                                     const char *str,\n                                                     size_t len) {\n    if (yyjson_likely(doc && str)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        char *new_str = unsafe_yyjson_mut_strncpy(doc, str, len);\n        if (yyjson_likely(val && new_str)) {\n            val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW;\n            val->uni.str = new_str;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_null(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_NULL | YYJSON_SUBTYPE_NONE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_true(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_false(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_bool(yyjson_mut_doc *doc,\n                                                  bool _val) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_BOOL | (uint8_t)((uint8_t)_val << 3);\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_uint(yyjson_mut_doc *doc,\n                                                  uint64_t num) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n            val->uni.u64 = num;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_sint(yyjson_mut_doc *doc,\n                                                  int64_t num) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n            val->uni.i64 = num;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_int(yyjson_mut_doc *doc,\n                                                 int64_t num) {\n    return yyjson_mut_sint(doc, num);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_real(yyjson_mut_doc *doc,\n                                                  double num) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n            val->uni.f64 = num;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_str(yyjson_mut_doc *doc,\n                                                 const char *str) {\n    if (yyjson_likely(str)) return yyjson_mut_strn(doc, str, strlen(str));\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strn(yyjson_mut_doc *doc,\n                                                  const char *str,\n                                                  size_t len) {\n    if (yyjson_likely(doc && str)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n            val->uni.str = str;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strcpy(yyjson_mut_doc *doc,\n                                                    const char *str) {\n    if (yyjson_likely(str)) return yyjson_mut_strncpy(doc, str, strlen(str));\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strncpy(yyjson_mut_doc *doc,\n                                                     const char *str,\n                                                     size_t len) {\n    if (yyjson_likely(doc && str)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        char *new_str = unsafe_yyjson_mut_strncpy(doc, str, len);\n        if (yyjson_likely(val && new_str)) {\n            val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n            val->uni.str = new_str;\n            return val;\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Array API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline size_t yyjson_mut_arr_size(yyjson_mut_val *arr) {\n    return yyjson_mut_is_arr(arr) ? unsafe_yyjson_get_len(arr) : 0;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get(yyjson_mut_val *arr,\n                                                     size_t idx) {\n    if (yyjson_likely(idx < yyjson_mut_arr_size(arr))) {\n        yyjson_mut_val *val = (yyjson_mut_val *)arr->uni.ptr;\n        while (idx-- > 0) val = val->next;\n        return val->next;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_first(\n    yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_arr_size(arr) > 0)) {\n        return ((yyjson_mut_val *)arr->uni.ptr)->next;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_last(\n    yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_arr_size(arr) > 0)) {\n        return ((yyjson_mut_val *)arr->uni.ptr);\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Array Iterator API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_arr_iter_init(yyjson_mut_val *arr,\n                                                yyjson_mut_arr_iter *iter) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && iter)) {\n        iter->idx = 0;\n        iter->max = unsafe_yyjson_get_len(arr);\n        iter->cur = iter->max ? (yyjson_mut_val *)arr->uni.ptr : NULL;\n        iter->pre = NULL;\n        iter->arr = arr;\n        return true;\n    }\n    if (iter) memset(iter, 0, sizeof(yyjson_mut_arr_iter));\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_arr_iter yyjson_mut_arr_iter_with(\n    yyjson_mut_val *arr) {\n    yyjson_mut_arr_iter iter;\n    yyjson_mut_arr_iter_init(arr, &iter);\n    return iter;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_iter_has_next(yyjson_mut_arr_iter *iter) {\n    return iter ? iter->idx < iter->max : false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_next(\n    yyjson_mut_arr_iter *iter) {\n    if (iter && iter->idx < iter->max) {\n        yyjson_mut_val *val = iter->cur;\n        iter->pre = val;\n        iter->cur = val->next;\n        iter->idx++;\n        return iter->cur;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_remove(\n    yyjson_mut_arr_iter *iter) {\n    if (yyjson_likely(iter && 0 < iter->idx && iter->idx <= iter->max)) {\n        yyjson_mut_val *prev = iter->pre;\n        yyjson_mut_val *cur = iter->cur;\n        yyjson_mut_val *next = cur->next;\n        if (yyjson_unlikely(iter->idx == iter->max)) iter->arr->uni.ptr = prev;\n        iter->idx--;\n        iter->max--;\n        unsafe_yyjson_set_len(iter->arr, iter->max);\n        prev->next = next;\n        iter->cur = next;\n        return cur;\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Array Creation API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_ARR | YYJSON_SUBTYPE_NONE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\n#define yyjson_mut_arr_with_func(func) \\\n    if (yyjson_likely(doc && ((0 < count && count < \\\n        (~(size_t)0) / sizeof(yyjson_mut_val) && vals) || count == 0))) { \\\n        yyjson_mut_val *arr = unsafe_yyjson_mut_val(doc, 1 + count); \\\n        if (yyjson_likely(arr)) { \\\n            arr->tag = ((uint64_t)count << YYJSON_TAG_BIT) | YYJSON_TYPE_ARR; \\\n            if (count > 0) { \\\n                size_t i; \\\n                for (i = 0; i < count; i++) { \\\n                    yyjson_mut_val *val = arr + i + 1; \\\n                    func \\\n                    val->next = val + 1; \\\n                } \\\n                arr[count].next = arr + 1; \\\n                arr->uni.ptr = arr + count; \\\n            } \\\n            return arr; \\\n        } \\\n    } \\\n    return NULL\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_bool(\n    yyjson_mut_doc *doc, const bool *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_BOOL | (uint8_t)((uint8_t)vals[i] << 3);\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint(\n    yyjson_mut_doc *doc, const int64_t *vals, size_t count) {\n    return yyjson_mut_arr_with_sint64(doc, vals, count);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint(\n    yyjson_mut_doc *doc, const uint64_t *vals, size_t count) {\n    return yyjson_mut_arr_with_uint64(doc, vals, count);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_real(\n    yyjson_mut_doc *doc, const double *vals, size_t count) {\n    return yyjson_mut_arr_with_double(doc, vals, count);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint8(\n    yyjson_mut_doc *doc, const int8_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = (int64_t)vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint16(\n    yyjson_mut_doc *doc, const int16_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint32(\n    yyjson_mut_doc *doc, const int32_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint64(\n    yyjson_mut_doc *doc, const int64_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint8(\n    yyjson_mut_doc *doc, const uint8_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint16(\n    yyjson_mut_doc *doc, const uint16_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint32(\n    yyjson_mut_doc *doc, const uint32_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint64(\n    yyjson_mut_doc *doc, const uint64_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_float(\n    yyjson_mut_doc *doc, const float *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n        val->uni.f64 = (double)vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_double(\n    yyjson_mut_doc *doc, const double *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n        val->uni.f64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_str(\n    yyjson_mut_doc *doc, const char **vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        uint64_t len = (uint64_t)strlen(vals[i]);\n        val->tag = (len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = vals[i];\n        if (yyjson_unlikely(!val->uni.str)) return NULL;\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strn(\n    yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count) {\n    if (yyjson_unlikely(count > 0 && !lens)) return NULL;\n    yyjson_mut_arr_with_func({\n        val->tag = ((uint64_t)lens[i] << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = vals[i];\n        if (yyjson_unlikely(!val->uni.str)) return NULL;\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strcpy(\n    yyjson_mut_doc *doc, const char **vals, size_t count) {\n    size_t len;\n    const char *str;\n    yyjson_mut_arr_with_func({\n        str = vals[i];\n        if (!str) return NULL;\n        len = strlen(str);\n        val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = unsafe_yyjson_mut_strncpy(doc, str, len);\n        if (yyjson_unlikely(!val->uni.str)) return NULL;\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strncpy(\n    yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count) {\n    size_t len;\n    const char *str;\n    if (yyjson_unlikely(count > 0 && !lens)) return NULL;\n    yyjson_mut_arr_with_func({\n        str = vals[i];\n        len = lens[i];\n        val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = unsafe_yyjson_mut_strncpy(doc, str, len);\n        if (yyjson_unlikely(!val->uni.str)) return NULL;\n    });\n}\n\n#undef yyjson_mut_arr_with_func\n\n\n\n/*==============================================================================\n * Mutable JSON Array Modification API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_arr_insert(yyjson_mut_val *arr,\n                                             yyjson_mut_val *val, size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && val)) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(idx <= len)) {\n            unsafe_yyjson_set_len(arr, len + 1);\n            if (len == 0) {\n                val->next = val;\n                arr->uni.ptr = val;\n            } else {\n                yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n                yyjson_mut_val *next = prev->next;\n                if (idx == len) {\n                    prev->next = val;\n                    val->next = next;\n                    arr->uni.ptr = val;\n                } else {\n                    while (idx-- > 0) {\n                        prev = next;\n                        next = next->next;\n                    }\n                    prev->next = val;\n                    val->next = next;\n                }\n            }\n            return true;\n        }\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_append(yyjson_mut_val *arr,\n                                             yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && val)) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        unsafe_yyjson_set_len(arr, len + 1);\n        if (len == 0) {\n            val->next = val;\n        } else {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            yyjson_mut_val *next = prev->next;\n            prev->next = val;\n            val->next = next;\n        }\n        arr->uni.ptr = val;\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_prepend(yyjson_mut_val *arr,\n                                              yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && val)) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        unsafe_yyjson_set_len(arr, len + 1);\n        if (len == 0) {\n            val->next = val;\n            arr->uni.ptr = val;\n        } else {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            yyjson_mut_val *next = prev->next;\n            prev->next = val;\n            val->next = next;\n        }\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_replace(yyjson_mut_val *arr,\n                                                         size_t idx,\n                                                         yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && val)) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(idx < len)) {\n            if (yyjson_likely(len > 1)) {\n                yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n                yyjson_mut_val *next = prev->next;\n                while (idx-- > 0) {\n                    prev = next;\n                    next = next->next;\n                }\n                prev->next = val;\n                val->next = next->next;\n                if ((void *)next == arr->uni.ptr) arr->uni.ptr = val;\n                return next;\n            } else {\n                yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n                val->next = val;\n                arr->uni.ptr = val;\n                return prev;\n            }\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove(yyjson_mut_val *arr,\n                                                        size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(idx < len)) {\n            unsafe_yyjson_set_len(arr, len - 1);\n            if (yyjson_likely(len > 1)) {\n                yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n                yyjson_mut_val *next = prev->next;\n                while (idx-- > 0) {\n                    prev = next;\n                    next = next->next;\n                }\n                prev->next = next->next;\n                if ((void *)next == arr->uni.ptr) arr->uni.ptr = prev;\n                return next;\n            } else {\n                return ((yyjson_mut_val *)arr->uni.ptr);\n            }\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_first(\n    yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (len > 1) {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            yyjson_mut_val *next = prev->next;\n            prev->next = next->next;\n            unsafe_yyjson_set_len(arr, len - 1);\n            return next;\n        } else if (len == 1) {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            unsafe_yyjson_set_len(arr, 0);\n            return prev;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_last(\n    yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(len > 1)) {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            yyjson_mut_val *next = prev->next;\n            unsafe_yyjson_set_len(arr, len - 1);\n            while (--len > 0) prev = prev->next;\n            prev->next = next;\n            next = (yyjson_mut_val *)arr->uni.ptr;\n            arr->uni.ptr = prev;\n            return next;\n        } else if (len == 1) {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            unsafe_yyjson_set_len(arr, 0);\n            return prev;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_remove_range(yyjson_mut_val *arr,\n                                                   size_t _idx, size_t _len) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *prev, *next;\n        bool tail_removed;\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_unlikely(_idx + _len > len)) return false;\n        if (yyjson_unlikely(_len == 0)) return true;\n        unsafe_yyjson_set_len(arr, len - _len);\n        if (yyjson_unlikely(len == _len)) return true;\n        tail_removed = (_idx + _len == len);\n        prev = ((yyjson_mut_val *)arr->uni.ptr);\n        while (_idx-- > 0) prev = prev->next;\n        next = prev->next;\n        while (_len-- > 0) next = next->next;\n        prev->next = next;\n        if (yyjson_unlikely(tail_removed)) arr->uni.ptr = prev;\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_clear(yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        unsafe_yyjson_set_len(arr, 0);\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_rotate(yyjson_mut_val *arr,\n                                             size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) &&\n                      unsafe_yyjson_get_len(arr) > idx)) {\n        yyjson_mut_val *val = (yyjson_mut_val *)arr->uni.ptr;\n        while (idx-- > 0) val = val->next;\n        arr->uni.ptr = (void *)val;\n        return true;\n    }\n    return false;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Array Modification Convenience API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_arr_add_val(yyjson_mut_val *arr,\n                                              yyjson_mut_val *val) {\n    return yyjson_mut_arr_append(arr, val);\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_null(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_null(doc);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_true(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_true(doc);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_false(yyjson_mut_doc *doc,\n                                                yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_false(doc);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_bool(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               bool _val) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_bool(doc, _val);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_uint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               uint64_t num) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_uint(doc, num);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_sint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               int64_t num) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_sint(doc, num);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_int(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *arr,\n                                              int64_t num) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_sint(doc, num);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_real(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               double num) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_real(doc, num);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_str(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *arr,\n                                              const char *str) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_str(doc, str);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_strn(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               const char *str, size_t len) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_strn(doc, str, len);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_strcpy(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *arr,\n                                                 const char *str) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_strcpy(doc, str);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_strncpy(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *arr,\n                                                  const char *str, size_t len) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_strncpy(doc, str, len);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_arr(yyjson_mut_doc *doc,\n                                                         yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_arr(doc);\n        return yyjson_mut_arr_append(arr, val) ? val : NULL;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_obj(yyjson_mut_doc *doc,\n                                                         yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_obj(doc);\n        return yyjson_mut_arr_append(arr, val) ? val : NULL;\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline size_t yyjson_mut_obj_size(yyjson_mut_val *obj) {\n    return yyjson_mut_is_obj(obj) ? unsafe_yyjson_get_len(obj) : 0;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_get(yyjson_mut_val *obj,\n                                                     const char *key) {\n    return yyjson_mut_obj_getn(obj, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_getn(yyjson_mut_val *obj,\n                                                      const char *_key,\n                                                      size_t key_len) {\n    uint64_t tag = (((uint64_t)key_len) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    size_t len = yyjson_mut_obj_size(obj);\n    if (yyjson_likely(len && _key)) {\n        yyjson_mut_val *key = ((yyjson_mut_val *)obj->uni.ptr)->next->next;\n        while (len-- > 0) {\n            if (key->tag == tag &&\n                memcmp(key->uni.ptr, _key, key_len) == 0) {\n                return key->next;\n            }\n            key = key->next->next;\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object Iterator API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_obj_iter_init(yyjson_mut_val *obj,\n                                                yyjson_mut_obj_iter *iter) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && iter)) {\n        iter->idx = 0;\n        iter->max = unsafe_yyjson_get_len(obj);\n        iter->cur = iter->max ? (yyjson_mut_val *)obj->uni.ptr : NULL;\n        iter->pre = NULL;\n        iter->obj = obj;\n        return true;\n    }\n    if (iter) memset(iter, 0, sizeof(yyjson_mut_obj_iter));\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_obj_iter yyjson_mut_obj_iter_with(\n    yyjson_mut_val *obj) {\n    yyjson_mut_obj_iter iter;\n    yyjson_mut_obj_iter_init(obj, &iter);\n    return iter;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_iter_has_next(yyjson_mut_obj_iter *iter) {\n    return iter ? iter->idx < iter->max : false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_next(\n    yyjson_mut_obj_iter *iter) {\n    if (iter && iter->idx < iter->max) {\n        yyjson_mut_val *key = iter->cur;\n        iter->pre = key;\n        iter->cur = key->next->next;\n        iter->idx++;\n        return iter->cur;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get_val(\n    yyjson_mut_val *key) {\n    return key ? key->next : NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_remove(\n    yyjson_mut_obj_iter *iter) {\n    if (yyjson_likely(iter && 0 < iter->idx && iter->idx <= iter->max)) {\n        yyjson_mut_val *prev = iter->pre;\n        yyjson_mut_val *cur = iter->cur;\n        yyjson_mut_val *next = cur->next->next;\n        if (yyjson_unlikely(iter->idx == iter->max)) iter->obj->uni.ptr = prev;\n        iter->idx--;\n        iter->max--;\n        unsafe_yyjson_set_len(iter->obj, iter->max);\n        prev->next->next = next;\n        iter->cur = prev;\n        return cur->next;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get(\n    yyjson_mut_obj_iter *iter, const char *key) {\n    return yyjson_mut_obj_iter_getn(iter, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_getn(\n    yyjson_mut_obj_iter *iter, const char *key, size_t key_len) {\n    if (iter && key) {\n        size_t idx = 0;\n        size_t max = iter->max;\n        yyjson_mut_val *pre, *cur = iter->cur;\n        while (idx++ < max) {\n            pre = cur;\n            cur = cur->next->next;\n            if (unsafe_yyjson_get_len(cur) == key_len &&\n                memcmp(cur->uni.str, key, key_len) == 0) {\n                iter->idx += idx;\n                if (iter->idx > max) iter->idx -= max + 1;\n                iter->pre = pre;\n                iter->cur = cur;\n                return cur->next;\n            }\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object Creation API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_OBJ | YYJSON_SUBTYPE_NONE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_str(yyjson_mut_doc *doc,\n                                                          const char **keys,\n                                                          const char **vals,\n                                                          size_t count) {\n    if (yyjson_likely(doc && ((count > 0 && keys && vals) || (count == 0)))) {\n        yyjson_mut_val *obj = unsafe_yyjson_mut_val(doc, 1 + count * 2);\n        if (yyjson_likely(obj)) {\n            obj->tag = ((uint64_t)count << YYJSON_TAG_BIT) | YYJSON_TYPE_OBJ;\n            if (count > 0) {\n                size_t i;\n                for (i = 0; i < count; i++) {\n                    yyjson_mut_val *key = obj + (i * 2 + 1);\n                    yyjson_mut_val *val = obj + (i * 2 + 2);\n                    uint64_t key_len = (uint64_t)strlen(keys[i]);\n                    uint64_t val_len = (uint64_t)strlen(vals[i]);\n                    key->tag = (key_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n                    val->tag = (val_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n                    key->uni.str = keys[i];\n                    val->uni.str = vals[i];\n                    key->next = val;\n                    val->next = val + 1;\n                }\n                obj[count * 2].next = obj + 1;\n                obj->uni.ptr = obj + (count * 2 - 1);\n            }\n            return obj;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_kv(yyjson_mut_doc *doc,\n                                                         const char **pairs,\n                                                         size_t count) {\n    if (yyjson_likely(doc && ((count > 0 && pairs) || (count == 0)))) {\n        yyjson_mut_val *obj = unsafe_yyjson_mut_val(doc, 1 + count * 2);\n        if (yyjson_likely(obj)) {\n            obj->tag = ((uint64_t)count << YYJSON_TAG_BIT) | YYJSON_TYPE_OBJ;\n            if (count > 0) {\n                size_t i;\n                for (i = 0; i < count; i++) {\n                    yyjson_mut_val *key = obj + (i * 2 + 1);\n                    yyjson_mut_val *val = obj + (i * 2 + 2);\n                    const char *key_str = pairs[i * 2 + 0];\n                    const char *val_str = pairs[i * 2 + 1];\n                    uint64_t key_len = (uint64_t)strlen(key_str);\n                    uint64_t val_len = (uint64_t)strlen(val_str);\n                    key->tag = (key_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n                    val->tag = (val_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n                    key->uni.str = key_str;\n                    val->uni.str = val_str;\n                    key->next = val;\n                    val->next = val + 1;\n                }\n                obj[count * 2].next = obj + 1;\n                obj->uni.ptr = obj + (count * 2 - 1);\n            }\n            return obj;\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object Modification API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline void unsafe_yyjson_mut_obj_add(yyjson_mut_val *obj,\n                                                 yyjson_mut_val *key,\n                                                 yyjson_mut_val *val,\n                                                 size_t len) {\n    if (yyjson_likely(len)) {\n        yyjson_mut_val *prev_val = ((yyjson_mut_val *)obj->uni.ptr)->next;\n        yyjson_mut_val *next_key = prev_val->next;\n        prev_val->next = key;\n        val->next = next_key;\n    } else {\n        val->next = key;\n    }\n    key->next = val;\n    obj->uni.ptr = (void *)key;\n    unsafe_yyjson_set_len(obj, len + 1);\n}\n\nyyjson_api_inline yyjson_mut_val *unsafe_yyjson_mut_obj_remove(\n    yyjson_mut_val *obj, const char *key, size_t key_len, uint64_t key_tag) {\n    size_t obj_len = unsafe_yyjson_get_len(obj);\n    if (obj_len) {\n        yyjson_mut_val *pre_key = (yyjson_mut_val *)obj->uni.ptr;\n        yyjson_mut_val *cur_key = pre_key->next->next;\n        yyjson_mut_val *removed_item = NULL;\n        size_t i;\n        for (i = 0; i < obj_len; i++) {\n            if (key_tag == cur_key->tag &&\n                memcmp(key, cur_key->uni.ptr, key_len) == 0) {\n                if (!removed_item) removed_item = cur_key->next;\n                cur_key = cur_key->next->next;\n                pre_key->next->next = cur_key;\n                if (i + 1 == obj_len) obj->uni.ptr = pre_key;\n                i--;\n                obj_len--;\n            } else {\n                pre_key = cur_key;\n                cur_key = cur_key->next->next;\n            }\n        }\n        unsafe_yyjson_set_len(obj, obj_len);\n        return removed_item;\n    } else {\n        return NULL;\n    }\n}\n\nyyjson_api_inline bool unsafe_yyjson_mut_obj_replace(yyjson_mut_val *obj,\n                                                     yyjson_mut_val *key,\n                                                     yyjson_mut_val *val) {\n    size_t key_len = unsafe_yyjson_get_len(key);\n    size_t obj_len = unsafe_yyjson_get_len(obj);\n    if (obj_len) {\n        yyjson_mut_val *pre_key = (yyjson_mut_val *)obj->uni.ptr;\n        yyjson_mut_val *cur_key = pre_key->next->next;\n        size_t i;\n        for (i = 0; i < obj_len; i++) {\n            if (key->tag == cur_key->tag &&\n                memcmp(key->uni.str, cur_key->uni.ptr, key_len) == 0) {\n                cur_key->next->tag = val->tag;\n                cur_key->next->uni.u64 = val->uni.u64;\n                return true;\n            } else {\n                cur_key = cur_key->next->next;\n            }\n        }\n    }\n    return false;\n}\n\nyyjson_api_inline void unsafe_yyjson_mut_obj_rotate(yyjson_mut_val *obj,\n                                                    size_t idx) {\n    yyjson_mut_val *key = (yyjson_mut_val *)obj->uni.ptr;\n    while (idx-- > 0) key = key->next->next;\n    obj->uni.ptr = (void *)key;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add(yyjson_mut_val *obj,\n                                          yyjson_mut_val *key,\n                                          yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) &&\n                      yyjson_mut_is_str(key) && val)) {\n        unsafe_yyjson_mut_obj_add(obj, key, val, unsafe_yyjson_get_len(obj));\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_put(yyjson_mut_val *obj,\n                                          yyjson_mut_val *key,\n                                          yyjson_mut_val *val) {\n    bool replaced = false;\n    size_t key_len;\n    yyjson_mut_obj_iter iter;\n    yyjson_mut_val *cur_key;\n    if (yyjson_unlikely(!yyjson_mut_is_obj(obj) ||\n                        !yyjson_mut_is_str(key))) return false;\n    key_len = unsafe_yyjson_get_len(key);\n    yyjson_mut_obj_iter_init(obj, &iter);\n    while ((cur_key = yyjson_mut_obj_iter_next(&iter))) {\n        if (key->tag == cur_key->tag &&\n            memcmp(key->uni.str, cur_key->uni.ptr, key_len) == 0) {\n            if (!replaced && val) {\n                replaced = true;\n                val->next = cur_key->next->next;\n                cur_key->next = val;\n            } else {\n                yyjson_mut_obj_iter_remove(&iter);\n            }\n        }\n    }\n    if (!replaced && val) unsafe_yyjson_mut_obj_add(obj, key, val, iter.max);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_insert(yyjson_mut_val *obj,\n                                             yyjson_mut_val *key,\n                                             yyjson_mut_val *val,\n                                             size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) &&\n                      yyjson_mut_is_str(key) && val)) {\n        size_t len = unsafe_yyjson_get_len(obj);\n        if (yyjson_likely(len >= idx)) {\n            if (len > idx) {\n                void *ptr = obj->uni.ptr;\n                unsafe_yyjson_mut_obj_rotate(obj, idx);\n                unsafe_yyjson_mut_obj_add(obj, key, val, len);\n                obj->uni.ptr = ptr;\n            } else {\n                unsafe_yyjson_mut_obj_add(obj, key, val, len);\n            }\n            return true;\n        }\n    }\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove(yyjson_mut_val *obj,\n    yyjson_mut_val *key) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && yyjson_mut_is_str(key))) {\n        return unsafe_yyjson_mut_obj_remove(obj, key->uni.str,\n                                            unsafe_yyjson_get_len(key),\n                                            key->tag);\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_key(\n    yyjson_mut_val *obj, const char *key) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && key)) {\n        size_t key_len = strlen(key);\n        uint64_t tag = ((uint64_t)key_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        return unsafe_yyjson_mut_obj_remove(obj, key, key_len, tag);\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_keyn(\n    yyjson_mut_val *obj, const char *key, size_t key_len) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && key)) {\n        uint64_t tag = ((uint64_t)key_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        return unsafe_yyjson_mut_obj_remove(obj, key, key_len, tag);\n    }\n    return NULL;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_clear(yyjson_mut_val *obj) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj))) {\n        unsafe_yyjson_set_len(obj, 0);\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_replace(yyjson_mut_val *obj,\n                                              yyjson_mut_val *key,\n                                              yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) &&\n                      yyjson_mut_is_str(key) && val)) {\n        return unsafe_yyjson_mut_obj_replace(obj, key, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_rotate(yyjson_mut_val *obj,\n                                             size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) &&\n                      unsafe_yyjson_get_len(obj) > idx)) {\n        unsafe_yyjson_mut_obj_rotate(obj, idx);\n        return true;\n    }\n    return false;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object Modification Convenience API (Implementation)\n *============================================================================*/\n\n#define yyjson_mut_obj_add_func(func) \\\n    if (yyjson_likely(doc && yyjson_mut_is_obj(obj) && _key)) { \\\n        yyjson_mut_val *key = unsafe_yyjson_mut_val(doc, 2); \\\n        if (yyjson_likely(key)) { \\\n            size_t len = unsafe_yyjson_get_len(obj); \\\n            yyjson_mut_val *val = key + 1; \\\n            key->tag = YYJSON_TYPE_STR | YYJSON_SUBTYPE_NONE; \\\n            key->tag |= (uint64_t)strlen(_key) << YYJSON_TAG_BIT; \\\n            key->uni.str = _key; \\\n            func \\\n            unsafe_yyjson_mut_obj_add(obj, key, val, len); \\\n            return true; \\\n        } \\\n    } \\\n    return false\n\nyyjson_api_inline bool yyjson_mut_obj_add_null(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NULL | YYJSON_SUBTYPE_NONE;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_true(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_false(yyjson_mut_doc *doc,\n                                                yyjson_mut_val *obj,\n                                                const char *_key) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_bool(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               bool _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_BOOL | (uint8_t)((uint8_t)(_val) << 3);\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_uint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               uint64_t _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_sint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               int64_t _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_int(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *_key,\n                                              int64_t _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_real(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               double _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n        val->uni.f64 = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_str(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *_key,\n                                              const char *_val) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        val->tag = ((uint64_t)strlen(_val) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_strn(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               const char *_val,\n                                               size_t _len) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        val->tag = ((uint64_t)_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_strcpy(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *obj,\n                                                 const char *_key,\n                                                 const char *_val) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        size_t _len = strlen(_val);\n        val->uni.str = unsafe_yyjson_mut_strncpy(doc, _val, _len);\n        if (yyjson_unlikely(!val->uni.str)) return false;\n        val->tag = ((uint64_t)_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_strncpy(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *obj,\n                                                  const char *_key,\n                                                  const char *_val,\n                                                  size_t _len) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        val->uni.str = unsafe_yyjson_mut_strncpy(doc, _val, _len);\n        if (yyjson_unlikely(!val->uni.str)) return false;\n        val->tag = ((uint64_t)_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_val(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *_key,\n                                              yyjson_mut_val *_val) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        val = _val;\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_str(yyjson_mut_val *obj,\n                                                            const char *key) {\n    return yyjson_mut_obj_remove_strn(obj, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_strn(\n    yyjson_mut_val *obj, const char *_key, size_t _len) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && _key)) {\n        yyjson_mut_val *key;\n        yyjson_mut_obj_iter iter;\n        yyjson_mut_val *val_removed = NULL;\n        yyjson_mut_obj_iter_init(obj, &iter);\n        while ((key = yyjson_mut_obj_iter_next(&iter)) != NULL) {\n            if (unsafe_yyjson_get_len(key) == _len &&\n                memcmp(key->uni.str, _key, _len) == 0) {\n                if (!val_removed) val_removed = key->next;\n                yyjson_mut_obj_iter_remove(&iter);\n            }\n        }\n        return val_removed;\n    }\n    return NULL;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_rename_key(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *obj,\n                                                 const char *key,\n                                                 const char *new_key) {\n    if (!key || !new_key) return false;\n    return yyjson_mut_obj_rename_keyn(doc, obj, key, strlen(key),\n                                      new_key, strlen(new_key));\n}\n\nyyjson_api_inline bool yyjson_mut_obj_rename_keyn(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *obj,\n                                                  const char *key,\n                                                  size_t len,\n                                                  const char *new_key,\n                                                  size_t new_len) {\n    char *cpy_key = NULL;\n    yyjson_mut_val *old_key;\n    yyjson_mut_obj_iter iter;\n    if (!doc || !obj || !key || !new_key) return false;\n    yyjson_mut_obj_iter_init(obj, &iter);\n    while ((old_key = yyjson_mut_obj_iter_next(&iter))) {\n        if (unsafe_yyjson_equals_strn((void *)old_key, key, len)) {\n            if (!cpy_key) {\n                cpy_key = unsafe_yyjson_mut_strncpy(doc, new_key, new_len);\n                if (!cpy_key) return false;\n            }\n            yyjson_mut_set_strn(old_key, cpy_key, new_len);\n        }\n    }\n    return cpy_key != NULL;\n}\n\n\n\n/*==============================================================================\n * JSON Pointer API (Implementation)\n *============================================================================*/\n\n#define yyjson_ptr_set_err(_code, _msg) do { \\\n    if (err) { \\\n        err->code = YYJSON_PTR_ERR_##_code; \\\n        err->msg = _msg; \\\n        err->pos = 0; \\\n    } \\\n} while(false)\n\n/* require: val != NULL, *ptr == '/', len > 0 */\nyyjson_api yyjson_val *unsafe_yyjson_ptr_getx(yyjson_val *val,\n                                              const char *ptr, size_t len,\n                                              yyjson_ptr_err *err);\n\n/* require: val != NULL, *ptr == '/', len > 0 */\nyyjson_api yyjson_mut_val *unsafe_yyjson_mut_ptr_getx(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len,\n                                                      yyjson_ptr_ctx *ctx,\n                                                      yyjson_ptr_err *err);\n\n/* require: val/new_val/doc != NULL, *ptr == '/', len > 0 */\nyyjson_api bool unsafe_yyjson_mut_ptr_putx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent, bool insert_new,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err);\n\n/* require: val/err != NULL, *ptr == '/', len > 0 */\nyyjson_api yyjson_mut_val *unsafe_yyjson_mut_ptr_replacex(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err);\n\n/* require: val/err != NULL, *ptr == '/', len > 0 */\nyyjson_api yyjson_mut_val *unsafe_yyjson_mut_ptr_removex(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len,\n                                                         yyjson_ptr_ctx *ctx,\n                                                         yyjson_ptr_err *err);\n\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_get(yyjson_doc *doc,\n                                                 const char *ptr) {\n    if (yyjson_unlikely(!ptr)) return NULL;\n    return yyjson_doc_ptr_getn(doc, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_getn(yyjson_doc *doc,\n                                                  const char *ptr, size_t len) {\n    return yyjson_doc_ptr_getx(doc, ptr, len, NULL);\n}\n\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_getx(yyjson_doc *doc,\n                                                  const char *ptr, size_t len,\n                                                  yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (yyjson_unlikely(!doc || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        return doc->root;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_ptr_getx(doc->root, ptr, len, err);\n}\n\nyyjson_api_inline yyjson_val *yyjson_ptr_get(yyjson_val *val,\n                                             const char *ptr) {\n    if (yyjson_unlikely(!ptr)) return NULL;\n    return yyjson_ptr_getn(val, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_val *yyjson_ptr_getn(yyjson_val *val,\n                                              const char *ptr, size_t len) {\n    return yyjson_ptr_getx(val, ptr, len, NULL);\n}\n\nyyjson_api_inline yyjson_val *yyjson_ptr_getx(yyjson_val *val,\n                                              const char *ptr, size_t len,\n                                              yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (yyjson_unlikely(!val || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        return val;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_ptr_getx(val, ptr, len, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_get(yyjson_mut_doc *doc,\n                                                         const char *ptr) {\n    if (!ptr) return NULL;\n    return yyjson_mut_doc_ptr_getn(doc, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getn(yyjson_mut_doc *doc,\n                                                          const char *ptr,\n                                                          size_t len) {\n    return yyjson_mut_doc_ptr_getx(doc, ptr, len, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getx(yyjson_mut_doc *doc,\n                                                          const char *ptr,\n                                                          size_t len,\n                                                          yyjson_ptr_ctx *ctx,\n                                                          yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        return doc->root;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_getx(doc->root, ptr, len, ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_get(yyjson_mut_val *val,\n                                                     const char *ptr) {\n    if (!ptr) return NULL;\n    return yyjson_mut_ptr_getn(val, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getn(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len) {\n    return yyjson_mut_ptr_getx(val, ptr, len, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getx(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len,\n                                                      yyjson_ptr_ctx *ctx,\n                                                      yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        return val;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_getx(val, ptr, len, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_add(yyjson_mut_doc *doc,\n                                              const char *ptr,\n                                              yyjson_mut_val *new_val) {\n    if (yyjson_unlikely(!ptr)) return false;\n    return yyjson_mut_doc_ptr_addn(doc, ptr, strlen(ptr), new_val);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_addn(yyjson_mut_doc *doc,\n                                               const char *ptr,\n                                               size_t len,\n                                               yyjson_mut_val *new_val) {\n    return yyjson_mut_doc_ptr_addx(doc, ptr, len, new_val, true, NULL, NULL);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_addx(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val,\n                                               bool create_parent,\n                                               yyjson_ptr_ctx *ctx,\n                                               yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr || !new_val)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        if (doc->root) {\n            yyjson_ptr_set_err(SET_ROOT, \"cannot set document's root\");\n            return false;\n        } else {\n            doc->root = new_val;\n            return true;\n        }\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return false;\n    }\n    if (yyjson_unlikely(!doc->root && !create_parent)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_mut_val *root = yyjson_mut_obj(doc);\n        if (yyjson_unlikely(!root)) {\n            yyjson_ptr_set_err(MEMORY_ALLOCATION, \"failed to create value\");\n            return false;\n        }\n        if (unsafe_yyjson_mut_ptr_putx(root, ptr, len, new_val, doc,\n                                       create_parent, true, ctx, err)) {\n            doc->root = root;\n            return true;\n        }\n        return false;\n    }\n    return unsafe_yyjson_mut_ptr_putx(doc->root, ptr, len, new_val, doc,\n                                      create_parent, true, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_add(yyjson_mut_val *val,\n                                          const char *ptr,\n                                          yyjson_mut_val *new_val,\n                                          yyjson_mut_doc *doc) {\n    if (yyjson_unlikely(!ptr)) return false;\n    return yyjson_mut_ptr_addn(val, ptr, strlen(ptr), new_val, doc);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_addn(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc) {\n    return yyjson_mut_ptr_addx(val, ptr, len, new_val, doc, true, NULL, NULL);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_addx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr || !new_val || !doc)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_ptr_set_err(SET_ROOT, \"cannot set root\");\n        return false;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return false;\n    }\n    return unsafe_yyjson_mut_ptr_putx(val, ptr, len, new_val,\n                                       doc, create_parent, true, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_set(yyjson_mut_doc *doc,\n                                              const char *ptr,\n                                              yyjson_mut_val *new_val) {\n    if (yyjson_unlikely(!ptr)) return false;\n    return yyjson_mut_doc_ptr_setn(doc, ptr, strlen(ptr), new_val);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_setn(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val) {\n    return yyjson_mut_doc_ptr_setx(doc, ptr, len, new_val, true, NULL, NULL);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_setx(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val,\n                                               bool create_parent,\n                                               yyjson_ptr_ctx *ctx,\n                                               yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        if (ctx) ctx->old = doc->root;\n        doc->root = new_val;\n        return true;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return false;\n    }\n    if (!new_val) {\n        if (!doc->root) {\n            yyjson_ptr_set_err(RESOLVE, \"JSON pointer cannot be resolved\");\n            return false;\n        }\n        return !!unsafe_yyjson_mut_ptr_removex(doc->root, ptr, len, ctx, err);\n    }\n    if (yyjson_unlikely(!doc->root && !create_parent)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_mut_val *root = yyjson_mut_obj(doc);\n        if (yyjson_unlikely(!root)) {\n            yyjson_ptr_set_err(MEMORY_ALLOCATION, \"failed to create value\");\n            return false;\n        }\n        if (unsafe_yyjson_mut_ptr_putx(root, ptr, len, new_val, doc,\n                                       create_parent, false, ctx, err)) {\n            doc->root = root;\n            return true;\n        }\n        return false;\n    }\n    return unsafe_yyjson_mut_ptr_putx(doc->root, ptr, len, new_val, doc,\n                                      create_parent, false, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_set(yyjson_mut_val *val,\n                                          const char *ptr,\n                                          yyjson_mut_val *new_val,\n                                          yyjson_mut_doc *doc) {\n    if (yyjson_unlikely(!ptr)) return false;\n    return yyjson_mut_ptr_setn(val, ptr, strlen(ptr), new_val, doc);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_setn(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc) {\n    return yyjson_mut_ptr_setx(val, ptr, len, new_val, doc, true, NULL, NULL);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_setx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr || !doc)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_ptr_set_err(SET_ROOT, \"cannot set root\");\n        return false;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return false;\n    }\n    if (!new_val) {\n        return !!unsafe_yyjson_mut_ptr_removex(val, ptr, len, ctx, err);\n    }\n    return unsafe_yyjson_mut_ptr_putx(val, ptr, len, new_val, doc,\n                                      create_parent, false, ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replace(\n    yyjson_mut_doc *doc, const char *ptr, yyjson_mut_val *new_val) {\n    if (!ptr) return NULL;\n    return yyjson_mut_doc_ptr_replacen(doc, ptr, strlen(ptr), new_val);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacen(\n    yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val) {\n    return yyjson_mut_doc_ptr_replacex(doc, ptr, len, new_val, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacex(\n    yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err) {\n    \n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr || !new_val)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_mut_val *root = doc->root;\n        if (yyjson_unlikely(!root)) {\n            yyjson_ptr_set_err(RESOLVE, \"JSON pointer cannot be resolved\");\n            return NULL;\n        }\n        if (ctx) ctx->old = root;\n        doc->root = new_val;\n        return root;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_replacex(doc->root, ptr, len, new_val,\n                                          ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replace(\n    yyjson_mut_val *val, const char *ptr, yyjson_mut_val *new_val) {\n    if (!ptr) return NULL;\n    return yyjson_mut_ptr_replacen(val, ptr, strlen(ptr), new_val);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacen(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val) {\n    return yyjson_mut_ptr_replacex(val, ptr, len, new_val, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacex(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err) {\n    \n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr || !new_val)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_ptr_set_err(SET_ROOT, \"cannot set root\");\n        return NULL;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_replacex(val, ptr, len, new_val, ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_remove(\n    yyjson_mut_doc *doc, const char *ptr) {\n    if (!ptr) return NULL;\n    return yyjson_mut_doc_ptr_removen(doc, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removen(\n    yyjson_mut_doc *doc, const char *ptr, size_t len) {\n    return yyjson_mut_doc_ptr_removex(doc, ptr, len, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removex(\n    yyjson_mut_doc *doc, const char *ptr, size_t len,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err) {\n    \n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_mut_val *root = doc->root;\n        if (ctx) ctx->old = root;\n        doc->root = NULL;\n        return root;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_removex(doc->root, ptr, len, ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_remove(yyjson_mut_val *val,\n                                                        const char *ptr) {\n    if (!ptr) return NULL;\n    return yyjson_mut_ptr_removen(val, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removen(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len) {\n    return yyjson_mut_ptr_removex(val, ptr, len, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removex(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len,\n                                                         yyjson_ptr_ctx *ctx,\n                                                         yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_ptr_set_err(SET_ROOT, \"cannot set root\");\n        return NULL;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_removex(val, ptr, len, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_ptr_ctx_append(yyjson_ptr_ctx *ctx,\n                                             yyjson_mut_val *key,\n                                             yyjson_mut_val *val) {\n    yyjson_mut_val *ctn, *pre_key, *pre_val, *cur_key, *cur_val;\n    if (!ctx || !ctx->ctn || !val) return false;\n    ctn = ctx->ctn;\n    \n    if (yyjson_mut_is_obj(ctn)) {\n        if (!key) return false;\n        key->next = val;\n        pre_key = ctx->pre;\n        if (unsafe_yyjson_get_len(ctn) == 0) {\n            val->next = key;\n            ctn->uni.ptr = key;\n            ctx->pre = key;\n        } else if (!pre_key) {\n            pre_key = (yyjson_mut_val *)ctn->uni.ptr;\n            pre_val = pre_key->next;\n            val->next = pre_val->next;\n            pre_val->next = key;\n            ctn->uni.ptr = key;\n            ctx->pre = pre_key;\n        } else {\n            cur_key = pre_key->next->next;\n            cur_val = cur_key->next;\n            val->next = cur_val->next;\n            cur_val->next = key;\n            if (ctn->uni.ptr == cur_key) ctn->uni.ptr = key;\n            ctx->pre = cur_key;\n        }\n    } else {\n        pre_val = ctx->pre;\n        if (unsafe_yyjson_get_len(ctn) == 0) {\n            val->next = val;\n            ctn->uni.ptr = val;\n            ctx->pre = val;\n        } else if (!pre_val) {\n            pre_val = (yyjson_mut_val *)ctn->uni.ptr;\n            val->next = pre_val->next;\n            pre_val->next = val;\n            ctn->uni.ptr = val;\n            ctx->pre = pre_val;\n        } else {\n            cur_val = pre_val->next;\n            val->next = cur_val->next;\n            cur_val->next = val;\n            if (ctn->uni.ptr == cur_val) ctn->uni.ptr = val;\n            ctx->pre = cur_val;\n        }\n    }\n    unsafe_yyjson_inc_len(ctn);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_ptr_ctx_replace(yyjson_ptr_ctx *ctx,\n                                              yyjson_mut_val *val) {\n    yyjson_mut_val *ctn, *pre_key, *cur_key, *pre_val, *cur_val;\n    if (!ctx || !ctx->ctn || !ctx->pre || !val) return false;\n    ctn = ctx->ctn;\n    if (yyjson_mut_is_obj(ctn)) {\n        pre_key = ctx->pre;\n        pre_val = pre_key->next;\n        cur_key = pre_val->next;\n        cur_val = cur_key->next;\n        /* replace current value */\n        cur_key->next = val;\n        val->next = cur_val->next;\n        ctx->old = cur_val;\n    } else {\n        pre_val = ctx->pre;\n        cur_val = pre_val->next;\n        /* replace current value */\n        if (pre_val != cur_val) {\n            val->next = cur_val->next;\n            pre_val->next = val;\n            if (ctn->uni.ptr == cur_val) ctn->uni.ptr = val;\n        } else {\n            val->next = val;\n            ctn->uni.ptr = val;\n            ctx->pre = val;\n        }\n        ctx->old = cur_val;\n    }\n    return true;\n}\n\nyyjson_api_inline bool yyjson_ptr_ctx_remove(yyjson_ptr_ctx *ctx) {\n    yyjson_mut_val *ctn, *pre_key, *pre_val, *cur_key, *cur_val;\n    size_t len;\n    if (!ctx || !ctx->ctn || !ctx->pre) return false;\n    ctn = ctx->ctn;\n    if (yyjson_mut_is_obj(ctn)) {\n        pre_key = ctx->pre;\n        pre_val = pre_key->next;\n        cur_key = pre_val->next;\n        cur_val = cur_key->next;\n        /* remove current key-value */\n        pre_val->next = cur_val->next;\n        if (ctn->uni.ptr == cur_key) ctn->uni.ptr = pre_key;\n        ctx->pre = NULL;\n        ctx->old = cur_val;\n    } else {\n        pre_val = ctx->pre;\n        cur_val = pre_val->next;\n        /* remove current key-value */\n        pre_val->next = cur_val->next;\n        if (ctn->uni.ptr == cur_val) ctn->uni.ptr = pre_val;\n        ctx->pre = NULL;\n        ctx->old = cur_val;\n    }\n    len = unsafe_yyjson_get_len(ctn) - 1;\n    if (len == 0) ctn->uni.ptr = NULL;\n    unsafe_yyjson_set_len(ctn, len);\n    return true;\n}\n\n#undef yyjson_ptr_set_err\n\n\n\n/*==============================================================================\n * JSON Value at Pointer API (Implementation)\n *============================================================================*/\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type bool.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_bool(\n    yyjson_val *root, const char *ptr, bool *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_bool(val)) {\n        *value = unsafe_yyjson_get_bool(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type uint.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_uint(\n    yyjson_val *root, const char *ptr, uint64_t *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_uint(val)) {\n        *value = unsafe_yyjson_get_uint(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type sint.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_sint(\n    yyjson_val *root, const char *ptr, int64_t *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_sint(val)) {\n        *value = unsafe_yyjson_get_sint(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type real.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_real(\n    yyjson_val *root, const char *ptr, double *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_real(val)) {\n        *value = unsafe_yyjson_get_real(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type sint,\n uint or real.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_num(\n    yyjson_val *root, const char *ptr, double *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_num(val)) {\n        *value = unsafe_yyjson_get_num(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type string.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_str(\n    yyjson_val *root, const char *ptr, const char **value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_str(val)) {\n        *value = unsafe_yyjson_get_str(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n\n\n/*==============================================================================\n * Deprecated\n *============================================================================*/\n\n/** @deprecated renamed to `yyjson_doc_ptr_get` */\nyyjson_deprecated(\"renamed to yyjson_doc_ptr_get\")\nyyjson_api_inline yyjson_val *yyjson_doc_get_pointer(yyjson_doc *doc,\n                                                     const char *ptr) {\n    return yyjson_doc_ptr_get(doc, ptr);\n}\n\n/** @deprecated renamed to `yyjson_doc_ptr_getn` */\nyyjson_deprecated(\"renamed to yyjson_doc_ptr_getn\")\nyyjson_api_inline yyjson_val *yyjson_doc_get_pointern(yyjson_doc *doc,\n                                                      const char *ptr,\n                                                      size_t len) {\n    return yyjson_doc_ptr_getn(doc, ptr, len);\n}\n\n/** @deprecated renamed to `yyjson_mut_doc_ptr_get` */\nyyjson_deprecated(\"renamed to yyjson_mut_doc_ptr_get\")\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_pointer(\n    yyjson_mut_doc *doc, const char *ptr) {\n    return yyjson_mut_doc_ptr_get(doc, ptr);\n}\n\n/** @deprecated renamed to `yyjson_mut_doc_ptr_getn` */\nyyjson_deprecated(\"renamed to yyjson_mut_doc_ptr_getn\")\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_pointern(\n    yyjson_mut_doc *doc, const char *ptr, size_t len) {\n    return yyjson_mut_doc_ptr_getn(doc, ptr, len);\n}\n\n/** @deprecated renamed to `yyjson_ptr_get` */\nyyjson_deprecated(\"renamed to yyjson_ptr_get\")\nyyjson_api_inline yyjson_val *yyjson_get_pointer(yyjson_val *val,\n                                                 const char *ptr) {\n    return yyjson_ptr_get(val, ptr);\n}\n\n/** @deprecated renamed to `yyjson_ptr_getn` */\nyyjson_deprecated(\"renamed to yyjson_ptr_getn\")\nyyjson_api_inline yyjson_val *yyjson_get_pointern(yyjson_val *val,\n                                                  const char *ptr,\n                                                  size_t len) {\n    return yyjson_ptr_getn(val, ptr, len);\n}\n\n/** @deprecated renamed to `yyjson_mut_ptr_get` */\nyyjson_deprecated(\"renamed to yyjson_mut_ptr_get\")\nyyjson_api_inline yyjson_mut_val *yyjson_mut_get_pointer(yyjson_mut_val *val,\n                                                         const char *ptr) {\n    return yyjson_mut_ptr_get(val, ptr);\n}\n\n/** @deprecated renamed to `yyjson_mut_ptr_getn` */\nyyjson_deprecated(\"renamed to yyjson_mut_ptr_getn\")\nyyjson_api_inline yyjson_mut_val *yyjson_mut_get_pointern(yyjson_mut_val *val,\n                                                          const char *ptr,\n                                                          size_t len) {\n    return yyjson_mut_ptr_getn(val, ptr, len);\n}\n\n/** @deprecated renamed to `yyjson_mut_ptr_getn` */\nyyjson_deprecated(\"renamed to unsafe_yyjson_ptr_getn\")\nyyjson_api_inline yyjson_val *unsafe_yyjson_get_pointer(yyjson_val *val,\n                                                        const char *ptr,\n                                                        size_t len) {\n    yyjson_ptr_err err;\n    return unsafe_yyjson_ptr_getx(val, ptr, len, &err);\n}\n\n/** @deprecated renamed to `unsafe_yyjson_mut_ptr_getx` */\nyyjson_deprecated(\"renamed to unsafe_yyjson_mut_ptr_getx\")\nyyjson_api_inline yyjson_mut_val *unsafe_yyjson_mut_get_pointer(\n    yyjson_mut_val *val, const char *ptr, size_t len) {\n    yyjson_ptr_err err;\n    return unsafe_yyjson_mut_ptr_getx(val, ptr, len, NULL, &err);\n}\n\n\n\n/*==============================================================================\n * Compiler Hint End\n *============================================================================*/\n\n#if defined(__clang__)\n#   pragma clang diagnostic pop\n#elif defined(__GNUC__)\n#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)\n#   pragma GCC diagnostic pop\n#   endif\n#elif defined(_MSC_VER)\n#   pragma warning(pop)\n#endif /* warning suppress end */\n\n#ifdef __cplusplus\n}\n#endif /* extern \"C\" end */\n\n#endif /* YYJSON_H */\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/LICENSE.txt",
    "content": "/* ----------------------------------------------------------------- */\n/*           WORLD: High-quality speech analysis,                    */\n/*           manipulation and synthesis system                       */\n/*           developed by M. Morise                                  */\n/*           http://www.kisc.meiji.ac.jp/~mmorise/world/english/     */\n/* ----------------------------------------------------------------- */\n/*                                                                   */\n/*  Copyright (c) 2010  M. Morise                                    */\n/*                                                                   */\n/* All rights reserved.                                              */\n/*                                                                   */\n/* Redistribution and use in source and binary forms, with or        */\n/* without modification, are permitted provided that the following   */\n/* conditions are met:                                               */\n/*                                                                   */\n/* - Redistributions of source code must retain the above copyright  */\n/*   notice, this list of conditions and the following disclaimer.   */\n/* - Redistributions in binary form must reproduce the above         */\n/*   copyright notice, this list of conditions and the following     */\n/*   disclaimer in the documentation and/or other materials provided */\n/*   with the distribution.                                          */\n/* - Neither the name of the M. Morise nor the names of its          */\n/*   contributors may be used to endorse or promote products derived */\n/*   from this software without specific prior written permission.   */\n/*                                                                   */\n/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND            */\n/* CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,       */\n/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF          */\n/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE          */\n/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS */\n/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,          */\n/* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED   */\n/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     */\n/* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */\n/* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,   */\n/* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY    */\n/* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE           */\n/* POSSIBILITY OF SUCH DAMAGE.                                       */\n/* ----------------------------------------------------------------- */\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/cheaptrick.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Spectral envelope estimation on the basis of the idea of CheapTrick.\n//-----------------------------------------------------------------------------\n#include \"world/cheaptrick.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n\n//-----------------------------------------------------------------------------\n// SmoothingWithRecovery() carries out the spectral smoothing and spectral\n// recovery on the Cepstrum domain.\n//-----------------------------------------------------------------------------\nstatic void SmoothingWithRecovery(double f0, int fs, int fft_size, double q1,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft, double *spectral_envelope) {\n  double *smoothing_lifter = new double[fft_size];\n  double *compensation_lifter = new double[fft_size];\n\n  smoothing_lifter[0] = 1.0;\n  compensation_lifter[0] = (1.0 - 2.0 * q1) + 2.0 * q1;\n  double quefrency;\n  for (int i = 1; i <= forward_real_fft->fft_size / 2; ++i) {\n    quefrency = static_cast<double>(i) / fs;\n    smoothing_lifter[i] = sin(world::kPi * f0 * quefrency) /\n      (world::kPi * f0 * quefrency);\n    compensation_lifter[i] = (1.0 - 2.0 * q1) + 2.0 * q1 *\n      cos(2.0 * world::kPi * quefrency * f0);\n  }\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    forward_real_fft->waveform[i] = log(forward_real_fft->waveform[i]);\n  for (int i = 1; i < fft_size / 2; ++i)\n    forward_real_fft->waveform[fft_size - i] = forward_real_fft->waveform[i];\n  fft_execute(forward_real_fft->forward_fft);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] = forward_real_fft->spectrum[i][0] *\n      smoothing_lifter[i] * compensation_lifter[i] / fft_size;\n    inverse_real_fft->spectrum[i][1] = 0.0;\n  }\n  fft_execute(inverse_real_fft->inverse_fft);\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    spectral_envelope[i] = exp(inverse_real_fft->waveform[i]);\n\n  delete[] smoothing_lifter;\n  delete[] compensation_lifter;\n}\n\n//-----------------------------------------------------------------------------\n// GetPowerSpectrum() calculates the power_spectrum with DC correction.\n// DC stands for Direct Current. In this case, the component from 0 to F0 Hz\n// is corrected.\n//-----------------------------------------------------------------------------\nstatic void GetPowerSpectrum(int fs, double f0, int fft_size,\n    const ForwardRealFFT *forward_real_fft) {\n  int half_window_length = matlab_round(1.5 * fs / f0);\n\n  // FFT\n  for (int i = half_window_length * 2 + 1; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n\n  // Calculation of the power spectrum.\n  double *power_spectrum = forward_real_fft->waveform;\n  for (int i = 0; i <= fft_size / 2; ++i)\n    power_spectrum[i] =\n      forward_real_fft->spectrum[i][0] * forward_real_fft->spectrum[i][0] +\n      forward_real_fft->spectrum[i][1] * forward_real_fft->spectrum[i][1];\n\n  // DC correction\n  DCCorrection(power_spectrum, f0, fs, fft_size, power_spectrum);\n}\n\n//-----------------------------------------------------------------------------\n// SetParametersForGetWindowedWaveform()\n//-----------------------------------------------------------------------------\nstatic void SetParametersForGetWindowedWaveform(int half_window_length,\n    int x_length, double currnet_position, int fs, double current_f0,\n    int *base_index, int *safe_index, double *window) {\n  for (int i = -half_window_length; i <= half_window_length; ++i)\n    base_index[i + half_window_length] = i;\n  int origin = matlab_round(currnet_position * fs + 0.001);\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    safe_index[i] =\n      MyMinInt(x_length - 1, MyMaxInt(0, origin + base_index[i]));\n\n  // Designing of the window function\n  double average = 0.0;\n  double position;\n  for (int i = 0; i <= half_window_length * 2; ++i) {\n    position = base_index[i] / 1.5 / fs;\n    window[i] = 0.5 * cos(world::kPi * position * current_f0) + 0.5;\n    average += window[i] * window[i];\n  }\n  average = sqrt(average);\n  for (int i = 0; i <= half_window_length * 2; ++i) window[i] /= average;\n}\n\n//-----------------------------------------------------------------------------\n// GetWindowedWaveform() windows the waveform by F0-adaptive window\n//-----------------------------------------------------------------------------\nstatic void GetWindowedWaveform(const double *x, int x_length, int fs,\n    double current_f0, double currnet_position,\n    const ForwardRealFFT *forward_real_fft) {\n  int half_window_length = matlab_round(1.5 * fs / current_f0);\n\n  int *base_index = new int[half_window_length * 2 + 1];\n  int *safe_index = new int[half_window_length * 2 + 1];\n  double *window  = new double[half_window_length * 2 + 1];\n\n  SetParametersForGetWindowedWaveform(half_window_length, x_length,\n      currnet_position, fs, current_f0, base_index, safe_index, window);\n\n  // F0-adaptive windowing\n  double *waveform = forward_real_fft->waveform;\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    waveform[i] = x[safe_index[i]] * window[i] +\n      randn() * world::kMySafeGuardMinimum;\n  double tmp_weight1 = 0;\n  double tmp_weight2 = 0;\n  for (int i = 0; i <= half_window_length * 2; ++i) {\n    tmp_weight1 += waveform[i];\n    tmp_weight2 += window[i];\n  }\n  double weighting_coefficient = tmp_weight1 / tmp_weight2;\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    waveform[i] -= window[i] * weighting_coefficient;\n\n  delete[] base_index;\n  delete[] safe_index;\n  delete[] window;\n}\n\n//-----------------------------------------------------------------------------\n// AddInfinitesimalNoise()\n//-----------------------------------------------------------------------------\nstatic void AddInfinitesimalNoise(const double *input_spectrum, int fft_size,\n    double *output_spectrum) {\n  for (int i = 0; i <= fft_size / 2; ++i)\n    output_spectrum[i] = input_spectrum[i] + fabs(randn()) * world::kEps;\n}\n\n//-----------------------------------------------------------------------------\n// CheapTrickGeneralBody() calculates a spectral envelope at a temporal\n// position. This function is only used in CheapTrick().\n// Caution:\n//   forward_fft is allocated in advance to speed up the processing.\n//-----------------------------------------------------------------------------\nstatic void CheapTrickGeneralBody(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position, double q1,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft, double *spectral_envelope) {\n  // F0-adaptive windowing\n  GetWindowedWaveform(x, x_length, fs, current_f0, current_position,\n      forward_real_fft);\n\n  // Calculate power spectrum with DC correction\n  // Note: The calculated power spectrum is stored in an array for waveform.\n  // In this imprementation, power spectrum is transformed by FFT (NOT IFFT).\n  // However, the same result is obtained.\n  // This is tricky but important for simple implementation.\n  GetPowerSpectrum(fs, current_f0, fft_size, forward_real_fft);\n\n  // Smoothing of the power (linear axis)\n  // forward_real_fft.waveform is the power spectrum.\n  LinearSmoothing(forward_real_fft->waveform, current_f0 * 2.0 / 3.0,\n      fs, fft_size, forward_real_fft->waveform);\n\n  // Add infinitesimal noise\n  // This is a safeguard to avoid including zero in the spectrum.\n  AddInfinitesimalNoise(forward_real_fft->waveform, fft_size,\n      forward_real_fft->waveform);\n\n  // Smoothing (log axis) and spectral recovery on the cepstrum domain.\n  SmoothingWithRecovery(current_f0, fs, fft_size, q1, forward_real_fft,\n      inverse_real_fft, spectral_envelope);\n}\n\n}  // namespace\n\nint GetFFTSizeForCheapTrick(int fs, const CheapTrickOption *option) {\n  return static_cast<int>(pow(2.0, 1.0 +\n      static_cast<int>(log(3.0 * fs / option->f0_floor + 1) / world::kLog2)));\n}\n\ndouble GetF0FloorForCheapTrick(int fs, int fft_size) {\n  return 3.0 * fs / (fft_size - 3.0);\n}\n\nvoid CheapTrick(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    const CheapTrickOption *option, double **spectrogram) {\n  int fft_size = option->fft_size;\n\n  randn_reseed();\n\n  double f0_floor = GetF0FloorForCheapTrick(fs, fft_size);\n  double *spectral_envelope = new double[fft_size];\n\n  ForwardRealFFT forward_real_fft = {0};\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n  InverseRealFFT inverse_real_fft = {0};\n  InitializeInverseRealFFT(fft_size, &inverse_real_fft);\n\n  double current_f0;\n  for (int i = 0; i < f0_length; ++i) {\n    current_f0 = f0[i] <= f0_floor ? world::kDefaultF0 : f0[i];\n    CheapTrickGeneralBody(x, x_length, fs, current_f0, fft_size,\n        temporal_positions[i], option->q1, &forward_real_fft,\n        &inverse_real_fft, spectral_envelope);\n    for (int j = 0; j <= fft_size / 2; ++j)\n      spectrogram[i][j] = spectral_envelope[j];\n  }\n\n  DestroyForwardRealFFT(&forward_real_fft);\n  DestroyInverseRealFFT(&inverse_real_fft);\n  delete[] spectral_envelope;\n}\n\nvoid InitializeCheapTrickOption(int fs, CheapTrickOption *option) {\n  // q1 is the parameter used for the spectral recovery.\n  // Since The parameter is optimized, you don't need to change the parameter.\n  option->q1 = -0.15;\n  // f0_floor and fs are used to determine fft_size;\n  // We strongly recommend not to change this value unless you have enough\n  // knowledge of the signal processing in CheapTrick.\n  option->f0_floor = world::kFloorF0;\n  option->fft_size = GetFFTSizeForCheapTrick(fs, option);\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/codec.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2017 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Coder/decoder functions for the spectral envelope and aperiodicity.\n//-----------------------------------------------------------------------------\n#include \"world/codec.h\"\n\n#include <math.h>\n\n#include \"world/constantnumbers.h\"\n#include \"world/fft.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n//-----------------------------------------------------------------------------\n// Aperiodicity is initialized by the value 1.0 - world::kMySafeGuardMinimum.\n// This value means the frame/frequency index is aperiodic.\n//-----------------------------------------------------------------------------\nstatic void InitializeAperiodicity(int f0_length, int fft_size,\n    double **aperiodicity) {\n  for (int i = 0; i < f0_length; ++i)\n    for (int j = 0; j < fft_size / 2 + 1; ++j)\n      aperiodicity[i][j] = 1.0 - world::kMySafeGuardMinimum;\n}\n\n//-----------------------------------------------------------------------------\n// This function identifies whether this frame is voiced or unvoiced.\n//-----------------------------------------------------------------------------\nstatic int CheckVUV(const double *coarse_aperiodicity,\n    int number_of_aperiodicities, double *tmp_aperiodicity) {\n  double tmp = 0.0;\n  for (int i = 0; i < number_of_aperiodicities; ++i) {\n    tmp += coarse_aperiodicity[i];\n    tmp_aperiodicity[i + 1] = coarse_aperiodicity[i];\n  }\n  tmp /= number_of_aperiodicities;\n\n  return tmp > -0.5 ? 1 : 0;  // -0.5 is not optimized, but okay.\n}\n\n//-----------------------------------------------------------------------------\n// Aperiodicity is obtained from the coded aperiodicity.\n//-----------------------------------------------------------------------------\nstatic void GetAperiodicity(const double *coarse_frequency_axis,\n    const double *coarse_aperiodicity, int number_of_aperiodicities,\n    const double *frequency_axis, int fft_size, double *aperiodicity) {\n  interp1(coarse_frequency_axis, coarse_aperiodicity,\n      number_of_aperiodicities + 2, frequency_axis, fft_size / 2 + 1,\n      aperiodicity);\n  for (int i = 0; i <= fft_size / 2; ++i)\n    aperiodicity[i] = pow(10.0, aperiodicity[i] / 20.0);\n}\n\n//-----------------------------------------------------------------------------\n// Frequency is converted into its mel representation.\n//-----------------------------------------------------------------------------\nstatic inline double FrequencyToMel(double frequency) {\n  return world::kM0 * log(frequency / world::kF0 + 1.0);\n}\n\n//-----------------------------------------------------------------------------\n// Mel is converted into frequency.\n//-----------------------------------------------------------------------------\nstatic inline double MelToFrequency(double mel) {\n  return world::kF0 * (exp(mel / world::kM0) - 1.0);\n}\n\n//-----------------------------------------------------------------------------\n// DCT for spectral envelope coding\n//-----------------------------------------------------------------------------\nstatic void DCTForCodec(const double *mel_spectrum, int max_dimension,\n    const fft_complex *weight, const ForwardRealFFT *forward_real_fft,\n    int number_of_dimensions, double *mel_cepstrum) {\n  int bias = max_dimension / 2;\n  for (int i = 0; i < max_dimension / 2; ++i) {\n    forward_real_fft->waveform[i] = mel_spectrum[i * 2];\n    forward_real_fft->waveform[i + bias] =\n      mel_spectrum[max_dimension - (i * 2) - 1];\n  }\n  fft_execute(forward_real_fft->forward_fft);\n\n  double normalization = sqrt(forward_real_fft->fft_size);\n  for (int i = 0; i < number_of_dimensions; ++i)\n    mel_cepstrum[i] = (forward_real_fft->spectrum[i][0] * weight[i][0] -\n      forward_real_fft->spectrum[i][1] * weight[i][1]) / normalization;\n}\n\n//-----------------------------------------------------------------------------\n// IDCT for spectral envelope decoding\n//-----------------------------------------------------------------------------\nstatic void IDCTForCodec(const double *mel_cepstrum, int max_dimension,\n    const fft_complex *weight, const InverseComplexFFT *inverse_complex_fft,\n    int number_of_dimensions, double *mel_spectrum) {\n  double normalization = sqrt(inverse_complex_fft->fft_size);\n  for (int i = 0; i < number_of_dimensions; ++i) {\n    inverse_complex_fft->input[i][0] =\n      mel_cepstrum[i] * weight[i][0] * normalization;\n    inverse_complex_fft->input[i][1] =\n      -mel_cepstrum[i] * weight[i][1] * normalization;\n  }\n  for (int i = number_of_dimensions; i < max_dimension; ++i) {\n    inverse_complex_fft->input[i][0] = 0.0;\n    inverse_complex_fft->input[i][1] = 0.0;\n  }\n\n  fft_execute(inverse_complex_fft->inverse_fft);\n\n  for (int i = 0; i < max_dimension / 2; ++i) {\n    mel_spectrum[i * 2] = inverse_complex_fft->output[i][0];\n    mel_spectrum[(i * 2) + 1] =\n      inverse_complex_fft->output[max_dimension - i - 1][0];\n  }\n}\n\n//-----------------------------------------------------------------------------\n// Spectral envelope in a frame is coded\n//-----------------------------------------------------------------------------\nstatic void CodeOneFrame(const double *log_spectral_envelope,\n    const double *frequency_axis, int fft_size, const double *mel_axis,\n    const fft_complex *weight, int max_dimension, int number_of_dimensions,\n    const ForwardRealFFT *forward_real_fft, double *coded_spectral_envelope) {\n  double *mel_spectrum = new double[max_dimension];\n  interp1(frequency_axis, log_spectral_envelope, fft_size / 2 + 1,\n      mel_axis, max_dimension, mel_spectrum);\n\n  // DCT\n  DCTForCodec(mel_spectrum, max_dimension, weight, forward_real_fft,\n      number_of_dimensions, coded_spectral_envelope);\n\n  delete[] mel_spectrum;\n}\n\n//-----------------------------------------------------------------------------\n// Coded spectral envelope in a frame is decoded\n//-----------------------------------------------------------------------------\nstatic void DecodeOneFrame(const double *coded_spectral_envelope,\n    const double *frequency_axis, int fft_size, const double *mel_axis,\n    const fft_complex *weight, int max_dimension, int number_of_dimensions,\n    const InverseComplexFFT *inverse_complex_fft, double *spectral_envelope) {\n  double *mel_spectrum = new double[max_dimension + 2];\n\n  // IDCT\n  IDCTForCodec(coded_spectral_envelope, max_dimension, weight,\n      inverse_complex_fft, number_of_dimensions, &mel_spectrum[1]);\n  mel_spectrum[0] = mel_spectrum[1];\n  mel_spectrum[max_dimension + 1] = mel_spectrum[max_dimension];\n\n  interp1(mel_axis, mel_spectrum, max_dimension + 2, frequency_axis,\n      fft_size / 2 + 1, spectral_envelope);\n\n  for (int i = 0; i < fft_size / 2 + 1; ++i)\n    spectral_envelope[i] = exp(spectral_envelope[i] / max_dimension);\n\n  delete[] mel_spectrum;\n}\n\n//-----------------------------------------------------------------------------\n// GetParameters() generates the required parameters.\n//-----------------------------------------------------------------------------\nstatic void GetParametersForCoding(double floor_frequency,\n    double ceil_frequency, int fs, int fft_size, double *mel_axis,\n    double *frequency_axis, fft_complex *weight) {\n  int max_dimension = fft_size / 2;\n  double floor_mel = FrequencyToMel(floor_frequency);\n  double ceil_mel = FrequencyToMel(ceil_frequency);\n\n  // Generate the mel axis and the weighting vector for DCT.\n  for (int i = 0; i < max_dimension; ++i) {\n    mel_axis[i] = (ceil_mel - floor_mel) * i / max_dimension + floor_mel;\n    weight[i][0] = 2.0 * cos(i * world::kPi / fft_size) / sqrt(fft_size);\n    weight[i][1] = 2.0 * sin(i * world::kPi / fft_size) / sqrt(fft_size);\n  }\n  weight[0][0] /= sqrt(2.0);\n\n  // Generate the frequency axis on mel scale\n  for (int i = 0; i <= max_dimension; ++i)\n    frequency_axis[i] = FrequencyToMel(static_cast<double>(i) * fs / fft_size);\n}\n\n//-----------------------------------------------------------------------------\n// GetParameters() generates the required parameters.\n//-----------------------------------------------------------------------------\nstatic void GetParametersForDecoding(double floor_frequency,\n    double ceil_frequency, int fs, int fft_size, int number_of_dimensions,\n    double *mel_axis, double *frequency_axis, fft_complex *weight) {\n  int max_dimension = fft_size / 2;\n  double floor_mel = FrequencyToMel(floor_frequency);\n  double ceil_mel = FrequencyToMel(ceil_frequency);\n\n  // Generate the weighting vector for IDCT.\n  for (int i = 0; i < number_of_dimensions; ++i) {\n    weight[i][0] = cos(i * world::kPi / fft_size) * sqrt(fft_size);\n    weight[i][1] = sin(i * world::kPi / fft_size) * sqrt(fft_size);\n  }\n  weight[0][0] /= sqrt(2.0);\n  // Generate the mel axis for IDCT.\n  for (int i = 0; i < max_dimension; ++i)\n    mel_axis[i + 1] =\n      MelToFrequency((ceil_mel - floor_mel) * i / max_dimension + floor_mel);\n  mel_axis[0] = 0;\n  mel_axis[max_dimension + 1] = fs / 2.0;\n\n  // Generate the frequency axis\n  for (int i = 0; i < fft_size / 2 + 1; ++i)\n    frequency_axis[i] = static_cast<double>(i) * fs / fft_size;\n}\n\n}  // namespace\n\nint GetNumberOfAperiodicities(int fs) {\n  return  static_cast<int>(MyMinDouble(world::kUpperLimit, fs / 2.0 -\n    world::kFrequencyInterval) / world::kFrequencyInterval);\n}\n\nvoid CodeAperiodicity(const double * const *aperiodicity, int f0_length,\n    int fs, int fft_size, double **coded_aperiodicity) {\n  int number_of_aperiodicities = GetNumberOfAperiodicities(fs);\n  double *coarse_frequency_axis = new double[number_of_aperiodicities];\n  for (int i = 0; i < number_of_aperiodicities; ++i)\n    coarse_frequency_axis[i] = world::kFrequencyInterval * (i + 1.0);\n\n  double *log_aperiodicity = new double[fft_size / 2 + 1];\n\n  for (int i = 0; i < f0_length; ++i) {\n    for (int j = 0; j < fft_size / 2 + 1; ++j)\n      log_aperiodicity[j] = 20 * log10(aperiodicity[i][j]);\n    interp1Q(0, static_cast<double>(fs) / fft_size, log_aperiodicity,\n        fft_size / 2 + 1, coarse_frequency_axis, number_of_aperiodicities,\n        coded_aperiodicity[i]);\n  }\n\n  delete[] coarse_frequency_axis;\n  delete[] log_aperiodicity;\n}\n\nvoid DecodeAperiodicity(const double * const *coded_aperiodicity,\n    int f0_length, int fs, int fft_size, double **aperiodicity) {\n  InitializeAperiodicity(f0_length, fft_size, aperiodicity);\n  int number_of_aperiodicities = GetNumberOfAperiodicities(fs);\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  for (int i = 0; i <= fft_size / 2; ++i)\n    frequency_axis[i] = static_cast<double>(fs) / fft_size * i;\n\n  double *coarse_frequency_axis = new double[number_of_aperiodicities + 2];\n  for (int i = 0; i <= number_of_aperiodicities; ++i)\n    coarse_frequency_axis[i] = i * world::kFrequencyInterval;\n  coarse_frequency_axis[number_of_aperiodicities + 1] = fs / 2.0;\n\n  double *coarse_aperiodicity = new double[number_of_aperiodicities + 2];\n  coarse_aperiodicity[0] = -60.0;\n  coarse_aperiodicity[number_of_aperiodicities + 1] =\n    -world::kMySafeGuardMinimum;\n\n  for (int i = 0; i < f0_length; ++i) {\n    if (CheckVUV(coded_aperiodicity[i], number_of_aperiodicities,\n      coarse_aperiodicity) == 1) continue;\n    GetAperiodicity(coarse_frequency_axis, coarse_aperiodicity,\n        number_of_aperiodicities, frequency_axis, fft_size, aperiodicity[i]);\n  }\n\n  delete[] coarse_aperiodicity;\n  delete[] coarse_frequency_axis;\n  delete[] frequency_axis;\n}\n\nvoid CodeSpectralEnvelope(const double * const *spectrogram, int f0_length,\n    int fs, int fft_size, int number_of_dimensions,\n    double **coded_spectral_envelope) {\n  double *mel_axis = new double[fft_size / 2];\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  double *tmp_spectrum = new double[fft_size / 2 + 1];\n  fft_complex *weight = new fft_complex[fft_size / 2];\n\n  // Generation of the required parameters\n  GetParametersForCoding(world::kFloorFrequency,\n      MyMinDouble(fs / 2.0, world::kCeilFrequency), fs, fft_size,\n      mel_axis, frequency_axis, weight);\n\n  ForwardRealFFT forward_real_fft = { 0 };\n  InitializeForwardRealFFT(fft_size / 2, &forward_real_fft);\n\n  for (int i = 0; i < f0_length; ++i) {\n    for (int j = 0; j < fft_size / 2 + 1; ++j)\n      tmp_spectrum[j] = log(spectrogram[i][j]);\n    CodeOneFrame(tmp_spectrum, frequency_axis, fft_size, mel_axis, weight,\n        fft_size / 2, number_of_dimensions, &forward_real_fft,\n        coded_spectral_envelope[i]);\n  }\n\n  DestroyForwardRealFFT(&forward_real_fft);\n  delete[] weight;\n  delete[] tmp_spectrum;\n  delete[] frequency_axis;\n  delete[] mel_axis;\n}\n\nvoid DecodeSpectralEnvelope(const double * const *coded_spectral_envelope,\n    int f0_length, int fs, int fft_size, int number_of_dimensions,\n    double **spectrogram) {\n  double *mel_axis = new double[fft_size / 2 + 2];\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  fft_complex *weight = new fft_complex[fft_size / 2];\n\n  // Generation of the required parameters\n  GetParametersForDecoding(world::kFloorFrequency,\n      MyMinDouble(fs / 2.0, world::kCeilFrequency),\n      fs, fft_size, number_of_dimensions, mel_axis, frequency_axis, weight);\n\n  InverseComplexFFT inverse_complex_fft = { 0 };\n  InitializeInverseComplexFFT(fft_size / 2, &inverse_complex_fft);\n\n  for (int i = 0; i < f0_length; ++i) {\n    DecodeOneFrame(coded_spectral_envelope[i], frequency_axis, fft_size,\n        mel_axis, weight, fft_size / 2, number_of_dimensions,\n        &inverse_complex_fft, spectrogram[i]);\n  }\n\n  DestroyInverseComplexFFT(&inverse_complex_fft);\n  delete[] weight;\n  delete[] frequency_axis;\n  delete[] mel_axis;\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/common.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// common.cpp includes functions used in at least two files.\n// (1) Common functions\n// (2) FFT, IFFT and minimum phase analysis.\n//\n// In FFT analysis and minimum phase analysis,\n// Functions \"Initialize*()\" allocate the mamory.\n// Functions \"Destroy*()\" free the accolated memory.\n// FFT size is used for initialization, and structs are used to keep the memory.\n// Functions \"GetMinimumPhaseSpectrum()\" calculate minimum phase spectrum.\n// Forward and inverse FFT do not have the function \"Get*()\",\n// because forward FFT and inverse FFT can run in one step.\n//\n//-----------------------------------------------------------------------------\n#include \"world/common.h\"\n\n#include <math.h>\n\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\nstatic void SetParametersForLinearSmoothing(int boundary, int fft_size, int fs,\n    double width, const double *power_spectrum, double *mirroring_spectrum,\n    double *mirroring_segment, double *frequency_axis) {\n  for (int i = 0; i < boundary; ++i)\n    mirroring_spectrum[i] = power_spectrum[boundary - i];\n  for (int i = boundary; i < fft_size / 2 + boundary; ++i)\n    mirroring_spectrum[i] = power_spectrum[i - boundary];\n  for (int i = fft_size / 2 + boundary; i <= fft_size / 2 + boundary * 2; ++i)\n    mirroring_spectrum[i] =\n      power_spectrum[fft_size / 2 - (i - (fft_size / 2 + boundary))];\n\n  mirroring_segment[0] = mirroring_spectrum[0] * fs / fft_size;\n  for (int i = 1; i < fft_size / 2 + boundary * 2 + 1; ++i)\n    mirroring_segment[i] = mirroring_spectrum[i] * fs / fft_size +\n    mirroring_segment[i - 1];\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    frequency_axis[i] = static_cast<double>(i) / fft_size *\n    fs - width / 2.0;\n}\n\n}  // namespace\n\n//-----------------------------------------------------------------------------\nint GetSuitableFFTSize(int sample) {\n  return static_cast<int>(pow(2.0,\n    static_cast<int>(log(static_cast<double>(sample)) / world::kLog2) + 1.0));\n}\n\nvoid DCCorrection(const double *input, double f0, int fs, int fft_size,\n    double *output) {\n  int upper_limit = 2 + static_cast<int>(f0 * fft_size / fs);\n  double *low_frequency_replica = new double[upper_limit];\n  double *low_frequency_axis = new double[upper_limit];\n\n  for (int i = 0; i < upper_limit; ++i)\n    low_frequency_axis[i] = static_cast<double>(i) * fs / fft_size;\n\n  int upper_limit_replica = upper_limit - 1;\n  interp1Q(f0 - low_frequency_axis[0],\n      -static_cast<double>(fs) / fft_size, input, upper_limit + 1,\n      low_frequency_axis, upper_limit_replica, low_frequency_replica);\n\n  for (int i = 0; i < upper_limit_replica; ++i)\n    output[i] = input[i] + low_frequency_replica[i];\n\n  delete[] low_frequency_replica;\n  delete[] low_frequency_axis;\n}\n\nvoid LinearSmoothing(const double *input, double width, int fs, int fft_size,\n    double *output) {\n  int boundary = static_cast<int>(width * fft_size / fs) + 1;\n\n  // These parameters are set by the other function.\n  double *mirroring_spectrum = new double[fft_size / 2 + boundary * 2 + 1];\n  double *mirroring_segment = new double[fft_size / 2 + boundary * 2 + 1];\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  SetParametersForLinearSmoothing(boundary, fft_size, fs, width,\n      input, mirroring_spectrum, mirroring_segment, frequency_axis);\n\n  double *low_levels = new double[fft_size / 2 + 1];\n  double *high_levels = new double[fft_size / 2 + 1];\n  double origin_of_mirroring_axis = -(boundary - 0.5) * fs / fft_size;\n  double discrete_frequency_interval = static_cast<double>(fs) / fft_size;\n\n  interp1Q(origin_of_mirroring_axis, discrete_frequency_interval,\n      mirroring_segment, fft_size / 2 + boundary * 2 + 1, frequency_axis,\n      fft_size / 2 + 1, low_levels);\n\n  for (int i = 0; i <= fft_size / 2; ++i) frequency_axis[i] += width;\n\n  interp1Q(origin_of_mirroring_axis, discrete_frequency_interval,\n      mirroring_segment, fft_size / 2 + boundary * 2 + 1, frequency_axis,\n      fft_size / 2 + 1, high_levels);\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    output[i] = (high_levels[i] - low_levels[i]) / width;\n\n  delete[] mirroring_spectrum;\n  delete[] mirroring_segment;\n  delete[] frequency_axis;\n  delete[] low_levels;\n  delete[] high_levels;\n}\n\nvoid NuttallWindow(int y_length, double *y) {\n  double tmp;\n  for (int i = 0; i < y_length; ++i) {\n    tmp  = i / (y_length - 1.0);\n    y[i] = 0.355768 - 0.487396 * cos(2.0 * world::kPi * tmp) +\n      0.144232 * cos(4.0 * world::kPi * tmp) -\n      0.012604 * cos(6.0 * world::kPi * tmp);\n  }\n}\n\n//-----------------------------------------------------------------------------\n// FFT, IFFT and minimum phase analysis\nvoid InitializeForwardRealFFT(int fft_size, ForwardRealFFT *forward_real_fft) {\n  forward_real_fft->fft_size = fft_size;\n  forward_real_fft->waveform = new double[fft_size];\n  forward_real_fft->spectrum = new fft_complex[fft_size];\n  forward_real_fft->forward_fft = fft_plan_dft_r2c_1d(fft_size,\n      forward_real_fft->waveform, forward_real_fft->spectrum, FFT_ESTIMATE);\n}\n\nvoid DestroyForwardRealFFT(ForwardRealFFT *forward_real_fft) {\n  fft_destroy_plan(forward_real_fft->forward_fft);\n  delete[] forward_real_fft->spectrum;\n  delete[] forward_real_fft->waveform;\n}\n\nvoid InitializeInverseRealFFT(int fft_size, InverseRealFFT *inverse_real_fft) {\n  inverse_real_fft->fft_size = fft_size;\n  inverse_real_fft->waveform = new double[fft_size];\n  inverse_real_fft->spectrum = new fft_complex[fft_size];\n  inverse_real_fft->inverse_fft = fft_plan_dft_c2r_1d(fft_size,\n      inverse_real_fft->spectrum, inverse_real_fft->waveform, FFT_ESTIMATE);\n}\n\nvoid DestroyInverseRealFFT(InverseRealFFT *inverse_real_fft) {\n  fft_destroy_plan(inverse_real_fft->inverse_fft);\n  delete[] inverse_real_fft->spectrum;\n  delete[] inverse_real_fft->waveform;\n}\n\nvoid InitializeInverseComplexFFT(int fft_size,\n    InverseComplexFFT *inverse_complex_fft) {\n  inverse_complex_fft->fft_size = fft_size;\n  inverse_complex_fft->input = new fft_complex[fft_size];\n  inverse_complex_fft->output = new fft_complex[fft_size];\n  inverse_complex_fft->inverse_fft = fft_plan_dft_1d(fft_size,\n    inverse_complex_fft->input, inverse_complex_fft->output,\n    FFT_BACKWARD, FFT_ESTIMATE);\n}\n\nvoid DestroyInverseComplexFFT(InverseComplexFFT *inverse_complex_fft) {\n  fft_destroy_plan(inverse_complex_fft->inverse_fft);\n  delete[] inverse_complex_fft->input;\n  delete[] inverse_complex_fft->output;\n}\n\nvoid InitializeMinimumPhaseAnalysis(int fft_size,\n    MinimumPhaseAnalysis *minimum_phase) {\n  minimum_phase->fft_size = fft_size;\n  minimum_phase->log_spectrum = new double[fft_size];\n  minimum_phase->minimum_phase_spectrum = new fft_complex[fft_size];\n  minimum_phase->cepstrum = new fft_complex[fft_size];\n  minimum_phase->inverse_fft = fft_plan_dft_r2c_1d(fft_size,\n      minimum_phase->log_spectrum, minimum_phase->cepstrum, FFT_ESTIMATE);\n  minimum_phase->forward_fft = fft_plan_dft_1d(fft_size,\n      minimum_phase->cepstrum, minimum_phase->minimum_phase_spectrum,\n      FFT_FORWARD, FFT_ESTIMATE);\n}\n\nvoid GetMinimumPhaseSpectrum(const MinimumPhaseAnalysis *minimum_phase) {\n  // Mirroring\n  for (int i = minimum_phase->fft_size / 2 + 1;\n      i < minimum_phase->fft_size; ++i)\n    minimum_phase->log_spectrum[i] =\n    minimum_phase->log_spectrum[minimum_phase->fft_size - i];\n\n  // This fft_plan carries out \"forward\" FFT.\n  // To carriy out the Inverse FFT, the sign of imaginary part\n  // is inverted after FFT.\n  fft_execute(minimum_phase->inverse_fft);\n  minimum_phase->cepstrum[0][1] *= -1.0;\n  for (int i = 1; i < minimum_phase->fft_size / 2; ++i) {\n    minimum_phase->cepstrum[i][0] *= 2.0;\n    minimum_phase->cepstrum[i][1] *= -2.0;\n  }\n  minimum_phase->cepstrum[minimum_phase->fft_size / 2][1] *= -1.0;\n  for (int i = minimum_phase->fft_size / 2 + 1;\n      i < minimum_phase->fft_size; ++i) {\n    minimum_phase->cepstrum[i][0] = 0.0;\n    minimum_phase->cepstrum[i][1] = 0.0;\n  }\n\n  fft_execute(minimum_phase->forward_fft);\n\n  // Since x is complex number, calculation of exp(x) is as following.\n  // Note: This FFT library does not keep the aliasing.\n  double tmp;\n  for (int i = 0; i <= minimum_phase->fft_size / 2; ++i) {\n    tmp = exp(minimum_phase->minimum_phase_spectrum[i][0] /\n      minimum_phase->fft_size);\n    minimum_phase->minimum_phase_spectrum[i][0] = tmp *\n      cos(minimum_phase->minimum_phase_spectrum[i][1] /\n      minimum_phase->fft_size);\n    minimum_phase->minimum_phase_spectrum[i][1] = tmp *\n      sin(minimum_phase->minimum_phase_spectrum[i][1] /\n      minimum_phase->fft_size);\n  }\n}\n\nvoid DestroyMinimumPhaseAnalysis(MinimumPhaseAnalysis *minimum_phase) {\n  fft_destroy_plan(minimum_phase->forward_fft);\n  fft_destroy_plan(minimum_phase->inverse_fft);\n  delete[] minimum_phase->cepstrum;\n  delete[] minimum_phase->log_spectrum;\n  delete[] minimum_phase->minimum_phase_spectrum;\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/d4c.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Band-aperiodicity estimation on the basis of the idea of D4C.\n//-----------------------------------------------------------------------------\n#include \"world/d4c.h\"\n\n#include <math.h>\n#include <algorithm>  // for std::sort()\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n//-----------------------------------------------------------------------------\n// SetParametersForGetWindowedWaveform()\n//-----------------------------------------------------------------------------\nstatic void SetParametersForGetWindowedWaveform(int half_window_length,\n    int x_length, double current_position, int fs, double current_f0,\n    int window_type, double window_length_ratio, int *base_index,\n    int *safe_index, double *window) {\n  for (int i = -half_window_length; i <= half_window_length; ++i)\n    base_index[i + half_window_length] = i;\n  int origin = matlab_round(current_position * fs + 0.001);\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    safe_index[i] =\n      MyMinInt(x_length - 1, MyMaxInt(0, origin + base_index[i]));\n\n  // Designing of the window function\n  double position;\n  if (window_type == world::kHanning) {  // Hanning window\n    for (int i = 0; i <= half_window_length * 2; ++i) {\n      position = (2.0 * base_index[i] / window_length_ratio) / fs;\n      window[i] = 0.5 * cos(world::kPi * position * current_f0) + 0.5;\n    }\n  } else {  // Blackman window\n    for (int i = 0; i <= half_window_length * 2; ++i) {\n      position = (2.0 * base_index[i] / window_length_ratio) / fs;\n      window[i] = 0.42 + 0.5 * cos(world::kPi * position * current_f0) +\n        0.08 * cos(world::kPi * position * current_f0 * 2);\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetWindowedWaveform() windows the waveform by F0-adaptive window\n// In the variable window_type, 1: hanning, 2: blackman\n//-----------------------------------------------------------------------------\nstatic void GetWindowedWaveform(const double *x, int x_length, int fs,\n    double current_f0, double current_position, int window_type,\n    double window_length_ratio, double *waveform) {\n  int half_window_length =\n    matlab_round(window_length_ratio * fs / current_f0 / 2.0);\n\n  int *base_index = new int[half_window_length * 2 + 1];\n  int *safe_index = new int[half_window_length * 2 + 1];\n  double *window  = new double[half_window_length * 2 + 1];\n\n  SetParametersForGetWindowedWaveform(half_window_length, x_length,\n      current_position, fs, current_f0, window_type, window_length_ratio,\n      base_index, safe_index, window);\n\n  // F0-adaptive windowing\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    waveform[i] =\n      x[safe_index[i]] * window[i] + randn() * world::kMySafeGuardMinimum;\n\n  double tmp_weight1 = 0;\n  double tmp_weight2 = 0;\n  for (int i = 0; i <= half_window_length * 2; ++i) {\n    tmp_weight1 += waveform[i];\n    tmp_weight2 += window[i];\n  }\n  double weighting_coefficient = tmp_weight1 / tmp_weight2;\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    waveform[i] -= window[i] * weighting_coefficient;\n\n  delete[] base_index;\n  delete[] safe_index;\n  delete[] window;\n}\n\n//-----------------------------------------------------------------------------\n// GetCentroid() calculates the energy centroid (see the book, time-frequency\n// analysis written by L. Cohen).\n//-----------------------------------------------------------------------------\nstatic void GetCentroid(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position,\n    const ForwardRealFFT *forward_real_fft, double *centroid) {\n  for (int i = 0; i < fft_size; ++i) forward_real_fft->waveform[i] = 0.0;\n  GetWindowedWaveform(x, x_length, fs, current_f0,\n      current_position, world::kBlackman, 4.0, forward_real_fft->waveform);\n  double power = 0.0;\n  for (int i = 0; i <= matlab_round(2.0 * fs / current_f0) * 2; ++i)\n    power += forward_real_fft->waveform[i] * forward_real_fft->waveform[i];\n  for (int i = 0; i <= matlab_round(2.0 * fs / current_f0) * 2; ++i)\n    forward_real_fft->waveform[i] /= sqrt(power);\n\n  fft_execute(forward_real_fft->forward_fft);\n  double *tmp_real = new double[fft_size / 2 + 1];\n  double *tmp_imag = new double[fft_size / 2 + 1];\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    tmp_real[i] = forward_real_fft->spectrum[i][0];\n    tmp_imag[i] = forward_real_fft->spectrum[i][1];\n  }\n\n  for (int i = 0; i < fft_size; ++i)\n    forward_real_fft->waveform[i] *= i + 1.0;\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i)\n    centroid[i] = forward_real_fft->spectrum[i][0] * tmp_real[i] +\n      tmp_imag[i] * forward_real_fft->spectrum[i][1];\n\n  delete[] tmp_real;\n  delete[] tmp_imag;\n}\n\n//-----------------------------------------------------------------------------\n// GetStaticCentroid() calculates the temporally static energy centroid.\n// Basic idea was proposed by H. Kawahara.\n//-----------------------------------------------------------------------------\nstatic void GetStaticCentroid(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position,\n    const ForwardRealFFT *forward_real_fft, double *static_centroid) {\n  double *centroid1 = new double[fft_size / 2 + 1];\n  double *centroid2 = new double[fft_size / 2 + 1];\n\n  GetCentroid(x, x_length, fs, current_f0, fft_size,\n      current_position - 0.25 / current_f0, forward_real_fft, centroid1);\n  GetCentroid(x, x_length, fs, current_f0, fft_size,\n      current_position + 0.25 / current_f0, forward_real_fft, centroid2);\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    static_centroid[i] = centroid1[i] + centroid2[i];\n\n  DCCorrection(static_centroid, current_f0, fs, fft_size, static_centroid);\n  delete[] centroid1;\n  delete[] centroid2;\n}\n\n//-----------------------------------------------------------------------------\n// GetSmoothedPowerSpectrum() calculates the smoothed power spectrum.\n// The parameters used for smoothing are optimized in davance.\n//-----------------------------------------------------------------------------\nstatic void GetSmoothedPowerSpectrum(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position,\n    const ForwardRealFFT *forward_real_fft, double *smoothed_power_spectrum) {\n  for (int i = 0; i < fft_size; ++i) forward_real_fft->waveform[i] = 0.0;\n  GetWindowedWaveform(x, x_length, fs, current_f0,\n      current_position, world::kHanning, 4.0, forward_real_fft->waveform);\n\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i)\n    smoothed_power_spectrum[i] =\n      forward_real_fft->spectrum[i][0] * forward_real_fft->spectrum[i][0] +\n      forward_real_fft->spectrum[i][1] * forward_real_fft->spectrum[i][1];\n  DCCorrection(smoothed_power_spectrum, current_f0, fs, fft_size,\n      smoothed_power_spectrum);\n  LinearSmoothing(smoothed_power_spectrum, current_f0, fs, fft_size,\n      smoothed_power_spectrum);\n}\n\n//-----------------------------------------------------------------------------\n// GetStaticGroupDelay() calculates the temporally static group delay.\n// This is the fundamental parameter in D4C.\n//-----------------------------------------------------------------------------\nstatic void GetStaticGroupDelay(const double *static_centroid,\n    const double *smoothed_power_spectrum, int fs, double f0,\n    int fft_size, double *static_group_delay) {\n  for (int i = 0; i <= fft_size / 2; ++i)\n    static_group_delay[i] = static_centroid[i] / smoothed_power_spectrum[i];\n  LinearSmoothing(static_group_delay, f0 / 2.0, fs, fft_size,\n      static_group_delay);\n\n  double *smoothed_group_delay = new double[fft_size / 2 + 1];\n  LinearSmoothing(static_group_delay, f0, fs, fft_size,\n      smoothed_group_delay);\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    static_group_delay[i] -= smoothed_group_delay[i];\n\n  delete[] smoothed_group_delay;\n}\n\n//-----------------------------------------------------------------------------\n// GetCoarseAperiodicity() calculates the aperiodicity in multiples of 3 kHz.\n// The upper limit is given based on the sampling frequency.\n//-----------------------------------------------------------------------------\nstatic void GetCoarseAperiodicity(const double *static_group_delay, int fs,\n    int fft_size, int number_of_aperiodicities, const double *window,\n    int window_length, const ForwardRealFFT *forward_real_fft,\n    double *coarse_aperiodicity) {\n  int boundary =\n    matlab_round(fft_size * 8.0 / window_length);\n  int half_window_length = window_length / 2;\n\n  for (int i = 0; i < fft_size; ++i) forward_real_fft->waveform[i] = 0.0;\n\n  double *power_spectrum = new double[fft_size / 2 + 1];\n  int center;\n  for (int i = 0; i < number_of_aperiodicities; ++i) {\n    center =\n      static_cast<int>(world::kFrequencyInterval * (i + 1) * fft_size / fs);\n    for (int j = 0; j <= half_window_length * 2; ++j)\n      forward_real_fft->waveform[j] =\n        static_group_delay[center - half_window_length + j] * window[j];\n    fft_execute(forward_real_fft->forward_fft);\n    for (int j = 0 ; j <= fft_size / 2; ++j)\n      power_spectrum[j] =\n        forward_real_fft->spectrum[j][0] * forward_real_fft->spectrum[j][0] +\n        forward_real_fft->spectrum[j][1] * forward_real_fft->spectrum[j][1];\n    std::sort(power_spectrum, power_spectrum + fft_size / 2 + 1);\n    for (int j = 1 ; j <= fft_size / 2; ++j)\n      power_spectrum[j] += power_spectrum[j - 1];\n    coarse_aperiodicity[i] =\n      10 * log10(power_spectrum[fft_size / 2 - boundary - 1] /\n                 power_spectrum[fft_size / 2]);\n  }\n  delete[] power_spectrum;\n}\n\nstatic double D4CLoveTrainSub(const double *x, int fs, int x_length,\n    double current_f0, double current_position, int f0_length, int fft_size,\n    int boundary0, int boundary1, int boundary2,\n    ForwardRealFFT *forward_real_fft) {\n  double *power_spectrum = new double[fft_size];\n\n  int window_length = matlab_round(1.5 * fs / current_f0) * 2 + 1;\n  GetWindowedWaveform(x, x_length, fs, current_f0, current_position,\n    world::kBlackman, 3.0, forward_real_fft->waveform);\n\n  for (int i = window_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n\n  for (int i = 0; i <= boundary0; ++i) power_spectrum[i] = 0.0;\n  for (int i = boundary0 + 1; i < fft_size / 2 + 1; ++i)\n    power_spectrum[i] =\n    forward_real_fft->spectrum[i][0] * forward_real_fft->spectrum[i][0] +\n    forward_real_fft->spectrum[i][1] * forward_real_fft->spectrum[i][1];\n  for (int i = boundary0; i <= boundary2; ++i)\n    power_spectrum[i] += +power_spectrum[i - 1];\n\n  double aperiodicity0 = power_spectrum[boundary1] / power_spectrum[boundary2];\n  delete[] power_spectrum;\n  return aperiodicity0;\n}\n\n//-----------------------------------------------------------------------------\n// D4CLoveTrain() determines the aperiodicity with VUV detection.\n// If a frame was determined as the unvoiced section, aperiodicity is set to\n// very high value as the safeguard.\n// If it was voiced section, the aperiodicity of 0 Hz is set to -60 dB.\n//-----------------------------------------------------------------------------\nstatic void D4CLoveTrain(const double *x, int fs, int x_length,\n    const double *f0, int f0_length, const double *temporal_positions,\n    double *aperiodicity0) {\n  double lowest_f0 = 40.0;\n  int fft_size = static_cast<int>(pow(2.0, 1.0 +\n    static_cast<int>(log(3.0 * fs / lowest_f0 + 1) / world::kLog2)));\n  ForwardRealFFT forward_real_fft = { 0 };\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n\n  // Cumulative powers at 100, 4000, 7900 Hz are used for VUV identification.\n  int boundary0 = static_cast<int>(ceil(100.0 * fft_size / fs));\n  int boundary1 = static_cast<int>(ceil(4000.0 * fft_size / fs));\n  int boundary2 = static_cast<int>(ceil(7900.0 * fft_size / fs));\n  for (int i = 0; i < f0_length; ++i) {\n    if (f0[i] == 0.0) {\n      aperiodicity0[i] = 0.0;\n      continue;\n    }\n    aperiodicity0[i] = D4CLoveTrainSub(x, fs, x_length,\n      MyMaxDouble(f0[i], lowest_f0), temporal_positions[i], f0_length,\n      fft_size, boundary0, boundary1, boundary2, &forward_real_fft);\n  }\n\n  DestroyForwardRealFFT(&forward_real_fft);\n}\n\n//-----------------------------------------------------------------------------\n// D4CGeneralBody() calculates a spectral envelope at a temporal\n// position. This function is only used in D4C().\n// Caution:\n//   forward_fft is allocated in advance to speed up the processing.\n//-----------------------------------------------------------------------------\nstatic void D4CGeneralBody(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position,\n    int number_of_aperiodicities, const double *window, int window_length,\n    const ForwardRealFFT *forward_real_fft, double *coarse_aperiodicity) {\n  double *static_centroid = new double[fft_size / 2 + 1];\n  double *smoothed_power_spectrum = new double[fft_size / 2 + 1];\n  double *static_group_delay = new double[fft_size / 2 + 1];\n  GetStaticCentroid(x, x_length, fs, current_f0, fft_size, current_position,\n      forward_real_fft, static_centroid);\n  GetSmoothedPowerSpectrum(x, x_length, fs, current_f0, fft_size,\n      current_position, forward_real_fft, smoothed_power_spectrum);\n  GetStaticGroupDelay(static_centroid, smoothed_power_spectrum,\n      fs, current_f0, fft_size, static_group_delay);\n\n  GetCoarseAperiodicity(static_group_delay, fs, fft_size,\n      number_of_aperiodicities, window, window_length, forward_real_fft,\n      coarse_aperiodicity);\n\n  // Revision of the result based on the F0\n  for (int i = 0; i < number_of_aperiodicities; ++i)\n    coarse_aperiodicity[i] = MyMinDouble(0.0,\n      coarse_aperiodicity[i] + (current_f0 - 100) / 50.0);\n\n  delete[] static_centroid;\n  delete[] smoothed_power_spectrum;\n  delete[] static_group_delay;\n}\n\nstatic void InitializeAperiodicity(int f0_length, int fft_size,\n    double **aperiodicity) {\n  for (int i = 0; i < f0_length; ++i)\n    for (int j = 0; j < fft_size / 2 + 1; ++j)\n      aperiodicity[i][j] = 1.0 - world::kMySafeGuardMinimum;\n}\n\nstatic void GetAperiodicity(const double *coarse_frequency_axis,\n    const double *coarse_aperiodicity, int number_of_aperiodicities,\n    const double *frequency_axis, int fft_size, double *aperiodicity) {\n  interp1(coarse_frequency_axis, coarse_aperiodicity,\n    number_of_aperiodicities + 2, frequency_axis, fft_size / 2 + 1,\n    aperiodicity);\n  for (int i = 0; i <= fft_size / 2; ++i)\n    aperiodicity[i] = pow(10.0, aperiodicity[i] / 20.0);\n}\n\n}  // namespace\n\nvoid D4C(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    int fft_size, const D4COption *option, double **aperiodicity) {\n  randn_reseed();\n\n  InitializeAperiodicity(f0_length, fft_size, aperiodicity);\n\n  int fft_size_d4c = static_cast<int>(pow(2.0, 1.0 +\n    static_cast<int>(log(4.0 * fs / world::kFloorF0D4C + 1) /\n      world::kLog2)));\n\n  ForwardRealFFT forward_real_fft = {0};\n  InitializeForwardRealFFT(fft_size_d4c, &forward_real_fft);\n\n  int number_of_aperiodicities =\n    static_cast<int>(MyMinDouble(world::kUpperLimit, fs / 2.0 -\n      world::kFrequencyInterval) / world::kFrequencyInterval);\n  // Since the window function is common in D4CGeneralBody(),\n  // it is designed here to speed up.\n  int window_length =\n    static_cast<int>(world::kFrequencyInterval * fft_size_d4c / fs) * 2 + 1;\n  double *window =  new double[window_length];\n  NuttallWindow(window_length, window);\n\n  // D4C Love Train (Aperiodicity of 0 Hz is given by the different algorithm)\n  double *aperiodicity0 = new double[f0_length];\n  D4CLoveTrain(x, fs, x_length, f0, f0_length, temporal_positions,\n      aperiodicity0);\n\n  double *coarse_aperiodicity = new double[number_of_aperiodicities + 2];\n  coarse_aperiodicity[0] = -60.0;\n  coarse_aperiodicity[number_of_aperiodicities + 1] =\n    -world::kMySafeGuardMinimum;\n  double *coarse_frequency_axis = new double[number_of_aperiodicities + 2];\n  for (int i = 0; i <= number_of_aperiodicities; ++i)\n    coarse_frequency_axis[i] = i * world::kFrequencyInterval;\n  coarse_frequency_axis[number_of_aperiodicities + 1] = fs / 2.0;\n\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  for (int i = 0; i <= fft_size / 2; ++i)\n    frequency_axis[i] = static_cast<double>(i) * fs / fft_size;\n\n  for (int i = 0; i < f0_length; ++i) {\n    if (f0[i] == 0 || aperiodicity0[i] <= option->threshold) continue;\n    D4CGeneralBody(x, x_length, fs, MyMaxDouble(world::kFloorF0D4C, f0[i]),\n        fft_size_d4c, temporal_positions[i], number_of_aperiodicities, window,\n        window_length, &forward_real_fft, &coarse_aperiodicity[1]);\n\n    // Linear interpolation to convert the coarse aperiodicity into its\n    // spectral representation.\n    GetAperiodicity(coarse_frequency_axis, coarse_aperiodicity,\n        number_of_aperiodicities, frequency_axis, fft_size, aperiodicity[i]);\n  }\n\n  DestroyForwardRealFFT(&forward_real_fft);\n  delete[] aperiodicity0;\n  delete[] coarse_frequency_axis;\n  delete[] coarse_aperiodicity;\n  delete[] window;\n  delete[] frequency_axis;\n}\n\nvoid InitializeD4COption(D4COption *option) {\n  option->threshold = world::kThreshold;\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/dio.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// F0 estimation based on DIO (Distributed Inline-filter Operation).\n//-----------------------------------------------------------------------------\n#include \"world/dio.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\n//-----------------------------------------------------------------------------\n// struct for GetFourZeroCrossingIntervals()\n// \"negative\" means \"zero-crossing point going from positive to negative\"\n// \"positive\" means \"zero-crossing point going from negative to positive\"\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double *negative_interval_locations;\n  double *negative_intervals;\n  int number_of_negatives;\n  double *positive_interval_locations;\n  double *positive_intervals;\n  int number_of_positives;\n  double *peak_interval_locations;\n  double *peak_intervals;\n  int number_of_peaks;\n  double *dip_interval_locations;\n  double *dip_intervals;\n  int number_of_dips;\n} ZeroCrossings;\n\nnamespace {\n//-----------------------------------------------------------------------------\n// DesignLowCutFilter() calculates the coefficients the filter.\n//-----------------------------------------------------------------------------\nstatic void DesignLowCutFilter(int N, int fft_size, double *low_cut_filter) {\n  for (int i = 1; i <= N; ++i)\n    low_cut_filter[i - 1] = 0.5 - 0.5 * cos(i * 2.0 * world::kPi / (N + 1));\n  for (int i = N; i < fft_size; ++i) low_cut_filter[i] = 0.0;\n  double sum_of_amplitude = 0.0;\n  for (int i = 0; i < N; ++i) sum_of_amplitude += low_cut_filter[i];\n  for (int i = 0; i < N; ++i)\n    low_cut_filter[i] = -low_cut_filter[i] / sum_of_amplitude;\n  for (int i = 0; i < (N - 1) / 2; ++i)\n    low_cut_filter[fft_size - (N - 1) / 2 + i] = low_cut_filter[i];\n  for (int i = 0; i < N; ++i)\n    low_cut_filter[i] = low_cut_filter[i + (N - 1) / 2];\n  low_cut_filter[0] += 1.0;\n}\n\n//-----------------------------------------------------------------------------\n// GetSpectrumForEstimation() calculates the spectrum for estimation.\n// This function carries out downsampling to speed up the estimation process\n// and calculates the spectrum of the downsampled signal.\n//-----------------------------------------------------------------------------\nstatic void GetSpectrumForEstimation(const double *x, int x_length,\n    int y_length, double actual_fs, int fft_size, int decimation_ratio,\n    fft_complex *y_spectrum) {\n  double *y = new double[fft_size];\n\n  // Initialization\n  for (int i = 0; i < fft_size; ++i) y[i] = 0.0;\n\n  // Downsampling\n  if (decimation_ratio != 1)\n    decimate(x, x_length, decimation_ratio, y);\n  else\n    for (int i = 0; i < x_length; ++i) y[i] = x[i];\n\n  // Removal of the DC component (y = y - mean value of y)\n  double mean_y = 0.0;\n  for (int i = 0; i < y_length; ++i) mean_y += y[i];\n  mean_y /= y_length;\n  for (int i = 0; i < y_length; ++i) y[i] -= mean_y;\n  for (int i = y_length; i < fft_size; ++i) y[i] = 0.0;\n\n  fft_plan forwardFFT =\n    fft_plan_dft_r2c_1d(fft_size, y, y_spectrum, FFT_ESTIMATE);\n  fft_execute(forwardFFT);\n\n  // Low cut filtering (from 0.1.4). Cut off frequency is 50.0 Hz.\n  int cutoff_in_sample = matlab_round(actual_fs / world::kCutOff);\n  DesignLowCutFilter(cutoff_in_sample * 2 + 1, fft_size, y);\n\n  fft_complex *filter_spectrum = new fft_complex[fft_size];\n  forwardFFT.c_out = filter_spectrum;\n  fft_execute(forwardFFT);\n\n  double tmp = 0;\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    // Complex number multiplications.\n    tmp = y_spectrum[i][0] * filter_spectrum[i][0] -\n      y_spectrum[i][1] * filter_spectrum[i][1];\n    y_spectrum[i][1] = y_spectrum[i][0] * filter_spectrum[i][1] +\n      y_spectrum[i][1] * filter_spectrum[i][0];\n    y_spectrum[i][0] = tmp;\n  }\n\n  fft_destroy_plan(forwardFFT);\n  delete[] y;\n  delete[] filter_spectrum;\n}\n\n//-----------------------------------------------------------------------------\n// GetBestF0Contour() calculates the best f0 contour based on scores of\n// all candidates. The F0 with highest score is selected.\n//-----------------------------------------------------------------------------\nstatic void GetBestF0Contour(int f0_length,\n    const double * const * f0_candidates, const double * const * f0_scores,\n    int number_of_bands, double *best_f0_contour) {\n  double tmp;\n  for (int i = 0; i < f0_length; ++i) {\n    tmp = f0_scores[0][i];\n    best_f0_contour[i] = f0_candidates[0][i];\n    for (int j = 1; j < number_of_bands; ++j) {\n      if (tmp > f0_scores[j][i]) {\n        tmp = f0_scores[j][i];\n        best_f0_contour[i] = f0_candidates[j][i];\n      }\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// FixStep1() is the 1st step of the postprocessing.\n// This function eliminates the unnatural change of f0 based on allowed_range.\n//-----------------------------------------------------------------------------\nstatic void FixStep1(const double *best_f0_contour, int f0_length,\n    int voice_range_minimum, double allowed_range, double *f0_step1) {\n  double *f0_base = new double[f0_length];\n  // Initialization\n  for (int i = 0; i < voice_range_minimum; ++i) f0_base[i] = 0.0;\n  for (int i = voice_range_minimum; i < f0_length - voice_range_minimum; ++i)\n    f0_base[i] = best_f0_contour[i];\n  for (int i = f0_length - voice_range_minimum; i < f0_length; ++i)\n    f0_base[i] = 0.0;\n\n  // Processing to prevent the jumping of f0\n  for (int i = 0; i < voice_range_minimum; ++i) f0_step1[i] = 0.0;\n  for (int i = voice_range_minimum; i < f0_length; ++i)\n    f0_step1[i] = fabs((f0_base[i] - f0_base[i - 1]) /\n    (world::kMySafeGuardMinimum + f0_base[i])) <\n    allowed_range ? f0_base[i] : 0.0;\n\n  delete[] f0_base;\n}\n\n//-----------------------------------------------------------------------------\n// FixStep2() is the 2nd step of the postprocessing.\n// This function eliminates the suspected f0 in the anlaut and auslaut.\n//-----------------------------------------------------------------------------\nstatic void FixStep2(const double *f0_step1, int f0_length,\n    int voice_range_minimum, double *f0_step2) {\n  for (int i = 0; i < f0_length; ++i) f0_step2[i] = f0_step1[i];\n\n  int center = (voice_range_minimum - 1) / 2;\n  for (int i = center; i < f0_length - center; ++i) {\n    for (int j = -center; j <= center; ++j) {\n      if (f0_step1[i + j] == 0) {\n        f0_step2[i] = 0.0;\n        break;\n      }\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetNumberOfVoicedSections() counts the number of voiced sections.\n//-----------------------------------------------------------------------------\nstatic void GetNumberOfVoicedSections(const double *f0, int f0_length,\n    int *positive_index, int *negative_index, int *positive_count,\n    int *negative_count) {\n  *positive_count = *negative_count = 0;\n  for (int i = 1; i < f0_length; ++i)\n    if (f0[i] == 0 && f0[i - 1] != 0)\n      negative_index[(*negative_count)++] = i - 1;\n    else\n      if (f0[i - 1] == 0 && f0[i] != 0)\n        positive_index[(*positive_count)++] = i;\n}\n\n//-----------------------------------------------------------------------------\n// SelectOneF0() corrects the f0[current_index] based on\n// f0[current_index + sign].\n//-----------------------------------------------------------------------------\nstatic double SelectBestF0(double current_f0, double past_f0,\n    const double * const * f0_candidates, int number_of_candidates,\n    int target_index, double allowed_range) {\n  double reference_f0 = (current_f0 * 3.0 - past_f0) / 2.0;\n\n  double minimum_error = fabs(reference_f0 - f0_candidates[0][target_index]);\n  double best_f0 = f0_candidates[0][target_index];\n\n  double current_error;\n  for (int i = 1; i < number_of_candidates; ++i) {\n    current_error = fabs(reference_f0 - f0_candidates[i][target_index]);\n    if (current_error < minimum_error) {\n      minimum_error = current_error;\n      best_f0 = f0_candidates[i][target_index];\n    }\n  }\n  if (fabs(1.0 - best_f0 / reference_f0) > allowed_range)\n    return 0.0;\n  return best_f0;\n}\n\n//-----------------------------------------------------------------------------\n// FixStep3() is the 3rd step of the postprocessing.\n// This function corrects the f0 candidates from backward to forward.\n//-----------------------------------------------------------------------------\nstatic void FixStep3(const double *f0_step2, int f0_length,\n    const double * const * f0_candidates, int number_of_candidates,\n    double allowed_range, const int *negative_index, int negative_count,\n    double *f0_step3) {\n  for (int i = 0; i < f0_length; i++) f0_step3[i] = f0_step2[i];\n\n  int limit;\n  for (int i = 0; i < negative_count; ++i) {\n    limit = i == negative_count - 1 ? f0_length - 1 : negative_index[i + 1];\n    for (int j = negative_index[i]; j < limit; ++j) {\n      f0_step3[j + 1] =\n        SelectBestF0(f0_step3[j], f0_step3[j - 1], f0_candidates,\n            number_of_candidates, j + 1, allowed_range);\n      if (f0_step3[j + 1] == 0) break;\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// FixStep4() is the 4th step of the postprocessing.\n// This function corrects the f0 candidates from forward to backward.\n//-----------------------------------------------------------------------------\nstatic void FixStep4(const double *f0_step3, int f0_length,\n    const double * const * f0_candidates, int number_of_candidates,\n    double allowed_range, const int *positive_index, int positive_count,\n    double *f0_step4) {\n  for (int i = 0; i < f0_length; ++i) f0_step4[i] = f0_step3[i];\n\n  int limit;\n  for (int i = positive_count - 1; i >= 0; --i) {\n    limit = i == 0 ? 1 : positive_index[i - 1];\n    for (int j = positive_index[i]; j > limit; --j) {\n      f0_step4[j - 1] =\n        SelectBestF0(f0_step4[j], f0_step4[j + 1], f0_candidates,\n            number_of_candidates, j - 1, allowed_range);\n      if (f0_step4[j - 1] == 0) break;\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// FixF0Contour() calculates the definitive f0 contour based on all f0\n// candidates. There are four steps.\n//-----------------------------------------------------------------------------\nstatic void FixF0Contour(double frame_period, int number_of_candidates,\n    int fs, const double * const * f0_candidates,\n    const double *best_f0_contour, int f0_length, double f0_floor,\n    double allowed_range, double *fixed_f0_contour) {\n  int voice_range_minimum =\n    static_cast<int>(0.5 + 1000.0 / frame_period / f0_floor) * 2 + 1;\n\n  if (f0_length <= voice_range_minimum) return;\n\n  double *f0_tmp1 = new double[f0_length];\n  double *f0_tmp2 = new double[f0_length];\n\n  FixStep1(best_f0_contour, f0_length, voice_range_minimum,\n      allowed_range, f0_tmp1);\n  FixStep2(f0_tmp1, f0_length, voice_range_minimum, f0_tmp2);\n\n  int positive_count, negative_count;\n  int *positive_index = new int[f0_length];\n  int *negative_index = new int[f0_length];\n  GetNumberOfVoicedSections(f0_tmp2, f0_length, positive_index,\n      negative_index, &positive_count, &negative_count);\n  FixStep3(f0_tmp2, f0_length, f0_candidates, number_of_candidates,\n      allowed_range, negative_index, negative_count, f0_tmp1);\n  FixStep4(f0_tmp1, f0_length, f0_candidates, number_of_candidates,\n      allowed_range, positive_index, positive_count, fixed_f0_contour);\n\n  delete[] f0_tmp1;\n  delete[] f0_tmp2;\n  delete[] positive_index;\n  delete[] negative_index;\n}\n\n//-----------------------------------------------------------------------------\n// GetFilteredSignal() calculates the signal that is the convolution of the\n// input signal and low-pass filter.\n// This function is only used in RawEventByDio()\n//-----------------------------------------------------------------------------\nstatic void GetFilteredSignal(int half_average_length, int fft_size,\n    const fft_complex *y_spectrum, int y_length, double *filtered_signal) {\n  double *low_pass_filter = new double[fft_size];\n  // Nuttall window is used as a low-pass filter.\n  // Cutoff frequency depends on the window length.\n  NuttallWindow(half_average_length * 4, low_pass_filter);\n  for (int i = half_average_length * 4; i < fft_size; ++i)\n    low_pass_filter[i] = 0.0;\n\n  fft_complex *low_pass_filter_spectrum = new fft_complex[fft_size];\n  fft_plan forwardFFT = fft_plan_dft_r2c_1d(fft_size, low_pass_filter,\n      low_pass_filter_spectrum, FFT_ESTIMATE);\n  fft_execute(forwardFFT);\n\n  // Convolution\n  double tmp = y_spectrum[0][0] * low_pass_filter_spectrum[0][0] -\n    y_spectrum[0][1] * low_pass_filter_spectrum[0][1];\n  low_pass_filter_spectrum[0][1] =\n    y_spectrum[0][0] * low_pass_filter_spectrum[0][1] +\n    y_spectrum[0][1] * low_pass_filter_spectrum[0][0];\n  low_pass_filter_spectrum[0][0] = tmp;\n  for (int i = 1; i <= fft_size / 2; ++i) {\n    tmp = y_spectrum[i][0] * low_pass_filter_spectrum[i][0] -\n      y_spectrum[i][1] * low_pass_filter_spectrum[i][1];\n    low_pass_filter_spectrum[i][1] =\n      y_spectrum[i][0] * low_pass_filter_spectrum[i][1] +\n      y_spectrum[i][1] * low_pass_filter_spectrum[i][0];\n    low_pass_filter_spectrum[i][0] = tmp;\n    low_pass_filter_spectrum[fft_size - i - 1][0] =\n      low_pass_filter_spectrum[i][0];\n    low_pass_filter_spectrum[fft_size - i - 1][1] =\n      low_pass_filter_spectrum[i][1];\n  }\n\n  fft_plan inverseFFT = fft_plan_dft_c2r_1d(fft_size,\n    low_pass_filter_spectrum, filtered_signal, FFT_ESTIMATE);\n  fft_execute(inverseFFT);\n\n  // Compensation of the delay.\n  int index_bias = half_average_length * 2;\n  for (int i = 0; i < y_length; ++i)\n    filtered_signal[i] = filtered_signal[i + index_bias];\n\n  fft_destroy_plan(inverseFFT);\n  fft_destroy_plan(forwardFFT);\n  delete[] low_pass_filter_spectrum;\n  delete[] low_pass_filter;\n}\n\n//-----------------------------------------------------------------------------\n// CheckEvent() returns 1, provided that the input value is over 1.\n// This function is for RawEventByDio().\n//-----------------------------------------------------------------------------\nstatic inline int CheckEvent(int x) {\n  return x > 0 ? 1 : 0;\n}\n\n//-----------------------------------------------------------------------------\n// ZeroCrossingEngine() calculates the zero crossing points from positive to\n// negative. Thanks to Custom.Maid http://custom-made.seesaa.net/ (2012/8/19)\n//-----------------------------------------------------------------------------\nstatic int ZeroCrossingEngine(const double *filtered_signal, int y_length,\n    double fs, double *interval_locations, double *intervals) {\n  int *negative_going_points = new int[y_length];\n\n  for (int i = 0; i < y_length - 1; ++i)\n    negative_going_points[i] =\n      0.0 < filtered_signal[i] && filtered_signal[i + 1] <= 0.0 ? i + 1 : 0;\n  negative_going_points[y_length - 1] = 0;\n\n  int *edges = new int[y_length];\n  int count = 0;\n  for (int i = 0; i < y_length; ++i)\n    if (negative_going_points[i] > 0)\n      edges[count++] = negative_going_points[i];\n\n  if (count < 2) {\n    delete[] edges;\n    delete[] negative_going_points;\n    return 0;\n  }\n\n  double *fine_edges = new double[count];\n  for (int i = 0; i < count; ++i)\n    fine_edges[i] =\n      edges[i] - filtered_signal[edges[i] - 1] /\n      (filtered_signal[edges[i]] - filtered_signal[edges[i] - 1]);\n\n  for (int i = 0; i < count - 1; ++i) {\n    intervals[i] = fs / (fine_edges[i + 1] - fine_edges[i]);\n    interval_locations[i] = (fine_edges[i] + fine_edges[i + 1]) / 2.0 / fs;\n  }\n\n  delete[] fine_edges;\n  delete[] edges;\n  delete[] negative_going_points;\n  return count - 1;\n}\n\n//-----------------------------------------------------------------------------\n// GetFourZeroCrossingIntervals() calculates four zero-crossing intervals.\n// (1) Zero-crossing going from negative to positive.\n// (2) Zero-crossing going from positive to negative.\n// (3) Peak, and (4) dip. (3) and (4) are calculated from the zero-crossings of\n// the differential of waveform.\n//-----------------------------------------------------------------------------\nstatic void GetFourZeroCrossingIntervals(double *filtered_signal, int y_length,\n    double actual_fs, ZeroCrossings *zero_crossings) {\n  // x_length / 4 (old version) is fixed at 2013/07/14\n  const int kMaximumNumber = y_length;\n  zero_crossings->negative_interval_locations = new double[kMaximumNumber];\n  zero_crossings->positive_interval_locations = new double[kMaximumNumber];\n  zero_crossings->peak_interval_locations = new double[kMaximumNumber];\n  zero_crossings->dip_interval_locations = new double[kMaximumNumber];\n  zero_crossings->negative_intervals = new double[kMaximumNumber];\n  zero_crossings->positive_intervals = new double[kMaximumNumber];\n  zero_crossings->peak_intervals = new double[kMaximumNumber];\n  zero_crossings->dip_intervals = new double[kMaximumNumber];\n\n  zero_crossings->number_of_negatives = ZeroCrossingEngine(filtered_signal,\n      y_length, actual_fs, zero_crossings->negative_interval_locations,\n      zero_crossings->negative_intervals);\n\n  for (int i = 0; i < y_length; ++i) filtered_signal[i] = -filtered_signal[i];\n  zero_crossings->number_of_positives = ZeroCrossingEngine(filtered_signal,\n      y_length, actual_fs, zero_crossings->positive_interval_locations,\n      zero_crossings->positive_intervals);\n\n  for (int i = 0; i < y_length - 1; ++i) filtered_signal[i] =\n    filtered_signal[i] - filtered_signal[i + 1];\n  zero_crossings->number_of_peaks = ZeroCrossingEngine(filtered_signal,\n      y_length - 1, actual_fs, zero_crossings->peak_interval_locations,\n      zero_crossings->peak_intervals);\n\n  for (int i = 0; i < y_length - 1; ++i)\n    filtered_signal[i] = -filtered_signal[i];\n  zero_crossings->number_of_dips = ZeroCrossingEngine(filtered_signal,\n      y_length - 1, actual_fs, zero_crossings->dip_interval_locations,\n      zero_crossings->dip_intervals);\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateContourSub() calculates the f0 candidates and deviations.\n// This is the sub-function of GetF0Candidates() and assumes the calculation.\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateContourSub(\n    const double * const * interpolated_f0_set, int f0_length, double f0_floor,\n    double f0_ceil, double boundary_f0, double *f0_candidate,\n    double *f0_score) {\n  for (int i = 0; i < f0_length; ++i) {\n    f0_candidate[i] = (interpolated_f0_set[0][i] +\n      interpolated_f0_set[1][i] + interpolated_f0_set[2][i] +\n      interpolated_f0_set[3][i]) / 4.0;\n\n    f0_score[i] = sqrt(((interpolated_f0_set[0][i] - f0_candidate[i]) *\n      (interpolated_f0_set[0][i] - f0_candidate[i]) +\n      (interpolated_f0_set[1][i] - f0_candidate[i]) *\n      (interpolated_f0_set[1][i] - f0_candidate[i]) +\n      (interpolated_f0_set[2][i] - f0_candidate[i]) *\n      (interpolated_f0_set[2][i] - f0_candidate[i]) +\n      (interpolated_f0_set[3][i] - f0_candidate[i]) *\n      (interpolated_f0_set[3][i] - f0_candidate[i])) / 3.0);\n\n    if (f0_candidate[i] > boundary_f0 || f0_candidate[i] < boundary_f0 / 2.0 ||\n        f0_candidate[i] > f0_ceil || f0_candidate[i] < f0_floor) {\n      f0_candidate[i] = 0.0;\n      f0_score[i] = world::kMaximumValue;\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateContour() calculates the F0 candidates based on the\n// zero-crossings.\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateContour(const ZeroCrossings *zero_crossings,\n    double boundary_f0, double f0_floor, double f0_ceil,\n    const double *temporal_positions, int f0_length,\n    double *f0_candidate, double *f0_score) {\n  if (0 == CheckEvent(zero_crossings->number_of_negatives - 2) *\n      CheckEvent(zero_crossings->number_of_positives - 2) *\n      CheckEvent(zero_crossings->number_of_peaks - 2) *\n      CheckEvent(zero_crossings->number_of_dips - 2)) {\n    for (int i = 0; i < f0_length; ++i) {\n      f0_score[i] = world::kMaximumValue;\n      f0_candidate[i] = 0.0;\n    }\n    return;\n  }\n\n  double *interpolated_f0_set[4];\n  for (int i = 0; i < 4; ++i)\n    interpolated_f0_set[i] = new double[f0_length];\n\n  interp1(zero_crossings->negative_interval_locations,\n      zero_crossings->negative_intervals,\n      zero_crossings->number_of_negatives,\n      temporal_positions, f0_length, interpolated_f0_set[0]);\n  interp1(zero_crossings->positive_interval_locations,\n      zero_crossings->positive_intervals,\n      zero_crossings->number_of_positives,\n      temporal_positions, f0_length, interpolated_f0_set[1]);\n  interp1(zero_crossings->peak_interval_locations,\n      zero_crossings->peak_intervals, zero_crossings->number_of_peaks,\n      temporal_positions, f0_length, interpolated_f0_set[2]);\n  interp1(zero_crossings->dip_interval_locations,\n      zero_crossings->dip_intervals, zero_crossings->number_of_dips,\n      temporal_positions, f0_length, interpolated_f0_set[3]);\n\n  GetF0CandidateContourSub(interpolated_f0_set, f0_length, f0_floor,\n      f0_ceil, boundary_f0, f0_candidate, f0_score);\n  for (int i = 0; i < 4; ++i) delete[] interpolated_f0_set[i];\n}\n\n//-----------------------------------------------------------------------------\n// DestroyZeroCrossings() frees the memory of array in the struct\n//-----------------------------------------------------------------------------\nstatic void DestroyZeroCrossings(ZeroCrossings *zero_crossings) {\n  delete[] zero_crossings->negative_interval_locations;\n  delete[] zero_crossings->positive_interval_locations;\n  delete[] zero_crossings->peak_interval_locations;\n  delete[] zero_crossings->dip_interval_locations;\n  delete[] zero_crossings->negative_intervals;\n  delete[] zero_crossings->positive_intervals;\n  delete[] zero_crossings->peak_intervals;\n  delete[] zero_crossings->dip_intervals;\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateFromRawEvent() calculates F0 candidate contour in 1-ch signal\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateFromRawEvent(double boundary_f0, double fs,\n    const fft_complex *y_spectrum, int y_length, int fft_size, double f0_floor,\n    double f0_ceil, const double *temporal_positions, int f0_length,\n    double *f0_score, double *f0_candidate) {\n  double *filtered_signal = new double[fft_size];\n  GetFilteredSignal(matlab_round(fs / boundary_f0 / 2.0), fft_size, y_spectrum,\n      y_length, filtered_signal);\n\n  ZeroCrossings zero_crossings = {0};\n  GetFourZeroCrossingIntervals(filtered_signal, y_length, fs,\n      &zero_crossings);\n\n  GetF0CandidateContour(&zero_crossings, boundary_f0, f0_floor, f0_ceil,\n      temporal_positions, f0_length, f0_candidate, f0_score);\n\n  DestroyZeroCrossings(&zero_crossings);\n  delete[] filtered_signal;\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidatesAndScores() calculates all f0 candidates and their scores.\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidatesAndScores(const double *boundary_f0_list,\n    int number_of_bands, double actual_fs, int y_length,\n    const double *temporal_positions, int f0_length,\n    const fft_complex *y_spectrum, int fft_size, double f0_floor,\n    double f0_ceil, double **raw_f0_candidates, double **raw_f0_scores) {\n  double *f0_candidate = new double[f0_length];\n  double *f0_score = new double[f0_length];\n\n  // Calculation of the acoustics events (zero-crossing)\n  for (int i = 0; i < number_of_bands; ++i) {\n    GetF0CandidateFromRawEvent(boundary_f0_list[i], actual_fs, y_spectrum,\n        y_length, fft_size, f0_floor, f0_ceil, temporal_positions, f0_length,\n        f0_score, f0_candidate);\n    for (int j = 0; j < f0_length; ++j) {\n      // A way to avoid zero division\n      raw_f0_scores[i][j] = f0_score[j] /\n        (f0_candidate[j] + world::kMySafeGuardMinimum);\n      raw_f0_candidates[i][j] = f0_candidate[j];\n    }\n  }\n\n  delete[] f0_candidate;\n  delete[] f0_score;\n}\n\n//-----------------------------------------------------------------------------\n// DioGeneralBody() estimates the F0 based on Distributed Inline-filter\n// Operation.\n//-----------------------------------------------------------------------------\nstatic void DioGeneralBody(const double *x, int x_length, int fs,\n    double frame_period, double f0_floor, double f0_ceil,\n    double channels_in_octave, int speed, double allowed_range,\n    double *temporal_positions, double *f0) {\n  int number_of_bands = 1 + static_cast<int>(log(f0_ceil / f0_floor) /\n    world::kLog2 * channels_in_octave);\n  double *boundary_f0_list = new double[number_of_bands];\n  for (int i = 0; i < number_of_bands; ++i)\n    boundary_f0_list[i] = f0_floor * pow(2.0, (i + 1) / channels_in_octave);\n\n  // normalization\n  int decimation_ratio = MyMaxInt(MyMinInt(speed, 12), 1);\n  int y_length = (1 + static_cast<int>(x_length / decimation_ratio));\n  double actual_fs = static_cast<double>(fs) / decimation_ratio;\n  int fft_size = GetSuitableFFTSize(y_length +\n      matlab_round(actual_fs / world::kCutOff) * 2 + 1 +\n      (4 * static_cast<int>(1.0 + actual_fs / boundary_f0_list[0] / 2.0)));\n\n  // Calculation of the spectrum used for the f0 estimation\n  fft_complex *y_spectrum = new fft_complex[fft_size];\n  GetSpectrumForEstimation(x, x_length, y_length, actual_fs, fft_size,\n      decimation_ratio, y_spectrum);\n\n  double **f0_candidates = new double *[number_of_bands];\n  double **f0_scores = new double *[number_of_bands];\n  int f0_length = GetSamplesForDIO(fs, x_length, frame_period);\n  for (int i = 0; i < number_of_bands; ++i) {\n    f0_candidates[i] = new double[f0_length];\n    f0_scores[i] = new double[f0_length];\n  }\n\n  for (int i = 0; i < f0_length; ++i)\n    temporal_positions[i] = i * frame_period / 1000.0;\n\n  GetF0CandidatesAndScores(boundary_f0_list, number_of_bands,\n      actual_fs, y_length, temporal_positions, f0_length, y_spectrum,\n      fft_size, f0_floor, f0_ceil, f0_candidates, f0_scores);\n\n  // Selection of the best value based on fundamental-ness.\n  // This function is related with SortCandidates() in MATLAB.\n  double *best_f0_contour = new double[f0_length];\n  GetBestF0Contour(f0_length, f0_candidates, f0_scores,\n      number_of_bands, best_f0_contour);\n\n  // Postprocessing to find the best f0-contour.\n  FixF0Contour(frame_period, number_of_bands, fs, f0_candidates,\n      best_f0_contour, f0_length, f0_floor, allowed_range, f0);\n\n  delete[] best_f0_contour;\n  delete[] y_spectrum;\n  for (int i = 0; i < number_of_bands; ++i) {\n    delete[] f0_scores[i];\n    delete[] f0_candidates[i];\n  }\n  delete[] f0_scores;\n  delete[] f0_candidates;\n  delete[] boundary_f0_list;\n}\n\n}  // namespace\n\nint GetSamplesForDIO(int fs, int x_length, double frame_period) {\n  return static_cast<int>(1000.0 * x_length / fs / frame_period) + 1;\n}\n\nvoid Dio(const double *x, int x_length, int fs, const DioOption *option,\n    double *temporal_positions, double *f0) {\n  DioGeneralBody(x, x_length, fs, option->frame_period, option->f0_floor,\n      option->f0_ceil, option->channels_in_octave, option->speed,\n      option->allowed_range, temporal_positions, f0);\n}\n\nvoid InitializeDioOption(DioOption *option) {\n  // You can change default parameters.\n  option->channels_in_octave = 2.0;\n  option->f0_ceil = world::kCeilF0;\n  option->f0_floor = world::kFloorF0;\n  option->frame_period = 5;\n\n  // You can use the value from 1 to 12.\n  // Default value 11 is for the fs of 44.1 kHz.\n  // The lower value you use, the better performance you can obtain.\n  option->speed = 1;\n\n  // You can give a positive real number as the threshold.\n  // The most strict value is 0, and there is no upper limit.\n  // On the other hand, I think that the value from 0.02 to 0.2 is reasonable.\n  option->allowed_range = 0.1;\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/fft.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// This file represents the functions about FFT (Fast Fourier Transform)\n// implemented by Mr. Ooura, and wrapper functions implemented by M. Morise.\n// We can use these wrapper functions as well as the FFTW functions.\n// Please see the FFTW web-page to show the usage of the wrapper functions.\n// Ooura FFT:\n//   (Japanese) http://www.kurims.kyoto-u.ac.jp/~ooura/index-j.html\n//   (English) http://www.kurims.kyoto-u.ac.jp/~ooura/index.html\n// FFTW:\n//   (English) http://www.fftw.org/\n// 2012/08/24 by M. Morise\n//-----------------------------------------------------------------------------\n#include \"world/fft.h\"\n\n#include <math.h>\n#include <stdlib.h>\n\nvoid cdft(int n, int isgn, double *a, int *ip, double *w);\nvoid rdft(int n, int isgn, double *a, int *ip, double *w);\n\nnamespace {\nstatic void BackwardFFT(fft_plan p) {\n  if (p.c_out == NULL) {  // c2r\n    p.input[0] = p.c_in[0][0];\n    p.input[1] = p.c_in[p.n / 2][0];\n    for (int i = 1; i < p.n / 2; ++i) {\n      p.input[i * 2]  = p.c_in[i][0];\n      p.input[i * 2 + 1]  = -p.c_in[i][1];\n    }\n    rdft(p.n, -1, p.input, p.ip, p.w);\n    for (int i = 0; i < p.n; ++i) p.out[i] = p.input[i] * 2.0;\n  } else {  // c2c\n    for (int i = 0; i < p.n; ++i) {\n      p.input[i * 2] = p.c_in[i][0];\n      p.input[i * 2 + 1] = p.c_in[i][1];\n    }\n    cdft(p.n * 2, -1, p.input, p.ip, p.w);\n    for (int i = 0; i < p.n; ++i) {\n      p.c_out[i][0] = p.input[i * 2];\n      p.c_out[i][1] = -p.input[i * 2 + 1];\n    }\n  }\n}\n\nstatic void ForwardFFT(fft_plan p) {\n  if (p.c_in == NULL) {  // r2c\n    for (int i = 0; i < p.n; ++i) p.input[i] = p.in[i];\n    rdft(p.n, 1, p.input, p.ip, p.w);\n    p.c_out[0][0] = p.input[0];\n    p.c_out[0][1] = 0.0;\n    for (int i = 1; i < p.n / 2; ++i) {\n      p.c_out[i][0] = p.input[i * 2];\n      p.c_out[i][1] = -p.input[i * 2 + 1];\n    }\n    p.c_out[p.n / 2][0] = p.input[1];\n    p.c_out[p.n / 2][1] = 0.0;\n  } else {  // c2c\n    for (int i = 0; i < p.n; ++i) {\n      p.input[i * 2] = p.c_in[i][0];\n      p.input[i * 2 + 1] = p.c_in[i][1];\n    }\n    cdft(p.n * 2, 1, p.input, p.ip, p.w);\n    for (int i = 0; i < p.n; ++i) {\n      p.c_out[i][0] = p.input[i * 2];\n      p.c_out[i][1] = -p.input[i * 2 + 1];\n    }\n  }\n}\n\n}  // namespace\n\nfft_plan fft_plan_dft_1d(int n, fft_complex *in, fft_complex *out, int sign,\n    unsigned int flags) {\n  void makewt(int nw, int *ip, double *w);\n\n  fft_plan output = {0};\n  output.n = n;\n  output.in = NULL;\n  output.c_in = in;\n  output.out = NULL;\n  output.c_out = out;\n  output.sign = sign;\n  output.flags = flags;\n  output.input = new double[n * 2];\n  output.ip = new int[n];\n  output.w = new double[n * 5 / 4];\n\n  output.ip[0] = 0;\n  makewt(output.n >> 1, output.ip, output.w);\n  return output;\n}\n\nfft_plan fft_plan_dft_c2r_1d(int n, fft_complex *in, double *out,\n    unsigned int flags) {\n  void makewt(int nw, int *ip, double *w);\n  void makect(int nc, int *ip, double *c);\n\n  fft_plan output = {0};\n  output.n = n;\n  output.in = NULL;\n  output.c_in = in;\n  output.out = out;\n  output.c_out = NULL;\n  output.sign = FFT_BACKWARD;\n  output.flags = flags;\n  output.input = new double[n];\n  output.ip = new int[n];\n  output.w = new double[n * 5 / 4];\n\n  output.ip[0] = 0;\n  makewt(output.n >> 2, output.ip, output.w);\n  makect(output.n >> 2, output.ip, output.w + (output.n >> 2));\n  return output;\n}\n\nfft_plan fft_plan_dft_r2c_1d(int n, double *in, fft_complex *out,\n    unsigned int flags) {\n  void makewt(int nw, int *ip, double *w);\n  void makect(int nc, int *ip, double *c);\n\n  fft_plan output = {0};\n  output.n = n;\n  output.in = in;\n  output.c_in = NULL;\n  output.out = NULL;\n  output.c_out = out;\n  output.sign = FFT_FORWARD;\n  output.flags = flags;\n  output.input = new double[n];\n  output.ip = new int[n];\n  output.w = new double[n * 5 / 4];\n\n  output.ip[0] = 0;\n  makewt(output.n >> 2, output.ip, output.w);\n  makect(output.n >> 2, output.ip, output.w + (output.n >> 2));\n  return output;\n}\n\nvoid fft_execute(fft_plan p) {\n  if (p.sign == FFT_FORWARD) {\n    ForwardFFT(p);\n  } else {  // ifft\n    BackwardFFT(p);\n  }\n}\n\nvoid fft_destroy_plan(fft_plan p) {\n  p.n = 0;\n  p.in = NULL;\n  p.c_in = NULL;\n  p.out = NULL;\n  p.c_out = NULL;\n  p.sign = 0;\n  p.flags = 0;\n  delete[] p.input;\n  delete[] p.ip;\n  delete[] p.w;\n}\n\n//-----------------------------------------------------------------------\n// The following functions are reffered by\n// http://www.kurims.kyoto-u.ac.jp/~ooura/index.html\n\nvoid cdft(int n, int isgn, double *a, int *ip, double *w) {\n  void cftfsub(int n, double *a, int *ip, int nw, double *w);\n  void cftbsub(int n, double *a, int *ip, int nw, double *w);\n  int nw;\n\n  nw = ip[0];\n  if (isgn >= 0) {\n    cftfsub(n, a, ip, nw, w);\n  } else {\n    cftbsub(n, a, ip, nw, w);\n  }\n}\n\n\nvoid rdft(int n, int isgn, double *a, int *ip, double *w) {\n  void cftfsub(int n, double *a, int *ip, int nw, double *w);\n  void cftbsub(int n, double *a, int *ip, int nw, double *w);\n  void rftfsub(int n, double *a, int nc, double *c);\n  void rftbsub(int n, double *a, int nc, double *c);\n  double xi;\n\n  int nw = ip[0];\n  int nc = ip[1];\n\n  if (isgn >= 0) {\n    if (n > 4) {\n      cftfsub(n, a, ip, nw, w);\n      rftfsub(n, a, nc, w + nw);\n    } else if (n == 4) {\n      cftfsub(n, a, ip, nw, w);\n    }\n    xi = a[0] - a[1];\n    a[0] += a[1];\n    a[1] = xi;\n  } else {\n    a[1] = 0.5 * (a[0] - a[1]);\n    a[0] -= a[1];\n    if (n > 4) {\n      rftbsub(n, a, nc, w + nw);\n      cftbsub(n, a, ip, nw, w);\n    } else if (n == 4) {\n      cftbsub(n, a, ip, nw, w);\n    }\n  }\n}\n\nvoid makewt(int nw, int *ip, double *w) {\n  void makeipt(int nw, int *ip);\n  int j, nwh, nw0, nw1;\n  double delta, wn4r, wk1r, wk1i, wk3r, wk3i;\n\n  ip[0] = nw;\n  ip[1] = 1;\n  if (nw > 2) {\n    nwh = nw >> 1;\n    delta = atan(1.0) / nwh;\n    wn4r = cos(delta * nwh);\n    w[0] = 1;\n    w[1] = wn4r;\n    if (nwh == 4) {\n      w[2] = cos(delta * 2);\n      w[3] = sin(delta * 2);\n    } else if (nwh > 4) {\n      makeipt(nw, ip);\n      w[2] = 0.5 / cos(delta * 2);\n      w[3] = 0.5 / cos(delta * 6);\n      for (j = 4; j < nwh; j += 4) {\n        w[j] = cos(delta * j);\n        w[j + 1] = sin(delta * j);\n        w[j + 2] = cos(3 * delta * j);\n        w[j + 3] = -sin(3 * delta * j);\n      }\n    }\n    nw0 = 0;\n    while (nwh > 2) {\n      nw1 = nw0 + nwh;\n      nwh >>= 1;\n      w[nw1] = 1;\n      w[nw1 + 1] = wn4r;\n      if (nwh == 4) {\n        wk1r = w[nw0 + 4];\n        wk1i = w[nw0 + 5];\n        w[nw1 + 2] = wk1r;\n        w[nw1 + 3] = wk1i;\n      } else if (nwh > 4) {\n        wk1r = w[nw0 + 4];\n        wk3r = w[nw0 + 6];\n        w[nw1 + 2] = 0.5 / wk1r;\n        w[nw1 + 3] = 0.5 / wk3r;\n        for (j = 4; j < nwh; j += 4) {\n          wk1r = w[nw0 + 2 * j];\n          wk1i = w[nw0 + 2 * j + 1];\n          wk3r = w[nw0 + 2 * j + 2];\n          wk3i = w[nw0 + 2 * j + 3];\n          w[nw1 + j] = wk1r;\n          w[nw1 + j + 1] = wk1i;\n          w[nw1 + j + 2] = wk3r;\n          w[nw1 + j + 3] = wk3i;\n        }\n      }\n      nw0 = nw1;\n    }\n  }\n}\n\nvoid makeipt(int nw, int *ip) {\n  int j, l, m, m2, p, q;\n\n  ip[2] = 0;\n  ip[3] = 16;\n  m = 2;\n  for (l = nw; l > 32; l >>= 2) {\n    m2 = m << 1;\n    q = m2 << 3;\n    for (j = m; j < m2; j++) {\n      p = ip[j] << 2;\n      ip[m + j] = p;\n      ip[m2 + j] = p + q;\n    }\n    m = m2;\n  }\n}\n\nvoid makect(int nc, int *ip, double *c) {\n  int j, nch;\n  double delta;\n\n  ip[1] = nc;\n  if (nc > 1) {\n    nch = nc >> 1;\n    delta = atan(1.0) / nch;\n    c[0] = cos(delta * nch);\n    c[nch] = 0.5 * c[0];\n    for (j = 1; j < nch; j++) {\n      c[j] = 0.5 * cos(delta * j);\n      c[nc - j] = 0.5 * sin(delta * j);\n    }\n  }\n}\n\n// -------- child routines --------\n\n\nvoid cftfsub(int n, double *a, int *ip, int nw, double *w) {\n  void bitrv2(int n, int *ip, double *a);\n  void bitrv216(double *a);\n  void bitrv208(double *a);\n  void cftf1st(int n, double *a, double *w);\n  void cftrec4(int n, double *a, int nw, double *w);\n  void cftleaf(int n, int isplt, double *a, int nw, double *w);\n  void cftfx41(int n, double *a, int nw, double *w);\n  void cftf161(double *a, double *w);\n  void cftf081(double *a, double *w);\n  void cftf040(double *a);\n  void cftx020(double *a);\n\n  if (n > 8) {\n    if (n > 32) {\n      cftf1st(n, a, &w[nw - (n >> 2)]);\n    if (n > 512) {\n      cftrec4(n, a, nw, w);\n    } else if (n > 128) {\n      cftleaf(n, 1, a, nw, w);\n    } else {\n      cftfx41(n, a, nw, w);\n    }\n      bitrv2(n, ip, a);\n    } else if (n == 32) {\n      cftf161(a, &w[nw - 8]);\n      bitrv216(a);\n    } else {\n      cftf081(a, w);\n      bitrv208(a);\n    }\n  } else if (n == 8) {\n    cftf040(a);\n  } else if (n == 4) {\n    cftx020(a);\n  }\n}\n\nvoid cftbsub(int n, double *a, int *ip, int nw, double *w) {\n  void bitrv2conj(int n, int *ip, double *a);\n  void bitrv216neg(double *a);\n  void bitrv208neg(double *a);\n  void cftb1st(int n, double *a, double *w);\n  void cftrec4(int n, double *a, int nw, double *w);\n  void cftleaf(int n, int isplt, double *a, int nw, double *w);\n  void cftfx41(int n, double *a, int nw, double *w);\n  void cftf161(double *a, double *w);\n  void cftf081(double *a, double *w);\n  void cftb040(double *a);\n  void cftx020(double *a);\n\n  if (n > 8) {\n    if (n > 32) {\n      cftb1st(n, a, &w[nw - (n >> 2)]);\n      if (n > 512) {\n        cftrec4(n, a, nw, w);\n      } else if (n > 128) {\n        cftleaf(n, 1, a, nw, w);\n      } else {\n        cftfx41(n, a, nw, w);\n      }\n      bitrv2conj(n, ip, a);\n    } else if (n == 32) {\n      cftf161(a, &w[nw - 8]);\n      bitrv216neg(a);\n    } else {\n      cftf081(a, w);\n      bitrv208neg(a);\n    }\n  } else if (n == 8) {\n    cftb040(a);\n  } else if (n == 4) {\n    cftx020(a);\n  }\n}\n\nvoid bitrv2(int n, int *ip, double *a) {\n  int j, j1, k, k1, l, m, nh, nm;\n  double xr, xi, yr, yi;\n\n  m = 1;\n  for (l = n >> 2; l > 8; l >>= 2) {\n    m <<= 1;\n  }\n  nh = n >> 1;\n  nm = 4 * m;\n  if (l == 8) {\n    for (k = 0; k < m; k++) {\n      for (j = 0; j < k; j++) {\n        j1 = 4 * j + 2 * ip[m + k];\n        k1 = 4 * k + 2 * ip[m + j];\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nh;\n        k1 += 2;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += 2;\n        k1 += nh;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nh;\n        k1 -= 2;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n      }\n      k1 = 4 * k + 2 * ip[m + k];\n      j1 = k1 + 2;\n      k1 += nh;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nm;\n      k1 += 2 * nm;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nm;\n      k1 -= nm;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 -= 2;\n      k1 -= nh;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nh + 2;\n      k1 += nh + 2;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 -= nh - nm;\n      k1 += 2 * nm - 2;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n    }\n  } else {\n    for (k = 0; k < m; k++) {\n      for (j = 0; j < k; j++) {\n        j1 = 4 * j + ip[m + k];\n        k1 = 4 * k + ip[m + j];\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nh;\n        k1 += 2;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += 2;\n        k1 += nh;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nh;\n        k1 -= 2;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n      }\n      k1 = 4 * k + ip[m + k];\n      j1 = k1 + 2;\n      k1 += nh;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nm;\n      k1 += nm;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n    }\n  }\n}\n\nvoid bitrv2conj(int n, int *ip, double *a) {\n  int j, j1, k, k1, l, m, nh, nm;\n  double xr, xi, yr, yi;\n\n  m = 1;\n  for (l = n >> 2; l > 8; l >>= 2) {\n    m <<= 1;\n  }\n  nh = n >> 1;\n  nm = 4 * m;\n  if (l == 8) {\n    for (k = 0; k < m; k++) {\n      for (j = 0; j < k; j++) {\n        j1 = 4 * j + 2 * ip[m + k];\n        k1 = 4 * k + 2 * ip[m + j];\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nh;\n        k1 += 2;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += 2;\n        k1 += nh;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nh;\n        k1 -= 2;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n      }\n      k1 = 4 * k + 2 * ip[m + k];\n      j1 = k1 + 2;\n      k1 += nh;\n      a[j1 - 1] = -a[j1 - 1];\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      a[k1 + 3] = -a[k1 + 3];\n      j1 += nm;\n      k1 += 2 * nm;\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nm;\n      k1 -= nm;\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 -= 2;\n      k1 -= nh;\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nh + 2;\n      k1 += nh + 2;\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 -= nh - nm;\n      k1 += 2 * nm - 2;\n      a[j1 - 1] = -a[j1 - 1];\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      a[k1 + 3] = -a[k1 + 3];\n    }\n  } else {\n    for (k = 0; k < m; k++) {\n      for (j = 0; j < k; j++) {\n        j1 = 4 * j + ip[m + k];\n        k1 = 4 * k + ip[m + j];\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nh;\n        k1 += 2;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += 2;\n        k1 += nh;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nh;\n        k1 -= 2;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n      }\n      k1 = 4 * k + ip[m + k];\n      j1 = k1 + 2;\n      k1 += nh;\n      a[j1 - 1] = -a[j1 - 1];\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      a[k1 + 3] = -a[k1 + 3];\n      j1 += nm;\n      k1 += nm;\n      a[j1 - 1] = -a[j1 - 1];\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      a[k1 + 3] = -a[k1 + 3];\n    }\n  }\n}\n\nvoid bitrv216(double *a) {\n  double x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i,\n    x5r, x5i, x7r, x7i, x8r, x8i, x10r, x10i,\n    x11r, x11i, x12r, x12i, x13r, x13i, x14r, x14i;\n\n  x1r = a[2];\n  x1i = a[3];\n  x2r = a[4];\n  x2i = a[5];\n  x3r = a[6];\n  x3i = a[7];\n  x4r = a[8];\n  x4i = a[9];\n  x5r = a[10];\n  x5i = a[11];\n  x7r = a[14];\n  x7i = a[15];\n  x8r = a[16];\n  x8i = a[17];\n  x10r = a[20];\n  x10i = a[21];\n  x11r = a[22];\n  x11i = a[23];\n  x12r = a[24];\n  x12i = a[25];\n  x13r = a[26];\n  x13i = a[27];\n  x14r = a[28];\n  x14i = a[29];\n  a[2] = x8r;\n  a[3] = x8i;\n  a[4] = x4r;\n  a[5] = x4i;\n  a[6] = x12r;\n  a[7] = x12i;\n  a[8] = x2r;\n  a[9] = x2i;\n  a[10] = x10r;\n  a[11] = x10i;\n  a[14] = x14r;\n  a[15] = x14i;\n  a[16] = x1r;\n  a[17] = x1i;\n  a[20] = x5r;\n  a[21] = x5i;\n  a[22] = x13r;\n  a[23] = x13i;\n  a[24] = x3r;\n  a[25] = x3i;\n  a[26] = x11r;\n  a[27] = x11i;\n  a[28] = x7r;\n  a[29] = x7i;\n}\n\n\nvoid bitrv216neg(double *a) {\n  double x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i,\n    x5r, x5i, x6r, x6i, x7r, x7i, x8r, x8i,\n    x9r, x9i, x10r, x10i, x11r, x11i, x12r, x12i,\n    x13r, x13i, x14r, x14i, x15r, x15i;\n\n  x1r = a[2];\n  x1i = a[3];\n  x2r = a[4];\n  x2i = a[5];\n  x3r = a[6];\n  x3i = a[7];\n  x4r = a[8];\n  x4i = a[9];\n  x5r = a[10];\n  x5i = a[11];\n  x6r = a[12];\n  x6i = a[13];\n  x7r = a[14];\n  x7i = a[15];\n  x8r = a[16];\n  x8i = a[17];\n  x9r = a[18];\n  x9i = a[19];\n  x10r = a[20];\n  x10i = a[21];\n  x11r = a[22];\n  x11i = a[23];\n  x12r = a[24];\n  x12i = a[25];\n  x13r = a[26];\n  x13i = a[27];\n  x14r = a[28];\n  x14i = a[29];\n  x15r = a[30];\n  x15i = a[31];\n  a[2] = x15r;\n  a[3] = x15i;\n  a[4] = x7r;\n  a[5] = x7i;\n  a[6] = x11r;\n  a[7] = x11i;\n  a[8] = x3r;\n  a[9] = x3i;\n  a[10] = x13r;\n  a[11] = x13i;\n  a[12] = x5r;\n  a[13] = x5i;\n  a[14] = x9r;\n  a[15] = x9i;\n  a[16] = x1r;\n  a[17] = x1i;\n  a[18] = x14r;\n  a[19] = x14i;\n  a[20] = x6r;\n  a[21] = x6i;\n  a[22] = x10r;\n  a[23] = x10i;\n  a[24] = x2r;\n  a[25] = x2i;\n  a[26] = x12r;\n  a[27] = x12i;\n  a[28] = x4r;\n  a[29] = x4i;\n  a[30] = x8r;\n  a[31] = x8i;\n}\n\nvoid bitrv208(double *a) {\n  double x1r, x1i, x3r, x3i, x4r, x4i, x6r, x6i;\n\n  x1r = a[2];\n  x1i = a[3];\n  x3r = a[6];\n  x3i = a[7];\n  x4r = a[8];\n  x4i = a[9];\n  x6r = a[12];\n  x6i = a[13];\n  a[2] = x4r;\n  a[3] = x4i;\n  a[6] = x6r;\n  a[7] = x6i;\n  a[8] = x1r;\n  a[9] = x1i;\n  a[12] = x3r;\n  a[13] = x3i;\n}\n\nvoid bitrv208neg(double *a) {\n  double x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i,\n    x5r, x5i, x6r, x6i, x7r, x7i;\n\n  x1r = a[2];\n  x1i = a[3];\n  x2r = a[4];\n  x2i = a[5];\n  x3r = a[6];\n  x3i = a[7];\n  x4r = a[8];\n  x4i = a[9];\n  x5r = a[10];\n  x5i = a[11];\n  x6r = a[12];\n  x6i = a[13];\n  x7r = a[14];\n  x7i = a[15];\n  a[2] = x7r;\n  a[3] = x7i;\n  a[4] = x3r;\n  a[5] = x3i;\n  a[6] = x5r;\n  a[7] = x5i;\n  a[8] = x1r;\n  a[9] = x1i;\n  a[10] = x6r;\n  a[11] = x6i;\n  a[12] = x2r;\n  a[13] = x2i;\n  a[14] = x4r;\n  a[15] = x4i;\n}\n\nvoid cftf1st(int n, double *a, double *w) {\n  int j, j0, j1, j2, j3, k, m, mh;\n  double wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i,\n    wd1r, wd1i, wd3r, wd3i;\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i;\n\n  mh = n >> 3;\n  m = 2 * mh;\n  j1 = m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[0] + a[j2];\n  x0i = a[1] + a[j2 + 1];\n  x1r = a[0] - a[j2];\n  x1i = a[1] - a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i - x2i;\n  a[j2] = x1r - x3i;\n  a[j2 + 1] = x1i + x3r;\n  a[j3] = x1r + x3i;\n  a[j3 + 1] = x1i - x3r;\n  wn4r = w[1];\n  csc1 = w[2];\n  csc3 = w[3];\n  wd1r = 1;\n  wd1i = 0;\n  wd3r = 1;\n  wd3i = 0;\n  k = 0;\n  for (j = 2; j < mh - 2; j += 4) {\n    k += 4;\n    wk1r = csc1 * (wd1r + w[k]);\n    wk1i = csc1 * (wd1i + w[k + 1]);\n    wk3r = csc3 * (wd3r + w[k + 2]);\n    wk3i = csc3 * (wd3i + w[k + 3]);\n    wd1r = w[k];\n    wd1i = w[k + 1];\n    wd3r = w[k + 2];\n    wd3i = w[k + 3];\n    j1 = j + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j] + a[j2];\n    x0i = a[j + 1] + a[j2 + 1];\n    x1r = a[j] - a[j2];\n    x1i = a[j + 1] - a[j2 + 1];\n    y0r = a[j + 2] + a[j2 + 2];\n    y0i = a[j + 3] + a[j2 + 3];\n    y1r = a[j + 2] - a[j2 + 2];\n    y1i = a[j + 3] - a[j2 + 3];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    y2r = a[j1 + 2] + a[j3 + 2];\n    y2i = a[j1 + 3] + a[j3 + 3];\n    y3r = a[j1 + 2] - a[j3 + 2];\n    y3i = a[j1 + 3] - a[j3 + 3];\n    a[j] = x0r + x2r;\n    a[j + 1] = x0i + x2i;\n    a[j + 2] = y0r + y2r;\n    a[j + 3] = y0i + y2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i - x2i;\n    a[j1 + 2] = y0r - y2r;\n    a[j1 + 3] = y0i - y2i;\n    x0r = x1r - x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1r * x0r - wk1i * x0i;\n    a[j2 + 1] = wk1r * x0i + wk1i * x0r;\n    x0r = y1r - y3i;\n    x0i = y1i + y3r;\n    a[j2 + 2] = wd1r * x0r - wd1i * x0i;\n    a[j2 + 3] = wd1r * x0i + wd1i * x0r;\n    x0r = x1r + x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3r * x0r + wk3i * x0i;\n    a[j3 + 1] = wk3r * x0i - wk3i * x0r;\n    x0r = y1r + y3i;\n    x0i = y1i - y3r;\n    a[j3 + 2] = wd3r * x0r + wd3i * x0i;\n    a[j3 + 3] = wd3r * x0i - wd3i * x0r;\n    j0 = m - j;\n    j1 = j0 + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j0] + a[j2];\n    x0i = a[j0 + 1] + a[j2 + 1];\n    x1r = a[j0] - a[j2];\n    x1i = a[j0 + 1] - a[j2 + 1];\n    y0r = a[j0 - 2] + a[j2 - 2];\n    y0i = a[j0 - 1] + a[j2 - 1];\n    y1r = a[j0 - 2] - a[j2 - 2];\n    y1i = a[j0 - 1] - a[j2 - 1];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    y2r = a[j1 - 2] + a[j3 - 2];\n    y2i = a[j1 - 1] + a[j3 - 1];\n    y3r = a[j1 - 2] - a[j3 - 2];\n    y3i = a[j1 - 1] - a[j3 - 1];\n    a[j0] = x0r + x2r;\n    a[j0 + 1] = x0i + x2i;\n    a[j0 - 2] = y0r + y2r;\n    a[j0 - 1] = y0i + y2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i - x2i;\n    a[j1 - 2] = y0r - y2r;\n    a[j1 - 1] = y0i - y2i;\n    x0r = x1r - x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1i * x0r - wk1r * x0i;\n    a[j2 + 1] = wk1i * x0i + wk1r * x0r;\n    x0r = y1r - y3i;\n    x0i = y1i + y3r;\n    a[j2 - 2] = wd1i * x0r - wd1r * x0i;\n    a[j2 - 1] = wd1i * x0i + wd1r * x0r;\n    x0r = x1r + x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3i * x0r + wk3r * x0i;\n    a[j3 + 1] = wk3i * x0i - wk3r * x0r;\n    x0r = y1r + y3i;\n    x0i = y1i - y3r;\n    a[j3 - 2] = wd3i * x0r + wd3r * x0i;\n    a[j3 - 1] = wd3i * x0i - wd3r * x0r;\n  }\n  wk1r = csc1 * (wd1r + wn4r);\n  wk1i = csc1 * (wd1i + wn4r);\n  wk3r = csc3 * (wd3r - wn4r);\n  wk3i = csc3 * (wd3i - wn4r);\n  j0 = mh;\n  j1 = j0 + m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[j0 - 2] + a[j2 - 2];\n  x0i = a[j0 - 1] + a[j2 - 1];\n  x1r = a[j0 - 2] - a[j2 - 2];\n  x1i = a[j0 - 1] - a[j2 - 1];\n  x2r = a[j1 - 2] + a[j3 - 2];\n  x2i = a[j1 - 1] + a[j3 - 1];\n  x3r = a[j1 - 2] - a[j3 - 2];\n  x3i = a[j1 - 1] - a[j3 - 1];\n  a[j0 - 2] = x0r + x2r;\n  a[j0 - 1] = x0i + x2i;\n  a[j1 - 2] = x0r - x2r;\n  a[j1 - 1] = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  a[j2 - 2] = wk1r * x0r - wk1i * x0i;\n  a[j2 - 1] = wk1r * x0i + wk1i * x0r;\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  a[j3 - 2] = wk3r * x0r + wk3i * x0i;\n  a[j3 - 1] = wk3r * x0i - wk3i * x0r;\n  x0r = a[j0] + a[j2];\n  x0i = a[j0 + 1] + a[j2 + 1];\n  x1r = a[j0] - a[j2];\n  x1i = a[j0 + 1] - a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[j0] = x0r + x2r;\n  a[j0 + 1] = x0i + x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  a[j2] = wn4r * (x0r - x0i);\n  a[j2 + 1] = wn4r * (x0i + x0r);\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  a[j3] = -wn4r * (x0r + x0i);\n  a[j3 + 1] = -wn4r * (x0i - x0r);\n  x0r = a[j0 + 2] + a[j2 + 2];\n  x0i = a[j0 + 3] + a[j2 + 3];\n  x1r = a[j0 + 2] - a[j2 + 2];\n  x1i = a[j0 + 3] - a[j2 + 3];\n  x2r = a[j1 + 2] + a[j3 + 2];\n  x2i = a[j1 + 3] + a[j3 + 3];\n  x3r = a[j1 + 2] - a[j3 + 2];\n  x3i = a[j1 + 3] - a[j3 + 3];\n  a[j0 + 2] = x0r + x2r;\n  a[j0 + 3] = x0i + x2i;\n  a[j1 + 2] = x0r - x2r;\n  a[j1 + 3] = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  a[j2 + 2] = wk1i * x0r - wk1r * x0i;\n  a[j2 + 3] = wk1i * x0i + wk1r * x0r;\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  a[j3 + 2] = wk3i * x0r + wk3r * x0i;\n  a[j3 + 3] = wk3i * x0i - wk3r * x0r;\n}\n\nvoid cftb1st(int n, double *a, double *w) {\n  int j, j0, j1, j2, j3, k, m, mh;\n  double wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i,\n    wd1r, wd1i, wd3r, wd3i;\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i;\n\n  mh = n >> 3;\n  m = 2 * mh;\n  j1 = m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[0] + a[j2];\n  x0i = -a[1] - a[j2 + 1];\n  x1r = a[0] - a[j2];\n  x1i = -a[1] + a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[0] = x0r + x2r;\n  a[1] = x0i - x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i + x2i;\n  a[j2] = x1r + x3i;\n  a[j2 + 1] = x1i + x3r;\n  a[j3] = x1r - x3i;\n  a[j3 + 1] = x1i - x3r;\n  wn4r = w[1];\n  csc1 = w[2];\n  csc3 = w[3];\n  wd1r = 1;\n  wd1i = 0;\n  wd3r = 1;\n  wd3i = 0;\n  k = 0;\n  for (j = 2; j < mh - 2; j += 4) {\n    k += 4;\n    wk1r = csc1 * (wd1r + w[k]);\n    wk1i = csc1 * (wd1i + w[k + 1]);\n    wk3r = csc3 * (wd3r + w[k + 2]);\n    wk3i = csc3 * (wd3i + w[k + 3]);\n    wd1r = w[k];\n    wd1i = w[k + 1];\n    wd3r = w[k + 2];\n    wd3i = w[k + 3];\n    j1 = j + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j] + a[j2];\n    x0i = -a[j + 1] - a[j2 + 1];\n    x1r = a[j] - a[j2];\n    x1i = -a[j + 1] + a[j2 + 1];\n    y0r = a[j + 2] + a[j2 + 2];\n    y0i = -a[j + 3] - a[j2 + 3];\n    y1r = a[j + 2] - a[j2 + 2];\n    y1i = -a[j + 3] + a[j2 + 3];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    y2r = a[j1 + 2] + a[j3 + 2];\n    y2i = a[j1 + 3] + a[j3 + 3];\n    y3r = a[j1 + 2] - a[j3 + 2];\n    y3i = a[j1 + 3] - a[j3 + 3];\n    a[j] = x0r + x2r;\n    a[j + 1] = x0i - x2i;\n    a[j + 2] = y0r + y2r;\n    a[j + 3] = y0i - y2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i + x2i;\n    a[j1 + 2] = y0r - y2r;\n    a[j1 + 3] = y0i + y2i;\n    x0r = x1r + x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1r * x0r - wk1i * x0i;\n    a[j2 + 1] = wk1r * x0i + wk1i * x0r;\n    x0r = y1r + y3i;\n    x0i = y1i + y3r;\n    a[j2 + 2] = wd1r * x0r - wd1i * x0i;\n    a[j2 + 3] = wd1r * x0i + wd1i * x0r;\n    x0r = x1r - x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3r * x0r + wk3i * x0i;\n    a[j3 + 1] = wk3r * x0i - wk3i * x0r;\n    x0r = y1r - y3i;\n    x0i = y1i - y3r;\n    a[j3 + 2] = wd3r * x0r + wd3i * x0i;\n    a[j3 + 3] = wd3r * x0i - wd3i * x0r;\n    j0 = m - j;\n    j1 = j0 + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j0] + a[j2];\n    x0i = -a[j0 + 1] - a[j2 + 1];\n    x1r = a[j0] - a[j2];\n    x1i = -a[j0 + 1] + a[j2 + 1];\n    y0r = a[j0 - 2] + a[j2 - 2];\n    y0i = -a[j0 - 1] - a[j2 - 1];\n    y1r = a[j0 - 2] - a[j2 - 2];\n    y1i = -a[j0 - 1] + a[j2 - 1];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    y2r = a[j1 - 2] + a[j3 - 2];\n    y2i = a[j1 - 1] + a[j3 - 1];\n    y3r = a[j1 - 2] - a[j3 - 2];\n    y3i = a[j1 - 1] - a[j3 - 1];\n    a[j0] = x0r + x2r;\n    a[j0 + 1] = x0i - x2i;\n    a[j0 - 2] = y0r + y2r;\n    a[j0 - 1] = y0i - y2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i + x2i;\n    a[j1 - 2] = y0r - y2r;\n    a[j1 - 1] = y0i + y2i;\n    x0r = x1r + x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1i * x0r - wk1r * x0i;\n    a[j2 + 1] = wk1i * x0i + wk1r * x0r;\n    x0r = y1r + y3i;\n    x0i = y1i + y3r;\n    a[j2 - 2] = wd1i * x0r - wd1r * x0i;\n    a[j2 - 1] = wd1i * x0i + wd1r * x0r;\n    x0r = x1r - x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3i * x0r + wk3r * x0i;\n    a[j3 + 1] = wk3i * x0i - wk3r * x0r;\n    x0r = y1r - y3i;\n    x0i = y1i - y3r;\n    a[j3 - 2] = wd3i * x0r + wd3r * x0i;\n    a[j3 - 1] = wd3i * x0i - wd3r * x0r;\n  }\n  wk1r = csc1 * (wd1r + wn4r);\n  wk1i = csc1 * (wd1i + wn4r);\n  wk3r = csc3 * (wd3r - wn4r);\n  wk3i = csc3 * (wd3i - wn4r);\n  j0 = mh;\n  j1 = j0 + m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[j0 - 2] + a[j2 - 2];\n  x0i = -a[j0 - 1] - a[j2 - 1];\n  x1r = a[j0 - 2] - a[j2 - 2];\n  x1i = -a[j0 - 1] + a[j2 - 1];\n  x2r = a[j1 - 2] + a[j3 - 2];\n  x2i = a[j1 - 1] + a[j3 - 1];\n  x3r = a[j1 - 2] - a[j3 - 2];\n  x3i = a[j1 - 1] - a[j3 - 1];\n  a[j0 - 2] = x0r + x2r;\n  a[j0 - 1] = x0i - x2i;\n  a[j1 - 2] = x0r - x2r;\n  a[j1 - 1] = x0i + x2i;\n  x0r = x1r + x3i;\n  x0i = x1i + x3r;\n  a[j2 - 2] = wk1r * x0r - wk1i * x0i;\n  a[j2 - 1] = wk1r * x0i + wk1i * x0r;\n  x0r = x1r - x3i;\n  x0i = x1i - x3r;\n  a[j3 - 2] = wk3r * x0r + wk3i * x0i;\n  a[j3 - 1] = wk3r * x0i - wk3i * x0r;\n  x0r = a[j0] + a[j2];\n  x0i = -a[j0 + 1] - a[j2 + 1];\n  x1r = a[j0] - a[j2];\n  x1i = -a[j0 + 1] + a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[j0] = x0r + x2r;\n  a[j0 + 1] = x0i - x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i + x2i;\n  x0r = x1r + x3i;\n  x0i = x1i + x3r;\n  a[j2] = wn4r * (x0r - x0i);\n  a[j2 + 1] = wn4r * (x0i + x0r);\n  x0r = x1r - x3i;\n  x0i = x1i - x3r;\n  a[j3] = -wn4r * (x0r + x0i);\n  a[j3 + 1] = -wn4r * (x0i - x0r);\n  x0r = a[j0 + 2] + a[j2 + 2];\n  x0i = -a[j0 + 3] - a[j2 + 3];\n  x1r = a[j0 + 2] - a[j2 + 2];\n  x1i = -a[j0 + 3] + a[j2 + 3];\n  x2r = a[j1 + 2] + a[j3 + 2];\n  x2i = a[j1 + 3] + a[j3 + 3];\n  x3r = a[j1 + 2] - a[j3 + 2];\n  x3i = a[j1 + 3] - a[j3 + 3];\n  a[j0 + 2] = x0r + x2r;\n  a[j0 + 3] = x0i - x2i;\n  a[j1 + 2] = x0r - x2r;\n  a[j1 + 3] = x0i + x2i;\n  x0r = x1r + x3i;\n  x0i = x1i + x3r;\n  a[j2 + 2] = wk1i * x0r - wk1r * x0i;\n  a[j2 + 3] = wk1i * x0i + wk1r * x0r;\n  x0r = x1r - x3i;\n  x0i = x1i - x3r;\n  a[j3 + 2] = wk3i * x0r + wk3r * x0i;\n  a[j3 + 3] = wk3i * x0i - wk3r * x0r;\n}\n\nvoid cftrec4(int n, double *a, int nw, double *w) {\n  int cfttree(int n, int j, int k, double *a, int nw, double *w);\n  void cftleaf(int n, int isplt, double *a, int nw, double *w);\n  void cftmdl1(int n, double *a, double *w);\n  int isplt, j, k, m;\n\n  m = n;\n  while (m > 512) {\n    m >>= 2;\n    cftmdl1(m, &a[n - m], &w[nw - (m >> 1)]);\n  }\n  cftleaf(m, 1, &a[n - m], nw, w);\n  k = 0;\n  for (j = n - m; j > 0; j -= m) {\n    k++;\n    isplt = cfttree(m, j, k, a, nw, w);\n    cftleaf(m, isplt, &a[j - m], nw, w);\n  }\n}\n\nint cfttree(int n, int j, int k, double *a, int nw, double *w) {\n  void cftmdl1(int n, double *a, double *w);\n  void cftmdl2(int n, double *a, double *w);\n  int i, isplt, m;\n\n  if ((k & 3) != 0) {\n    isplt = k & 1;\n    if (isplt != 0) {\n      cftmdl1(n, &a[j - n], &w[nw - (n >> 1)]);\n    } else {\n      cftmdl2(n, &a[j - n], &w[nw - n]);\n    }\n  } else {\n    m = n;\n    for (i = k; (i & 3) == 0; i >>= 2) {\n      m <<= 2;\n    }\n    isplt = i & 1;\n    if (isplt != 0) {\n      while (m > 128) {\n        cftmdl1(m, &a[j - m], &w[nw - (m >> 1)]);\n        m >>= 2;\n      }\n    } else {\n      while (m > 128) {\n        cftmdl2(m, &a[j - m], &w[nw - m]);\n        m >>= 2;\n      }\n    }\n  }\n  return isplt;\n}\n\nvoid cftleaf(int n, int isplt, double *a, int nw, double *w) {\n  void cftmdl1(int n, double *a, double *w);\n  void cftmdl2(int n, double *a, double *w);\n  void cftf161(double *a, double *w);\n  void cftf162(double *a, double *w);\n  void cftf081(double *a, double *w);\n  void cftf082(double *a, double *w);\n\n  if (n == 512) {\n    cftmdl1(128, a, &w[nw - 64]);\n    cftf161(a, &w[nw - 8]);\n    cftf162(&a[32], &w[nw - 32]);\n    cftf161(&a[64], &w[nw - 8]);\n    cftf161(&a[96], &w[nw - 8]);\n    cftmdl2(128, &a[128], &w[nw - 128]);\n    cftf161(&a[128], &w[nw - 8]);\n    cftf162(&a[160], &w[nw - 32]);\n    cftf161(&a[192], &w[nw - 8]);\n    cftf162(&a[224], &w[nw - 32]);\n    cftmdl1(128, &a[256], &w[nw - 64]);\n    cftf161(&a[256], &w[nw - 8]);\n    cftf162(&a[288], &w[nw - 32]);\n    cftf161(&a[320], &w[nw - 8]);\n    cftf161(&a[352], &w[nw - 8]);\n    if (isplt != 0) {\n      cftmdl1(128, &a[384], &w[nw - 64]);\n      cftf161(&a[480], &w[nw - 8]);\n    } else {\n      cftmdl2(128, &a[384], &w[nw - 128]);\n      cftf162(&a[480], &w[nw - 32]);\n    }\n    cftf161(&a[384], &w[nw - 8]);\n    cftf162(&a[416], &w[nw - 32]);\n    cftf161(&a[448], &w[nw - 8]);\n  } else {\n    cftmdl1(64, a, &w[nw - 32]);\n    cftf081(a, &w[nw - 8]);\n    cftf082(&a[16], &w[nw - 8]);\n    cftf081(&a[32], &w[nw - 8]);\n    cftf081(&a[48], &w[nw - 8]);\n    cftmdl2(64, &a[64], &w[nw - 64]);\n    cftf081(&a[64], &w[nw - 8]);\n    cftf082(&a[80], &w[nw - 8]);\n    cftf081(&a[96], &w[nw - 8]);\n    cftf082(&a[112], &w[nw - 8]);\n    cftmdl1(64, &a[128], &w[nw - 32]);\n    cftf081(&a[128], &w[nw - 8]);\n    cftf082(&a[144], &w[nw - 8]);\n    cftf081(&a[160], &w[nw - 8]);\n    cftf081(&a[176], &w[nw - 8]);\n    if (isplt != 0) {\n      cftmdl1(64, &a[192], &w[nw - 32]);\n      cftf081(&a[240], &w[nw - 8]);\n    } else {\n      cftmdl2(64, &a[192], &w[nw - 64]);\n      cftf082(&a[240], &w[nw - 8]);\n    }\n    cftf081(&a[192], &w[nw - 8]);\n    cftf082(&a[208], &w[nw - 8]);\n    cftf081(&a[224], &w[nw - 8]);\n  }\n}\n\nvoid cftmdl1(int n, double *a, double *w) {\n  int j, j0, j1, j2, j3, k, m, mh;\n  double wn4r, wk1r, wk1i, wk3r, wk3i;\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;\n\n  mh = n >> 3;\n  m = 2 * mh;\n  j1 = m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[0] + a[j2];\n  x0i = a[1] + a[j2 + 1];\n  x1r = a[0] - a[j2];\n  x1i = a[1] - a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i - x2i;\n  a[j2] = x1r - x3i;\n  a[j2 + 1] = x1i + x3r;\n  a[j3] = x1r + x3i;\n  a[j3 + 1] = x1i - x3r;\n  wn4r = w[1];\n  k = 0;\n  for (j = 2; j < mh; j += 2) {\n    k += 4;\n    wk1r = w[k];\n    wk1i = w[k + 1];\n    wk3r = w[k + 2];\n    wk3i = w[k + 3];\n    j1 = j + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j] + a[j2];\n    x0i = a[j + 1] + a[j2 + 1];\n    x1r = a[j] - a[j2];\n    x1i = a[j + 1] - a[j2 + 1];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    a[j] = x0r + x2r;\n    a[j + 1] = x0i + x2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i - x2i;\n    x0r = x1r - x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1r * x0r - wk1i * x0i;\n    a[j2 + 1] = wk1r * x0i + wk1i * x0r;\n    x0r = x1r + x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3r * x0r + wk3i * x0i;\n    a[j3 + 1] = wk3r * x0i - wk3i * x0r;\n    j0 = m - j;\n    j1 = j0 + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j0] + a[j2];\n    x0i = a[j0 + 1] + a[j2 + 1];\n    x1r = a[j0] - a[j2];\n    x1i = a[j0 + 1] - a[j2 + 1];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    a[j0] = x0r + x2r;\n    a[j0 + 1] = x0i + x2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i - x2i;\n    x0r = x1r - x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1i * x0r - wk1r * x0i;\n    a[j2 + 1] = wk1i * x0i + wk1r * x0r;\n    x0r = x1r + x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3i * x0r + wk3r * x0i;\n    a[j3 + 1] = wk3i * x0i - wk3r * x0r;\n  }\n  j0 = mh;\n  j1 = j0 + m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[j0] + a[j2];\n  x0i = a[j0 + 1] + a[j2 + 1];\n  x1r = a[j0] - a[j2];\n  x1i = a[j0 + 1] - a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[j0] = x0r + x2r;\n  a[j0 + 1] = x0i + x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  a[j2] = wn4r * (x0r - x0i);\n  a[j2 + 1] = wn4r * (x0i + x0r);\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  a[j3] = -wn4r * (x0r + x0i);\n  a[j3 + 1] = -wn4r * (x0i - x0r);\n}\n\nvoid cftmdl2(int n, double *a, double *w) {\n  int j, j0, j1, j2, j3, k, kr, m, mh;\n  double wn4r, wk1r, wk1i, wk3r, wk3i, wd1r, wd1i, wd3r, wd3i;\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y2r, y2i;\n\n  mh = n >> 3;\n  m = 2 * mh;\n  wn4r = w[1];\n  j1 = m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[0] - a[j2 + 1];\n  x0i = a[1] + a[j2];\n  x1r = a[0] + a[j2 + 1];\n  x1i = a[1] - a[j2];\n  x2r = a[j1] - a[j3 + 1];\n  x2i = a[j1 + 1] + a[j3];\n  x3r = a[j1] + a[j3 + 1];\n  x3i = a[j1 + 1] - a[j3];\n  y0r = wn4r * (x2r - x2i);\n  y0i = wn4r * (x2i + x2r);\n  a[0] = x0r + y0r;\n  a[1] = x0i + y0i;\n  a[j1] = x0r - y0r;\n  a[j1 + 1] = x0i - y0i;\n  y0r = wn4r * (x3r - x3i);\n  y0i = wn4r * (x3i + x3r);\n  a[j2] = x1r - y0i;\n  a[j2 + 1] = x1i + y0r;\n  a[j3] = x1r + y0i;\n  a[j3 + 1] = x1i - y0r;\n  k = 0;\n  kr = 2 * m;\n  for (j = 2; j < mh; j += 2) {\n    k += 4;\n    wk1r = w[k];\n    wk1i = w[k + 1];\n    wk3r = w[k + 2];\n    wk3i = w[k + 3];\n    kr -= 4;\n    wd1i = w[kr];\n    wd1r = w[kr + 1];\n    wd3i = w[kr + 2];\n    wd3r = w[kr + 3];\n    j1 = j + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j] - a[j2 + 1];\n    x0i = a[j + 1] + a[j2];\n    x1r = a[j] + a[j2 + 1];\n    x1i = a[j + 1] - a[j2];\n    x2r = a[j1] - a[j3 + 1];\n    x2i = a[j1 + 1] + a[j3];\n    x3r = a[j1] + a[j3 + 1];\n    x3i = a[j1 + 1] - a[j3];\n    y0r = wk1r * x0r - wk1i * x0i;\n    y0i = wk1r * x0i + wk1i * x0r;\n    y2r = wd1r * x2r - wd1i * x2i;\n    y2i = wd1r * x2i + wd1i * x2r;\n    a[j] = y0r + y2r;\n    a[j + 1] = y0i + y2i;\n    a[j1] = y0r - y2r;\n    a[j1 + 1] = y0i - y2i;\n    y0r = wk3r * x1r + wk3i * x1i;\n    y0i = wk3r * x1i - wk3i * x1r;\n    y2r = wd3r * x3r + wd3i * x3i;\n    y2i = wd3r * x3i - wd3i * x3r;\n    a[j2] = y0r + y2r;\n    a[j2 + 1] = y0i + y2i;\n    a[j3] = y0r - y2r;\n    a[j3 + 1] = y0i - y2i;\n    j0 = m - j;\n    j1 = j0 + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j0] - a[j2 + 1];\n    x0i = a[j0 + 1] + a[j2];\n    x1r = a[j0] + a[j2 + 1];\n    x1i = a[j0 + 1] - a[j2];\n    x2r = a[j1] - a[j3 + 1];\n    x2i = a[j1 + 1] + a[j3];\n    x3r = a[j1] + a[j3 + 1];\n    x3i = a[j1 + 1] - a[j3];\n    y0r = wd1i * x0r - wd1r * x0i;\n    y0i = wd1i * x0i + wd1r * x0r;\n    y2r = wk1i * x2r - wk1r * x2i;\n    y2i = wk1i * x2i + wk1r * x2r;\n    a[j0] = y0r + y2r;\n    a[j0 + 1] = y0i + y2i;\n    a[j1] = y0r - y2r;\n    a[j1 + 1] = y0i - y2i;\n    y0r = wd3i * x1r + wd3r * x1i;\n    y0i = wd3i * x1i - wd3r * x1r;\n    y2r = wk3i * x3r + wk3r * x3i;\n    y2i = wk3i * x3i - wk3r * x3r;\n    a[j2] = y0r + y2r;\n    a[j2 + 1] = y0i + y2i;\n    a[j3] = y0r - y2r;\n    a[j3 + 1] = y0i - y2i;\n  }\n  wk1r = w[m];\n  wk1i = w[m + 1];\n  j0 = mh;\n  j1 = j0 + m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[j0] - a[j2 + 1];\n  x0i = a[j0 + 1] + a[j2];\n  x1r = a[j0] + a[j2 + 1];\n  x1i = a[j0 + 1] - a[j2];\n  x2r = a[j1] - a[j3 + 1];\n  x2i = a[j1 + 1] + a[j3];\n  x3r = a[j1] + a[j3 + 1];\n  x3i = a[j1 + 1] - a[j3];\n  y0r = wk1r * x0r - wk1i * x0i;\n  y0i = wk1r * x0i + wk1i * x0r;\n  y2r = wk1i * x2r - wk1r * x2i;\n  y2i = wk1i * x2i + wk1r * x2r;\n  a[j0] = y0r + y2r;\n  a[j0 + 1] = y0i + y2i;\n  a[j1] = y0r - y2r;\n  a[j1 + 1] = y0i - y2i;\n  y0r = wk1i * x1r - wk1r * x1i;\n  y0i = wk1i * x1i + wk1r * x1r;\n  y2r = wk1r * x3r - wk1i * x3i;\n  y2i = wk1r * x3i + wk1i * x3r;\n  a[j2] = y0r - y2r;\n  a[j2 + 1] = y0i - y2i;\n  a[j3] = y0r + y2r;\n  a[j3 + 1] = y0i + y2i;\n}\n\nvoid cftfx41(int n, double *a, int nw, double *w) {\n  void cftf161(double *a, double *w);\n  void cftf162(double *a, double *w);\n  void cftf081(double *a, double *w);\n  void cftf082(double *a, double *w);\n\n  if (n == 128) {\n    cftf161(a, &w[nw - 8]);\n    cftf162(&a[32], &w[nw - 32]);\n    cftf161(&a[64], &w[nw - 8]);\n    cftf161(&a[96], &w[nw - 8]);\n  } else {\n    cftf081(a, &w[nw - 8]);\n    cftf082(&a[16], &w[nw - 8]);\n    cftf081(&a[32], &w[nw - 8]);\n    cftf081(&a[48], &w[nw - 8]);\n  }\n}\n\nvoid cftf161(double *a, double *w) {\n  double wn4r, wk1r, wk1i,\n    x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,\n    y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i,\n    y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i,\n    y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i;\n\n  wn4r = w[1];\n  wk1r = w[2];\n  wk1i = w[3];\n  x0r = a[0] + a[16];\n  x0i = a[1] + a[17];\n  x1r = a[0] - a[16];\n  x1i = a[1] - a[17];\n  x2r = a[8] + a[24];\n  x2i = a[9] + a[25];\n  x3r = a[8] - a[24];\n  x3i = a[9] - a[25];\n  y0r = x0r + x2r;\n  y0i = x0i + x2i;\n  y4r = x0r - x2r;\n  y4i = x0i - x2i;\n  y8r = x1r - x3i;\n  y8i = x1i + x3r;\n  y12r = x1r + x3i;\n  y12i = x1i - x3r;\n  x0r = a[2] + a[18];\n  x0i = a[3] + a[19];\n  x1r = a[2] - a[18];\n  x1i = a[3] - a[19];\n  x2r = a[10] + a[26];\n  x2i = a[11] + a[27];\n  x3r = a[10] - a[26];\n  x3i = a[11] - a[27];\n  y1r = x0r + x2r;\n  y1i = x0i + x2i;\n  y5r = x0r - x2r;\n  y5i = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  y9r = wk1r * x0r - wk1i * x0i;\n  y9i = wk1r * x0i + wk1i * x0r;\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  y13r = wk1i * x0r - wk1r * x0i;\n  y13i = wk1i * x0i + wk1r * x0r;\n  x0r = a[4] + a[20];\n  x0i = a[5] + a[21];\n  x1r = a[4] - a[20];\n  x1i = a[5] - a[21];\n  x2r = a[12] + a[28];\n  x2i = a[13] + a[29];\n  x3r = a[12] - a[28];\n  x3i = a[13] - a[29];\n  y2r = x0r + x2r;\n  y2i = x0i + x2i;\n  y6r = x0r - x2r;\n  y6i = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  y10r = wn4r * (x0r - x0i);\n  y10i = wn4r * (x0i + x0r);\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  y14r = wn4r * (x0r + x0i);\n  y14i = wn4r * (x0i - x0r);\n  x0r = a[6] + a[22];\n  x0i = a[7] + a[23];\n  x1r = a[6] - a[22];\n  x1i = a[7] - a[23];\n  x2r = a[14] + a[30];\n  x2i = a[15] + a[31];\n  x3r = a[14] - a[30];\n  x3i = a[15] - a[31];\n  y3r = x0r + x2r;\n  y3i = x0i + x2i;\n  y7r = x0r - x2r;\n  y7i = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  y11r = wk1i * x0r - wk1r * x0i;\n  y11i = wk1i * x0i + wk1r * x0r;\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  y15r = wk1r * x0r - wk1i * x0i;\n  y15i = wk1r * x0i + wk1i * x0r;\n  x0r = y12r - y14r;\n  x0i = y12i - y14i;\n  x1r = y12r + y14r;\n  x1i = y12i + y14i;\n  x2r = y13r - y15r;\n  x2i = y13i - y15i;\n  x3r = y13r + y15r;\n  x3i = y13i + y15i;\n  a[24] = x0r + x2r;\n  a[25] = x0i + x2i;\n  a[26] = x0r - x2r;\n  a[27] = x0i - x2i;\n  a[28] = x1r - x3i;\n  a[29] = x1i + x3r;\n  a[30] = x1r + x3i;\n  a[31] = x1i - x3r;\n  x0r = y8r + y10r;\n  x0i = y8i + y10i;\n  x1r = y8r - y10r;\n  x1i = y8i - y10i;\n  x2r = y9r + y11r;\n  x2i = y9i + y11i;\n  x3r = y9r - y11r;\n  x3i = y9i - y11i;\n  a[16] = x0r + x2r;\n  a[17] = x0i + x2i;\n  a[18] = x0r - x2r;\n  a[19] = x0i - x2i;\n  a[20] = x1r - x3i;\n  a[21] = x1i + x3r;\n  a[22] = x1r + x3i;\n  a[23] = x1i - x3r;\n  x0r = y5r - y7i;\n  x0i = y5i + y7r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  x0r = y5r + y7i;\n  x0i = y5i - y7r;\n  x3r = wn4r * (x0r - x0i);\n  x3i = wn4r * (x0i + x0r);\n  x0r = y4r - y6i;\n  x0i = y4i + y6r;\n  x1r = y4r + y6i;\n  x1i = y4i - y6r;\n  a[8] = x0r + x2r;\n  a[9] = x0i + x2i;\n  a[10] = x0r - x2r;\n  a[11] = x0i - x2i;\n  a[12] = x1r - x3i;\n  a[13] = x1i + x3r;\n  a[14] = x1r + x3i;\n  a[15] = x1i - x3r;\n  x0r = y0r + y2r;\n  x0i = y0i + y2i;\n  x1r = y0r - y2r;\n  x1i = y0i - y2i;\n  x2r = y1r + y3r;\n  x2i = y1i + y3i;\n  x3r = y1r - y3r;\n  x3i = y1i - y3i;\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[2] = x0r - x2r;\n  a[3] = x0i - x2i;\n  a[4] = x1r - x3i;\n  a[5] = x1i + x3r;\n  a[6] = x1r + x3i;\n  a[7] = x1i - x3r;\n}\n\nvoid cftf162(double *a, double *w) {\n  double wn4r, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i,\n    x0r, x0i, x1r, x1i, x2r, x2i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,\n    y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i,\n    y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i,\n    y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i;\n\n  wn4r = w[1];\n  wk1r = w[4];\n  wk1i = w[5];\n  wk3r = w[6];\n  wk3i = -w[7];\n  wk2r = w[8];\n  wk2i = w[9];\n  x1r = a[0] - a[17];\n  x1i = a[1] + a[16];\n  x0r = a[8] - a[25];\n  x0i = a[9] + a[24];\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  y0r = x1r + x2r;\n  y0i = x1i + x2i;\n  y4r = x1r - x2r;\n  y4i = x1i - x2i;\n  x1r = a[0] + a[17];\n  x1i = a[1] - a[16];\n  x0r = a[8] + a[25];\n  x0i = a[9] - a[24];\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  y8r = x1r - x2i;\n  y8i = x1i + x2r;\n  y12r = x1r + x2i;\n  y12i = x1i - x2r;\n  x0r = a[2] - a[19];\n  x0i = a[3] + a[18];\n  x1r = wk1r * x0r - wk1i * x0i;\n  x1i = wk1r * x0i + wk1i * x0r;\n  x0r = a[10] - a[27];\n  x0i = a[11] + a[26];\n  x2r = wk3i * x0r - wk3r * x0i;\n  x2i = wk3i * x0i + wk3r * x0r;\n  y1r = x1r + x2r;\n  y1i = x1i + x2i;\n  y5r = x1r - x2r;\n  y5i = x1i - x2i;\n  x0r = a[2] + a[19];\n  x0i = a[3] - a[18];\n  x1r = wk3r * x0r - wk3i * x0i;\n  x1i = wk3r * x0i + wk3i * x0r;\n  x0r = a[10] + a[27];\n  x0i = a[11] - a[26];\n  x2r = wk1r * x0r + wk1i * x0i;\n  x2i = wk1r * x0i - wk1i * x0r;\n  y9r = x1r - x2r;\n  y9i = x1i - x2i;\n  y13r = x1r + x2r;\n  y13i = x1i + x2i;\n  x0r = a[4] - a[21];\n  x0i = a[5] + a[20];\n  x1r = wk2r * x0r - wk2i * x0i;\n  x1i = wk2r * x0i + wk2i * x0r;\n  x0r = a[12] - a[29];\n  x0i = a[13] + a[28];\n  x2r = wk2i * x0r - wk2r * x0i;\n  x2i = wk2i * x0i + wk2r * x0r;\n  y2r = x1r + x2r;\n  y2i = x1i + x2i;\n  y6r = x1r - x2r;\n  y6i = x1i - x2i;\n  x0r = a[4] + a[21];\n  x0i = a[5] - a[20];\n  x1r = wk2i * x0r - wk2r * x0i;\n  x1i = wk2i * x0i + wk2r * x0r;\n  x0r = a[12] + a[29];\n  x0i = a[13] - a[28];\n  x2r = wk2r * x0r - wk2i * x0i;\n  x2i = wk2r * x0i + wk2i * x0r;\n  y10r = x1r - x2r;\n  y10i = x1i - x2i;\n  y14r = x1r + x2r;\n  y14i = x1i + x2i;\n  x0r = a[6] - a[23];\n  x0i = a[7] + a[22];\n  x1r = wk3r * x0r - wk3i * x0i;\n  x1i = wk3r * x0i + wk3i * x0r;\n  x0r = a[14] - a[31];\n  x0i = a[15] + a[30];\n  x2r = wk1i * x0r - wk1r * x0i;\n  x2i = wk1i * x0i + wk1r * x0r;\n  y3r = x1r + x2r;\n  y3i = x1i + x2i;\n  y7r = x1r - x2r;\n  y7i = x1i - x2i;\n  x0r = a[6] + a[23];\n  x0i = a[7] - a[22];\n  x1r = wk1i * x0r + wk1r * x0i;\n  x1i = wk1i * x0i - wk1r * x0r;\n  x0r = a[14] + a[31];\n  x0i = a[15] - a[30];\n  x2r = wk3i * x0r - wk3r * x0i;\n  x2i = wk3i * x0i + wk3r * x0r;\n  y11r = x1r + x2r;\n  y11i = x1i + x2i;\n  y15r = x1r - x2r;\n  y15i = x1i - x2i;\n  x1r = y0r + y2r;\n  x1i = y0i + y2i;\n  x2r = y1r + y3r;\n  x2i = y1i + y3i;\n  a[0] = x1r + x2r;\n  a[1] = x1i + x2i;\n  a[2] = x1r - x2r;\n  a[3] = x1i - x2i;\n  x1r = y0r - y2r;\n  x1i = y0i - y2i;\n  x2r = y1r - y3r;\n  x2i = y1i - y3i;\n  a[4] = x1r - x2i;\n  a[5] = x1i + x2r;\n  a[6] = x1r + x2i;\n  a[7] = x1i - x2r;\n  x1r = y4r - y6i;\n  x1i = y4i + y6r;\n  x0r = y5r - y7i;\n  x0i = y5i + y7r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  a[8] = x1r + x2r;\n  a[9] = x1i + x2i;\n  a[10] = x1r - x2r;\n  a[11] = x1i - x2i;\n  x1r = y4r + y6i;\n  x1i = y4i - y6r;\n  x0r = y5r + y7i;\n  x0i = y5i - y7r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  a[12] = x1r - x2i;\n  a[13] = x1i + x2r;\n  a[14] = x1r + x2i;\n  a[15] = x1i - x2r;\n  x1r = y8r + y10r;\n  x1i = y8i + y10i;\n  x2r = y9r - y11r;\n  x2i = y9i - y11i;\n  a[16] = x1r + x2r;\n  a[17] = x1i + x2i;\n  a[18] = x1r - x2r;\n  a[19] = x1i - x2i;\n  x1r = y8r - y10r;\n  x1i = y8i - y10i;\n  x2r = y9r + y11r;\n  x2i = y9i + y11i;\n  a[20] = x1r - x2i;\n  a[21] = x1i + x2r;\n  a[22] = x1r + x2i;\n  a[23] = x1i - x2r;\n  x1r = y12r - y14i;\n  x1i = y12i + y14r;\n  x0r = y13r + y15i;\n  x0i = y13i - y15r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  a[24] = x1r + x2r;\n  a[25] = x1i + x2i;\n  a[26] = x1r - x2r;\n  a[27] = x1i - x2i;\n  x1r = y12r + y14i;\n  x1i = y12i - y14r;\n  x0r = y13r - y15i;\n  x0i = y13i + y15r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  a[28] = x1r - x2i;\n  a[29] = x1i + x2r;\n  a[30] = x1r + x2i;\n  a[31] = x1i - x2r;\n}\n\nvoid cftf081(double *a, double *w) {\n  double wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,\n    y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;\n\n  wn4r = w[1];\n  x0r = a[0] + a[8];\n  x0i = a[1] + a[9];\n  x1r = a[0] - a[8];\n  x1i = a[1] - a[9];\n  x2r = a[4] + a[12];\n  x2i = a[5] + a[13];\n  x3r = a[4] - a[12];\n  x3i = a[5] - a[13];\n  y0r = x0r + x2r;\n  y0i = x0i + x2i;\n  y2r = x0r - x2r;\n  y2i = x0i - x2i;\n  y1r = x1r - x3i;\n  y1i = x1i + x3r;\n  y3r = x1r + x3i;\n  y3i = x1i - x3r;\n  x0r = a[2] + a[10];\n  x0i = a[3] + a[11];\n  x1r = a[2] - a[10];\n  x1i = a[3] - a[11];\n  x2r = a[6] + a[14];\n  x2i = a[7] + a[15];\n  x3r = a[6] - a[14];\n  x3i = a[7] - a[15];\n  y4r = x0r + x2r;\n  y4i = x0i + x2i;\n  y6r = x0r - x2r;\n  y6i = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  x2r = x1r + x3i;\n  x2i = x1i - x3r;\n  y5r = wn4r * (x0r - x0i);\n  y5i = wn4r * (x0r + x0i);\n  y7r = wn4r * (x2r - x2i);\n  y7i = wn4r * (x2r + x2i);\n  a[8] = y1r + y5r;\n  a[9] = y1i + y5i;\n  a[10] = y1r - y5r;\n  a[11] = y1i - y5i;\n  a[12] = y3r - y7i;\n  a[13] = y3i + y7r;\n  a[14] = y3r + y7i;\n  a[15] = y3i - y7r;\n  a[0] = y0r + y4r;\n  a[1] = y0i + y4i;\n  a[2] = y0r - y4r;\n  a[3] = y0i - y4i;\n  a[4] = y2r - y6i;\n  a[5] = y2i + y6r;\n  a[6] = y2r + y6i;\n  a[7] = y2i - y6r;\n}\n\nvoid cftf082(double *a, double *w) {\n  double wn4r, wk1r, wk1i, x0r, x0i, x1r, x1i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,\n    y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;\n\n  wn4r = w[1];\n  wk1r = w[2];\n  wk1i = w[3];\n  y0r = a[0] - a[9];\n  y0i = a[1] + a[8];\n  y1r = a[0] + a[9];\n  y1i = a[1] - a[8];\n  x0r = a[4] - a[13];\n  x0i = a[5] + a[12];\n  y2r = wn4r * (x0r - x0i);\n  y2i = wn4r * (x0i + x0r);\n  x0r = a[4] + a[13];\n  x0i = a[5] - a[12];\n  y3r = wn4r * (x0r - x0i);\n  y3i = wn4r * (x0i + x0r);\n  x0r = a[2] - a[11];\n  x0i = a[3] + a[10];\n  y4r = wk1r * x0r - wk1i * x0i;\n  y4i = wk1r * x0i + wk1i * x0r;\n  x0r = a[2] + a[11];\n  x0i = a[3] - a[10];\n  y5r = wk1i * x0r - wk1r * x0i;\n  y5i = wk1i * x0i + wk1r * x0r;\n  x0r = a[6] - a[15];\n  x0i = a[7] + a[14];\n  y6r = wk1i * x0r - wk1r * x0i;\n  y6i = wk1i * x0i + wk1r * x0r;\n  x0r = a[6] + a[15];\n  x0i = a[7] - a[14];\n  y7r = wk1r * x0r - wk1i * x0i;\n  y7i = wk1r * x0i + wk1i * x0r;\n  x0r = y0r + y2r;\n  x0i = y0i + y2i;\n  x1r = y4r + y6r;\n  x1i = y4i + y6i;\n  a[0] = x0r + x1r;\n  a[1] = x0i + x1i;\n  a[2] = x0r - x1r;\n  a[3] = x0i - x1i;\n  x0r = y0r - y2r;\n  x0i = y0i - y2i;\n  x1r = y4r - y6r;\n  x1i = y4i - y6i;\n  a[4] = x0r - x1i;\n  a[5] = x0i + x1r;\n  a[6] = x0r + x1i;\n  a[7] = x0i - x1r;\n  x0r = y1r - y3i;\n  x0i = y1i + y3r;\n  x1r = y5r - y7r;\n  x1i = y5i - y7i;\n  a[8] = x0r + x1r;\n  a[9] = x0i + x1i;\n  a[10] = x0r - x1r;\n  a[11] = x0i - x1i;\n  x0r = y1r + y3i;\n  x0i = y1i - y3r;\n  x1r = y5r + y7r;\n  x1i = y5i + y7i;\n  a[12] = x0r - x1i;\n  a[13] = x0i + x1r;\n  a[14] = x0r + x1i;\n  a[15] = x0i - x1r;\n}\n\n\nvoid cftf040(double *a) {\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;\n\n  x0r = a[0] + a[4];\n  x0i = a[1] + a[5];\n  x1r = a[0] - a[4];\n  x1i = a[1] - a[5];\n  x2r = a[2] + a[6];\n  x2i = a[3] + a[7];\n  x3r = a[2] - a[6];\n  x3i = a[3] - a[7];\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[2] = x1r - x3i;\n  a[3] = x1i + x3r;\n  a[4] = x0r - x2r;\n  a[5] = x0i - x2i;\n  a[6] = x1r + x3i;\n  a[7] = x1i - x3r;\n}\n\nvoid cftb040(double *a) {\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;\n\n  x0r = a[0] + a[4];\n  x0i = a[1] + a[5];\n  x1r = a[0] - a[4];\n  x1i = a[1] - a[5];\n  x2r = a[2] + a[6];\n  x2i = a[3] + a[7];\n  x3r = a[2] - a[6];\n  x3i = a[3] - a[7];\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[2] = x1r + x3i;\n  a[3] = x1i - x3r;\n  a[4] = x0r - x2r;\n  a[5] = x0i - x2i;\n  a[6] = x1r - x3i;\n  a[7] = x1i + x3r;\n}\n\nvoid cftx020(double *a) {\n  double x0r, x0i;\n\n  x0r = a[0] - a[2];\n  x0i = a[1] - a[3];\n  a[0] += a[2];\n  a[1] += a[3];\n  a[2] = x0r;\n  a[3] = x0i;\n}\n\nvoid rftfsub(int n, double *a, int nc, double *c) {\n  int j, k, kk, ks, m;\n  double wkr, wki, xr, xi, yr, yi;\n\n  m = n >> 1;\n  ks = 2 * nc / m;\n  kk = 0;\n  for (j = 2; j < m; j += 2) {\n    k = n - j;\n    kk += ks;\n    wkr = 0.5 - c[nc - kk];\n    wki = c[kk];\n    xr = a[j] - a[k];\n    xi = a[j + 1] + a[k + 1];\n    yr = wkr * xr - wki * xi;\n    yi = wkr * xi + wki * xr;\n    a[j] -= yr;\n    a[j + 1] -= yi;\n    a[k] += yr;\n    a[k + 1] -= yi;\n  }\n}\n\nvoid rftbsub(int n, double *a, int nc, double *c) {\n  int j, k, kk, ks, m;\n  double wkr, wki, xr, xi, yr, yi;\n\n  m = n >> 1;\n  ks = 2 * nc / m;\n  kk = 0;\n  for (j = 2; j < m; j += 2) {\n    k = n - j;\n    kk += ks;\n    wkr = 0.5 - c[nc - kk];\n    wki = c[kk];\n    xr = a[j] - a[k];\n    xi = a[j + 1] + a[k + 1];\n    yr = wkr * xr + wki * xi;\n    yi = wkr * xi - wki * xr;\n    a[j] -= yr;\n    a[j + 1] -= yi;\n    a[k] += yr;\n    a[k + 1] -= yi;\n  }\n}\n\nvoid dctsub(int n, double *a, int nc, double *c) {\n  int j, k, kk, ks, m;\n  double wkr, wki, xr;\n\n  m = n >> 1;\n  ks = nc / n;\n  kk = 0;\n  for (j = 1; j < m; j++) {\n    k = n - j;\n    kk += ks;\n    wkr = c[kk] - c[nc - kk];\n    wki = c[kk] + c[nc - kk];\n    xr = wki * a[j] - wkr * a[k];\n    a[j] = wkr * a[j] + wki * a[k];\n    a[k] = xr;\n  }\n  a[m] *= c[0];\n}\n\nvoid dstsub(int n, double *a, int nc, double *c) {\n  int j, k, kk, ks, m;\n  double wkr, wki, xr;\n\n  m = n >> 1;\n  ks = nc / n;\n  kk = 0;\n  for (j = 1; j < m; j++) {\n    k = n - j;\n    kk += ks;\n    wkr = c[kk] - c[nc - kk];\n    wki = c[kk] + c[nc - kk];\n    xr = wki * a[k] - wkr * a[j];\n    a[k] = wkr * a[k] + wki * a[j];\n    a[j] = xr;\n  }\n  a[m] *= c[0];\n}\n\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/harvest.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// F0 estimation based on Harvest.\n//-----------------------------------------------------------------------------\n#include \"world/harvest.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/fft.h\"\n#include \"world/matlabfunctions.h\"\n\n//-----------------------------------------------------------------------------\n// struct for RawEventByHarvest()\n// \"negative\" means \"zero-crossing point going from positive to negative\"\n// \"positive\" means \"zero-crossing point going from negative to positive\"\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double *negative_interval_locations;\n  double *negative_intervals;\n  int number_of_negatives;\n  double *positive_interval_locations;\n  double *positive_intervals;\n  int number_of_positives;\n  double *peak_interval_locations;\n  double *peak_intervals;\n  int number_of_peaks;\n  double *dip_interval_locations;\n  double *dip_intervals;\n  int number_of_dips;\n} ZeroCrossings;\n\nnamespace {\n//-----------------------------------------------------------------------------\n// Since the waveform of beginning and ending after decimate include noise,\n// the input waveform is extended. This is the processing for the\n// compatibility with MATLAB version.\n//-----------------------------------------------------------------------------\nstatic void GetWaveformAndSpectrumSub(const double *x, int x_length,\n    int y_length, double actual_fs, int decimation_ratio, double *y) {\n  if (decimation_ratio == 1) {\n    for (int i = 0; i < x_length; ++i) y[i] = x[i];\n    return;\n  }\n\n  int lag =\n    static_cast<int>(ceil(140.0 / decimation_ratio) * decimation_ratio);\n  int new_x_length = x_length + lag * 2;\n  double *new_y = new double[new_x_length];\n  for (int i = 0; i < new_x_length; ++i) new_y[i] = 0.0;\n  double *new_x = new double[new_x_length];\n  for (int i = 0; i < lag; ++i) new_x[i] = x[0];\n  for (int i = lag; i < lag + x_length; ++i) new_x[i] = x[i - lag];\n  for (int i = lag + x_length; i < new_x_length; ++i)\n    new_x[i] = x[x_length - 1];\n\n  decimate(new_x, new_x_length, decimation_ratio, new_y);\n  for (int i = 0; i < y_length; ++i) y[i] = new_y[lag / decimation_ratio + i];\n\n  delete[] new_x;\n  delete[] new_y;\n}\n\n//-----------------------------------------------------------------------------\n// GetWaveformAndSpectrum() calculates the downsampled signal and its spectrum\n//-----------------------------------------------------------------------------\nstatic void GetWaveformAndSpectrum(const double *x, int x_length,\n    int y_length, double actual_fs, int fft_size, int decimation_ratio,\n    double *y, fft_complex *y_spectrum) {\n  // Initialization\n  for (int i = 0; i < fft_size; ++i) y[i] = 0.0;\n\n  // Processing for the compatibility with MATLAB version\n  GetWaveformAndSpectrumSub(x, x_length, y_length, actual_fs,\n      decimation_ratio, y);\n\n  // Removal of the DC component (y = y - mean value of y)\n  double mean_y = 0.0;\n  for (int i = 0; i < y_length; ++i) mean_y += y[i];\n  mean_y /= y_length;\n  for (int i = 0; i < y_length; ++i) y[i] -= mean_y;\n  for (int i = y_length; i < fft_size; ++i) y[i] = 0.0;\n\n  fft_plan forwardFFT =\n    fft_plan_dft_r2c_1d(fft_size, y, y_spectrum, FFT_ESTIMATE);\n  fft_execute(forwardFFT);\n\n  fft_destroy_plan(forwardFFT);\n}\n\n//-----------------------------------------------------------------------------\n// GetFilteredSignal() calculates the signal that is the convolution of the\n// input signal and band-pass filter.\n//-----------------------------------------------------------------------------\nstatic void GetFilteredSignal(double boundary_f0, int fft_size, double fs,\n    const fft_complex *y_spectrum, int y_length, double *filtered_signal) {\n  int filter_length_half = matlab_round(fs / boundary_f0 * 2.0);\n  double *band_pass_filter = new double[fft_size];\n  NuttallWindow(filter_length_half * 2 + 1, band_pass_filter);\n  for (int i = -filter_length_half; i <= filter_length_half; ++i)\n    band_pass_filter[i + filter_length_half] *=\n      cos(2 * world::kPi * boundary_f0 * i / fs);\n  for (int i = filter_length_half * 2 + 1; i < fft_size; ++i)\n    band_pass_filter[i] = 0.0;\n\n  fft_complex *band_pass_filter_spectrum = new fft_complex[fft_size];\n  fft_plan forwardFFT = fft_plan_dft_r2c_1d(fft_size, band_pass_filter,\n    band_pass_filter_spectrum, FFT_ESTIMATE);\n  fft_execute(forwardFFT);\n\n  // Convolution\n  double tmp = y_spectrum[0][0] * band_pass_filter_spectrum[0][0] -\n    y_spectrum[0][1] * band_pass_filter_spectrum[0][1];\n  band_pass_filter_spectrum[0][1] =\n    y_spectrum[0][0] * band_pass_filter_spectrum[0][1] +\n    y_spectrum[0][1] * band_pass_filter_spectrum[0][0];\n  band_pass_filter_spectrum[0][0] = tmp;\n  for (int i = 1; i <= fft_size / 2; ++i) {\n    tmp = y_spectrum[i][0] * band_pass_filter_spectrum[i][0] -\n      y_spectrum[i][1] * band_pass_filter_spectrum[i][1];\n    band_pass_filter_spectrum[i][1] =\n      y_spectrum[i][0] * band_pass_filter_spectrum[i][1] +\n      y_spectrum[i][1] * band_pass_filter_spectrum[i][0];\n    band_pass_filter_spectrum[i][0] = tmp;\n    band_pass_filter_spectrum[fft_size - i - 1][0] =\n      band_pass_filter_spectrum[i][0];\n    band_pass_filter_spectrum[fft_size - i - 1][1] =\n      band_pass_filter_spectrum[i][1];\n  }\n\n  fft_plan inverseFFT = fft_plan_dft_c2r_1d(fft_size,\n    band_pass_filter_spectrum, filtered_signal, FFT_ESTIMATE);\n  fft_execute(inverseFFT);\n\n  // Compensation of the delay.\n  int index_bias = filter_length_half + 1;\n  for (int i = 0; i < y_length; ++i)\n    filtered_signal[i] = filtered_signal[i + index_bias];\n\n  fft_destroy_plan(inverseFFT);\n  fft_destroy_plan(forwardFFT);\n  delete[] band_pass_filter_spectrum;\n  delete[] band_pass_filter;\n}\n\n//-----------------------------------------------------------------------------\n// CheckEvent() returns 1, provided that the input value is over 1.\n// This function is for RawEventByDio().\n//-----------------------------------------------------------------------------\nstatic inline int CheckEvent(int x) {\n  return x > 0 ? 1 : 0;\n}\n\n//-----------------------------------------------------------------------------\n// ZeroCrossingEngine() calculates the zero crossing points from positive to\n// negative.\n//-----------------------------------------------------------------------------\nstatic int ZeroCrossingEngine(const double *filtered_signal, int y_length,\n    double fs, double *interval_locations, double *intervals) {\n  int *negative_going_points = new int[y_length];\n\n  for (int i = 0; i < y_length - 1; ++i)\n    negative_going_points[i] =\n      0.0 < filtered_signal[i] && filtered_signal[i + 1] <= 0.0 ? i + 1 : 0;\n  negative_going_points[y_length - 1] = 0;\n\n  int *edges = new int[y_length];\n  int count = 0;\n  for (int i = 0; i < y_length; ++i)\n    if (negative_going_points[i] > 0)\n      edges[count++] = negative_going_points[i];\n\n  if (count < 2) {\n    delete[] edges;\n    delete[] negative_going_points;\n    return 0;\n  }\n\n  double *fine_edges = new double[count];\n  for (int i = 0; i < count; ++i)\n    fine_edges[i] = edges[i] - filtered_signal[edges[i] - 1] /\n      (filtered_signal[edges[i]] - filtered_signal[edges[i] - 1]);\n\n  for (int i = 0; i < count - 1; ++i) {\n    intervals[i] = fs / (fine_edges[i + 1] - fine_edges[i]);\n    interval_locations[i] = (fine_edges[i] + fine_edges[i + 1]) / 2.0 / fs;\n  }\n\n  delete[] fine_edges;\n  delete[] edges;\n  delete[] negative_going_points;\n  return count - 1;\n}\n\n//-----------------------------------------------------------------------------\n// GetFourZeroCrossingIntervals() calculates four zero-crossing intervals.\n// (1) Zero-crossing going from negative to positive.\n// (2) Zero-crossing going from positive to negative.\n// (3) Peak, and (4) dip. (3) and (4) are calculated from the zero-crossings of\n// the differential of waveform.\n//-----------------------------------------------------------------------------\nstatic void GetFourZeroCrossingIntervals(double *filtered_signal, int y_length,\n    double actual_fs, ZeroCrossings *zero_crossings) {\n  int maximum_number = y_length;\n  zero_crossings->negative_interval_locations = new double[maximum_number];\n  zero_crossings->positive_interval_locations = new double[maximum_number];\n  zero_crossings->peak_interval_locations = new double[maximum_number];\n  zero_crossings->dip_interval_locations = new double[maximum_number];\n  zero_crossings->negative_intervals = new double[maximum_number];\n  zero_crossings->positive_intervals = new double[maximum_number];\n  zero_crossings->peak_intervals = new double[maximum_number];\n  zero_crossings->dip_intervals = new double[maximum_number];\n\n  zero_crossings->number_of_negatives = ZeroCrossingEngine(filtered_signal,\n      y_length, actual_fs, zero_crossings->negative_interval_locations,\n      zero_crossings->negative_intervals);\n\n  for (int i = 0; i < y_length; ++i) filtered_signal[i] = -filtered_signal[i];\n  zero_crossings->number_of_positives = ZeroCrossingEngine(filtered_signal,\n      y_length, actual_fs, zero_crossings->positive_interval_locations,\n      zero_crossings->positive_intervals);\n\n  for (int i = 0; i < y_length - 1; ++i) filtered_signal[i] =\n    filtered_signal[i] - filtered_signal[i + 1];\n  zero_crossings->number_of_peaks = ZeroCrossingEngine(filtered_signal,\n      y_length - 1, actual_fs, zero_crossings->peak_interval_locations,\n      zero_crossings->peak_intervals);\n\n  for (int i = 0; i < y_length - 1; ++i)\n    filtered_signal[i] = -filtered_signal[i];\n  zero_crossings->number_of_dips = ZeroCrossingEngine(filtered_signal,\n      y_length - 1, actual_fs, zero_crossings->dip_interval_locations,\n      zero_crossings->dip_intervals);\n}\n\nstatic void GetF0CandidateContourSub(const double * const *interpolated_f0_set,\n    int f0_length, double f0_floor, double f0_ceil, double boundary_f0,\n    double *f0_candidate) {\n  double upper = boundary_f0 * 1.1;\n  double lower = boundary_f0 * 0.9;\n  for (int i = 0; i < f0_length; ++i) {\n    f0_candidate[i] = (interpolated_f0_set[0][i] +\n      interpolated_f0_set[1][i] + interpolated_f0_set[2][i] +\n      interpolated_f0_set[3][i]) / 4.0;\n\n    if (f0_candidate[i] > upper || f0_candidate[i] < lower ||\n        f0_candidate[i] > f0_ceil || f0_candidate[i] < f0_floor)\n      f0_candidate[i] = 0.0;\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateContour() calculates the F0 candidate contour in 1-ch signal.\n// Calculation of F0 candidates is carried out in GetF0CandidatesSub().\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateContour(const ZeroCrossings *zero_crossings,\n    double boundary_f0, double f0_floor, double f0_ceil,\n    const double *temporal_positions, int f0_length, double *f0_candidate) {\n  if (0 == CheckEvent(zero_crossings->number_of_negatives - 2) *\n      CheckEvent(zero_crossings->number_of_positives - 2) *\n      CheckEvent(zero_crossings->number_of_peaks - 2) *\n      CheckEvent(zero_crossings->number_of_dips - 2)) {\n    for (int i = 0; i < f0_length; ++i) f0_candidate[i] = 0.0;\n    return;\n  }\n\n  double *interpolated_f0_set[4];\n  for (int i = 0; i < 4; ++i)\n    interpolated_f0_set[i] = new double[f0_length];\n\n  interp1(zero_crossings->negative_interval_locations,\n      zero_crossings->negative_intervals,\n      zero_crossings->number_of_negatives,\n      temporal_positions, f0_length, interpolated_f0_set[0]);\n  interp1(zero_crossings->positive_interval_locations,\n      zero_crossings->positive_intervals,\n      zero_crossings->number_of_positives,\n      temporal_positions, f0_length, interpolated_f0_set[1]);\n  interp1(zero_crossings->peak_interval_locations,\n      zero_crossings->peak_intervals, zero_crossings->number_of_peaks,\n      temporal_positions, f0_length, interpolated_f0_set[2]);\n  interp1(zero_crossings->dip_interval_locations,\n      zero_crossings->dip_intervals, zero_crossings->number_of_dips,\n      temporal_positions, f0_length, interpolated_f0_set[3]);\n\n  GetF0CandidateContourSub(interpolated_f0_set, f0_length, f0_floor,\n      f0_ceil, boundary_f0, f0_candidate);\n  for (int i = 0; i < 4; ++i) delete[] interpolated_f0_set[i];\n}\n\n//-----------------------------------------------------------------------------\n// DestroyZeroCrossings() frees the memory of array in the struct\n//-----------------------------------------------------------------------------\nstatic void DestroyZeroCrossings(ZeroCrossings *zero_crossings) {\n  delete[] zero_crossings->negative_interval_locations;\n  delete[] zero_crossings->positive_interval_locations;\n  delete[] zero_crossings->peak_interval_locations;\n  delete[] zero_crossings->dip_interval_locations;\n  delete[] zero_crossings->negative_intervals;\n  delete[] zero_crossings->positive_intervals;\n  delete[] zero_crossings->peak_intervals;\n  delete[] zero_crossings->dip_intervals;\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateFromRawEvent() f0 candidate contour in 1-ch signal\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateFromRawEvent(double boundary_f0, double fs,\n    const fft_complex *y_spectrum, int y_length, int fft_size, double f0_floor,\n    double f0_ceil, const double *temporal_positions, int f0_length,\n    double *f0_candidate) {\n  double *filtered_signal = new double[fft_size];\n  GetFilteredSignal(boundary_f0, fft_size, fs, y_spectrum,\n      y_length, filtered_signal);\n\n  ZeroCrossings zero_crossings = { 0 };\n  GetFourZeroCrossingIntervals(filtered_signal, y_length, fs,\n      &zero_crossings);\n\n  GetF0CandidateContour(&zero_crossings, boundary_f0, f0_floor, f0_ceil,\n      temporal_positions, f0_length, f0_candidate);\n\n  DestroyZeroCrossings(&zero_crossings);\n  delete[] filtered_signal;\n}\n\n//-----------------------------------------------------------------------------\n// GetRawF0Candidates() calculates f0 candidates in all channels.\n//-----------------------------------------------------------------------------\nstatic void GetRawF0Candidates(const double *boundary_f0_list,\n    int number_of_bands, double actual_fs, int y_length,\n    const double *temporal_positions, int f0_length,\n    const fft_complex *y_spectrum, int fft_size, double f0_floor,\n    double f0_ceil, double **raw_f0_candidates) {\n  for (int i = 0; i < number_of_bands; ++i)\n    GetF0CandidateFromRawEvent(boundary_f0_list[i], actual_fs, y_spectrum,\n        y_length, fft_size, f0_floor, f0_ceil, temporal_positions, f0_length,\n        raw_f0_candidates[i]);\n}\n\n//-----------------------------------------------------------------------------\n// DetectF0CandidatesSub1() calculates VUV areas.\n//-----------------------------------------------------------------------------\nstatic int DetectOfficialF0CandidatesSub1(const int *vuv,\n    int number_of_channels, int *st, int *ed) {\n  int number_of_voiced_sections = 0;\n  int tmp;\n  for (int i = 1; i < number_of_channels; ++i) {\n    tmp = vuv[i] - vuv[i - 1];\n    if (tmp == 1) st[number_of_voiced_sections] = i;\n    if (tmp == -1) ed[number_of_voiced_sections++] = i;\n  }\n\n  return number_of_voiced_sections;\n}\n\n//-----------------------------------------------------------------------------\n// DetectOfficialF0CandidatesSub2() calculates F0 candidates in a frame\n//-----------------------------------------------------------------------------\nstatic int DetectOfficialF0CandidatesSub2(const int *vuv,\n    const double * const *raw_f0_candidates, int index,\n    int number_of_voiced_sections, const int *st, const int *ed,\n    int max_candidates, double *f0_list) {\n  int number_of_candidates = 0;\n  double tmp_f0;\n  for (int i = 0; i < number_of_voiced_sections; ++i) {\n    if (ed[i] - st[i] < 10) continue;\n\n    tmp_f0 = 0.0;\n    for (int j = st[i]; j < ed[i]; ++j)\n      tmp_f0 += raw_f0_candidates[j][index];\n    tmp_f0 /= (ed[i] - st[i]);\n    f0_list[number_of_candidates++] = tmp_f0;\n  }\n\n  for (int i = number_of_candidates; i < max_candidates; ++i) f0_list[i] = 0.0;\n  return number_of_candidates;\n}\n\n//-----------------------------------------------------------------------------\n// DetectOfficialF0Candidates() detectes F0 candidates from multi-channel\n// candidates.\n//-----------------------------------------------------------------------------\nstatic int DetectOfficialF0Candidates(const double * const * raw_f0_candidates,\n    int number_of_channels, int f0_length, int max_candidates,\n    double **f0_candidates) {\n  int number_of_candidates = 0;\n\n  int *vuv = new int[number_of_channels];\n  int *st = new int[number_of_channels];\n  int *ed = new int[number_of_channels];\n  int number_of_voiced_sections;\n  for (int i = 0; i < f0_length; ++i) {\n    for (int j = 0; j < number_of_channels; ++j)\n      vuv[j] = raw_f0_candidates[j][i] > 0 ? 1 : 0;\n    vuv[0] = vuv[number_of_channels - 1] = 0;\n    number_of_voiced_sections = DetectOfficialF0CandidatesSub1(vuv,\n      number_of_channels, st, ed);\n    number_of_candidates = MyMaxInt(number_of_candidates,\n      DetectOfficialF0CandidatesSub2(vuv, raw_f0_candidates, i,\n        number_of_voiced_sections, st, ed, max_candidates, f0_candidates[i]));\n  }\n\n  delete[] vuv;\n  delete[] st;\n  delete[] ed;\n  return number_of_candidates;\n}\n\n//-----------------------------------------------------------------------------\n// OverlapF0Candidates() spreads the candidates to anteroposterior frames.\n//-----------------------------------------------------------------------------\nstatic void OverlapF0Candidates(int f0_length, int number_of_candidates,\n    double **f0_candidates) {\n  int n = 3;\n  for (int i = 1; i <= n; ++i)\n    for (int j = 0; j < number_of_candidates; ++j) {\n      for (int k = i; k < f0_length; ++k)\n        f0_candidates[k][j + (number_of_candidates * i)] =\n          f0_candidates[k - i][j];\n      for (int k = 0; k < f0_length - i; ++k)\n        f0_candidates[k][j + (number_of_candidates * (i + n))] =\n          f0_candidates[k + i][j];\n    }\n}\n\n//-----------------------------------------------------------------------------\n// GetBaseIndex() calculates the temporal positions for windowing.\n//-----------------------------------------------------------------------------\nstatic void GetBaseIndex(double current_position, const double *base_time,\n    int base_time_length, double fs, int *base_index) {\n  // First-aid treatment\n  int basic_index =\n    matlab_round((current_position + base_time[0]) * fs + 0.001);\n\n  for (int i = 0; i < base_time_length; ++i) base_index[i] = basic_index + i;\n}\n\n//-----------------------------------------------------------------------------\n// GetMainWindow() generates the window function.\n//-----------------------------------------------------------------------------\nstatic void GetMainWindow(double current_position, const int *base_index,\n    int base_time_length, double fs, double window_length_in_time,\n    double *main_window) {\n  double tmp = 0.0;\n  for (int i = 0; i < base_time_length; ++i) {\n    tmp = (base_index[i] - 1.0) / fs - current_position;\n    main_window[i] = 0.42 +\n      0.5 * cos(2.0 * world::kPi * tmp / window_length_in_time) +\n      0.08 * cos(4.0 * world::kPi * tmp / window_length_in_time);\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetDiffWindow() generates the differentiated window.\n// Diff means differential.\n//-----------------------------------------------------------------------------\nstatic void GetDiffWindow(const double *main_window, int base_time_length,\n    double *diff_window) {\n  diff_window[0] = -main_window[1] / 2.0;\n  for (int i = 1; i < base_time_length - 1; ++i)\n    diff_window[i] = -(main_window[i + 1] - main_window[i - 1]) / 2.0;\n  diff_window[base_time_length - 1] = main_window[base_time_length - 2] / 2.0;\n}\n\n//-----------------------------------------------------------------------------\n// GetSpectra() calculates two spectra of the waveform windowed by windows\n// (main window and diff window).\n//-----------------------------------------------------------------------------\nstatic void GetSpectra(const double *x, int x_length, int fft_size,\n    const int *base_index, const double *main_window,\n    const double *diff_window, int base_time_length,\n    const ForwardRealFFT *forward_real_fft, fft_complex *main_spectrum,\n    fft_complex *diff_spectrum) {\n  int *safe_index = new int[base_time_length];\n\n  for (int i = 0; i < base_time_length; ++i)\n    safe_index[i] = MyMaxInt(0, MyMinInt(x_length - 1, base_index[i] - 1));\n  for (int i = 0; i < base_time_length; ++i)\n    forward_real_fft->waveform[i] = x[safe_index[i]] * main_window[i];\n  for (int i = base_time_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    main_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    main_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  for (int i = 0; i < base_time_length; ++i)\n    forward_real_fft->waveform[i] = x[safe_index[i]] * diff_window[i];\n  for (int i = base_time_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    diff_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    diff_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  delete[] safe_index;\n}\n\nstatic void FixF0(const double *power_spectrum, const double *numerator_i,\n    int fft_size, double fs, double current_f0, int number_of_harmonics,\n    double *refined_f0, double *score) {\n  double *amplitude_list = new double[number_of_harmonics];\n  double *instantaneous_frequency_list = new double[number_of_harmonics];\n\n  int index;\n  for (int i = 0; i < number_of_harmonics; ++i) {\n    index = matlab_round(current_f0 * fft_size / fs * (i + 1));\n    instantaneous_frequency_list[i] = power_spectrum[index] == 0.0 ? 0.0 :\n      static_cast<double>(index) * fs / fft_size +\n      numerator_i[index] / power_spectrum[index] * fs / 2.0 / world::kPi;\n    amplitude_list[i] = sqrt(power_spectrum[index]);\n  }\n  double denominator = 0.0;\n  double numerator = 0.0;\n  *score = 0.0;\n  for (int i = 0; i < number_of_harmonics; ++i) {\n    numerator += amplitude_list[i] * instantaneous_frequency_list[i];\n    denominator += amplitude_list[i] * (i + 1.0);\n    *score += fabs((instantaneous_frequency_list[i] / (i + 1.0) - current_f0) /\n      current_f0);\n  }\n\n  *refined_f0 = numerator / (denominator + world::kMySafeGuardMinimum);\n  *score = 1.0 / (*score / number_of_harmonics + world::kMySafeGuardMinimum);\n\n  delete[] amplitude_list;\n  delete[] instantaneous_frequency_list;\n}\n\n//-----------------------------------------------------------------------------\n// GetMeanF0() calculates the instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic void GetMeanF0(const double *x, int x_length, double fs,\n    double current_position, double current_f0, int fft_size,\n    double window_length_in_time, const double *base_time,\n    int base_time_length, double *refined_f0, double *refined_score) {\n  ForwardRealFFT forward_real_fft = { 0 };\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n  fft_complex *main_spectrum = new fft_complex[fft_size];\n  fft_complex *diff_spectrum = new fft_complex[fft_size];\n\n  int *base_index = new int[base_time_length];\n  double *main_window = new double[base_time_length];\n  double *diff_window = new double[base_time_length];\n\n  GetBaseIndex(current_position, base_time, base_time_length, fs, base_index);\n  GetMainWindow(current_position, base_index, base_time_length, fs,\n      window_length_in_time, main_window);\n  GetDiffWindow(main_window, base_time_length, diff_window);\n\n  GetSpectra(x, x_length, fft_size, base_index, main_window, diff_window,\n      base_time_length, &forward_real_fft, main_spectrum, diff_spectrum);\n\n  double *power_spectrum = new double[fft_size / 2 + 1];\n  double *numerator_i = new double[fft_size / 2 + 1];\n  for (int j = 0; j <= fft_size / 2; ++j) {\n    numerator_i[j] = main_spectrum[j][0] * diff_spectrum[j][1] -\n      main_spectrum[j][1] * diff_spectrum[j][0];\n    power_spectrum[j] = main_spectrum[j][0] * main_spectrum[j][0] +\n      main_spectrum[j][1] * main_spectrum[j][1];\n  }\n\n  int number_of_harmonics =\n    MyMinInt(static_cast<int>(fs / 2.0 / current_f0), 6);\n  FixF0(power_spectrum, numerator_i, fft_size, fs, current_f0,\n      number_of_harmonics, refined_f0, refined_score);\n\n  delete[] diff_spectrum;\n  delete[] diff_window;\n  delete[] main_window;\n  delete[] base_index;\n  delete[] numerator_i;\n  delete[] power_spectrum;\n  delete[] main_spectrum;\n  DestroyForwardRealFFT(&forward_real_fft);\n}\n\n//-----------------------------------------------------------------------------\n// GetRefinedF0() calculates F0 and its score based on instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic void GetRefinedF0(const double *x, int x_length, double fs,\n    double current_position, double current_f0, double f0_floor, double f0_ceil,\n    double *refined_f0, double *refined_score) {\n  if (current_f0 <= 0.0) {\n    *refined_f0 = 0.0;\n    *refined_score = 0.0;\n    return;\n  }\n\n  int half_window_length = static_cast<int>(1.5 * fs / current_f0 + 1.0);\n  double window_length_in_time = (2.0 * half_window_length + 1.0) / fs;\n  double *base_time = new double[half_window_length * 2 + 1];\n  for (int i = 0; i < half_window_length * 2 + 1; i++)\n    base_time[i] = (-half_window_length + i) / fs;\n  int fft_size = static_cast<int>(pow(2.0, 2.0 +\n    static_cast<int>(log(half_window_length * 2.0 + 1.0) / world::kLog2)));\n\n  GetMeanF0(x, x_length, fs, current_position, current_f0, fft_size,\n      window_length_in_time, base_time, half_window_length * 2 + 1,\n      refined_f0, refined_score);\n\n  if (*refined_f0 < f0_floor || *refined_f0 > f0_ceil ||\n      *refined_score < 2.5) {\n    *refined_f0 = 0.0;\n    *refined_score = 0.0;\n  }\n\n  delete[] base_time;\n}\n\n//-----------------------------------------------------------------------------\n// RefineF0() modifies the F0 by instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic void RefineF0Candidates(const double *x, int x_length, double fs,\n    const double *temporal_positions, int f0_length, int max_candidates,\n    double f0_floor, double f0_ceil,\n    double **refined_f0_candidates, double **f0_scores) {\n  for (int i = 0; i < f0_length; i++)\n    for (int j = 0; j < max_candidates; ++j)\n      GetRefinedF0(x, x_length, fs, temporal_positions[i],\n          refined_f0_candidates[i][j], f0_floor, f0_ceil,\n          &refined_f0_candidates[i][j], &f0_scores[i][j]);\n}\n\n//-----------------------------------------------------------------------------\n// SelectBestF0() obtains the nearlest F0 in reference_f0.\n//-----------------------------------------------------------------------------\nstatic double SelectBestF0(double reference_f0, const double *f0_candidates,\n    int number_of_candidates, double allowed_range, double *best_error) {\n  double best_f0 = 0.0;\n  *best_error = allowed_range;\n\n  double tmp;\n  for (int i = 0; i < number_of_candidates; ++i) {\n    tmp = fabs(reference_f0 - f0_candidates[i]) / reference_f0;\n    if (tmp > *best_error) continue;\n    best_f0 = f0_candidates[i];\n    *best_error = tmp;\n  }\n\n  return best_f0;\n}\n\nstatic void RemoveUnreliableCandidatesSub(int i, int j,\n    const double * const *tmp_f0_candidates, int number_of_candidates,\n    double **f0_candidates, double **f0_scores) {\n  double reference_f0 = f0_candidates[i][j];\n  double error1, error2, min_error;\n  double threshold = 0.05;\n  if (reference_f0 == 0) return;\n  SelectBestF0(reference_f0, tmp_f0_candidates[i + 1],\n      number_of_candidates, 1.0, &error1);\n  SelectBestF0(reference_f0, tmp_f0_candidates[i - 1],\n      number_of_candidates, 1.0, &error2);\n  min_error = MyMinDouble(error1, error2);\n  if (min_error <= threshold) return;\n  f0_candidates[i][j] = 0;\n  f0_scores[i][j] = 0;\n}\n\n//-----------------------------------------------------------------------------\n// RemoveUnreliableCandidates().\n//-----------------------------------------------------------------------------\nstatic void RemoveUnreliableCandidates(int f0_length, int number_of_candidates,\n    double **f0_candidates, double **f0_scores) {\n  double **tmp_f0_candidates = new double *[f0_length];\n  for (int i = 0; i < f0_length; ++i)\n    tmp_f0_candidates[i] = new double[number_of_candidates];\n  for (int i = 0; i < f0_length; ++i)\n    for (int j = 0; j < number_of_candidates; ++j)\n      tmp_f0_candidates[i][j] = f0_candidates[i][j];\n\n  for (int i = 1; i < f0_length - 1; ++i)\n    for (int j = 0; j < number_of_candidates; ++j)\n      RemoveUnreliableCandidatesSub(i, j, tmp_f0_candidates,\n          number_of_candidates, f0_candidates, f0_scores);\n\n  for (int i = 0; i < f0_length; ++i) delete[] tmp_f0_candidates[i];\n  delete[] tmp_f0_candidates;\n}\n\n//-----------------------------------------------------------------------------\n// SearchF0Base() gets the F0 with the highest score.\n//-----------------------------------------------------------------------------\nstatic void SearchF0Base(const double * const *f0_candidates,\n    const double * const *f0_scores, int f0_length, int number_of_candidates,\n    double *base_f0_contour) {\n  double tmp_best_score;\n  for (int i = 0; i < f0_length; ++i) {\n    base_f0_contour[i] = tmp_best_score = 0.0;\n    for (int j = 0; j < number_of_candidates; ++j)\n      if (f0_scores[i][j] > tmp_best_score) {\n        base_f0_contour[i] = f0_candidates[i][j];\n        tmp_best_score = f0_scores[i][j];\n      }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// Step 1: Rapid change of F0 contour is replaced by 0.\n//-----------------------------------------------------------------------------\nstatic void FixStep1(const double *f0_base, int f0_length,\n    double allowed_range, double *f0_step1) {\n  for (int i = 0; i < f0_length; ++i) f0_step1[i] = 0.0;\n  double reference_f0;\n  for (int i = 2; i < f0_length; ++i) {\n    if (f0_base[i] == 0.0) continue;\n    reference_f0 = f0_base[i - 1] * 2 - f0_base[i - 2];\n    f0_step1[i] =\n      fabs((f0_base[i] - reference_f0) / reference_f0) > allowed_range &&\n      fabs((f0_base[i] - f0_base[i - 1])) / f0_base[i - 1] > allowed_range ?\n      0.0 : f0_base[i];\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetBoundaryList() detects boundaries between voiced and unvoiced sections.\n//-----------------------------------------------------------------------------\nstatic int GetBoundaryList(const double *f0, int f0_length,\n    int *boundary_list) {\n  int number_of_boundaries = 0;\n  int *vuv = new int[f0_length];\n  for (int i = 0; i < f0_length; ++i)\n    vuv[i] = f0[i] > 0 ? 1 : 0;\n  vuv[0] = vuv[f0_length - 1] = 0;\n\n  for (int i = 1; i < f0_length; ++i)\n    if (vuv[i] - vuv[i - 1] != 0) {\n      boundary_list[number_of_boundaries] = i - number_of_boundaries % 2;\n      number_of_boundaries++;\n    }\n\n  delete[] vuv;\n  return number_of_boundaries;\n}\n\n//-----------------------------------------------------------------------------\n// Step 2: Voiced sections with a short period are removed.\n//-----------------------------------------------------------------------------\nstatic void FixStep2(const double *f0_step1, int f0_length,\n    int voice_range_minimum, double *f0_step2) {\n  for (int i = 0; i < f0_length; ++i) f0_step2[i] = f0_step1[i];\n  int *boundary_list = new int[f0_length];\n  int number_of_boundaries =\n    GetBoundaryList(f0_step1, f0_length, boundary_list);\n\n  for (int i = 0; i < number_of_boundaries / 2; ++i) {\n    if (boundary_list[i * 2 + 1] - boundary_list[i * 2] >= voice_range_minimum)\n      continue;\n    for (int j = boundary_list[i * 2]; j <= boundary_list[(i * 2) + 1]; ++j)\n      f0_step2[j] = 0.0;\n  }\n  delete[] boundary_list;\n}\n\n//-----------------------------------------------------------------------------\n// GetMultiChannelF0() separates each voiced section into independent channel.\n//-----------------------------------------------------------------------------\nstatic void GetMultiChannelF0(const double *f0, int f0_length,\n    const int *boundary_list, int number_of_boundaries,\n    double **multi_channel_f0) {\n  for (int i = 0; i < number_of_boundaries / 2; ++i) {\n    for (int j = 0; j < boundary_list[i * 2]; ++j)\n      multi_channel_f0[i][j] = 0.0;\n    for (int j = boundary_list[i * 2]; j <= boundary_list[i * 2 + 1]; ++j)\n      multi_channel_f0[i][j] = f0[j];\n    for (int j = boundary_list[i * 2 + 1] + 1; j < f0_length; ++j)\n      multi_channel_f0[i][j] = 0.0;\n  }\n}\n\n//-----------------------------------------------------------------------------\n// abs() often causes bugs, an original function is used.\n//-----------------------------------------------------------------------------\nstatic inline int MyAbsInt(int x) {\n  return x > 0 ? x : -x;\n}\n\n//-----------------------------------------------------------------------------\n// ExtendF0() : The Hand erasing the Space.\n// The subfunction of Extend().\n//-----------------------------------------------------------------------------\nstatic int ExtendF0(const double *f0, int f0_length, int origin,\n    int last_point, int shift, const double * const *f0_candidates,\n    int number_of_candidates, double allowed_range, double *extended_f0) {\n  int threshold = 4;\n  double tmp_f0 = extended_f0[origin];\n  int shifted_origin = origin;\n\n  int distance = MyAbsInt(last_point - origin);\n  int *index_list = new int[distance + 1];\n  for (int i = 0; i <= distance; ++i) index_list[i] = origin + shift * i;\n\n  int count = 0;\n  double dammy;\n  for (int i = 0; i <= distance; ++i) {\n    extended_f0[index_list[i] + shift] =\n      SelectBestF0(tmp_f0, f0_candidates[index_list[i] + shift],\n      number_of_candidates, allowed_range, &dammy);\n    if (extended_f0[index_list[i] + shift] == 0.0) {\n      count++;\n    } else {\n      tmp_f0 = extended_f0[index_list[i] + shift];\n      count = 0;\n      shifted_origin = index_list[i] + shift;\n    }\n    if (count == threshold) break;\n  }\n\n  delete[] index_list;\n  return shifted_origin;\n}\n\n//-----------------------------------------------------------------------------\n// Swap the f0 contour and boundary.\n// It is used in ExtendSub() and MergeF0();\n//-----------------------------------------------------------------------------\nstatic void Swap(int index1, int index2, double **f0, int *boundary) {\n  double *tmp_pointer;\n  int tmp_index;\n  tmp_pointer = f0[index1];\n  f0[index1] = f0[index2];\n  f0[index2] = tmp_pointer;\n  tmp_index = boundary[index1 * 2];\n  boundary[index1 * 2] = boundary[index2 * 2];\n  boundary[index2 * 2] = tmp_index;\n  tmp_index = boundary[index1 * 2 + 1];\n  boundary[index1 * 2 + 1] = boundary[index2 * 2 + 1];\n  boundary[index2 * 2 + 1] = tmp_index;\n}\n\nstatic int ExtendSub(const double * const *extended_f0,\n    const int *boundary_list, int number_of_sections,\n    double **selected_extended_f0, int *selected_boundary_list) {\n  double threshold = 2200.0;\n  int count = 0;\n  double mean_f0 = 0.0;\n  int st, ed;\n  for (int i = 0; i < number_of_sections; ++i) {\n    st = boundary_list[i * 2];\n    ed = boundary_list[i * 2 + 1];\n    for (int j = st; j < ed; ++j) mean_f0 += extended_f0[i][j];\n    mean_f0 /= ed - st;\n    if (threshold / mean_f0 < ed - st)\n      Swap(count++, i, selected_extended_f0, selected_boundary_list);\n  }\n  return count;\n}\n\n//-----------------------------------------------------------------------------\n// Extend() : The Hand erasing the Space.\n//-----------------------------------------------------------------------------\nstatic int Extend(const double * const *multi_channel_f0,\n    int number_of_sections, int f0_length, const int *boundary_list,\n    const double * const *f0_candidates, int number_of_candidates,\n    double allowed_range, double **extended_f0, int *shifted_boundary_list) {\n  int threshold = 100;\n  for (int i = 0; i < number_of_sections; ++i) {\n    shifted_boundary_list[i * 2 + 1] = ExtendF0(multi_channel_f0[i],\n      f0_length, boundary_list[i * 2 + 1],\n      MyMinInt(f0_length - 2, boundary_list[i * 2 + 1] + threshold), 1,\n      f0_candidates, number_of_candidates, allowed_range, extended_f0[i]);\n    shifted_boundary_list[i * 2] = ExtendF0(multi_channel_f0[i], f0_length,\n      boundary_list[i * 2], MyMaxInt(1, boundary_list[i * 2] - threshold), -1,\n      f0_candidates, number_of_candidates, allowed_range, extended_f0[i]);\n  }\n\n  return ExtendSub(multi_channel_f0, shifted_boundary_list,\n    number_of_sections, extended_f0, shifted_boundary_list);\n}\n\n//-----------------------------------------------------------------------------\n// Indices are sorted.\n//-----------------------------------------------------------------------------\nstatic void MakeSortedOrder(const int *boundary_list, int number_of_sections,\n    int *order) {\n  for (int i = 0; i < number_of_sections; ++i) order[i] = i;\n  int tmp;\n  for (int i = 1; i < number_of_sections; ++i)\n    for (int j = i - 1; j >= 0; --j)\n      if (boundary_list[order[j] * 2] > boundary_list[order[i] * 2]) {\n        tmp = order[i];\n        order[i] = order[j];\n        order[j] = tmp;\n      } else {\n        break;\n      }\n}\n\n//-----------------------------------------------------------------------------\n// Serach the highest score with the candidate F0.\n//-----------------------------------------------------------------------------\nstatic double SearchScore(double f0, const double *f0_candidates,\n    const double  *f0_scores, int number_of_candidates) {\n  double score = 0.0;\n  for (int i = 0; i < number_of_candidates; ++i)\n    if (f0 == f0_candidates[i] && score < f0_scores[i]) score = f0_scores[i];\n  return score;\n}\n\n//-----------------------------------------------------------------------------\n// Subfunction of MergeF0()\n//-----------------------------------------------------------------------------\nstatic int MergeF0Sub(const double *f0_1, int f0_length, int st1, int ed1,\n    const double *f0_2, int st2, int ed2, const double * const *f0_candidates,\n    const double * const *f0_scores, int number_of_candidates,\n    double *merged_f0) {\n  if (st1 <= st2 && ed1 >= ed2) return ed1;\n\n  double score1 = 0.0;\n  double score2 = 0.0;\n  for (int i = st2; i <= ed1; ++i) {\n    score1 += SearchScore(f0_1[i], f0_candidates[i], f0_scores[i],\n      number_of_candidates);\n    score2 += SearchScore(f0_2[i], f0_candidates[i], f0_scores[i],\n      number_of_candidates);\n  }\n  if (score1 > score2)\n    for (int i = ed1; i <= ed2; ++i) merged_f0[i] = f0_2[i];\n  else\n    for (int i = st2; i <= ed2; ++i) merged_f0[i] = f0_2[i];\n\n  return ed2;\n}\n\n//-----------------------------------------------------------------------------\n// Overlapped F0 contours are merged by the likability score.\n//-----------------------------------------------------------------------------\nstatic void MergeF0(const double * const *multi_channel_f0, int *boundary_list,\n    int number_of_channels, int f0_length, const double * const *f0_candidates,\n    const double * const *f0_scores, int number_of_candidates,\n    double *merged_f0) {\n  int *order = new int[number_of_channels];\n  MakeSortedOrder(boundary_list, number_of_channels, order);\n\n  for (int i = 0; i < f0_length; ++i)\n    merged_f0[i] = multi_channel_f0[0][i];\n\n  for (int i = 1; i < number_of_channels; ++i)\n    if (boundary_list[order[i] * 2] - boundary_list[1] > 0) {\n      for (int j = boundary_list[order[i] * 2];\n        j <= boundary_list[order[i] * 2 + 1]; ++j)\n        merged_f0[j] = multi_channel_f0[order[i]][j];\n      boundary_list[0] = boundary_list[order[i] * 2];\n      boundary_list[1] = boundary_list[order[i] * 2 + 1];\n    } else {\n      boundary_list[1] =\n        MergeF0Sub(merged_f0, f0_length, boundary_list[0], boundary_list[1],\n        multi_channel_f0[order[i]], boundary_list[order[i] * 2],\n        boundary_list[order[i] * 2 + 1], f0_candidates, f0_scores,\n        number_of_candidates, merged_f0);\n    }\n\n  delete[] order;\n}\n\n//-----------------------------------------------------------------------------\n// Step 3: Voiced sections are extended based on the continuity of F0 contour\n//-----------------------------------------------------------------------------\nstatic void FixStep3(const double *f0_step2, int f0_length,\n    int number_of_candidates, const double * const *f0_candidates,\n    double allowed_range, const double * const *f0_scores, double *f0_step3) {\n  for (int i = 0; i < f0_length; ++i) f0_step3[i] = f0_step2[i];\n  int *boundary_list = new int[f0_length];\n  int number_of_boundaries =\n    GetBoundaryList(f0_step2, f0_length, boundary_list);\n\n  double **multi_channel_f0 = new double *[number_of_boundaries / 2];\n  for (int i = 0; i < number_of_boundaries / 2; ++i)\n    multi_channel_f0[i] = new double[f0_length];\n  GetMultiChannelF0(f0_step2, f0_length, boundary_list, number_of_boundaries,\n      multi_channel_f0);\n\n  int number_of_channels =\n    Extend(multi_channel_f0, number_of_boundaries / 2, f0_length,\n    boundary_list, f0_candidates, number_of_candidates, allowed_range,\n    multi_channel_f0, boundary_list);\n\n  if (number_of_channels != 0)\n    MergeF0(multi_channel_f0, boundary_list, number_of_channels, f0_length,\n        f0_candidates, f0_scores, number_of_candidates, f0_step3);\n\n  for (int i = 0; i < number_of_boundaries / 2; ++i)\n    delete[] multi_channel_f0[i];\n  delete[] multi_channel_f0;\n  delete[] boundary_list;\n}\n\n//-----------------------------------------------------------------------------\n// Step 4: F0s in short unvoiced section are faked\n//-----------------------------------------------------------------------------\nstatic void FixStep4(const double *f0_step3, int f0_length, int threshold,\n    double *f0_step4) {\n  for (int i = 0; i < f0_length; ++i) f0_step4[i] = f0_step3[i];\n  int *boundary_list = new int[f0_length];\n  int number_of_boundaries =\n    GetBoundaryList(f0_step3, f0_length, boundary_list);\n\n  int distance;\n  double tmp0, tmp1, coefficient;\n  int count;\n  for (int i = 0; i < number_of_boundaries / 2 - 1; ++i) {\n    distance = boundary_list[(i + 1) * 2] - boundary_list[i * 2 + 1] - 1;\n    if (distance >= threshold) continue;\n    tmp0 = f0_step3[boundary_list[i * 2 + 1]] + 1;\n    tmp1 = f0_step3[boundary_list[(i + 1) * 2]] - 1;\n    coefficient = (tmp1 - tmp0) / (distance + 1.0);\n    count = 1;\n    for (int j = boundary_list[i * 2 + 1] + 1;\n        j <= boundary_list[(i + 1) * 2] - 1; ++j)\n      f0_step4[j] = tmp0 + coefficient * count++;\n  }\n  delete[] boundary_list;\n}\n\n//-----------------------------------------------------------------------------\n// FixF0Contour() obtains the likely F0 contour.\n//-----------------------------------------------------------------------------\nstatic void FixF0Contour(const double * const *f0_candidates,\n    const double * const *f0_scores, int f0_length, int number_of_candidates,\n    double *best_f0_contour) {\n  double *tmp_f0_contour1 = new double[f0_length];\n  double *tmp_f0_contour2 = new double[f0_length];\n\n  // These parameters are optimized by speech databases.\n  SearchF0Base(f0_candidates, f0_scores, f0_length,\n      number_of_candidates, tmp_f0_contour1);\n  FixStep1(tmp_f0_contour1, f0_length, 0.008, tmp_f0_contour2);\n  FixStep2(tmp_f0_contour2, f0_length, 6, tmp_f0_contour1);\n  FixStep3(tmp_f0_contour1, f0_length, number_of_candidates, f0_candidates,\n      0.18, f0_scores, tmp_f0_contour2);\n  FixStep4(tmp_f0_contour2, f0_length, 9, best_f0_contour);\n\n  delete[] tmp_f0_contour1;\n  delete[] tmp_f0_contour2;\n}\n\n//-----------------------------------------------------------------------------\n// This function uses zero-lag Butterworth filter.\n//-----------------------------------------------------------------------------\nstatic void FilteringF0(const double *a, const double *b, double *x,\n    int x_length, int st, int ed, double *y) {\n  double w[2] = { 0.0, 0.0 };\n  double wt;\n  double *tmp_x = new double[x_length];\n\n  for (int i = 0; i < st; ++i) x[i] = x[st];\n  for (int i = ed + 1; i < x_length; ++i) x[i] = x[ed];\n\n  for (int i = 0; i < x_length; ++i) {\n    wt = x[i] + a[0] * w[0] + a[1] * w[1];\n    tmp_x[x_length - i - 1] = b[0] * wt + b[1] * w[0] + b[0] * w[1];\n    w[1] = w[0];\n    w[0] = wt;\n  }\n\n  w[0] = w[1] = 0.0;\n  for (int i = 0; i < x_length; ++i) {\n    wt = tmp_x[i] + a[0] * w[0] + a[1] * w[1];\n    y[x_length - i - 1] = b[0] * wt + b[1] * w[0] + b[0] * w[1];\n    w[1] = w[0];\n    w[0] = wt;\n  }\n\n  delete[] tmp_x;\n}\n\n//-----------------------------------------------------------------------------\n// SmoothF0Contour() uses the zero-lag Butterworth filter for smoothing.\n//-----------------------------------------------------------------------------\nstatic void SmoothF0Contour(const double *f0, int f0_length,\n    double *smoothed_f0) {\n  const double b[2] =\n    { 0.0078202080334971724, 0.015640416066994345 };\n  const double a[2] =\n    { 1.7347257688092754, -0.76600660094326412 };\n  int lag = 300;\n  int new_f0_length = f0_length + lag * 2;\n  double *f0_contour = new double[new_f0_length];\n  for (int i = 0; i < lag; ++i) f0_contour[i] = 0.0;\n  for (int i = lag; i < lag + f0_length; ++i) f0_contour[i] = f0[i - lag];\n  for (int i = lag + f0_length; i < new_f0_length; ++i) f0_contour[i] = 0.0;\n\n  int *boundary_list = new int[new_f0_length];\n  int number_of_boundaries =\n    GetBoundaryList(f0_contour, new_f0_length, boundary_list);\n  double **multi_channel_f0 = new double *[number_of_boundaries / 2];\n  for (int i = 0; i < number_of_boundaries / 2; ++i)\n    multi_channel_f0[i] = new double[new_f0_length];\n  GetMultiChannelF0(f0_contour, new_f0_length, boundary_list,\n      number_of_boundaries, multi_channel_f0);\n\n  for (int i = 0; i < number_of_boundaries / 2; ++i) {\n    FilteringF0(a, b, multi_channel_f0[i], new_f0_length,\n      boundary_list[i * 2], boundary_list[i * 2 + 1], f0_contour);\n    for (int j = boundary_list[i * 2]; j <= boundary_list[i * 2 + 1]; ++j)\n      smoothed_f0[j - lag] = f0_contour[j];\n  }\n\n  for (int i = 0; i < number_of_boundaries / 2; ++i)\n    delete[] multi_channel_f0[i];\n  delete[] multi_channel_f0;\n  delete[] f0_contour;\n  delete[] boundary_list;\n}\n\n//-----------------------------------------------------------------------------\n// HarvestGeneralBodySub() is the subfunction of HarvestGeneralBody()\n//-----------------------------------------------------------------------------\nstatic int HarvestGeneralBodySub(const double *boundary_f0_list,\n    int number_of_channels, int f0_length, double actual_fs, int y_length,\n    const double *temporal_positions, const fft_complex *y_spectrum,\n    int fft_size, double f0_floor, double f0_ceil, int max_candidates,\n    double **f0_candidates) {\n  double **raw_f0_candidates = new double *[number_of_channels];\n  for (int i = 0; i < number_of_channels; ++i)\n    raw_f0_candidates[i] = new double[f0_length];\n\n  GetRawF0Candidates(boundary_f0_list, number_of_channels,\n      actual_fs, y_length, temporal_positions, f0_length, y_spectrum,\n      fft_size, f0_floor, f0_ceil, raw_f0_candidates);\n\n  int number_of_candidates = DetectOfficialF0Candidates(raw_f0_candidates,\n    number_of_channels, f0_length, max_candidates, f0_candidates);\n\n  OverlapF0Candidates(f0_length, number_of_candidates, f0_candidates);\n\n  for (int i = 0; i < number_of_channels; ++i)\n    delete[] raw_f0_candidates[i];\n  delete[] raw_f0_candidates;\n  return number_of_candidates;\n}\n\n//-----------------------------------------------------------------------------\n// HarvestGeneralBody() estimates the F0 contour based on Harvest.\n//-----------------------------------------------------------------------------\nstatic void HarvestGeneralBody(const double *x, int x_length, int fs,\n    int frame_period, double f0_floor, double f0_ceil,\n    double channels_in_octave, int speed, double *temporal_positions,\n    double *f0) {\n  double adjusted_f0_floor = f0_floor * 0.9;\n  double adjusted_f0_ceil = f0_ceil * 1.1;\n  int number_of_channels =\n    1 + static_cast<int>(log(adjusted_f0_ceil / adjusted_f0_floor) /\n    world::kLog2 * channels_in_octave);\n  double *boundary_f0_list = new double[number_of_channels];\n  for (int i = 0; i < number_of_channels; ++i)\n    boundary_f0_list[i] =\n    adjusted_f0_floor * pow(2.0, (i + 1) / channels_in_octave);\n\n  // normalization\n  int decimation_ratio = MyMaxInt(MyMinInt(speed, 12), 1);\n  int y_length =\n    static_cast<int>(ceil(static_cast<double>(x_length) / decimation_ratio));\n  double actual_fs = static_cast<double>(fs) / decimation_ratio;\n  int fft_size = GetSuitableFFTSize(y_length + 5 +\n    2 * static_cast<int>(2.0 * actual_fs / boundary_f0_list[0]));\n\n  // Calculation of the spectrum used for the f0 estimation\n  double *y = new double[fft_size];\n  fft_complex *y_spectrum = new fft_complex[fft_size];\n  GetWaveformAndSpectrum(x, x_length, y_length, actual_fs, fft_size,\n      decimation_ratio, y, y_spectrum);\n\n  int f0_length = GetSamplesForHarvest(fs, x_length, frame_period);\n  for (int i = 0; i < f0_length; ++i) {\n    temporal_positions[i] = i * frame_period / 1000.0;\n    f0[i] = 0.0;\n  }\n\n  int overlap_parameter = 7;\n  int max_candidates =\n    matlab_round(number_of_channels / 10.0) * overlap_parameter;\n  double **f0_candidates = new double *[f0_length];\n  double **f0_candidates_score = new double *[f0_length];\n  for (int i = 0; i < f0_length; ++i) {\n    f0_candidates[i] = new double[max_candidates];\n    f0_candidates_score[i] = new double[max_candidates];\n  }\n\n  int number_of_candidates = HarvestGeneralBodySub(boundary_f0_list,\n    number_of_channels, f0_length, actual_fs, y_length, temporal_positions,\n    y_spectrum, fft_size, f0_floor, f0_ceil, max_candidates, f0_candidates) *\n    overlap_parameter;\n\n  RefineF0Candidates(y, y_length, actual_fs, temporal_positions, f0_length,\n      number_of_candidates, f0_floor, f0_ceil, f0_candidates,\n      f0_candidates_score);\n  RemoveUnreliableCandidates(f0_length, number_of_candidates,\n      f0_candidates, f0_candidates_score);\n\n  double *best_f0_contour = new double[f0_length];\n  FixF0Contour(f0_candidates, f0_candidates_score, f0_length,\n      number_of_candidates, best_f0_contour);\n  SmoothF0Contour(best_f0_contour, f0_length, f0);\n\n  delete[] y;\n  delete[] best_f0_contour;\n  delete[] y_spectrum;\n  for (int i = 0; i < f0_length; ++i) {\n    delete[] f0_candidates[i];\n    delete[] f0_candidates_score[i];\n  }\n  delete[] f0_candidates;\n  delete[] f0_candidates_score;\n  delete[] boundary_f0_list;\n}\n\n}  // namespace\n\nint GetSamplesForHarvest(int fs, int x_length, double frame_period) {\n  return static_cast<int>(1000.0 * x_length / fs / frame_period) + 1;\n}\n\nvoid Harvest(const double *x, int x_length, int fs,\n    const HarvestOption *option, double *temporal_positions, double *f0) {\n  // Several parameters will be controllable for debug.\n  double target_fs = 8000.0;\n  int dimension_ratio = matlab_round(fs / target_fs);\n  double channels_in_octave = 40;\n\n  if (option->frame_period == 1.0) {\n    HarvestGeneralBody(x, x_length, fs, 1, option->f0_floor,\n        option->f0_ceil, channels_in_octave, dimension_ratio,\n        temporal_positions, f0);\n    return;\n  }\n\n  int basic_frame_period = 1;\n  int basic_f0_length =\n    GetSamplesForHarvest(fs, x_length, basic_frame_period);\n  double *basic_f0 = new double[basic_f0_length];\n  double *basic_temporal_positions = new double[basic_f0_length];\n  HarvestGeneralBody(x, x_length, fs, basic_frame_period, option->f0_floor,\n      option->f0_ceil, channels_in_octave, dimension_ratio,\n      basic_temporal_positions, basic_f0);\n\n  int f0_length = GetSamplesForHarvest(fs, x_length, option->frame_period);\n  for (int i = 0; i < f0_length; ++i) {\n    temporal_positions[i] = i * option->frame_period / 1000.0;\n    f0[i] = basic_f0[MyMinInt(basic_f0_length - 1,\n      matlab_round(temporal_positions[i] * 1000.0))];\n  }\n\n  delete[] basic_f0;\n  delete[] basic_temporal_positions;\n}\n\nvoid InitializeHarvestOption(HarvestOption *option) {\n  // You can change default parameters.\n  option->f0_ceil = world::kCeilF0;\n  option->f0_floor = world::kFloorF0;\n  option->frame_period = 5;\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/matlabfunctions.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Matlab functions implemented for WORLD\n// Since these functions are implemented as the same function of Matlab,\n// the source code does not follow the style guide (Names of variables\n// and functions).\n// Please see the reference of Matlab to show the usage of functions.\n// Caution:\n//   The functions wavread() and wavwrite() were removed to the /src.\n//   they were moved to the test/audioio.cpp. (2016/01/28)\n//-----------------------------------------------------------------------------\n#include \"world/matlabfunctions.h\"\n\n#include <math.h>\n#include <stdint.h>\n\n#include \"world/constantnumbers.h\"\n\nnamespace {\n//-----------------------------------------------------------------------------\n// FilterForDecimate() calculates the coefficients of low-pass filter and\n// carries out the filtering. This function is only used for decimate().\n//-----------------------------------------------------------------------------\nstatic void FilterForDecimate(const double *x, int x_length, int r, double *y) {\n  double a[3], b[2];  // filter Coefficients\n  switch (r) {\n    case 11:  // fs : 44100 (default)\n      a[0] = 2.450743295230728;\n      a[1] = -2.06794904601978;\n      a[2] = 0.59574774438332101;\n      b[0] = 0.0026822508007163792;\n      b[1] = 0.0080467524021491377;\n      break;\n    case 12:  // fs : 48000\n      a[0] = 2.4981398605924205;\n      a[1] = -2.1368928194784025;\n      a[2] = 0.62187513816221485;\n      b[0] = 0.0021097275904709001;\n      b[1] = 0.0063291827714127002;\n      break;\n    case 10:\n      a[0] = 2.3936475118069387;\n      a[1] = -1.9873904075111861;\n      a[2] = 0.5658879979027055;\n      b[0] = 0.0034818622251927556;\n      b[1] = 0.010445586675578267;\n      break;\n    case 9:\n      a[0] = 2.3236003491759578;\n      a[1] = -1.8921545617463598;\n      a[2] = 0.53148928133729068;\n      b[0] = 0.0046331164041389372;\n      b[1] = 0.013899349212416812;\n      break;\n    case 8:  // fs : 32000\n      a[0] = 2.2357462340187593;\n      a[1] = -1.7780899984041358;\n      a[2] = 0.49152555365968692;\n      b[0] = 0.0063522763407111993;\n      b[1] = 0.019056829022133598;\n      break;\n    case 7:\n      a[0] = 2.1225239019534703;\n      a[1] = -1.6395144861046302;\n      a[2] = 0.44469707800587366;\n      b[0] = 0.0090366882681608418;\n      b[1] = 0.027110064804482525;\n      break;\n    case 6:  // fs : 24000 and 22050\n      a[0] = 1.9715352749512141;\n      a[1] = -1.4686795689225347;\n      a[2] = 0.3893908434965701;\n      b[0] = 0.013469181309343825;\n      b[1] = 0.040407543928031475;\n      break;\n    case 5:\n      a[0] = 1.7610939654280557;\n      a[1] = -1.2554914843859768;\n      a[2] = 0.3237186507788215;\n      b[0] = 0.021334858522387423;\n      b[1] = 0.06400457556716227;\n      break;\n    case 4:  // fs : 16000\n      a[0] = 1.4499664446880227;\n      a[1] = -0.98943497080950582;\n      a[2] = 0.24578252340690215;\n      b[0] = 0.036710750339322612;\n      b[1] = 0.11013225101796784;\n      break;\n    case 3:\n      a[0] = 0.95039378983237421;\n      a[1] = -0.67429146741526791;\n      a[2] = 0.15412211621346475;\n      b[0] = 0.071221945171178636;\n      b[1] = 0.21366583551353591;\n      break;\n    case 2:  // fs : 8000\n      a[0] = 0.041156734567757189;\n      a[1] = -0.42599112459189636;\n      a[2] = 0.041037215479961225;\n      b[0] = 0.16797464681802227;\n      b[1] = 0.50392394045406674;\n      break;\n    default:\n      a[0] = 0.0;\n      a[1] = 0.0;\n      a[2] = 0.0;\n      b[0] = 0.0;\n      b[1] = 0.0;\n  }\n\n  // Filtering on time domain.\n  double w[3] = {0.0, 0.0, 0.0};\n  double wt;\n  for (int i = 0; i < x_length; ++i) {\n    wt = x[i] + a[0] * w[0] + a[1] * w[1] + a[2] * w[2];\n    y[i] = b[0] * wt + b[1] * w[0] + b[1] * w[1] + b[0] * w[2];\n    w[2] = w[1];\n    w[1] = w[0];\n    w[0] = wt;\n  }\n}\n\n}  // namespace\n\nvoid fftshift(const double *x, int x_length, double *y) {\n  for (int i = 0; i < x_length / 2; ++i) {\n    y[i] = x[i + x_length / 2];\n    y[i + x_length / 2] = x[i];\n  }\n}\n\nvoid histc(const double *x, int x_length, const double *edges,\n    int edges_length, int *index) {\n  int count = 1;\n\n  int i = 0;\n  for (; i < edges_length; ++i) {\n    index[i] = 1;\n    if (edges[i] >= x[0]) break;\n  }\n  for (; i < edges_length; ++i) {\n    if (edges[i] < x[count]) {\n      index[i] = count;\n    } else {\n      index[i--] = count++;\n    }\n    if (count == x_length) break;\n  }\n  count--;\n  for (i++; i < edges_length; ++i) index[i] = count;\n}\n\nvoid interp1(const double *x, const double *y, int x_length, const double *xi,\n    int xi_length, double *yi) {\n  double *h = new double[x_length - 1];\n  int *k = new int[xi_length];\n\n  for (int i = 0; i < x_length - 1; ++i) h[i] = x[i + 1] - x[i];\n  for (int i = 0; i < xi_length; ++i) {\n    k[i] = 0;\n  }\n\n  histc(x, x_length, xi, xi_length, k);\n\n  for (int i = 0; i < xi_length; ++i) {\n    double s = (xi[i] - x[k[i] - 1]) / h[k[i] - 1];\n    yi[i] = y[k[i] - 1] + s * (y[k[i]] - y[k[i] - 1]);\n  }\n  \n  delete[] k;\n  delete[] h;\n}\n\nvoid decimate(const double *x, int x_length, int r, double *y) {\n  const int kNFact = 9;\n  double *tmp1 = new double[x_length + kNFact * 2];\n  double *tmp2 = new double[x_length + kNFact * 2];\n\n  for (int i = 0; i < kNFact; ++i) tmp1[i] = 2 * x[0] - x[kNFact - i];\n  for (int i = kNFact; i < kNFact + x_length; ++i) tmp1[i] = x[i - kNFact];\n  for (int i = kNFact + x_length; i < 2 * kNFact + x_length; ++i)\n    tmp1[i] = 2 * x[x_length - 1] - x[x_length - 2 - (i - (kNFact + x_length))];\n\n  FilterForDecimate(tmp1, 2 * kNFact + x_length, r, tmp2);\n  for (int i = 0; i < 2 * kNFact + x_length; ++i)\n    tmp1[i] = tmp2[2 * kNFact + x_length - i - 1];\n  FilterForDecimate(tmp1, 2 * kNFact + x_length, r, tmp2);\n  for (int i = 0; i < 2 * kNFact + x_length; ++i)\n    tmp1[i] = tmp2[2 * kNFact + x_length - i - 1];\n\n  int nout = (x_length - 1) / r + 1;\n  int nbeg = r - r * nout + x_length;\n\n  int count = 0;\n  for (int i = nbeg; i < x_length + kNFact; i += r)\n    y[count++] = tmp1[i + kNFact - 1];\n\n  delete[] tmp1;\n  delete[] tmp2;\n}\n\nint matlab_round(double x) {\n  return x > 0 ? static_cast<int>(x + 0.5) : static_cast<int>(x - 0.5);\n}\n\nvoid diff(const double *x, int x_length, double *y) {\n  for (int i = 0; i < x_length - 1; ++i) y[i] = x[i + 1] - x[i];\n}\n\nvoid interp1Q(double x, double shift, const double *y, int x_length,\n    const double *xi, int xi_length, double *yi) {\n  double *xi_fraction = new double[xi_length];\n  double *delta_y = new double[x_length];\n  int *xi_base = new int[xi_length];\n\n  double delta_x = shift;\n  for (int i = 0; i < xi_length; ++i) {\n    xi_base[i] = static_cast<int>((xi[i] - x) / delta_x);\n    xi_fraction[i] = (xi[i] - x) / delta_x - xi_base[i];\n  }\n  diff(y, x_length, delta_y);\n  delta_y[x_length - 1] = 0.0;\n\n  for (int i = 0; i < xi_length; ++i)\n    yi[i] = y[xi_base[i]] + delta_y[xi_base[i]] * xi_fraction[i];\n\n  // Bug was fixed at 2013/07/14 by M. Morise\n  delete[] xi_fraction;\n  delete[] xi_base;\n  delete[] delta_y;\n}\n\n// You must not use these variables.\n// Note:\n// I have no idea to implement the randn() and randn_reseed() without the\n// global variables. If you have a good idea, please give me the information.\nstatic uint32_t g_randn_x = 123456789;\nstatic uint32_t g_randn_y = 362436069;\nstatic uint32_t g_randn_z = 521288629;\nstatic uint32_t g_randn_w = 88675123;\n\nvoid randn_reseed() {\n    g_randn_x = 123456789;\n    g_randn_y = 362436069;\n    g_randn_z = 521288629;\n    g_randn_w = 88675123;\n}\n\ndouble randn(void) {\n  uint32_t t;\n  t = g_randn_x ^ (g_randn_x << 11);\n  g_randn_x = g_randn_y;\n  g_randn_y = g_randn_z;\n  g_randn_z = g_randn_w;\n  g_randn_w = (g_randn_w ^ (g_randn_w >> 19)) ^ (t ^ (t >> 8));\n\n  uint32_t tmp = g_randn_w >> 4;\n  for (int i = 0; i < 11; ++i) {\n    t = g_randn_x ^ (g_randn_x << 11);\n    g_randn_x = g_randn_y;\n    g_randn_y = g_randn_z;\n    g_randn_z = g_randn_w;\n    g_randn_w = (g_randn_w ^ (g_randn_w >> 19)) ^ (t ^ (t >> 8));\n    tmp += g_randn_w >> 4;\n  }\n  return tmp / 268435456.0 - 6.0;\n}\n\nvoid fast_fftfilt(const double *x, int x_length, const double *h, int h_length,\n    int fft_size, const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft, double *y) {\n  fft_complex *x_spectrum = new fft_complex[fft_size];\n\n  for (int i = 0; i < x_length; ++i)\n    forward_real_fft->waveform[i] = x[i] / fft_size;\n  for (int i = x_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    x_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    x_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  for (int i = 0; i < h_length; ++i)\n    forward_real_fft->waveform[i] = h[i] / fft_size;\n  for (int i = h_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      x_spectrum[i][0] * forward_real_fft->spectrum[i][0] -\n      x_spectrum[i][1] * forward_real_fft->spectrum[i][1];\n    inverse_real_fft->spectrum[i][1] =\n      x_spectrum[i][0] * forward_real_fft->spectrum[i][1] +\n      x_spectrum[i][1] * forward_real_fft->spectrum[i][0];\n  }\n  fft_execute(inverse_real_fft->inverse_fft);\n\n  for (int i = 0; i < fft_size; ++i)\n    y[i] = inverse_real_fft->waveform[i];\n\n  delete[] x_spectrum;\n}\n\ndouble matlab_std(const double *x, int x_length) {\n  double average = 0.0;\n  for (int i = 0; i < x_length; ++i) average += x[i];\n  average /= x_length;\n\n  double s = 0.0;\n  for (int i = 0; i < x_length; ++i) s += pow(x[i] - average, 2.0);\n  s /= (x_length - 1);\n\n  return sqrt(s);\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/stonemask.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// F0 estimation based on instantaneous frequency.\n// This method is carried out by using the output of Dio().\n//-----------------------------------------------------------------------------\n#include \"world/stonemask.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/fft.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n//-----------------------------------------------------------------------------\n// GetBaseIndex() calculates the temporal positions for windowing.\n// Since the result includes negative value and the value that exceeds the\n// length of the input signal, it must be modified appropriately.\n//-----------------------------------------------------------------------------\nstatic void GetBaseIndex(double current_position, const double *base_time,\n    int base_time_length, int fs, int *index_raw) {\n  for (int i = 0; i < base_time_length; ++i)\n    index_raw[i] = matlab_round((current_position + base_time[i]) * fs);\n}\n\n//-----------------------------------------------------------------------------\n// GetMainWindow() generates the window function.\n//-----------------------------------------------------------------------------\nstatic void GetMainWindow(double current_position, const int *index_raw,\n    int base_time_length, int fs, double window_length_in_time,\n    double *main_window) {\n  double tmp = 0.0;\n  for (int i = 0; i < base_time_length; ++i) {\n    tmp = (index_raw[i] - 1.0) / fs - current_position;\n    main_window[i] = 0.42 +\n      0.5 * cos(2.0 * world::kPi * tmp / window_length_in_time) +\n      0.08 * cos(4.0 * world::kPi * tmp / window_length_in_time);\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetDiffWindow() generates the differentiated window.\n// Diff means differential.\n//-----------------------------------------------------------------------------\nstatic void GetDiffWindow(const double *main_window, int base_time_length,\n    double *diff_window) {\n  diff_window[0] = -main_window[1] / 2.0;\n  for (int i = 1; i < base_time_length - 1; ++i)\n    diff_window[i] = -(main_window[i + 1] - main_window[i - 1]) / 2.0;\n  diff_window[base_time_length - 1] = main_window[base_time_length - 2] / 2.0;\n}\n\n//-----------------------------------------------------------------------------\n// GetSpectra() calculates two spectra of the waveform windowed by windows\n// (main window and diff window).\n//-----------------------------------------------------------------------------\nstatic void GetSpectra(const double *x, int x_length, int fft_size,\n    const int *index_raw, const double *main_window, const double *diff_window,\n    int base_time_length, const ForwardRealFFT *forward_real_fft,\n    fft_complex *main_spectrum, fft_complex *diff_spectrum) {\n  int *index = new int[base_time_length];\n\n  for (int i = 0; i < base_time_length; ++i)\n    index[i] = MyMaxInt(0, MyMinInt(x_length - 1, index_raw[i] - 1));\n  for (int i = 0; i < base_time_length; ++i)\n    forward_real_fft->waveform[i] = x[index[i]] * main_window[i];\n  for (int i = base_time_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    main_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    main_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  for (int i = 0; i < base_time_length; ++i)\n    forward_real_fft->waveform[i] = x[index[i]] * diff_window[i];\n  for (int i = base_time_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    diff_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    diff_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  delete[] index;\n}\n\n//-----------------------------------------------------------------------------\n// FixF0() fixed the F0 by instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic double FixF0(const double *power_spectrum, const double *numerator_i,\n    int fft_size, int fs, double initial_f0, int number_of_harmonics) {\n  double *amplitude_list = new double[number_of_harmonics];\n  double *instantaneous_frequency_list = new double[number_of_harmonics];\n  int index;\n  for (int i = 0; i < number_of_harmonics; ++i) {\n    index = MyMinInt(matlab_round(initial_f0 * fft_size / fs * (i + 1)), \n            fft_size / 2);\n    instantaneous_frequency_list[i] = power_spectrum[index] == 0.0 ? 0.0 :\n      static_cast<double>(index) * fs / fft_size +\n      numerator_i[index] / power_spectrum[index] * fs / 2.0 / world::kPi;\n    amplitude_list[i] = sqrt(power_spectrum[index]);\n  }\n  double denominator = 0.0;\n  double numerator = 0.0;\n  for (int i = 0; i < number_of_harmonics; ++i) {\n    numerator += amplitude_list[i] * instantaneous_frequency_list[i];\n    denominator += amplitude_list[i] * (i + 1);\n  }\n  delete[] amplitude_list;\n  delete[] instantaneous_frequency_list;\n  return numerator / (denominator + world::kMySafeGuardMinimum);\n}\n\n//-----------------------------------------------------------------------------\n// GetTentativeF0() calculates the F0 based on the instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic double GetTentativeF0(const double *power_spectrum,\n    const double *numerator_i, int fft_size, int fs, double initial_f0) {\n  double tentative_f0 =\n    FixF0(power_spectrum, numerator_i, fft_size, fs, initial_f0, 2);\n\n  // If the fixed value is too large, the result will be rejected.\n  if (tentative_f0 <= 0.0 || tentative_f0 > initial_f0 * 2) return 0.0;\n\n  return FixF0(power_spectrum, numerator_i, fft_size, fs, tentative_f0, 6);\n}\n\n//-----------------------------------------------------------------------------\n// GetMeanF0() calculates the instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic double GetMeanF0(const double *x, int x_length, int fs,\n    double current_position, double initial_f0, int fft_size,\n    double window_length_in_time, const double *base_time,\n    int base_time_length) {\n  ForwardRealFFT forward_real_fft = {0};\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n  fft_complex *main_spectrum = new fft_complex[fft_size];\n  fft_complex *diff_spectrum = new fft_complex[fft_size];\n\n  int *index_raw = new int[base_time_length];\n  double *main_window = new double[base_time_length];\n  double *diff_window = new double[base_time_length];\n\n  GetBaseIndex(current_position, base_time, base_time_length, fs, index_raw);\n  GetMainWindow(current_position, index_raw, base_time_length, fs,\n      window_length_in_time, main_window);\n  GetDiffWindow(main_window, base_time_length, diff_window);\n  GetSpectra(x, x_length, fft_size, index_raw, main_window, diff_window,\n      base_time_length, &forward_real_fft, main_spectrum, diff_spectrum);\n\n  double *power_spectrum = new double[fft_size / 2 + 1];\n  double *numerator_i = new double[fft_size / 2 + 1];\n  for (int j = 0; j <= fft_size / 2; ++j) {\n    numerator_i[j] = main_spectrum[j][0] * diff_spectrum[j][1] -\n      main_spectrum[j][1] * diff_spectrum[j][0];\n    power_spectrum[j] = main_spectrum[j][0] * main_spectrum[j][0] +\n      main_spectrum[j][1] * main_spectrum[j][1];\n  }\n\n  double tentative_f0 = GetTentativeF0(power_spectrum, numerator_i,\n    fft_size, fs, initial_f0);\n\n  delete[] diff_spectrum;\n  delete[] diff_window;\n  delete[] main_window;\n  delete[] index_raw;\n  delete[] numerator_i;\n  delete[] power_spectrum;\n  delete[] main_spectrum;\n  DestroyForwardRealFFT(&forward_real_fft);\n\n  return tentative_f0;\n}\n\n//-----------------------------------------------------------------------------\n// GetRefinedF0() fixes the F0 estimated by Dio(). This function uses\n// instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic double GetRefinedF0(const double *x, int x_length, int fs,\n    double current_potision, double initial_f0) {\n  if (initial_f0 <= world::kFloorF0StoneMask || initial_f0 > fs / 12.0)\n    return 0.0;\n\n  int half_window_length = static_cast<int>(1.5 * fs / initial_f0 + 1.0);\n  double window_length_in_time = (2.0 * half_window_length + 1.0) / fs;\n  double *base_time = new double[half_window_length * 2 + 1];\n  for (int i = 0; i < half_window_length * 2 + 1; i++)\n    base_time[i] = static_cast<double>(-half_window_length + i) / fs;\n  int fft_size = static_cast<int>(pow(2.0, 2.0 +\n    static_cast<int>(log(half_window_length * 2.0 + 1.0) / world::kLog2)));\n\n  double mean_f0 = GetMeanF0(x, x_length, fs, current_potision,\n      initial_f0, fft_size, window_length_in_time, base_time,\n      half_window_length * 2 + 1);\n\n  // If amount of correction is overlarge (20 %), initial F0 is employed.\n  if (fabs(mean_f0 - initial_f0) > initial_f0 * 0.2) mean_f0 = initial_f0;\n\n  delete[] base_time;\n\n  return mean_f0;\n}\n\n}  // namespace\n\nvoid StoneMask(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    double *refined_f0) {\n  for (int i = 0; i < f0_length; i++)\n    refined_f0[i] =\n      GetRefinedF0(x, x_length, fs, temporal_positions[i], f0[i]);\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/synthesis.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Voice synthesis based on f0, spectrogram and aperiodicity.\n// forward_real_fft, inverse_real_fft and minimum_phase are used to speed up.\n//-----------------------------------------------------------------------------\n#include \"world/synthesis.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n\nstatic void GetNoiseSpectrum(int noise_size, int fft_size,\n    const ForwardRealFFT *forward_real_fft) {\n  double average = 0.0;\n  for (int i = 0; i < noise_size; ++i) {\n    forward_real_fft->waveform[i] = randn();\n    average += forward_real_fft->waveform[i];\n  }\n\n  average /= noise_size;\n  for (int i = 0; i < noise_size; ++i)\n    forward_real_fft->waveform[i] -= average;\n  for (int i = noise_size; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n}\n\n//-----------------------------------------------------------------------------\n// GetAperiodicResponse() calculates an aperiodic response.\n//-----------------------------------------------------------------------------\nstatic void GetAperiodicResponse(int noise_size, int fft_size,\n    const double *spectrum, const double *aperiodic_ratio, double current_vuv,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase, double *aperiodic_response) {\n  GetNoiseSpectrum(noise_size, fft_size, forward_real_fft);\n\n  if (current_vuv != 0.0)\n    for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n      minimum_phase->log_spectrum[i] =\n        log(spectrum[i] * aperiodic_ratio[i]) / 2.0;\n  else\n    for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n      minimum_phase->log_spectrum[i] = log(spectrum[i]) / 2.0;\n  GetMinimumPhaseSpectrum(minimum_phase);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      minimum_phase->minimum_phase_spectrum[i][0] *\n      forward_real_fft->spectrum[i][0] -\n      minimum_phase->minimum_phase_spectrum[i][1] *\n      forward_real_fft->spectrum[i][1];\n    inverse_real_fft->spectrum[i][1] =\n      minimum_phase->minimum_phase_spectrum[i][0] *\n      forward_real_fft->spectrum[i][1] +\n      minimum_phase->minimum_phase_spectrum[i][1] *\n      forward_real_fft->spectrum[i][0];\n  }\n  fft_execute(inverse_real_fft->inverse_fft);\n  fftshift(inverse_real_fft->waveform, fft_size, aperiodic_response);\n}\n\n//-----------------------------------------------------------------------------\n// RemoveDCComponent()\n//-----------------------------------------------------------------------------\nstatic void RemoveDCComponent(const double *periodic_response, int fft_size,\n    const double *dc_remover, double *new_periodic_response) {\n  double dc_component = 0.0;\n  for (int i = fft_size / 2; i < fft_size; ++i)\n    dc_component += periodic_response[i];\n  for (int i = 0; i < fft_size / 2; ++i)\n    new_periodic_response[i] = -dc_component * dc_remover[i];\n  for (int i = fft_size / 2; i < fft_size; ++i)\n    new_periodic_response[i] -= dc_component * dc_remover[i];\n}\n\n//-----------------------------------------------------------------------------\n// GetSpectrumWithFractionalTimeShift() calculates a periodic spectrum with\n// the fractional time shift under 1/fs.\n//-----------------------------------------------------------------------------\nstatic void GetSpectrumWithFractionalTimeShift(int fft_size,\n    double coefficient, const InverseRealFFT *inverse_real_fft) {\n  double re, im, re2, im2;\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    re = inverse_real_fft->spectrum[i][0];\n    im = inverse_real_fft->spectrum[i][1];\n    re2 = cos(coefficient * i);\n    im2 = sqrt(1.0 - re2 * re2);  // sin(pshift)\n\n    inverse_real_fft->spectrum[i][0] = re * re2 + im * im2;\n    inverse_real_fft->spectrum[i][1] = im * re2 - re * im2;\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetPeriodicResponse() calculates a periodic response.\n//-----------------------------------------------------------------------------\nstatic void GetPeriodicResponse(int fft_size, const double *spectrum,\n    const double *aperiodic_ratio, double current_vuv,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase, const double *dc_remover,\n    double fractional_time_shift, int fs, double *periodic_response) {\n  if (current_vuv <= 0.5 || aperiodic_ratio[0] > 0.999) {\n    for (int i = 0; i < fft_size; ++i) periodic_response[i] = 0.0;\n    return;\n  }\n\n  for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n    minimum_phase->log_spectrum[i] =\n      log(spectrum[i] * (1.0 - aperiodic_ratio[i]) +\n      world::kMySafeGuardMinimum) / 2.0;\n  GetMinimumPhaseSpectrum(minimum_phase);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      minimum_phase->minimum_phase_spectrum[i][0];\n    inverse_real_fft->spectrum[i][1] =\n      minimum_phase->minimum_phase_spectrum[i][1];\n  }\n\n  // apply fractional time delay of fractional_time_shift seconds\n  // using linear phase shift\n  double coefficient =\n    2.0 * world::kPi * fractional_time_shift * fs / fft_size;\n  GetSpectrumWithFractionalTimeShift(fft_size, coefficient, inverse_real_fft);\n\n  fft_execute(inverse_real_fft->inverse_fft);\n  fftshift(inverse_real_fft->waveform, fft_size, periodic_response);\n  RemoveDCComponent(periodic_response, fft_size, dc_remover,\n      periodic_response);\n}\n\nstatic void GetSpectralEnvelope(double current_time, double frame_period,\n    int f0_length, const double * const *spectrogram, int fft_size,\n    double *spectral_envelope) {\n  int current_frame_floor = MyMinInt(f0_length - 1,\n    static_cast<int>(floor(current_time / frame_period)));\n  int current_frame_ceil = MyMinInt(f0_length - 1,\n    static_cast<int>(ceil(current_time / frame_period)));\n  double interpolation = current_time / frame_period - current_frame_floor;\n\n  if (current_frame_floor == current_frame_ceil)\n    for (int i = 0; i <= fft_size / 2; ++i)\n      spectral_envelope[i] = fabs(spectrogram[current_frame_floor][i]);\n  else\n    for (int i = 0; i <= fft_size / 2; ++i)\n      spectral_envelope[i] =\n        (1.0 - interpolation) * fabs(spectrogram[current_frame_floor][i]) +\n        interpolation * fabs(spectrogram[current_frame_ceil][i]);\n}\n\nstatic void GetAperiodicRatio(double current_time, double frame_period,\n    int f0_length, const double * const *aperiodicity, int fft_size,\n    double *aperiodic_spectrum) {\n  int current_frame_floor = MyMinInt(f0_length - 1,\n    static_cast<int>(floor(current_time / frame_period)));\n  int current_frame_ceil = MyMinInt(f0_length - 1,\n    static_cast<int>(ceil(current_time / frame_period)));\n  double interpolation = current_time / frame_period - current_frame_floor;\n\n  if (current_frame_floor == current_frame_ceil)\n    for (int i = 0; i <= fft_size / 2; ++i)\n      aperiodic_spectrum[i] =\n        pow(GetSafeAperiodicity(aperiodicity[current_frame_floor][i]), 2.0);\n  else\n    for (int i = 0; i <= fft_size / 2; ++i)\n      aperiodic_spectrum[i] = pow((1.0 - interpolation) *\n          GetSafeAperiodicity(aperiodicity[current_frame_floor][i]) +\n          interpolation *\n          GetSafeAperiodicity(aperiodicity[current_frame_ceil][i]), 2.0);\n}\n\n//-----------------------------------------------------------------------------\n// GetOneFrameSegment() calculates a periodic and aperiodic response at a time.\n//-----------------------------------------------------------------------------\nstatic void GetOneFrameSegment(double current_vuv, int noise_size,\n    const double * const *spectrogram, int fft_size,\n    const double * const *aperiodicity, int f0_length, double frame_period,\n    double current_time, double fractional_time_shift, int fs,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase, const double *dc_remover,\n    double *response) {\n  double *aperiodic_response = new double[fft_size];\n  double *periodic_response = new double[fft_size];\n\n  double *spectral_envelope = new double[fft_size];\n  double *aperiodic_ratio = new double[fft_size];\n  GetSpectralEnvelope(current_time, frame_period, f0_length, spectrogram,\n      fft_size, spectral_envelope);\n  GetAperiodicRatio(current_time, frame_period, f0_length, aperiodicity,\n      fft_size, aperiodic_ratio);\n\n  // Synthesis of the periodic response\n  GetPeriodicResponse(fft_size, spectral_envelope, aperiodic_ratio,\n      current_vuv, inverse_real_fft, minimum_phase, dc_remover,\n      fractional_time_shift, fs, periodic_response);\n\n  // Synthesis of the aperiodic response\n  GetAperiodicResponse(noise_size, fft_size, spectral_envelope,\n      aperiodic_ratio, current_vuv, forward_real_fft,\n      inverse_real_fft, minimum_phase, aperiodic_response);\n\n  double sqrt_noise_size = sqrt(static_cast<double>(noise_size));\n  for (int i = 0; i < fft_size; ++i)\n    response[i] =\n      (periodic_response[i] * sqrt_noise_size + aperiodic_response[i]) /\n      fft_size;\n\n  delete[] spectral_envelope;\n  delete[] aperiodic_ratio;\n  delete[] periodic_response;\n  delete[] aperiodic_response;\n}\n\nstatic void GetTemporalParametersForTimeBase(const double *f0, int f0_length,\n    int fs, int y_length, double frame_period, double lowest_f0,\n    double *time_axis, double *coarse_time_axis, double *coarse_f0,\n    double *coarse_vuv) {\n  for (int i = 0; i < y_length; ++i)\n    time_axis[i] = i / static_cast<double>(fs);\n  // the array 'coarse_time_axis' is supposed to have 'f0_length + 1' positions\n  for (int i = 0; i < f0_length; ++i) {\n    coarse_time_axis[i] = i * frame_period;\n    coarse_f0[i] = f0[i] < lowest_f0 ? 0.0 : f0[i];\n    coarse_vuv[i] = coarse_f0[i] == 0.0 ? 0.0 : 1.0;\n  }\n  coarse_time_axis[f0_length] = f0_length * frame_period;\n  coarse_f0[f0_length] = coarse_f0[f0_length - 1] * 2 -\n    coarse_f0[f0_length - 2];\n  coarse_vuv[f0_length] = coarse_vuv[f0_length - 1] * 2 -\n    coarse_vuv[f0_length - 2];\n}\n\nstatic int GetPulseLocationsForTimeBase(const double *interpolated_f0,\n    const double *time_axis, int y_length, int fs, double *pulse_locations,\n    int *pulse_locations_index, double *pulse_locations_time_shift) {\n  double *total_phase = new double[y_length];\n  double *wrap_phase = new double[y_length];\n  double *wrap_phase_abs = new double[y_length - 1];\n  total_phase[0] = 2.0 * world::kPi * interpolated_f0[0] / fs;\n  wrap_phase[0] = fmod(total_phase[0], 2.0 * world::kPi);\n  for (int i = 1; i < y_length; ++i) {\n    total_phase[i] = total_phase[i - 1] +\n      2.0 * world::kPi * interpolated_f0[i] / fs;\n    wrap_phase[i] = fmod(total_phase[i], 2.0 * world::kPi);\n    wrap_phase_abs[i - 1] = fabs(wrap_phase[i] - wrap_phase[i - 1]);\n  }\n\n  int number_of_pulses = 0;\n  for (int i = 0; i < y_length - 1; ++i) {\n    if (wrap_phase_abs[i] > world::kPi) {\n      pulse_locations[number_of_pulses] = time_axis[i];\n      pulse_locations_index[number_of_pulses] = i;\n\n      // calculate the time shift in seconds between exact fractional pulse\n      // position and the integer pulse position (sample i)\n      // as we don't have access to the exact pulse position, we infer it\n      // from the point between sample i and sample i + 1 where the\n      // accummulated phase cross a multiple of 2pi\n      // this point is found by solving y1 + x * (y2 - y1) = 0 for x, where y1\n      // and y2 are the phases corresponding to sample i and i + 1, offset so\n      // they cross zero; x >= 0\n      double y1 = wrap_phase[i] - 2.0 * world::kPi;\n      double y2 = wrap_phase[i + 1];\n      double x = -y1 / (y2 - y1);\n      pulse_locations_time_shift[number_of_pulses] = x / fs;\n\n      ++number_of_pulses;\n    }\n  }\n\n  delete[] wrap_phase_abs;\n  delete[] wrap_phase;\n  delete[] total_phase;\n\n  return number_of_pulses;\n}\n\nstatic int GetTimeBase(const double *f0, int f0_length, int fs,\n    double frame_period, int y_length, double lowest_f0,\n    double *pulse_locations, int *pulse_locations_index,\n    double *pulse_locations_time_shift, double *interpolated_vuv) {\n  double *time_axis = new double[y_length];\n  double *coarse_time_axis = new double[f0_length + 1];\n  double *coarse_f0 = new double[f0_length + 1];\n  double *coarse_vuv = new double[f0_length + 1];\n  GetTemporalParametersForTimeBase(f0, f0_length, fs, y_length, frame_period,\n      lowest_f0, time_axis, coarse_time_axis, coarse_f0, coarse_vuv);\n  double *interpolated_f0 = new double[y_length];\n  interp1(coarse_time_axis, coarse_f0, f0_length + 1,\n      time_axis, y_length, interpolated_f0);\n  interp1(coarse_time_axis, coarse_vuv, f0_length + 1,\n      time_axis, y_length, interpolated_vuv);\n\n  for (int i = 0; i < y_length; ++i) {\n    interpolated_vuv[i] = interpolated_vuv[i] > 0.5 ? 1.0 : 0.0;\n    interpolated_f0[i] =\n      interpolated_vuv[i] == 0.0 ? world::kDefaultF0 : interpolated_f0[i];\n  }\n\n  int number_of_pulses = GetPulseLocationsForTimeBase(interpolated_f0,\n      time_axis, y_length, fs, pulse_locations, pulse_locations_index,\n      pulse_locations_time_shift);\n\n  delete[] coarse_vuv;\n  delete[] coarse_f0;\n  delete[] coarse_time_axis;\n  delete[] time_axis;\n  delete[] interpolated_f0;\n\n  return number_of_pulses;\n}\n\nstatic void GetDCRemover(int fft_size, double *dc_remover) {\n  double dc_component = 0.0;\n  for (int i = 0; i < fft_size / 2; ++i) {\n    dc_remover[i] = 0.5 -\n      0.5 * cos(2.0 * world::kPi * (i + 1.0) / (1.0 + fft_size));\n    dc_remover[fft_size - i - 1] = dc_remover[i];\n    dc_component += dc_remover[i] * 2.0;\n  }\n  for (int i = 0; i < fft_size / 2; ++i) {\n    dc_remover[i] /= dc_component;\n    dc_remover[fft_size - i - 1] = dc_remover[i];\n  }\n}\n\n}  // namespace\n\nvoid Synthesis(const double *f0, int f0_length,\n    const double * const *spectrogram, const double * const *aperiodicity,\n    int fft_size, double frame_period, int fs, int y_length, double *y) {\n  randn_reseed();\n\n  double *impulse_response = new double[fft_size];\n\n  for (int i = 0; i < y_length; ++i) y[i] = 0.0;\n\n  MinimumPhaseAnalysis minimum_phase = {0};\n  InitializeMinimumPhaseAnalysis(fft_size, &minimum_phase);\n  InverseRealFFT inverse_real_fft = {0};\n  InitializeInverseRealFFT(fft_size, &inverse_real_fft);\n  ForwardRealFFT forward_real_fft = {0};\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n\n  double *pulse_locations = new double[y_length];\n  int *pulse_locations_index = new int[y_length];\n  double *pulse_locations_time_shift = new double[y_length];\n  double *interpolated_vuv = new double[y_length];\n  int number_of_pulses = GetTimeBase(f0, f0_length, fs, frame_period / 1000.0,\n      y_length, fs / fft_size + 1.0, pulse_locations, pulse_locations_index,\n      pulse_locations_time_shift, interpolated_vuv);\n\n  double *dc_remover = new double[fft_size];\n  GetDCRemover(fft_size, dc_remover);\n\n  frame_period /= 1000.0;\n  int noise_size;\n  int index, offset, lower_limit, upper_limit;\n  for (int i = 0; i < number_of_pulses; ++i) {\n    noise_size = pulse_locations_index[MyMinInt(number_of_pulses - 1, i + 1)] -\n      pulse_locations_index[i];\n\n    GetOneFrameSegment(interpolated_vuv[pulse_locations_index[i]], noise_size,\n        spectrogram, fft_size, aperiodicity, f0_length, frame_period,\n        pulse_locations[i], pulse_locations_time_shift[i], fs,\n        &forward_real_fft, &inverse_real_fft, &minimum_phase, dc_remover,\n        impulse_response);\n    offset = pulse_locations_index[i] - fft_size / 2 + 1;\n    lower_limit = MyMaxInt(0, -offset);\n    upper_limit = MyMinInt(fft_size, y_length - offset);\n    for (int j = lower_limit; j < upper_limit; ++j) {\n      index = j + offset;\n      y[index] += impulse_response[j];\n    }\n  }\n\n  delete[] dc_remover;\n  delete[] pulse_locations;\n  delete[] pulse_locations_index;\n  delete[] pulse_locations_time_shift;\n  delete[] interpolated_vuv;\n\n  DestroyMinimumPhaseAnalysis(&minimum_phase);\n  DestroyInverseRealFFT(&inverse_real_fft);\n  DestroyForwardRealFFT(&forward_real_fft);\n\n  delete[] impulse_response;\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/synthesisrealtime.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Voice synthesis based on f0, spectrogram and aperiodicity.\n// This is an implementation for real-time applications.\n// Note: Several functions are same as those of synthesis.cpp.\n//\n// Caution: This is an implementation as a prototype.\n//          Specifications may change. There may be a bug.\n//\n// Caution: DC removal was re-implemented. However, this implementation is\n//          different from the implementation in synthesis.cpp. The sound\n//          quality is almost all the same in both implementations.\n//-----------------------------------------------------------------------------\n#include \"world/synthesisrealtime.h\"\n\n#include <math.h>\n#include <stdlib.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n\nstatic void GetNoiseSpectrum(int noise_size, int fft_size,\n    const ForwardRealFFT *forward_real_fft) {\n  double average = 0.0;\n  for (int i = 0; i < noise_size; ++i) {\n    forward_real_fft->waveform[i] = randn();\n    average += forward_real_fft->waveform[i];\n  }\n\n  average /= noise_size;\n  for (int i = 0; i < noise_size; ++i)\n    forward_real_fft->waveform[i] -= average;\n  for (int i = noise_size; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n}\n\n//-----------------------------------------------------------------------------\n// GetAperiodicResponse() calculates an aperiodic response.\n//-----------------------------------------------------------------------------\nstatic void GetAperiodicResponse(int noise_size, int fft_size,\n    const double *spectrum, const double *aperiodic_ratio, double current_vuv,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase, double *aperiodic_response) {\n  GetNoiseSpectrum(noise_size, fft_size, forward_real_fft);\n\n  if (current_vuv != 0.0)\n    for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n      minimum_phase->log_spectrum[i] =\n        log(spectrum[i] * aperiodic_ratio[i] +\n        world::kMySafeGuardMinimum) / 2.0;\n  else\n    for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n      minimum_phase->log_spectrum[i] = log(spectrum[i]) / 2.0;\n  GetMinimumPhaseSpectrum(minimum_phase);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      minimum_phase->minimum_phase_spectrum[i][0] *\n      forward_real_fft->spectrum[i][0] -\n      minimum_phase->minimum_phase_spectrum[i][1] *\n      forward_real_fft->spectrum[i][1];\n    inverse_real_fft->spectrum[i][1] =\n      minimum_phase->minimum_phase_spectrum[i][0] *\n      forward_real_fft->spectrum[i][1] +\n      minimum_phase->minimum_phase_spectrum[i][1] *\n      forward_real_fft->spectrum[i][0];\n  }\n  fft_execute(inverse_real_fft->inverse_fft);\n  fftshift(inverse_real_fft->waveform, fft_size, aperiodic_response);\n}\n\nstatic void ClearRingBuffer(int start, int end, WorldSynthesizer *synth) {\n  int pointer;\n  for (int i = start; i < end; ++i) {\n    pointer = i % synth->number_of_pointers;\n    synth->number_of_pulses[pointer] = 0;\n    if (synth->pulse_locations[pointer] != NULL) {\n      delete[] synth->pulse_locations[pointer];\n      synth->pulse_locations[pointer] = NULL;\n    }\n    if (synth->interpolated_vuv[pointer] != NULL) {\n      delete[] synth->interpolated_vuv[pointer];\n      synth->interpolated_vuv[pointer] = NULL;\n    }\n    if (synth->pulse_locations_index[pointer] != NULL) {\n      delete[] synth->pulse_locations_index[pointer];\n      synth->pulse_locations_index[pointer] = NULL;\n    }\n  }\n}\n\nstatic int SeekSynthesizer(double current_location, WorldSynthesizer *synth) {\n  int frame_number = static_cast<int>(current_location / synth->frame_period);\n\n  int tmp_pointer = synth->current_pointer2;\n  int tmp;\n  for (int i = 0; i < synth->head_pointer - synth->current_pointer2; ++i) {\n    tmp = (tmp_pointer + i) % synth->number_of_pointers;\n    if (synth->f0_origin[tmp] <= frame_number &&\n        frame_number < synth->f0_origin[tmp] + synth->f0_length[tmp]) {\n      tmp_pointer += i;\n      break;\n    }\n  }\n  ClearRingBuffer(synth->current_pointer2, tmp_pointer, synth);\n  synth->current_pointer2 = tmp_pointer;\n  return 1;\n}\n\nstatic void SearchPointer(int frame,  WorldSynthesizer *synth, int flag,\n    double **front, double **next) {\n  int pointer = synth->current_pointer2 % synth->number_of_pointers;\n  int index = -1;\n  for (int i = 0; i < synth->f0_length[pointer]; ++i)\n    if (synth->f0_origin[pointer] + i == frame) {\n      index = i;\n      break;\n    }\n\n  double ***tmp_pointer =\n    flag == 0 ? synth->spectrogram : synth->aperiodicity;\n\n  *front = tmp_pointer[pointer][index];\n  *next = index == synth->f0_length[pointer] - 1 ?\n    tmp_pointer[(synth->current_pointer2 + 1) %\n    synth->number_of_pointers][0] : tmp_pointer[pointer][index + 1];\n}\n\n//-----------------------------------------------------------------------------\n// RemoveDCComponent()\n//-----------------------------------------------------------------------------\nstatic void RemoveDCComponent(const double *periodic_response, int fft_size,\n    const double *dc_remover, double *new_periodic_response) {\n  double dc_component = 0.0;\n  for (int i = fft_size / 2; i < fft_size; ++i)\n    dc_component += periodic_response[i];\n  for (int i = 0; i < fft_size / 2; ++i)\n    new_periodic_response[i] = 0.0;\n  for (int i = fft_size / 2; i < fft_size; ++i)\n    new_periodic_response[i] -= dc_component * dc_remover[i - fft_size / 2];\n}\n\n//-----------------------------------------------------------------------------\n// GetPeriodicResponse() calculates an aperiodic response.\n//-----------------------------------------------------------------------------\nstatic void GetPeriodicResponse(int fft_size, const double *spectrum,\n    const double *aperiodic_ratio, double current_vuv,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase,\n    const double *dc_remover, double *periodic_response) {\n  if (current_vuv <= 0.5 || aperiodic_ratio[0] > 0.999) {\n    for (int i = 0; i < fft_size; ++i) periodic_response[i] = 0.0;\n    return;\n  }\n\n  for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n    minimum_phase->log_spectrum[i] =\n      log(spectrum[i] * (1.0 - aperiodic_ratio[i]) +\n      world::kMySafeGuardMinimum) / 2.0;\n  GetMinimumPhaseSpectrum(minimum_phase);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      minimum_phase->minimum_phase_spectrum[i][0];\n    inverse_real_fft->spectrum[i][1] =\n      minimum_phase->minimum_phase_spectrum[i][1];\n  }\n\n  fft_execute(inverse_real_fft->inverse_fft);\n  fftshift(inverse_real_fft->waveform, fft_size, periodic_response);\n  RemoveDCComponent(periodic_response, fft_size, dc_remover,\n      periodic_response);\n}\n\nstatic void GetSpectralEnvelope(double current_location,\n    WorldSynthesizer *synth, double *spectral_envelope) {\n  int current_frame_floor =\n    static_cast<int>(current_location / synth->frame_period);\n\n  int current_frame_ceil =\n    static_cast<int>(ceil(current_location / synth->frame_period));\n  double interpolation =\n    current_location / synth->frame_period - current_frame_floor;\n  double *front = NULL;\n  double *next = NULL;\n  SearchPointer(current_frame_floor, synth, 0, &front, &next);\n\n  if (current_frame_floor == current_frame_ceil)\n    for (int i = 0; i <= synth->fft_size / 2; ++i)\n      spectral_envelope[i] = fabs(front[i]);\n  else\n    for (int i = 0; i <= synth->fft_size / 2; ++i)\n      spectral_envelope[i] =\n      (1.0 - interpolation) * fabs(front[i]) + interpolation * fabs(next[i]);\n}\n\nstatic void GetAperiodicRatio(double current_location,\n    WorldSynthesizer *synth, double *aperiodic_spectrum) {\n  int current_frame_floor =\n    static_cast<int>(current_location / synth->frame_period);\n\n  int current_frame_ceil =\n    static_cast<int>(ceil(current_location / synth->frame_period));\n  double interpolation =\n    current_location / synth->frame_period - current_frame_floor;\n\n  double *front = NULL;\n  double *next = NULL;\n  SearchPointer(current_frame_floor, synth, 1, &front, &next);\n\n  if (current_frame_floor == current_frame_ceil)\n    for (int i = 0; i <= synth->fft_size / 2; ++i)\n      aperiodic_spectrum[i] = pow(GetSafeAperiodicity(front[i]), 2.0);\n  else\n    for (int i = 0; i <= synth->fft_size / 2; ++i)\n      aperiodic_spectrum[i] =\n        pow((1.0 - interpolation) * GetSafeAperiodicity(front[i]) +\n        interpolation * GetSafeAperiodicity(next[i]), 2.0);\n}\n\nstatic double GetCurrentVUV(int current_location, WorldSynthesizer *synth) {\n  double current_vuv = 0.0;\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n\n  int start_sample = MyMaxInt(0,\n    static_cast<int>(ceil((synth->f0_origin[pointer] - 1) *\n    synth->frame_period * synth->fs)));\n\n  current_vuv =\n    synth->interpolated_vuv[pointer][current_location - start_sample + 1];\n  return current_vuv;\n}\n\n//-----------------------------------------------------------------------------\n// GetOneFrameSegment() calculates a periodic and aperiodic response at a time.\n//-----------------------------------------------------------------------------\nstatic void GetOneFrameSegment(int noise_size, int current_location,\n    WorldSynthesizer *synth) {\n  double *aperiodic_response = new double[synth->fft_size];\n  double *periodic_response = new double[synth->fft_size];\n  double *spectral_envelope = new double[synth->fft_size];\n  double *aperiodic_ratio = new double[synth->fft_size];\n\n  double tmp_location = static_cast<double>(current_location) / synth->fs;\n  SeekSynthesizer(tmp_location, synth);\n  GetSpectralEnvelope(tmp_location, synth, spectral_envelope);\n  GetAperiodicRatio(tmp_location, synth, aperiodic_ratio);\n\n  double current_vuv = GetCurrentVUV(current_location, synth);\n\n  // Synthesis of the periodic response\n  GetPeriodicResponse(synth->fft_size, spectral_envelope, aperiodic_ratio,\n      current_vuv, &synth->inverse_real_fft, &synth->minimum_phase,\n      synth->dc_remover, periodic_response);\n\n  // Synthesis of the aperiodic response\n  GetAperiodicResponse(noise_size, synth->fft_size, spectral_envelope,\n      aperiodic_ratio, current_vuv, &synth->forward_real_fft,\n      &synth->inverse_real_fft, &synth->minimum_phase, aperiodic_response);\n\n  double sqrt_noise_size = sqrt(static_cast<double>(noise_size));\n  for (int i = 0; i < synth->fft_size; ++i)\n    synth->impulse_response[i] =\n    (periodic_response[i] * sqrt_noise_size + aperiodic_response[i]) /\n      synth->fft_size;\n\n  delete[] spectral_envelope;\n  delete[] aperiodic_ratio;\n  delete[] periodic_response;\n  delete[] aperiodic_response;\n}\n\nstatic void GetTemporalParametersForTimeBase(const double *f0, int f0_length,\n    WorldSynthesizer *synth, double *coarse_time_axis, double *coarse_f0,\n    double *coarse_vuv) {\n  int cumulative_frame = MyMaxInt(0, synth->cumulative_frame - f0_length);\n  coarse_f0[0] = synth->handoff_f0;\n  coarse_time_axis[0] = cumulative_frame * synth->frame_period;\n  coarse_vuv[0] = synth->handoff_f0 == 0 ? 0.0 : 1.0;\n  for (int i = 0; i < f0_length; ++i) {\n    coarse_time_axis[i + synth->handoff] =\n      (i + cumulative_frame + synth->handoff) * synth->frame_period;\n    coarse_f0[i + synth->handoff] = f0[i];\n    coarse_vuv[i + synth->handoff] = f0[i] == 0.0 ? 0.0 : 1.0;\n  }\n}\n\nstatic void GetPulseLocationsForTimeBase(const double *interpolated_f0,\n    const double *time_axis, int number_of_samples, double origin,\n    WorldSynthesizer *synth) {\n  double *total_phase = new double[number_of_samples + synth->handoff];\n  total_phase[0] = synth->handoff == 1 ? synth->handoff_phase :\n    2.0 * world::kPi * interpolated_f0[0] / synth->fs;\n\n  total_phase[1] = total_phase[0] + 2.0 * world::kPi *\n    interpolated_f0[0] / synth->fs;\n  for (int i = 1 + synth->handoff; i < number_of_samples + synth->handoff; ++i)\n    total_phase[i] = total_phase[i - 1] +\n      2.0 * world::kPi * interpolated_f0[i - synth->handoff] / synth->fs;\n  synth->handoff_phase = total_phase[number_of_samples - 1 + synth->handoff];\n\n  double *wrap_phase = new double[number_of_samples + synth->handoff];\n  for (int i = 0; i < number_of_samples + synth->handoff; ++i)\n    wrap_phase[i] = fmod(total_phase[i], 2.0 * world::kPi);\n\n  double *wrap_phase_abs = new double[number_of_samples + synth->handoff];\n  for (int i = 0; i < number_of_samples - 1 + synth->handoff; ++i)\n    wrap_phase_abs[i] = fabs(wrap_phase[i + 1] - wrap_phase[i]);\n\n  int pointer = synth->head_pointer % synth->number_of_pointers;\n  int number_of_pulses = 0;\n  for (int i = 0; i < number_of_samples - 1 + synth->handoff; ++i)\n    if (wrap_phase_abs[i] > world::kPi) {\n      synth->pulse_locations[pointer][number_of_pulses] =\n        time_axis[i] - static_cast<double>(synth->handoff) / synth->fs;\n      synth->pulse_locations_index[pointer][number_of_pulses] =\n        matlab_round(synth->pulse_locations[pointer][number_of_pulses] *\n            synth->fs);\n      ++number_of_pulses;\n    }\n  synth->number_of_pulses[pointer] = number_of_pulses;\n\n  if (number_of_pulses != 0)\n    synth->last_location =\n      synth->pulse_locations_index[pointer][number_of_pulses - 1];\n  delete[] wrap_phase_abs;\n  delete[] wrap_phase;\n  delete[] total_phase;\n}\n\nstatic void GetTimeBase(const double *f0, int f0_length, int start_sample,\n    int number_of_samples, WorldSynthesizer *synth) {\n  double *coarse_time_axis = new double[f0_length + synth->handoff];\n  double *coarse_f0 = new double[f0_length + synth->handoff];\n  double *coarse_vuv = new double[f0_length + synth->handoff];\n\n  GetTemporalParametersForTimeBase(f0, f0_length, synth,\n      coarse_time_axis, coarse_f0, coarse_vuv);\n\n  double *interpolated_f0 = new double[number_of_samples];\n  double *time_axis = new double[number_of_samples];\n\n  for (int i = 0; i < number_of_samples; ++i)\n    time_axis[i] = (i + start_sample) / static_cast<double>(synth->fs);\n\n  int pointer = synth->head_pointer % synth->number_of_pointers;\n  interp1(coarse_time_axis, coarse_f0, f0_length + synth->handoff, time_axis,\n    number_of_samples, interpolated_f0);\n  interp1(coarse_time_axis, coarse_vuv, f0_length + synth->handoff, time_axis,\n    number_of_samples, synth->interpolated_vuv[pointer]);\n  for (int i = 0; i < number_of_samples; ++i) {\n    synth->interpolated_vuv[pointer][i] =\n      synth->interpolated_vuv[pointer][i] > 0.5 ? 1.0 : 0.0;\n    interpolated_f0[i] =\n      synth->interpolated_vuv[pointer][i] == 0.0 ?\n      world::kDefaultF0 : interpolated_f0[i];\n  }\n\n  GetPulseLocationsForTimeBase(interpolated_f0, time_axis, number_of_samples,\n      coarse_time_axis[0], synth);\n\n  synth->handoff_f0 = interpolated_f0[number_of_samples - 1];\n  delete[] time_axis;\n  delete[] interpolated_f0;\n  delete[] coarse_time_axis;\n  delete[] coarse_f0;\n  delete[] coarse_vuv;\n}\n\nstatic int GetNextPulseLocationIndex(WorldSynthesizer *synth) {\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n  if (synth->i < synth->number_of_pulses[pointer] - 1)\n    return synth->pulse_locations_index[pointer][synth->i + 1];\n  else if (synth->current_pointer == synth->head_pointer - 1)\n    return 0;\n\n  for (int i = 1; i < synth->number_of_pointers; ++i) {\n    pointer = (i + synth->current_pointer) % synth->number_of_pointers;\n    if (synth->number_of_pulses[pointer] != 0)\n      return synth->pulse_locations_index[pointer][0];\n  }\n  return 0;\n}\n\nstatic int UpdateSynthesizer(int current_location, WorldSynthesizer *synth) {\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n  if (synth->i < synth->number_of_pulses[pointer] - 1) {\n    synth->i++;\n    return 1;\n  } else {\n    if (synth->current_pointer == synth->head_pointer - 1) return 0;\n  }\n\n  for (int i = 1; i < synth->number_of_pointers; ++i) {\n    pointer = (i + synth->current_pointer) % synth->number_of_pointers;\n    if (synth->number_of_pulses[pointer] != 0) {\n      synth->i = 0;\n      synth->current_pointer += i;\n      return 1;\n    }\n  }\n  return 0;\n}\n\nstatic int CheckSynthesizer(WorldSynthesizer *synth) {\n  if (synth->synthesized_sample + synth->buffer_size >= synth->last_location)\n    return 0;\n\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n  while (synth->number_of_pulses[pointer] == 0) {\n    if (synth->current_pointer == synth->head_pointer) break;\n    synth->current_pointer++;\n    pointer = synth->current_pointer % synth->number_of_pointers;\n  }\n  return 1;\n}\n\nstatic void GetDCRemover(int fft_size, double *dc_remover) {\n  double dc_component = 0.0;\n  for (int i = 0; i < fft_size / 2; ++i) {\n    dc_remover[i] = 0.5 -\n      0.5 * cos(2.0 * world::kPi * (i + 1.0) / (1.0 + fft_size));\n    dc_remover[fft_size - i - 1] = dc_remover[i];\n    dc_component += dc_remover[i] * 2.0;\n  }\n  for (int i = 0; i < fft_size / 2; ++i) {\n    dc_remover[i] /= dc_component;\n    dc_remover[fft_size - i - 1] = dc_remover[i];\n  }\n}\n\n}  // namespace\n\nvoid InitializeSynthesizer(int fs, double frame_period, int fft_size,\n    int buffer_size, int number_of_pointers, WorldSynthesizer *synth) {\n  // Set basic parameters\n  synth->fs = fs;\n  synth->frame_period = frame_period / 1000.0;\n  synth->buffer_size = buffer_size;\n  synth->number_of_pointers = number_of_pointers;\n  synth->fft_size = fft_size;\n\n  // Memory allocations\n  synth->f0_length = new int[number_of_pointers];\n  synth->spectrogram = new double**[number_of_pointers];\n  synth->aperiodicity = new double**[number_of_pointers];\n  synth->interpolated_vuv = new double*[number_of_pointers];\n  synth->pulse_locations = new double*[number_of_pointers];\n  synth->pulse_locations_index = new int*[number_of_pointers];\n  synth->number_of_pulses = new int[number_of_pointers];\n  synth->f0_origin = new int[number_of_pointers];\n  for (int i = 0; i < synth->number_of_pointers; ++i) {\n    synth->interpolated_vuv[i] = NULL;\n    synth->pulse_locations[i] = NULL;\n    synth->pulse_locations_index[i] = NULL;\n  }\n\n  synth->buffer = new double[buffer_size * 2 + fft_size];\n  synth->impulse_response = new double[synth->fft_size];\n  synth->dc_remover = new double[synth->fft_size / 2];\n\n  // Initilize internal parameters\n  RefreshSynthesizer(synth);\n\n  InitializeMinimumPhaseAnalysis(fft_size, &synth->minimum_phase);\n  InitializeInverseRealFFT(fft_size, &synth->inverse_real_fft);\n  InitializeForwardRealFFT(fft_size, &synth->forward_real_fft);\n}\n\nint AddParameters(double *f0, int f0_length, double **spectrogram,\n    double **aperiodicity, WorldSynthesizer *synth) {\n  if (synth->head_pointer - synth->current_pointer2 ==\n    synth->number_of_pointers)\n    return 0;  // Since the queue is full, we cannot add the parameters.\n  int pointer = synth->head_pointer % synth->number_of_pointers;\n  synth->f0_length[pointer] = f0_length;\n  synth->f0_origin[pointer] = synth->cumulative_frame + 1;\n  synth->cumulative_frame += f0_length;\n\n  synth->spectrogram[pointer] = spectrogram;\n  synth->aperiodicity[pointer] = aperiodicity;\n  if (synth->cumulative_frame < 1) {\n    synth->handoff_f0 = f0[f0_length - 1];\n    synth->number_of_pulses[pointer] = 0;\n    synth->head_pointer++;\n    synth->handoff = 1;\n    return 1;\n  }\n\n  int start_sample =\n    MyMaxInt(0, static_cast<int>(ceil((synth->cumulative_frame - f0_length) *\n      synth->frame_period * synth->fs)));\n  int end_sample =\n    static_cast<int>(ceil((synth->cumulative_frame) *\n      synth->frame_period * synth->fs));\n  int number_of_samples = end_sample - start_sample;\n\n  // Memory allocation\n  synth->interpolated_vuv[pointer] = new double[number_of_samples + 1];\n  synth->pulse_locations[pointer] = new double[number_of_samples];\n  synth->pulse_locations_index[pointer] = new int[number_of_samples];\n\n  GetTimeBase(f0, f0_length, start_sample, number_of_samples, synth);\n\n  synth->handoff_f0 = f0[f0_length - 1];\n  synth->head_pointer++;\n  synth->handoff = 1;\n  return 1;\n}\n\nvoid RefreshSynthesizer(WorldSynthesizer *synth) {\n  ClearRingBuffer(0, synth->number_of_pointers, synth);\n  synth->handoff_phase = 0;\n  synth->handoff_f0 = 0;\n  synth->cumulative_frame = -1;\n  synth->last_location = 0;\n\n  synth->current_pointer = 0;\n  synth->current_pointer2 = 0;\n  synth->head_pointer = 0;\n  synth->handoff = 0;\n\n  synth->i = 0;\n  synth->current_frame = 0;\n\n  synth->synthesized_sample = 0;\n\n  for (int i = 0; i < synth->buffer_size * 2 + synth->fft_size; ++i)\n    synth->buffer[i] = 0;\n  GetDCRemover(synth->fft_size / 2, synth->dc_remover);\n}\n\nvoid DestroySynthesizer(WorldSynthesizer *synth) {\n  RefreshSynthesizer(synth);\n  delete[] synth->f0_length;\n\n  delete[] synth->spectrogram;\n  delete[] synth->aperiodicity;\n\n  delete[] synth->buffer;\n  delete[] synth->impulse_response;\n  delete[] synth->dc_remover;\n\n  delete[] synth->interpolated_vuv;\n  delete[] synth->pulse_locations;\n  delete[] synth->pulse_locations_index;\n  delete[] synth->number_of_pulses;\n  delete[] synth->f0_origin;\n\n  DestroyMinimumPhaseAnalysis(&synth->minimum_phase);\n  DestroyInverseRealFFT(&synth->inverse_real_fft);\n  DestroyForwardRealFFT(&synth->forward_real_fft);\n}\n\nint IsLocked(WorldSynthesizer *synth) {\n  int judge = 0;\n  if (synth->head_pointer - synth->current_pointer2 ==\n      synth->number_of_pointers)\n    judge++;\n  if (synth->synthesized_sample + synth->buffer_size >= synth->last_location)\n    judge++;\n\n  return judge == 2 ? 1 : 0;\n}\n\nint Synthesis2(WorldSynthesizer *synth) {\n  if (CheckSynthesizer(synth) == 0)\n    return 0;\n  for (int i = 0; i < synth->buffer_size + synth->fft_size; ++i)\n    synth->buffer[i] = synth->buffer[i + synth->buffer_size];\n\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n  int noise_size, offset, tmp, index;\n  int current_location = synth->pulse_locations_index[pointer][synth->i];\n  while (current_location < synth->synthesized_sample + synth->buffer_size) {\n    tmp = GetNextPulseLocationIndex(synth);\n    noise_size = tmp - current_location;\n\n    GetOneFrameSegment(noise_size, current_location, synth);\n    offset =\n      current_location - synth->synthesized_sample - synth->fft_size / 2 + 1;\n    for (int i = MyMaxInt(0, -offset); i < synth->fft_size; ++i) {\n      index = i + offset;\n      synth->buffer[index] += synth->impulse_response[i];\n    }\n    current_location = tmp;\n    UpdateSynthesizer(current_location, synth);\n  }\n  synth->synthesized_sample += synth->buffer_size;\n  SeekSynthesizer(synth->synthesized_sample, synth);\n  return 1;\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/cheaptrick.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_CHEAPTRICK_H_\n#define WORLD_CHEAPTRICK_H_\n\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Struct for CheapTrick\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double q1;\n  double f0_floor;\n  int fft_size;\n} CheapTrickOption;\n\n//-----------------------------------------------------------------------------\n// CheapTrick() calculates the spectrogram that consists of spectral envelopes\n// estimated by CheapTrick.\n//\n// Input:\n//   x                  : Input signal\n//   x_length           : Length of x\n//   fs                 : Sampling frequency\n//   temporal_positions : Time axis\n//   f0                 : F0 contour\n//   f0_length          : Length of F0 contour\n//   option             : Struct to order the parameter for CheapTrick\n//\n// Output:\n//   spectrogram        : Spectrogram estimated by CheapTrick.\n//-----------------------------------------------------------------------------\nvoid CheapTrick(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    const CheapTrickOption *option, double **spectrogram);\n\n//-----------------------------------------------------------------------------\n// InitializeCheapTrickOption allocates the memory to the struct and sets the\n// default parameters.\n//\n// Input:\n//   fs : Sampling frequency\n//\n// Output:\n//   option   : Struct for the optional parameter\n//-----------------------------------------------------------------------------\nvoid InitializeCheapTrickOption(int fs, CheapTrickOption *option);\n\n//-----------------------------------------------------------------------------\n// GetFFTSizeForCheapTrick() calculates the FFT size based on the sampling\n// frequency and the lower limit of f0 (kFloorF0 defined in constantnumbers.h).\n//\n// Input:\n//   fs : Sampling frequency\n//   option : Option struct containing the lower f0 limit\n//\n// Output:\n//   FFT size\n//-----------------------------------------------------------------------------\nint GetFFTSizeForCheapTrick(int fs, const CheapTrickOption *option);\n\n//-----------------------------------------------------------------------------\n// GetF0FloorForCheapTrick() calculates actual lower f0 limit for CheapTrick\n// based on the sampling frequency and FFT size used. Whenever f0 is below\n// this threshold the spectrum will be analyzed as if the frame is unvoiced\n// (using kDefaultF0 defined in constantnumbers.h).\n//\n// Input:\n//   fs : Sampling frequency\n//   fft_size : FFT size\n//\n// Output:\n//   Lower f0 limit (Hz)\n//-----------------------------------------------------------------------------\ndouble GetF0FloorForCheapTrick(int fs, int fft_size);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_CHEAPTRICK_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/codec.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2017 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_CODEC_H_\n#define WORLD_CODEC_H_\n\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// GetNumberOfAperiodicities provides the number of dimensions for aperiodicity\n// coding. It is determined by only fs.\n//\n// Input:\n//   fs       : Sampling frequency\n//\n// Output:\n//   Number of aperiodicities\n//-----------------------------------------------------------------------------\nint GetNumberOfAperiodicities(int fs);\n\n//-----------------------------------------------------------------------------\n// CodeAperiodicity codes the aperiodicity. The number of dimensions is\n// determined by fs.\n//\n// Input:\n//   aperiodicity       : Aperiodicity before coding\n//   f0_length          : Length of F0 contour\n//   fs                 : Sampling frequency\n//   fft_size           : FFT size\n//\n// Output:\n//   coded_aperiodicity : Coded aperiodicity\n//-----------------------------------------------------------------------------\nvoid CodeAperiodicity(const double * const *aperiodicity, int f0_length,\n  int fs, int fft_size, double **coded_aperiodicity);\n\n//-----------------------------------------------------------------------------\n// DecodeAperiodicity decodes the coded aperiodicity.\n//\n// Input:\n//   coded_aperiodicity : Coded aperiodicity\n//   f0_length          : Length of F0 contour\n//   fs                 : Sampling frequency\n//   fft_size           : FFT size\n//\n// Output:\n//   aperiodicity       : Decoded aperiodicity\n//-----------------------------------------------------------------------------\nvoid DecodeAperiodicity(const double * const *coded_aperiodicity,\n  int f0_length, int fs, int fft_size, double **aperiodicity);\n\n//-----------------------------------------------------------------------------\n// CodeSpectralEnvelope codes the spectral envelope.\n//\n// Input:\n//   aperiodicity         : Aperiodicity before coding\n//   f0_length            : Length of F0 contour\n//   fs                   : Sampling frequency\n//   fft_size             : FFT size\n//   number_of_dimensions : Parameter for compression\n//\n// Output:\n//   coded_spectral_envelope\n//-----------------------------------------------------------------------------\nvoid CodeSpectralEnvelope(const double * const *spectrogram, int f0_length,\n  int fs, int fft_size, int number_of_dimensions,\n  double **coded_spectral_envelope);\n\n//-----------------------------------------------------------------------------\n// DecodeSpectralEnvelope decodes the coded spectral envelope.\n//\n// Input:\n//   coded_aperiodicity   : Coded aperiodicity\n//   f0_length            : Length of F0 contour\n//   fs                   : Sampling frequency\n//   fft_size             : FFT size\n//   number_of_dimensions : Parameter for compression\n//\n// Output:\n//   spectrogram\n//-----------------------------------------------------------------------------\nvoid DecodeSpectralEnvelope(const double * const *coded_spectral_envelope,\n  int f0_length, int fs, int fft_size, int number_of_dimensions,\n  double **spectrogram);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_CODEC_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/common.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_COMMON_H_\n#define WORLD_COMMON_H_\n\n#include \"fft.h\"\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Structs on FFT\n//-----------------------------------------------------------------------------\n// Forward FFT in the real sequence\ntypedef struct {\n  int fft_size;\n  double *waveform;\n  fft_complex *spectrum;\n  fft_plan forward_fft;\n} ForwardRealFFT;\n\n// Inverse FFT in the real sequence\ntypedef struct {\n  int fft_size;\n  double *waveform;\n  fft_complex *spectrum;\n  fft_plan inverse_fft;\n} InverseRealFFT;\n\n// Inverse FFT in the complex sequence\ntypedef struct {\n  int fft_size;\n  fft_complex *input;\n  fft_complex *output;\n  fft_plan inverse_fft;\n} InverseComplexFFT;\n\n// Minimum phase analysis from logarithmic power spectrum\ntypedef struct {\n  int fft_size;\n  double *log_spectrum;\n  fft_complex *minimum_phase_spectrum;\n  fft_complex *cepstrum;\n  fft_plan inverse_fft;\n  fft_plan forward_fft;\n} MinimumPhaseAnalysis;\n\n//-----------------------------------------------------------------------------\n// GetSuitableFFTSize() calculates the suitable FFT size.\n// The size is defined as the minimum length whose length is longer than\n// the input sample.\n//\n// Input:\n//   sample : Length of the input signal\n//\n// Output:\n//   Suitable FFT size\n//-----------------------------------------------------------------------------\nint GetSuitableFFTSize(int sample);\n\n//-----------------------------------------------------------------------------\n// These four functions are simple max() and min() function\n// for \"int\" and \"double\" type.\n//-----------------------------------------------------------------------------\ninline int MyMaxInt(int x, int y) {\n  return x > y ? x : y;\n}\n\ninline double MyMaxDouble(double x, double y) {\n  return x > y ? x : y;\n}\n\ninline int MyMinInt(int x, int y) {\n  return x < y ? x : y;\n}\n\ninline double MyMinDouble(double x, double y) {\n  return x < y ? x : y;\n}\n\n//-----------------------------------------------------------------------------\n// These functions are used in at least two different .cpp files\n\n//-----------------------------------------------------------------------------\n// DCCorrection interpolates the power under f0 Hz\n// and is used in CheapTrick() and D4C().\n//-----------------------------------------------------------------------------\nvoid DCCorrection(const double *input, double current_f0, int fs, int fft_size,\n    double *output);\n\n//-----------------------------------------------------------------------------\n// LinearSmoothing() carries out the spectral smoothing by rectangular window\n// whose length is width Hz and is used in CheapTrick() and D4C().\n//-----------------------------------------------------------------------------\nvoid LinearSmoothing(const double *input, double width, int fs, int fft_size,\n    double *output);\n\n//-----------------------------------------------------------------------------\n// NuttallWindow() calculates the coefficients of Nuttall window whose length\n// is y_length and is used in Dio(), Harvest() and D4C().\n//-----------------------------------------------------------------------------\nvoid NuttallWindow(int y_length, double *y);\n\n//-----------------------------------------------------------------------------\n// GetSafeAperiodicity() limit the range of aperiodicity from 0.001 to\n// 0.999999999999 (1 - world::kMySafeGuardMinimum).\n//-----------------------------------------------------------------------------\ninline double GetSafeAperiodicity(double x) {\n  return MyMaxDouble(0.001, MyMinDouble(0.999999999999, x));\n}\n\n//-----------------------------------------------------------------------------\n// These functions are used to speed up the processing.\n// Forward FFT\nvoid InitializeForwardRealFFT(int fft_size, ForwardRealFFT *forward_real_fft);\nvoid DestroyForwardRealFFT(ForwardRealFFT *forward_real_fft);\n\n// Inverse FFT\nvoid InitializeInverseRealFFT(int fft_size, InverseRealFFT *inverse_real_fft);\nvoid DestroyInverseRealFFT(InverseRealFFT *inverse_real_fft);\n\n// Inverse FFT (Complex)\nvoid InitializeInverseComplexFFT(int fft_size,\n  InverseComplexFFT *inverse_complex_fft);\nvoid DestroyInverseComplexFFT(InverseComplexFFT *inverse_complex_fft);\n\n// Minimum phase analysis (This analysis uses FFT)\nvoid InitializeMinimumPhaseAnalysis(int fft_size,\n  MinimumPhaseAnalysis *minimum_phase);\nvoid GetMinimumPhaseSpectrum(const MinimumPhaseAnalysis *minimum_phase);\nvoid DestroyMinimumPhaseAnalysis(MinimumPhaseAnalysis *minimum_phase);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_COMMON_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/constantnumbers.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// This header file only defines constant numbers used for several function.\n//-----------------------------------------------------------------------------\n#ifndef WORLD_CONSTANT_NUMBERS_H_\n#define WORLD_CONSTANT_NUMBERS_H_\n\nnamespace world {\n  // for Dio()\n  const double kCutOff = 50.0;\n\n  // for StoneMask()\n  const double kFloorF0StoneMask = 40.0;\n\n  const double kPi = 3.1415926535897932384;\n  const double kMySafeGuardMinimum = 0.000000000001;\n  const double kEps = 0.00000000000000022204460492503131;\n  const double kFloorF0 = 71.0;\n  const double kCeilF0 = 800.0;\n  const double kDefaultF0 = 500.0;\n  const double kLog2 = 0.69314718055994529;\n  // Maximum standard deviation not to be selected as a best f0.\n  const double kMaximumValue = 100000.0;\n\n  // Note to me (fs: 48000)\n  // 71 Hz is the limit to maintain the FFT size at 2048.\n  // If we use 70 Hz as FLOOR_F0, the FFT size of 4096 is required.\n\n  // for D4C()\n  const int kHanning = 1;\n  const int kBlackman = 2;\n  const double kFrequencyInterval = 3000.0;\n  const double kUpperLimit = 15000.0;\n  const double kThreshold = 0.85;\n  const double kFloorF0D4C = 47.0;\n\n  // for Codec (Mel scale)\n  // S. Stevens & J. Volkmann,\n  // The Relation of Pitch to Frequency: A Revised Scale,\n  // American Journal of Psychology, vol. 53, no. 3, pp. 329-353, 1940.\n  const double kM0 = 1127.01048;\n  const double kF0 = 700.0;\n  const double kFloorFrequency = 40.0;\n  const double kCeilFrequency = 20000.0;\n\n}  // namespace world\n\n#endif  // WORLD_CONSTANT_NUMBERS_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/d4c.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_D4C_H_\n#define WORLD_D4C_H_\n\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Struct for D4C\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double threshold;\n} D4COption;\n\n//-----------------------------------------------------------------------------\n// D4C() calculates the aperiodicity estimated by D4C.\n//\n// Input:\n//   x                  : Input signal\n//   x_length           : Length of x\n//   fs                 : Sampling frequency\n//   temporal_positions : Time axis\n//   f0                 : F0 contour\n//   f0_length          : Length of F0 contour\n//   fft_size           : Number of samples of the aperiodicity in one frame.\n//                      : It is given by the equation fft_size / 2 + 1.\n// Output:\n//   aperiodicity  : Aperiodicity estimated by D4C.\n//-----------------------------------------------------------------------------\nvoid D4C(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    int fft_size, const D4COption *option, double **aperiodicity);\n\n//-----------------------------------------------------------------------------\n// InitializeD4COption allocates the memory to the struct and sets the\n// default parameters.\n//\n// Output:\n//   option   : Struct for the optional parameter.\n//-----------------------------------------------------------------------------\nvoid InitializeD4COption(D4COption *option);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_D4C_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/dio.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_DIO_H_\n#define WORLD_DIO_H_\n\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Struct for DIO\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double f0_floor;\n  double f0_ceil;\n  double channels_in_octave;\n  double frame_period;  // msec\n  int speed;  // (1, 2, ..., 12)\n  double allowed_range;  // Threshold used for fixing the F0 contour.\n} DioOption;\n\n//-----------------------------------------------------------------------------\n// DIO\n//\n// Input:\n//   x                    : Input signal\n//   x_length             : Length of x\n//   fs                   : Sampling frequency\n//   option               : Struct to order the parameter for DIO\n//\n// Output:\n//   temporal_positions   : Temporal positions.\n//   f0                   : F0 contour.\n//-----------------------------------------------------------------------------\nvoid Dio(const double *x, int x_length, int fs, const DioOption *option,\n  double *temporal_positions, double *f0);\n\n//-----------------------------------------------------------------------------\n// InitializeDioOption allocates the memory to the struct and sets the\n// default parameters.\n//\n// Output:\n//   option   : Struct for the optional parameter.\n//-----------------------------------------------------------------------------\nvoid InitializeDioOption(DioOption *option);\n\n//-----------------------------------------------------------------------------\n// GetSamplesForDIO() calculates the number of samples required for Dio().\n//\n// Input:\n//   fs             : Sampling frequency [Hz]\n//   x_length       : Length of the input signal [Sample].\n//   frame_period   : Frame shift [msec]\n//\n// Output:\n//   The number of samples required to store the results of Dio()\n//-----------------------------------------------------------------------------\nint GetSamplesForDIO(int fs, int x_length, double frame_period);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_DIO_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/fft.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// These functions and variables are defined to use FFT as well as FFTW\n// Please see fft.cpp to show the detailed information\n//-----------------------------------------------------------------------------\n#ifndef WORLD_FFT_H_\n#define WORLD_FFT_H_\n\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n// Commands for FFT (This is the same as FFTW)\n#define FFT_FORWARD 1\n#define FFT_BACKWARD 2\n#define FFT_ESTIMATE 3\n\n// Complex number for FFT\ntypedef double fft_complex[2];\n// Struct used for FFT\ntypedef struct {\n  int n;\n  int sign;\n  unsigned int flags;\n  fft_complex *c_in;\n  double *in;\n  fft_complex *c_out;\n  double *out;\n  double *input;\n  int *ip;\n  double *w;\n} fft_plan;\n\nfft_plan fft_plan_dft_1d(int n, fft_complex *in, fft_complex *out, int sign,\n  unsigned int flags);\nfft_plan fft_plan_dft_c2r_1d(int n, fft_complex *in, double *out,\n  unsigned int flags);\nfft_plan fft_plan_dft_r2c_1d(int n, double *in, fft_complex *out,\n  unsigned int flags);\nvoid fft_execute(fft_plan p);\nvoid fft_destroy_plan(fft_plan p);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_FFT_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/harvest.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_HARVEST_H_\n#define WORLD_HARVEST_H_\n\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Struct for Harvest\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double f0_floor;\n  double f0_ceil;\n  double frame_period;\n} HarvestOption;\n\n//-----------------------------------------------------------------------------\n// Harvest\n//\n// Input:\n//   x                    : Input signal\n//   x_length             : Length of x\n//   fs                   : Sampling frequency\n//   option               : Struct to order the parameter for Harvest\n//\n// Output:\n//   temporal_positions   : Temporal positions.\n//   f0                   : F0 contour.\n//-----------------------------------------------------------------------------\nvoid Harvest(const double *x, int x_length, int fs,\n  const HarvestOption *option, double *temporal_positions, double *f0);\n\n//-----------------------------------------------------------------------------\n// InitializeHarvestOption allocates the memory to the struct and sets the\n// default parameters.\n//\n// Output:\n//   option   : Struct for the optional parameter.\n//-----------------------------------------------------------------------------\nvoid InitializeHarvestOption(HarvestOption *option);\n\n//-----------------------------------------------------------------------------\n// GetSamplesForHarvest() calculates the number of samples required for\n// Harvest().\n//\n// Input:\n//   fs             : Sampling frequency [Hz]\n//   x_length       : Length of the input signal [Sample]\n//   frame_period   : Frame shift [msec]\n//\n// Output:\n//   The number of samples required to store the results of Harvest().\n//-----------------------------------------------------------------------------\nint GetSamplesForHarvest(int fs, int x_length, double frame_period);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_HARVEST_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/macrodefinitions.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright (c) 2008-2011 The Department of Arts and Culture,\n// The Government of the Republic of South Africa.\n//\n// Contributors:  Meraka Institute, CSIR, South Africa.\n//                Giulio Paci.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n//\n// MODIFIED: Giulio Paci\n// DATE    : 22 January 2016\n//\n// Some usefull macros and defines.\n//-----------------------------------------------------------------------------\n\n#ifndef WORLD_MACRODEFINITIONS_H_\n#define WORLD_MACRODEFINITIONS_H_\n\n//\n// @file macrodefinitions.h\n// Definitions of macros that are common to the whole World engine.\n//\n\n//\n// @ingroup WorldDefines\n// @defgroup WorldMacros System Macros\n// Definitions of macros that are common to the whole World engine.\n// @{\n//\n\n//\n// Defines\n//\n\n//\n// @def WORLD_BEGIN_C_DECLS\n// Start block for enclosing C code for inclusion in C++ programs.\n// This allows C++ programs to include the C header files of the World\n// engine. @code extern \"C\" { @endcode\n// @hideinitializer\n//\n\n//\n// @def WORLD_END_C_DECLS\n// End block for enclosing C code for inclusion in C++ programs.\n// This allows C++ programs to include the C header files of the World\n// engine. @code } @endcode\n// @hideinitializer\n//\n\n#undef  WORLD_BEGIN_C_DECLS\n#undef  WORLD_END_C_DECLS\n#ifdef __cplusplus\n#  define WORLD_BEGIN_C_DECLS extern \"C\" {\n#  define WORLD_END_C_DECLS }\n#else  // !__cplusplus\n#  define WORLD_BEGIN_C_DECLS\n#  define WORLD_END_C_DECLS\n#endif  // __cplusplus\n\n//\n// @def WORLD_API\n// @hideinitializer\n// Declares a symbol to be exported for shared library usage.\n//\n\n//\n// @def WORLD_LOCAL\n// @hideinitializer\n// Declares a symbol hidden from other libraries.\n//\n\n//\n// @def WORLD_PLUGIN_API\n// @hideinitializer\n// Declares a symbol to be exported for plug-in usage.\n//\n\n// Generic helper definitions for shared library support\n#if defined _WIN32 || defined __CYGWIN__\n#  define WORLD_HELPER_DLL_IMPORT __declspec(dllimport)\n#  define WORLD_HELPER_DLL_EXPORT __declspec(dllexport)\n#  define WORLD_HELPER_DLL_LOCAL\n#else  // ! defined _WIN32 || defined __CYGWIN__ || defined WORLD_WIN32\n#  if __GNUC__ >= 4\n#    define WORLD_HELPER_DLL_IMPORT __attribute__ ((visibility(\"default\")))\n#    define WORLD_HELPER_DLL_EXPORT __attribute__ ((visibility(\"default\")))\n#    define WORLD_HELPER_DLL_LOCAL  __attribute__ ((visibility(\"hidden\")))\n#  else  // ! __GNUC__ >= 4\n#    define WORLD_HELPER_DLL_IMPORT\n#    define WORLD_HELPER_DLL_EXPORT\n#    define WORLD_HELPER_DLL_LOCAL\n#  endif  // __GNUC__ >= 4\n#endif  // defined _WIN32 || defined __CYGWIN__ || defined WORLD_WIN32\n\n//\n// WORLD_LIBRARIES_EXPORTS\n// ----------------------\n// WORLD_LIBRARIES_EXPORTS should be defined when compiling a\n// shared/dynamic library.\n//\n// Now we use the generic helper definitions above to define\n// WORLD_API and WORLD_LOCAL. WORLD_API is used for the public API symbols.\n// It's either DLL imports or DLL exports (or does nothing for static build)\n// WORLD_LOCAL is used for non-api symbols.\n//\n// WORLD_SRC\n// ------------------\n// WORLD_SRC should be defined when building World (instead of just using it).\n//\n\n#ifdef WORLD_LIBRARIES_EXPORTS\n#  ifdef WORLD_SRC\n#    define WORLD_API WORLD_HELPER_DLL_EXPORT\n#  else  // !WORLD_SRC\n#    define WORLD_API WORLD_HELPER_DLL_IMPORT\n#  endif  // WORLD_SRC\n#  define WORLD_LOCAL WORLD_HELPER_DLL_LOCAL\n#else  // !WORLD_LIBRARIES_EXPORTS (static library)\n#  define WORLD_API\n#  define WORLD_LOCAL\n#endif  // WORLD_LIBRARIES_EXPORTS\n\n//\n// @}\n// end documentation\n//\n\n#endif  // WORLD_MACRODEFINITIONS_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/matlabfunctions.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_MATLABFUNCTIONS_H_\n#define WORLD_MATLABFUNCTIONS_H_\n#include \"../../../../framework.h\"\n#include \"common.h\"\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// fftshift() swaps the left and right halves of input vector.\n// http://www.mathworks.com/help/matlab/ref/fftshift.html\n//\n// Input:\n//   x              : Input vector\n//   x_length       : Length of x\n//\n// Output:\n//   y              : Swapped vector x\n//\n// Caution:\n//   Lengths of index and edges must be the same.\n//-----------------------------------------------------------------------------\nvoid fftshift(const double *x, int x_length, double *y);\n\n//-----------------------------------------------------------------------------\n// histc() counts the number of values in vector x that fall between the\n// elements in the edges vector (which must contain monotonically\n// nondecreasing values). n is a length(edges) vector containing these counts.\n// No elements of x can be complex.\n// http://www.mathworks.co.jp/help/techdoc/ref/histc.html\n//\n// Input:\n//   x              : Input vector\n//   x_length       : Length of x\n//   edges          : Input matrix (1-dimension)\n//   edges_length   : Length of edges\n//\n// Output:\n//   index          : Result counted in vector x\n// Caution:\n//   Lengths of index and edges must be the same.\n//-----------------------------------------------------------------------------\nvoid histc(const double *x, int x_length, const double *edges,\n  int edges_length, int *index);\n\n//-----------------------------------------------------------------------------\n// interp1() interpolates to find yi, the values of the underlying function Y\n// at the points in the vector or array xi. x must be a vector.\n// http://www.mathworks.co.jp/help/techdoc/ref/interp1.html\n//\n// Input:\n//   x          : Input vector (Time axis)\n//   y          : Values at x[n]\n//   x_length   : Length of x (Length of y must be the same)\n//   xi         : Required vector\n//   xi_length  : Length of xi (Length of yi must be the same)\n//\n// Output:\n//   yi         : Interpolated vector\n//-----------------------------------------------------------------------------\nLibSvcApi void interp1(const double *x, const double *y, int x_length, const double *xi,\n  int xi_length, double *yi);\n\n//-----------------------------------------------------------------------------\n// decimate() carries out down sampling by both IIR and FIR filters.\n// Filter coeffiencts are based on FilterForDecimate().\n//\n// Input:\n//   x          : Input signal\n//   x_length   : Length of x\n//   r          : Coefficient used for down sampling\n//                (fs after down sampling is fs/r)\n// Output:\n//   y          : Output signal\n//-----------------------------------------------------------------------------\nvoid decimate(const double *x, int x_length, int r, double *y);\n\n//-----------------------------------------------------------------------------\n// matlab_round() calculates rounding.\n//\n// Input:\n//   x    : Input value\n//\n// Output:\n//   y    : Rounded value\n//-----------------------------------------------------------------------------\nint matlab_round(double x);\n\n//-----------------------------------------------------------------------------\n// diff() calculates differences and approximate derivatives\n// http://www.mathworks.co.jp/help/techdoc/ref/diff.html\n//\n// Input:\n//   x          : Input signal\n//   x_length   : Length of x\n//\n// Output:\n//   y          : Output signal\n//-----------------------------------------------------------------------------\nvoid diff(const double *x, int x_length, double *y);\n\n//-----------------------------------------------------------------------------\n// interp1Q() is the special case of interp1().\n// We can use this function, provided that All periods of x-axis is the same.\n//\n// Input:\n//   x          : Origin of the x-axis\n//   shift      : Period of the x-axis\n//   y          : Values at x[n]\n//   x_length   : Length of x (Length of y must be the same)\n//   xi         : Required vector\n//   xi_length  : Length of xi (Length of yi must be the same)\n//\n// Output:\n//   yi         : Interpolated vector\n//\n// Caution:\n//   Length of xi and yi must be the same.\n//-----------------------------------------------------------------------------\nvoid interp1Q(double x, double shift, const double *y, int x_length,\n  const double *xi, int xi_length, double *yi);\n\n//-----------------------------------------------------------------------------\n// randn() generates pseudorandom numbers based on xorshift method.\n//\n// Output:\n//   A generated pseudorandom number\n//-----------------------------------------------------------------------------\ndouble randn(void);\n\n//-----------------------------------------------------------------------------\n// randn_reseed() forces to seed the pseudorandom generator using initial\n// values.\n//-----------------------------------------------------------------------------\nvoid randn_reseed(void);\n\n//-----------------------------------------------------------------------------\n// fast_fftfilt() carries out the convolution on the frequency domain.\n//\n// Input:\n//   x                : Input signal\n//   x_length         : Length of x\n//   h                : Impulse response\n//   h_length         : Length of h\n//   fft_size         : Length of FFT\n//   forward_real_fft : Struct to speed up the forward FFT\n//   inverse_real_fft : Struct to speed up the inverse FFT\n//\n// Output:\n//   y                : Calculated result.\n//-----------------------------------------------------------------------------\nvoid fast_fftfilt(const double *x, int x_length, const double *h, int h_length,\n  int fft_size, const ForwardRealFFT *forward_real_fft,\n  const InverseRealFFT *inverse_real_fft, double *y);\n\n//-----------------------------------------------------------------------------\n// matlab_std() calculates the standard deviation of the input vector.\n//\n// Input:\n//   x          : Input vector\n//   x_length   : Length of x\n//\n// Output:\n//   Calculated standard deviation\n//-----------------------------------------------------------------------------\ndouble matlab_std(const double *x, int x_length);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_MATLABFUNCTIONS_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/stonemask.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_STONEMASK_H_\n#define WORLD_STONEMASK_H_\n\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// StoneMask() refines the estimated F0 by Dio()\n//\n// Input:\n//   x                      : Input signal\n//   x_length               : Length of the input signal\n//   fs                     : Sampling frequency\n//   time_axis              : Temporal information\n//   f0                     : f0 contour\n//   f0_length              : Length of f0\n//\n// Output:\n//   refined_f0             : Refined F0\n//-----------------------------------------------------------------------------\nvoid StoneMask(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    double *refined_f0);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_STONEMASK_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/synthesis.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_SYNTHESIS_H_\n#define WORLD_SYNTHESIS_H_\n\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Synthesis() synthesize the voice based on f0, spectrogram and\n// aperiodicity (not excitation signal).\n//\n// Input:\n//   f0                   : f0 contour\n//   f0_length            : Length of f0\n//   spectrogram          : Spectrogram estimated by CheapTrick\n//   fft_size             : FFT size\n//   aperiodicity         : Aperiodicity spectrogram based on D4C\n//   frame_period         : Temporal period used for the analysis\n//   fs                   : Sampling frequency\n//   y_length             : Length of the output signal (Memory of y has been\n//                          allocated in advance)\n// Output:\n//   y                    : Calculated speech\n//-----------------------------------------------------------------------------\nvoid Synthesis(const double *f0, int f0_length, \n    const double * const *spectrogram, const double * const *aperiodicity, \n    int fft_size, double frame_period, int fs, int y_length, double *y);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_SYNTHESIS_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/src/world/synthesisrealtime.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_SYNTHESISREALTIME_H_\n#define WORLD_SYNTHESISREALTIME_H_\n\n#include \"world/common.h\"\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// A struct for real-time synthesis.\n// I use no class for compatibility in C language.\n// Please make a class for encapsulating it as needed.\n// This synthesizer uses a ring buffer.\n//-----------------------------------------------------------------------------\ntypedef struct {\n  // Basic parameters\n  int fs;\n  double frame_period;\n  int buffer_size;\n  int number_of_pointers;\n  int fft_size;\n\n  // Sound buffer for output. The length is buffer_size [sample].\n  double *buffer;\n  int current_pointer;\n  int i;\n\n  // For DC removal\n  double *dc_remover;\n\n  //---------------------------------------------------------------------------\n  // Followings are internal parameters.\n  // You should not modify them if you are not expert.\n\n  // Speech parameters in each pointer.\n  int *f0_length;\n  int *f0_origin;\n  double ***spectrogram;\n  double ***aperiodicity;\n\n\n  // Note:\n  // This is an extremely rough implementation.\n  // I should optimize this implementation.\n  int current_pointer2;\n  int head_pointer;\n  int synthesized_sample;\n\n  // Internal parameters.\n  int handoff;\n  double handoff_phase;\n  double handoff_f0;\n  int last_location;\n\n  int cumulative_frame;\n  int current_frame;\n\n  double **interpolated_vuv;\n  double **pulse_locations;\n  int **pulse_locations_index;\n  int *number_of_pulses;\n\n  double *impulse_response;\n\n  // FFT\n  MinimumPhaseAnalysis minimum_phase;\n  InverseRealFFT inverse_real_fft;\n  ForwardRealFFT forward_real_fft;\n} WorldSynthesizer;\n\n//-----------------------------------------------------------------------------\n// InitializeSynthesizer() initializes the synthesizer based on basic\n// parameters.\n//\n// Input:\n//   fs                   : Sampling frequency\n//   frame_period         : Frame period (ms)\n//   fft_size             : FFT size\n//   buffer_size          : Buffer size (sample)\n//   number_of_pointers   : The number of elements in the ring buffer\n//\n// Output:\n//   synth                : Initialized synthesizer\n//-----------------------------------------------------------------------------\nvoid InitializeSynthesizer(int fs, double frame_period, int fft_size,\n  int buffer_size, int number_of_pointers, WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// AddParameters() attempts to add speech parameters.\n// You can add several frames at the same time.\n//\n// Input:\n//   f0                   : F0 contour with length of f0_length\n//   f0_length            : This is associated with the number of frames\n//   spectrogram          : Spectrogram\n//   aperiodicity         : Aperiodicity\n//\n// Output:\n//   synth                : Synthesizer\n//\n// Return value:\n//   1: True, 0: False.\n//-----------------------------------------------------------------------------\nint AddParameters(double *f0, int f0_length, double **spectrogram,\n  double **aperiodicity, WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// RefreshSynthesizer() sets the parameters to default.\n//-----------------------------------------------------------------------------\nvoid RefreshSynthesizer(WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// DestroySynthesizer() release the memory.\n//-----------------------------------------------------------------------------\nvoid DestroySynthesizer(WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// IsLocked() checks whether the synthesizer is locked or not.\n// \"Lock\" is defined as the situation that the ring buffer cannot add\n// parameters and cannot synthesize the waveform.\n// It will be caused when the duration calculated by the number of added frames\n// is below 1 / F0 + buffer_size / fs.\n// If this function returns True, please refresh the synthesizer.\n//\n// Input:\n//   Synth            : Synthesizer (pointer)\n//\n// Output:\n//   1: True, 0: False.\n//-----------------------------------------------------------------------------\nint IsLocked(WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// Synthesis2() generates speech with length of synth->buffer_size sample.\n// The parameters are automatially updated, and memory is also released.\n//\n// Input:\n//   Synth            : Synthesizer (pointer)\n//\n// Output:\n//   1: True, 0: False.\n//-----------------------------------------------------------------------------\nint Synthesis2(WorldSynthesizer *synth);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_SYNTHESISREALTIME_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/tools/audioio.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// .wav input/output functions were modified for compatibility with C language.\n// Since these functions (wavread() and wavwrite()) are roughly implemented,\n// we recommend more suitable functions provided by other organizations.\n// This file is independent of WORLD project and for the test.cpp.\n//-----------------------------------------------------------------------------\n#include \"./audioio.h\"\n\n#include <math.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <string.h>\n\n#if (defined (__WIN32__) || defined (_WIN32)) && !defined (__MINGW32__)\n#pragma warning(disable : 4996)\n#endif\n\nnamespace {\n\nstatic inline int MyMaxInt(int x, int y) {\n  return x > y ? x : y;\n}\n\nstatic inline int MyMinInt(int x, int y) {\n  return x < y ? x : y;\n}\n\n//-----------------------------------------------------------------------------\n// CheckHeader() checks the .wav header. This function can only support the\n// monaural wave file. This function is only used in waveread().\n//-----------------------------------------------------------------------------\nstatic int CheckHeader(FILE *fp) {\n  char data_check[5];\n  fread(data_check, 1, 4, fp);  // \"RIFF\"\n  data_check[4] = '\\0';\n  if (0 != strcmp(data_check, \"RIFF\")) {\n    printf(\"RIFF error.\\n\");\n    return 0;\n  }\n  fseek(fp, 4, SEEK_CUR);\n  fread(data_check, 1, 4, fp);  // \"WAVE\"\n  if (0 != strcmp(data_check, \"WAVE\")) {\n    printf(\"WAVE error.\\n\");\n    return 0;\n  }\n  fread(data_check, 1, 4, fp);  // \"fmt \"\n  if (0 != strcmp(data_check, \"fmt \")) {\n    printf(\"fmt error.\\n\");\n    return 0;\n  }\n  fread(data_check, 1, 4, fp);  // 1 0 0 0\n  if (!(16 == data_check[0] && 0 == data_check[1] &&\n      0 == data_check[2] && 0 == data_check[3])) {\n    printf(\"fmt (2) error.\\n\");\n    return 0;\n  }\n  fread(data_check, 1, 2, fp);  // 1 0\n  if (!(1 == data_check[0] && 0 == data_check[1])) {\n    printf(\"Format ID error.\\n\");\n    return 0;\n  }\n  fread(data_check, 1, 2, fp);  // 1 0\n  if (!(1 == data_check[0] && 0 == data_check[1])) {\n    printf(\"This function cannot support stereo file\\n\");\n    return 0;\n  }\n  return 1;\n}\n\n//-----------------------------------------------------------------------------\n// GetParameters() extracts fp, nbit, wav_length from the .wav file\n// This function is only used in wavread().\n//-----------------------------------------------------------------------------\nstatic int GetParameters(FILE *fp, int *fs, int *nbit, int *wav_length) {\n  char data_check[5] = {0};\n  data_check[4] = '\\0';\n  unsigned char for_int_number[4];\n  fread(for_int_number, 1, 4, fp);\n  *fs = 0;\n  for (int i = 3; i >= 0; --i) *fs = *fs * 256 + for_int_number[i];\n  // Quantization\n  fseek(fp, 6, SEEK_CUR);\n  fread(for_int_number, 1, 2, fp);\n  *nbit = for_int_number[0];\n\n  // Skip until \"data\" is found. 2011/03/28\n  while (0 != fread(data_check, 1, 1, fp)) {\n    if (data_check[0] == 'd') {\n      fread(&data_check[1], 1, 3, fp);\n      if (0 != strcmp(data_check, \"data\"))\n        fseek(fp, -3, SEEK_CUR);\n      else\n        break;\n    }\n  }\n  if (0 != strcmp(data_check, \"data\")) {\n    printf(\"data error.\\n\");\n    return 0;\n  }\n\n  fread(for_int_number, 1, 4, fp);  // \"data\"\n  *wav_length = 0;\n  for (int i = 3; i >= 0; --i)\n    *wav_length = *wav_length * 256 + for_int_number[i];\n  *wav_length /= (*nbit / 8);\n  return 1;\n}\n\n}  // namespace\n\nvoid wavwrite(const double *x, int x_length, int fs, int nbit,\n    const char *filename) {\n  FILE *fp = fopen(filename, \"wb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return;\n  }\n\n  char text[4] = {'R', 'I', 'F', 'F'};\n  uint32_t long_number = 36 + x_length * 2;\n  fwrite(text, 1, 4, fp);\n  fwrite(&long_number, 4, 1, fp);\n\n  text[0] = 'W';\n  text[1] = 'A';\n  text[2] = 'V';\n  text[3] = 'E';\n  fwrite(text, 1, 4, fp);\n  text[0] = 'f';\n  text[1] = 'm';\n  text[2] = 't';\n  text[3] = ' ';\n  fwrite(text, 1, 4, fp);\n\n  long_number = 16;\n  fwrite(&long_number, 4, 1, fp);\n  int16_t short_number = 1;\n  fwrite(&short_number, 2, 1, fp);\n  short_number = 1;\n  fwrite(&short_number, 2, 1, fp);\n  long_number = fs;\n  fwrite(&long_number, 4, 1, fp);\n  long_number = fs * 2;\n  fwrite(&long_number, 4, 1, fp);\n  short_number = 2;\n  fwrite(&short_number, 2, 1, fp);\n  short_number = 16;\n  fwrite(&short_number, 2, 1, fp);\n\n  text[0] = 'd';\n  text[1] = 'a';\n  text[2] = 't';\n  text[3] = 'a';\n  fwrite(text, 1, 4, fp);\n  long_number = x_length * 2;\n  fwrite(&long_number, 4, 1, fp);\n\n  int16_t tmp_signal;\n  for (int i = 0; i < x_length; ++i) {\n    tmp_signal = static_cast<int16_t>(MyMaxInt(-32768,\n        MyMinInt(32767, static_cast<int>(x[i] * 32767))));\n    fwrite(&tmp_signal, 2, 1, fp);\n  }\n\n  fclose(fp);\n}\n\nint GetAudioLength(const char *filename) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    return 0;\n  }\n\n  if (0 == CheckHeader(fp)) {\n    fclose(fp);\n    return -1;\n  }\n\n  char data_check[5] = { 0 };\n  data_check[4] = '\\0';\n  unsigned char for_int_number[4];\n\n  // Quantization\n  fseek(fp, 10, SEEK_CUR);\n  fread(for_int_number, 1, 2, fp);\n  int nbit = for_int_number[0];\n\n  while (0 != fread(data_check, 1, 1, fp)) {\n    if ('d' == data_check[0]) {\n      fread(&data_check[1], 1, 3, fp);\n      if (0 != strcmp(data_check, \"data\"))\n        fseek(fp, -3, SEEK_CUR);\n      else\n        break;\n    }\n  }\n  if (0 != strcmp(data_check, \"data\")) {\n    fclose(fp);\n    return -1;\n  }\n\n  fread(for_int_number, 1, 4, fp);  // \"data\"\n  fclose(fp);\n\n  int wav_length = 0;\n  for (int i = 3; i >= 0; --i)\n    wav_length = wav_length * 256 + for_int_number[i];\n  wav_length /= (nbit / 8);\n\n  return wav_length;\n}\n\nvoid wavread(const char* filename, int *fs, int *nbit, double *x) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File not found.\\n\");\n    return;\n  }\n\n  if (0 == CheckHeader(fp)) {\n    fclose(fp);\n    return;\n  }\n\n  int x_length;\n  if (0 == GetParameters(fp, fs, nbit, &x_length)) {\n    fclose(fp);\n    return;\n  }\n\n  int quantization_byte = *nbit / 8;\n  double zero_line = pow(2.0, *nbit - 1);\n  double tmp, sign_bias;\n  unsigned char for_int_number[4];\n  for (int i = 0; i < x_length; ++i) {\n    sign_bias = tmp = 0.0;\n    fread(for_int_number, 1, quantization_byte, fp);  // \"data\"\n    if (for_int_number[quantization_byte-1] >= 128) {\n      sign_bias = pow(2.0, *nbit - 1);\n      for_int_number[quantization_byte - 1] =\n        for_int_number[quantization_byte - 1] & 0x7F;\n    }\n    for (int j = quantization_byte - 1; j >= 0; --j)\n      tmp = tmp * 256.0 + for_int_number[j];\n    x[i] = (tmp - sign_bias) / zero_line;\n  }\n  fclose(fp);\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/tools/audioio.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_AUDIOIO_H_\n#define WORLD_AUDIOIO_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n//-----------------------------------------------------------------------------\n// wavwrite() write a .wav file.\n// Input:\n//   x          : Input signal\n//   x_ength : Signal length of x [sample]\n//   fs         : Sampling frequency [Hz]\n//   nbit       : Quantization bit [bit]\n//   filename   : Name of the output signal.\n// Caution:\n//   The variable nbit is not used in this function.\n//   This function only supports the 16 bit.\n//-----------------------------------------------------------------------------\nvoid wavwrite(const double *x, int x_length, int fs, int nbit,\n  const char *filename);\n\n//-----------------------------------------------------------------------------\n// GetAudioLength() returns the length of .wav file.\n// Input:\n//   filename     : Filename of a .wav file.\n// Output:\n//   The number of samples of the file .wav\n//-----------------------------------------------------------------------------\nint GetAudioLength(const char *filename);\n\n//-----------------------------------------------------------------------------\n// wavread() read a .wav file.\n// The memory of output x must be allocated in advance.\n// Input:\n//   filename     : Filename of the input file.\n// Output:\n//   fs           : Sampling frequency [Hz]\n//   nbit         : Quantization bit [bit]\n//   x            : The output waveform.\n//-----------------------------------------------------------------------------\nvoid wavread(const char* filename, int *fs, int *nbit, double *x);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  // WORLD_AUDIOIO_H_\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/tools/parameterio.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2017 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Save/Load functions for three speech parameters.\n//-----------------------------------------------------------------------------\n#include \"./parameterio.h\"\n\n#include <stdlib.h>\n#include <string.h>\n#include <stdio.h>\n\nnamespace {\nstatic void WriteOneParameter(FILE *fp, const char *text,\n    double parameter, int size) {\n  fwrite(text, 1, 4, fp);\n  if (size == 4) {\n    int parameter_int = static_cast<int>(parameter);\n    fwrite(&parameter_int, 4, 1, fp);\n  } else {\n    fwrite(&parameter, 8, 1, fp);\n  }\n}\n\nstatic void LoadParameters(FILE *fp, int *number_of_frames, int *fft_size,\n    int *number_of_dimensions) {\n  char data_check[12];\n  fread(&data_check, 1, 4, fp);  // NOF\n  fread(number_of_frames, 4, 1, fp);\n\n  fread(&data_check, 1, 12, fp);  // FP (skipped)\n\n  fread(&data_check, 1, 4, fp);  // FFT\n  fread(fft_size, 4, 1, fp);\n\n  fread(&data_check, 1, 4, fp);  // NOD\n  fread(number_of_dimensions, 4, 1, fp);\n  *number_of_dimensions =\n    *number_of_dimensions == 0 ? *fft_size / 2 + 1 : *number_of_dimensions;\n\n  fread(&data_check, 1, 8, fp);  // FS (skipped)\n}\n\nstatic int CheckHeader(FILE *fp, const char *text) {\n  char data_check[5];\n  fread(data_check, 1, 4, fp);  // \"F0  \"\n  data_check[4] = '\\0';\n  if (0 != strcmp(data_check, text)) {\n    printf(\"Header error.\\n\");\n    fclose(fp);\n    return 0;\n  }\n  return 1;\n}\n\n}  // namespace\n\nvoid WriteF0(const char *filename, int f0_length, double frame_period,\n    const double *temporal_positions, const double *f0, int text_flag) {\n  if (text_flag == 1) {\n    FILE *fp = fopen(filename, \"w\");\n    if (NULL == fp) {\n      printf(\"File cannot be opened.\\n\");\n      return;\n    }\n    for (int i = 0; i < f0_length; ++i)\n      fprintf(fp, \"%.5f %.5f\\r\\n\", temporal_positions[i], f0[i]);\n    fclose(fp);\n  } else {\n    FILE *fp = fopen(filename, \"wb\");\n    if (NULL == fp) {\n      printf(\"File cannot be opened.\\n\");\n      return;\n    }\n\n    // Header\n    fwrite(\"F0  \", 1, 4, fp);\n\n    // Parameters\n    WriteOneParameter(fp, \"NOF \", f0_length, 4);\n    WriteOneParameter(fp, \"FP  \", frame_period, 8);\n\n    // Data\n    fwrite(f0, 8, f0_length, fp);\n    fclose(fp);\n  }\n}\n\nint ReadF0(const char *filename, double *temporal_positions, double *f0) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return 0;\n  }\n\n  // Header\n  if (CheckHeader(fp, \"F0  \") == 0) return 0;\n\n  // Parameters\n  char data_check[5];\n  fread(data_check, 1, 4, fp);  // \"NOF \"\n  int number_of_frames;\n  fread(&number_of_frames, 4, 1, fp);\n\n  fread(data_check, 1, 4, fp);  // \"FP  \"\n  double frame_period;\n  fread(&frame_period, 8, 1, fp);\n\n  // Data\n  fread(f0, 8, number_of_frames, fp);\n\n  fclose(fp);\n  for (int i = 0; i < number_of_frames; ++i)\n    temporal_positions[i] = i / 1000.0 * frame_period;\n  return 1;\n}\n\ndouble GetHeaderInformation(const char *filename, const char *parameter) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return 0;\n  }\n\n  char data_check[5];\n  data_check[4] = '\\0';\n  for (int i = 0; i < 13; ++i) {\n    fread(data_check, 1, 4, fp);\n    if (0 != strcmp(data_check, parameter)) continue;\n    if (0 == strcmp(parameter, \"FP  \")) {\n      double answer;\n      fread(&answer, 8, 1, fp);\n      fclose(fp);\n      return answer;\n    } else {\n      int answer;\n      fread(&answer, 4, 1, fp);\n      fclose(fp);\n      return static_cast<double>(answer);\n    }\n  }\n  return 0;\n}\n\nvoid WriteSpectralEnvelope(const char *filename, int fs, int f0_length,\n    double frame_period, int fft_size, int number_of_dimensions,\n    const double * const *spectrogram) {\n  FILE *fp = fopen(filename, \"wb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return;\n  }\n\n  // Header\n  fwrite(\"SPEC\", 1, 4, fp);\n\n  // Parameters\n  WriteOneParameter(fp, \"NOF \", f0_length, 4);\n  WriteOneParameter(fp, \"FP  \", frame_period, 8);\n  WriteOneParameter(fp, \"FFT \", fft_size, 4);\n  WriteOneParameter(fp, \"NOD \", number_of_dimensions, 4);\n  WriteOneParameter(fp, \"FS  \", fs, 4);\n\n  number_of_dimensions =\n    number_of_dimensions == 0 ? fft_size / 2 + 1 : number_of_dimensions;\n\n  // Data\n  for (int i = 0; i < f0_length; ++i)\n    fwrite(spectrogram[i], 8, number_of_dimensions, fp);\n  fclose(fp);\n}\n\nint ReadSpectralEnvelope(const char *filename, double **spectrogram) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return 0;\n  }\n\n  // Header\n  if (CheckHeader(fp, \"SPEC\") == 0) return 0;\n\n  // Parameters\n  int number_of_frames, fft_size, number_of_dimensions;\n  LoadParameters(fp, &number_of_frames, &fft_size, &number_of_dimensions);\n\n  // Data\n  for (int i = 0; i < number_of_frames; ++i)\n    fread(spectrogram[i], 8, number_of_dimensions, fp);\n\n  fclose(fp);\n  return 1;\n}\n\nvoid WriteAperiodicity(const char *filename, int fs, int f0_length,\n    double frame_period, int fft_size, int number_of_dimensions,\n    const double * const *aperiodicity) {\n  FILE *fp = fopen(filename, \"wb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return;\n  }\n\n  // Header\n  fwrite(\"AP  \", 1, 4, fp);\n\n  // Parameters\n  WriteOneParameter(fp, \"NOF \", f0_length, 4);\n  WriteOneParameter(fp, \"FP  \", frame_period, 8);\n  WriteOneParameter(fp, \"FFT \", fft_size, 4);\n  WriteOneParameter(fp, \"NOD \", number_of_dimensions, 4);\n  WriteOneParameter(fp, \"FS  \", fs, 4);\n  number_of_dimensions =\n    number_of_dimensions == 0 ? fft_size / 2 + 1 : number_of_dimensions;\n\n  // Data\n  for (int i = 0; i < f0_length; ++i)\n    fwrite(aperiodicity[i], 8, number_of_dimensions, fp);\n  fclose(fp);\n}\n\nint ReadAperiodicity(const char *filename, double **aperiodicity) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return 0;\n  }\n\n  // Header\n  if (CheckHeader(fp, \"AP  \") == 0) return 0;\n\n  // Parameters\n  int number_of_frames, fft_size, number_of_dimensions;\n  LoadParameters(fp, &number_of_frames, &fft_size, &number_of_dimensions);\n\n  // Data\n  for (int i = 0; i < number_of_frames; ++i)\n    fread(aperiodicity[i], 8, number_of_dimensions, fp);\n\n  fclose(fp);\n  return 1;\n}\n"
  },
  {
    "path": "libsvc/Modules/Lib/World/tools/parameterio.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2017 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_PARAMETERIO_H_\n#define WORLD_PARAMETERIO_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n//-----------------------------------------------------------------------------\n// WriteF0() writes the F0 contour.\n//\n// Input:\n//   filename           : Filename used for file output\n//   f0_length          : Length of F0 contour\n//   frame_period       : Frame shift used for analysis\n//   temporal_positions : Time axis\n//   f0                 : F0 contour\n//   text_flag          : The file is written as text (NOT binary).\n//-----------------------------------------------------------------------------\nvoid WriteF0(const char *filename, int f0_length, double frame_period,\n  const double *temporal_positions, const double *f0, int text_flag);\n\n//-----------------------------------------------------------------------------\n// ReadF0() reads the F0 contour from a file..\n//\n// Input:\n//   filename           : Filename used for file output\n//\n// Output:\n//   temporal_positions : Time axis\n//   f0                 : F0 contour\n//\n// Note: Memory must be allocated before calling this function.\n//-----------------------------------------------------------------------------\nint ReadF0(const char *filename, double *temporal_positions, double *f0);\n\n//-----------------------------------------------------------------------------\n// GetHeaderInformation() reads a parameter from a file.\n//\n// Input:\n//   filename             : Filename used for file output\n//   parameter            : Required parameter\n//                        : \"NOF \": number of samples (int)\n//                        : \"FP  \": frame shift (double)\n//                        : \"FFT \": FFT size (int)\n//                        : \"NOD \": number of dimensions (int)\n//                        : \"FS  \": sampling frequency\n//\n// Note: F0 does not include \"FFT \", \"NOD \", and \"FS  \".\n//       These are ignored in cases where they are used for F0 file.\n//-----------------------------------------------------------------------------\ndouble GetHeaderInformation(const char *filename, const char *parameter);\n\n//-----------------------------------------------------------------------------\n// WriteSpectralEnvelope() writes the spectral envelope.\n//\n// Input:\n//   filename             : Filename used for file output\n//   fs                   : Sampling frequency\n//   f0_length            : Length of F0 contour\n//   frame_period         : Frame shift used for analysis\n//   fft_size             : FFT size used for analysis\n//   number_of_dimensions : Number of dimensions per frame\n//   spectrogram          : Spectral envelope estimated by CheapTrick\n//-----------------------------------------------------------------------------\nvoid WriteSpectralEnvelope(const char *filename, int fs, int f0_length,\n  double frame_period, int fft_size, int number_of_dimensions,\n  const double * const *spectrogram);\n\n//-----------------------------------------------------------------------------\n// ReadSpectralEnvelope() reads the spectral envelope from a file.\n//\n// Input:\n//   filename           : Filename used for file output\n//\n// Output:\n//   spectrogram        : Spectral envelope estimated by CheapTrick\n//\n// Note: Memory must be allocated before calling this function.\n//-----------------------------------------------------------------------------\nint ReadSpectralEnvelope(const char *filename, double **spectrogram);\n\n//-----------------------------------------------------------------------------\n// WriteAperiodicity() writes the aperiodicity.\n//\n// Input:\n//   filename             : Filename used for file output\n//   fs                   : Sampling frequency\n//   f0_length            : Length of F0 contour\n//   frame_period         : Frame shift used for analysis\n//   fft_size             : FFT size used for analysis\n//   number_of_dimensions : Number of dimensions per frame\n//   spectrogram          : Spectral envelope estimated by CheapTrick\n//-----------------------------------------------------------------------------\nvoid WriteAperiodicity(const char *filename, int fs, int f0_length,\n  double frame_period, int fft_size, int number_of_dimensions,\n  const double * const *aperiodicity);\n\n//-----------------------------------------------------------------------------\n// ReadAperiodicity() reads the aperiodicity from a file.\n//\n// Input:\n//   filename           : Filename used for file output\n//\n// Output:\n//   spectrogram        : Spectral envelope estimated by CheapTrick\n//\n// Note: Memory must be allocated before calling this function.\n//-----------------------------------------------------------------------------\nint ReadAperiodicity(const char *filename, double **aperiodicity);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  // WORLD_PARAMETERIO_H_\n"
  },
  {
    "path": "libsvc/Modules/README.md",
    "content": "# Example\r\n```c++\r\n#include \"Modules/Models/header/Vits.hpp\"\r\n\r\nint main(){\r\n  rapidjson::Document Config;\r\n  Config.Parse(\"Your Config\");\r\n  \r\n  //Progress bar\r\n  InferClass::BaseModelType::callback a_callback = [](size_t a, size_t b) {std::cout << std::to_string((float)a * 100.f / (float)b) << \"%\\n\"; };\r\n  \r\n  //return params for inference\r\n  InferClass::BaseModelType::callback_params b_callback = []()  \r\n\t{\r\n\t\tauto cbaaa = InferClass::InferConfigs();\r\n\t\tcbaaa.kmeans_rate = 0.5;\r\n\t\tcbaaa.keys = 0;\r\n\t\treturn cbaaa;\r\n\t};\r\n  \r\n  //modify duration per phoneme\r\n  InferClass::TTS::DurationCallback c_callback = [](std::vector<float>&) {};\r\n  \r\n  std::vector<int16_t> output;\r\n  try\r\n  {\r\n  \tstd::wstring inp(\"watashinoonaniomitekudasai\");\r\n  \tauto model = dynamic_cast<InferClass::BaseModelType*>(new InferClass::VitsSvc(modConfigJson, a_callback, b_callback));\r\n    \r\n  \toutput = model->Inference(inp);\r\n    \r\n  \tWav outWav(model->GetSamplingRate(), output.size() * 2, output.data());\r\n  \toutWav.Writef(L\"test.wav\");\r\n    \r\n  \tdelete model;\r\n  }\r\n  catch(std::exception& e)\r\n  {\r\n  \tstd::cout << e.what();\r\n  }\r\n}\r\n\r\n```\r\n"
  },
  {
    "path": "libsvc/Modules/framework.h",
    "content": "﻿#pragma once\r\n\r\n#ifndef LibSvcApi\r\n#ifdef MoeVSDll\r\n#ifdef LibSvcDll\r\n#define LibSvcApi __declspec(dllexport)\r\n#else\r\n#ifndef MoeVS\r\n#define LibSvcApi __declspec(dllimport)\r\n#else\r\n#define LibSvcApi\r\n#endif\r\n#endif\r\n#else\r\n#define LibSvcApi\r\n#endif\r\n#endif"
  },
  {
    "path": "libsvc/Modules/header/InferTools/AvCodec/AvCodeResample.h",
    "content": "﻿#pragma once\r\n#include <vector>\r\n#include <string>\r\n#include \"../../StringPreprocess.hpp\"\r\n#include \"matlabfunctions.h\"\r\n#include \"../inferTools.hpp\"\r\nextern \"C\" {\r\n#include \"libavcodec/avcodec.h\"\r\n#include \"libavformat/avformat.h\"\r\n#include \"libswscale/swscale.h\"\r\n#include \"libswresample/swresample.h\"\r\n#include \"libavutil/samplefmt.h\"\r\n}\r\n\r\nclass AudioPreprocess\r\n{\r\npublic:\r\n    struct WAV_HEADER {\r\n        char             RIFF[4] = { 'R','I','F','F' };              //RIFF标识\r\n        unsigned long    ChunkSize;                                  //文件大小-8\r\n        char             WAVE[4] = { 'W','A','V','E' };              //WAVE块\r\n        char             fmt[4] = { 'f','m','t',' ' };               //fmt块\r\n        unsigned long    Subchunk1Size;                              //fmt块大小\r\n        unsigned short   AudioFormat;                                //编码格式\r\n        unsigned short   NumOfChan;                                  //声道数\r\n        WAV_HEADER(unsigned long cs = 36, unsigned long sc1s = 16, unsigned short af = 1, unsigned short nc = 1) :ChunkSize(cs), Subchunk1Size(sc1s), AudioFormat(af), NumOfChan(nc) {}\r\n    };\r\n    LibSvcApi static WAV_HEADER GetHeader(const std::wstring& path);\r\n    LibSvcApi static std::vector<double> arange(double start, double end, double step = 1.0, double div = 1.0);\r\n    LibSvcApi std::vector<short> codec(const std::wstring& path, int sr);\r\n    LibSvcApi void release();\r\n    LibSvcApi void init();\r\n    LibSvcApi AudioPreprocess();\r\n\t~AudioPreprocess()\r\n\t{\r\n        release();\r\n\t}\r\nprivate:\r\n    AVFrame* inFrame;\r\n    uint8_t* out_buffer;\r\n    SwrContext* swrContext;\r\n    AVCodecContext* avCodecContext;\r\n    AVFormatContext* avFormatContext;\r\n    AVPacket* packet;\r\n};\r\n"
  },
  {
    "path": "libsvc/Modules/header/InferTools/Cluster/MoeVSBaseCluster.hpp",
    "content": "﻿/**\n * FileName: MoeVSBaseCluster.hpp\n * Note: MoeVoiceStudioCore 聚类基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <vector>\n\n#define MoeVoiceStudioClusterHeader namespace MoeVoiceStudioCluster {\n#define MoeVoiceStudioClusterEnd }\n\nMoeVoiceStudioClusterHeader\n\nclass MoeVoiceStudioBaseCluster\n{\npublic:\n\tMoeVoiceStudioBaseCluster() = default;\n\tvirtual ~MoeVoiceStudioBaseCluster() = default;\n\n\t/**\n\t * \\brief 查找聚类最邻近点\n\t * \\param point 待查找的点\n\t * \\param sid 角色ID\n\t * \\param n_points 点数\n\t * \\return 查找到的最邻近点\n\t */\n\tvirtual std::vector<float> find(float* point, long sid, int64_t n_points = 1);\n};\n\nMoeVoiceStudioClusterEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/Cluster/MoeVSClusterManager.hpp",
    "content": "﻿/**\n * FileName: MoeVSClusterManager.hpp\n * Note: MoeVoiceStudioCore 聚类管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"MoeVSBaseCluster.hpp\"\n#include <functional>\n#include <string>\n#include \"../../framework.h\"\n\nMoeVoiceStudioClusterHeader\nclass MoeVSCluster\n{\npublic:\n\tMoeVSCluster() = default;\n\tMoeVSCluster(MoeVoiceStudioBaseCluster* _ext) : _cluster_ext(_ext) {}\n\tMoeVSCluster(const MoeVSCluster&) = delete;\n\tMoeVSCluster(MoeVSCluster&& _ext) noexcept\n\t{\n\t\tdelete _cluster_ext;\n\t\t_cluster_ext = _ext._cluster_ext;\n\t\t_ext._cluster_ext = nullptr;\n\t}\n\tMoeVSCluster& operator=(const MoeVSCluster&) = delete;\n\tMoeVSCluster& operator=(MoeVSCluster&& _ext) noexcept\n\t{\n\t\tif (this == &_ext)\n\t\t\treturn *this;\n\t\tdelete _cluster_ext;\n\t\t_cluster_ext = _ext._cluster_ext;\n\t\t_ext._cluster_ext = nullptr;\n\t\treturn *this;\n\t}\n\t~MoeVSCluster()\n\t{\n\t\tdelete _cluster_ext;\n\t\t_cluster_ext = nullptr;\n\t}\n\tMoeVoiceStudioBaseCluster* operator->() const { return _cluster_ext; }\nprivate:\n\tMoeVoiceStudioBaseCluster* _cluster_ext = nullptr;\n};\n\nusing GetMoeVSClusterFn = std::function<MoeVSCluster(const std::wstring&, size_t, size_t)>;\n\nLibSvcApi void RegisterMoeVSCluster(const std::wstring& _name, const GetMoeVSClusterFn& _constructor_fn);\n\n/**\n * \\brief 获取聚类\n * \\param _name 类名\n * \\param _path 聚类数据路径\n * \\param hidden_size hubert维数\n * \\param KmeansLen 聚类的长度\n * \\return 聚类\n */\nLibSvcApi MoeVSCluster GetMoeVSCluster(const std::wstring& _name, const std::wstring& _path, size_t hidden_size, size_t KmeansLen);\n\nMoeVoiceStudioClusterEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/Cluster/MoeVSIndexCluster.hpp",
    "content": "﻿/**\n * FileName: MoeVSIndexCluster.hpp\n * Note: MoeVoiceStudioCore 官方聚类（Index）\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#ifdef MoeVoiceStudioIndexCluster\n#include <string>\n#include \"MoeVSBaseCluster.hpp\"\n#include <faiss/IndexIVFFlat.h>\n#include <faiss/index_io.h>\n\nMoeVoiceStudioClusterHeader\nclass IndexClusterCore\n{\npublic:\n\tIndexClusterCore() = delete;\n\t~IndexClusterCore();\n\tIndexClusterCore(const char* _path);\n\tIndexClusterCore(const IndexClusterCore&) = delete;\n\tIndexClusterCore(IndexClusterCore&& move) noexcept;\n\tIndexClusterCore& operator=(const IndexClusterCore&) = delete;\n\tIndexClusterCore& operator=(IndexClusterCore&& move) noexcept;\n\tstd::vector<float> find(const float* points, faiss::idx_t n_points, faiss::idx_t n_searched_points = 8);\n\tfloat* GetVec(faiss::idx_t index);\nprivate:\n\tfaiss::Index* IndexPtr = nullptr;\n\tfaiss::idx_t Dim = 0;\n\tstd::vector<float> IndexsVector;\n};\n\nclass IndexCluster : public MoeVoiceStudioBaseCluster\n{\npublic:\n\tIndexCluster() = delete;\n\t~IndexCluster() override = default;\n\tIndexCluster(const std::wstring& _path, size_t hidden_size, size_t KmeansLen);\n\tstd::vector<float> find(float* point, long sid, int64_t n_points = 1) override;\nprivate:\n\tstd::vector<IndexClusterCore> Indexs;\n\tsize_t n_hidden_size = 256;\n};\n\nMoeVoiceStudioClusterEnd\n\n#endif"
  },
  {
    "path": "libsvc/Modules/header/InferTools/Cluster/MoeVSKmeansCluster.hpp",
    "content": "﻿/**\n * FileName: MoeVSKmeansCluster.hpp\n * Note: MoeVoiceStudioCore 官方聚类（Kmeans）\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"MoeVSBaseCluster.hpp\"\n#include \"../DataStruct/KDTree.hpp\"\n#include <string>\n\nMoeVoiceStudioClusterHeader\n\nclass KMeansCluster : public MoeVoiceStudioBaseCluster\n{\npublic:\n\tKMeansCluster() = delete;\n\t~KMeansCluster() override = default;\n\tKMeansCluster(const std::wstring& _path, size_t hidden_size, size_t KmeansLen);\n\tstd::vector<float> find(float* point, long sid, int64_t n_points = 1) override;\nprivate:\n\tstd::vector<KDTree> _tree;\n\tsize_t dims = 0;\n};\n\nMoeVoiceStudioClusterEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/DataStruct/KDTree.hpp",
    "content": "#pragma once\r\n\r\n/*\r\n * file: KDTree.hpp\r\n * author: J. Frederico Carvalho\r\n *\r\n * This is an adaptation of the KD-tree implementation in rosetta code\r\n *  https://rosettacode.org/wiki/K-d_tree\r\n * It is a reimplementation of the C code using C++.\r\n * It also includes a few more queries than the original\r\n *\r\n */\r\n\r\n#include <algorithm>\r\n#include <memory>\r\n#include <vector>\r\n\r\nusing point_t = std::vector<float>;\r\nusing indexArr = std::vector< size_t >;\r\nusing pointIndex = std::pair< std::vector< float >, size_t >;\r\n\r\nclass KDNode {\r\n   public:\r\n    using KDNodePtr = std::shared_ptr< KDNode >;\r\n    size_t index;\r\n    point_t x;\r\n    KDNodePtr left;\r\n    KDNodePtr right;\r\n\r\n    // initializer\r\n    KDNode();\r\n    KDNode(const point_t &, const size_t &, const KDNodePtr &,\r\n           const KDNodePtr &);\r\n    KDNode(const pointIndex &, const KDNodePtr &, const KDNodePtr &);\r\n    ~KDNode();\r\n\r\n    // getter\r\n    float coord(const size_t &);\r\n\r\n    // conversions\r\n    explicit operator bool();\r\n    explicit operator point_t();\r\n    explicit operator size_t();\r\n    explicit operator pointIndex();\r\n};\r\n\r\nusing KDNodePtr = std::shared_ptr< KDNode >;\r\n\r\nKDNodePtr NewKDNodePtr();\r\n\r\n// square euclidean distance\r\ninline float dist2(const point_t &, const point_t &);\r\ninline float dist2(const KDNodePtr &, const KDNodePtr &);\r\n\r\n// euclidean distance\r\ninline float dist(const point_t &, const point_t &);\r\ninline float dist(const KDNodePtr &, const KDNodePtr &);\r\n\r\n// Need for sorting\r\nclass comparer {\r\n   public:\r\n    size_t idx;\r\n    explicit comparer(size_t idx_);\r\n    inline bool compare_idx(\r\n        const std::pair< std::vector< float >, size_t > &,  //\r\n        const std::pair< std::vector< float >, size_t > &   //\r\n    );\r\n};\r\n\r\nusing pointIndexArr = std::vector< pointIndex >;\r\n\r\ninline void sort_on_idx(const pointIndexArr::iterator &,  //\r\n                        const pointIndexArr::iterator &,  //\r\n                        size_t idx);\r\n\r\nusing pointVec = std::vector<point_t>;\r\n\r\nclass KDTree {\r\n    KDNodePtr root;\r\n    KDNodePtr leaf;\r\n\r\n    KDNodePtr make_tree(const pointIndexArr::iterator &begin,  //\r\n                        const pointIndexArr::iterator &end,    //\r\n                        const size_t &length,                  //\r\n                        const size_t &level                    //\r\n    );\r\n\r\n   public:\r\n    KDTree() = default;\r\n    explicit KDTree(pointVec point_array);\r\n\r\n   private:\r\n    KDNodePtr nearest_(           //\r\n        const KDNodePtr &branch,  //\r\n        const point_t &pt,        //\r\n        const size_t &level,      //\r\n        const KDNodePtr &best,    //\r\n        const float&best_dist   //\r\n    );\r\n\r\n    // default caller\r\n    KDNodePtr nearest_(const point_t &pt);\r\n\r\n   public:\r\n    point_t nearest_point(const point_t &pt);\r\n    size_t nearest_index(const point_t &pt);\r\n    pointIndex nearest_pointIndex(const point_t &pt);\r\n\r\n   private:\r\n    pointIndexArr neighborhood_(  //\r\n        const KDNodePtr &branch,  //\r\n        const point_t &pt,        //\r\n        const float&rad,        //\r\n        const size_t &level       //\r\n    );\r\n\r\n   public:\r\n    pointIndexArr neighborhood(  //\r\n        const point_t &pt,       //\r\n        const float&rad);\r\n\r\n    pointVec neighborhood_points(  //\r\n        const point_t &pt,         //\r\n        const float&rad);\r\n\r\n    indexArr neighborhood_indices(  //\r\n        const point_t &pt,          //\r\n        const float&rad);\r\n};\r\n"
  },
  {
    "path": "libsvc/Modules/header/InferTools/DataStruct/README.md",
    "content": "## KdTree From J. Frederico Carvalho\r\n"
  },
  {
    "path": "libsvc/Modules/header/InferTools/F0Extractor/BaseF0Extractor.hpp",
    "content": "﻿/**\r\n * FileName: BaseF0Extractor.hpp\r\n * Note: MoeVoiceStudioCore F0提取算法基类\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include <cstdint>\r\n#include <vector>\r\n#include <string>\r\n#define MoeVoiceStudioF0ExtractorHeader namespace MoeVSF0Extractor{\r\n#define MoeVoiceStudioF0ExtractorEnd }\r\n\r\nMoeVoiceStudioF0ExtractorHeader\r\n#define __NAME__MOEVS(x) std::wstring ClassName = (x)\r\nclass BaseF0Extractor\r\n{\r\npublic:\r\n\t__NAME__MOEVS(L\"MoeVSF0Extractor\");\r\n\r\n\tBaseF0Extractor() = delete;\r\n\r\n\t/**\r\n\t * \\brief 构造F0提取器\r\n\t * \\param sampling_rate 采样率\r\n\t * \\param hop_size HopSize\r\n\t * \\param n_f0_bins F0Bins\r\n\t * \\param max_f0 最大F0\r\n\t * \\param min_f0 最小F0\r\n\t */\r\n\tBaseF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\r\n\r\n\tvirtual ~BaseF0Extractor() = default;\r\n\r\n\t/**\r\n\t * \\brief 提取F0\r\n\t * \\param PCMData 音频PCM数据（SignedInt16 单声道） \r\n\t * \\param TargetLength 目标F0长度\r\n\t * \\return F0\r\n\t */\r\n\tvirtual std::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength);\r\n\r\n\t/**\r\n\t * \\brief 提取F0\r\n\t * \\param PCMData 音频PCM数据（SignedInt16 单声道）\r\n\t * \\param TargetLength 目标F0长度\r\n\t * \\return F0\r\n\t */\r\n\tstd::vector<float> ExtractF0(const std::vector<float>& PCMData, size_t TargetLength);\r\n\r\n\t/**\r\n\t * \\brief 提取F0\r\n\t * \\param PCMData 音频PCM数据（SignedInt16 单声道）\r\n\t * \\param TargetLength 目标F0长度\r\n\t * \\return F0\r\n\t */\r\n\tstd::vector<float> ExtractF0(const std::vector<int16_t>& PCMData, size_t TargetLength);\r\n\r\n\tstatic std::vector<double> arange(double start, double end, double step = 1.0, double div = 1.0);\r\nprotected:\r\n\tconst uint32_t fs;\r\n\tconst uint32_t hop;\r\n\tconst uint32_t f0_bin;\r\n\tconst double f0_max;\r\n\tconst double f0_min;\r\n\tdouble f0_mel_min;\r\n\tdouble f0_mel_max;\r\n};\r\n#undef __NAME__MOEVS\r\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/F0Extractor/DioF0Extractor.hpp",
    "content": "﻿/**\r\n * FileName: DioF0Extractor.hpp\r\n * Note: MoeVoiceStudioCore 官方F0提取算法 Dio\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include \"BaseF0Extractor.hpp\"\r\n\r\nMoeVoiceStudioF0ExtractorHeader\r\nclass DioF0Extractor : public BaseF0Extractor\r\n{\r\npublic:\r\n\tDioF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\r\n\r\n\t~DioF0Extractor() override = default;\r\n\r\n\tvoid compute_f0(const double* PCMData, size_t PCMLen);\r\n\r\n\tvoid InterPf0(size_t TargetLength);\r\n\r\n\tstd::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength) override;\r\nprivate:\r\n\tstd::vector<double> refined_f0;\r\n};\r\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/F0Extractor/F0ExtractorManager.hpp",
    "content": "﻿/**\n * FileName: F0ExtractorManager.hpp\n * Note: MoeVoiceStudioCore F0提取器管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"BaseF0Extractor.hpp\"\n#include <functional>\n#include \"../../framework.h\"\n\nMoeVoiceStudioF0ExtractorHeader\n\nclass F0Extractor\n{\npublic:\n\tF0Extractor() = delete;\n\tF0Extractor(BaseF0Extractor* _ext) : _f0_ext(_ext) {}\n\tF0Extractor(const F0Extractor&) = delete;\n\tF0Extractor(F0Extractor&& _ext) noexcept\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t}\n\tF0Extractor& operator=(const F0Extractor&) = delete;\n\tF0Extractor& operator=(F0Extractor&& _ext) noexcept\n\t{\n\t\tif (this == &_ext)\n\t\t\treturn *this;\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t\treturn *this;\n\t}\n\t~F0Extractor()\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = nullptr;\n\t}\n\tBaseF0Extractor* operator->() const { return _f0_ext; }\n\nprivate:\n\tBaseF0Extractor* _f0_ext = nullptr;\n};\n\nusing GetF0ExtractorFn = std::function<F0Extractor(uint32_t, uint32_t, uint32_t, double, double)>;\n\nLibSvcApi void RegisterF0Extractor(const std::wstring& _name, const GetF0ExtractorFn& _constructor_fn);\n\n/**\n * \\brief 获取F0提取器\n * \\param _name 类名\n * \\param fs 采样率\n * \\param hop HopSize\n * \\param f0_bin F0Bins\n * \\param f0_max 最大F0\n * \\param f0_min 最小F0\n * \\return F0提取器\n */\nLibSvcApi F0Extractor GetF0Extractor(const std::wstring& _name,\n                           uint32_t fs = 48000,\n                           uint32_t hop = 512,\n                           uint32_t f0_bin = 256,\n                           double f0_max = 1100.0,\n                           double f0_min = 50.0);\n\nLibSvcApi std::vector<std::wstring> GetF0ExtractorList();\n\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/F0Extractor/HarvestF0Extractor.hpp",
    "content": "﻿/**\r\n * FileName: HarvestF0Extractor.hpp\r\n * Note: MoeVoiceStudioCore 官方F0提取算法 Harvest\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include \"BaseF0Extractor.hpp\"\r\n\r\nMoeVoiceStudioF0ExtractorHeader\r\nclass HarvestF0Extractor : public BaseF0Extractor\r\n{\r\npublic:\r\n\tHarvestF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\r\n\r\n\t~HarvestF0Extractor() override = default;\r\n\r\n\tvoid compute_f0(const double* PCMData, size_t PCMLen);\r\n\r\n\tvoid InterPf0(size_t TargetLength);\r\n\r\n\tstd::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength) override;\r\n\r\nprivate:\r\n\tstd::vector<double> refined_f0;\r\n};\r\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/F0Extractor/NetF0Predictors.hpp",
    "content": "﻿/**\r\n * FileName: NetF0Predictors.hpp\r\n * Note: MoeVoiceStudioCore 官方F0提取算法 Net\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include \"BaseF0Extractor.hpp\"\r\n#include <onnxruntime_cxx_api.h>\r\n\r\nMoeVoiceStudioF0ExtractorHeader\r\n\r\nclass NetF0Class\r\n{\r\npublic:\r\n\tNetF0Class();\r\n\t~NetF0Class()\r\n\t{\r\n\t\tDestory();\r\n\t}\r\n\tvoid Destory();\r\n\tvoid BuildCPUEnv(unsigned ThreadCount);\r\n\tvoid BuildCUDAEnv(unsigned Did);\r\n\tvoid BuildDMLEnv(unsigned Did);\r\n\tvoid LoadModel(const std::wstring& path);\r\n\tOrt::Env* NetF0Env = nullptr;\r\n\tOrt::SessionOptions* NetF0Options = nullptr;\r\n\tOrt::Session* Model = nullptr;\r\n\tOrt::MemoryInfo* Memory = nullptr;\r\nprivate:\r\n\tstd::wstring NetF0PathDir;\r\n};\r\n\r\nclass RMVPEF0Extractor : public BaseF0Extractor\r\n{\r\npublic:\r\n\tRMVPEF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\r\n\r\n\t~RMVPEF0Extractor() override = default;\r\n\r\n\tvoid InterPf0(size_t TargetLength);\r\n\r\n\tstd::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength) override;\r\nprivate:\r\n\tstd::vector<const char*> InputNames = { \"waveform\", \"threshold\" };\r\n\tstd::vector<const char*> OutputNames = { \"f0\", \"uv\" };\r\n\tstd::vector<double> refined_f0;\r\n};\r\n\r\nclass MELPEF0Extractor : public BaseF0Extractor\r\n{\r\npublic:\r\n\tMELPEF0Extractor(int sampling_rate, int hop_size, int n_f0_bins = 256, double max_f0 = 1100.0, double min_f0 = 50.0);\r\n\r\n\t~MELPEF0Extractor() override = default;\r\n\r\n\tvoid InterPf0(size_t TargetLength);\r\n\r\n\tstd::vector<float> ExtractF0(const std::vector<double>& PCMData, size_t TargetLength) override;\r\nprivate:\r\n\tstd::vector<const char*> InputNames = { \"waveform\" };\r\n\tstd::vector<const char*> OutputNames = { \"f0\" };\r\n\tstd::vector<double> refined_f0;\r\n};\r\n\r\nvoid EmptyCache();\r\n\r\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/Sampler/MoeVSBaseSampler.hpp",
    "content": "﻿/**\n * FileName: MoeVSBaseSampler.hpp\n * Note: MoeVoiceStudioCore Diffusion 采样器基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#define MoeVoiceStudioSamplerHeader namespace MoeVSSampler {\n#define MoeVoiceStudioSamplerEnd }\n#include <functional>\n#include <onnxruntime_cxx_api.h>\nMoeVoiceStudioSamplerHeader\n\nclass MoeVSBaseSampler\n{\npublic:\n\tusing ProgressCallback = std::function<void(size_t, size_t)>;\n\n\t/**\n\t * \\brief 构造采样器\n\t * \\param alpha Alphas Onnx模型Session\n\t * \\param dfn DenoiseFn Onnx模型Session\n\t * \\param pred Predictor Onnx模型Session\n\t * \\param Mel_Bins MelBins\n\t * \\param _ProgressCallback 进度条回调（直接传模型的回调就可以了） \n\t * \\param memory 模型的OrtMemoryInfo\n\t */\n\tMoeVSBaseSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\n\tvirtual ~MoeVSBaseSampler() = default;\n\n\t/**\n\t * \\brief 采样\n\t * \\param Tensors 输入张量（Tensors[0]为Condition，Tensors[1]为初始噪声）\n\t * \\param Steps 采样步数\n\t * \\param SpeedUp 加速倍数\n\t * \\param NoiseScale 噪声规模\n\t * \\param Seed 种子\n\t * \\param Process 当前进度\n\t * \\return Mel张量\n\t */\n\tvirtual std::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process);\nprotected:\n\tint64_t MelBins = 128;\n\tOrt::Session* Alpha = nullptr;\n\tOrt::Session* DenoiseFn = nullptr;\n\tOrt::Session* NoisePredictor = nullptr;\n\tProgressCallback _callback;\n\tOrt::MemoryInfo* Memory = nullptr;\n};\n\nclass MoeVSReflowBaseSampler\n{\npublic:\n\tusing ProgressCallback = std::function<void(size_t, size_t)>;\n\n\t/**\n\t * \\brief 获取采样器\n\t * \\param Velocity Velocity Onnx模型Session\n\t * \\param MelBins MelBins\n\t * \\param _ProgressCallback 进度条回调（直接传模型的回调就可以了）\n\t * \\param memory 模型的OrtMemoryInfo\n\t * \\return 采样器\n\t */\n\tMoeVSReflowBaseSampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\n\tvirtual ~MoeVSReflowBaseSampler() = default;\n\n\t/**\n\t * \\brief 采样\n\t * \\param Tensors 输入张量\n\t * \\param Steps 采样步数\n\t * \\param dt dt\n\t * \\param Scale Scale\n\t * \\param Process 当前进度\n\t * \\return Mel张量\n\t */\n\tvirtual std::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process);\nprotected:\n\tint64_t MelBins_ = 128;\n\tOrt::Session* Velocity_ = nullptr;\n\tProgressCallback Callback_;\n\tOrt::MemoryInfo* Memory_ = nullptr;\n};\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/Sampler/MoeVSSamplerManager.hpp",
    "content": "﻿/**\n * FileName: MoeVSSamplerManager.hpp\n * Note: MoeVoiceStudioCore Diffusion 采样器管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"MoeVSBaseSampler.hpp\"\n#include \"../../framework.h\"\n\nMoeVoiceStudioSamplerHeader\n\nclass MoeVSSampler\n{\npublic:\n\tMoeVSSampler() = delete;\n\tMoeVSSampler(MoeVSBaseSampler* _ext) : _f0_ext(_ext) {}\n\tMoeVSSampler(const MoeVSSampler&) = delete;\n\tMoeVSSampler(MoeVSSampler&& _ext) noexcept\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t}\n\tMoeVSSampler& operator=(const MoeVSSampler&) = delete;\n\tMoeVSSampler& operator=(MoeVSSampler&& _ext) noexcept\n\t{\n\t\tif (this == &_ext)\n\t\t\treturn *this;\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t\treturn *this;\n\t}\n\t~MoeVSSampler()\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = nullptr;\n\t}\n\tMoeVSBaseSampler* operator->() const { return _f0_ext; }\n\nprivate:\n\tMoeVSBaseSampler* _f0_ext = nullptr;\n};\n\nclass MoeVSReflowSampler\n{\npublic:\n\tMoeVSReflowSampler() = delete;\n\tMoeVSReflowSampler(MoeVSReflowBaseSampler* _ext) : _f0_ext(_ext) {}\n\tMoeVSReflowSampler(const MoeVSReflowSampler&) = delete;\n\tMoeVSReflowSampler(MoeVSReflowSampler&& _ext) noexcept\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t}\n\tMoeVSReflowSampler& operator=(const MoeVSReflowSampler&) = delete;\n\tMoeVSReflowSampler& operator=(MoeVSReflowSampler&& _ext) noexcept\n\t{\n\t\tif (this == &_ext)\n\t\t\treturn *this;\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t\treturn *this;\n\t}\n\t~MoeVSReflowSampler()\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = nullptr;\n\t}\n\tMoeVSReflowBaseSampler* operator->() const { return _f0_ext; }\n\nprivate:\n\tMoeVSReflowBaseSampler* _f0_ext = nullptr;\n};\n\nusing GetMoeVSSamplerFn = std::function<MoeVSSampler(Ort::Session*, Ort::Session*, Ort::Session*, int64_t, const MoeVSBaseSampler::ProgressCallback&, Ort::MemoryInfo*)>;\n\nLibSvcApi void RegisterMoeVSSampler(const std::wstring& _name, const GetMoeVSSamplerFn& _constructor_fn);\n\n/**\n * \\brief 获取采样器\n * \\param _name 类名\n * \\param alpha Alphas Onnx模型Session\n * \\param dfn DenoiseFn Onnx模型Session\n * \\param pred Predictor Onnx模型Session\n * \\param Mel_Bins MelBins\n * \\param _ProgressCallback 进度条回调（直接传模型的回调就可以了）\n * \\param memory 模型的OrtMemoryInfo\n * \\return 采样器\n */\nLibSvcApi MoeVSSampler GetMoeVSSampler(\n\tconst std::wstring& _name,\n\tOrt::Session* alpha,\n\tOrt::Session* dfn,\n\tOrt::Session* pred,\n\tint64_t Mel_Bins,\n\tconst MoeVSBaseSampler::ProgressCallback& _ProgressCallback,\n\tOrt::MemoryInfo* memory\n);\n\nLibSvcApi std::vector<std::wstring> GetMoeVSSamplerList();\n\n/******************************* Reflow ***********************************/\n\nusing GetMoeVSReflowSamplerFn = std::function<MoeVSReflowSampler(\n\tOrt::Session*, \n\tint64_t, \n\tconst MoeVSReflowBaseSampler::ProgressCallback&,\n\tOrt::MemoryInfo*\n)>;\n\nLibSvcApi void RegisterMoeVSReflowSampler(const std::wstring& _name, const GetMoeVSReflowSamplerFn& _constructor_fn);\n\n/**\n * \\brief 获取采样器\n * \\param _name 类名\n * \\param velocity Velocity Onnx模型Session\n * \\param Mel_Bins MelBins\n * \\param _ProgressCallback 进度条回调（直接传模型的回调就可以了）\n * \\param memory 模型的OrtMemoryInfo\n * \\return 采样器\n */\nLibSvcApi MoeVSReflowSampler GetMoeVSReflowSampler(\n\tconst std::wstring& _name,\n\tOrt::Session* velocity,\n\tint64_t Mel_Bins,\n\tconst MoeVSBaseSampler::ProgressCallback& _ProgressCallback,\n\tOrt::MemoryInfo* memory\n);\n\nLibSvcApi std::vector<std::wstring> GetMoeVSReflowSamplerList();\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/Sampler/MoeVSSamplers.hpp",
    "content": "﻿/**\n * FileName: MoeVSSamplers.hpp\n * Note: MoeVoiceStudioCore Diffusion 官方采样器\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"MoeVSBaseSampler.hpp\"\n\nMoeVoiceStudioSamplerHeader\n\nclass PndmSampler : public MoeVSBaseSampler\n{\npublic:\n\tPndmSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\t~PndmSampler() override = default;\n\tstd::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process) override;\nprivate:\n\tconst std::vector<const char*> denoiseInput = { \"noise\", \"time\", \"condition\" };\n\tconst std::vector<const char*> predInput = { \"noise\", \"noise_pred\", \"time\", \"time_prev\" };\n\tconst std::vector<const char*> denoiseOutput = { \"noise_pred\" };\n\tconst std::vector<const char*> predOutput = { \"noise_pred_o\" };\n};\n\nclass DDimSampler : public MoeVSBaseSampler\n{\npublic:\n\tDDimSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\t~DDimSampler() override = default;\n\tstd::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process) override;\nprivate:\n\tconst std::vector<const char*> alphain = { \"time\" };\n\tconst std::vector<const char*> alphaout = { \"alphas_cumprod\" };\n\tconst std::vector<const char*> denoiseInput = { \"noise\", \"time\", \"condition\" };\n\tconst std::vector<const char*> denoiseOutput = { \"noise_pred\" };\n};\n\nclass ReflowEularSampler : public MoeVSReflowBaseSampler\n{\npublic:\n\tReflowEularSampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\t~ReflowEularSampler() override = default;\n\tstd::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process) override;\nprivate:\n\tconst std::vector<const char*> velocityInput = { \"x\", \"t\", \"cond\" };\n\tconst std::vector<const char*> velocityOutput = { \"o\" };\n};\n\nclass ReflowRk4Sampler : public MoeVSReflowBaseSampler\n{\npublic:\n\tReflowRk4Sampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\t~ReflowRk4Sampler() override = default;\n\tstd::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process) override;\nprivate:\n\tconst std::vector<const char*> velocityInput = { \"x\", \"t\", \"cond\" };\n\tconst std::vector<const char*> velocityOutput = { \"o\" };\n};\n\nclass ReflowHeunSampler : public MoeVSReflowBaseSampler\n{\npublic:\n\tReflowHeunSampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\t~ReflowHeunSampler() override = default;\n\tstd::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process) override;\nprivate:\n\tconst std::vector<const char*> velocityInput = { \"x\", \"t\", \"cond\" };\n\tconst std::vector<const char*> velocityOutput = { \"o\" };\n};\n\nclass ReflowPececeSampler : public MoeVSReflowBaseSampler\n{\npublic:\n\tReflowPececeSampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory);\n\t~ReflowPececeSampler() override = default;\n\tstd::vector<Ort::Value> Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process) override;\nprivate:\n\tconst std::vector<const char*> velocityInput = { \"x\", \"t\", \"cond\" };\n\tconst std::vector<const char*> velocityOutput = { \"o\" };\n};\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/Stft/stft.hpp",
    "content": "﻿#pragma once\r\n#include <vector>\r\n#include \"fftw3.h\"\r\n\r\nnamespace DlCodecStft\r\n{\r\n    class STFT\r\n    {\r\n    public:\r\n        STFT() = default;\r\n        ~STFT();\r\n        STFT(int WindowSize, int HopSize, int FFTSize = 0);\r\n        inline static double PI = 3.14159265358979323846;\r\n        std::pair<std::vector<float>, int64_t> operator()(const std::vector<double>& audioData) const;\r\n    private:\r\n    \tint WINDOW_SIZE = 2048;\r\n    \tint HOP_SIZE = WINDOW_SIZE / 4;\r\n    \tint FFT_SIZE = WINDOW_SIZE / 2 + 1;\r\n    };\r\n\r\n    class Mel\r\n    {\r\n    public:\r\n        Mel() = delete;\r\n        ~Mel() = default;\r\n        Mel(int WindowSize, int HopSize, int SamplingRate, int MelSize = 0);\r\n        std::pair<std::vector<float>, int64_t> GetMel(const std::vector<double>& audioData) const;\r\n        std::pair<std::vector<float>, int64_t> operator()(const std::vector<double>& audioData) const;\r\n    private:\r\n        STFT stft;\r\n        int MEL_SIZE = 128;\r\n        int FFT_SIZE = 0;\r\n        int sr = 22050;\r\n        std::vector<float> MelBasis;\r\n    };\r\n}\r\n"
  },
  {
    "path": "libsvc/Modules/header/InferTools/TensorExtractor/MoeVSCoreTensorExtractor.hpp",
    "content": "﻿/**\r\n * FileName: MoeVSCoreTensorExtractor.hpp\r\n * Note: MoeVoiceStudioCore 官方张量预处理\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include \"MoeVoiceStudioTensorExtractor.hpp\"\r\n\r\nMoeVoiceStudioTensorExtractorHeader\r\n\r\nclass SoVits2TensorExtractor : public MoeVoiceStudioTensorExtractor\r\n{\r\npublic:\r\n\tSoVits2TensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\r\n\t~SoVits2TensorExtractor() override = default;\r\n\tInputs Extract(\r\n\t\tconst std::vector<float>& HiddenUnit,\r\n\t\tconst std::vector<float>& F0,\r\n\t\tconst std::vector<float>& Volume,\r\n\t\tconst std::vector<std::vector<float>>& SpkMap,\r\n\t\tParams params\r\n\t) override;\r\n\r\n\tconst std::vector<const char*> InputNames = { \"hidden_unit\", \"lengths\", \"pitch\", \"sid\" };\r\n};\r\n\r\nclass SoVits3TensorExtractor : public MoeVoiceStudioTensorExtractor\r\n{\r\npublic:\r\n\tSoVits3TensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\r\n\t~SoVits3TensorExtractor() override = default;\r\n\tInputs Extract(\r\n\t\tconst std::vector<float>& HiddenUnit,\r\n\t\tconst std::vector<float>& F0,\r\n\t\tconst std::vector<float>& Volume,\r\n\t\tconst std::vector<std::vector<float>>& SpkMap,\r\n\t\tParams params\r\n\t) override;\r\n\r\n\tconst std::vector<const char*> InputNames = { \"hidden_unit\", \"lengths\", \"pitch\", \"sid\" };\r\n};\r\n\r\nclass SoVits4TensorExtractor : public MoeVoiceStudioTensorExtractor\r\n{\r\npublic:\r\n\tSoVits4TensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\r\n\t~SoVits4TensorExtractor() override = default;\r\n\tInputs Extract(\r\n\t\tconst std::vector<float>& HiddenUnit,\r\n\t\tconst std::vector<float>& F0,\r\n\t\tconst std::vector<float>& Volume,\r\n\t\tconst std::vector<std::vector<float>>& SpkMap,\r\n\t\tParams params\r\n\t) override;\r\n\r\n\tconst std::vector<const char*> InputNames = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\" };\r\n\tconst std::vector<const char*> InputNamesVol = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\", \"vol\" };\r\n};\r\n\r\nclass SoVits4DDSPTensorExtractor : public MoeVoiceStudioTensorExtractor\r\n{\r\npublic:\r\n\tSoVits4DDSPTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\r\n\t~SoVits4DDSPTensorExtractor() override = default;\r\n\tInputs Extract(\r\n\t\tconst std::vector<float>& HiddenUnit,\r\n\t\tconst std::vector<float>& F0,\r\n\t\tconst std::vector<float>& Volume,\r\n\t\tconst std::vector<std::vector<float>>& SpkMap,\r\n\t\tParams params\r\n\t) override;\r\n\r\n\tconst std::vector<const char*> InputNames = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\" };\r\n\tconst std::vector<const char*> InputNamesVol = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\", \"vol\" };\r\n};\r\n\r\nclass RVCTensorExtractor : public MoeVoiceStudioTensorExtractor\r\n{\r\npublic:\r\n\tRVCTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\r\n\t~RVCTensorExtractor() override = default;\r\n\tInputs Extract(\r\n\t\tconst std::vector<float>& HiddenUnit,\r\n\t\tconst std::vector<float>& F0,\r\n\t\tconst std::vector<float>& Volume,\r\n\t\tconst std::vector<std::vector<float>>& SpkMap,\r\n\t\tParams params\r\n\t) override;\r\n\r\n\tconst std::vector<const char*> InputNames = { \"phone\", \"phone_lengths\", \"pitch\", \"pitchf\", \"ds\", \"rnd\" };\r\n\tconst std::vector<const char*> InputNamesVol = { \"phone\", \"phone_lengths\", \"pitch\", \"pitchf\", \"ds\", \"rnd\", \"vol\" };\r\n};\r\n\r\nclass DiffSvcTensorExtractor : public MoeVoiceStudioTensorExtractor\r\n{\r\npublic:\r\n\tDiffSvcTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\r\n\t~DiffSvcTensorExtractor() override = default;\r\n\tInputs Extract(\r\n\t\tconst std::vector<float>& HiddenUnit,\r\n\t\tconst std::vector<float>& F0,\r\n\t\tconst std::vector<float>& Volume,\r\n\t\tconst std::vector<std::vector<float>>& SpkMap,\r\n\t\tParams params\r\n\t) override;\r\n\tconst std::vector<const char*> InputNames = { \"hubert\", \"mel2ph\", \"spk_embed\", \"f0\" };\r\n\tconst std::vector<const char*> OutputNames = { \"mel_pred\", \"f0_pred\" };\r\n};\r\n\r\nclass DiffusionSvcTensorExtractor : public MoeVoiceStudioTensorExtractor\r\n{\r\npublic:\r\n\tDiffusionSvcTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other) : MoeVoiceStudioTensorExtractor(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other) {}\r\n\t~DiffusionSvcTensorExtractor() override = default;\r\n\tInputs Extract(\r\n\t\tconst std::vector<float>& HiddenUnit,\r\n\t\tconst std::vector<float>& F0,\r\n\t\tconst std::vector<float>& Volume,\r\n\t\tconst std::vector<std::vector<float>>& SpkMap,\r\n\t\tParams params\r\n\t) override;\r\n\tconst std::vector<const char*> InputNamesVol = { \"hubert\", \"mel2ph\", \"f0\", \"volume\", \"spk_mix\" };\r\n\tconst std::vector<const char*> InputNames = { \"hubert\", \"mel2ph\", \"f0\", \"spk_mix\" };\r\n\tconst std::vector<const char*> OutputNames = { \"mel_pred\", \"f0_pred\", \"init_noise\" };\r\n};\r\n\r\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/TensorExtractor/MoeVoiceStudioTensorExtractor.hpp",
    "content": "﻿/**\n * FileName: MoeVoiceStudioTensorExtractor.hpp\n * Note: MoeVoiceStudioCore 张量预处理基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <string>\n#include <vector>\n#include \"onnxruntime_cxx_api.h\"\n#define MoeVoiceStudioTensorExtractorHeader namespace MoeVSTensorPreprocess{\n#define MoeVoiceStudioTensorExtractorEnd }\n#include \"../../framework.h\"\n\nMoeVoiceStudioTensorExtractorHeader\n\nclass MoeVoiceStudioTensorExtractor\n{\npublic:\n\t\n\tstruct Tensors\n\t{\n\t\tstd::vector<float> HiddenUnit;\n\t\tstd::vector<float> F0;\n\t\tstd::vector<float> Volume;\n\t\tstd::vector<float> SpkMap;\n\t\tstd::vector<float> DDSPNoise;\n\t\tstd::vector<float> Noise;\n\t\tstd::vector<int64_t> Alignment;\n\t\tstd::vector<float> UnVoice;\n\t\tstd::vector<int64_t> NSFF0;\n\t\tint64_t Length[1] = { 0 };\n\t\tint64_t Speaker[1] = { 0 };\n\n\t\tstd::vector<int64_t> HiddenUnitShape;\n\t\tstd::vector<int64_t> FrameShape;\n\t\tstd::vector<int64_t> SpkShape;\n\t\tstd::vector<int64_t> DDSPNoiseShape;\n\t\tstd::vector<int64_t> NoiseShape;\n\t\tint64_t OneShape[1] = { 1 };\n\t};\n\n\tstruct InferParams\n\t{\n\t\tfloat NoiseScale = 0.3f;\n\t\tfloat DDSPNoiseScale = 1.0f;\n\t\tint Seed = 520468;\n\t\tsize_t AudioSize = 0;\n\t\tint64_t Chara = 0;\n\t\tfloat upKeys = 0.f;\n\t\tvoid* Other = nullptr;\n\t};\n\n\tstruct Others\n\t{\n\t\tint f0_bin = 256;\n\t\tfloat f0_max = 1100.0;\n\t\tfloat f0_min = 50.0;\n\t\tOrtMemoryInfo* Memory = nullptr;\n\t\tvoid* Other = nullptr;\n\t};\n\n\tusing Params = const InferParams&;\n\n\tstruct Inputs\n\t{\n\t\tTensors Data;\n\t\tstd::vector<Ort::Value> Tensor;\n\t\tconst char* const* InputNames = nullptr;\n\t\tconst char* const* OutputNames = nullptr;\n\t\tsize_t InputCount = 1;\n\t\tsize_t OutputCount = 1;\n\t};\n\n\t/**\n\t * \\brief 构造张量预处理器\n\t * \\param _srcsr 原始采样率\n\t * \\param _sr 目标采样率\n\t * \\param _hop HopSize\n\t * \\param _smix 是否启用角色混合\n\t * \\param _volume 是否启用音量emb\n\t * \\param _hidden_size hubert的维数\n\t * \\param _nspeaker 角色数\n\t * \\param _other 其他参数，其中的memoryInfo必须为你当前模型的memoryInfo\n\t */\n\tMoeVoiceStudioTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other);\n\n\tvirtual ~MoeVoiceStudioTensorExtractor() = default;\n\n\t/**\n\t * \\brief 预处理张量\n\t * \\param HiddenUnit HiddenUnit\n\t * \\param F0 F0\n\t * \\param Volume 音量\n\t * \\param SpkMap 角色混合数据\n\t * \\param params 参数\n\t * \\return 完成预处理的张量（请将张量接管的所有Vector的数据都存储到Tensors Data中，因为ORT创建的张量要求调用方管理内存，如果不存储到这个位置会导致数据提前析构\n\t */\n\tvirtual Inputs Extract(\n\t\tconst std::vector<float>& HiddenUnit,\n\t\tconst std::vector<float>& F0,\n\t\tconst std::vector<float>& Volume,\n\t\tconst std::vector<std::vector<float>>& SpkMap,\n\t\tParams params\n\t);\n\n\tvoid SetSrcSamplingRates(uint64_t sr) { _SrcSamplingRate = sr; }\n\n\t//获取换算为0-255的f0\n\t[[nodiscard]] std::vector<int64_t> GetNSFF0(const std::vector<float>&) const;\n\n\t//将F0中0值单独插值\n\tstatic std::vector<float> GetInterpedF0(const std::vector<float>&);\n\n\t//\n\tstatic std::vector<float> InterpUVF0(const std::vector<float>&);\n\n\t//获取UnVoiceMask\n\tstatic std::vector<float> GetUV(const std::vector<float>&);\n\n\t//获取对齐矩阵\n\tstatic std::vector<int64_t> GetAligments(size_t, size_t);\n\n\t//线性组合\n\ttemplate <typename T>\n\tstatic void LinearCombination(std::vector<std::vector<T>>& _data, size_t default_id, T Value = T(1.0))\n\t{\n\t\tif (_data.empty())\n\t\t\treturn;\n\t\tif (default_id > _data.size())\n\t\t\tdefault_id = 0;\n\n\t\tfor (size_t i = 0; i < _data[0].size(); ++i)\n\t\t{\n\t\t\tT Sum = T(0.0);\n\t\t\tfor (size_t j = 0; j < _data.size(); ++j)\n\t\t\t\tSum += _data[j][i];\n\t\t\tif (Sum < T(0.0001))\n\t\t\t{\n\t\t\t\tfor (size_t j = 0; j < _data.size(); ++j)\n\t\t\t\t\t_data[j][i] = T(0);\n\t\t\t\t_data[default_id][i] = T(1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tSum *= T(Value);\n\t\t\tfor (size_t j = 0; j < _data.size(); ++j)\n\t\t\t\t_data[j][i] /= Sum;\n\t\t}\n\t}\n\n\t//将F0中0值单独插值（可设置是否取log）\n\tLibSvcApi [[nodiscard]] static std::vector<float> GetInterpedF0log(const std::vector<float>&, bool);\n\n\t//获取正确的角色混合数据\n\t[[nodiscard]] std::vector<float> GetCurrectSpkMixData(const std::vector<std::vector<float>>& _input, size_t dst_len, int64_t curspk) const;\n\n\t//获取正确的角色混合数据\n\tLibSvcApi [[nodiscard]] static std::vector<float> GetSpkMixData(const std::vector<std::vector<float>>& _input, size_t dst_len, size_t spk_count);\nprotected:\n\tuint64_t _NSpeaker = 1;\n\tuint64_t _SrcSamplingRate = 32000;\n\tuint64_t _SamplingRate = 32000;\n\tuint64_t _HopSize = 512;\n\tbool _SpeakerMix = false;\n\tbool _Volume = false;\n\tuint64_t _HiddenSize = 256;\n\tint f0_bin = 256;\n\tfloat f0_max = 1100.0;\n\tfloat f0_min = 50.0;\n\tfloat f0_mel_min = 1127.f * log(1.f + f0_min / 700.f);\n\tfloat f0_mel_max = 1127.f * log(1.f + f0_max / 700.f);\n\tOrtMemoryInfo* Memory = nullptr;\nprivate:\n\tstd::wstring __NAME__CLASS__ = L\"MoeVoiceStudioTensorExtractor\";\n};\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/TensorExtractor/TensorExtractorManager.hpp",
    "content": "﻿/**\n * FileName: TensorExtractorManager.hpp\n * Note: MoeVoiceStudioCore 张量预处理类的注册和管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <functional>\n#include \"MoeVoiceStudioTensorExtractor.hpp\"\n\nMoeVoiceStudioTensorExtractorHeader\n\nclass TensorExtractor\n{\npublic:\n\tTensorExtractor() = default;\n\tTensorExtractor(MoeVoiceStudioTensorExtractor* _ext) : _f0_ext(_ext) {}\n\tTensorExtractor(const TensorExtractor&) = delete;\n\tTensorExtractor(TensorExtractor&& _ext) noexcept\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t}\n\tTensorExtractor& operator=(const TensorExtractor&) = delete;\n\tTensorExtractor& operator=(TensorExtractor&& _ext) noexcept\n\t{\n\t\tif (this == &_ext)\n\t\t\treturn *this;\n\t\tdelete _f0_ext;\n\t\t_f0_ext = _ext._f0_ext;\n\t\t_ext._f0_ext = nullptr;\n\t\treturn *this;\n\t}\n\t~TensorExtractor()\n\t{\n\t\tdelete _f0_ext;\n\t\t_f0_ext = nullptr;\n\t}\n\tMoeVoiceStudioTensorExtractor* operator->() const { return _f0_ext; }\n\nprivate:\n\tMoeVoiceStudioTensorExtractor* _f0_ext = nullptr;\n};\n\nusing GetTensorExtractorFn = std::function<TensorExtractor(uint64_t, uint64_t, uint64_t, bool, bool, uint64_t, uint64_t, const MoeVoiceStudioTensorExtractor::Others&)>;\n\nLibSvcApi void RegisterTensorExtractor(const std::wstring& _name, const GetTensorExtractorFn& _constructor_fn);\n\n/**\n * \\brief 获取张量预处理器\n * \\param _name 类名\n * \\param _srcsr 原始采样率\n * \\param _sr 目标采样率\n * \\param _hop HopSize\n * \\param _smix 是否启用角色混合\n * \\param _volume 是否启用音量emb\n * \\param _hidden_size hubert的维数\n * \\param _nspeaker 角色数\n * \\param _other 其他参数，其中的memoryInfo必须为你当前模型的memoryInfo\n * \\return 张量预处理器\n */\nLibSvcApi TensorExtractor GetTensorExtractor(\n\tconst std::wstring& _name,\n\tuint64_t _srcsr, uint64_t _sr, uint64_t _hop,\n\tbool _smix, bool _volume, uint64_t _hidden_size,\n\tuint64_t _nspeaker,\n\tconst MoeVoiceStudioTensorExtractor::Others& _other\n);\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libsvc/Modules/header/InferTools/inferTools.hpp",
    "content": "﻿/**\r\n * FileName: InferTools.hpp\r\n * Note: MoeVoiceStudioCore 推理工具的定义\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include <fstream>\r\n#include <vector>\r\n#include <string>\r\n#include <functional>\r\n#include \"../../Lib/World/src/world/matlabfunctions.h\"\n#include <filesystem>\r\n#define MOEVSINFERTOOLSHEADER namespace InferTools {\r\n#define MOEVSINFERTOOLSEND }\r\n\r\n#define LibDLVoiceCodecThrow(message) { \\\r\n\tconst std::string LibDlCodecThrowMessage = message;\\\r\n\tconst std::string LibDlCodecThrowMessagePrefix = std::string(\"[In \\\"\") + std::filesystem::path(__FILE__).filename().string() + \"\\\" Line \" + std::to_string(__LINE__) + \"] \"; \\\r\n\tif(LibDlCodecThrowMessage.substr(0, LibDlCodecThrowMessagePrefix.length()) != LibDlCodecThrowMessagePrefix) \\\r\n\t\tthrow std::exception((LibDlCodecThrowMessagePrefix + LibDlCodecThrowMessage).c_str()); \\\r\n\telse \\\r\n\t\tthrow std::exception(LibDlCodecThrowMessage.c_str()); \\\n}\r\n\r\nMOEVSINFERTOOLSHEADER\r\nstruct SlicerSettings\r\n{\r\n\tint32_t SamplingRate = 48000;\r\n\tdouble Threshold = 30.;\r\n\tdouble MinLength = 3.;\r\n\tint32_t WindowLength = 2048;\r\n\tint32_t HopSize = 512;\r\n};\r\nclass Wav {\r\npublic:\r\n\tstatic constexpr int HEAD_LENGTH = 1024;\r\n\tstruct WAV_HEADER {\r\n\t\tchar             RIFF[4] = { 'R','I','F','F' };\r\n\t\tunsigned long    ChunkSize;\r\n\t\tchar             WAVE[4] = { 'W','A','V','E' };\r\n\t\tchar             fmt[4] = { 'f','m','t',' ' };\r\n\t\tunsigned long    Subchunk1Size;\r\n\t\tunsigned short   AudioFormat;\r\n\t\tunsigned short   NumOfChan;\r\n\t\tunsigned long    SamplesPerSec;\r\n\t\tunsigned long    bytesPerSec;\r\n\t\tunsigned short   blockAlign;\r\n\t\tunsigned short   bitsPerSample;\r\n\t\tchar             Subchunk2ID[4] = { 'd','a','t','a' };\r\n\t\tunsigned long    Subchunk2Size;\r\n\t\tWAV_HEADER(unsigned long cs = 36, unsigned long sc1s = 16, unsigned short af = 1, unsigned short nc = 1, unsigned long sr = 22050, unsigned long bps = 44100, unsigned short ba = 2, unsigned short bips = 16, unsigned long sc2s = 0) :ChunkSize(cs), Subchunk1Size(sc1s), AudioFormat(af), NumOfChan(nc), SamplesPerSec(sr), bytesPerSec(bps), blockAlign(ba), bitsPerSample(bips), Subchunk2Size(sc2s) {}\r\n\t};\r\n\tusing iterator = int16_t*;\r\n\tWav(unsigned long cs = 36, unsigned long sc1s = 16, unsigned short af = 1, unsigned short nc = 1, unsigned long sr = 22050, unsigned long bps = 44100, unsigned short ba = 2, unsigned short bips = 16, unsigned long sc2s = 0) :header({\r\n\t\t\tcs,\r\n\t\t\tsc1s,\r\n\t\t\taf,\r\n\t\t\tnc,\r\n\t\t\tsr,\r\n\t\t\tbps,\r\n\t\t\tba,\r\n\t\t\tbips,\r\n\t\t\tsc2s\r\n\t\t}), Data(nullptr), StartPos(44) {\r\n\t\tdataSize = 0;\r\n\t\tSData = nullptr;\r\n\t}\r\n\tWav(unsigned long sr, unsigned long length, const void* data) :header({\r\n\t\t\t36,\r\n\t\t\t16,\r\n\t\t\t1,\r\n\t\t\t1,\r\n\t\t\tsr,\r\n\t\t\tsr * 2,\r\n\t\t\t2,\r\n\t\t\t16,\r\n\t\t\tlength\r\n\t\t}), Data(new char[length + 1]), StartPos(44)\r\n\t{\r\n\t\theader.ChunkSize = 36 + length;\r\n\t\tmemcpy(Data, data, length);\r\n\t\tSData = reinterpret_cast<int16_t*>(Data);\r\n\t\tdataSize = length / 2;\r\n\t}\r\n\tWav(const wchar_t* Path);\r\n\tWav(const Wav& input);\r\n\tWav(Wav&& input) noexcept;\r\n\tWav& operator=(const Wav& input) = delete;\r\n\tWav& operator=(Wav&& input) noexcept;\r\n\t~Wav() { destory(); }\r\n\tWav& cat(const Wav& input);\r\n\t[[nodiscard]] bool isEmpty() const { return this->header.Subchunk2Size == 0; }\r\n\t[[nodiscard]] const char* getData() const { return Data; }\r\n\tchar* getData() { return Data; }\r\n\t[[nodiscard]] WAV_HEADER getHeader() const { return header; }\r\n\tWAV_HEADER& Header() { return header; }\r\n\tvoid destory() const { delete[] Data; }\r\n\tvoid changeData(const void* indata, long length, int sr)\r\n\t{\r\n\t\tdelete[] Data;\r\n\t\tData = new char[length];\r\n\t\tmemcpy(Data, indata, length);\r\n\t\theader.ChunkSize = 36 + length;\r\n\t\theader.Subchunk2Size = length;\r\n\t\theader.SamplesPerSec = sr;\r\n\t\theader.bytesPerSec = 2 * sr;\r\n\t}\r\n\tint16_t& operator[](const size_t index) const\r\n\t{\r\n\t\tif (index < dataSize)\r\n\t\t\treturn *(SData + index);\r\n\t\treturn *(SData + dataSize - 1);\r\n\t}\r\n\t[[nodiscard]] iterator begin() const\r\n\t{\r\n\t\treturn reinterpret_cast<int16_t*>(Data);\r\n\t}\r\n\t[[nodiscard]] iterator end() const\r\n\t{\r\n\t\treturn reinterpret_cast<int16_t*>(Data + header.Subchunk2Size);\r\n\t}\r\n\t[[nodiscard]] int64_t getDataLen()const\r\n\t{\r\n\t\treturn static_cast<int64_t>(dataSize);\r\n\t}\r\n\tvoid Writef(const std::wstring& filepath) const\r\n\t{\r\n\t\tFILE* FOut = nullptr;\r\n\t\t_wfopen_s(&FOut, filepath.c_str(), L\"wb\");\r\n\t\tif (!FOut)\r\n\t\t\treturn;\r\n\t\tfwrite(&header, 1, sizeof(header), FOut);\r\n\t\tfwrite(Data, 1, dataSize * 2, FOut);\r\n\t\tfclose(FOut);\r\n\t\tFOut = nullptr;\r\n\t}\r\n\r\n\tstatic void WritePCMData(int samplingrate, int channel, const std::vector<int16_t>& PCMDATA, const std::wstring& filepath)\r\n\t{\r\n\t\tconst WAV_HEADER TmpHeader(long(36 + 2 * PCMDATA.size()), 16, 1, short(channel), samplingrate, samplingrate * 2 * channel, short(2 * channel), short(16), long(2 * PCMDATA.size()));\r\n\t\tFILE* FOut = nullptr;\r\n\t\t_wfopen_s(&FOut, filepath.c_str(), L\"wb\");\r\n\t\tif (!FOut) return;\r\n\t\tfwrite(&TmpHeader, 1, sizeof(TmpHeader), FOut);\r\n\t\tfwrite(PCMDATA.data(), 1, PCMDATA.size() * 2, FOut);\r\n\t\tfclose(FOut);\r\n\t\tFOut = nullptr;\r\n\t}\r\n\r\nprivate:\r\n\tWAV_HEADER header;\r\n\tchar* Data;\r\n\tint16_t* SData;\r\n\tsize_t dataSize;\r\n\tint StartPos;\r\n};\r\n\r\n/**\r\n * \\brief 切片机切片（获取切片位置）\r\n * \\param input PCM数据（SignedInt16）\r\n * \\param _slicer 切片机设置\r\n * \\return 切片位置\r\n */\r\nLibSvcApi std::vector<size_t> SliceAudio(const std::vector<int16_t>& input, const SlicerSettings& _slicer);\r\n\r\n/**\r\n * \\brief 均值滤波器\r\n * \\param vec 待滤波的数据\r\n * \\param window_size 窗口大小\r\n * \\return 滤波后数据\r\n */\r\nLibSvcApi std::vector<float> mean_filter(const std::vector<float>& vec, size_t window_size);\r\n\r\ntemplate<typename T>\r\ndouble getAvg(const T* start, const T* end)\r\n{\r\n\tconst auto size = end - start + 1;\r\n\tauto avg = (double)(*start);\r\n\tfor (auto i = 1; i < size; i++)\r\n\t\tavg = avg + (abs((double)start[i]) - avg) / (double)(i + 1ull);\r\n\treturn avg;\r\n}\r\n\r\nLibSvcApi std::vector<double> arange(double start, double end, double step = 1.0, double div = 1.0);\r\n\r\n/**\r\n * \\brief 重采样（插值）\r\n * \\tparam TOut 输出类型 \r\n * \\tparam TIn 输入类型\r\n * \\param _Data 输入数据\r\n * \\param src 输入采样率\r\n * \\param dst 输出采样率\r\n * \\param n_Div 给输出的数据统一除以这个数\r\n * \\return 输出数据\r\n */\r\ntemplate<typename TOut, typename TIn>\r\nstatic std::vector<TOut> InterpResample(const std::vector<TIn>& _Data, long src, long dst, TOut n_Div = TOut(1))\r\n{\r\n\tif (src != dst)\r\n\t{\r\n\t\tconst double intstep = double(src) / double(dst);\r\n\t\tconst auto xi = InferTools::arange(0, double(_Data.size()), intstep);\r\n\t\tauto x0 = InferTools::arange(0, double(_Data.size()));\r\n\t\twhile (x0.size() < _Data.size())\r\n\t\t\tx0.emplace_back(x0[x0.size() - 1] + 1.0);\r\n\t\twhile (x0.size() > _Data.size())\r\n\t\t\tx0.pop_back();\r\n\r\n\t\tstd::vector<double> y0(_Data.size());\r\n\t\tfor (size_t i = 0; i < _Data.size(); ++i)\r\n\t\t\ty0[i] = double(_Data[i]) / double(n_Div);\r\n\r\n\t\tstd::vector<double> yi(xi.size());\r\n\t\tinterp1(x0.data(), y0.data(), long(x0.size()), xi.data(), long(xi.size()), yi.data());\r\n\r\n\t\tstd::vector<TOut> out(xi.size());\r\n\t\tfor (size_t i = 0; i < yi.size(); ++i)\r\n\t\t\tout[i] = TOut(yi[i]);\r\n\t\treturn out;\r\n\t}\r\n\tstd::vector<TOut> out(_Data.size());\r\n\tfor (size_t i = 0; i < _Data.size(); ++i)\r\n\t\tout[i] = TOut(_Data[i]) / n_Div;\r\n\treturn out;\r\n}\r\n\r\n/**\r\n * \\brief 重采样（插值）\r\n * \\tparam T 数据类型\r\n * \\param Data 输入数据\r\n * \\param src 输入采样率\r\n * \\param dst 输出采样率\r\n * \\return 输出数据\r\n */\r\ntemplate<typename T>\r\nstatic std::vector<T> InterpFunc(const std::vector<T>& Data, long src, long dst)\r\n{\r\n\tif (src != dst)\r\n\t{\r\n\t\tconst double intstep = double(src) / double(dst);\r\n\t\tauto xi = InferTools::arange(0, double(Data.size()), intstep);\r\n\t\twhile (xi.size() < size_t(dst))\r\n\t\t\txi.emplace_back(xi[xi.size() - 1] + 1.0);\r\n\t\twhile (xi.size() > size_t(dst))\r\n\t\t\txi.pop_back();\r\n\t\tauto x0 = InferTools::arange(0, double(Data.size()));\r\n\t\twhile (x0.size() < Data.size())\r\n\t\t\tx0.emplace_back(x0[x0.size() - 1] + 1.0);\r\n\t\twhile (x0.size() > Data.size())\r\n\t\t\tx0.pop_back();\r\n\t\tstd::vector<double> y0(Data.size());\r\n\t\tfor (size_t i = 0; i < Data.size(); ++i)\r\n\t\t\ty0[i] = Data[i] <= T(0.0001) ? NAN : double(Data[i]);\r\n\t\tstd::vector<double> yi(xi.size());\r\n\t\tinterp1(x0.data(), y0.data(), long(x0.size()), xi.data(), long(xi.size()), yi.data());\r\n\t\tstd::vector<T> out(xi.size());\r\n\t\tfor (size_t i = 0; i < yi.size(); ++i)\r\n\t\t\tout[i] = isnan(yi[i]) ? T(0.0) : T(yi[i]);\r\n\t\treturn out;\r\n\t}\r\n\treturn Data;\r\n}\r\n#ifdef MoeVoiceStudioAvxAcc\r\nclass FloatTensorWrapper\r\n{\r\npublic:\r\n\tFloatTensorWrapper() = delete;\r\n\t~FloatTensorWrapper() { _data_ptr = nullptr; }\r\n\tFloatTensorWrapper(float* const data_p, size_t _size) : _data_ptr(data_p), _data_size(_size) {}\r\n\tFloatTensorWrapper(const FloatTensorWrapper& _copy) = delete;\r\n\tFloatTensorWrapper& operator=(const FloatTensorWrapper&) = delete;\r\n\tFloatTensorWrapper(FloatTensorWrapper&& _move) noexcept:_data_ptr(_move._data_ptr), _data_size(_move._data_size) {}\r\n\tFloatTensorWrapper& operator=(FloatTensorWrapper&& _move) noexcept\r\n\t{\r\n\t\t_data_ptr = _move._data_ptr;\r\n\t\t_data_size = _move._data_size;\r\n\t\treturn *this;\r\n\t}\r\n\ttemplate<typename T>\r\n\tstatic const T& Min(const T& a, const T& b) { return (a > b) ? b : a; }\r\n\tfloat& operator[](size_t index) const { return *(_data_ptr + Min(index, _data_size)); }\r\n\tFloatTensorWrapper& operator+=(const FloatTensorWrapper& _right);\r\n\tFloatTensorWrapper& operator-=(const FloatTensorWrapper& _right);\r\n\tFloatTensorWrapper& operator*=(const FloatTensorWrapper& _right);\r\n\tFloatTensorWrapper& operator/=(const FloatTensorWrapper& _right);\r\n\tFloatTensorWrapper& operator+=(float _right);\r\n\tFloatTensorWrapper& operator-=(float _right);\r\n\tFloatTensorWrapper& operator*=(float _right);\r\n\tFloatTensorWrapper& operator/=(float _right);\r\nprivate:\r\n\tfloat* _data_ptr = nullptr;\r\n\tsize_t _data_size = 0;\r\n};\r\n#endif\r\nMOEVSINFERTOOLSEND"
  },
  {
    "path": "libsvc/Modules/header/Logger/MoeSSLogger.hpp",
    "content": "﻿#pragma once\r\n#include <string>\r\n#include \"../StringPreprocess.hpp\"\r\n#include \"../../framework.h\"\r\n#include <filesystem>\r\n#include <mutex>\r\n#define __MOEVS_DEBUG_MESSAGE(msg) __MOEVS_DEBUG_INFO(__FILE__, __LINE__, msg)\r\n#define logger MoeSSLogger::GetLogger()\r\n\r\nnamespace MoeSSLogger\r\n{\r\n\tclass Logger\r\n\t{\r\n\tpublic:\r\n\t\tusing logger_fn = void(*)(const wchar_t*, const char*);\r\n\t\tLogger();\r\n\t\t~Logger();\r\n\t\tLogger(logger_fn error_fn, logger_fn log_fn);\r\n\t\tvoid log(const std::wstring&);\r\n\t\tvoid log(const char*);\r\n\t\tvoid error(const std::wstring&);\r\n\t\tvoid error(const char*);\r\n\t\tvoid enable(bool _filelogger)\r\n\t\t{\r\n\t\t\tfilelogger = _filelogger;\r\n\t\t}\r\n\tprivate:\r\n\t\tbool custom_logger_fn = false;\r\n\t\tstd::filesystem::path cur_log_dir, logpath, errorpath;\r\n\t\tlogger_fn cerror_fn = nullptr, cloggerfn = nullptr;\r\n\t\tFILE* log_file = nullptr, * error_file = nullptr;\r\n\t\tbool filelogger = true;\r\n\t\tstd::mutex mx;\r\n\t};\r\n\r\n\tLibSvcApi Logger& GetLogger();\r\n}"
  },
  {
    "path": "libsvc/Modules/header/Models/DiffSvc.hpp",
    "content": "﻿/**\r\n * FileName: DiffSvc.hpp\r\n * Note: MoeVoiceStudioCore Onnx Diffusion系Svc 模型定义\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include <map>\r\n#include \"SVC.hpp\"\r\n\r\nMoeVoiceStudioCoreHeader\r\n\r\nLibSvcApi void LoadVocoderModel(const std::wstring& VocoderPath);\r\n\r\nLibSvcApi void UnLoadVocoderModel();\r\n\r\nLibSvcApi bool VocoderEnabled();\r\n\r\nLibSvcApi Ort::Session* GetCurrentVocoder();\r\n\r\n/**\r\n * \\brief DiffSvc模型\r\n */\r\nclass DiffusionSvc : public SingingVoiceConversion\r\n{\r\npublic:\r\n    DiffusionSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\r\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\r\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\r\n\r\n    /**\r\n     * \\brief 加载DiffSvc模型\r\n     * \\param _PathDict 路径，Key分别为[\"Hubert\", \"Hifigan\", \"Encoder\", \"DenoiseFn\", \"NoisePredictor\", \"AfterProcess\", \"DiffSvc\", \"Naive\", \"Alphas\"]，其中\"DiffSvc\"、\"Naive\"、\"Alphas\"为可选项\r\n     * \\param _Config 配置Json\r\n     * \\param _ProgressCallback 进度条回调函数\r\n     * \\param ExecutionProvider_ Provider\r\n     * \\param DeviceID_ GPU设备ID\r\n     * \\param ThreadCount_ 线程数\r\n     */\r\n    DiffusionSvc(const std::map<std::string,std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\r\n                 ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\r\n                 unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\r\n\r\n    DiffusionSvc(const Hparams& _Hps, const ProgressCallback& _ProgressCallback,\r\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\r\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\r\n\r\n\t~DiffusionSvc() override;\r\n\r\n    void load(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback);\r\n\r\n    void Destory();\r\n\r\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\r\n        const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\r\n\r\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const override;\r\n\r\n    [[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Paths, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\r\n        const InferTools::SlicerSettings& _SlicerSettings) const override;\r\n\r\n    [[nodiscard]] std::vector<int16_t> InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\r\n\r\n    [[nodiscard]] std::vector<int16_t> ShallowDiffusionInference(\n\t\tstd::vector<float>& _16KAudioHubert,\n        const MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n        std::pair<std::vector<float>, int64_t>& _Mel,\n        const std::vector<float>& _SrcF0,\n        const std::vector<float>& _SrcVolume,\n        const std::vector<std::vector<float>>& _SrcSpeakerMap,\n        size_t& Process,\n        int64_t SrcSize\n    ) const;\r\n\r\n    [[nodiscard]] int64_t GetMaxStep() const\r\n    {\r\n        return MaxStep;\r\n    }\r\n\r\n    [[nodiscard]] bool OldVersion() const\r\n    {\r\n        return diffSvc;\r\n    }\r\n\r\n    [[nodiscard]] const std::wstring& GetDiffSvcVer() const\r\n    {\r\n        return DiffSvcVersion;\r\n    }\r\n\r\n    [[nodiscard]] int64_t GetMelBins() const\r\n    {\r\n        return melBins;\r\n    }\r\n\r\n    void NormMel(std::vector<float>& MelSpec) const;\r\n\r\nprivate:\r\n    Ort::Session* encoder = nullptr;\r\n    Ort::Session* denoise = nullptr;\r\n    Ort::Session* pred = nullptr;\r\n    Ort::Session* after = nullptr;\r\n    Ort::Session* alpha = nullptr;\r\n    Ort::Session* naive = nullptr;\r\n\r\n    Ort::Session* diffSvc = nullptr;\r\n\r\n    int64_t melBins = 128;\r\n    int64_t Pndms = 100;\r\n    int64_t MaxStep = 1000;\r\n    float SpecMin = -12;\r\n    float SpecMax = 2;\r\n\r\n    std::wstring DiffSvcVersion = L\"DiffSvc\";\r\n\r\n    const std::vector<const char*> nsfInput = { \"c\", \"f0\" };\r\n    const std::vector<const char*> nsfOutput = { \"audio\" };\r\n    const std::vector<const char*> DiffInput = { \"hubert\", \"mel2ph\", \"spk_embed\", \"f0\", \"initial_noise\", \"speedup\" };\r\n    const std::vector<const char*> DiffOutput = { \"mel_pred\", \"f0_pred\" };\r\n    const std::vector<const char*> afterInput = { \"x\" };\r\n    const std::vector<const char*> afterOutput = { \"mel_out\" };\r\n    const std::vector<const char*> naiveOutput = { \"mel\" };\r\n};\r\n\r\nLibSvcApi std::vector<int16_t> VocoderInfer(std::vector<float>& Mel, std::vector<float>& F0, int64_t MelBins, int64_t MelSize, const Ort::MemoryInfo* Mem, void* _VocoderModel = nullptr);\r\n\r\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libsvc/Modules/header/Models/EnvManager.hpp",
    "content": "﻿/**\r\n * FileName: EnvManager.hpp\r\n * Note: MoeVoiceStudioCore 环境管理\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include <onnxruntime_cxx_api.h>\r\n#include \"../../header/Logger/MoeSSLogger.hpp\"\r\n\r\n#define MoeVoiceStudioCoreEnvManagerHeader namespace moevsenv{\r\n#define MoeVoiceStudioCoreEnvManagerEnd }\r\n\r\nMoeVoiceStudioCoreEnvManagerHeader\r\n\r\nbool SingleOrtApiEnvEnabled();\r\n\r\nvoid UseSingleOrtApiEnv(bool _cond);\r\n\r\nclass MoeVoiceStudioEnv\r\n{\r\npublic:\r\n\tMoeVoiceStudioEnv() = default;\r\n\t~MoeVoiceStudioEnv() { Destory(); }\r\n\tLibSvcApi void Load(unsigned ThreadCount, unsigned DeviceID, unsigned Provider);\r\n\tLibSvcApi void Destory();\r\n\tLibSvcApi [[nodiscard]] bool IsEnabled() const;\r\n\t[[nodiscard]] Ort::Env* GetEnv() const { return GlobalOrtEnv; }\r\n\t[[nodiscard]] Ort::SessionOptions* GetSessionOptions() const { return GlobalOrtSessionOptions; }\r\n\t[[nodiscard]] Ort::MemoryInfo* GetMemoryInfo() const { return GlobalOrtMemoryInfo; }\r\n\t[[nodiscard]] int GetCurThreadCount() const { return (int)CurThreadCount; }\r\n\t[[nodiscard]] int GetCurDeviceID() const { return (int)CurDeviceID; }\r\n\t[[nodiscard]] int GetCurProvider() const { return (int)CurProvider; }\r\nprivate:\r\n\tvoid Create(unsigned ThreadCount_, unsigned DeviceID_, unsigned ExecutionProvider_);\r\n\tOrt::Env* GlobalOrtEnv = nullptr;\r\n\tOrt::SessionOptions* GlobalOrtSessionOptions = nullptr;\r\n\tOrt::MemoryInfo* GlobalOrtMemoryInfo = nullptr;\r\n\tunsigned CurThreadCount = unsigned(-1);\r\n\tunsigned CurDeviceID = unsigned(-1);\r\n\tunsigned CurProvider = unsigned(-1);\r\n\tOrtCUDAProviderOptionsV2* cuda_option_v2 = nullptr;\r\n};\r\n\r\nLibSvcApi MoeVoiceStudioEnv& GetGlobalMoeVSEnv();\r\n\r\nMoeVoiceStudioCoreEnvManagerEnd"
  },
  {
    "path": "libsvc/Modules/header/Models/ModelBase.hpp",
    "content": "﻿/**\r\n * FileName: ModelBase.hpp\r\n * Note: MoeVoiceStudioCore Onnx 模型基类\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include <functional>\r\n#include <thread>\r\n#include <onnxruntime_cxx_api.h>\r\n#ifdef _WIN32\r\n#define WIN32_LEAN_AND_MEAN\r\n#endif\r\n#include <windows.h>\r\n#include \"../../Lib/MJson/MJson.h\"\r\n#include \"EnvManager.hpp\"\r\n#include \"MoeVSProject.hpp\"\r\n#include \"../InferTools/inferTools.hpp\"\r\n\r\n#define MoeVoiceStudioCoreHeader namespace MoeVoiceStudioCore{\r\n#define MoeVoiceStudioCoreEnd }\r\n#define MoeVSNotImplementedError LibDLVoiceCodecThrow(\"NotImplementedError\")\r\n#define MoeVSClassName(__Moe__VSClassName) __NAME__CLASS__.emplace_back((__Moe__VSClassName))\r\n#define MoeVSMaxPath 1024\r\nstatic std::wstring GetCurrentFolder(const std::wstring& defualt = L\"\")\r\n{\r\n\twchar_t path[MoeVSMaxPath];\r\n#ifdef _WIN32\r\n\tGetModuleFileName(nullptr, path, MoeVSMaxPath);\r\n\tstd::wstring _curPath = path;\r\n\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\r\n\treturn _curPath;\r\n#else\r\n\t//TODO Other System\r\n#error Other System ToDO\r\n#endif\r\n}\r\n\r\nMoeVoiceStudioCoreHeader\r\nstruct DiffusionSvcPaths\r\n{\r\n\tstd::wstring Encoder;\r\n\tstd::wstring Denoise;\r\n\tstd::wstring Pred;\r\n\tstd::wstring After;\r\n\tstd::wstring Alpha;\r\n\tstd::wstring Naive;\r\n\r\n\tstd::wstring DiffSvc;\r\n};\r\n\r\nstruct ReflowSvcPaths\r\n{\r\n\tstd::wstring Encoder;\r\n\tstd::wstring VelocityFn;\r\n\tstd::wstring After;\r\n};\r\n\r\nstruct VitsSvcPaths\r\n{\r\n\tstd::wstring VitsSvc;\r\n};\r\n\r\nstruct ClusterConfig\r\n{\r\n\tint64_t ClusterCenterSize = 10000;\r\n\tstd::wstring Path;\r\n\t/**\r\n\t * \\brief Type Of Cluster : \"KMeans\" \"Index\"\r\n\t */\r\n\tstd::wstring Type;\r\n};\r\n\r\nstruct Hparams\r\n{\r\n\t/**\r\n\t * \\brief Model Version\r\n\t * For VitsSvc : \"SoVits2.0\" \"SoVits3.0\" \"SoVits4.0\" \"SoVits4.0-DDSP\" \"RVC\"\r\n\t * For DiffusionSvc : \"DiffSvc\" \"DiffusionSvc\"\r\n\t */\r\n\tstd::wstring TensorExtractor = L\"DiffSvc\";\r\n\t/**\r\n\t * \\brief Path Of Hubert Model\r\n\t */\r\n\tstd::wstring HubertPath;\r\n\t/**\r\n\t * \\brief Path Of DiffusionSvc Model\r\n\t */\r\n\tDiffusionSvcPaths DiffusionSvc;\r\n\t/**\r\n\t * \\brief Path Of VitsSvc Model\r\n\t */\r\n\tVitsSvcPaths VitsSvc;\r\n\t/**\r\n\t * \\brief Path Of ReflowSvc Model\r\n\t */\r\n\tReflowSvcPaths ReflowSvc;\r\n\t/**\r\n\t * \\brief Config Of Cluster\r\n\t */\r\n\tClusterConfig Cluster;\r\n\t\r\n\tlong SamplingRate = 22050;\r\n\r\n\tint HopSize = 320;\r\n\tint64_t HiddenUnitKDims = 256;\r\n\tint64_t SpeakerCount = 1;\r\n\tbool EnableCharaMix = false;\r\n\tbool EnableVolume = false;\r\n\tbool VaeMode = true;\r\n\r\n\tint64_t MelBins = 128;\r\n\tint64_t Pndms = 100;\r\n\tint64_t MaxStep = 1000;\r\n\tfloat SpecMin = -12;\r\n\tfloat SpecMax = 2;\r\n\tfloat Scale = 1000.f;\r\n};\r\n\r\nclass MoeVoiceStudioModule\r\n{\r\npublic:\r\n\t//进度条回调\r\n\tusing ProgressCallback = std::function<void(size_t, size_t)>;\r\n\r\n\t//Provicer\r\n\tenum class ExecutionProviders\r\n\t{\r\n\t\tCPU = 0,\r\n\t\tCUDA = 1,\r\n#ifdef MOEVSDMLPROVIDER\r\n\t\tDML = 2\r\n#endif\r\n\t};\r\n\r\n\tstatic [[nodiscard]] std::vector<std::wstring> GetOpenFileNameMoeVS();\r\n\r\n\tstatic std::vector<std::wstring> CutLens(const std::wstring& input);\r\n\r\n\t/**\r\n\t * \\brief 构造Onnx模型基类\r\n\t * \\param ExecutionProvider_ ExecutionProvider(可以理解为设备)\r\n\t * \\param DeviceID_ 设备ID\r\n\t * \\param ThreadCount_ 线程数\r\n\t */\r\n\tMoeVoiceStudioModule(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_ = 0);\r\n\r\n\tvirtual ~MoeVoiceStudioModule();\r\n\r\n\t/**\r\n\t * \\brief 输入路径推理\r\n\t * \\param _Datas [路径，多个路径使用换行符隔开, 推理文本]\r\n\t * \\param _InferParams 推理参数\r\n\t * \\param _SlicerSettings 切片机配置\r\n\t * \\return 输出路径\r\n\t */\r\n\t[[nodiscard]] virtual std::vector<std::wstring> Inference(std::wstring& _Datas,\r\n\t                                                          const MoeVSProjectSpace::MoeVSParams& _InferParams,\r\n\t                                                          const InferTools::SlicerSettings& _SlicerSettings) const;\r\n\r\n\t/**\r\n\t * \\brief 获取采样率\r\n\t * \\return 采样率\r\n\t */\r\n\t[[nodiscard]] long GetSamplingRate() const\r\n\t{\r\n\t\treturn _samplingRate;\r\n\t}\r\n\r\n\tstatic float Clamp(float in, float min = -1.f, float max = 1.f)\r\n\t{\r\n\t\tif (in > max)\r\n\t\t\treturn max;\r\n\t\tif (in < min)\r\n\t\t\treturn min;\r\n\t\treturn in;\r\n\t}\r\nprotected:\r\n\t//采样率\r\n\tlong _samplingRate = 22050;\r\n\r\n\tOrt::Env* env = nullptr;\r\n\tOrt::SessionOptions* session_options = nullptr;\r\n\tOrt::MemoryInfo* memory_info = nullptr;\r\n\tExecutionProviders _cur_execution_provider = ExecutionProviders::CPU;\r\n\tProgressCallback _callback;\r\n\tmoevsenv::MoeVoiceStudioEnv OrtApiEnv;\r\n\r\n\tstd::vector<std::wstring> __NAME__CLASS__ = { L\"MoeVoiceStudioModule\" };\r\npublic:\r\n\t//*******************删除的函数********************//\r\n\tMoeVoiceStudioModule& operator=(MoeVoiceStudioModule&&) = delete;\r\n\tMoeVoiceStudioModule& operator=(const MoeVoiceStudioModule&) = delete;\r\n\tMoeVoiceStudioModule(const MoeVoiceStudioModule&) = delete;\r\n\tMoeVoiceStudioModule(MoeVoiceStudioModule&&) = delete;\r\n};\r\n\r\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libsvc/Modules/header/Models/MoeVSProject.hpp",
    "content": "﻿/**\r\n * FileName: MoeVSProject.hpp\r\n * Note: MoeVoiceStudioCore 项目相关的定义\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include <string>\r\n#include <vector>\r\n#include \"../StringPreprocess.hpp\"\r\n#include \"../../Lib/MJson/MJson.h\"\r\nnamespace MoeVSProjectSpace\r\n{\r\n    class FileWrapper\r\n    {\r\n    public:\r\n        FileWrapper() = delete;\r\n        FileWrapper(const wchar_t* _path, const wchar_t* _mode)\r\n        {\r\n            _wfopen_s(&file_, _path, _mode);\r\n        }\r\n        ~FileWrapper()\r\n        {\r\n            if (file_)\r\n                fclose(file_);\r\n            file_ = nullptr;\r\n        }\r\n        operator FILE* () const\r\n        {\r\n            return file_;\r\n        }\r\n        [[nodiscard]] bool IsOpen() const\r\n        {\r\n            return file_;\r\n        }\r\n    private:\r\n        FILE* file_ = nullptr;\r\n    };\r\n\r\n    using size_type = size_t;\r\n\r\n    template <typename T = float>\r\n    size_type GetSize(const std::vector<T>& inp_vec)\r\n    {\r\n        return inp_vec.size() * sizeof(T);\r\n    }\r\n\r\n    struct MoeVoiceStudioSvcSlice\r\n    {\r\n        std::vector<int16_t> Audio;\r\n        std::vector<float> F0;\r\n        std::vector<float> Volume;\r\n        std::vector<std::vector<float>> Speaker;\r\n        int32_t OrgLen = 0;\r\n        bool IsNotMute = false;\r\n        MoeVoiceStudioSvcSlice() = default;\r\n    };\r\n\r\n    struct MoeVoiceStudioSvcData\r\n    {\r\n        /*std::vector<std::vector<int16_t>> Audio;\r\n        std::vector<std::vector<float>> F0;\r\n        std::vector<std::vector<float>> Volume;\r\n        std::vector<std::vector<std::vector<float>>> Speaker;\r\n        std::vector<long> OrgLen;\r\n        std::vector<bool> IsNotMute;*/\r\n        std::vector<MoeVoiceStudioSvcSlice> Slices;\r\n        std::wstring Path;\r\n        MoeVoiceStudioSvcData() = default;\r\n        [[nodiscard]] size_type Size() const\r\n        {\r\n            size_type _size = 0;\r\n            const std::string bytePath = to_byte_string(Path);\r\n            _size += sizeof(long) * Slices.size() + Slices.size() + bytePath.length() + 1;\r\n            for (const auto& Slice : Slices)\r\n            {\r\n                _size += GetSize(Slice.Audio) + GetSize(Slice.F0) + GetSize(Slice.Volume);\r\n                for (const auto& it : Slice.Speaker)\r\n                    _size += GetSize(it);\r\n            }\r\n            return _size;\r\n        }\r\n    };\r\n\r\n\tstruct MoeVSParams\r\n\t{\r\n        //通用\r\n        float NoiseScale = 0.3f;                           //噪声修正因子          0-10\r\n        int64_t Seed = 52468;                              //种子\r\n        int64_t SpeakerId = 0;                             //角色ID\r\n        uint64_t SrcSamplingRate = 48000;                  //源采样率\r\n        int64_t SpkCount = 2;                              //模型角色数\r\n\r\n        //SVC\r\n\t\tfloat IndexRate = 0.f;                             //索引比               0-1\r\n\t\tfloat ClusterRate = 0.f;                           //聚类比               0-1\r\n\t\tfloat DDSPNoiseScale = 0.8f;                       //DDSP噪声修正因子      0-10\r\n\t\tfloat Keys = 0.f;                                  //升降调               -64-64\r\n\t\tsize_t MeanWindowLength = 2;                       //均值滤波器窗口大小     1-20\r\n\t\tsize_t Pndm = 1;                                 //Diffusion加速倍数    1-200\r\n\t\tsize_t Step = 100;                                //Diffusion总步数      1-1000\r\n        float TBegin = 0.f;\r\n        float TEnd = 1.f;\r\n\t\tstd::wstring Sampler = L\"Pndm\";                    //Diffusion采样器\r\n        std::wstring ReflowSampler = L\"Eular\";             //Reflow采样器\r\n\t\tstd::wstring F0Method = L\"Dio\";                    //F0提取算法\r\n        bool UseShallowDiffusion = false;                  //使用浅扩散\r\n        void* _VocoderModel = nullptr;\r\n        void* _ShallowDiffusionModel = nullptr;\r\n        bool ShallowDiffusionUseSrcAudio = true;\r\n        int VocoderHopSize = 512;\r\n        int VocoderMelBins = 128;\r\n        int VocoderSamplingRate = 44100;\r\n        int64_t ShallowDiffuisonSpeaker = 0;\r\n\r\n        //SVCRTInfer\r\n        int64_t RTSampleSize = 44100;\r\n        int64_t CrossFadeLength = 320;\r\n\r\n        //TTS\r\n        std::vector<float> SpeakerMix;                     //角色混合比例\r\n        float LengthScale = 1.0f;                          //时长修正因子\r\n        float DurationPredictorNoiseScale = 0.8f;          //随机时长预测器噪声修正因子\r\n        float FactorDpSdp = 0.f;                           //随机时长预测器与时长预测器混合比例\r\n        float GateThreshold = 0.66666f;                    //Tacotron2解码器EOS阈值\r\n        int64_t MaxDecodeStep = 2000;                      //Tacotron2最大解码步数\r\n        std::vector<std::wstring> EmotionPrompt;           //情感标记\r\n        std::wstring PlaceHolderSymbol = L\"|\";             //音素分隔符\r\n        float RestTime = 0.5f;                             //停顿时间，为负数则直接断开音频并创建新音频\r\n        std::string LanguageSymbol = \"JP\";                 //语言\r\n        std::wstring AdditionalInfo;                       //G2P额外信息\r\n        std::wstring SpeakerName = L\"0\";                   //角色名\r\n\t};\r\n\r\n    struct MoeVSTTSToken\r\n    {\r\n        std::wstring Text;                                 //输入文本\r\n        std::vector<std::wstring> Phonemes;                //音素序列\r\n        std::vector<int64_t> Tones;                        //音调序列\r\n        std::vector<int64_t> Durations;                    //时长序列\r\n        std::vector<std::string> Language;                 //语言序列\r\n\r\n        MoeVSTTSToken() = default;\r\n        MoeVSTTSToken(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams);\r\n\r\n        [[nodiscard]] std::wstring Serialization() const;\r\n    };\r\n\r\n    struct MoeVSTTSSeq\r\n    {\r\n        std::wstring TextSeq;\r\n        std::vector<MoeVSTTSToken> SlicedTokens;\r\n        std::vector<float> SpeakerMix;                     //角色混合比例\r\n        std::vector<std::wstring> EmotionPrompt;           //情感标记\r\n        std::wstring PlaceHolderSymbol = L\"|\";             //音素分隔符\r\n        float NoiseScale = 0.3f;                           //噪声修正因子             0-10\r\n        float LengthScale = 1.0f;                          //时长修正因子\r\n        float DurationPredictorNoiseScale = 0.3f;          //随机时长预测器噪声修正因子\r\n        float FactorDpSdp = 0.3f;                          //随机时长预测器与时长预测器混合比例\r\n        float GateThreshold = 0.66666f;                    //Tacotron2解码器EOS阈值\r\n        int64_t MaxDecodeStep = 2000;                      //Tacotron2最大解码步数\r\n        int64_t Seed = 52468;                              //种子\r\n        float RestTime = 0.5f;                             //停顿时间，为负数则直接断开音频并创建新音频\r\n        std::string LanguageSymbol = \"ZH\";                 //语言标记\r\n        std::wstring SpeakerName = L\"0\";                   //角色或名称ID\r\n        std::wstring AdditionalInfo;                       //G2P额外信息\r\n\r\n        MoeVSTTSSeq() = default;\r\n        MoeVSTTSSeq(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams);\r\n\r\n        [[nodiscard]] std::wstring Serialization() const;\r\n\r\n        bool operator==(const MoeVSTTSSeq& right) const;\r\n    };\r\n\r\n    using MoeVSSvcParams = MoeVSParams;\r\n    using MoeVSTTSParams = MoeVSParams;\r\n\r\n    struct ParamsOffset\r\n    {\r\n        std::vector<size_type> OrgAudio;\r\n        //std::vector<size_type> Hidden_Unit;\r\n        std::vector<size_type> F0;\r\n        std::vector<size_type> Volume;\r\n        std::vector<size_type> Speaker;\r\n        [[nodiscard]] size_type Size() const\r\n        {\r\n            return size_type(OrgAudio.size() + F0.size() + Volume.size() + Speaker.size()) * sizeof(size_type);\r\n        }\r\n        ParamsOffset() = default;\r\n    };\r\n\r\n    class MoeVSProject\r\n    {\r\n    public:\r\n        struct Header\r\n        {\r\n            char ChunkSymbol[8] = { 'M','O','E','V','S','P','R','J' };\r\n            size_type DataHeaderAmount = 0;\r\n        };\r\n        struct DataHeader\r\n        {\r\n            char ChunkSymbol[4] = { 'D','A','T','A' };\r\n\r\n            size_type OrgAudioOffsetPosSize = 0;\r\n\r\n            size_type F0OffsetPosSize = 0;\r\n\r\n            size_type VolumeOffsetPosSize = 0;\r\n\r\n            size_type CharacterOffsetPosSize = 0;\r\n\r\n            size_type OrgLenSize = 0;\r\n\r\n            size_type SymbolSize = 0;\r\n\r\n            size_type PathSize = 0;\r\n\r\n            size_type HeaderSize = sizeof(DataHeader) - sizeof(size_type);\r\n        };\r\n        struct Data\r\n        {\r\n            DataHeader Header;\r\n            ParamsOffset Offset;\r\n            MoeVoiceStudioSvcData ParamData;\r\n            [[nodiscard]] size_type Size() const\r\n            {\r\n                size_type size = sizeof(DataHeader);\r\n                size += Offset.Size();\r\n                size += ParamData.Size();\r\n                return size;\r\n            }\r\n        };\r\n\r\n        LibSvcApi MoeVSProject() = delete;\r\n        ~MoeVSProject() = default;\r\n\r\n        //从文件读取项目\r\n        LibSvcApi MoeVSProject(const std::wstring& _path);\r\n\r\n        //从音频数据构造项目\r\n        LibSvcApi MoeVSProject(const std::vector<MoeVoiceStudioSvcData>& _params);\r\n\r\n        //写入文件\r\n        LibSvcApi void Write(const std::wstring& _path) const;\r\n\r\n        //从项目获取音频数据\r\n        [[nodiscard]] std::vector<MoeVoiceStudioSvcData> GetParams() const\r\n        {\r\n            std::vector<MoeVoiceStudioSvcData> Params_data;\r\n            Params_data.reserve(data_.size());\r\n            for (const auto& i : data_)\r\n                Params_data.emplace_back(i.ParamData);\r\n            return Params_data;\r\n        }\r\n\r\n        //从项目获取音频数据（移动构造）\r\n        [[nodiscard]] std::vector<MoeVoiceStudioSvcData> GetParamsMove()\r\n        {\r\n            std::vector<MoeVoiceStudioSvcData> Params_data;\r\n            Params_data.reserve(data_.size());\r\n            for (auto& i : data_)\r\n                Params_data.emplace_back(std::move(i.ParamData));\r\n            return Params_data;\r\n        }\r\n    private:\r\n        static constexpr size_t begin_offset = sizeof(Header);\r\n        Header moevs_proj_header_;\r\n        std::vector<size_type> data_pos_;\r\n        size_type data_chunk_begin_ = 0;\r\n        std::vector<Data> data_;\r\n    };\r\n}\r\n"
  },
  {
    "path": "libsvc/Modules/header/Models/ReflowSvc.hpp",
    "content": "﻿/**\n * FileName: ReflowSvc.hpp\n * Note: MoeVoiceStudioCore Onnx Reflow系Svc 模型定义\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <map>\n#include \"SVC.hpp\"\n\nMoeVoiceStudioCoreHeader\n\n/**\n * \\brief Reflow模型\n */\nclass ReflowSvc : public SingingVoiceConversion\n{\npublic:\n    ReflowSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    /**\n     * \\brief 加载Reflow模型\n     * \\param _PathDict 路径，Key分别为[\"Hubert\", \"Hifigan\", \"Encoder\", \"VelocityFn\", \"AfterProcess\"]\n     * \\param _Config 配置Json\n     * \\param _ProgressCallback 进度条回调函数\n     * \\param ExecutionProvider_ Provider\n     * \\param DeviceID_ GPU设备ID\n     * \\param ThreadCount_ 线程数\n     */\n    ReflowSvc(const std::map<std::string,std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\n                 ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n                 unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    ReflowSvc(const Hparams& _Hps, const ProgressCallback& _ProgressCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n\t~ReflowSvc() override;\n\n    void load(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback);\n\n    void Destory();\n\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\n        const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\n\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const override;\n\n    [[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Paths, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n        const InferTools::SlicerSettings& _SlicerSettings) const override;\n\n    [[nodiscard]] std::vector<int16_t> InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\n\n    [[nodiscard]] std::vector<int16_t> ShallowDiffusionInference(\n\t\tstd::vector<float>& _16KAudioHubert,\n        const MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n        std::pair<std::vector<float>, int64_t>& _Mel,\n        const std::vector<float>& _SrcF0,\n        const std::vector<float>& _SrcVolume,\n        const std::vector<std::vector<float>>& _SrcSpeakerMap,\n        size_t& Process,\n        int64_t SrcSize\n    ) const;\n\n    [[nodiscard]] int64_t GetMaxStep() const\n    {\n        return MaxStep;\n    }\n\n    [[nodiscard]] const std::wstring& GetReflowSvcVer() const\n    {\n        return ReflowSvcVersion;\n    }\n\n    [[nodiscard]] int64_t GetMelBins() const\n    {\n        return melBins;\n    }\n\n    void NormMel(std::vector<float>& MelSpec) const;\n\nprivate:\n    Ort::Session* encoder = nullptr;\n    Ort::Session* velocity = nullptr;\n    Ort::Session* after = nullptr;\n\n    int64_t melBins = 128;\n    int64_t MaxStep = 100;\n    float SpecMin = -12;\n    float SpecMax = 2;\n    float Scale = 1000.f;\n    bool VaeMode = true;\n\n    std::wstring ReflowSvcVersion = L\"DiffusionSvc\";\n\n    const std::vector<const char*> nsfInput = { \"c\", \"f0\" };\n    const std::vector<const char*> nsfOutput = { \"audio\" };\n    const std::vector<const char*> afterInput = { \"x\" };\n    const std::vector<const char*> afterOutput = { \"mel_out\" };\n    const std::vector<const char*> OutputNamesEncoder = { \"x\", \"cond\", \"f0_pred\" };\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libsvc/Modules/header/Models/SVC.hpp",
    "content": "﻿/**\n * FileName: SVC.hpp\n * Note: MoeVoiceStudioCore OnnxSvc 模型基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"ModelBase.hpp\"\n#include \"../Logger/MoeSSLogger.hpp\"\n#include \"../InferTools/inferTools.hpp\"\n#include \"../InferTools/TensorExtractor/TensorExtractorManager.hpp\"\n#include \"../InferTools/Cluster/MoeVSClusterManager.hpp\"\n\nMoeVoiceStudioCoreHeader\n\n/*\nclass OnnxModule\n{\npublic:\n\tenum class Device\n\t{\n\t\tCPU = 0,\n\t\tCUDA = 1,\n#ifdef MOEVSDMLPROVIDER\n\t\tDML = 2\n#endif\n\t};\n\tusing callback = std::function<void(size_t, size_t)>;\n\tusing int64 = int64_t;\n\tusing MTensor = Ort::Value;\n\n\tOnnxModule();\n\tvirtual ~OnnxModule();\n\tvoid ChangeDevice(Device _dev);\n\n\tstatic std::vector<std::wstring> CutLens(const std::wstring& input);\n\n\t[[nodiscard]] long GetSamplingRate() const\n\t{\n\t\treturn _samplingRate;\n\t}\n\n\ttemplate <typename T = float>\n\tstatic void LinearCombination(std::vector<T>& _data, T Value = T(1.0))\n\t{\n\t\tif(_data.empty())\n\t\t{\n\t\t\t_data = std::vector<T>(1, Value);\n\t\t\treturn;\n\t\t}\n\t\tT Sum = T(0.0);\n\t\tfor(const auto& i : _data)\n\t\t\tSum += i;\n\t\tif (Sum < T(0.0001))\n\t\t{\n\t\t\t_data = std::vector<T>(_data.size(), T(0.0));\n\t\t\t_data[0] = Value;\n\t\t\treturn;\n\t\t}\n\t\tSum *= T(Value);\n\t\tfor (auto& i : _data)\n\t\t\ti /= Sum;\n\t}\nprotected:\n\tOrt::Env* env = nullptr;\n\tOrt::SessionOptions* session_options = nullptr;\n\tOrt::MemoryInfo* memory_info = nullptr;\n\n\tmodelType _modelType = modelType::SoVits;\n\tDevice device_ = Device::CPU;\n\n\tlong _samplingRate = 22050;\n\n\tcallback _callback;\n\n\tstatic constexpr long MaxPath = 8000l;\n\tstd::wstring _outputPath = GetCurrentFolder() + L\"\\\\outputs\";\n};\n */\n\nclass SingingVoiceConversion : public MoeVoiceStudioModule\n{\npublic:\n\tSingingVoiceConversion(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_ = 0);\n\n\t/**\n\t * \\brief 输入路径推理\n\t * \\param _Paths 路径，多个路径使用换行符隔开\n\t * \\param _InferParams 推理参数\n\t * \\param _SlicerSettings 切片机配置\n\t * \\return 输出路径\n\t */\n\t[[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Paths,\n\t\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\t\tconst InferTools::SlicerSettings& _SlicerSettings) const override;\n\n\t/**\n\t * \\brief 推理一个音频\n\t * \\param _Slice 音频数据\n\t * \\param _InferParams 推理参数\n\t * \\return 推理结果（PCM signed-int16 单声道）\n\t */\n\t[[nodiscard]] virtual std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\n\t                                                          const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const;\n\n\t/**\n\t * \\brief 推理一个音频（使用引用）\n\t * \\param _Slice 音频数据引用\n\t * \\param _InferParams 推理参数\n\t * \\param _Process 推理进度\n\t * \\return 推理结果（PCM signed-int16 单声道）\n\t */\n\t[[nodiscard]] virtual std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice,\n\t\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const;\n\n\t/**\n\t * \\brief 推理一个音频（使用PCM）\n\t * \\param PCMData 输入的PCM数据（signed-int16 单声道）\n\t * \\param srcSr 输入PCM的采样率\n\t * \\param _InferParams 推理参数\n\t * \\return 推理结果（PCM signed-int16 单声道）\n\t */\n\t[[nodiscard]] virtual std::vector<int16_t> InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const;\n\n\t//提取音量\n\t[[nodiscard]] static std::vector<float> ExtractVolume(const std::vector<int16_t>& OrgAudio, int hop_size);\n\n\t//提取音量\n\t[[nodiscard]] std::vector<float> ExtractVolume(const std::vector<double>& OrgAudio) const;\n\n\t//获取HopSize\n\t[[nodiscard]] int GetHopSize() const\n\t{\n\t\treturn HopSize;\n\t}\n\n\t//获取HiddenUnitKDims\n\t[[nodiscard]] int64_t GetHiddenUnitKDims() const\n\t{\n\t\treturn HiddenUnitKDims;\n\t}\n\n\t//获取角色数量\n\t[[nodiscard]] int64_t GetSpeakerCount() const\n\t{\n\t\treturn SpeakerCount;\n\t}\n\n\t//获取角色混合启用状态\n\t[[nodiscard]] bool CharaMixEnabled() const\n\t{\n\t\treturn EnableCharaMix;\n\t}\n\n\t/**\n\t * \\brief 切片一个音频\n\t * \\param input 输入的PCM数据（signed-int16 单声道）\n\t * \\param _slice_pos 切片位置（单位为采样）\n\t * \\param _slicer 切片机设置\n\t * \\return 音频数据\n\t */\n\tLibSvcApi [[nodiscard]] static MoeVSProjectSpace::MoeVoiceStudioSvcData GetAudioSlice(const std::vector<int16_t>& input,\n\t                                                                      const std::vector<size_t>& _slice_pos,\n\t                                                                      const InferTools::SlicerSettings& _slicer);\n\n\t/**\n\t * \\brief 预处理音频数据\n\t * \\param input 完成切片的音频数据\n\t * \\param __SamplingRate 采样率\n\t * \\param __HopSize HopSize\n\t * \\param _f0_method F0算法\n\t */\n\tLibSvcApi static void PreProcessAudio(MoeVSProjectSpace::MoeVoiceStudioSvcData& input,\n\t                            int __SamplingRate = 48000, int __HopSize = 512, const std::wstring& _f0_method = L\"Dio\");\n\n\t~SingingVoiceConversion() override;\n\nprotected:\n\tMoeVSTensorPreprocess::TensorExtractor _TensorExtractor;\n\n\tOrt::Session* hubert = nullptr;\n\n\tint HopSize = 320;\n\tint64_t HiddenUnitKDims = 256;\n\tint64_t SpeakerCount = 1;\n\tbool EnableCharaMix = false;\n\tbool EnableVolume = false;\n\n\tMoeVoiceStudioCluster::MoeVSCluster Cluster;\n\n\tint64_t ClusterCenterSize = 10000;\n\tbool EnableCluster = false;\n\tbool EnableIndex = false;\n\n\tconst std::vector<const char*> hubertOutput = { \"embed\" };\n\tconst std::vector<const char*> hubertInput = { \"source\" };\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libsvc/Modules/header/Models/VitsSvc.hpp",
    "content": "﻿/**\r\n * FileName: VitsSvc.hpp\r\n * Note: MoeVoiceStudioCore Onnx Vits系Svc 模型定义\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include \"SVC.hpp\"\r\n#include \"DiffSvc.hpp\"\r\n\r\nMoeVoiceStudioCoreHeader\r\n\r\nclass VitsSvc : public SingingVoiceConversion\r\n{\r\npublic:\r\n    VitsSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\r\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\r\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\r\n\r\n    VitsSvc(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\r\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\r\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\r\n\r\n    VitsSvc(const Hparams& _Hps, const ProgressCallback& _ProgressCallback,\r\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\r\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\r\n\r\n    void load(\r\n        const std::map<std::string, std::wstring>& _PathDict,\r\n        const MJson& _Config, const ProgressCallback& _ProgressCallback,\r\n        ExecutionProviders ExecutionProvider_,\r\n        unsigned DeviceID_, unsigned ThreadCount_,\r\n        bool MoeVoiceStudioFrontEnd = false\r\n    );\r\n\r\n\t~VitsSvc() override;\r\n\r\n    void Destory();\r\n\r\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\r\n        const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\r\n\r\n    [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const override;\r\n\r\n\t[[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Paths, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\r\n        const InferTools::SlicerSettings& _SlicerSettings) const override;\r\n\r\n    //[[nodiscard]] std::vector<Ort::Value> InferSliceTensor(const MoeVSProjectSpace::MoeVSAudioSlice& _Slice, size_t SliceIdx,\r\n    //    const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, std::vector<Ort::Value>& _Tensors,\r\n    //    std::vector<const char*>& SoVitsInput) const;\r\n\r\n    [[nodiscard]] std::vector<int16_t> InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const override;\n\n    [[nodiscard]] std::vector<Ort::Value> MelExtractor(const float* PCMAudioBegin, const float* PCMAudioEnd) const = delete;\n\n    [[nodiscard]] Ort::MemoryInfo* GetMemoryInfo() const\r\n    {\r\n        return memory_info;\r\n    }\r\n\r\nprivate:\r\n    Ort::Session* VitsSvcModel = nullptr;\r\n    std::wstring VitsSvcVersion = L\"SoVits4.0\";\r\n\r\n    const std::vector<const char*> soVitsOutput = { \"audio\" };\r\n    const std::vector<const char*> soVitsInput = { \"hidden_unit\", \"lengths\", \"pitch\", \"sid\" };\r\n    const std::vector<const char*> RVCInput = { \"phone\", \"phone_lengths\", \"pitch\", \"pitchf\", \"ds\", \"rnd\" };\n    const std::vector<const char*> StftOutput = { \"mel\" };\r\n    const std::vector<const char*> StftInput = { \"waveform\", \"aligment\"};\n\r\n#ifdef WIN32\r\n#ifdef MoeVSMui\r\n    bool RTSTAT = false;\r\n    std::deque<std::vector<int16_t>> inputBuffer, outputBuffer, rawInputBuffer, rawOutputBuffer;\r\n    MRecorder* recoder = nullptr;\r\n    Mui::Render::MDS_AudioPlayer* audio_player = nullptr;\r\n    Mui::Render::MAudioStream* audio_stream = nullptr;\r\n    size_t emptyLen = 30000;\r\n#endif\r\n#endif\r\n};\r\n\r\nMoeVoiceStudioCoreEnd\r\n"
  },
  {
    "path": "libsvc/Modules/header/Modules.hpp",
    "content": "﻿/**\r\n * FileName: Modules.hpp\r\n * Note: MoeVoiceStudioCore组件管理\r\n *\r\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\r\n *\r\n * This file is part of MoeVoiceStudioCore library.\r\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\r\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\r\n * of the License, or any later version.\r\n *\r\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\r\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n * See the GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\r\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\r\n *\r\n * date: 2022-10-17 Create\r\n*/\r\n\r\n#pragma once\r\n#include \"Models/VitsSvc.hpp\"\r\n#include \"Models/DiffSvc.hpp\"\r\n#include \"Models/ReflowSvc.hpp\"\r\n#include \"../framework.h\"\r\n#include \"InferTools/Stft/stft.hpp\"\r\n\r\nnamespace MoeVSModuleManager\r\n{\r\n\tclass UnionSvcModel\r\n\t{\r\n\tpublic:\r\n\t\tUnionSvcModel() = delete;\r\n\t\tLibSvcApi ~UnionSvcModel();\r\n\t\tLibSvcApi UnionSvcModel(const MJson& Config,\r\n\t\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\r\n\t\t\tint ProviderID, int NumThread, int DeviceID);\r\n\r\n\t\tLibSvcApi UnionSvcModel(const MoeVoiceStudioCore::Hparams& Config,\r\n\t\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\r\n\t\t\tint ProviderID, int NumThread, int DeviceID);\r\n\r\n\t\tLibSvcApi [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\r\n\t\t\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const;\r\n\r\n\t\tLibSvcApi [[nodiscard]] std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const;\r\n\r\n\t\tLibSvcApi [[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Paths, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\r\n\t\t\tconst InferTools::SlicerSettings& _SlicerSettings) const;\r\n\r\n\t\tLibSvcApi [[nodiscard]] std::vector<int16_t> InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const;\r\n\r\n\t\tLibSvcApi [[nodiscard]] std::vector<int16_t> ShallowDiffusionInference(\n\t\t\tstd::vector<float>& _16KAudioHubert,\n\t\t\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\t\t\tstd::pair<std::vector<float>, int64_t>& _Mel,\n\t\t\tconst std::vector<float>& _SrcF0,\n\t\t\tconst std::vector<float>& _SrcVolume,\n\t\t\tconst std::vector<std::vector<float>>& _SrcSpeakerMap,\n\t\t\tsize_t& Process,\n\t\t\tint64_t SrcSize\n\t\t) const;\r\n\r\n\t\tLibSvcApi MoeVoiceStudioCore::SingingVoiceConversion* GetPtr() const;\r\n\r\n\t\tLibSvcApi [[nodiscard]] int64_t GetMaxStep() const;\r\n\r\n\t\tLibSvcApi [[nodiscard]] bool OldVersion() const;\r\n\r\n\t\tLibSvcApi [[nodiscard]] const std::wstring& GetDiffSvcVer() const;\r\n\r\n\t\tLibSvcApi [[nodiscard]] int64_t GetMelBins() const;\r\n\n\t\tLibSvcApi [[nodiscard]] int GetHopSize() const;\n\n\t\tLibSvcApi [[nodiscard]] int64_t GetHiddenUnitKDims() const;\n\n\t\tLibSvcApi [[nodiscard]] int64_t GetSpeakerCount() const;\n\n\t\tLibSvcApi [[nodiscard]] bool CharaMixEnabled() const;\r\n\r\n\t\tLibSvcApi [[nodiscard]] long GetSamplingRate() const;\r\n\r\n\t\tLibSvcApi void NormMel(std::vector<float>& MelSpec) const;\r\n\r\n\t\t[[nodiscard]] bool IsDiffusion() const;\r\n\tprivate:\r\n\t\tMoeVoiceStudioCore::DiffusionSvc* Diffusion_ = nullptr;\r\n\t\tMoeVoiceStudioCore::ReflowSvc* Reflow_ = nullptr;\r\n\t};\r\n\r\n\r\n\tLibSvcApi int64_t& GetSpeakerCount();\r\n\tLibSvcApi int64_t& GetSamplingRate();\r\n\tLibSvcApi int32_t& GetVocoderHopSize();\r\n\tLibSvcApi int32_t& GetVocoderMelBins();\r\n\t/**\n\t * \\brief 初始化所有组件\n\t */\r\n\tLibSvcApi void MoeVoiceStudioCoreInitSetup();\r\n\r\n\t/**\n\t * \\brief 获取当前VitsSvc模型\n\t * \\return 当前模型的指针\n\t */\r\n\tLibSvcApi MoeVoiceStudioCore::VitsSvc* GetVitsSvcModel();\r\n\r\n\t/**\n\t * \\brief 获取当前UnionSvc模型\n\t * \\return 当前模型的指针\n\t */\r\n\tLibSvcApi UnionSvcModel* GetUnionSvcModel();\r\n\r\n\t/**\n\t * \\brief 卸载模型\n\t */\r\n\tLibSvcApi void UnloadVitsSvcModel();\r\n\r\n\t/**\n\t * \\brief 卸载模型\n\t */\r\n\tLibSvcApi void UnloadUnionSvcModel();\r\n\r\n\t/**\n\t * \\brief 载入VitsSvc模型\n\t * \\param Config 一个MJson类的实例（配置文件的JSON）\n\t * \\param Callback 进度条回调函数\n\t * \\param ProviderID Provider在所有Provider中的ID（遵循Enum Class的定义）\n\t * \\param NumThread CPU推理时的线程数（最好设置高一点，GPU不支持的算子可能也会Fallback到CPU）\n\t * \\param DeviceID GPU设备ID\n\t */\r\n\tLibSvcApi void LoadVitsSvcModel(const MJson& Config,\n\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\n\t\tint ProviderID, int NumThread, int DeviceID);\r\n\r\n\t/**\n\t * \\brief 载入DiffusionSvc模型\n\t * \\param Config 一个MJson类的实例（配置文件的JSON）\n\t * \\param Callback 进度条回调函数\n\t * \\param ProviderID Provider在所有Provider中的ID（遵循Enum Class的定义）\n\t * \\param NumThread CPU推理时的线程数（最好设置高一点，GPU不支持的算子可能也会Fallback到CPU）\n\t * \\param DeviceID GPU设备ID\n\t */\r\n\tLibSvcApi void LoadUnionSvcModel(const MJson& Config,\r\n\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\r\n\t\tint ProviderID, int NumThread, int DeviceID);\r\n\r\n\t/**\r\n\t * \\brief 载入Vocoder模型\r\n\t * \\param VocoderPath Vocoder路径\r\n\t */\r\n\tLibSvcApi void LoadVocoderModel(const std::wstring& VocoderPath);\r\n\r\n\t/**\r\n\t * \\brief 卸载Vocoder模型\r\n\t */\r\n\tLibSvcApi void UnloadVocoderModel();\r\n\r\n\t/**\r\n\t * \\brief 检查Vocoder是否可用\r\n\t * \\return Vocoder状态\r\n\t */\r\n\tLibSvcApi bool VocoderEnabled();\r\n\r\n\t/**\r\n\t * \\brief 推理多组数据\r\n\t * \\param _Slice 数据包\r\n\t * \\param _InferParams 参数\r\n\t * \\return 音频\r\n\t */\r\n\tLibSvcApi std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\r\n\t                                    const MoeVSProjectSpace::MoeVSSvcParams& _InferParams);\r\n\r\n\t/**\r\n\t * \\brief 推理切片数据\r\n\t * \\param _Slice 切片数据\r\n\t * \\param _InferParams 参数\r\n\t * \\param _Process 进度条\r\n\t * \\return 音频\r\n\t */\r\n\tLibSvcApi std::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process);\r\n\r\n\tLibSvcApi std::vector<int16_t> Enhancer(std::vector<float>& Mel, const std::vector<float>& F0, size_t MelSize);\r\n\r\n\tLibSvcApi void ReloadMelOps(int SamplingRate_I64, int Hopsize_I64, int MelBins_I64);\r\n\r\n\tLibSvcApi DlCodecStft::Mel& GetMelOperator();\r\n\r\n\tLibSvcApi bool ShallowDiffusionEnabled();\r\n}\r\n\r\nnamespace MoeVSRename\r\n{\r\n\tusing MoeVSVitsBasedSvc = MoeVoiceStudioCore::VitsSvc;\r\n\tusing MoeVSDiffBasedSvc = MoeVoiceStudioCore::DiffusionSvc;\r\n}\r\n\r\n"
  },
  {
    "path": "libsvc/Modules/header/StringPreprocess.hpp",
    "content": "﻿#pragma once\r\n\r\n#include <vector>\r\n#include <string>\r\n#include \"../framework.h\"\r\n\r\nLibSvcApi std::string to_byte_string(const std::wstring& input);\r\n\r\nLibSvcApi std::string to_ansi_string(const std::wstring& input);\r\n\r\nLibSvcApi std::wstring to_wide_string(const std::string& input);\r\n\r\nLibSvcApi std::wstring string_vector_to_string(const std::vector<std::string>& vector);\r\n\r\nLibSvcApi std::wstring wstring_vector_to_string(const std::vector<std::wstring>& vector);\r\n\r\ntemplate <typename T>\r\nstd::wstring vector_to_string(const std::vector<T>& vector)\r\n{\r\n\tstd::wstring vecstr = L\"[\";\r\n\tfor (const auto& it : vector)\r\n\t{\r\n\t\tstd::wstring TmpStr = std::to_wstring(it);\r\n\t\tif ((std::is_same_v<T, float> || std::is_same_v<T, double>) && TmpStr.find(L'.') != std::string::npos)\r\n\t\t{\r\n\t\t\twhile (TmpStr.back() == L'0')\r\n\t\t\t\tTmpStr.pop_back();\r\n\t\t\tif (TmpStr.back() == L'.')\r\n\t\t\t\tTmpStr += L\"0\";\r\n\t\t}\r\n\t\tvecstr += TmpStr + L\", \";\r\n\t}\r\n\tif (vecstr.length() > 2)\r\n\t\tvecstr = vecstr.substr(0, vecstr.length() - 2);\r\n\tvecstr += L']';\r\n\treturn vecstr;\r\n}"
  },
  {
    "path": "libsvc/Modules/src/InferTools/AvCodec/AvCodeResample.cpp",
    "content": "﻿#include \"../../header/InferTools/AvCodec/AvCodeResample.h\"\r\n\r\n\r\nAudioPreprocess::WAV_HEADER AudioPreprocess::GetHeader(const std::wstring& path)\r\n{\r\n    WAV_HEADER header;\r\n    char buf[1024];\r\n    FILE* stream;\r\n    _wfreopen_s(&stream, path.c_str(), L\"rb\", stderr);\r\n    if (stream == nullptr) {\r\n        throw (std::exception(\"Wav Load Error\"));\r\n    }\r\n    fread(buf, 1, 1024, stream);\r\n    int pos = 0;\r\n    while (pos < InferTools::Wav::HEAD_LENGTH) {\r\n        if ((buf[pos] == 'R') && (buf[pos + 1] == 'I') && (buf[pos + 2] == 'F') && (buf[pos + 3] == 'F')) {\r\n            pos += 4;\r\n            break;\r\n        }\r\n        ++pos;\r\n    }\r\n    if (pos >= InferTools::Wav::HEAD_LENGTH)\r\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\r\n    header.ChunkSize = *(int*)&buf[pos];\r\n    pos += 8;\r\n    while (pos < InferTools::Wav::HEAD_LENGTH) {\r\n        if ((buf[pos] == 'f') && (buf[pos + 1] == 'm') && (buf[pos + 2] == 't')) {\r\n            pos += 4;\r\n            break;\r\n        }\r\n        ++pos;\r\n    }\r\n    if (pos >= InferTools::Wav::HEAD_LENGTH)\r\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\r\n    header.Subchunk1Size = *(int*)&buf[pos];\r\n    pos += 4;\r\n    header.AudioFormat = *(short*)&buf[pos];\r\n    pos += 2;\r\n    header.NumOfChan = *(short*)&buf[pos];\r\n    if (stream != nullptr) {\r\n        fclose(stream);\r\n    }\r\n    return header;\r\n}\r\n\r\nstd::vector<double> AudioPreprocess::arange(double start, double end, double step, double div)\r\n{\r\n    std::vector<double> output;\r\n    while (start < end)\r\n    {\r\n        output.push_back(start / div);\r\n        start += step;\r\n    }\r\n    return output;\r\n}\r\n\r\nstd::vector<short> AudioPreprocess::codec(const std::wstring& path, int sr)\r\n{\r\n    //if (path.substr(path.rfind(L'.')) == L\".wav\")\r\n    //    return resample(path, sr);\r\n    std::vector<uint8_t> outData;\r\n    int ret = avformat_open_input(&avFormatContext, to_byte_string(path).c_str(), nullptr, nullptr);\r\n    if (ret != 0) {\r\n        LibDLVoiceCodecThrow(std::string(\"Can't Open Audio File [ErrCode]\") + std::to_string(ret));\r\n    }\r\n    ret = avformat_find_stream_info(avFormatContext, nullptr);\r\n    if (ret < 0) {\r\n        LibDLVoiceCodecThrow(\"Can't Get Audio Info\");\r\n    }\r\n    int streamIndex = 0;\r\n    for (unsigned i = 0; i < avFormatContext->nb_streams; ++i) {\r\n        const AVMediaType avMediaType = avFormatContext->streams[i]->codecpar->codec_type;\r\n        if (avMediaType == AVMEDIA_TYPE_AUDIO) {\r\n            streamIndex = static_cast<int>(i);\r\n        }\r\n    }\r\n    const AVCodecParameters* avCodecParameters = avFormatContext->streams[streamIndex]->codecpar;\r\n    const AVCodecID avCodecId = avCodecParameters->codec_id;\r\n    const AVCodec* avCodec = avcodec_find_decoder(avCodecId);\r\n    if (avCodec == nullptr)\r\n        LibDLVoiceCodecThrow(\"Don't order fried rice (annoyed)\");\r\n    if (avCodecContext == nullptr) {\r\n        LibDLVoiceCodecThrow(\"Can't Get Decoder Info\");\r\n    }\r\n    avcodec_parameters_to_context(avCodecContext, avCodecParameters);\r\n    ret = avcodec_open2(avCodecContext, avCodec, nullptr);\r\n    if (ret < 0) {\r\n        LibDLVoiceCodecThrow(\"Can't Open Decoder\");\r\n    }\r\n    packet = (AVPacket*)av_malloc(sizeof(AVPacket));\r\n    const AVSampleFormat inFormat = avCodecContext->sample_fmt;\r\n    constexpr AVSampleFormat  outFormat = AV_SAMPLE_FMT_S16;\r\n    const int inSampleRate = avCodecContext->sample_rate;\r\n    const int outSampleRate = sr;\r\n\r\n    const auto nSample = static_cast<size_t>(avFormatContext->duration * sr / AV_TIME_BASE);\r\n\r\n    uint64_t in_ch_layout = avCodecContext->channel_layout;\r\n    if (path.substr(path.rfind(L'.')) == L\".wav\")\r\n    {\r\n        const auto head = GetHeader(path);\r\n        if (head.NumOfChan == 1)\r\n            in_ch_layout = AV_CH_LAYOUT_MONO;\r\n        else if (head.NumOfChan == 2)\r\n            in_ch_layout = AV_CH_LAYOUT_STEREO;\r\n        else\r\n            LibDLVoiceCodecThrow(\"unsupported Channel Num\");\r\n    }\r\n    constexpr uint64_t out_ch_layout = AV_CH_LAYOUT_MONO;\r\n    swr_alloc_set_opts(swrContext, out_ch_layout, outFormat, outSampleRate,\r\n        static_cast<int64_t>(in_ch_layout), inFormat, inSampleRate, 0, nullptr\r\n    );\r\n    swr_init(swrContext);\r\n    const int outChannelCount = av_get_channel_layout_nb_channels(out_ch_layout);\r\n    int currentIndex = 0;\r\n    out_buffer = (uint8_t*)av_malloc(2ull * sr);\r\n    while (av_read_frame(avFormatContext, packet) >= 0) {\r\n        if (packet->stream_index == streamIndex) {\r\n            avcodec_send_packet(avCodecContext, packet);\r\n            ret = avcodec_receive_frame(avCodecContext, inFrame);\r\n            if (ret == 0) {\r\n                swr_convert(swrContext, &out_buffer, 2ull * sr,\r\n                    (const uint8_t**)inFrame->data, inFrame->nb_samples);\r\n                const int out_buffer_size = av_samples_get_buffer_size(nullptr, outChannelCount, (inFrame->nb_samples * sr / inSampleRate) - 1, outFormat, 1);\r\n                outData.insert(outData.end(), out_buffer, out_buffer + out_buffer_size);\r\n            }\r\n            ++currentIndex;\r\n            av_packet_unref(packet);\r\n        }\r\n    }\r\n    //Wav outWav(static_cast<unsigned long>(sr), static_cast<unsigned long>(outData.size()), outData.data());\r\n    auto outWav = reinterpret_cast<int16_t*>(outData.data());\r\n    const auto RawWavLen = int64_t(outData.size()) / 2;\r\n    if (nSample != static_cast<size_t>(RawWavLen))\r\n    {\r\n        const double interpOff = static_cast<double>(RawWavLen) / static_cast<double>(nSample);\r\n        const auto x0 = arange(0.0, static_cast<double>(RawWavLen), 1.0, 1.0);\r\n        std::vector<double> y0(RawWavLen);\r\n        for (int64_t i = 0; i < RawWavLen; ++i)\r\n            y0[i] = outWav[i] ? static_cast<double>(outWav[i]) : NAN;\r\n        const auto yi = new double[nSample];\r\n        auto xi = arange(0.0, static_cast<double>(RawWavLen), interpOff, 1.0);\r\n        while (xi.size() < nSample)\r\n            xi.push_back(*(xi.end() - 1) + interpOff);\r\n        while (xi.size() > nSample)\r\n            xi.pop_back();\r\n        interp1(x0.data(), y0.data(), static_cast<int>(RawWavLen), xi.data(), static_cast<int>(nSample), yi);\r\n        std::vector<short> DataChun(nSample);\r\n        for (size_t i = 0; i < nSample; ++i)\r\n            DataChun[i] = isnan(yi[i]) ? 0i16 : static_cast<short>(yi[i]);\r\n        delete[] yi;\r\n        return DataChun;\r\n    }\r\n    release();\r\n    return { outWav , outWav + RawWavLen };\r\n}\r\n\r\nvoid AudioPreprocess::release()\r\n{\r\n    if (packet)\r\n        av_packet_free(&packet);\r\n    if (inFrame)\r\n        av_frame_free(&inFrame);\r\n    if (out_buffer)\r\n        av_free(out_buffer);\r\n    if (swrContext)\r\n        swr_free(&swrContext);\r\n    if (avCodecContext)\r\n        avcodec_close(avCodecContext);\r\n    if (avFormatContext)\r\n        avformat_close_input(&avFormatContext);\r\n    inFrame = nullptr;\r\n    out_buffer = nullptr;\r\n    swrContext = nullptr;\r\n    avCodecContext = nullptr;\r\n    avFormatContext = nullptr;\r\n    packet = nullptr;\r\n}\r\n\r\nvoid AudioPreprocess::init()\r\n{\r\n    inFrame = av_frame_alloc();\r\n    out_buffer = nullptr;\r\n    swrContext = swr_alloc();\r\n    avCodecContext = avcodec_alloc_context3(nullptr);\r\n    avFormatContext = avformat_alloc_context();\r\n    packet = nullptr;\r\n}\r\n\r\nAudioPreprocess::AudioPreprocess()\r\n{\r\n    inFrame = av_frame_alloc();\r\n    out_buffer = nullptr;\r\n    swrContext = swr_alloc();\r\n    avCodecContext = avcodec_alloc_context3(nullptr);\r\n    avFormatContext = avformat_alloc_context();\r\n    packet = nullptr;\r\n}\r\n"
  },
  {
    "path": "libsvc/Modules/src/InferTools/Cluster/MoeVSBaseCluster.cpp",
    "content": "﻿#include \"../../../header/InferTools/Cluster/MoeVSBaseCluster.hpp\"\n#include \"../../../header/InferTools/inferTools.hpp\"\n\nstd::vector<float> MoeVoiceStudioCluster::MoeVoiceStudioBaseCluster::find(float* point, long sid, int64_t n_points)\n{\n\tLibDLVoiceCodecThrow(\"NotImplementedError\");\n}"
  },
  {
    "path": "libsvc/Modules/src/InferTools/Cluster/MoeVSClusterManager.cpp",
    "content": "﻿#include \"../../../header/InferTools/Cluster/MoeVSClusterManager.hpp\"\n#include <map>\n#include <stdexcept>\n#include \"../../../header/Logger/MoeSSLogger.hpp\"\n\nMoeVoiceStudioClusterHeader\n\nstd::map<std::wstring, GetMoeVSClusterFn> RegisteredMoeVSCluster;\n\nMoeVSCluster GetMoeVSCluster(const std::wstring& _name, const std::wstring& _path, size_t hidden_size, size_t KmeansLen)\n{\n\tconst auto f_ClusterFn = RegisteredMoeVSCluster.find(_name);\n\tif (f_ClusterFn != RegisteredMoeVSCluster.end())\n\t\treturn f_ClusterFn->second(_path, hidden_size, KmeansLen);\n\tthrow std::runtime_error(\"Unable To Find An Available MoeVSCluster\");\n}\n\nvoid RegisterMoeVSCluster(const std::wstring& _name, const GetMoeVSClusterFn& _constructor_fn)\n{\n\tif (RegisteredMoeVSCluster.find(_name) != RegisteredMoeVSCluster.end())\n\t{\n\t\tlogger.log(L\"[Warn] MoeVSClusterNameConflict\");\n\t\treturn;\n\t}\n\tRegisteredMoeVSCluster[_name] = _constructor_fn;\n}\n\nMoeVoiceStudioClusterEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/Cluster/MoeVSIndexCluster.cpp",
    "content": "﻿#ifdef MoeVoiceStudioIndexCluster\n#include \"../../../header/InferTools/Cluster/MoeVSIndexCluster.hpp\"\n#include <filesystem>\n#include \"../../../header/InferTools/inferTools.hpp\"\n#ifdef NDEBUG\n#pragma comment (lib,\"../../../../../Lib/faiss/out/build/x64-Release/faiss/faiss.lib\")\n#endif\n#ifdef _DEBUG\n#pragma comment (lib,\"../../../../../Lib/faiss/out/build/x64-Debug/faiss/faiss.lib\")\n#endif\n#pragma comment (lib,\"../../../../../Lib/faiss/faiss/libblas.lib\")\n#pragma comment (lib,\"../../../../../Lib/faiss/faiss/liblapack.lib\")\n#pragma comment (lib,\"../../../../../Lib/faiss/faiss/liblapacke.lib\")\n\nMoeVoiceStudioClusterHeader\n\nIndexClusterCore::~IndexClusterCore()\n{\n\tdelete IndexPtr;\n\tIndexPtr = nullptr;\n}\n\nIndexClusterCore::IndexClusterCore(const char* _path)\n{\n\tIndexPtr = faiss::read_index(_path);\n\tIndexsVector = std::vector(IndexPtr->ntotal * IndexPtr->d, 0.f);\n\tIndexPtr->reconstruct_n(0, IndexPtr->ntotal, IndexsVector.data());\n\tDim = IndexPtr->d;\n}\n\nIndexClusterCore::IndexClusterCore(IndexClusterCore&& move) noexcept\n{\n\tIndexPtr = move.IndexPtr;\n\tDim = move.Dim;\n\tIndexsVector = std::move(move.IndexsVector);\n\tmove.IndexPtr = nullptr;\n}\n\nIndexClusterCore& IndexClusterCore::operator=(IndexClusterCore&& move) noexcept\n{\n\tif (&move == this) return *this;\n\tdelete IndexPtr;\n\tIndexPtr = move.IndexPtr;\n\tDim = move.Dim;\n\tIndexsVector = std::move(move.IndexsVector);\n\tmove.IndexPtr = nullptr;\n\treturn *this;\n}\n\nfloat* IndexClusterCore::GetVec(faiss::idx_t index)\n{\n\treturn IndexsVector.data() + index * Dim;\n}\n\nstd::vector<float> IndexClusterCore::find(const float* points, faiss::idx_t n_points, faiss::idx_t n_searched_points)\n{\n\tstd::vector<float> result(Dim * n_points);\n\tstd::vector<float> distances(n_searched_points * n_points);\n\tstd::vector<faiss::idx_t> labels(n_searched_points * n_points);\n\tIndexPtr->search(n_points, points, n_searched_points, distances.data(), labels.data());\n\tfor (faiss::idx_t pt = 0; pt < n_points; ++pt)\n\t{\n\t\tstd::vector result_pt(Dim, 0.f);                                   \n\t\tconst auto idx_vec = labels.data() + pt * n_searched_points;     // SIZE:[n_searched_points]\n\t\tconst auto dis_vec = distances.data() + pt * n_searched_points;  // SIZE:[n_searched_points]\n\t\tfloat sum = 0.f;                                                       // dis_vec[i] / sum = pGetVec(idx_vec[i])\n\t\tfor (faiss::idx_t spt = 0; spt < n_searched_points; ++spt)             // result_pt = GetVec(idx_vec[i])\n\t\t{\n\t\t\tif(idx_vec[spt] < 0)\n\t\t\t\tcontinue;\n\t\t\tdis_vec[spt] = (1 / dis_vec[spt]) * (1 / dis_vec[spt]);\n\t\t\tsum += dis_vec[spt];\n\t\t}\n\t\tif (sum == 0.f) sum = 1.f;\n\t\tfor (faiss::idx_t spt = 0; spt < n_searched_points; ++spt)\n\t\t{\n\t\t\tif (idx_vec[spt] < 0)\n\t\t\t\tcontinue;\n\t\t\tconst auto sedpt = GetVec(idx_vec[spt]);\n\t\t\tconst auto pcnt = (dis_vec[spt] / sum);\n\t\t\tfor (faiss::idx_t sptp = 0; sptp < Dim; ++sptp)\n\t\t\t\tresult_pt[sptp] += pcnt * sedpt[sptp];\n\t\t}\n\t\tmemcpy(result.data() + pt * Dim, result_pt.data(), Dim * sizeof(float));\n\t}\n\treturn result;\n}\n\nIndexCluster::IndexCluster(const std::wstring& _path, size_t hidden_size, size_t KmeansLen)\n{\n\tconst auto RawPath = _path + L\"/Index-\";\n\tsize_t idx = 0;\n\twhile(true)\n\t{\n\t\tstd::filesystem::path IndexPath = RawPath + std::to_wstring(idx++) + L\".index\";\n\t\tif(!exists(IndexPath)) break;\n\t\tIndexs.emplace_back(IndexPath.string().c_str());\n\t}\n\tif (Indexs.empty())\n\t\tLibDLVoiceCodecThrow(\"Index Is Empty\");\n}\n\nstd::vector<float> IndexCluster::find(float* point, long sid, int64_t n_points)\n{\n\tif (size_t(sid) < Indexs.size())\n\t\treturn Indexs[sid].find(point, n_points);\n\treturn { point,point + n_hidden_size * n_points };\n}\n\nMoeVoiceStudioClusterEnd\n#endif"
  },
  {
    "path": "libsvc/Modules/src/InferTools/Cluster/MoeVSKmeansCluster.cpp",
    "content": "﻿#include \"../../../header/InferTools/Cluster/MoeVSKmeansCluster.hpp\"\n#include \"../../../header/InferTools/inferTools.hpp\"\n\nstd::vector<float> MoeVoiceStudioCluster::KMeansCluster::find(float* point, long sid, int64_t n_points)\n{\n\tif (size_t(sid) < _tree.size())\n\t{\n\t\tstd::vector<float> res;\n\t\tres.reserve(dims * n_points * 2);\n\t\tfor (int64_t pt = 0; pt < n_points; ++pt)\n\t\t{\n\t\t\tauto tmp = _tree[sid].nearest_point({ point + pt * dims,point + (pt + 1) * dims });\n\t\t\tres.insert(res.end(), tmp.begin(), tmp.end());\n\t\t}\n\t\treturn res;\n\t}\n\treturn { point, point + dims * n_points };\n}\n\nMoeVoiceStudioCluster::KMeansCluster::KMeansCluster(const std::wstring& _path, size_t hidden_size, size_t KmeansLen)\n{\n\tdims = hidden_size;\n\tFILE* file = nullptr;\n\t_wfopen_s(&file, (_path + L\"/KMeans.npy\").c_str(), L\"rb\");\n\tif (!file)\n\t\tLibDLVoiceCodecThrow(\"KMeansFileNotExist\");\n\tconstexpr long idx = 128;\n\tfseek(file, idx, SEEK_SET);\n\tstd::vector<float> tmpData(hidden_size);\n\tconst size_t ec = size_t(hidden_size) * sizeof(float);\n\tstd::vector<std::vector<float>> _tmp;\n\t_tmp.reserve(KmeansLen);\n\twhile (fread(tmpData.data(), 1, ec, file) == ec)\n\t{\n\t\t_tmp.emplace_back(tmpData);\n\t\tif (_tmp.size() == KmeansLen)\n\t\t{\n\t\t\t_tree.emplace_back(_tmp);\n\t\t\t_tmp.clear();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "libsvc/Modules/src/InferTools/DataStruct/KDTree.cpp",
    "content": "/*\r\n * file: KDTree.hpp\r\n * author: J. Frederico Carvalho\r\n *\r\n * This is an adaptation of the KD-tree implementation in rosetta code\r\n * https://rosettacode.org/wiki/K-d_tree\r\n *\r\n * It is a reimplementation of the C code using C++.  It also includes a few\r\n * more queries than the original, namely finding all points at a distance\r\n * smaller than some given distance to a point.\r\n *\r\n */\r\n\r\n#include <algorithm>\r\n#include <cmath>\r\n#include <functional>\r\n#include <iterator>\r\n#include <memory>\r\n#include <vector>\r\n\r\n#include \"../../../header/InferTools/DataStruct/KDTree.hpp\"\r\n\r\nKDNode::KDNode() = default;\r\n\r\nKDNode::KDNode(const point_t &pt, const size_t &idx_, const KDNodePtr &left_,\r\n               const KDNodePtr &right_) {\r\n    x = pt;\r\n    index = idx_;\r\n    left = left_;\r\n    right = right_;\r\n}\r\n\r\nKDNode::KDNode(const pointIndex &pi, const KDNodePtr &left_,\r\n               const KDNodePtr &right_) {\r\n    x = pi.first;\r\n    index = pi.second;\r\n    left = left_;\r\n    right = right_;\r\n}\r\n\r\nKDNode::~KDNode() = default;\r\n\r\nfloat KDNode::coord(const size_t &idx) { return x.at(idx); }\r\nKDNode::operator bool() { return (!x.empty()); }\r\nKDNode::operator point_t() { return x; }\r\nKDNode::operator size_t() { return index; }\r\nKDNode::operator pointIndex() { return pointIndex(x, index); }\r\n\r\nKDNodePtr NewKDNodePtr() {\r\n    KDNodePtr mynode = std::make_shared< KDNode >();\r\n    return mynode;\r\n}\r\n\r\ninline float dist2(const point_t &a, const point_t &b) {\r\n    float distc = 0;\r\n    for (size_t i = 0; i < a.size(); i++) {\r\n        float di = a.at(i) - b.at(i);\r\n        distc += di * di;\r\n    }\r\n    return distc;\r\n}\r\n\r\ninline float dist2(const KDNodePtr &a, const KDNodePtr &b) {\r\n    return dist2(a->x, b->x);\r\n}\r\n\r\ninline float dist(const point_t &a, const point_t &b) {\r\n    return std::sqrt(dist2(a, b));\r\n}\r\n\r\ninline float dist(const KDNodePtr &a, const KDNodePtr &b) {\r\n    return std::sqrt(dist2(a, b));\r\n}\r\n\r\ncomparer::comparer(size_t idx_) : idx{idx_} {};\r\n\r\ninline bool comparer::compare_idx(const pointIndex &a,  //\r\n                                  const pointIndex &b   //\r\n) {\r\n    return (a.first.at(idx) < b.first.at(idx));  //\r\n}\r\n\r\ninline void sort_on_idx(const pointIndexArr::iterator &begin,  //\r\n                        const pointIndexArr::iterator &end,    //\r\n                        size_t idx) {\r\n    comparer comp(idx);\r\n    comp.idx = idx;\r\n\r\n    using std::placeholders::_1;\r\n    using std::placeholders::_2;\r\n\r\n    std::nth_element(begin, begin + std::distance(begin, end) / 2,\r\n                     end, std::bind(&comparer::compare_idx, comp, _1, _2));\r\n}\r\n\r\nusing pointVec = std::vector< point_t >;\r\n\r\nKDNodePtr KDTree::make_tree(const pointIndexArr::iterator &begin,  //\r\n                            const pointIndexArr::iterator &end,    //\r\n                            const size_t &length,                  //\r\n                            const size_t &level                    //\r\n) {\r\n    if (begin == end) {\r\n        return NewKDNodePtr();  // empty tree\r\n    }\r\n\r\n    size_t dim = begin->first.size();\r\n\r\n    if (length > 1) {\r\n        sort_on_idx(begin, end, level);\r\n    }\r\n\r\n    auto middle = begin + (length / 2);\r\n\r\n    auto l_begin = begin;\r\n    auto l_end = middle;\r\n    auto r_begin = middle + 1;\r\n    auto r_end = end;\r\n\r\n    size_t l_len = length / 2;\r\n    size_t r_len = length - l_len - 1;\r\n\r\n    KDNodePtr left;\r\n    if (l_len > 0 && dim > 0) {\r\n        left = make_tree(l_begin, l_end, l_len, (level + 1) % dim);\r\n    } else {\r\n        left = leaf;\r\n    }\r\n    KDNodePtr right;\r\n    if (r_len > 0 && dim > 0) {\r\n        right = make_tree(r_begin, r_end, r_len, (level + 1) % dim);\r\n    } else {\r\n        right = leaf;\r\n    }\r\n\r\n    // KDNode result = KDNode();\r\n    return std::make_shared< KDNode >(*middle, left, right);\r\n}\r\n\r\nKDTree::KDTree(pointVec point_array) {\r\n    leaf = std::make_shared< KDNode >();\r\n    // iterators\r\n    pointIndexArr arr;\r\n    for (size_t i = 0; i < point_array.size(); i++) {\r\n        arr.push_back(pointIndex(point_array.at(i), i));\r\n    }\r\n\r\n    auto begin = arr.begin();\r\n    auto end = arr.end();\r\n\r\n    size_t length = arr.size();\r\n    size_t level = 0;  // starting\r\n\r\n    root = KDTree::make_tree(begin, end, length, level);\r\n}\r\n\r\nKDNodePtr KDTree::nearest_(   //\r\n    const KDNodePtr &branch,  //\r\n    const point_t &pt,        //\r\n    const size_t &level,      //\r\n    const KDNodePtr &best,    //\r\n    const float&best_dist   //\r\n) {\r\n    float d, dx, dx2;\r\n\r\n    if (!bool(*branch)) {\r\n        return NewKDNodePtr();  // basically, null\r\n    }\r\n\r\n    point_t branch_pt(*branch);\r\n    size_t dim = branch_pt.size();\r\n\r\n    d = dist2(branch_pt, pt);\r\n    dx = branch_pt.at(level) - pt.at(level);\r\n    dx2 = dx * dx;\r\n\r\n    KDNodePtr best_l = best;\r\n    float best_dist_l = best_dist;\r\n\r\n    if (d < best_dist) {\r\n        best_dist_l = d;\r\n        best_l = branch;\r\n    }\r\n\r\n    size_t next_lv = (level + 1) % dim;\r\n    KDNodePtr section;\r\n    KDNodePtr other;\r\n\r\n    // select which branch makes sense to check\r\n    if (dx > 0) {\r\n        section = branch->left;\r\n        other = branch->right;\r\n    } else {\r\n        section = branch->right;\r\n        other = branch->left;\r\n    }\r\n\r\n    // keep nearest neighbor from further down the tree\r\n    KDNodePtr further = nearest_(section, pt, next_lv, best_l, best_dist_l);\r\n    if (!further->x.empty()) {\r\n        float dl = dist2(further->x, pt);\r\n        if (dl < best_dist_l) {\r\n            best_dist_l = dl;\r\n            best_l = further;\r\n        }\r\n    }\r\n    // only check the other branch if it makes sense to do so\r\n    if (dx2 < best_dist_l) {\r\n        further = nearest_(other, pt, next_lv, best_l, best_dist_l);\r\n        if (!further->x.empty()) {\r\n            float dl = dist2(further->x, pt);\r\n            if (dl < best_dist_l) {\r\n                best_dist_l = dl;\r\n                best_l = further;\r\n            }\r\n        }\r\n    }\r\n\r\n    return best_l;\r\n};\r\n\r\n// default caller\r\nKDNodePtr KDTree::nearest_(const point_t &pt) {\r\n    size_t level = 0;\r\n    // KDNodePtr best = branch;\r\n    float branch_dist = dist2(point_t(*root), pt);\r\n    return nearest_(root,          // beginning of tree\r\n                    pt,            // point we are querying\r\n                    level,         // start from level 0\r\n                    root,          // best is the root\r\n                    branch_dist);  // best_dist = branch_dist\r\n};\r\n\r\npoint_t KDTree::nearest_point(const point_t &pt) {\r\n    return point_t(*nearest_(pt));\r\n};\r\nsize_t KDTree::nearest_index(const point_t &pt) {\r\n    return size_t(*nearest_(pt));\r\n};\r\n\r\npointIndex KDTree::nearest_pointIndex(const point_t &pt) {\r\n    KDNodePtr Nearest = nearest_(pt);\r\n    return pointIndex(point_t(*Nearest), size_t(*Nearest));\r\n}\r\n\r\npointIndexArr KDTree::neighborhood_(  //\r\n    const KDNodePtr &branch,          //\r\n    const point_t &pt,                //\r\n    const float&rad,                //\r\n    const size_t &level               //\r\n) {\r\n    float d, dx, dx2;\r\n\r\n    if (!bool(*branch)) {\r\n        // branch has no point, means it is a leaf,\r\n        // no points to add\r\n        return pointIndexArr();\r\n    }\r\n\r\n    size_t dim = pt.size();\r\n\r\n    float r2 = rad * rad;\r\n\r\n    d = dist2(point_t(*branch), pt);\r\n    dx = point_t(*branch).at(level) - pt.at(level);\r\n    dx2 = dx * dx;\r\n\r\n    pointIndexArr nbh, nbh_s, nbh_o;\r\n    if (d <= r2) {\r\n        nbh.push_back(pointIndex(*branch));\r\n    }\r\n\r\n    //\r\n    KDNodePtr section;\r\n    KDNodePtr other;\r\n    if (dx > 0) {\r\n        section = branch->left;\r\n        other = branch->right;\r\n    } else {\r\n        section = branch->right;\r\n        other = branch->left;\r\n    }\r\n\r\n    nbh_s = neighborhood_(section, pt, rad, (level + 1) % dim);\r\n    nbh.insert(nbh.end(), nbh_s.begin(), nbh_s.end());\r\n    if (dx2 < r2) {\r\n        nbh_o = neighborhood_(other, pt, rad, (level + 1) % dim);\r\n        nbh.insert(nbh.end(), nbh_o.begin(), nbh_o.end());\r\n    }\r\n\r\n    return nbh;\r\n};\r\n\r\npointIndexArr KDTree::neighborhood(  //\r\n    const point_t &pt,               //\r\n    const float&rad) {\r\n    size_t level = 0;\r\n    return neighborhood_(root, pt, rad, level);\r\n}\r\n\r\npointVec KDTree::neighborhood_points(  //\r\n    const point_t &pt,                 //\r\n    const float&rad) {\r\n    size_t level = 0;\r\n    pointIndexArr nbh = neighborhood_(root, pt, rad, level);\r\n    pointVec nbhp;\r\n    nbhp.resize(nbh.size());\r\n    std::transform(nbh.begin(), nbh.end(), nbhp.begin(),\r\n                   [](pointIndex x) { return x.first; });\r\n    return nbhp;\r\n}\r\n\r\nindexArr KDTree::neighborhood_indices(  //\r\n    const point_t &pt,                  //\r\n    const float&rad) {\r\n    size_t level = 0;\r\n    pointIndexArr nbh = neighborhood_(root, pt, rad, level);\r\n    indexArr nbhi;\r\n    nbhi.resize(nbh.size());\r\n    std::transform(nbh.begin(), nbh.end(), nbhi.begin(),\r\n                   [](pointIndex x) { return x.second; });\r\n    return nbhi;\r\n}\r\n"
  },
  {
    "path": "libsvc/Modules/src/InferTools/DataStruct/README.md",
    "content": "## KdTree From J. Frederico Carvalho\r\n"
  },
  {
    "path": "libsvc/Modules/src/InferTools/F0Extractor/BaseF0Extractor.cpp",
    "content": "﻿#include \"../../../header/InferTools/F0Extractor/BaseF0Extractor.hpp\"\r\n#include <map>\r\n#include \"../../../header/Logger/MoeSSLogger.hpp\"\r\n#include \"../../../header/InferTools/inferTools.hpp\"\r\n\r\nMoeVSF0Extractor::BaseF0Extractor::BaseF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0) :\r\n\tfs(sampling_rate),\r\n\thop(hop_size),\r\n\tf0_bin(n_f0_bins),\r\n\tf0_max(max_f0),\r\n\tf0_min(min_f0)\r\n{\r\n\tf0_mel_min = (1127.0 * log(1.0 + f0_min / 700.0));\r\n\tf0_mel_max = (1127.0 * log(1.0 + f0_max / 700.0));\r\n}\r\n\r\nstd::vector<double> MoeVSF0Extractor::BaseF0Extractor::arange(double start, double end, double step, double div)\r\n{\r\n\tstd::vector<double> output;\r\n\twhile (start < end)\r\n\t{\r\n\t\toutput.push_back(start / div);\r\n\t\tstart += step;\r\n\t}\r\n\treturn output;\r\n}\r\n\r\nstd::vector<float> MoeVSF0Extractor::BaseF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\r\n{\r\n\tLibDLVoiceCodecThrow(\"NotImplementedError\");\r\n}\r\n\r\nstd::vector<float> MoeVSF0Extractor::BaseF0Extractor::ExtractF0(const std::vector<float>& PCMData, size_t TargetLength)\r\n{\r\n\tstd::vector<double> PCMVector(PCMData.size());\r\n\tfor (size_t i = 0; i < PCMData.size(); ++i)\r\n\t\tPCMVector[i] = double(PCMData[i]);\r\n\treturn ExtractF0(PCMVector, TargetLength);\r\n}\r\n\r\nstd::vector<float> MoeVSF0Extractor::BaseF0Extractor::ExtractF0(const std::vector<int16_t>& PCMData, size_t TargetLength)\r\n{\r\n\tstd::vector<double> PCMVector(PCMData.size());\r\n\tfor (size_t i = 0; i < PCMData.size(); ++i)\r\n\t\tPCMVector[i] = double(PCMData[i]);\r\n\treturn ExtractF0(PCMVector, TargetLength);\r\n}"
  },
  {
    "path": "libsvc/Modules/src/InferTools/F0Extractor/DioF0Extractor.cpp",
    "content": "﻿#include \"../../../header/InferTools/F0Extractor/DioF0Extractor.hpp\"\r\n#include \"dio.h\"\r\n#include \"stonemask.h\"\r\n#include \"matlabfunctions.h\"\r\n\r\nMoeVoiceStudioF0ExtractorHeader\r\nDioF0Extractor::DioF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0):\r\n\tBaseF0Extractor(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0)\r\n{\r\n}\r\n\r\nvoid DioF0Extractor::InterPf0(size_t TargetLength)\r\n{\r\n    const auto f0Len = refined_f0.size();\r\n    if (abs((int64_t)TargetLength - (int64_t)f0Len) < 3)\r\n    {\r\n        refined_f0.resize(TargetLength, 0.0);\r\n        return;\r\n    }\r\n    for (size_t i = 0; i < f0Len; ++i) if (refined_f0[i] < 0.001) refined_f0[i] = NAN;\r\n\r\n    auto xi = arange(0.0, (double)f0Len * (double)TargetLength, (double)f0Len, (double)TargetLength);\r\n    while (xi.size() < TargetLength) xi.emplace_back(*(xi.end() - 1) + ((double)f0Len / (double)TargetLength));\r\n    while (xi.size() > TargetLength) xi.pop_back();\r\n\r\n\tauto x0 = arange(0, (double)f0Len);\r\n    while (x0.size() < f0Len) x0.emplace_back(*(x0.end() - 1) + 1.);\r\n    while (x0.size() > f0Len) x0.pop_back();\r\n\r\n    auto raw_f0 = std::vector<double>(xi.size());\r\n    interp1(x0.data(), refined_f0.data(), static_cast<int>(x0.size()), xi.data(), (int)xi.size(), raw_f0.data());\r\n\r\n    for (size_t i = 0; i < xi.size(); i++) if (isnan(raw_f0[i])) raw_f0[i] = 0.0;\r\n    refined_f0 = std::move(raw_f0);\r\n}\r\n\r\nstd::vector<float> DioF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\r\n{\r\n    compute_f0(PCMData.data(), PCMData.size());\r\n    InterPf0(TargetLength);\r\n    std::vector<float> f0(refined_f0.size());\r\n    for (size_t i = 0; i < refined_f0.size(); ++i) f0[i] = (float)refined_f0[i];\r\n    return f0;\r\n}\r\n\r\nvoid DioF0Extractor::compute_f0(const double* PCMData, size_t PCMLen)\r\n{\r\n    DioOption Doption;\r\n    InitializeDioOption(&Doption);\r\n    Doption.f0_ceil = f0_max;\r\n    Doption.f0_floor = f0_min;\r\n    Doption.frame_period = 1000.0 * hop / fs;\r\n\r\n    const size_t f0Length = GetSamplesForDIO(int(fs), (int)PCMLen, Doption.frame_period);\r\n\tauto temporal_positions = std::vector<double>(f0Length);\r\n\tauto raw_f0 = std::vector<double>(f0Length);\r\n    refined_f0 = std::vector<double>(f0Length);\r\n    Dio(PCMData, (int)PCMLen, int(fs), &Doption, temporal_positions.data(), raw_f0.data());\r\n    StoneMask(PCMData, (int)PCMLen, int(fs), temporal_positions.data(), raw_f0.data(), (int)f0Length, refined_f0.data());\r\n}\r\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/F0Extractor/F0ExtractorManager.cpp",
    "content": "﻿#include \"../../../header/InferTools/F0Extractor/F0ExtractorManager.hpp\"\n#include <map>\n#include <stdexcept>\n#include \"../../../header/Logger/MoeSSLogger.hpp\"\n\nMoeVoiceStudioF0ExtractorHeader\nstd::map<std::wstring, GetF0ExtractorFn> RegisteredF0Extractors;\n\nF0Extractor GetF0Extractor(const std::wstring& _name,\n\tconst uint32_t fs,\n\tconst uint32_t hop,\n\tconst uint32_t f0_bin,\n\tconst double f0_max,\n\tconst double f0_min)\n{\n\tconst auto f_F0Extractor = RegisteredF0Extractors.find(_name);\n\tif (f_F0Extractor != RegisteredF0Extractors.end())\n\t\treturn f_F0Extractor->second(fs, hop, f0_bin, f0_max, f0_min);\n\tthrow std::runtime_error(\"Unable To Find An Available F0Extractor\");\n}\n\nvoid RegisterF0Extractor(const std::wstring& _name, const GetF0ExtractorFn& _constructor_fn)\n{\n\tif (RegisteredF0Extractors.find(_name) != RegisteredF0Extractors.end())\n\t{\n\t\tlogger.log(L\"[Warn] F0ExtractorNameConflict\");\n\t\treturn;\n\t}\n\tRegisteredF0Extractors[_name] = _constructor_fn;\n}\n\nstd::vector<std::wstring> GetF0ExtractorList()\n{\n\tstd::vector<std::wstring> F0ExtractorsVec;\n\tF0ExtractorsVec.reserve(RegisteredF0Extractors.size());\n\tfor (const auto& i : RegisteredF0Extractors)\n\t\tF0ExtractorsVec.emplace_back(i.first);\n\treturn F0ExtractorsVec;\n}\n\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/F0Extractor/HarvestF0Extractor.cpp",
    "content": "﻿#include \"../../../header/InferTools/F0Extractor/HarvestF0Extractor.hpp\"\r\n#include \"matlabfunctions.h\"\r\n#include \"harvest.h\"\r\n#include \"stonemask.h\"\r\n\r\nMoeVoiceStudioF0ExtractorHeader\r\n\tHarvestF0Extractor::HarvestF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0):\r\n\tBaseF0Extractor(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0)\r\n{\r\n}\r\n\r\nvoid HarvestF0Extractor::InterPf0(size_t TargetLength)\r\n{\r\n    const auto f0Len = refined_f0.size();\r\n    if (abs((int64_t)TargetLength - (int64_t)f0Len) < 3)\r\n    {\r\n        refined_f0.resize(TargetLength, 0.0);\r\n\t    return;\r\n    }\r\n    for (size_t i = 0; i < f0Len; ++i) if (refined_f0[i] < 0.001) refined_f0[i] = NAN;\r\n\r\n    auto xi = arange(0.0, (double)f0Len * (double)TargetLength, (double)f0Len, (double)TargetLength);\r\n    while (xi.size() < TargetLength) xi.emplace_back(*(xi.end() - 1) + ((double)f0Len / (double)TargetLength));\r\n    while (xi.size() > TargetLength) xi.pop_back();\r\n\r\n\tauto x0 = arange(0, (double)f0Len);\r\n    while (x0.size() < f0Len) x0.emplace_back(*(x0.end() - 1) + 1.);\r\n    while (x0.size() > f0Len) x0.pop_back();\r\n\r\n    auto raw_f0 = std::vector<double>(xi.size());\r\n    interp1(x0.data(), refined_f0.data(), static_cast<int>(x0.size()), xi.data(), (int)xi.size(), raw_f0.data());\r\n\r\n    for (size_t i = 0; i < xi.size(); i++) if (isnan(raw_f0[i])) raw_f0[i] = 0.0;\r\n    refined_f0 = std::move(raw_f0);\r\n}\r\n\r\nstd::vector<float> HarvestF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\r\n{\r\n    compute_f0(PCMData.data(), PCMData.size());\r\n    InterPf0(TargetLength);\r\n    std::vector<float> f0(refined_f0.size());\r\n    for (size_t i = 0; i < refined_f0.size(); ++i) f0[i] = (float)refined_f0[i];\r\n    return f0;\r\n}\r\n\r\nvoid HarvestF0Extractor::compute_f0(const double* PCMData, size_t PCMLen)\r\n{\r\n    HarvestOption Doption;\r\n    InitializeHarvestOption(&Doption);\r\n    Doption.f0_ceil = f0_max;\r\n    Doption.f0_floor = f0_min;\r\n    Doption.frame_period = 1000.0 * hop / fs;\r\n\r\n    const size_t f0Length = GetSamplesForHarvest(int(fs), (int)PCMLen, Doption.frame_period);\r\n\tauto temporal_positions = std::vector<double>(f0Length);\r\n\tauto raw_f0 = std::vector<double>(f0Length);\r\n    refined_f0 = std::vector<double>(f0Length);\r\n    Harvest(PCMData, (int)PCMLen, int(fs), &Doption, temporal_positions.data(), raw_f0.data());\r\n    StoneMask(PCMData, (int)PCMLen, int(fs), temporal_positions.data(), raw_f0.data(), (int)f0Length, refined_f0.data());\r\n}\r\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/F0Extractor/NetF0Predictors.cpp",
    "content": "﻿#include \"../../../header/InferTools/F0Extractor/NetF0Predictors.hpp\"\r\n#include <dml_provider_factory.h>\r\n#include \"matlabfunctions.h\"\r\n#include \"../../../header/InferTools/F0Extractor/DioF0Extractor.hpp\"\r\n#include \"../../../header/Logger/MoeSSLogger.hpp\"\r\n#include \"../../../header/Models/EnvManager.hpp\"\r\n#include \"../../../header/InferTools/inferTools.hpp\"\r\n#ifdef _WIN32\r\n#include <DXGI.h>\r\n#else\r\n#error\r\n#endif\r\n\r\nMoeVoiceStudioF0ExtractorHeader\r\n\r\nNetF0Class::NetF0Class()\r\n#ifdef INITF0NETPREDICTOR\r\n{\r\n\ttry\r\n\t{\r\n\t\twchar_t path[1024];\r\n#ifdef _WIN32\r\n\t\tGetModuleFileName(nullptr, path, 1024);\r\n\t\tstd::wstring _curPath = path;\r\n\t\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\r\n\t\tconst auto cpath = _curPath + L\"/F0Predictor/config.json\";\r\n\t\tNetF0PathDir = _curPath + L\"/F0Predictor/\";\r\n#endif\r\n\t\tconst MJson json(to_byte_string(cpath).c_str());\r\n\t\tint DeviceId = 0, Device = 0, NumThread = (int)std::thread::hardware_concurrency();\r\n\t\tif (json[\"DeviceId\"].IsInt())\r\n\t\t\tDeviceId = json[\"DeviceId\"].GetInt();\r\n\t\tif (json[\"Device\"].IsString())\r\n\t\t{\r\n\t\t\tconst std::string tmp = json[\"Device\"].GetString();\r\n\t\t\tif (tmp == \"CUDA\")\r\n\t\t\t\tDevice = 1;\r\n\t\t\telse if (tmp == \"DML\")\r\n\t\t\t\tDevice = 2;\r\n\t\t}\r\n\t\tif (json[\"NumThread\"].IsInt())\r\n\t\t\tNumThread = json[\"NumThread\"].GetInt();\r\n\t\tif (Device == 0)\r\n\t\t\tBuildCPUEnv(NumThread);\r\n\t\telse if (Device == 1)\r\n\t\t\tBuildCUDAEnv(DeviceId);\r\n\t\telse if (Device == 2)\r\n\t\t\tBuildDMLEnv(DeviceId);\r\n\t}\r\n\tcatch (std::exception& e)\r\n\t{\r\n\t\tlogger.log(to_wide_string(e.what()));\r\n\t\tBuildCPUEnv(std::thread::hardware_concurrency());\r\n\t}\r\n}\r\n#else\r\n{\r\n\twchar_t path[1024];\r\n#ifdef _WIN32\r\n\tGetModuleFileName(nullptr, path, 1024);\r\n\tstd::wstring _curPath = path;\r\n\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\r\n\tNetF0PathDir = _curPath + L\"/F0Predictor/\";\r\n#endif\r\n}\r\n#endif\r\nvoid NetF0Class::Destory()\r\n{\r\n\tdelete Model;\r\n\tModel = nullptr;\r\n\tNetF0Options = nullptr;\r\n\tNetF0Env = nullptr;\r\n\tMemory = nullptr;\r\n}\r\n\r\nvoid NetF0Class::BuildCPUEnv(unsigned ThreadCount)\r\n{\r\n\tDestory();\r\n\tNetF0Options = new Ort::SessionOptions;\r\n\tNetF0Env = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\r\n\tNetF0Options->SetIntraOpNumThreads(static_cast<int>(ThreadCount));\r\n\tNetF0Options->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\r\n\tMemory = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\r\n}\r\n\r\nvoid NetF0Class::BuildCUDAEnv(unsigned Did)\r\n{\r\n\tDestory();\r\n\tconst auto AvailableProviders = Ort::GetAvailableProviders();\r\n\tbool ret = true;\r\n\tfor (const auto& it : AvailableProviders)\r\n\t\tif (it.find(\"CUDA\") != std::string::npos)\r\n\t\t\tret = false;\r\n\tif (ret)\r\n\t\tLibDLVoiceCodecThrow(\"CUDA Provider Not Found\");\r\n\tOrtCUDAProviderOptions cuda_option;\r\n\tcuda_option.device_id = int(Did);\r\n\tNetF0Options = new Ort::SessionOptions;\r\n\tNetF0Env = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\r\n\tNetF0Options->AppendExecutionProvider_CUDA(cuda_option);\r\n\tNetF0Options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\r\n\tNetF0Options->SetIntraOpNumThreads(1);\r\n\tMemory = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\r\n}\r\n\r\nvoid NetF0Class::BuildDMLEnv(unsigned Did)\r\n{\r\n\tDestory();\r\n\tconst auto AvailableProviders = Ort::GetAvailableProviders();\r\n\tstd::string ret;\r\n\tfor (const auto& it : AvailableProviders)\r\n\t\tif (it.find(\"Dml\") != std::string::npos)\r\n\t\t\tret = it;\r\n\tif (ret.empty())\r\n\t\tLibDLVoiceCodecThrow(\"DML Provider Not Found\");\r\n\tconst OrtApi& ortApi = Ort::GetApi();\r\n\tconst OrtDmlApi* ortDmlApi = nullptr;\r\n\tortApi.GetExecutionProviderApi(\"DML\", ORT_API_VERSION, reinterpret_cast<const void**>(&ortDmlApi));\r\n\tconst Ort::ThreadingOptions threadingOptions;\r\n\tNetF0Env = new Ort::Env(threadingOptions, ORT_LOGGING_LEVEL_VERBOSE, \"\");\r\n\tNetF0Env->DisableTelemetryEvents();\r\n\tNetF0Options = new Ort::SessionOptions;\r\n\tortDmlApi->SessionOptionsAppendExecutionProvider_DML(*NetF0Options, int(Did));\r\n\tNetF0Options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\r\n\tNetF0Options->DisablePerSessionThreads();\r\n\tNetF0Options->SetExecutionMode(ORT_SEQUENTIAL);\r\n\tNetF0Options->DisableMemPattern();\r\n\tMemory = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemType::OrtMemTypeCPU));\r\n}\r\n\r\nvoid NetF0Class::LoadModel(const std::wstring& path)\r\n{\r\n\tDestory();\r\n\tif (!moevsenv::GetGlobalMoeVSEnv().IsEnabled())\n\t\treturn;\r\n\tNetF0Env = moevsenv::GetGlobalMoeVSEnv().GetEnv();\r\n\tMemory = moevsenv::GetGlobalMoeVSEnv().GetMemoryInfo();\r\n\tNetF0Options = moevsenv::GetGlobalMoeVSEnv().GetSessionOptions();\r\n\ttry\r\n\t{\r\n\t\tModel = new Ort::Session(*NetF0Env, (NetF0PathDir + path).c_str(), *NetF0Options);\r\n\t}\r\n\tcatch (Ort::Exception& e)\r\n\t{\r\n\t\tlogger.log(to_wide_string(e.what()));\r\n\t\tdelete Model;\r\n\t\tModel = nullptr;\r\n\t}\r\n}\r\n\r\nNetF0Class RMVPECORE;\r\nNetF0Class MELPECORE;\r\n\r\nRMVPEF0Extractor::RMVPEF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0) :\r\n\tBaseF0Extractor(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0)\r\n{\r\n\tif (MELPECORE.Model)\n\t\tMELPECORE.Destory();\r\n\tif (!RMVPECORE.Model)\r\n\t\tRMVPECORE.LoadModel(L\"RMVPE.onnx\");\r\n}\r\n\r\ndouble average(const double* begin, const double* end)\r\n{\r\n\tconst auto mp = double(end - begin);\r\n\tdouble sum = 0.;\r\n\twhile (begin != end)\n\t\tsum += *(begin++);\r\n\treturn sum / mp;\r\n}\r\n\r\nstd::vector<float> RMVPEF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\r\n{\r\n\tif (!RMVPECORE.Model)\r\n\t\treturn DioF0Extractor((int)fs, (int)hop, (int)f0_bin, f0_max, f0_min).ExtractF0(PCMData, TargetLength);\r\n\r\n\tconst double step = double(fs) / 16000.;\r\n\tconst auto window_len = (size_t)round(step);\r\n\tconst auto half_window_len = window_len / 2;\r\n\tconst auto f0_size = size_t((double)PCMData.size() / step);\r\n\tconst auto pcm_idx_size = PCMData.size() - 2;\r\n\tstd::vector pcm(f0_size, 0.f);\r\n\tauto idx = double(half_window_len + 1);\r\n\tfor (size_t i = 0; i < f0_size; ++i)\r\n\t{\r\n\t\tconst auto index = size_t(round(idx));\r\n\t\tif(index + half_window_len > pcm_idx_size)\n\t\t\tbreak;\r\n\t\tif (half_window_len == 0)\r\n\t\t\tpcm[i] = (float)PCMData[index];\r\n\t\telse\n\t\t\tpcm[i] = (float)average(&PCMData[index - half_window_len], &PCMData[index + half_window_len]);\r\n\t\tidx += step;\r\n\t}\r\n\tstd::vector<Ort::Value> Tensors;\r\n\tconst int64_t pcm_shape[] = { 1, (int64_t)pcm.size() };\r\n\tconstexpr int64_t one_shape[] = { 1 };\r\n\tfloat threshold[] = { 0.03f };\r\n\tTensors.emplace_back(Ort::Value::CreateTensor(*RMVPECORE.Memory, pcm.data(), pcm.size(), pcm_shape, 2));\r\n\tTensors.emplace_back(Ort::Value::CreateTensor(*RMVPECORE.Memory, threshold, 1, one_shape, 1));\r\n\r\n\tconst auto out = RMVPECORE.Model->Run(Ort::RunOptions{ nullptr },\r\n\t\tInputNames.data(),\r\n\t\tTensors.data(),\r\n\t\tTensors.size(),\r\n\t\tOutputNames.data(),\r\n\t\tOutputNames.size());\r\n\r\n\tconst auto osize = out[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\tconst auto of0 = out[0].GetTensorData<float>();\r\n\trefined_f0 = std::vector<double>(osize);\r\n\tfor (size_t i = 0; i < osize; ++i) refined_f0[i] = ((of0[i] > 0.001f) ? (double)out[0].GetTensorData<float>()[i] : NAN);\r\n\tInterPf0(TargetLength);\r\n\tstd::vector<float> finaF0(refined_f0.size());\r\n\tfor (size_t i = 0; i < refined_f0.size(); ++i) finaF0[i] = isnan(refined_f0[i]) ? 0 : (float)refined_f0[i];\r\n\treturn finaF0;\r\n}\r\n\r\nvoid RMVPEF0Extractor::InterPf0(size_t TargetLength)\r\n{\r\n\tconst auto f0Len = refined_f0.size();\r\n\tif (abs((int64_t)TargetLength - (int64_t)f0Len) < 3)\r\n\t{\r\n\t\trefined_f0.resize(TargetLength, 0.0);\r\n\t\treturn;\r\n\t}\r\n\tfor (size_t i = 0; i < f0Len; ++i) if (refined_f0[i] < 0.001) refined_f0[i] = NAN;\r\n\r\n\tauto xi = arange(0.0, (double)f0Len * (double)TargetLength, (double)f0Len, (double)TargetLength);\r\n\twhile (xi.size() < TargetLength) xi.emplace_back(*(xi.end() - 1) + ((double)f0Len / (double)TargetLength));\r\n\twhile (xi.size() > TargetLength) xi.pop_back();\r\n\r\n\tauto x0 = arange(0, (double)f0Len);\r\n\twhile (x0.size() < f0Len) x0.emplace_back(*(x0.end() - 1) + 1.);\r\n\twhile (x0.size() > f0Len) x0.pop_back();\r\n\r\n\tauto raw_f0 = std::vector<double>(xi.size());\r\n\tinterp1(x0.data(), refined_f0.data(), static_cast<int>(x0.size()), xi.data(), (int)xi.size(), raw_f0.data());\r\n\r\n\tfor (size_t i = 0; i < xi.size(); i++) if (isnan(raw_f0[i])) raw_f0[i] = 0.0;\r\n\trefined_f0 = std::move(raw_f0);\r\n}\r\n\r\nMELPEF0Extractor::MELPEF0Extractor(int sampling_rate, int hop_size, int n_f0_bins, double max_f0, double min_f0) :\r\n\tBaseF0Extractor(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0)\r\n{\r\n\tif (RMVPECORE.Model)\n\t\tRMVPECORE.Destory();\r\n\tif (!MELPECORE.Model)\r\n\t\tMELPECORE.LoadModel(L\"MELPE.onnx\");\r\n}\r\n\r\nvoid MELPEF0Extractor::InterPf0(size_t TargetLength)\r\n{\r\n\tconst auto f0Len = refined_f0.size();\r\n\tif (abs((int64_t)TargetLength - (int64_t)f0Len) < 3)\r\n\t{\r\n\t\trefined_f0.resize(TargetLength, 0.0);\r\n\t\treturn;\r\n\t}\r\n\tfor (size_t i = 0; i < f0Len; ++i) if (refined_f0[i] < 0.001) refined_f0[i] = NAN;\r\n\r\n\tauto xi = arange(0.0, (double)f0Len * (double)TargetLength, (double)f0Len, (double)TargetLength);\r\n\twhile (xi.size() < TargetLength) xi.emplace_back(*(xi.end() - 1) + ((double)f0Len / (double)TargetLength));\r\n\twhile (xi.size() > TargetLength) xi.pop_back();\r\n\r\n\tauto x0 = arange(0, (double)f0Len);\r\n\twhile (x0.size() < f0Len) x0.emplace_back(*(x0.end() - 1) + 1.);\r\n\twhile (x0.size() > f0Len) x0.pop_back();\r\n\r\n\tauto raw_f0 = std::vector<double>(xi.size());\r\n\tinterp1(x0.data(), refined_f0.data(), static_cast<int>(x0.size()), xi.data(), (int)xi.size(), raw_f0.data());\r\n\r\n\tfor (size_t i = 0; i < xi.size(); i++) if (isnan(raw_f0[i])) raw_f0[i] = 0.0;\r\n\trefined_f0 = std::move(raw_f0);\r\n}\r\n\r\nstd::vector<float> MELPEF0Extractor::ExtractF0(const std::vector<double>& PCMData, size_t TargetLength)\r\n{\r\n\tif (!MELPECORE.Model)\r\n\t\treturn DioF0Extractor((int)fs, (int)hop, (int)f0_bin, f0_max, f0_min).ExtractF0(PCMData, TargetLength);\r\n\r\n\tconst double step = double(fs) / 16000.;\r\n\tconst auto window_len = (size_t)round(step);\r\n\tconst auto half_window_len = window_len / 2;\r\n\tconst auto f0_size = size_t((double)PCMData.size() / step);\r\n\tconst auto pcm_idx_size = PCMData.size() - 2;\r\n\tstd::vector pcm(f0_size, 0.f);\r\n\tauto idx = double(half_window_len + 1);\r\n\tfor (size_t i = 0; i < f0_size; ++i)\r\n\t{\r\n\t\tconst auto index = size_t(round(idx));\r\n\t\tif (index + half_window_len > pcm_idx_size)\n\t\t\tbreak;\r\n\t\tif (half_window_len == 0)\r\n\t\t\tpcm[i] = (float)PCMData[index];\r\n\t\telse\n\t\t\tpcm[i] = (float)average(&PCMData[index - half_window_len], &PCMData[index + half_window_len]);\r\n\t\tidx += step;\r\n\t}\r\n\tstd::vector<Ort::Value> Tensors;\r\n\tconst int64_t pcm_shape[] = { 1, (int64_t)pcm.size() };\r\n\tTensors.emplace_back(Ort::Value::CreateTensor(*MELPECORE.Memory, pcm.data(), pcm.size(), pcm_shape, 2));\r\n\r\n\tconst auto out = MELPECORE.Model->Run(Ort::RunOptions{ nullptr },\r\n\t\tInputNames.data(),\r\n\t\tTensors.data(),\r\n\t\tTensors.size(),\r\n\t\tOutputNames.data(),\r\n\t\tOutputNames.size());\r\n\r\n\tconst auto osize = out[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\tconst auto of0 = out[0].GetTensorData<float>();\r\n\trefined_f0 = std::vector<double>(osize);\r\n\tfor (size_t i = 0; i < osize; ++i) refined_f0[i] = ((of0[i] > 0.001f) ? (double)out[0].GetTensorData<float>()[i] : NAN);\r\n\tInterPf0(TargetLength);\r\n\tstd::vector<float> finaF0(refined_f0.size());\r\n\tfor (size_t i = 0; i < refined_f0.size(); ++i) finaF0[i] = isnan(refined_f0[i]) ? 0 : (float)refined_f0[i];\r\n\treturn finaF0;\r\n}\r\n\r\nvoid EmptyCache()\r\n{\r\n\tRMVPECORE.Destory();\r\n\tMELPECORE.Destory();\r\n}\r\n\r\nMoeVoiceStudioF0ExtractorEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/Sampler/MoeVSBaseSampler.cpp",
    "content": "﻿#include \"../../../header/InferTools/Sampler/MoeVSBaseSampler.hpp\"\n#include \"../../../header/InferTools/inferTools.hpp\"\nMoeVoiceStudioSamplerHeader\n\nMoeVSBaseSampler::MoeVSBaseSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :\n\tMelBins(Mel_Bins), Alpha(alpha), DenoiseFn(dfn), NoisePredictor(pred)\n{\n\t_callback = _ProgressCallback;\n\tMemory = memory;\n};\n\nstd::vector<Ort::Value> MoeVSBaseSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process)\n{\n\tLibDLVoiceCodecThrow(\"NotImplementedError\");\n}\n\nMoeVSReflowBaseSampler::MoeVSReflowBaseSampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :\n\tMelBins_(MelBins), Velocity_(Velocity)\n{\n\tCallback_ = _ProgressCallback;\n\tMemory_ = memory;\n}\n\nstd::vector<Ort::Value> MoeVSReflowBaseSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process)\n{\n\tLibDLVoiceCodecThrow(\"NotImplementedError\");\n}\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/Sampler/MoeVSSamplerManager.cpp",
    "content": "﻿#include \"../../../header/InferTools/Sampler/MoeVSSamplerManager.hpp\"\n#include <map>\n#include \"../../../header/Logger/MoeSSLogger.hpp\"\nMoeVoiceStudioSamplerHeader\nstd::map<std::wstring, GetMoeVSSamplerFn> RegisteredMoeVSSamplers;\nstd::map<std::wstring, GetMoeVSReflowSamplerFn> RegisteredMoeVSReflowSamplers;\n\nMoeVSSampler GetMoeVSSampler(const std::wstring& _name,\n\tOrt::Session* alpha,\n\tOrt::Session* dfn,\n\tOrt::Session* pred,\n\tint64_t Mel_Bins,\n\tconst MoeVSBaseSampler::ProgressCallback& _ProgressCallback,\n\tOrt::MemoryInfo* memory)\n{\n\tconst auto f_Sampler = RegisteredMoeVSSamplers.find(_name);\n\tif (f_Sampler != RegisteredMoeVSSamplers.end())\n\t\treturn f_Sampler->second(alpha, dfn, pred, Mel_Bins, _ProgressCallback, memory);\n\tthrow std::runtime_error(\"Unable To Find An Available Sampler\");\n}\n\nvoid RegisterMoeVSSampler(const std::wstring& _name, const GetMoeVSSamplerFn& _constructor_fn)\n{\n\tif (RegisteredMoeVSSamplers.find(_name) != RegisteredMoeVSSamplers.end())\n\t{\n\t\tlogger.log(L\"[Warn] SamplerNameConflict\");\n\t\treturn;\n\t}\n\tRegisteredMoeVSSamplers[_name] = _constructor_fn;\n}\n\nstd::vector<std::wstring> GetMoeVSSamplerList()\n{\n\tstd::vector<std::wstring> SamplersVec;\n\tSamplersVec.reserve(RegisteredMoeVSSamplers.size());\n\tfor (const auto& i : RegisteredMoeVSSamplers)\n\t\tSamplersVec.emplace_back(i.first);\n\treturn SamplersVec;\n}\n\nMoeVSReflowSampler GetMoeVSReflowSampler(\n\tconst std::wstring& _name, \n\tOrt::Session* velocity, \n\tint64_t Mel_Bins, \n\tconst MoeVSBaseSampler::ProgressCallback& _ProgressCallback, \n\tOrt::MemoryInfo* memory\n)\n{\n\tconst auto f_Sampler = RegisteredMoeVSReflowSamplers.find(_name);\n\tif (f_Sampler != RegisteredMoeVSReflowSamplers.end())\n\t\treturn f_Sampler->second(velocity, Mel_Bins, _ProgressCallback, memory);\n\tthrow std::runtime_error(\"Unable To Find An Available Sampler\");\n}\n\nvoid RegisterMoeVSReflowSampler(const std::wstring& _name, const GetMoeVSReflowSamplerFn& _constructor_fn)\n{\n\tif (RegisteredMoeVSReflowSamplers.find(_name) != RegisteredMoeVSReflowSamplers.end())\n\t{\n\t\tlogger.log(L\"[Warn] SamplerNameConflict\");\n\t\treturn;\n\t}\n\tRegisteredMoeVSReflowSamplers[_name] = _constructor_fn;\n}\n\nstd::vector<std::wstring> GetMoeVSReflowSamplerList()\n{\n\tstd::vector<std::wstring> SamplersVec;\n\tSamplersVec.reserve(RegisteredMoeVSReflowSamplers.size());\n\tfor (const auto& i : RegisteredMoeVSReflowSamplers)\n\t\tSamplersVec.emplace_back(i.first);\n\treturn SamplersVec;\n}\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/Sampler/MoeVSSamplers.cpp",
    "content": "﻿#include \"../../../header/InferTools/Sampler/MoeVSSamplers.hpp\"\n#include <deque>\n#include <random>\n#include \"../../../header/InferTools/inferTools.hpp\"\n\nMoeVoiceStudioSamplerHeader\nPndmSampler::PndmSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :\n\tMoeVSBaseSampler(alpha, dfn, pred, Mel_Bins, _ProgressCallback, memory) {}\n\nDDimSampler::DDimSampler(Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :\n\tMoeVSBaseSampler(alpha, dfn, pred, Mel_Bins, _ProgressCallback, memory) {}\n\nstd::vector<Ort::Value> PndmSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process)\n{\n\tstd::vector<int64_t> diffusionSteps;\n\tfor (int64_t itt = Steps - SpeedUp; itt >= 0; itt -= SpeedUp)\n\t\tdiffusionSteps.push_back(itt);\n\n\tstd::vector<Ort::Value> DenoiseIn;\n\tstd::vector<Ort::Value> DenoiseOut;\n\tstd::vector<Ort::Value> PredIn;\n\tstd::vector<Ort::Value> PredOut;\n\tstd::vector<Ort::Value> DiffOut;\n\n\tstd::deque<std::vector<float>> noiseList;\n\n\tconstexpr int64_t timeshape[1] = { 1 }; // PLMS SAMPLING\n\n\tfor (const auto& t : diffusionSteps)\n\t{\n\t\tint64_t time[1] = { t };\n\t\tint64_t time_prev[1] = { t - SpeedUp > 0 ? t - SpeedUp : 0 };\n\t\tif (noiseList.empty())\n\t\t{\n\t\t\tDenoiseIn.emplace_back(std::move(Tensors[1])); // noise  DenoiseIn[0]\n\t\t\tDenoiseIn.emplace_back(Ort::Value::CreateTensor(*Memory, time,\n\t\t\t\t1, timeshape, 1)); // time  DenoiseIn[1]\n\t\t\tDenoiseIn.emplace_back(std::move(Tensors[0])); // condition  DenoiseIn[2]\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDenoiseOut = DenoiseFn->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tdenoiseInput.data(),\n\t\t\t\t\tDenoiseIn.data(),\n\t\t\t\t\tDenoiseIn.size(),\n\t\t\t\t\tdenoiseOutput.data(),\n\t\t\t\t\tdenoiseOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: denoise\\n\") + e1.what());\n\t\t\t}\n\n\t\t\tnoiseList.emplace_back(DenoiseOut[0].GetTensorData<float>(),\n\t\t\t\tDenoiseOut[0].GetTensorData<float>() +\n\t\t\t\tDenoiseOut[0].GetTensorTypeAndShapeInfo().GetElementCount()); // NoiseListExpand\n\n\t\t\tPredIn.emplace_back(std::move(DenoiseIn[0])); // noise  PredIn[0]\n\t\t\tPredIn.emplace_back(std::move(DenoiseOut[0])); // noise_pred  PredIn[1]\n\t\t\tPredIn.emplace_back(std::move(DenoiseIn[1])); // time  PredIn[2]\n\t\t\tPredIn.emplace_back(Ort::Value::CreateTensor(*Memory, time_prev,\n\t\t\t\t1, timeshape, 1)); // time_prev  PredIn[3]\n\t\t\ttry\n\t\t\t{\n\t\t\t\tPredOut = NoisePredictor->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tpredInput.data(),\n\t\t\t\t\tPredIn.data(),\n\t\t\t\t\tPredIn.size(),\n\t\t\t\t\tpredOutput.data(),\n\t\t\t\t\tpredOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: pred\\n\") + e1.what());\n\t\t\t}\n\t\t\tDenoiseIn[0] = std::move(PredOut[0]); // x_pred\n\t\t\tDenoiseIn[1] = std::move(PredIn[3]); // time_prev\n\t\t\t//DenoiseIn[2] = std::move(DenoiseIn[2]); // condition\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDenoiseOut = DenoiseFn->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tdenoiseInput.data(),\n\t\t\t\t\tDenoiseIn.data(),\n\t\t\t\t\tDenoiseIn.size(),\n\t\t\t\t\tdenoiseOutput.data(),\n\t\t\t\t\tdenoiseOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: denoise\\n\") + e1.what());\n\t\t\t}\n\t\t\tauto noise_pred_prev = DenoiseOut[0].GetTensorMutableData<float>();\n\t\t\tfor (const auto it : noiseList[0])\n\t\t\t\t(*(noise_pred_prev++) += it) /= 2.0f;\n\t\t\t//PredIn[0] = std::move(PredIn[0]); // noise\n\t\t\tPredIn[1] = std::move(DenoiseOut[0]); // noise_pred_prime\n\t\t\t//PredIn[2] = std::move(PredIn[2]); // time\n\t\t\tPredIn[3] = std::move(DenoiseIn[1]); // time_prev\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDenoiseIn[0] = std::move(PredOut[0]); // x\n\t\t\tDenoiseIn[1] = Ort::Value::CreateTensor(*Memory, time, 1,\n\t\t\t\ttimeshape, 1); // time\n\t\t\t//DenoiseIn[2] = std::move(DenoiseIn[2]); // condition\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDenoiseOut = DenoiseFn->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tdenoiseInput.data(),\n\t\t\t\t\tDenoiseIn.data(),\n\t\t\t\t\tDenoiseIn.size(),\n\t\t\t\t\tdenoiseOutput.data(),\n\t\t\t\t\tdenoiseOutput.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e1)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: denoise\\n\") + e1.what());\n\t\t\t}\n\t\t\tif (noiseList.size() < 4)\n\t\t\t\tnoiseList.emplace_back(DenoiseOut[0].GetTensorData<float>(), DenoiseOut[0].GetTensorData<float>() + DenoiseOut[0].GetTensorTypeAndShapeInfo().GetElementCount());\n\t\t\telse\n\t\t\t{\n\t\t\t\tnoiseList.pop_front();\n\t\t\t\tnoiseList.emplace_back(DenoiseOut[0].GetTensorData<float>(), DenoiseOut[0].GetTensorData<float>() + DenoiseOut[0].GetTensorTypeAndShapeInfo().GetElementCount());\n\t\t\t}\n\t\t\tauto noise_pred_prime = DenoiseOut[0].GetTensorMutableData<float>();\n\t\t\tif (noiseList.size() == 2)\n\t\t\t\tfor (size_t it = 0; it < noiseList[0].size(); ++it)\n\t\t\t\t\t((*(noise_pred_prime++) *= 3.0f) -= noiseList[0][it]) /= 2.0f;\n\t\t\tif (noiseList.size() == 3)\n\t\t\t\tfor (size_t it = 0; it < noiseList[0].size(); ++it)\n\t\t\t\t\t(((*(noise_pred_prime++) *= 23.0f) -= noiseList[1][it] * 16.0f) += noiseList[0][it] * 5.0f) /= 12.0f;\n\t\t\tif (noiseList.size() == 4)\n\t\t\t\tfor (size_t it = 0; it < noiseList[0].size(); ++it)\n\t\t\t\t\t((((*(noise_pred_prime++) *= 55.0f) -= noiseList[2][it] * 59.0f) += noiseList[1][it] * 37.0f) -= noiseList[0][it] * 9.0f) /= 24.0f;\n\t\t\tPredIn[0] = std::move(DenoiseIn[0]); // x\n\t\t\tPredIn[1] = std::move(DenoiseOut[0]); // noise_pred_prime\n\t\t\tPredIn[2] = std::move(DenoiseIn[1]); // time\n\t\t\tPredIn[3] = Ort::Value::CreateTensor(*Memory, time_prev, 1, timeshape, 1);\n\t\t}\n\t\ttry\n\t\t{\n\t\t\tPredOut = NoisePredictor->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tpredInput.data(),\n\t\t\t\tPredIn.data(),\n\t\t\t\tPredIn.size(),\n\t\t\t\tpredOutput.data(),\n\t\t\t\tpredOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e1)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: pred\\n\") + e1.what());\n\t\t}\n\t\t_callback(++Process, 1);\n\t}\n\treturn PredOut;\n}\n\nstd::vector<Ort::Value> DDimSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, int64_t SpeedUp, float NoiseScale, int64_t Seed, size_t& Process)\n{\n\tstd::vector<int64_t> diffusionSteps;\n\tfor (int64_t itt = Steps - SpeedUp; itt >= 0; itt -= SpeedUp)\n\t\tdiffusionSteps.push_back(itt);\n\tstd::vector<Ort::Value> DenoiseIn;\n\tstd::vector<Ort::Value> AlphaIn1, AlphaIn2;\n\n\tint64_t time[1] = { 0 };\n\tint64_t time_prev[1] = { 0 };\n\n\tconstexpr int64_t timeshape[1] = { 1 }; // DDIM SAMPLING\n\tAlphaIn1.emplace_back(Ort::Value::CreateTensor(*Memory, time, 1, timeshape, 1));\n\tAlphaIn2.emplace_back(Ort::Value::CreateTensor(*Memory, time_prev, 1, timeshape, 1));\n\tDenoiseIn.emplace_back(std::move(Tensors[1])); // noise  DenoiseIn[0]\n\tDenoiseIn.emplace_back(Ort::Value::CreateTensor(*Memory, time, 1, timeshape, 1)); // time  DenoiseIn[1]\n\tDenoiseIn.emplace_back(std::move(Tensors[0])); // condition  DenoiseIn[2]\n\tfor (const auto& t : diffusionSteps)\n\t{\n\t\tstd::vector<Ort::Value> DenoiseOut;\n\t\tfloat a_t, a_prev;\n\t\ttry\n\t\t{\n\t\t\ttime[0] = t;\n\t\t\ta_t = Alpha->Run(Ort::RunOptions{ nullptr },\n\t\t\t\talphain.data(),\n\t\t\t\tAlphaIn1.data(),\n\t\t\t\tAlphaIn1.size(),\n\t\t\t\talphaout.data(),\n\t\t\t\talphaout.size())[0].GetTensorData<float>()[0];\n\t\t\ttime_prev[0] = (((t - SpeedUp) > 0) ? t - SpeedUp : 0);\n\t\t\ta_prev = Alpha->Run(Ort::RunOptions{ nullptr },\n\t\t\t\talphain.data(),\n\t\t\t\tAlphaIn2.data(),\n\t\t\t\tAlphaIn2.size(),\n\t\t\t\talphaout.data(),\n\t\t\t\talphaout.size())[0].GetTensorData<float>()[0];\n\t\t}\n\t\tcatch (Ort::Exception& e1)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: alphas\\n\") + e1.what());\n\t\t}\n\t\ttry\n\t\t{\n\t\t\tDenoiseOut = DenoiseFn->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tdenoiseInput.data(),\n\t\t\t\tDenoiseIn.data(),\n\t\t\t\tDenoiseIn.size(),\n\t\t\t\tdenoiseOutput.data(),\n\t\t\t\tdenoiseOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e1)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: denoise\\n\") + e1.what());\n\t\t}\n\t\tconst auto x = DenoiseIn[0].GetTensorMutableData<float>();\n\t\tconst auto noise_pred = DenoiseOut[0].GetTensorMutableData<float>();\n\t\tconst auto noise_size = DenoiseOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\tconst auto sq_aprev = sqrt(a_prev);\n\t\tconst auto sq_at = sqrt(a_t);\n\t\tconst auto np_m_op = (sqrt((1 - a_prev) / a_prev) - sqrt((1 - a_t) / a_t));\n#ifndef MoeVoiceStudioAvxAcc\n\t\tfor (size_t i = 0; i < noise_size; ++i)\n\t\t\tnoise_pred[i] = (x[i] / sq_at + np_m_op * noise_pred[i]) * sq_aprev;\n#else\n\t\tInferTools::FloatTensorWrapper XWrapper(x, noise_size);\n\t\tInferTools::FloatTensorWrapper PredWrapper(noise_pred, noise_size);\n\t\tXWrapper /= sq_at;\n\t\t((PredWrapper *= np_m_op) += XWrapper) *= sq_aprev;\n#endif\n\t\tDenoiseIn[0] = std::move(DenoiseOut[0]);\n\t\t_callback(++Process, 1);\n\t}\n\tstd::vector<Ort::Value> out;\n\tout.emplace_back(std::move(DenoiseIn[0]));\n\treturn out;\n}\n\nReflowEularSampler::ReflowEularSampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :MoeVSReflowBaseSampler(Velocity, MelBins, _ProgressCallback, memory) {}\n\nReflowHeunSampler::ReflowHeunSampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :MoeVSReflowBaseSampler(Velocity, MelBins, _ProgressCallback, memory) {}\n\nReflowPececeSampler::ReflowPececeSampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :MoeVSReflowBaseSampler(Velocity, MelBins, _ProgressCallback, memory) {}\n\nReflowRk4Sampler::ReflowRk4Sampler(Ort::Session* Velocity, int64_t MelBins, const ProgressCallback& _ProgressCallback, Ort::MemoryInfo* memory) :MoeVSReflowBaseSampler(Velocity, MelBins, _ProgressCallback, memory) {}\n\nstd::vector<Ort::Value> ReflowEularSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process)\n{\n\tstd::vector<Ort::Value> Spec ,TensorsOut;\n\tSpec.emplace_back(std::move(Tensors[0]));\n\tSpec.emplace_back(std::move(Tensors[1]));\n\tSpec.emplace_back(std::move(Tensors[2]));\n\tconst auto x_size = Spec[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tauto t = *Spec[1].GetTensorMutableData<float>();\n\tint64_t tvec[] = { 0 };\n\tconstexpr int64_t tshape[] = { 1 };\n\tSpec[1] = Ort::Value::CreateTensor(*Memory_, tvec, 1, tshape, 1);\n\tfor (int64_t i = 0; i < Steps; ++i)\n\t{\n\t\t*Spec[1].GetTensorMutableData<int64_t>() = int64_t(t * Scale);\n\t\ttry\n\t\t{\n\t\t\tTensorsOut = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tSpec.data(),\n\t\t\t\tSpec.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\t\tauto x_it = Spec[0].GetTensorMutableData<float>();\n\t\tauto k_it = TensorsOut[0].GetTensorMutableData<float>();\n#ifndef MoeVoiceStudioAvxAcc\n\t\tconst auto x_end = Spec[0].GetTensorMutableData<float>() + x_size;\n\t\twhile (x_it != x_end) { *(x_it++) += (*(k_it++) * dt); }\n#else\n\t\tInferTools::FloatTensorWrapper XWrapper(x_it, x_size);\n\t\tInferTools::FloatTensorWrapper KWrapper(k_it, x_size);\n\t\tKWrapper *= dt;\n\t\tXWrapper += KWrapper\n#endif\n\t\tt += dt;\n\t\tCallback_(++Process, 1);\n\t}\n\treturn Spec;\n}\n\nstd::vector<Ort::Value> ReflowHeunSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process)\n{\n\tstd::vector<Ort::Value> X1;\n\tX1.emplace_back(std::move(Tensors[0]));\n\tX1.emplace_back(std::move(Tensors[1]));\n\tX1.emplace_back(std::move(Tensors[2]));\n\tauto T = *X1[1].GetTensorMutableData<float>();\n\tconst auto XSize = X1[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tconst auto Shape = X1[0].GetTensorTypeAndShapeInfo().GetShape();\n\tint64_t tvec[] = { 0 };\n\tconstexpr int64_t tshape[] = { 1 };\n\tX1[1] = Ort::Value::CreateTensor(*Memory_, tvec, 1, tshape, 1);\n\tfor (int64_t i = 0; i < Steps; ++i)\n\t{\n\t\tstd::vector<Ort::Value> X2, K1, K2;\n\t\tstd::vector K2X(X1[0].GetTensorData<float>(), X1[0].GetTensorData<float>() + XSize);\n\t\t//K1\n\t\t*X1[1].GetTensorMutableData<int64_t>() = int64_t(T * Scale);\n\t\ttry\n\t\t{\n\t\t\tK1 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX1.data(),\n\t\t\t\tX1.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\t\t//K2\n\t\tauto k_it = K1[0].GetTensorData<float>();\n\t\tfor (auto& iter : K2X)\n\t\t\titer += ((*(k_it++)) * dt);\n\t\tX2.emplace_back(Ort::Value::CreateTensor(*Memory_, K2X.data(), K2X.size(), Shape.data(), Shape.size()));\n\t\tX2.emplace_back(std::move(X1[1]));\n\t\tX2.emplace_back(std::move(X1[2]));\n\t\t*X2[1].GetTensorMutableData<int64_t>() = int64_t((T + dt) * Scale);\n\t\ttry\n\t\t{\n\t\t\tK2 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX2.data(),\n\t\t\t\tX2.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\n\t\tauto x_it = X1[0].GetTensorMutableData<float>();\n\t\tauto k1_it = K1[0].GetTensorMutableData<float>();\n\t\tauto k2_it = K2[0].GetTensorMutableData<float>();\n#ifndef MoeVoiceStudioAvxAcc\n\t\tconst auto x_end = X1[0].GetTensorMutableData<float>() + XSize;\n\t\twhile (x_it != x_end) { *(x_it++) += ((*(k1_it++) + *(k2_it++)) * dt / 2.f); }\n#else\n\t\tInferTools::FloatTensorWrapper XWrapper(x_it, XSize);\n\t\tInferTools::FloatTensorWrapper K1Wrapper(k1_it, XSize);\n\t\tInferTools::FloatTensorWrapper K2Wrapper(k2_it, XSize);\n\t\t((K1Wrapper += K2Wrapper) *= dt) /= 2.f;\n\t\tXWrapper += K1Wrapper;\n#endif\n\t\tX1[1] = std::move(X2[1]);\n\t\tX1[2] = std::move(X2[2]);\n\t\tT += dt;\n\t\tCallback_(++Process, 1);\n\t}\n\treturn X1;\n}\n\nstd::vector<Ort::Value> ReflowPececeSampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process)\n{\n\tstd::vector<Ort::Value> X1;\n\tX1.emplace_back(std::move(Tensors[0]));\n\tX1.emplace_back(std::move(Tensors[1]));\n\tX1.emplace_back(std::move(Tensors[2]));\n\tauto T = *X1[1].GetTensorMutableData<float>();\n\tconst auto Shape = X1[0].GetTensorTypeAndShapeInfo().GetShape();\n\tconst auto XSize = X1[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tint64_t tvec[] = { 0 };\n\tconstexpr int64_t tshape[] = { 1 };\n\tX1[1] = Ort::Value::CreateTensor(*Memory_, tvec, 1, tshape, 1);\n\tfor (int64_t i = 0; i < Steps; ++i)\n\t{\n\t\tstd::vector<Ort::Value> X2, X3, X4, K1, K2, K3, K4;\n\t\tstd::vector K2X(X1[0].GetTensorData<float>(), X1[0].GetTensorData<float>() + XSize);\n\t\tauto K3X = K2X;\n\t\t//K1\n\t\t*X1[1].GetTensorMutableData<int64_t>() = int64_t(T * Scale);\n\t\ttry\n\t\t{\n\t\t\tK1 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX1.data(),\n\t\t\t\tX1.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\t\t//K2\n\t\tauto k_it = K1[0].GetTensorData<float>();\n\t\tfor (auto& iter : K2X)\n\t\t\titer += ((*(k_it++)) * dt);\n\t\tX2.emplace_back(Ort::Value::CreateTensor(*Memory_, K2X.data(), K2X.size(), Shape.data(), Shape.size()));\n\t\tX2.emplace_back(std::move(X1[1]));\n\t\tX2.emplace_back(std::move(X1[2]));\n\t\t*X2[1].GetTensorMutableData<int64_t>() = int64_t((T + dt) * Scale);\n\t\ttry\n\t\t{\n\t\t\tK2 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX2.data(),\n\t\t\t\tX2.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\t\t//K3\n\t\tauto k_it1 = K1[0].GetTensorData<float>();\n\t\tauto k_it2 = K2[0].GetTensorData<float>();\n\t\tfor (auto& iter : K3X)\n\t\t\titer += (0.5f * (*(k_it1++) + *(k_it2++)) * dt);\n\t\tX3.emplace_back(Ort::Value::CreateTensor(*Memory_, K3X.data(), K3X.size(), Shape.data(), Shape.size()));\n\t\tX3.emplace_back(std::move(X2[1]));\n\t\tX3.emplace_back(std::move(X2[2]));\n\t\t*X3[1].GetTensorMutableData<int64_t>() = int64_t((T + dt) * Scale);\n\t\ttry\n\t\t{\n\t\t\tK3 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX3.data(),\n\t\t\t\tX3.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\t\t//K4\n\t\tk_it = K3[0].GetTensorData<float>();\n\t\tauto K4X = K3X;\n\t\tfor (auto& iter : K4X)\n\t\t\titer += (*(k_it++) * dt);\n\t\tX4.emplace_back(Ort::Value::CreateTensor(*Memory_, K4X.data(), K4X.size(), Shape.data(), Shape.size()));\n\t\tX4.emplace_back(std::move(X3[1]));\n\t\tX4.emplace_back(std::move(X3[2]));\n\t\t*X4[1].GetTensorMutableData<int64_t>() = int64_t((T + 2.f * dt) * Scale);\n\t\ttry\n\t\t{\n\t\t\tK4 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX4.data(),\n\t\t\t\tX4.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\n\t\tauto x_it = X1[0].GetTensorMutableData<float>();\n\t\tauto k3_it = K3[0].GetTensorMutableData<float>();\n\t\tauto k4_it = K4[0].GetTensorMutableData<float>();\n#ifndef MoeVoiceStudioAvxAcc\n\t\tconst auto x_end = X1[0].GetTensorMutableData<float>() + XSize;\n\t\twhile (x_it != x_end) { *(x_it++) += ((*(k3_it++) + *(k4_it++)) * dt / 2.f); }\n#else\n\t\tInferTools::FloatTensorWrapper XWrapper(x_it, XSize);\n\t\tInferTools::FloatTensorWrapper K3Wrapper(k3_it, XSize);\n\t\tInferTools::FloatTensorWrapper K4Wrapper(k4_it, XSize);\n\t\t((K3Wrapper += K4Wrapper) *= dt) /= 2.f;\n\t\tXWrapper += K3Wrapper;\n#endif\n\t\tX1[1] = std::move(X4[1]);\n\t\tX1[2] = std::move(X4[2]);\n\t\tT += dt;\n\t\tCallback_(++Process, 1);\n\t}\n\treturn X1;\n}\n\nstd::vector<Ort::Value> ReflowRk4Sampler::Sample(std::vector<Ort::Value>& Tensors, int64_t Steps, float dt, float Scale, size_t& Process)\n{\n\tstd::vector<Ort::Value> X1;\n\tX1.emplace_back(std::move(Tensors[0]));\n\tX1.emplace_back(std::move(Tensors[1]));\n\tX1.emplace_back(std::move(Tensors[2]));\n\tauto T = *X1[1].GetTensorMutableData<float>();\n\tconst auto Shape = X1[0].GetTensorTypeAndShapeInfo().GetShape();\n\tconst auto XSize = X1[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tint64_t tvec[] = { 0 };\n\tconstexpr int64_t tshape[] = { 1 };\n\tX1[1] = Ort::Value::CreateTensor(*Memory_, tvec, 1, tshape, 1);\n\tfor (int64_t i = 0; i < Steps; ++i)\n\t{\n\t\tstd::vector<Ort::Value> X2, X3, X4, K1, K2, K3, K4;\n\t\tstd::vector K2X(X1[0].GetTensorData<float>(), X1[0].GetTensorData<float>() + XSize);\n\t\tauto K3X = K2X, K4X = K2X;\n\t\t//K1\n\t\t*X1[1].GetTensorMutableData<int64_t>() = int64_t(T * Scale);\n\t\ttry\n\t\t{\n\t\t\tK1 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX1.data(),\n\t\t\t\tX1.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\t\t//K2\n\t\tauto k_it = K1[0].GetTensorData<float>();\n\t\tfor (auto& iter : K2X)\n\t\t\titer += (0.5f * (*(k_it++)) * dt);\n\t\tX2.emplace_back(Ort::Value::CreateTensor(*Memory_, K2X.data(), K2X.size(), Shape.data(), Shape.size()));\n\t\tX2.emplace_back(std::move(X1[1]));\n\t\tX2.emplace_back(std::move(X1[2]));\n\t\t*X2[1].GetTensorMutableData<int64_t>() = int64_t((T + 0.5f * dt) * Scale);\n\t\ttry\n\t\t{\n\t\t\tK2 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX2.data(),\n\t\t\t\tX2.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\t\t//K3\n\t\tk_it = K2[0].GetTensorData<float>();\n\t\tfor (auto& iter : K3X)\n\t\t\titer += (0.5f * (*(k_it++)) * dt);\n\t\tX3.emplace_back(Ort::Value::CreateTensor(*Memory_, K3X.data(), K3X.size(), Shape.data(), Shape.size()));\n\t\tX3.emplace_back(std::move(X2[1]));\n\t\tX3.emplace_back(std::move(X2[2]));\n\t\t*X3[1].GetTensorMutableData<int64_t>() = int64_t((T + 0.5f * dt) * Scale);\n\t\ttry\n\t\t{\n\t\t\tK3 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX3.data(),\n\t\t\t\tX3.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\t\t//K4\n\t\tk_it = K3[0].GetTensorData<float>();\n\t\tfor (auto& iter : K4X)\n\t\t\titer += (*(k_it++) * dt);\n\t\tX4.emplace_back(Ort::Value::CreateTensor(*Memory_, K4X.data(), K4X.size(), Shape.data(), Shape.size()));\n\t\tX4.emplace_back(std::move(X3[1]));\n\t\tX4.emplace_back(std::move(X3[2]));\n\t\t*X4[1].GetTensorMutableData<int64_t>() = int64_t((T + dt) * Scale);\n\t\ttry\n\t\t{\n\t\t\tK4 = Velocity_->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tvelocityInput.data(),\n\t\t\t\tX4.data(),\n\t\t\t\tX4.size(),\n\t\t\t\tvelocityOutput.data(),\n\t\t\t\tvelocityOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow(std::string(\"Locate: Velocity\\n\") + e.what());\n\t\t}\n\n\t\tauto x_it = X1[0].GetTensorMutableData<float>();\n\t\tauto k1_it = K1[0].GetTensorMutableData<float>();\n\t\tauto k2_it = K2[0].GetTensorMutableData<float>();\n\t\tauto k3_it = K3[0].GetTensorMutableData<float>();\n\t\tauto k4_it = K4[0].GetTensorMutableData<float>();\n#ifndef MoeVoiceStudioAvxAcc\n\t\tconst auto x_end = X1[0].GetTensorMutableData<float>() + XSize;\n\t\twhile (x_it != x_end) { *(x_it++) += ((*(k1_it++) + (*(k2_it++) * 2.f) + (*(k3_it++) * 2.f) + *(k4_it++)) * dt / 6.f); }\n#else\n\t\tInferTools::FloatTensorWrapper XWrapper(x_it, XSize);\n\t\tInferTools::FloatTensorWrapper K1Wrapper(k1_it, XSize);\n\t\tInferTools::FloatTensorWrapper K2Wrapper(k2_it, XSize);\n\t\tInferTools::FloatTensorWrapper K3Wrapper(k3_it, XSize);\n\t\tInferTools::FloatTensorWrapper K4Wrapper(k4_it, XSize);\n\t\tK2Wrapper *= 2.f;\n\t\tK3Wrapper *= 2.f;\n\t\t((((K1Wrapper += K2Wrapper) += K3Wrapper) += K4Wrapper) *= dt) /= 6.f;\n\t\tXWrapper += K1Wrapper;\n#endif\n\t\tX1[1] = std::move(X4[1]);\n\t\tX1[2] = std::move(X4[2]);\n\t\tT += dt;\n\t\tCallback_(++Process, 1);\n\t}\n\treturn X1;\n}\n\nMoeVoiceStudioSamplerEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/Stft/stft.cpp",
    "content": "﻿#include \"../../../header/InferTools/Stft/stft.hpp\"\r\n#include \"../../../header/InferTools/inferTools.hpp\"\r\n#include \"../../../header/Logger/MoeSSLogger.hpp\"\n#include \"cblas.h\"\r\n#ifdef max\r\n#undef max\r\n#endif\r\n#ifdef min\r\n#undef min\r\n#endif\r\n\r\nnamespace DlCodecStft\r\n{\r\n    void HannWindow(double* data, int size) {\r\n        for (int i = 0; i < size; i++) {\r\n            const double windowValue = 0.5 * (1 - cos(2 * STFT::PI * i / (size - 1)));\r\n            data[i] *= windowValue;\r\n        }\r\n    }\r\n\r\n    void ConvertDoubleToFloat(const std::vector<double>& input, float* output)\r\n    {\r\n        for (size_t i = 0; i < input.size(); i++) {\r\n            output[i] = static_cast<float>(input[i]);\r\n        }\r\n    }\r\n\r\n    double CalculatePowerSpectrum(fftw_complex fc) {\r\n        return sqrt(fc[0] * fc[0] + fc[1] * fc[1]);\r\n    }\r\n\r\n    void CalculatePowerSpectrum(double* real, const double* imag, int size) {\r\n        for (int i = 0; i < size; i++) {\r\n            real[i] = real[i] * real[i] + imag[i] * imag[i];\r\n        }\r\n    }\r\n\r\n    void ConvertPowerSpectrumToDecibels(double* data, int size) {\r\n        for (int i = 0; i < size; i++) {\r\n            data[i] = 10 * log10(data[i]);\r\n        }\r\n    }\r\n\r\n\tdouble HZ2Mel(const double frequency)\r\n    {\r\n        constexpr auto f_min = 0.0;\r\n        constexpr auto f_sp = 200.0 / 3;\r\n        auto mel = (frequency - f_min) / f_sp;\r\n        constexpr auto min_log_hz = 1000.0;\r\n        constexpr auto min_log_mel = (min_log_hz - f_min) / f_sp;\r\n        const auto logstep = log(6.4) / 27.0;\r\n        if (frequency >= min_log_hz)\r\n            mel = min_log_mel + log(frequency / min_log_hz) / logstep;\r\n        return mel;\r\n    }\r\n\r\n    double Mel2HZ(const double mel)\r\n    {\r\n        constexpr auto f_min = 0.0;\r\n        constexpr auto f_sp = 200.0 / 3;\r\n        auto freqs = f_min + f_sp * mel;\r\n        constexpr auto min_log_hz = 1000.0;\r\n        constexpr auto min_log_mel = (min_log_hz - f_min) / f_sp;\r\n        const auto logstep = log(6.4) / 27.0;\r\n        if (mel >= min_log_mel)\r\n            freqs = min_log_hz * exp(logstep * (mel - min_log_mel));\r\n        return freqs;\r\n    }\r\n\r\n    static double mel_min = HZ2Mel(20.);\r\n    static double mel_max = HZ2Mel(11025.);\r\n\r\n    STFT::STFT(int WindowSize, int HopSize, int FFTSize)\r\n    {\r\n        WINDOW_SIZE = WindowSize;\r\n        HOP_SIZE = HopSize;\r\n        if (FFTSize > 0)\r\n            FFT_SIZE = FFTSize;\r\n        else\r\n            FFT_SIZE = WINDOW_SIZE / 2 + 1;\r\n    }\r\n\r\n    STFT::~STFT() = default;\r\n\r\n    std::pair<std::vector<float>, int64_t> STFT::operator()(const std::vector<double>& audioData) const\r\n    {\r\n        const int NUM_FRAMES = (int(audioData.size()) - WINDOW_SIZE) / HOP_SIZE + 1;\r\n        std::vector hannWindow(WINDOW_SIZE, 0.0);\r\n        const auto fftOut = reinterpret_cast<fftw_complex*>(fftw_malloc(sizeof(fftw_complex) * FFT_SIZE));\r\n        const fftw_plan plan = fftw_plan_dft_r2c_1d(WINDOW_SIZE, hannWindow.data(), fftOut, FFTW_ESTIMATE);\r\n        std::vector spectrogram(size_t(NUM_FRAMES) * FFT_SIZE, 0.f);\r\n        for (int i = 0; i < NUM_FRAMES; i++) {\r\n            std::memcpy(hannWindow.data(), &audioData[size_t(i) * HOP_SIZE], size_t(sizeof(double)) * WINDOW_SIZE);\r\n            HannWindow(hannWindow.data(), WINDOW_SIZE);\r\n            fftw_execute(plan);\r\n            const auto BgnPtn = size_t(unsigned(i * FFT_SIZE));\r\n            for (int j = 0; j < FFT_SIZE; j++)\r\n                spectrogram[BgnPtn + j] = float(CalculatePowerSpectrum(fftOut[j]));\r\n        }\r\n        fftw_destroy_plan(plan);\r\n        fftw_free(fftOut);\r\n        return { std::move(spectrogram), int64_t(NUM_FRAMES) };\r\n    }\r\n\r\n    std::pair<std::vector<float>, int64_t> Mel::GetMel(const std::vector<double>& audioData) const\r\n    {\r\n        auto BgnTime = clock();\r\n        const auto Spec = stft(audioData);  //[frame, nfft] * [nfft, mel_bins]  |  [mel_bins, nfft] * [nfft, frame]\r\n        logger.log((\"[Inference] Slice Stft Use Time \" + std::to_string(clock() - BgnTime) + \"ms\").c_str());\r\n        const auto NFrames = Spec.second;\r\n        std::vector Mel(MEL_SIZE * NFrames, 0.f);\r\n        BgnTime = clock();\r\n        cblas_sgemm(\r\n            CblasRowMajor,\n            CblasNoTrans,\n            CblasTrans,\n            MEL_SIZE,\n            blasint(NFrames),\n            FFT_SIZE,\n            1.f,\n            MelBasis.data(),\n            FFT_SIZE,\n            Spec.first.data(),\n            blasint(FFT_SIZE),\n            0.f,\n            Mel.data(),\n            blasint(NFrames)\r\n        );\r\n        for (auto& it : Mel)\n            it = log(std::max(1e-5f, it));\r\n        logger.log((\"[Inference] Slice Mel Use Time \" + std::to_string(clock() - BgnTime) + \"ms\").c_str());\r\n        return { std::move(Mel), (int64_t)NFrames };\r\n    }\r\n\r\n    std::pair<std::vector<float>, int64_t> Mel::operator()(const std::vector<double>& audioData) const\r\n    {\r\n        return GetMel(audioData);\r\n    }\r\n\r\n    Mel::Mel(int WindowSize, int HopSize, int SamplingRate, int MelSize) :\r\n        stft(WindowSize, HopSize, WindowSize / 2 + 1)\r\n    {\r\n        if (MelSize > 0)\r\n            MEL_SIZE = MelSize;\r\n        FFT_SIZE = WindowSize / 2 + 1;\r\n        sr = SamplingRate;\r\n\r\n        const int nfft = (FFT_SIZE - 1) * 2;\r\n        const double fftfreqval = 1. / (double(nfft) / double(SamplingRate));\r\n        auto fftfreqs = InferTools::arange(0, FFT_SIZE + 2);\r\n        fftfreqs.resize(FFT_SIZE);\r\n        for (auto& i : fftfreqs)\r\n            i *= fftfreqval;\r\n\r\n        auto mel_f = InferTools::arange(mel_min, mel_max + 1., (mel_max - mel_min) / (MEL_SIZE + 1));\r\n        mel_f.resize(MEL_SIZE + 2); //[MEL_SIZE + 2]\r\n\r\n        std::vector<double> fdiff;\r\n        std::vector<std::vector<double>> ramps; //[MEL_SIZE + 2, FFTSize]\r\n\r\n        ramps.reserve(MEL_SIZE + 2);\r\n        for (auto& i : mel_f)\r\n        {\r\n            i = Mel2HZ(i);\r\n\t        ramps.emplace_back(FFT_SIZE, i);\r\n        }\r\n        for (size_t i = 0; i < ramps.size(); ++i)\r\n            for (int j = 0; j < FFT_SIZE; ++j)\r\n                ramps[i][j] -= fftfreqs[j];\r\n\r\n        fdiff.reserve(MEL_SIZE + 2); //[MEL_SIZE + 1]\r\n        for (size_t i = 1; i < mel_f.size(); ++i)\r\n            fdiff.emplace_back(mel_f[i] - mel_f[i - 1]);\r\n\r\n        MelBasis = std::vector(size_t(FFT_SIZE) * MelSize, 0.f);\r\n\r\n        for (int i = 0; i < MelSize; ++i)\r\n        {\r\n            const auto enorm = 2. / (mel_f[i + 2] - mel_f[i]);\r\n            for (int j = 0; j < FFT_SIZE; ++j)\r\n                MelBasis[i * FFT_SIZE + j] = (float)(std::max(0., std::min(-ramps[i][j] / fdiff[i], ramps[i + 2][j] / fdiff[i + 1])) * enorm);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "libsvc/Modules/src/InferTools/TensorExtractor/MoeVSCoreTensorExtractor.cpp",
    "content": "﻿#include \"../../../header/InferTools/TensorExtractor/MoeVSCoreTensorExtractor.hpp\"\r\n#include <random>\r\n#include \"../../../header/Logger/MoeSSLogger.hpp\"\r\n#include \"../../../header/InferTools/inferTools.hpp\"\r\n\r\nMoeVoiceStudioTensorExtractorHeader\r\n\r\nMoeVoiceStudioTensorExtractor::Inputs SoVits2TensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\r\n{\r\n\tInputs SvcTensors;\r\n\r\n\tconst auto HubertSize = HiddenUnit.size();\r\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\r\n\tSvcTensors.Data.FrameShape = { 1, HubertLen };\r\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\r\n\t// SvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\r\n\r\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\r\n\tSvcTensors.Data.Length[0] = HubertLen;\r\n\tSvcTensors.Data.F0 = InferTools::InterpFunc(F0, (long)F0.size(), (long)HubertLen);\r\n\tfor (auto& it : SvcTensors.Data.F0)\r\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\r\n\tSvcTensors.Data.NSFF0 = GetNSFF0(SvcTensors.Data.F0);\r\n\tSvcTensors.Data.Speaker[0] = params.Chara;\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.HiddenUnit.data(),\r\n\t\tHubertSize,\r\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Length,\r\n\t\t1,\r\n\t\tSvcTensors.Data.OneShape,\r\n\t\t1\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.NSFF0.data(),\r\n\t\tSvcTensors.Data.NSFF0.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Speaker,\r\n\t\t1,\r\n\t\tSvcTensors.Data.OneShape,\r\n\t\t1\r\n\t));\r\n\r\n\tSvcTensors.InputNames = InputNames.data();\r\n\r\n\treturn SvcTensors;\r\n}\r\n\r\nMoeVoiceStudioTensorExtractor::Inputs SoVits3TensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\r\n{\r\n\tInputs SvcTensors;\r\n\r\n\tauto HubertSize = HiddenUnit.size();\r\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\r\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\r\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\r\n\t// SvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\r\n\tconst int64_t upSample = int64_t(_SamplingRate) / 16000;\r\n\tconst auto srcHubertSize = SvcTensors.Data.HiddenUnitShape[1];\r\n\tSvcTensors.Data.HiddenUnitShape[1] *= upSample;\r\n\tHubertSize *= upSample;\r\n\tSvcTensors.Data.FrameShape[1] = SvcTensors.Data.HiddenUnitShape[1];\r\n\tSvcTensors.Data.HiddenUnit.reserve(HubertSize * (upSample + 1));\r\n\tfor (int64_t itS = 0; itS < srcHubertSize; ++itS)\r\n\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\r\n\t\t\tSvcTensors.Data.HiddenUnit.insert(SvcTensors.Data.HiddenUnit.end(), HiddenUnit.begin() + itS * (int64_t)_HiddenSize, HiddenUnit.begin() + (itS + 1) * (int64_t)_HiddenSize);\r\n\tSvcTensors.Data.F0 = GetInterpedF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.HiddenUnitShape[1])));\r\n\tfor (auto& it : SvcTensors.Data.F0)\r\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\r\n\tSvcTensors.Data.Speaker[0] = params.Chara;\r\n\tSvcTensors.Data.Length[0] = SvcTensors.Data.HiddenUnitShape[1];\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.HiddenUnit.data(),\r\n\t\tHubertSize,\r\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Length,\r\n\t\t1,\r\n\t\tSvcTensors.Data.OneShape,\r\n\t\t1\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.F0.data(),\r\n\t\tSvcTensors.Data.F0.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Speaker,\r\n\t\t1,\r\n\t\tSvcTensors.Data.OneShape,\r\n\t\t1\r\n\t));\r\n\r\n\tSvcTensors.InputNames = InputNames.data();\r\n\r\n\treturn SvcTensors;\r\n}\r\n\r\nMoeVoiceStudioTensorExtractor::Inputs SoVits4TensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\r\n{\r\n\tInputs SvcTensors;\r\n\tstd::mt19937 gen(int(params.Seed));\r\n\tstd::normal_distribution<float> normal(0, 1);\r\n\tconst auto HubertSize = HiddenUnit.size();\r\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\r\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\r\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\r\n\tSvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\r\n\tSvcTensors.Data.NoiseShape = { 1, 192, SvcTensors.Data.FrameShape[1] };\r\n\tconst auto NoiseSize = SvcTensors.Data.NoiseShape[1] * SvcTensors.Data.NoiseShape[2] * SvcTensors.Data.NoiseShape[0];\r\n\r\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\r\n\tSvcTensors.Data.F0 = GetInterpedF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.FrameShape[1])));\r\n\tfor (auto& it : SvcTensors.Data.F0)\r\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\r\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\r\n\tSvcTensors.Data.UnVoice = GetUV(F0);\r\n\tSvcTensors.Data.Noise = std::vector(NoiseSize, 0.f);\r\n\tfor (auto& it : SvcTensors.Data.Noise)\r\n\t\tit = normal(gen) * params.NoiseScale;\r\n\tSvcTensors.Data.Speaker[0] = params.Chara;\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.HiddenUnit.data(),\r\n\t\tHubertSize,\r\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.F0.data(),\r\n\t\tSvcTensors.Data.F0.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Alignment.data(),\r\n\t\tSvcTensors.Data.Alignment.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.UnVoice.data(),\r\n\t\tSvcTensors.Data.UnVoice.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Noise.data(),\r\n\t\tSvcTensors.Data.Noise.size(),\r\n\t\tSvcTensors.Data.NoiseShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tif (_SpeakerMix)\r\n\t{\r\n\t\tSvcTensors.Data.SpkMap = GetCurrectSpkMixData(SpkMap, SvcTensors.Data.FrameShape[1], params.Chara);\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.SpkMap.data(),\r\n\t\t\tSvcTensors.Data.SpkMap.size(),\r\n\t\t\tSvcTensors.Data.SpkShape.data(),\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t{\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.Speaker,\r\n\t\t\t1,\r\n\t\t\tSvcTensors.Data.OneShape,\r\n\t\t\t1\r\n\t\t));\r\n\t}\r\n\r\n\tif (_Volume)\r\n\t{\r\n\t\tSvcTensors.InputNames = InputNamesVol.data();\r\n\t\tSvcTensors.Data.Volume = InferTools::InterpFunc(Volume, long(Volume.size()), long(SvcTensors.Data.FrameShape[1]));\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.Volume.data(),\r\n\t\t\tSvcTensors.Data.FrameShape[1],\r\n\t\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t\tSvcTensors.InputNames = InputNames.data();\r\n\r\n\treturn SvcTensors;\r\n}\r\n\r\nMoeVoiceStudioTensorExtractor::Inputs SoVits4DDSPTensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\r\n{\r\n\tInputs SvcTensors;\r\n\tstd::mt19937 gen(int(params.Seed));\r\n\tstd::normal_distribution<float> normal(0, 1);\r\n\tconst auto HubertSize = HiddenUnit.size();\r\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\r\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\r\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\r\n\tSvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\r\n\tSvcTensors.Data.NoiseShape = { 1, 192, SvcTensors.Data.FrameShape[1] };\r\n\tconst auto NoiseSize = SvcTensors.Data.NoiseShape[1] * SvcTensors.Data.NoiseShape[2] * SvcTensors.Data.NoiseShape[0];\r\n\tSvcTensors.Data.DDSPNoiseShape = { 1, 2048, SvcTensors.Data.FrameShape[1] };\r\n\tconst int64_t IstftCount = SvcTensors.Data.FrameShape[1] * 2048;\r\n\r\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\r\n\tSvcTensors.Data.F0 = GetInterpedF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.FrameShape[1])));\r\n\tfor (auto& it : SvcTensors.Data.F0)\r\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\r\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\r\n\tSvcTensors.Data.DDSPNoise = std::vector(IstftCount, params.DDSPNoiseScale);\r\n\tSvcTensors.Data.Noise = std::vector(NoiseSize, 0.f);\r\n\tfor (auto& it : SvcTensors.Data.Noise)\r\n\t\tit = normal(gen) * params.NoiseScale;\r\n\tSvcTensors.Data.Speaker[0] = params.Chara;\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.HiddenUnit.data(),\r\n\t\tHubertSize,\r\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.F0.data(),\r\n\t\tSvcTensors.Data.F0.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Alignment.data(),\r\n\t\tSvcTensors.Data.Alignment.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.DDSPNoise.data(),\r\n\t\tSvcTensors.Data.DDSPNoise.size(),\r\n\t\tSvcTensors.Data.DDSPNoiseShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Noise.data(),\r\n\t\tSvcTensors.Data.Noise.size(),\r\n\t\tSvcTensors.Data.NoiseShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tif (_SpeakerMix)\r\n\t{\r\n\t\tSvcTensors.Data.SpkMap = GetCurrectSpkMixData(SpkMap, SvcTensors.Data.FrameShape[1], params.Chara);\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.SpkMap.data(),\r\n\t\t\tSvcTensors.Data.SpkMap.size(),\r\n\t\t\tSvcTensors.Data.SpkShape.data(),\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t{\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.Speaker,\r\n\t\t\t1,\r\n\t\t\tSvcTensors.Data.OneShape,\r\n\t\t\t1\r\n\t\t));\r\n\t}\r\n\r\n\tif (_Volume)\r\n\t{\r\n\t\tSvcTensors.InputNames = InputNamesVol.data();\r\n\t\tSvcTensors.Data.Volume = InferTools::InterpFunc(Volume, long(Volume.size()), long(SvcTensors.Data.FrameShape[1]));\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.Volume.data(),\r\n\t\t\tSvcTensors.Data.FrameShape[1],\r\n\t\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t\tSvcTensors.InputNames = InputNames.data();\r\n\r\n\treturn SvcTensors;\r\n}\r\n\r\nMoeVoiceStudioTensorExtractor::Inputs RVCTensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\r\n{\r\n\tInputs SvcTensors;\r\n\tstd::mt19937 gen(int(params.Seed));\r\n\tstd::normal_distribution<float> normal(0, 1);\r\n\tauto HubertSize = HiddenUnit.size();\r\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\r\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\r\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\r\n\tconstexpr int64_t upSample = 2;\r\n\tconst auto srcHubertSize = SvcTensors.Data.HiddenUnitShape[1];\r\n\tSvcTensors.Data.HiddenUnitShape[1] *= upSample;\r\n\tHubertSize *= upSample;\r\n\tSvcTensors.Data.FrameShape[1] = SvcTensors.Data.HiddenUnitShape[1];\r\n\tSvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\r\n\tSvcTensors.Data.NoiseShape = { 1, 192, SvcTensors.Data.FrameShape[1] };\r\n\tconst auto NoiseSize = SvcTensors.Data.NoiseShape[1] * SvcTensors.Data.NoiseShape[2] * SvcTensors.Data.NoiseShape[0];\r\n\r\n\tSvcTensors.Data.HiddenUnit.reserve(HubertSize);\r\n\tfor (int64_t itS = 0; itS < srcHubertSize; ++itS)\r\n\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\r\n\t\t\tSvcTensors.Data.HiddenUnit.insert(SvcTensors.Data.HiddenUnit.end(), HiddenUnit.begin() + itS * (int64_t)_HiddenSize, HiddenUnit.begin() + (itS + 1) * (int64_t)_HiddenSize);\r\n\tSvcTensors.Data.Length[0] = SvcTensors.Data.HiddenUnitShape[1];\r\n\tSvcTensors.Data.F0 = GetInterpedF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.HiddenUnitShape[1])));\r\n\tfor (auto& it : SvcTensors.Data.F0)\r\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\r\n\tSvcTensors.Data.NSFF0 = GetNSFF0(SvcTensors.Data.F0);\r\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\r\n\tSvcTensors.Data.Noise = std::vector(NoiseSize, 0.f);\r\n\tfor (auto& it : SvcTensors.Data.Noise)\r\n\t\tit = normal(gen) * params.NoiseScale;\r\n\tSvcTensors.Data.Speaker[0] = params.Chara;\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.HiddenUnit.data(),\r\n\t\tHubertSize,\r\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Length,\r\n\t\t1,\r\n\t\tSvcTensors.Data.OneShape,\r\n\t\t1\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.NSFF0.data(),\r\n\t\tSvcTensors.Data.NSFF0.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.F0.data(),\r\n\t\tSvcTensors.Data.F0.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tif (_SpeakerMix)\r\n\t{\r\n\t\tSvcTensors.Data.SpkMap = GetCurrectSpkMixData(SpkMap, SvcTensors.Data.FrameShape[1], params.Chara);\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.SpkMap.data(),\r\n\t\t\tSvcTensors.Data.SpkMap.size(),\r\n\t\t\tSvcTensors.Data.SpkShape.data(),\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t{\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.Speaker,\r\n\t\t\t1,\r\n\t\t\tSvcTensors.Data.OneShape,\r\n\t\t\t1\r\n\t\t));\r\n\t}\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Noise.data(),\r\n\t\tSvcTensors.Data.Noise.size(),\r\n\t\tSvcTensors.Data.NoiseShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tif (_Volume)\r\n\t{\r\n\t\tSvcTensors.InputNames = InputNamesVol.data();\r\n\t\tSvcTensors.Data.Volume = InferTools::InterpFunc(Volume, long(Volume.size()), long(SvcTensors.Data.FrameShape[1]));\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.Volume.data(),\r\n\t\t\tSvcTensors.Data.FrameShape[1],\r\n\t\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t\tSvcTensors.InputNames = InputNames.data();\r\n\r\n\treturn SvcTensors;\r\n}\r\n\r\nMoeVoiceStudioTensorExtractor::Inputs DiffSvcTensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\r\n{\r\n\tInputs SvcTensors;\r\n\tconst auto HubertSize = HiddenUnit.size();\r\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\r\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\r\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\r\n\r\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\r\n\tSvcTensors.Data.F0 = InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.FrameShape[1]));\r\n\tfor (auto& it : SvcTensors.Data.F0)\r\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\r\n\tSvcTensors.Data.F0 = GetInterpedF0log(SvcTensors.Data.F0, true);\r\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\r\n\tSvcTensors.Data.Speaker[0] = params.Chara;\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.HiddenUnit.data(),\r\n\t\tHubertSize,\r\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Alignment.data(),\r\n\t\tSvcTensors.Data.Alignment.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Speaker,\r\n\t\t1,\r\n\t\tSvcTensors.Data.OneShape,\r\n\t\t1\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.F0.data(),\r\n\t\tSvcTensors.Data.F0.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.InputNames = InputNames.data();\r\n\r\n\tSvcTensors.OutputNames = OutputNames.data();\r\n\r\n\tSvcTensors.OutputCount = OutputNames.size();\r\n\r\n\treturn SvcTensors;\r\n}\r\n\r\nMoeVoiceStudioTensorExtractor::Inputs DiffusionSvcTensorExtractor::Extract(const std::vector<float>& HiddenUnit, const std::vector<float>& F0, const std::vector<float>& Volume, const std::vector<std::vector<float>>& SpkMap, Params params)\r\n{\r\n\tInputs SvcTensors;\r\n\tconst auto HubertSize = HiddenUnit.size();\r\n\tconst auto HubertLen = int64_t(HubertSize) / int64_t(_HiddenSize);\r\n\tSvcTensors.Data.FrameShape = { 1, int64_t(params.AudioSize * _SamplingRate / _SrcSamplingRate / _HopSize) };\r\n\tSvcTensors.Data.HiddenUnitShape = { 1, HubertLen, int64_t(_HiddenSize) };\r\n\tSvcTensors.Data.SpkShape = { SvcTensors.Data.FrameShape[1], int64_t(_NSpeaker) };\r\n\r\n\tSvcTensors.Data.HiddenUnit = HiddenUnit;\r\n\tSvcTensors.Data.F0 = InterpUVF0(InferTools::InterpFunc(F0, long(F0.size()), long(SvcTensors.Data.FrameShape[1])));\r\n\tfor (auto& it : SvcTensors.Data.F0)\r\n\t\tit *= (float)pow(2.0, static_cast<double>(params.upKeys) / 12.0);\r\n\tSvcTensors.Data.Alignment = GetAligments(SvcTensors.Data.FrameShape[1], HubertLen);\r\n\tSvcTensors.Data.Speaker[0] = params.Chara;\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.HiddenUnit.data(),\r\n\t\tHubertSize,\r\n\t\tSvcTensors.Data.HiddenUnitShape.data(),\r\n\t\t3\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.Alignment.data(),\r\n\t\tSvcTensors.Data.Alignment.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\tMemory,\r\n\t\tSvcTensors.Data.F0.data(),\r\n\t\tSvcTensors.Data.F0.size(),\r\n\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t2\r\n\t));\r\n\r\n\tif (_Volume)\r\n\t{\r\n\t\tSvcTensors.InputNames = InputNamesVol.data();\r\n\t\tSvcTensors.Data.Volume = InferTools::InterpFunc(Volume, long(Volume.size()), long(SvcTensors.Data.FrameShape[1]));\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.Volume.data(),\r\n\t\t\tSvcTensors.Data.FrameShape[1],\r\n\t\t\tSvcTensors.Data.FrameShape.data(),\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t\tSvcTensors.InputNames = InputNames.data();\r\n\r\n\tif (_SpeakerMix)\r\n\t{\r\n\t\tSvcTensors.Data.SpkMap = GetCurrectSpkMixData(SpkMap, SvcTensors.Data.FrameShape[1], params.Chara);\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.SpkMap.data(),\r\n\t\t\tSvcTensors.Data.SpkMap.size(),\r\n\t\t\tSvcTensors.Data.SpkShape.data(),\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t{\r\n\t\tSvcTensors.Tensor.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\tMemory,\r\n\t\t\tSvcTensors.Data.Speaker,\r\n\t\t\t1,\r\n\t\t\tSvcTensors.Data.OneShape,\r\n\t\t\t1\r\n\t\t));\r\n\t}\r\n\r\n\tSvcTensors.OutputNames = OutputNames.data();\r\n\r\n\tSvcTensors.OutputCount = OutputNames.size();\r\n\r\n\treturn SvcTensors;\r\n}\r\n\r\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/TensorExtractor/MoeVoiceStudioTensorExtractor.cpp",
    "content": "﻿#include \"../../../header/InferTools/TensorExtractor/MoeVoiceStudioTensorExtractor.hpp\"\n#include \"../../../header/InferTools/inferTools.hpp\"\nMoeVoiceStudioTensorExtractorHeader\n\nMoeVoiceStudioTensorExtractor::MoeVoiceStudioTensorExtractor(uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const Others& _other)\n{\n\t_SrcSamplingRate = _srcsr;\n\t_SamplingRate = _sr;\n\t_HopSize = _hop;\n\t_SpeakerMix = _smix;\n\t_Volume = _volume;\n\t_HiddenSize = _hidden_size;\n\t_NSpeaker = _nspeaker;\n\tf0_bin = _other.f0_bin;\n\tf0_max = _other.f0_max;\n\tf0_min = _other.f0_min;\n\tf0_mel_min = 1127.f * log(1.f + f0_min / 700.f);\n\tf0_mel_max = 1127.f * log(1.f + f0_max / 700.f);\n\tMemory = _other.Memory;\n}\n\nMoeVoiceStudioTensorExtractor::Inputs MoeVoiceStudioTensorExtractor::Extract(\n\tconst std::vector<float>& HiddenUnit,\n\tconst std::vector<float>& F0,\n\tconst std::vector<float>& Volume,\n\tconst std::vector<std::vector<float>>& SpkMap,\n\tParams params\n)\n{\n\tLibDLVoiceCodecThrow(\"NotImplementedError\");\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetCurrectSpkMixData(const std::vector<std::vector<float>>& _input, size_t dst_len, int64_t curspk) const\n{\n\tstd::vector<float> mixData;\n\tmixData.reserve(_NSpeaker * dst_len);\n\tif(_input.empty())\n\t{\n\t\tstd::vector<float> LenData(_NSpeaker, 0.0);\n\t\tLenData[curspk] = 1.0;\n\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\tmixData.insert(mixData.end(), LenData.begin(), LenData.end());\n\t}\n\telse\n\t{\n\t\tstd::vector<std::vector<float>> _spkMap;\n\t\tfor (size_t i = 0; i < _input.size() && i < _NSpeaker; ++i)\n\t\t\t_spkMap.emplace_back(InferTools::InterpFunc(_input[i], long(_input[i].size()), long(dst_len)));\n\t\tLinearCombination(_spkMap, curspk);\n\t\tconst auto curnspk = _input.size();\n\t\tif (curnspk < _NSpeaker)\n\t\t{\n\t\t\tstd::vector<float> LenData(_NSpeaker - curnspk, 0.0);\n\t\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\t{\n\t\t\t\tfor (size_t j = 0; j < curnspk; ++j)\n\t\t\t\t\tmixData.emplace_back(_spkMap[j][i]);\n\t\t\t\tmixData.insert(mixData.end(), LenData.begin(), LenData.end());\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\t\tfor (size_t j = 0; j < _NSpeaker; ++j)\n\t\t\t\t\tmixData.emplace_back(_spkMap[j][i]);\n\t}\n\treturn mixData;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetSpkMixData(const std::vector<std::vector<float>>& _input, size_t dst_len, size_t spk_count)\n{\n\tstd::vector<float> mixData;\n\tmixData.reserve(spk_count * dst_len);\n\tif (_input.empty())\n\t{\n\t\tstd::vector<float> LenData(spk_count, 0.0);\n\t\tLenData[0] = 1.0;\n\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\tmixData.insert(mixData.end(), LenData.begin(), LenData.end());\n\t}\n\telse\n\t{\n\t\tstd::vector<std::vector<float>> _spkMap;\n\t\tfor (size_t i = 0; i < _input.size() && i < spk_count; ++i)\n\t\t\t_spkMap.emplace_back(InferTools::InterpFunc(_input[i], long(_input[i].size()), long(dst_len)));\n\t\tLinearCombination(_spkMap, 0);\n\t\tconst auto curnspk = _input.size();\n\t\tif (curnspk < spk_count)\n\t\t{\n\t\t\tstd::vector<float> LenData(spk_count - curnspk, 0.0);\n\t\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\t{\n\t\t\t\tfor (size_t j = 0; j < curnspk; ++j)\n\t\t\t\t\tmixData.emplace_back(_spkMap[j][i]);\n\t\t\t\tmixData.insert(mixData.end(), LenData.begin(), LenData.end());\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tfor (size_t i = 0; i < dst_len; ++i)\n\t\t\t\tfor (size_t j = 0; j < spk_count; ++j)\n\t\t\t\t\tmixData.emplace_back(_spkMap[j][i]);\n\t}\n\treturn mixData;\n}\n\nstd::vector<int64_t> MoeVoiceStudioTensorExtractor::GetNSFF0(const std::vector<float>& F0) const\n{\n\tconst auto f0Len = F0.size();\n\tstd::vector<int64_t> NSFF0(f0Len);\n\tfor (size_t i = 0; i < f0Len; ++i)\n\t{\n\t\tfloat f0_mel = 1127.f * log(1.f + F0[i] / 700.f);\n\t\tif (f0_mel > 0.f)\n\t\t\tf0_mel = (f0_mel - f0_mel_min) * (float(f0_bin) - 2.f) / (f0_mel_max - f0_mel_min) + 1.f;\n\t\tif (f0_mel < 1.f)\n\t\t\tf0_mel = 1.f;\n\t\tif (f0_mel > float(f0_bin) - 1.f)\n\t\t\tf0_mel = float(f0_bin) - 1.f;\n\t\tNSFF0[i] = (int64_t)round(f0_mel);\n\t}\n\treturn NSFF0;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetInterpedF0(const std::vector<float>& F0)\n{\n\tconst auto specLen = F0.size();\n\tstd::vector<float> Of0(specLen, 0.0);\n\n\tfloat last_value = 0.0;\n\tfor (size_t i = 0; i < specLen; ++i)\n\t{\n\t\tif (F0[i] <= 0.f)\n\t\t{\n\t\t\tsize_t j = i + 1;\n\t\t\tfor (; j < specLen; ++j)\n\t\t\t{\n\t\t\t\tif (F0[j] > 0.f)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (j < specLen - 1)\n\t\t\t{\n\t\t\t\tif (last_value > 0.f)\n\t\t\t\t{\n\t\t\t\t\tconst auto step = (F0[j] - F0[i - 1]) / float(j - i);\n\t\t\t\t\tfor (size_t k = i; k < j; ++k)\n\t\t\t\t\t\tOf0[k] = float(F0[i - 1] + step * float(k - i + 1));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (size_t k = i; k < j; ++k)\n\t\t\t\t\t\tOf0[k] = float(F0[j]);\n\t\t\t\ti = j;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (size_t k = i; k < specLen; ++k)\n\t\t\t\t\tOf0[k] = float(last_value);\n\t\t\t\ti = specLen;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (i == 0)\n\t\t\t{\n\t\t\t\tOf0[i] = float(F0[i]);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tOf0[i] = float(F0[i - 1]);\n\t\t\tlast_value = F0[i];\n\t\t}\n\t}\n\treturn Of0;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::InterpUVF0(const std::vector<float>& F0)\n{\n\tstd::vector<double> NUVF0;\n\tstd::vector<double> UVF0Indices, NUVF0Indices;\n\tUVF0Indices.reserve(F0.size());\n\tNUVF0.reserve(F0.size());\n\tNUVF0Indices.reserve(F0.size());\n\tif(F0[0] < 0.0001f)\n\t{\n\t\tNUVF0.emplace_back(0);\n\t\tNUVF0Indices.emplace_back(0);\n\t}\n\tfor (size_t i = 1; i < F0.size(); ++i)\n\t{\n\t\tif (F0[i] < 0.0001f)\n\t\t\tUVF0Indices.emplace_back((double)i);\n\t\telse\n\t\t{\n\t\t\tNUVF0.emplace_back((double)F0[i]);\n\t\t\tNUVF0Indices.emplace_back((double)i);\n\t\t}\n\t}\n\tif (UVF0Indices.empty() || NUVF0Indices.empty())\n\t\treturn F0;\n\tstd::vector<double> UVF0(F0.size());\n\tstd::vector<float> Of0 = F0;\n\tinterp1(NUVF0Indices.data(), NUVF0.data(), (int)NUVF0.size(),\n\t\tUVF0Indices.data(), (int)UVF0Indices.size(), UVF0.data());\n\tfor (size_t i = 0; i < UVF0Indices.size(); ++i)\n\t\tOf0[size_t(UVF0Indices[i])] = (float)UVF0[i];\n\treturn Of0;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetUV(const std::vector<float>& F0)\n{\n\tconst auto specLen = F0.size();\n\tstd::vector<float> ruv(specLen, 1.0);\n\tfor (size_t i = 0; i < specLen; ++i)\n\t{\n\t\tif (F0[i] < 0.001f)\n\t\t\truv[i] = 0.f;\n\t}\n\treturn ruv;\n}\n\nstd::vector<int64_t> MoeVoiceStudioTensorExtractor::GetAligments(size_t specLen, size_t hubertLen)\n{\n\tstd::vector<int64_t> mel2ph(specLen + 1, 0);\n\n\tsize_t startFrame = 0;\n\tconst double ph_durs = static_cast<double>(specLen) / static_cast<double>(hubertLen);\n\tfor (size_t iph = 0; iph < hubertLen; ++iph)\n\t{\n\t\tconst auto endFrame = static_cast<size_t>(round(static_cast<double>(iph) * ph_durs + ph_durs));\n\t\tfor (auto j = startFrame; j < endFrame + 1; ++j)\n\t\t\tmel2ph[j] = static_cast<long long>(iph) + 1;\n\t\tstartFrame = endFrame + 1;\n\t}\n\treturn mel2ph;\n}\n\nstd::vector<float> MoeVoiceStudioTensorExtractor::GetInterpedF0log(const std::vector<float>& rF0, bool enable_log)\n{\n\tconst auto specLen = rF0.size();\n\tstd::vector<float> F0(specLen);\n\tstd::vector<float> Of0(specLen, 0.0);\n\tfor (size_t i = 0; i < specLen; ++i)\n\t{\n\t\tif (enable_log)\n\t\t\tF0[i] = log2(rF0[i]);\n\t\telse\n\t\t\tF0[i] = rF0[i];\n\t\tif (isnan(F0[i]) || isinf(F0[i]))\n\t\t\tF0[i] = 0.f;\n\t}\n\n\tfloat last_value = 0.0;\n\tfor (size_t i = 0; i < specLen; ++i)\n\t{\n\t\tif (F0[i] <= 0.f)\n\t\t{\n\t\t\tsize_t j = i + 1;\n\t\t\tfor (; j < specLen; ++j)\n\t\t\t{\n\t\t\t\tif (F0[j] > 0.f)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (j < specLen - 1)\n\t\t\t{\n\t\t\t\tif (last_value > 0.f)\n\t\t\t\t{\n\t\t\t\t\tconst auto step = (F0[j] - F0[i - 1]) / float(j - i);\n\t\t\t\t\tfor (size_t k = i; k < j; ++k)\n\t\t\t\t\t\tOf0[k] = float(F0[i - 1] + step * float(k - i + 1));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (size_t k = i; k < j; ++k)\n\t\t\t\t\t\tOf0[k] = float(F0[j]);\n\t\t\t\ti = j;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (size_t k = i; k < specLen; ++k)\n\t\t\t\t\tOf0[k] = float(last_value);\n\t\t\t\ti = specLen;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tOf0[i] = float(F0[i - 1]);\n\t\t\tlast_value = F0[i];\n\t\t}\n\t}\n\treturn Of0;\n}\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/TensorExtractor/TensorExtractorManager.cpp",
    "content": "﻿#include \"../../../header/InferTools/TensorExtractor/TensorExtractorManager.hpp\"\n#include <map>\n#include \"../../../header/Logger/MoeSSLogger.hpp\"\n\nMoeVoiceStudioTensorExtractorHeader\n\tinline std::map<std::wstring, GetTensorExtractorFn> RegisteredTensorExtractors;\n\nvoid RegisterTensorExtractor(const std::wstring& _name, const GetTensorExtractorFn& _constructor_fn)\n{\n\tif (RegisteredTensorExtractors.find(_name) != RegisteredTensorExtractors.end())\n\t{\n\t\tlogger.log(L\"[Warn] TensorExtractorNameConflict\");\n\t\treturn;\n\t}\n\tRegisteredTensorExtractors[_name] = _constructor_fn;\n}\n\nTensorExtractor GetTensorExtractor(const std::wstring& _name, uint64_t _srcsr, uint64_t _sr, uint64_t _hop, bool _smix, bool _volume, uint64_t _hidden_size, uint64_t _nspeaker, const MoeVoiceStudioTensorExtractor::Others& _other)\n{\n\tconst auto f_TensorExtractor = RegisteredTensorExtractors.find(_name);\n\tif (f_TensorExtractor != RegisteredTensorExtractors.end())\n\t\treturn f_TensorExtractor->second(_srcsr, _sr, _hop, _smix, _volume, _hidden_size, _nspeaker, _other);\n\tthrow std::runtime_error(\"Unable To Find An Available TensorExtractor\");\n}\n\nMoeVoiceStudioTensorExtractorEnd"
  },
  {
    "path": "libsvc/Modules/src/InferTools/inferTools.cpp",
    "content": "﻿#include \"../../header/InferTools/inferTools.hpp\"\n#include \"string\"\r\n#ifdef MoeVoiceStudioAvxAcc\r\n#include <immintrin.h>\r\n#endif\r\nInferTools::Wav::Wav(const wchar_t* Path) :header(WAV_HEADER()) {\r\n    char buf[1024];\r\n    FILE* stream;\r\n    _wfreopen_s(&stream, Path, L\"rb\", stderr);\r\n    if (stream == nullptr) {\r\n        throw (std::exception(\"File not exists\"));\r\n    }\r\n    fread(buf, 1, HEAD_LENGTH, stream);\r\n    int pos = 0;\r\n    while (pos < HEAD_LENGTH) {\r\n        if ((buf[pos] == 'R') && (buf[pos + 1] == 'I') && (buf[pos + 2] == 'F') && (buf[pos + 3] == 'F')) {\r\n            pos += 4;\r\n            break;\r\n        }\r\n        ++pos;\r\n    }\r\n    if (pos >= HEAD_LENGTH)\r\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\r\n    header.ChunkSize = *(int*)&buf[pos];\r\n    pos += 8;\r\n    while (pos < HEAD_LENGTH) {\r\n        if ((buf[pos] == 'f') && (buf[pos + 1] == 'm') && (buf[pos + 2] == 't')) {\r\n            pos += 4;\r\n            break;\r\n        }\r\n        ++pos;\r\n    }\r\n    if (pos >= HEAD_LENGTH)\r\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\r\n    header.Subchunk1Size = *(int*)&buf[pos];\r\n    pos += 4;\r\n    header.AudioFormat = *(short*)&buf[pos];\r\n    pos += 2;\r\n    header.NumOfChan = *(short*)&buf[pos];\r\n    pos += 2;\r\n    header.SamplesPerSec = *(int*)&buf[pos];\r\n    pos += 4;\r\n    header.bytesPerSec = *(int*)&buf[pos];\r\n    pos += 4;\r\n    header.blockAlign = *(short*)&buf[pos];\r\n    pos += 2;\r\n    header.bitsPerSample = *(short*)&buf[pos];\r\n    pos += 2;\r\n    while (pos < HEAD_LENGTH) {\r\n        if ((buf[pos] == 'd') && (buf[pos + 1] == 'a') && (buf[pos + 2] == 't') && (buf[pos + 3] == 'a')) {\r\n            pos += 4;\r\n            break;\r\n        }\r\n        ++pos;\r\n    }\r\n    if (pos >= HEAD_LENGTH)\r\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\r\n    header.Subchunk2Size = *(int*)&buf[pos];\r\n    pos += 4;\r\n    StartPos = pos;\r\n    Data = new char[header.Subchunk2Size + 1];\r\n    fseek(stream, StartPos, SEEK_SET);\r\n    fread(Data, 1, header.Subchunk2Size, stream);\r\n    if (stream != nullptr) {\r\n        fclose(stream);\r\n    }\r\n    SData = reinterpret_cast<int16_t*>(Data);\r\n    dataSize = header.Subchunk2Size / 2;\r\n}\r\n\r\nInferTools::Wav::Wav(const Wav& input) :header(WAV_HEADER()) {\r\n    Data = new char[(input.header.Subchunk2Size + 1)];\r\n    if (Data == nullptr) { LibDLVoiceCodecThrow(\"OOM\") }\r\n    memcpy(header.RIFF, input.header.RIFF, 4);\r\n    memcpy(header.fmt, input.header.fmt, 4);\r\n    memcpy(header.WAVE, input.header.WAVE, 4);\r\n    memcpy(header.Subchunk2ID, input.header.Subchunk2ID, 4);\r\n    header.ChunkSize = input.header.ChunkSize;\r\n    header.Subchunk1Size = input.header.Subchunk1Size;\r\n    header.AudioFormat = input.header.AudioFormat;\r\n    header.NumOfChan = input.header.NumOfChan;\r\n    header.SamplesPerSec = input.header.SamplesPerSec;\r\n    header.bytesPerSec = input.header.bytesPerSec;\r\n    header.blockAlign = input.header.blockAlign;\r\n    header.bitsPerSample = input.header.bitsPerSample;\r\n    header.Subchunk2Size = input.header.Subchunk2Size;\r\n    StartPos = input.StartPos;\r\n    memcpy(Data, input.Data, input.header.Subchunk2Size);\r\n    SData = reinterpret_cast<int16_t*>(Data);\r\n    dataSize = header.Subchunk2Size / 2;\r\n}\r\n\r\nInferTools::Wav::Wav(Wav&& input) noexcept\r\n{\r\n    Data = input.Data;\r\n    input.Data = nullptr;\r\n    memcpy(header.RIFF, input.header.RIFF, 4);\r\n    memcpy(header.fmt, input.header.fmt, 4);\r\n    memcpy(header.WAVE, input.header.WAVE, 4);\r\n    memcpy(header.Subchunk2ID, input.header.Subchunk2ID, 4);\r\n    header.ChunkSize = input.header.ChunkSize;\r\n    header.Subchunk1Size = input.header.Subchunk1Size;\r\n    header.AudioFormat = input.header.AudioFormat;\r\n    header.NumOfChan = input.header.NumOfChan;\r\n    header.SamplesPerSec = input.header.SamplesPerSec;\r\n    header.bytesPerSec = input.header.bytesPerSec;\r\n    header.blockAlign = input.header.blockAlign;\r\n    header.bitsPerSample = input.header.bitsPerSample;\r\n    header.Subchunk2Size = input.header.Subchunk2Size;\r\n    StartPos = input.StartPos;\r\n    SData = reinterpret_cast<int16_t*>(Data);\r\n    dataSize = header.Subchunk2Size / 2;\r\n}\r\n\r\nInferTools::Wav& InferTools::Wav::operator=(Wav&& input) noexcept\r\n{\r\n    destory();\r\n    Data = input.Data;\r\n    input.Data = nullptr;\r\n    memcpy(header.RIFF, input.header.RIFF, 4);\r\n    memcpy(header.fmt, input.header.fmt, 4);\r\n    memcpy(header.WAVE, input.header.WAVE, 4);\r\n    memcpy(header.Subchunk2ID, input.header.Subchunk2ID, 4);\r\n    header.ChunkSize = input.header.ChunkSize;\r\n    header.Subchunk1Size = input.header.Subchunk1Size;\r\n    header.AudioFormat = input.header.AudioFormat;\r\n    header.NumOfChan = input.header.NumOfChan;\r\n    header.SamplesPerSec = input.header.SamplesPerSec;\r\n    header.bytesPerSec = input.header.bytesPerSec;\r\n    header.blockAlign = input.header.blockAlign;\r\n    header.bitsPerSample = input.header.bitsPerSample;\r\n    header.Subchunk2Size = input.header.Subchunk2Size;\r\n    StartPos = input.StartPos;\r\n    SData = reinterpret_cast<int16_t*>(Data);\r\n    dataSize = header.Subchunk2Size / 2;\r\n    return *this;\r\n}\r\n\r\nInferTools::Wav& InferTools::Wav::cat(const Wav& input)\r\n{\r\n    if (header.AudioFormat != 1) return *this;\r\n    if (header.SamplesPerSec != input.header.bitsPerSample || header.NumOfChan != input.header.NumOfChan) return *this;\r\n    char* buffer = new char[(int64_t)header.Subchunk2Size + (int64_t)input.header.Subchunk2Size + 1];\r\n    if (buffer == nullptr)return *this;\r\n    memcpy(buffer, Data, header.Subchunk2Size);\r\n    memcpy(buffer + header.Subchunk2Size, input.Data, input.header.Subchunk2Size);\r\n    header.ChunkSize += input.header.Subchunk2Size;\r\n    header.Subchunk2Size += input.header.Subchunk2Size;\r\n    delete[] Data;\r\n    Data = buffer;\r\n    SData = reinterpret_cast<int16_t*>(Data);\r\n    dataSize = header.Subchunk2Size / 2;\r\n    return *this;\r\n}\r\n\r\nstd::vector<size_t> InferTools::SliceAudio(const std::vector<int16_t>& input, const SlicerSettings& _slicer)\r\n{\r\n    if (input.size() < size_t(_slicer.MinLength) * _slicer.SamplingRate)\r\n        return {0, input.size()};\r\n\r\n    std::vector<unsigned long long> slice_point;\r\n    bool slice_tag = true;\r\n    slice_point.emplace_back(0);\r\n\r\n    unsigned long CurLength = 0;\r\n    for (size_t i = 0; i + _slicer.WindowLength < input.size(); i += _slicer.HopSize)\r\n    {\r\n\r\n        if (slice_tag)\r\n        {\r\n            const auto vol = abs(getAvg(input.data() + i, input.data() + i + _slicer.WindowLength));\r\n            if (vol < _slicer.Threshold)\r\n            {\r\n                slice_tag = false;\r\n                if (CurLength > _slicer.MinLength * _slicer.SamplingRate)\r\n                {\r\n                    CurLength = 0;\r\n                    slice_point.emplace_back(i + (_slicer.WindowLength / 2));\r\n                }\r\n            }\r\n            else\r\n                slice_tag = true;\r\n        }\r\n        else\r\n        {\r\n            const auto vol = abs(getAvg(input.data() + i, input.data() + i + _slicer.WindowLength));\r\n            if (vol < _slicer.Threshold)\r\n                slice_tag = false;\r\n            else\r\n            {\r\n                slice_tag = true;\r\n                if (CurLength > _slicer.MinLength * _slicer.SamplingRate)\r\n                {\r\n                    CurLength = 0;\r\n                    slice_point.emplace_back(i + (_slicer.WindowLength / 2));\r\n                }\r\n            }\r\n        }\r\n        CurLength += _slicer.HopSize;\r\n    }\r\n    slice_point.push_back(input.size());\r\n    return slice_point;\r\n}\r\n\r\nstd::vector<double> InferTools::arange(double start, double end, double step, double div)\r\n{\r\n    std::vector<double> output;\r\n    while (start < end)\r\n    {\r\n        output.push_back(start / div);\r\n        start += step;\r\n    }\r\n    return output;\r\n}\r\n\r\nstd::vector<float> InferTools::mean_filter(const std::vector<float>& vec, size_t window_size)\r\n{\r\n    std::vector<float> result;\r\n\r\n    if (window_size > vec.size() || window_size < 2)\r\n        return vec;\r\n\r\n    const size_t half = window_size / 2; // 窗口半径，向下取整\r\n\r\n    for (size_t i = half; i < vec.size() - half; i++) {\r\n        float sum = 0.0f;\r\n        for (size_t j = i - half; j <= i + half; j++) {\r\n            sum += vec[j];\r\n        }\r\n        result.push_back(sum / (float)(window_size % 2 ? window_size : window_size + 1));\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\n#ifdef MoeVoiceStudioAvxAcc\r\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator+=(const FloatTensorWrapper& _right)\r\n{\r\n    if (_data_size != _right._data_size)\r\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\r\n    const size_t num_avx2_elements = _data_size / 8;\r\n    for (size_t i = 0; i < num_avx2_elements; i++) {\r\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\r\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\r\n        const __m256 result_avx2 = _mm256_add_ps(a_avx2, b_avx2);\r\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\r\n    }\r\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\r\n        _data_ptr[i] += _right[i];\r\n    return *this;\r\n}\r\n\r\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator-=(const FloatTensorWrapper& _right)\r\n{\r\n    if (_data_size != _right._data_size)\r\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\r\n    const size_t num_avx2_elements = _data_size / 8;\r\n    for (size_t i = 0; i < num_avx2_elements; i++) {\r\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\r\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\r\n        const __m256 result_avx2 = _mm256_sub_ps(a_avx2, b_avx2);\r\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\r\n    }\r\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\r\n        _data_ptr[i] -= _right[i];\r\n    return *this;\r\n}\r\n\r\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator*=(const FloatTensorWrapper& _right)\r\n{\r\n    if (_data_size != _right._data_size)\r\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\r\n    const size_t num_avx2_elements = _data_size / 8;\r\n    for (size_t i = 0; i < num_avx2_elements; i++) {\r\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\r\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\r\n        const __m256 result_avx2 = _mm256_mul_ps(a_avx2, b_avx2);\r\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\r\n    }\r\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\r\n        _data_ptr[i] *= _right[i];\r\n    return *this;\r\n}\r\n\r\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator/=(const FloatTensorWrapper& _right)\r\n{\r\n    if (_data_size != _right._data_size)\r\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\r\n    const size_t num_avx2_elements = _data_size / 8;\r\n    for (size_t i = 0; i < num_avx2_elements; i++) {\r\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\r\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\r\n        const __m256 result_avx2 = _mm256_div_ps(a_avx2, b_avx2);\r\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\r\n    }\r\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\r\n        _data_ptr[i] /= _right[i];\r\n    return *this;\r\n}\r\n\r\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator+=(float _right)\r\n{\r\n    const size_t num_avx2_elements = _data_size / 8;\r\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\r\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\r\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\r\n        const __m256 result_avx2 = _mm256_add_ps(vec_avx2, value_avx2);\r\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\r\n    }\r\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\r\n        _data_ptr[i] += _right;\r\n    return *this;\r\n}\r\n\r\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator-=(float _right)\r\n{\r\n    const size_t num_avx2_elements = _data_size / 8;\r\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\r\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\r\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\r\n        const __m256 result_avx2 = _mm256_sub_ps(vec_avx2, value_avx2);\r\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\r\n    }\r\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\r\n        _data_ptr[i] -= _right;\r\n    return *this;\r\n}\r\n\r\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator*=(float _right)\r\n{\r\n    const size_t num_avx2_elements = _data_size / 8;\r\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\r\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\r\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\r\n        const __m256 result_avx2 = _mm256_mul_ps(vec_avx2, value_avx2);\r\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\r\n    }\r\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\r\n        _data_ptr[i] *= _right;\r\n    return *this;\r\n}\r\n\r\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator/=(float _right)\r\n{\r\n    const size_t num_avx2_elements = _data_size / 8;\r\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\r\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\r\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\r\n        const __m256 result_avx2 = _mm256_div_ps(vec_avx2, value_avx2);\r\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\r\n    }\r\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\r\n        _data_ptr[i] /= _right;\r\n    return *this;\r\n}\r\n#endif"
  },
  {
    "path": "libsvc/Modules/src/Logger/MoeSSLogger.cpp",
    "content": "﻿#include \"../../header/Logger/MoeSSLogger.hpp\"\r\n#include <iostream>\r\n#include \"../../header/StringPreprocess.hpp\"\r\n#include <windows.h>\r\n\r\nnamespace MoeSSLogger\r\n{\r\n\tLogger MoeVsLogger;\r\n\r\n\tinline std::wstring GetCurrentFolder(const std::wstring& defualt = L\"\")\r\n\t{\r\n\t\twchar_t path[1024];\r\n#ifdef _WIN32\r\n\t\tGetModuleFileName(nullptr, path, 1024);\r\n\t\tstd::wstring _curPath = path;\r\n\t\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\r\n\t\treturn _curPath;\r\n#else\r\n\t\t//TODO Other System\r\n#error Other System ToDO\r\n#endif\r\n\t}\r\n\r\n\tvoid RemoveDir(const std::filesystem::directory_entry& dir)\r\n\t{\r\n\t\tif (!dir.exists())\r\n\t\t\treturn;\r\n\t\tif (dir.is_directory() && !is_empty(dir))\r\n\t\t{\r\n\t\t\tconst std::filesystem::directory_iterator dirs(dir);\r\n\t\t\tfor (const auto& i : dirs)\r\n\t\t\t\tRemoveDir(i);\r\n\t\t}\r\n\t\tremove(dir);\r\n\t}\r\n\r\n\tLogger::~Logger()\r\n\t{\r\n\t\tif (log_file)\r\n\t\t\tfclose(log_file);\r\n\t\tif (error_file)\r\n\t\t\tfclose(error_file);\r\n\t\tlog_file = nullptr;\r\n\t\terror_file = nullptr;\r\n\t}\r\n\r\n\tLogger::Logger()\r\n\t{\r\n\t\tconst std::wstring LogPath = GetCurrentFolder() + L\"/log\";\r\n\t\tconst std::filesystem::path logger_path(LogPath);\r\n\t\tif (!exists(logger_path))\r\n\t\t\tcreate_directory(logger_path);\r\n\t\tconst std::filesystem::directory_entry logger_path_entry(LogPath);\r\n\t\tif (logger_path_entry.is_directory())\r\n\t\t{\r\n\t\t\ttime_t curtime;\r\n\t\t\ttime(&curtime);\r\n\t\t\ttm nowtime{ 0, 0, 0, 0, 0, 0, 0, 0, 0 };\r\n\t\t\tlocaltime_s(&nowtime, &curtime);\r\n\t\t\tconst std::wstring dir_name = L\"libsvc \" +\r\n\t\t\t\tstd::to_wstring(nowtime.tm_year + 1900) + L'-' +\r\n\t\t\t\tstd::to_wstring(nowtime.tm_mon) + L'-' +\r\n\t\t\t\tstd::to_wstring(nowtime.tm_mday) + L'-' +\r\n\t\t\t\tstd::to_wstring(nowtime.tm_hour) + L'-' +\r\n\t\t\t\tstd::to_wstring(nowtime.tm_min) + L'-' +\r\n\t\t\t\tstd::to_wstring(nowtime.tm_sec);\r\n\t\t\tcur_log_dir = LogPath + L'/' + dir_name;\r\n\t\t\tconst std::filesystem::directory_iterator logger_path_list(LogPath);\r\n\t\t\tstd::filesystem::directory_entry remove_dir;\r\n\t\t\tsize_t log_count = 0;\r\n\t\t\tfor (const auto& i : logger_path_list)\r\n\t\t\t\tif (i.is_directory() && i.path().filename().wstring().substr(0, 6) == L\"libsvc\")\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!log_count || i.last_write_time() < remove_dir.last_write_time())\r\n\t\t\t\t\t\tremove_dir = i;\r\n\t\t\t\t\t++log_count;\r\n\t\t\t\t}\r\n\t\t\tif (log_count > 10)\r\n\t\t\t\tRemoveDir(remove_dir);\r\n\t\t\tif (!exists(cur_log_dir))\r\n\t\t\t\tcreate_directory(cur_log_dir);\r\n\t\t\tlogpath = cur_log_dir;\r\n\t\t\tlogpath.append(\"log.txt\");\r\n\t\t\terrorpath = cur_log_dir;\r\n\t\t\terrorpath.append(\"error.txt\");\r\n\t\t}\r\n\t}\r\n\r\n\tLogger::Logger(logger_fn error_fn, logger_fn log_fn)\r\n\t{\r\n\t\tcustom_logger_fn = true;\r\n\t\tcerror_fn = error_fn;\r\n\t\tcloggerfn = log_fn;\r\n\t}\r\n\r\n\tvoid Logger::log(const std::wstring& format)\r\n\t{\r\n\t\tstd::lock_guard mtx(mx);\r\n\t\tif (custom_logger_fn)\r\n\t\t{\r\n\t\t\tcloggerfn(format.c_str(), nullptr);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (filelogger)\r\n\t\t{\r\n\t\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\r\n\t\t\tif (log_file)\r\n\t\t\t{\r\n\t\t\t\tfprintf_s(log_file, \"%s\\n\", to_byte_string(format).c_str());\r\n\t\t\t\tfclose(log_file);\r\n\t\t\t\tlog_file = nullptr;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\tfprintf_s(stdout, \"%s\\n\", to_byte_string(format).c_str());\r\n\t}\r\n\r\n\tvoid Logger::log(const char* format)\r\n\t{\r\n\t\tstd::lock_guard mtx(mx);\r\n\t\tif (custom_logger_fn)\r\n\t\t{\r\n\t\t\tcloggerfn(nullptr, format);\r\n\t\t\treturn;\r\n\t}\r\n\t\tif (filelogger)\r\n\t\t{\r\n\t\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\r\n\t\t\tif (log_file)\r\n\t\t\t{\r\n\t\t\t\tfprintf_s(log_file, \"%s\\n\", format);\r\n\t\t\t\tfclose(log_file);\r\n\t\t\t\tlog_file = nullptr;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\tfprintf_s(stdout, \"%s\\n\", format);\r\n}\r\n\r\n\tvoid Logger::error(const std::wstring& format)\r\n\t{\r\n\t\tstd::lock_guard mtx(mx);\r\n\t\tif (custom_logger_fn)\r\n\t\t{\r\n\t\t\tcloggerfn(format.c_str(), nullptr);\r\n\t\t\tcerror_fn(format.c_str(), nullptr);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (filelogger)\r\n\t\t{\r\n\t\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\r\n\t\t\t_wfopen_s(&error_file, errorpath.c_str(), L\"a+\");\r\n\t\t\tif (log_file)\r\n\t\t\t{\r\n\t\t\t\tfprintf(log_file, \"[ERROR]%s\\n\", to_byte_string(format).c_str());\r\n\t\t\t\tfclose(log_file);\r\n\t\t\t\tlog_file = nullptr;\r\n\t\t\t}\r\n\t\t\tif (error_file)\r\n\t\t\t{\r\n\t\t\t\tfprintf(error_file, \"[ERROR]%s\\n\", to_byte_string(format).c_str());\r\n\t\t\t\tfclose(error_file);\r\n\t\t\t\terror_file = nullptr;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\tfprintf(stdout, \"[ERROR]%s\\n\", to_byte_string(format).c_str());\r\n\t}\r\n\r\n\tvoid Logger::error(const char* format)\r\n\t{\r\n\t\tstd::lock_guard mtx(mx);\r\n\t\tif (custom_logger_fn)\r\n\t\t{\r\n\t\t\tcloggerfn(nullptr, format);\r\n\t\t\tcerror_fn(nullptr, format);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (filelogger)\r\n\t\t{\r\n\t\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\r\n\t\t\t_wfopen_s(&error_file, errorpath.c_str(), L\"a+\");\r\n\t\t\tif (log_file)\r\n\t\t\t{\r\n\t\t\t\tfprintf(log_file, \"[ERROR]%s\\n\", format);\r\n\t\t\t\tfclose(log_file);\r\n\t\t\t\tlog_file = nullptr;\r\n\t\t\t}\r\n\t\t\tif (error_file)\r\n\t\t\t{\r\n\t\t\t\tfprintf(error_file, \"[ERROR]%s\\n\", format);\r\n\t\t\t\tfclose(error_file);\r\n\t\t\t\terror_file = nullptr;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\tfprintf(stdout, \"[ERROR]%s\\n\", format);\r\n\t}\r\n\r\n\tLogger& GetLogger()\r\n\t{\r\n\t\treturn MoeVsLogger;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "libsvc/Modules/src/Models/DiffSvc.cpp",
    "content": "﻿#include \"../../header/Models/DiffSvc.hpp\"\r\n#include <random>\r\n#include \"../../header/InferTools/AvCodec/AvCodeResample.h\"\r\n#include <regex>\r\n#include \"../../header/InferTools/Sampler/MoeVSSamplerManager.hpp\"\r\n#include \"../../header/InferTools/F0Extractor/F0ExtractorManager.hpp\"\r\n#include \"../../header/Models/EnvManager.hpp\"\r\n\r\nMoeVoiceStudioCoreHeader\r\n\r\nOrt::Session* GlobalVocoder = nullptr;\r\n\r\nvoid LoadVocoderModel(const std::wstring& VocoderPath)\r\n{\r\n\tGlobalVocoder = new Ort::Session(*moevsenv::GetGlobalMoeVSEnv().GetEnv(), VocoderPath.c_str(), *moevsenv::GetGlobalMoeVSEnv().GetSessionOptions());\r\n}\r\n\r\nvoid UnLoadVocoderModel()\r\n{\r\n\tdelete GlobalVocoder;\r\n\tGlobalVocoder = nullptr;\r\n}\r\n\r\nbool VocoderEnabled()\r\n{\r\n\treturn GlobalVocoder;\r\n}\r\n\r\nOrt::Session* GetCurrentVocoder()\r\n{\r\n\treturn GlobalVocoder;\r\n}\r\n\r\nvoid DiffusionSvc::Destory()\r\n{\r\n\t//AudioEncoder\r\n\tdelete hubert;\r\n\thubert = nullptr;\r\n\r\n\t//DiffusionModel\r\n\tdelete encoder;      //Encoder\r\n\tencoder = nullptr;\r\n\tdelete denoise;      //WaveNet\r\n\tdenoise = nullptr;\r\n\tdelete pred;         //PndmNoisePredictor\r\n\tpred = nullptr;\r\n\tdelete after;        //AfterProcess\r\n\tafter = nullptr;\r\n\tdelete alpha;        //AlphasCumpord\r\n\talpha = nullptr;\r\n\tdelete naive;        //NaiveShallowDiffusion\r\n\tnaive = nullptr;\r\n\r\n\t//SingleDiffusionModel\r\n\tdelete diffSvc;\r\n\tdiffSvc = nullptr;\r\n}\r\n\r\nDiffusionSvc::~DiffusionSvc()\r\n{\r\n\tlogger.log(L\"[Info] unloading DiffSvc Models\");\r\n\tDestory();\r\n\tlogger.log(L\"[Info] DiffSvc Models unloaded\");\r\n}\r\n\r\nDiffusionSvc::DiffusionSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\r\n\tExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_):\r\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\r\n{\r\n\tMoeVSClassName(L\"MoeVoiceStudioDiffSingingVoiceConversion\");\r\n\r\n\t//Check Folder\r\n\tif (_Config[\"Folder\"].IsNull())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"folder\\\" (Model Folder)\")\r\n\tif (!_Config[\"Folder\"].IsString())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Must Be String\")\r\n\tconst auto _folder = to_wide_string(_Config[\"Folder\"].GetString());\r\n\tif (_folder.empty())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Can Not Be Empty\")\r\n\tconst std::wstring _path = GetCurrentFolder() + L\"/Models/\" + _folder + L\"/\" + _folder;\r\n\tconst auto cluster_folder = GetCurrentFolder() + L\"/Models/\" + _folder;\r\n\tif (_Config[\"Hubert\"].IsNull())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Hubert\\\" (Hubert Folder)\")\r\n\tif (!_Config[\"Hubert\"].IsString())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Must Be String\")\r\n\tconst std::wstring HuPath = to_wide_string(_Config[\"Hubert\"].GetString());\r\n\tif (HuPath.empty())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Can Not Be Empty\")\r\n\r\n\tstd::map<std::string, std::wstring> _PathDict;\r\n\t_PathDict[\"Cluster\"] = cluster_folder;\r\n\t_PathDict[\"DiffHubert\"] = GetCurrentFolder() + L\"/hubert/\" + HuPath + L\".onnx\";\r\n\tif(_waccess((_path + L\"_encoder.onnx\").c_str(), 0) != -1)\r\n\t{\r\n\t\t_PathDict[\"Encoder\"] = _path + L\"_encoder.onnx\";\r\n\t\t_PathDict[\"DenoiseFn\"] = _path + L\"_denoise.onnx\";\r\n\t\t_PathDict[\"NoisePredictor\"] = _path + L\"_pred.onnx\";\r\n\t\t_PathDict[\"AfterProcess\"] = _path + L\"_after.onnx\";\r\n\t\tif (_waccess((_path + L\"_alpha.onnx\").c_str(), 0) != -1)\r\n\t\t\t_PathDict[\"Alphas\"] = _path + L\"_alpha.onnx\";\r\n\t}\r\n\telse\r\n\t\t_PathDict[\"DiffSvc\"] = _path + L\"_DiffSvc.onnx\";\r\n\t\r\n\tif (_waccess((_path + L\"_naive.onnx\").c_str(), 0) != -1)\r\n\t\t_PathDict[\"Naive\"] = _path + L\"_naive.onnx\";\r\n\r\n\tlogger.log(\"[Model Loader] Prepeocess Complete!\");\r\n\tload(_PathDict, _Config, _ProgressCallback);\r\n}\r\n\r\nDiffusionSvc::DiffusionSvc(const std::map<std::string, std::wstring>& _PathDict,\r\n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\r\n\tExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) :\r\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\r\n{\r\n\tMoeVSClassName(L\"MoeVoiceStudioDiffSingingVoiceConversion\");\r\n\r\n\tload(_PathDict, _Config, _ProgressCallback);\r\n}\r\n\r\nDiffusionSvc::DiffusionSvc(const Hparams& _Hps, const ProgressCallback& _ProgressCallback, ExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) : \r\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\r\n{\r\n\tMoeVSClassName(L\"MoeVoiceStudioDiffSingingVoiceConversion\");\r\n\r\n\t_samplingRate = max(_Hps.SamplingRate, 2000);\r\n\tmelBins = max(_Hps.MelBins, 1);\r\n\tHopSize = max(_Hps.HopSize, 1);\r\n\tHiddenUnitKDims = max(_Hps.HiddenUnitKDims, 1);\r\n\tSpeakerCount = max(_Hps.SpeakerCount, 1);\r\n\tEnableVolume = _Hps.EnableVolume;\r\n\tEnableCharaMix = _Hps.EnableCharaMix;\r\n\tDiffSvcVersion = _Hps.TensorExtractor;\r\n\tPndms = max(_Hps.Pndms, 1);\r\n\tSpecMax = _Hps.SpecMax;\r\n\tSpecMin = _Hps.SpecMin;\r\n\tMaxStep = max(_Hps.MaxStep, 1);\r\n\r\n\t_callback = _ProgressCallback;\r\n\r\n\tif (!_Hps.Cluster.Type.empty())\r\n\t{\r\n\t\tClusterCenterSize = _Hps.Cluster.ClusterCenterSize;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tCluster = MoeVoiceStudioCluster::GetMoeVSCluster(_Hps.Cluster.Type, _Hps.Cluster.Path, HiddenUnitKDims, ClusterCenterSize);\r\n\t\t\tEnableCluster = true;\r\n\t\t}\r\n\t\tcatch (std::exception& e)\r\n\t\t{\r\n\t\t\tlogger.error(e.what());\r\n\t\t\tEnableCluster = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//LoadModels\r\n\ttry\r\n\t{\r\n\t\tlogger.log(L\"[Info] loading DiffSvc Models\");\r\n\t\thubert = new Ort::Session(*env, _Hps.HubertPath.c_str(), *session_options);\r\n\t\tif (!_Hps.DiffusionSvc.Encoder.empty())\r\n\t\t{\r\n\t\t\tencoder = new Ort::Session(*env, _Hps.DiffusionSvc.Encoder.c_str(), *session_options);\r\n\t\t\tdenoise = new Ort::Session(*env, _Hps.DiffusionSvc.Denoise.c_str(), *session_options);\r\n\t\t\tpred = new Ort::Session(*env, _Hps.DiffusionSvc.Pred.c_str(), *session_options);\r\n\t\t\tafter = new Ort::Session(*env, _Hps.DiffusionSvc.After.c_str(), *session_options);\r\n\t\t\tif (!_Hps.DiffusionSvc.Alpha.empty())\r\n\t\t\t\talpha = new Ort::Session(*env, _Hps.DiffusionSvc.Alpha.c_str(), *session_options);\r\n\t\t}\r\n\t\telse\r\n\t\t\tdiffSvc = new Ort::Session(*env, _Hps.DiffusionSvc.DiffSvc.c_str(), *session_options);\r\n\r\n\t\tif (!_Hps.DiffusionSvc.Naive.empty())\r\n\t\t\tnaive = new Ort::Session(*env, _Hps.DiffusionSvc.Naive.c_str(), *session_options);\r\n\r\n\t\tlogger.log(L\"[Info] DiffSvc Models loaded\");\r\n\t}\r\n\tcatch (Ort::Exception& _exception)\r\n\t{\r\n\t\tDestory();\r\n\t\tLibDLVoiceCodecThrow(_exception.what())\r\n\t}\r\n\r\n\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others _others_param;\r\n\t_others_param.Memory = *memory_info;\r\n\r\n\ttry\r\n\t{\r\n\t\t_TensorExtractor = GetTensorExtractor(DiffSvcVersion, 48000, _samplingRate, HopSize, EnableCharaMix, EnableVolume, HiddenUnitKDims, SpeakerCount, _others_param);\r\n\t}\r\n\tcatch (std::exception& e)\r\n\t{\r\n\t\tDestory();\r\n\t\tLibDLVoiceCodecThrow(e.what())\r\n\t}\r\n}\r\n\r\nvoid DiffusionSvc::load(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback)\r\n{\r\n\t//Check SamplingRate\r\n\tif (_Config[\"Rate\"].IsNull())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Rate\\\" (SamplingRate)\")\r\n\tif (_Config[\"Rate\"].IsInt() || _Config[\"Rate\"].IsInt64())\r\n\t\t_samplingRate = _Config[\"Rate\"].GetInt();\r\n\telse\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Rate\\\" (SamplingRate) Must Be Int/Int64\")\r\n\r\n\tlogger.log(L\"[Info] Current Sampling Rate is\" + std::to_wstring(_samplingRate));\r\n\r\n\tif (_Config[\"MelBins\"].IsNull())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"MelBins\\\" (MelBins)\")\r\n\tif (_Config[\"MelBins\"].IsInt() || _Config[\"MelBins\"].IsInt64())\r\n\t\tmelBins = _Config[\"MelBins\"].GetInt();\r\n\telse\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"MelBins\\\" (MelBins) Must Be Int/Int64\")\r\n\r\n\tif (!(_Config[\"Hop\"].IsInt() || _Config[\"Hop\"].IsInt64()))\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must Be Int\")\r\n\tHopSize = _Config[\"Hop\"].GetInt();\r\n\r\n\tif (HopSize < 1)\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must > 0\")\r\n\r\n\tif (!(_Config[\"HiddenSize\"].IsInt() || _Config[\"HiddenSize\"].IsInt64()))\r\n\t\tlogger.log(L\"[Warn] Missing Field \\\"HiddenSize\\\", Use Default Value (256)\");\r\n\telse\r\n\t\tHiddenUnitKDims = _Config[\"HiddenSize\"].GetInt();\r\n\r\n\tif (_Config[\"Characters\"].IsArray())\r\n\t\tSpeakerCount = (int64_t)_Config[\"Characters\"].Size();\r\n\r\n\tif (_Config[\"Volume\"].IsBool())\r\n\t\tEnableVolume = _Config[\"Volume\"].GetBool();\r\n\telse\r\n\t\tlogger.log(L\"[Warn] Missing Field \\\"Volume\\\", Use Default Value (False)\");\r\n\r\n\tif (!_Config[\"CharaMix\"].IsBool())\r\n\t\tlogger.log(L\"[Warn] Missing Field \\\"CharaMix\\\", Use Default Value (False)\");\r\n\telse\r\n\t\tEnableCharaMix = _Config[\"CharaMix\"].GetBool();\r\n\r\n\tif (!_Config[\"Diffusion\"].IsBool())\r\n\t\tlogger.log(L\"[Warn] Missing Field \\\"Diffusion\\\", Use Default Value (False)\");\r\n\telse if (_Config[\"Diffusion\"].GetBool())\r\n\t\tDiffSvcVersion = L\"DiffusionSvc\";\r\n\r\n\tif (_Config[\"Pndm\"].IsInt())\r\n\t\tPndms = _Config[\"Pndm\"].GetInt();\r\n\r\n\tif (_Config.HasMember(\"SpecMax\") && _Config[\"SpecMax\"].IsDouble())\r\n\t\tSpecMax = _Config[\"SpecMax\"].GetFloat();\r\n\telse\r\n\t\tlogger.log(L\"[Warn] Missing Field \\\"SpecMax\\\", Use Default Value (2)\");\r\n\r\n\tif (_Config.HasMember(\"SpecMin\") && _Config[\"SpecMin\"].IsDouble())\r\n\t\tSpecMin = _Config[\"SpecMin\"].GetFloat();\r\n\telse\r\n\t\tlogger.log(L\"[Warn] Missing Field \\\"SpecMin\\\", Use Default Value (-12)\");\r\n\r\n\t_callback = _ProgressCallback;\r\n\r\n\tif (_Config[\"Cluster\"].IsString())\r\n\t{\r\n\t\tconst auto clus = to_wide_string(_Config[\"Cluster\"].GetString());\r\n\t\tif (!(_Config[\"KMeansLength\"].IsInt() || _Config[\"KMeansLength\"].IsInt64()))\r\n\t\t\tlogger.log(L\"[Warn] Missing Field \\\"KMeansLength\\\", Use Default Value (10000)\");\r\n\t\telse\r\n\t\t\tClusterCenterSize = _Config[\"KMeansLength\"].GetInt();\r\n\t\ttry\r\n\t\t{\r\n\t\t\tCluster = MoeVoiceStudioCluster::GetMoeVSCluster(clus, _PathDict.at(\"Cluster\"), HiddenUnitKDims, ClusterCenterSize);\r\n\t\t\tEnableCluster = true;\r\n\t\t}\r\n\t\tcatch (std::exception& e)\r\n\t\t{\r\n\t\t\tlogger.error(e.what());\r\n\t\t\tEnableCluster = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//LoadModels\r\n\ttry\r\n\t{\r\n\t\tlogger.log(L\"[Info] loading DiffSvc Models\");\r\n\t\thubert = new Ort::Session(*env, _PathDict.at(\"DiffHubert\").c_str(), *session_options);\r\n\t\tif (_PathDict.find(\"Encoder\")!= _PathDict.end() && _waccess(_PathDict.at(\"Encoder\").c_str(), 0) != -1)\r\n\t\t{\r\n\t\t\tencoder = new Ort::Session(*env, _PathDict.at(\"Encoder\").c_str(), *session_options);\r\n\t\t\tdenoise = new Ort::Session(*env, _PathDict.at(\"DenoiseFn\").c_str(), *session_options);\r\n\t\t\tpred = new Ort::Session(*env, _PathDict.at(\"NoisePredictor\").c_str(), *session_options);\r\n\t\t\tafter = new Ort::Session(*env, _PathDict.at(\"AfterProcess\").c_str(), *session_options);\r\n\t\t\tif (_PathDict.find(\"Alphas\") != _PathDict.end() && _waccess(_PathDict.at(\"Alphas\").c_str(), 0) != -1)\r\n\t\t\t\talpha = new Ort::Session(*env, _PathDict.at(\"Alphas\").c_str(), *session_options);\r\n\t\t}\r\n\t\telse\r\n\t\t\tdiffSvc = new Ort::Session(*env, _PathDict.at(\"DiffSvc\").c_str(), *session_options);\r\n\r\n\t\tif (_PathDict.find(\"Naive\") != _PathDict.end() && _waccess(_PathDict.at(\"Naive\").c_str(), 0) != -1)\r\n\t\t\tnaive = new Ort::Session(*env, _PathDict.at(\"Naive\").c_str(), *session_options);\r\n\r\n\t\tlogger.log(L\"[Info] DiffSvc Models loaded\");\r\n\t}\r\n\tcatch (Ort::Exception& _exception)\r\n\t{\r\n\t\tDestory();\r\n\t\tLibDLVoiceCodecThrow(_exception.what())\r\n\t}\r\n\r\n\tif (_Config[\"TensorExtractor\"].IsString())\r\n\t\tDiffSvcVersion = to_wide_string(_Config[\"TensorExtractor\"].GetString());\r\n\r\n\tif (_Config[\"MaxStep\"].IsInt())\r\n\t\tMaxStep = _Config[\"MaxStep\"].GetInt();\r\n\r\n\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others _others_param;\r\n\t_others_param.Memory = *memory_info;\r\n\r\n\ttry\r\n\t{\r\n\t\t_TensorExtractor = GetTensorExtractor(DiffSvcVersion, 48000, _samplingRate, HopSize, EnableCharaMix, EnableVolume, HiddenUnitKDims, SpeakerCount, _others_param);\r\n\t}\r\n\tcatch (std::exception& e)\r\n\t{\r\n\t\tDestory();\r\n\t\tLibDLVoiceCodecThrow(e.what())\r\n\t}\r\n}\r\n\r\nstd::vector<int16_t> DiffusionSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\r\n{\r\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\r\n\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Start!\");\r\n\tstd::vector<int16_t> _data;\r\n\tsize_t total_audio_size = 0;\r\n\tfor (const auto& data_size : _Slice.Slices)\r\n\t\ttotal_audio_size += data_size.OrgLen;\r\n\t_data.reserve(size_t(double(total_audio_size) * 1.5));\r\n\r\n\tauto speedup = (int64_t)_InferParams.Pndm;\r\n\tauto step = (int64_t)_InferParams.Step;\r\n\tif (step > MaxStep) step = MaxStep;\r\n\tif (speedup >= step) speedup = step / 5;\r\n\tif (speedup == 0) speedup = 1;\r\n\tconst auto RealDiffSteps = step % speedup ? step / speedup + 1 : step / speedup;\r\n\r\n\tif (diffSvc)\r\n\t\t_callback(0, _Slice.Slices.size());\r\n\telse\r\n\t\t_callback(0, _Slice.Slices.size() * RealDiffSteps);\r\n\tsize_t process = 0;\r\n\tfor (const auto& CurSlice : _Slice.Slices)\r\n\t{\r\n\t\tconst auto InferDurTime = clock();\r\n\t\tconst auto CurRtn = SliceInference(CurSlice, _InferParams, process);\r\n\t\t_data.insert(_data.end(), CurRtn.data(), CurRtn.data() + CurRtn.size());\r\n\t\tif (CurSlice.IsNotMute)\r\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Segment[\" + std::to_wstring(process) + L\"] Finished! Segment Use Time: \" + std::to_wstring(clock() - InferDurTime) + L\"ms, Segment Duration: \" + std::to_wstring((size_t)CurSlice.OrgLen * 1000ull / _InferParams.SrcSamplingRate) + L\"ms\");\r\n\t\telse\r\n\t\t{\r\n\t\t\tif (!diffSvc)\r\n\t\t\t{\r\n\t\t\t\tprocess += RealDiffSteps;\r\n\t\t\t\t_callback(process, _Slice.Slices.size() * RealDiffSteps);\r\n\t\t\t}\r\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Jump Empty Segment[\" + std::to_wstring(process) + L\"]!\");\r\n\t\t}\r\n\t\tif (diffSvc)\r\n\t\t\t_callback(++process, _Slice.Slices.size());\r\n\t}\r\n\r\n\tlogger.log(L\"[Inferring] \\\"\" + _Slice.Path + L\"\\\" Finished\");\r\n\treturn _data;\r\n}\r\n\r\nstd::vector<int16_t> DiffusionSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const\r\n{\r\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\r\n\tstd::mt19937 gen(int(_InferParams.Seed));\r\n\tstd::normal_distribution<float> normal(0, 1);\r\n\tauto speedup = (int64_t)_InferParams.Pndm;\r\n\tauto step = (int64_t)_InferParams.Step;\r\n\tif (step > MaxStep) step = MaxStep;\r\n\tif (speedup >= step) speedup = step / 5;\r\n\tif (speedup == 0) speedup = 1;\r\n\r\n\tif (_Slice.IsNotMute)\r\n\t{\r\n\t\tauto RawWav = InferTools::InterpResample(_Slice.Audio, (int)(_InferParams.SrcSamplingRate), 16000, 32768.0f);\r\n\t\tconst auto src_audio_length = RawWav.size();\r\n\t\tbool NeedPadding = false;\r\n\t\tif (_cur_execution_provider == ExecutionProviders::CUDA && !diffSvc)\r\n\t\t{\r\n\t\t\tNeedPadding = RawWav.size() % 16000;\r\n\t\t\tconst size_t WavPaddedSize = RawWav.size() / 16000 + 1;\r\n\t\t\tif (NeedPadding)\r\n\t\t\t\tRawWav.resize(WavPaddedSize * 16000, 0.f);\r\n\t\t}\r\n\r\n\t\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)RawWav.size() };\r\n\t\tstd::vector<Ort::Value> HubertInputTensors, HubertOutPuts;\r\n\t\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RawWav.data(), RawWav.size(), HubertInputShape, 3));\r\n\t\ttry {\r\n\t\t\tHubertOutPuts = hubert->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\thubertInput.data(),\r\n\t\t\t\tHubertInputTensors.data(),\r\n\t\t\t\tHubertInputTensors.size(),\r\n\t\t\t\thubertOutput.data(),\r\n\t\t\t\thubertOutput.size());\r\n\t\t}\r\n\t\tcatch (Ort::Exception& e)\r\n\t\t{\r\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\r\n\t\t}\r\n\t\tconst auto HubertSize = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\t\tconst auto HubertOutPutData = HubertOutPuts[0].GetTensorMutableData<float>();\r\n\t\tauto HubertOutPutShape = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetShape();\r\n\t\tHubertInputTensors.clear();\r\n\t\tif (HubertOutPutShape[2] != HiddenUnitKDims)\r\n\t\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\r\n\r\n\t\tstd::vector srcHiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\r\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\r\n\t\tif (SpeakerIdx >= SpeakerCount)\r\n\t\t\tSpeakerIdx = SpeakerCount;\r\n\t\tif (SpeakerIdx < 0)\r\n\t\t\tSpeakerIdx = 0;\r\n\r\n\t\tconst auto max_cluster_size = int64_t((size_t)HubertOutPutShape[1] * src_audio_length / RawWav.size());\r\n\t\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\r\n\t\t{\r\n\t\t\tconst auto pts = Cluster->find(srcHiddenUnits.data(), long(SpeakerIdx), max_cluster_size);\r\n\t\t\tfor (int64_t indexs = 0; indexs < max_cluster_size * HiddenUnitKDims; ++indexs)\r\n\t\t\t\tsrcHiddenUnits[indexs] = srcHiddenUnits[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\r\n\t\t}\r\n\t\tstd::vector<Ort::Value> finaOut;\r\n\t\tstd::vector<Ort::Value> DiffOut;\r\n\t\tif (diffSvc)\r\n\t\t{\r\n\t\t\tconst auto HubertLen = int64_t(HubertSize) / HiddenUnitKDims;\r\n\t\t\tconst int64_t F0Shape[] = { 1, int64_t(_Slice.Audio.size() * _samplingRate / (int)(_InferParams.SrcSamplingRate) / HopSize) };\r\n\t\t\tconst int64_t HiddenUnitShape[] = { 1, HubertLen, HiddenUnitKDims };\r\n\t\t\tconstexpr int64_t CharaEmbShape[] = { 1 };\r\n\t\t\tint64_t speedData[] = { Pndms };\r\n\t\t\tauto srcF0Data = InferTools::InterpFunc(_Slice.F0, long(_Slice.F0.size()), long(F0Shape[1]));\r\n\t\t\tfor (auto& it : srcF0Data)\r\n\t\t\t\tit *= (float)pow(2.0, static_cast<double>(_InferParams.Keys) / 12.0);\r\n\t\t\tauto InterpedF0 = MoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::GetInterpedF0log(srcF0Data, true);\r\n\t\t\tauto alignment = MoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::GetAligments(F0Shape[1], HubertLen);\r\n\t\t\tstd::vector<Ort::Value> TensorsInp;\r\n\r\n\t\t\tint64_t Chara[] = { SpeakerIdx };\r\n\r\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor(*memory_info, srcHiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\r\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor(*memory_info, alignment.data(), F0Shape[1], F0Shape, 2));\r\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Chara, 1, CharaEmbShape, 1));\r\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), F0Shape[1], F0Shape, 2));\r\n\r\n\t\t\tstd::vector<float> initial_noise(melBins * F0Shape[1], 0.0);\r\n\t\t\tlong long noise_shape[4] = { 1,1,melBins,F0Shape[1] };\r\n\t\t\tif (!naive)\r\n\t\t\t{\r\n\t\t\t\tfor (auto& it : initial_noise)\r\n\t\t\t\t\tit = normal(gen) * _InferParams.NoiseScale;\r\n\t\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tMoeVSNotImplementedError\r\n\r\n\t\t\tTensorsInp.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, speedData, 1, CharaEmbShape, 1));\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tDiffOut = diffSvc->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\t\tDiffInput.data(),\r\n\t\t\t\t\tTensorsInp.data(),\r\n\t\t\t\t\tTensorsInp.size(),\r\n\t\t\t\t\tDiffOutput.data(),\r\n\t\t\t\t\tDiffOutput.size());\r\n\t\t\t}\r\n\t\t\tcatch (Ort::Exception& e2)\r\n\t\t\t{\r\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Diff\\n\") + e2.what()))\r\n\t\t\t}\r\n\t\t\tOrt::Session* Vocoder = GlobalVocoder;\r\n\t\t\tif (_InferParams._VocoderModel)\r\n\t\t\t\tVocoder = static_cast<Ort::Session*>(_InferParams._VocoderModel);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tfinaOut = Vocoder->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\t\tnsfInput.data(),\r\n\t\t\t\t\tDiffOut.data(),\r\n\t\t\t\t\tVocoder->GetInputCount(),\r\n\t\t\t\t\tnsfOutput.data(),\r\n\t\t\t\t\tnsfOutput.size());\r\n\t\t\t}\r\n\t\t\tcatch (Ort::Exception& e3)\r\n\t\t\t{\r\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::InferParams _Inference_Params;\r\n\t\t\t_Inference_Params.AudioSize = _Slice.Audio.size();\r\n\t\t\t_Inference_Params.Chara = SpeakerIdx;\r\n\t\t\t_Inference_Params.NoiseScale = _InferParams.NoiseScale;\r\n\t\t\t_Inference_Params.DDSPNoiseScale = _InferParams.DDSPNoiseScale;\r\n\t\t\t_Inference_Params.Seed = int(_InferParams.Seed);\r\n\t\t\t_Inference_Params.upKeys = _InferParams.Keys;\r\n\r\n\t\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Inputs InputTensors;\r\n\r\n\t\t\tif (_cur_execution_provider == ExecutionProviders::CUDA && NeedPadding)\r\n\t\t\t{\r\n\t\t\t\tauto CUDAF0 = _Slice.F0;\r\n\t\t\t\tauto CUDAVolume = _Slice.Volume;\r\n\t\t\t\tauto CUDASpeaker = _Slice.Speaker;\r\n\t\t\t\tconst auto src_src_audio_length = _Slice.Audio.size();\r\n\t\t\t\tconst size_t WavPaddedSize = ((src_src_audio_length / (int)(_InferParams.SrcSamplingRate)) + 1) * (int)(_InferParams.SrcSamplingRate);\r\n\t\t\t\tconst size_t AudioPadSize = WavPaddedSize - src_src_audio_length;\r\n\t\t\t\tconst size_t PaddedF0Size = CUDAF0.size() + (CUDAF0.size() * AudioPadSize / src_src_audio_length);\r\n\r\n\t\t\t\tif (!CUDAF0.empty()) CUDAF0.resize(PaddedF0Size, 0.f);\r\n\t\t\t\tif (!CUDAVolume.empty()) CUDAVolume.resize(PaddedF0Size, 0.f);\r\n\t\t\t\tfor (auto iSpeaker : CUDASpeaker)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!iSpeaker.empty())\r\n\t\t\t\t\t\tiSpeaker.resize(PaddedF0Size, 0.f);\r\n\t\t\t\t}\r\n\t\t\t\t_Inference_Params.AudioSize = WavPaddedSize;\r\n\t\t\t\tInputTensors = _TensorExtractor->Extract(srcHiddenUnits, CUDAF0, CUDAVolume, CUDASpeaker, _Inference_Params);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tInputTensors = _TensorExtractor->Extract(srcHiddenUnits, _Slice.F0, _Slice.Volume, _Slice.Speaker, _Inference_Params);\r\n\r\n\t\t\tstd::vector<Ort::Value> EncoderOut;\r\n\t\t\ttry {\r\n\t\t\t\tEncoderOut = encoder->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\t\tInputTensors.InputNames,\r\n\t\t\t\t\tInputTensors.Tensor.data(),\r\n\t\t\t\t\tmin(InputTensors.Tensor.size(), encoder->GetInputCount()),\r\n\t\t\t\t\tInputTensors.OutputNames,\r\n\t\t\t\t\tencoder->GetOutputCount());\r\n\t\t\t}\r\n\t\t\tcatch (Ort::Exception& e1)\r\n\t\t\t{\r\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: encoder\\n\") + e1.what()))\r\n\t\t\t}\r\n\t\t\tif (EncoderOut.size() == 1)\r\n\t\t\t\tEncoderOut.emplace_back(Ort::Value::CreateTensor(*memory_info, InputTensors.Data.F0.data(), InputTensors.Data.FrameShape[1], InputTensors.Data.FrameShape.data(), 2));\r\n\r\n\t\t\tstd::vector<Ort::Value> DenoiseInTensors;\r\n\t\t\tDenoiseInTensors.emplace_back(std::move(EncoderOut[0]));\r\n\r\n\t\t\tstd::vector<float> initial_noise(melBins * InputTensors.Data.FrameShape[1], 0.0);\r\n\t\t\tlong long noise_shape[4] = { 1,1,melBins,InputTensors.Data.FrameShape[1] };\r\n\t\t\tif (EncoderOut.size() == 3)\r\n\t\t\t\tDenoiseInTensors.emplace_back(std::move(EncoderOut[2]));\r\n\t\t\telse if (!naive)\r\n\t\t\t{\r\n\t\t\t\tfor (auto& it : initial_noise)\r\n\t\t\t\t\tit = normal(gen) * _InferParams.NoiseScale;\r\n\t\t\t\tDenoiseInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tstd::vector<Ort::Value> NaiveOut;\r\n\t\t\t\ttry {\r\n\t\t\t\t\tNaiveOut = naive->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\t\t\tInputTensors.InputNames,\r\n\t\t\t\t\t\tInputTensors.Tensor.data(),\r\n\t\t\t\t\t\tmin(InputTensors.Tensor.size(), naive->GetInputCount()),\r\n\t\t\t\t\t\tnaiveOutput.data(),\r\n\t\t\t\t\t\t1);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Ort::Exception& e1)\r\n\t\t\t\t{\r\n\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: naive\\n\") + e1.what()))\r\n\t\t\t\t}\r\n\t\t\t\tDenoiseInTensors.emplace_back(std::move(NaiveOut[0]));\r\n\t\t\t}\r\n\r\n\t\t\tauto PredOut = MoeVSSampler::GetMoeVSSampler((!alpha ? L\"Pndm\" : _InferParams.Sampler), alpha, denoise, pred, melBins, _callback, memory_info)->Sample(DenoiseInTensors, step, speedup, _InferParams.NoiseScale, _InferParams.Seed, _Process);\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tDiffOut = after->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\t\tafterInput.data(),\r\n\t\t\t\t\tPredOut.data(),\r\n\t\t\t\t\tPredOut.size(),\r\n\t\t\t\t\tafterOutput.data(),\r\n\t\t\t\t\tafterOutput.size());\r\n\t\t\t}\r\n\t\t\tcatch (Ort::Exception& e1)\r\n\t\t\t{\r\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()))\r\n\t\t\t}\r\n\t\t\tDiffOut.emplace_back(std::move(EncoderOut[1]));\r\n\t\t\tOrt::Session* Vocoder = GlobalVocoder;\r\n\t\t\tif (_InferParams._VocoderModel)\r\n\t\t\t\tVocoder = static_cast<Ort::Session*>(_InferParams._VocoderModel);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tfinaOut = Vocoder->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\t\tnsfInput.data(),\r\n\t\t\t\t\tDiffOut.data(),\r\n\t\t\t\t\tVocoder->GetInputCount(),\r\n\t\t\t\t\tnsfOutput.data(),\r\n\t\t\t\t\tnsfOutput.size());\r\n\t\t\t}\r\n\t\t\tcatch (Ort::Exception& e3)\r\n\t\t\t{\r\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tauto DiffOutputAudioSize = finaOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\t\tstd::vector<int16_t> DiffPCMOutput(DiffOutputAudioSize);\r\n\t\t{\r\n\t\t\tauto DiffOutputAudioData = finaOut[0].GetTensorData<float>();\r\n\t\t\tauto OutputAudioData = DiffPCMOutput.data();\r\n\t\t\tconst auto OutputAudioEnd = OutputAudioData + DiffPCMOutput.size();\r\n\t\t\twhile (OutputAudioData != OutputAudioEnd)\r\n\t\t\t\t*(OutputAudioData++) = (int16_t)(Clamp(*(DiffOutputAudioData++)) * 32766.f);\r\n\t\t}\r\n\t\tconst auto dstWavLen = (_Slice.OrgLen * int64_t(_samplingRate)) / (int)(_InferParams.SrcSamplingRate);\r\n\t\tDiffPCMOutput.resize(dstWavLen);\r\n\t\treturn DiffPCMOutput;\r\n\t}\r\n\tconst auto len = size_t(_Slice.OrgLen * int64_t(_samplingRate) / (int)(_InferParams.SrcSamplingRate));\r\n\treturn { len, 0i16, std::allocator<int16_t>() };\r\n}\r\n\r\nstd::vector<std::wstring> DiffusionSvc::Inference(std::wstring& _Paths,\r\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\r\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\r\n{\r\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\r\n\tstd::vector<std::wstring> _Lens = GetOpenFileNameMoeVS();\r\n\tstd::vector<std::wstring> AudioFolders;\r\n\tfor (auto& path : _Lens)\r\n\t{\r\n\t\tpath = std::regex_replace(path, std::wregex(L\"\\\\\\\\\"), L\"/\");\r\n\t\tauto PCMData = AudioPreprocess().codec(path, (int)(_InferParams.SrcSamplingRate));\r\n\t\tauto SlicePos = SliceAudio(PCMData, _SlicerSettings);\r\n\t\tauto Audio = GetAudioSlice(PCMData, SlicePos, _SlicerSettings);\r\n\t\tAudio.Path = path;\r\n\t\tPreProcessAudio(Audio);\r\n\t\tstd::vector<int16_t> _data = SliceInference(Audio, _InferParams);\r\n\r\n\t\tstd::wstring OutFolder = GetCurrentFolder() + L\"/Outputs/\" + path.substr(path.rfind(L'/') + 1, path.rfind(L'.') - path.rfind(L'/') - 1);\r\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\r\n\t\tif (SpeakerIdx >= SpeakerCount)\r\n\t\t\tSpeakerIdx = SpeakerCount;\r\n\t\tif (SpeakerIdx < 0)\r\n\t\t\tSpeakerIdx = 0;\r\n\t\tOutFolder += L\"-Params-(-NoiseScale=\" +\r\n\t\t\tstd::to_wstring(_InferParams.NoiseScale) +\r\n\t\t\tL\"-Speaker=\" +\r\n\t\t\t(EnableCharaMix ? std::wstring(L\"SpeakerMix\") : std::to_wstring(SpeakerIdx)) +\r\n\t\t\tL\"-Seed=\" +\r\n\t\t\tstd::to_wstring(_InferParams.Seed) +\r\n\t\t\tL\"-Sampler=\" +\r\n\t\t\t_InferParams.Sampler +\r\n\t\t\tL\"-F0Method=\" +\r\n\t\t\t_InferParams.F0Method + L\")\";\r\n\t\tif (_waccess((OutFolder + L\".wav\").c_str(), 0) != -1)\r\n\t\t{\r\n\t\t\tfor (size_t idx = 0; idx < 99999999; ++idx)\r\n\t\t\t\tif (_waccess((OutFolder + L\" (\" + std::to_wstring(idx) + L\").wav\").c_str(), 0) == -1)\r\n\t\t\t\t{\r\n\t\t\t\t\tOutFolder += L\" (\" + std::to_wstring(idx) + L\").wav\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\tOutFolder += L\".wav\";\r\n\t\tAudioFolders.emplace_back(OutFolder);\r\n\t\tInferTools::Wav::WritePCMData(_samplingRate, 1, _data, OutFolder);\r\n\t}\r\n\treturn AudioFolders;\r\n}\r\n\r\nstd::vector<int16_t> DiffusionSvc::InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\r\n{\r\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\r\n\tif (diffSvc || DiffSvcVersion != L\"DiffusionSvc\")\r\n\t\treturn PCMData;\r\n\r\n\tauto hubertin = InferTools::InterpResample<float>(PCMData, srcSr, 16000);\r\n\tint64_t SpeakerIdx = _InferParams.SpeakerId;\r\n\tif (SpeakerIdx >= SpeakerCount)\r\n\t\tSpeakerIdx = SpeakerCount;\r\n\tif (SpeakerIdx < 0)\r\n\t\tSpeakerIdx = 0;\r\n\tstd::mt19937 gen(int(_InferParams.Seed));\r\n\tstd::normal_distribution<float> normal(0, 1);\r\n\r\n\tconst int64_t inputShape[3] = { 1i64,1i64,(int64_t)hubertin.size() };\r\n\tstd::vector<Ort::Value> inputTensorshu;\r\n\tinputTensorshu.emplace_back(Ort::Value::CreateTensor(*memory_info, hubertin.data(), hubertin.size(), inputShape, 3));\r\n\tstd::vector<Ort::Value> hubertOut;\r\n\r\n\tauto speedup = (int64_t)_InferParams.Pndm;\r\n\tauto step = (int64_t)_InferParams.Step;\r\n\tif (step > MaxStep) step = MaxStep;\r\n\tif (speedup >= step) speedup = step / 5;\r\n\tif (speedup == 0) speedup = 1;\r\n\tconst auto RealDiffSteps = step % speedup ? step / speedup + 1 : step / speedup;\r\n\r\n\t_callback(0, RealDiffSteps);\r\n\r\n\ttry {\r\n\t\thubertOut = hubert->Run(Ort::RunOptions{ nullptr },\r\n\t\t\thubertInput.data(),\r\n\t\t\tinputTensorshu.data(),\r\n\t\t\tinputTensorshu.size(),\r\n\t\t\thubertOutput.data(),\r\n\t\t\thubertOutput.size());\r\n\t}\r\n\tcatch (Ort::Exception& e)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\r\n\t}\r\n\tconst auto HubertSize = hubertOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\tconst auto HubertOutPutData = hubertOut[0].GetTensorMutableData<float>();\r\n\tconst auto HubertOutPutShape = hubertOut[0].GetTensorTypeAndShapeInfo().GetShape();\r\n\tinputTensorshu.clear();\r\n\tif (HubertOutPutShape[2] != HiddenUnitKDims)\r\n\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\r\n\r\n\tstd::vector HiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\r\n\r\n\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\r\n\t{\r\n\t\tconst auto clus_size = HubertOutPutShape[1];\r\n\t\tconst auto pts = Cluster->find(HiddenUnits.data(), long(SpeakerIdx), clus_size);\r\n\t\tfor (size_t indexs = 0; indexs < HiddenUnits.size(); ++indexs)\r\n\t\t\tHiddenUnits[indexs] = HiddenUnits[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\r\n\t}\r\n\r\n\tconst auto HubertLen = int64_t(HubertSize) / HiddenUnitKDims;\r\n\tconst int64_t F0Shape[] = { 1, int64_t(PCMData.size() / HopSize) };\r\n\tconst int64_t HiddenUnitShape[] = { 1, HubertLen, HiddenUnitKDims };\r\n\tconstexpr int64_t CharaEmbShape[] = { 1 };\r\n\tconst int64_t CharaMixShape[] = { F0Shape[1], SpeakerCount };\r\n\r\n\tconst auto F0Extractor = MoeVSF0Extractor::GetF0Extractor(_InferParams.F0Method, _samplingRate, HopSize);\r\n\tauto F0Data = F0Extractor->ExtractF0(PCMData, PCMData.size() / HopSize);\r\n\tfor (auto& ifo : F0Data)\r\n\t\tifo *= (float)pow(2.0, static_cast<double>(_InferParams.Keys) / 12.0);\r\n\tF0Data = _TensorExtractor->GetInterpedF0(InferTools::InterpFunc(F0Data, long(F0Data.size()), long(F0Shape[1])));\r\n\tstd::vector<int64_t> Alignment = _TensorExtractor->GetAligments(F0Shape[1], HubertLen);\r\n\tint64_t CharaEmb[] = { SpeakerIdx };\r\n\r\n\tstd::vector<Ort::Value> EncoderTensors;\r\n\r\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t*memory_info,\r\n\t\tHiddenUnits.data(),\r\n\t\tHubertSize,\r\n\t\tHiddenUnitShape,\r\n\t\t3\r\n\t));\r\n\r\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t*memory_info,\r\n\t\tAlignment.data(),\r\n\t\tF0Shape[1],\r\n\t\tF0Shape,\r\n\t\t2\r\n\t));\r\n\r\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t*memory_info,\r\n\t\tF0Data.data(),\r\n\t\tF0Shape[1],\r\n\t\tF0Shape,\r\n\t\t2\r\n\t));\r\n\r\n\tstd::vector<const char*> InputNamesEncoder;\r\n\tstd::vector<float> Volume, SpkMap;\r\n\r\n\tif (EnableVolume)\r\n\t{\r\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"volume\", \"spk_mix\" };\r\n\t\tVolume = ExtractVolume(PCMData, HopSize);\r\n\t\tif (abs(int64_t(Volume.size()) - int64_t(F0Data.size())) > 3)\r\n\t\t\tVolume = InferTools::InterpFunc(ExtractVolume(PCMData, HopSize), long(Volume.size()), long(F0Shape[1]));\r\n\t\telse\r\n\t\t\tVolume.resize(F0Data.size(), 0.f);\r\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\t*memory_info,\r\n\t\t\tVolume.data(),\r\n\t\t\tF0Shape[1],\r\n\t\t\tF0Shape,\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"spk_mix\" };\r\n\r\n\tif (EnableCharaMix)\r\n\t{\r\n\t\tSpkMap = _TensorExtractor->GetCurrectSpkMixData(std::vector<std::vector<float>>(), F0Shape[1], SpeakerIdx);\r\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\t*memory_info,\r\n\t\t\tSpkMap.data(),\r\n\t\t\tSpkMap.size(),\r\n\t\t\tCharaMixShape,\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t{\r\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\t*memory_info,\r\n\t\t\tCharaEmb,\r\n\t\t\t1,\r\n\t\t\tCharaEmbShape,\r\n\t\t\t1\r\n\t\t));\r\n\t}\r\n\r\n\tconst std::vector OutputNamesEncoder = { \"mel_pred\", \"f0_pred\", \"init_noise\" };\r\n\r\n\tstd::vector<Ort::Value> EncoderOut;\r\n\ttry {\r\n\t\tEncoderOut = encoder->Run(Ort::RunOptions{ nullptr },\r\n\t\t\tInputNamesEncoder.data(),\r\n\t\t\tEncoderTensors.data(),\r\n\t\t\tmin(EncoderTensors.size(), encoder->GetInputCount()),\r\n\t\t\tOutputNamesEncoder.data(),\r\n\t\t\tencoder->GetOutputCount());\r\n\t}\r\n\tcatch (Ort::Exception& e1)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: encoder\\n\") + e1.what()))\r\n\t}\r\n\tif (EncoderOut.size() == 1)\r\n\t\tEncoderOut.emplace_back(Ort::Value::CreateTensor(*memory_info, F0Data.data(), F0Shape[1], F0Shape, 2));\r\n\r\n\tstd::vector<Ort::Value> DenoiseInTensors;\r\n\tDenoiseInTensors.emplace_back(std::move(EncoderOut[0]));\r\n\r\n\tstd::vector<float> initial_noise(melBins * F0Shape[1], 0.0);\r\n\tlong long noise_shape[4] = { 1,1,melBins,F0Shape[1] };\r\n\tif (EncoderOut.size() == 3)\r\n\t\tDenoiseInTensors.emplace_back(std::move(EncoderOut[2]));\r\n\telse if (!naive)\r\n\t{\r\n\t\tfor (auto& it : initial_noise)\r\n\t\t\tit = normal(gen) * _InferParams.NoiseScale;\r\n\t\tDenoiseInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));\r\n\t}\r\n\telse\r\n\t{\r\n\t\tstd::vector<Ort::Value> NaiveOut;\r\n\t\ttry {\r\n\t\t\tNaiveOut = naive->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\tInputNamesEncoder.data(),\r\n\t\t\t\tEncoderTensors.data(),\r\n\t\t\t\tmin(EncoderTensors.size(), naive->GetInputCount()),\r\n\t\t\t\tnaiveOutput.data(),\r\n\t\t\t\t1);\r\n\t\t}\r\n\t\tcatch (Ort::Exception& e1)\r\n\t\t{\r\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: naive\\n\") + e1.what()))\r\n\t\t}\r\n\t\tDenoiseInTensors.emplace_back(std::move(NaiveOut[0]));\r\n\t}\r\n\r\n\tsize_t process = 0;\r\n\r\n\tauto PredOut = MoeVSSampler::GetMoeVSSampler((!alpha ? L\"Pndm\" : _InferParams.Sampler), alpha, denoise, pred, melBins, _callback, memory_info)->Sample(DenoiseInTensors, step, speedup, _InferParams.NoiseScale, _InferParams.Seed, process);\r\n\r\n\tstd::vector<Ort::Value> DiffOut, finaOut;\r\n\r\n\ttry\r\n\t{\r\n\t\tDiffOut = after->Run(Ort::RunOptions{ nullptr },\r\n\t\t\tafterInput.data(),\r\n\t\t\tPredOut.data(),\r\n\t\t\tPredOut.size(),\r\n\t\t\tafterOutput.data(),\r\n\t\t\tafterOutput.size());\r\n\t}\r\n\tcatch (Ort::Exception& e1)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()))\r\n\t}\r\n\tDiffOut.emplace_back(std::move(EncoderOut[1]));\r\n\tOrt::Session* Vocoder = GlobalVocoder;\r\n\tif (_InferParams._VocoderModel)\r\n\t\tVocoder = static_cast<Ort::Session*>(_InferParams._VocoderModel);\r\n\ttry\r\n\t{\r\n\t\tfinaOut = Vocoder->Run(Ort::RunOptions{ nullptr },\r\n\t\t\tnsfInput.data(),\r\n\t\t\tDiffOut.data(),\r\n\t\t\tVocoder->GetInputCount(),\r\n\t\t\tnsfOutput.data(),\r\n\t\t\tnsfOutput.size());\r\n\t}\r\n\tcatch (Ort::Exception& e3)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\r\n\t}\r\n\r\n\tauto DiffOutputAudioSize = finaOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\tstd::vector<int16_t> DiffPCMOutput(DiffOutputAudioSize);\r\n\t{\r\n\t\tauto DiffOutputAudioData = finaOut[0].GetTensorData<float>();\r\n\t\tauto OutputAudioData = DiffPCMOutput.data();\r\n\t\tconst auto OutputAudioEnd = OutputAudioData + DiffPCMOutput.size();\r\n\t\twhile (OutputAudioData != OutputAudioEnd)\r\n\t\t\t*(OutputAudioData++) = (int16_t)(Clamp(*(DiffOutputAudioData++)) * 32766.f);\r\n\t}\r\n\treturn DiffPCMOutput;\r\n}\r\n\r\nvoid DiffusionSvc::NormMel(std::vector<float>& MelSpec) const\r\n{\r\n\tfor (auto& it : MelSpec)\r\n\t\tit = (it - SpecMin) / (SpecMax - SpecMin) * 2 - 1;\r\n}\r\n\r\nstd::vector<int16_t> DiffusionSvc::ShallowDiffusionInference(\r\n\tstd::vector<float>& _16KAudioHubert,\r\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\r\n\tstd::pair<std::vector<float>, int64_t>& _Mel,\r\n\tconst std::vector<float>& _SrcF0,\r\n\tconst std::vector<float>& _SrcVolume,\r\n\tconst std::vector<std::vector<float>>& _SrcSpeakerMap,\r\n\tsize_t& Process,\r\n\tint64_t SrcSize\r\n) const\r\n{\r\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\r\n\tif (diffSvc || DiffSvcVersion != L\"DiffusionSvc\")\r\n\t\tLibDLVoiceCodecThrow(\"ShallowDiffusion Only Support DiffusionSvc Model\")\r\n\r\n\tauto speedup = (int64_t)_InferParams.Pndm;\r\n\tauto step = (int64_t)_InferParams.Step;\r\n\tif (step > MaxStep) step = MaxStep;\r\n\tif (speedup >= step) speedup = step / 5;\r\n\tif (speedup == 0) speedup = 1;\r\n\r\n\tstd::vector<const char*> InputNamesEncoder;\r\n\tconst auto _Mel_Size = _Mel.second;\r\n\r\n\tstd::vector<Ort::Value> HubertInputTensors, HubertOutputTensors;\r\n\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)_16KAudioHubert.size() };\r\n\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, _16KAudioHubert.data(), _16KAudioHubert.size(), HubertInputShape, 3));\r\n\ttry {\r\n\t\tHubertOutputTensors = hubert->Run(Ort::RunOptions{ nullptr },\r\n\t\t\thubertInput.data(),\r\n\t\t\tHubertInputTensors.data(),\r\n\t\t\tHubertInputTensors.size(),\r\n\t\t\thubertOutput.data(),\r\n\t\t\thubertOutput.size());\r\n\t}\r\n\tcatch (Ort::Exception& e)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\r\n\t}\r\n\r\n\tint64_t SpeakerIdx = _InferParams.SpeakerId;\r\n\tif (SpeakerIdx >= SpeakerCount)\r\n\t\tSpeakerIdx = SpeakerCount;\r\n\tif (SpeakerIdx < 0)\r\n\t\tSpeakerIdx = 0;\r\n\r\n\tconst auto HubertLength = HubertOutputTensors[0].GetTensorTypeAndShapeInfo().GetShape()[1];\r\n\tconst int64_t FrameShape[] = { 1, _Mel_Size };\r\n\tconst int64_t CharaMixShape[] = { _Mel_Size, SpeakerCount };\r\n\tconstexpr int64_t OneShape[] = { 1 };\r\n\tint64_t CharaEmb[] = { SpeakerIdx };\r\n\r\n\tauto Alignment = _TensorExtractor->GetAligments(_Mel_Size, HubertLength);\r\n\tAlignment.resize(FrameShape[1]);\r\n\tauto F0Data = InferTools::InterpFunc(_SrcF0, long(_SrcF0.size()), long(FrameShape[1]));\r\n\tstd::vector<float> Volume, SpkMap;\r\n\r\n\tstd::vector<Ort::Value> EncoderTensors;\r\n\tEncoderTensors.emplace_back(std::move(HubertOutputTensors[0]));\r\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t*memory_info,\r\n\t\tAlignment.data(),\r\n\t\tFrameShape[1],\r\n\t\tFrameShape,\r\n\t\t2\r\n\t));\r\n\r\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t*memory_info,\r\n\t\tF0Data.data(),\r\n\t\tFrameShape[1],\r\n\t\tFrameShape,\r\n\t\t2\r\n\t));\r\n\r\n\tif (EnableVolume)\r\n\t{\r\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"volume\", \"spk_mix\" };\r\n\t\tVolume = InferTools::InterpFunc(_SrcVolume, long(_SrcVolume.size()), long(FrameShape[1]));\r\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\t*memory_info,\r\n\t\t\tVolume.data(),\r\n\t\t\tFrameShape[1],\r\n\t\t\tFrameShape,\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"spk_mix\" };\r\n\r\n\tif (EnableCharaMix)\r\n\t{\r\n\t\tSpkMap = _TensorExtractor->GetCurrectSpkMixData(_SrcSpeakerMap, FrameShape[1], CharaEmb[0]);\r\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\t*memory_info,\r\n\t\t\tSpkMap.data(),\r\n\t\t\tSpkMap.size(),\r\n\t\t\tCharaMixShape,\r\n\t\t\t2\r\n\t\t));\r\n\t}\r\n\telse\r\n\t{\r\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t\t*memory_info,\r\n\t\t\tCharaEmb,\r\n\t\t\t1,\r\n\t\t\tOneShape,\r\n\t\t\t1\r\n\t\t));\r\n\t}\r\n\r\n\tconst std::vector OutputNamesEncoder = { \"mel_pred\" };\r\n\r\n\tstd::vector<Ort::Value> EncoderOut;\r\n\ttry {\r\n\t\tEncoderOut = encoder->Run(Ort::RunOptions{ nullptr },\r\n\t\t\tInputNamesEncoder.data(),\r\n\t\t\tEncoderTensors.data(),\r\n\t\t\tmin(EncoderTensors.size(), encoder->GetInputCount()),\r\n\t\t\tOutputNamesEncoder.data(),\r\n\t\t\t1);\r\n\t}\r\n\tcatch (Ort::Exception& e1)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: encoder\\n\") + e1.what()))\r\n\t}\r\n\r\n\tstd::vector<Ort::Value> DenoiseInTensors;\r\n\tDenoiseInTensors.emplace_back(std::move(EncoderOut[0]));\r\n\r\n\tlong long noise_shape[4] = { 1,1,melBins,_Mel_Size };\r\n\r\n\tNormMel(_Mel.first);\r\n\r\n\t/*std::mt19937 gen(int(_InferParams.Seed));\r\n\tstd::normal_distribution<float> normal(0, 1);\r\n\tstd::vector<float> initial_noise(melBins * _Mel_Size, 0.0);\r\n\tfor (auto& it : initial_noise)\r\n\t\tit = normal(gen) * _InferParams.NoiseScale;\r\n\tDenoiseInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));*/\r\n\r\n\tDenoiseInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, _Mel.first.data(), _Mel.first.size(), noise_shape, 4));\r\n\r\n\tauto PredOut = MoeVSSampler::GetMoeVSSampler((!alpha ? L\"Pndm\" : _InferParams.Sampler), alpha, denoise, pred, melBins, _callback, memory_info)->Sample(DenoiseInTensors, step, speedup, _InferParams.NoiseScale, _InferParams.Seed, Process);\r\n\r\n\tstd::vector<Ort::Value> DiffOut, finaOut;\r\n\ttry\r\n\t{\r\n\t\tDiffOut = after->Run(Ort::RunOptions{ nullptr },\r\n\t\t\tafterInput.data(),\r\n\t\t\tPredOut.data(),\r\n\t\t\tPredOut.size(),\r\n\t\t\tafterOutput.data(),\r\n\t\t\tafterOutput.size());\r\n\t}\r\n\tcatch (Ort::Exception& e1)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()))\r\n\t}\r\n\tDiffOut.emplace_back(std::move(EncoderTensors[2]));\r\n\tOrt::Session* Vocoder = GlobalVocoder;\r\n\tif (_InferParams._VocoderModel)\r\n\t\tVocoder = static_cast<Ort::Session*>(_InferParams._VocoderModel);\r\n\ttry\r\n\t{\r\n\t\tfinaOut = Vocoder->Run(Ort::RunOptions{ nullptr },\r\n\t\t\tnsfInput.data(),\r\n\t\t\tDiffOut.data(),\r\n\t\t\tVocoder->GetInputCount(),\r\n\t\t\tnsfOutput.data(),\r\n\t\t\tnsfOutput.size());\r\n\t}\r\n\tcatch (Ort::Exception& e3)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\r\n\t}\r\n\r\n\tauto DiffOutputAudioSize = finaOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\tstd::vector<int16_t> DiffPCMOutput(DiffOutputAudioSize);\r\n\t{\r\n\t\tauto DiffOutputAudioData = finaOut[0].GetTensorData<float>();\r\n\t\tauto OutputAudioData = DiffPCMOutput.data();\r\n\t\tconst auto OutputAudioEnd = OutputAudioData + DiffPCMOutput.size();\r\n\t\twhile (OutputAudioData != OutputAudioEnd)\r\n\t\t\t*(OutputAudioData++) = (int16_t)(Clamp(*(DiffOutputAudioData++)) * 32766.f);\r\n\t}\r\n\tconst auto dstWavLen = (SrcSize * int64_t(_samplingRate)) / (int)(_InferParams.SrcSamplingRate);\r\n\tDiffPCMOutput.resize(dstWavLen);\r\n\treturn DiffPCMOutput;\r\n}\r\n\r\nvoid StaticNormMel(std::vector<float>& MelSpec, float SpecMin = -12, float SpecMax = 2)\r\n{\r\n\tfor (auto& it : MelSpec)\r\n\t\tit = (it - SpecMin) / (SpecMax - SpecMin) * 2 - 1;\r\n}\r\n\r\nstd::vector<int16_t> VocoderInfer(std::vector<float>& Mel, std::vector<float>& F0, int64_t MelBins, int64_t MelSize, const Ort::MemoryInfo* Mem, void* _VocoderModel)\r\n{\r\n\tconst int64_t MelShape[] = { 1i64,MelBins,MelSize };\r\n\tconst int64_t FrameShape[] = { 1,MelSize };\r\n\tstd::vector<Ort::Value> Tensors;\r\n\tTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t*Mem,\r\n\t\tMel.data(),\r\n\t\tMel.size(),\r\n\t\tMelShape,\r\n\t\t3)\r\n\t);\r\n\tTensors.emplace_back(Ort::Value::CreateTensor(\r\n\t\t*Mem,\r\n\t\tF0.data(),\r\n\t\tFrameShape[1],\r\n\t\tFrameShape,\r\n\t\t2)\r\n\t);\r\n\tconst std::vector nsfInput = { \"c\", \"f0\" };\r\n\tconst std::vector nsfOutput = { \"audio\" };\r\n\tOrt::Session* Vocoder = GlobalVocoder;\r\n\tif (_VocoderModel)\r\n\t\tVocoder = static_cast<Ort::Session*>(_VocoderModel);\r\n\tTensors = Vocoder->Run(Ort::RunOptions{ nullptr },\r\n\t\tnsfInput.data(),\r\n\t\tTensors.data(),\r\n\t\tVocoder->GetInputCount(),\r\n\t\tnsfOutput.data(),\r\n\t\tnsfOutput.size());\r\n\tconst auto AudioSize = Tensors[0].GetTensorTypeAndShapeInfo().GetShape()[2];\r\n\tstd::vector<int16_t> Audio(AudioSize, 0);\r\n\tfor (int64_t it = 0; it < AudioSize; it++)\r\n\t\tAudio[it] = static_cast<int16_t>(DiffusionSvc::Clamp(Tensors[0].GetTensorData<float>()[it]) * 32766.0f);\r\n\treturn Audio;\r\n}\r\n\r\nMoeVoiceStudioCoreEnd\r\n"
  },
  {
    "path": "libsvc/Modules/src/Models/EnvManager.cpp",
    "content": "﻿#include \"../../header/Models/EnvManager.hpp\"\r\n#ifdef _WIN32\r\n#ifdef MOEVSDMLPROVIDER\r\n#include <dml_provider_factory.h>\r\n#endif\r\n#endif\r\n#include <thread>\r\n#include \"../../header/InferTools/F0Extractor/NetF0Predictors.hpp\"\r\n#include \"../../header/Modules.hpp\"\r\nMoeVoiceStudioCoreEnvManagerHeader\r\n\r\nbool SingleOrtApiEnv = false;\r\n\r\nbool SingleOrtApiEnvEnabled()\r\n{\r\n\treturn SingleOrtApiEnv;\r\n}\r\n\r\nvoid UseSingleOrtApiEnv(bool _cond)\r\n{\r\n\tSingleOrtApiEnv = _cond;\r\n}\r\n\r\nconst char* logger_id = \"libdlvoicecodec\";\r\n\r\nvoid MoeVSOrtLoggingFn(void* param, OrtLoggingLevel severity, const char* category, const char* logid, const char* code_location,\r\n\tconst char* message)\r\n{\r\n\tstd::string ort_message = \"[\";\r\n\tort_message += category;\r\n\tort_message += \"; In \";\r\n\tort_message += code_location;\r\n\tort_message += \"; By\";\r\n\tort_message += logger_id;\r\n\tort_message += \"] \";\r\n\tort_message += message;\r\n\tlogger.log(ort_message.c_str());\r\n}\r\n\r\nvoid MoeVoiceStudioEnv::Destory()\r\n{\r\n\tMoeVSF0Extractor::EmptyCache();\r\n\tlogger.log(L\"[Info] Removing Env & Release Memory\");\r\n\tdelete GlobalOrtSessionOptions;\r\n\tdelete GlobalOrtEnv;\r\n\tdelete GlobalOrtMemoryInfo;\r\n\tGlobalOrtSessionOptions = nullptr;\r\n\tGlobalOrtEnv = nullptr;\r\n\tGlobalOrtMemoryInfo = nullptr;\r\n\r\n\tif (cuda_option_v2)\r\n\t\tOrt::GetApi().ReleaseCUDAProviderOptions(cuda_option_v2);\r\n\tcuda_option_v2 = nullptr;\r\n\tlogger.log(L\"[Info] Complete!\");\r\n}\r\n\r\nvoid MoeVoiceStudioEnv::Load(unsigned ThreadCount, unsigned DeviceID, unsigned Provider)\r\n{\r\n\tif (((Provider != CurProvider) ||\r\n\t\t(Provider == 0 && ThreadCount != CurThreadCount) ||\r\n\t\t((Provider == 1 || Provider == 2) && DeviceID != CurDeviceID)) &&\r\n\t\t(MoeVSModuleManager::GetUnionSvcModel() || MoeVSModuleManager::GetVitsSvcModel() || MoeVSModuleManager::VocoderEnabled()))\r\n\t\tLibDLVoiceCodecThrow(\"A Model Has Been Loaded, You Cannot Change Env When A Model Has Been Loaded\");\r\n\ttry\r\n\t{\r\n\t\tif (Provider != CurProvider)\r\n\t\t\tCreate(ThreadCount, DeviceID, Provider);\r\n\t\tif (Provider == 0 && ThreadCount != CurThreadCount)\r\n\t\t\tCreate(ThreadCount, DeviceID, Provider);\r\n\t\tif ((Provider == 1 || Provider == 2) && DeviceID != CurDeviceID)\r\n\t\t\tCreate(ThreadCount, DeviceID, Provider);\r\n\t\tCurProvider = Provider;\r\n\t}\r\n\tcatch(std::exception& e)\r\n\t{\r\n\t\tDestory();\r\n\t\tCurThreadCount = unsigned(-1);\r\n\t\tCurDeviceID = unsigned(-1);\r\n\t\tCurProvider = unsigned(-1);\r\n\t\tlogger.log(to_wide_string(e.what()));\r\n\t\tLibDLVoiceCodecThrow(e.what());\r\n\t}\r\n}\r\n\r\nvoid MoeVoiceStudioEnv::Create(unsigned ThreadCount_, unsigned DeviceID_, unsigned ExecutionProvider_)\r\n{\r\n\tDestory();\r\n\tlogger.log(L\"[Info] Creating Env\");\r\n\r\n\tswitch (ExecutionProvider_)\r\n\t{\r\n\t\tcase 1:\r\n\t\t{\r\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\r\n\t\t\tbool ret = true;\r\n\t\t\tfor (const auto& it : AvailableProviders)\r\n\t\t\t\tif (it.find(\"CUDA\") != std::string::npos)\r\n\t\t\t\t\tret = false;\r\n\t\t\tif (ret)\r\n\t\t\t\tLibDLVoiceCodecThrow(\"CUDA Provider Not Found\");\r\n\t\t\tGlobalOrtSessionOptions = new Ort::SessionOptions;\r\n\r\n#ifdef MoeVSCUDAProviderV1\r\n\t\t\tOrtCUDAProviderOptions cuda_option;\r\n\t\t\tcuda_option.device_id = int(DeviceID_);\r\n\t\t\tcuda_option.do_copy_in_default_stream = false;\r\n\t\t\tGlobalOrtSessionOptions->AppendExecutionProvider_CUDA(cuda_option);\r\n#else\r\n\t\t\tconst OrtApi& ortApi = Ort::GetApi();\r\n\t\t\tif (cuda_option_v2)\r\n\t\t\t\tortApi.ReleaseCUDAProviderOptions(cuda_option_v2);\r\n\t\t\tortApi.CreateCUDAProviderOptions(&cuda_option_v2);\r\n\t\t\tconst std::vector keys{\r\n\t\t\t\t\"device_id\",\r\n\t\t\t\t\"gpu_mem_limit\",\r\n\t\t\t\t\"arena_extend_strategy\",\r\n\t\t\t\t\"cudnn_conv_algo_search\",\r\n\t\t\t\t\"do_copy_in_default_stream\",\r\n\t\t\t\t\"cudnn_conv_use_max_workspace\",\r\n\t\t\t\t\"cudnn_conv1d_pad_to_nc1d\",\r\n\t\t\t\t\"enable_cuda_graph\",\r\n\t\t\t\t\"enable_skip_layer_norm_strict_mode\"\r\n\t\t\t};\r\n\t\t\tconst std::vector values{\r\n\t\t\t\tstd::to_string(DeviceID_).c_str(),\r\n\t\t\t\t\"2147483648\",\r\n\t\t\t\t\"kNextPowerOfTwo\",\r\n\t\t\t\t\"EXHAUSTIVE\",\r\n\t\t\t\t\"1\",\r\n\t\t\t\t\"1\",\r\n\t\t\t\t\"1\",\r\n\t\t\t\t\"0\",\r\n\t\t\t\t\"0\"\r\n\t\t\t};\r\n\t\t\tortApi.UpdateCUDAProviderOptions(cuda_option_v2, keys.data(), values.data(), keys.size());\r\n\t\t\tGlobalOrtSessionOptions->AppendExecutionProvider_CUDA_V2(*cuda_option_v2);\r\n\t\t\t//ortApi.ReleaseCUDAProviderOptions(cuda_option_v2);\r\n#endif\r\n\t\t\tGlobalOrtEnv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, logger_id, MoeVSOrtLoggingFn, nullptr);\r\n\t\t\tGlobalOrtSessionOptions->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\r\n\t\t\tGlobalOrtSessionOptions->SetIntraOpNumThreads((int)std::thread::hardware_concurrency());\r\n\t\t\tGlobalOrtMemoryInfo = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\r\n\t\t\tCurDeviceID = DeviceID_;\r\n\t\t\tbreak;\r\n\t\t}\r\n#ifdef MOEVSDMLPROVIDER\r\n\t\tcase 2:\r\n\t\t{\r\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\r\n\t\t\tstd::string ret;\r\n\t\t\tfor (const auto& it : AvailableProviders)\r\n\t\t\t\tif (it.find(\"Dml\") != std::string::npos)\r\n\t\t\t\t\tret = it;\r\n\t\t\tif (ret.empty())\r\n\t\t\t\tLibDLVoiceCodecThrow(\"DML Provider Not Found\");\r\n\t\t\tconst OrtApi& ortApi = Ort::GetApi();\r\n\t\t\tconst OrtDmlApi* ortDmlApi = nullptr;\r\n\t\t\tortApi.GetExecutionProviderApi(\"DML\", ORT_API_VERSION, reinterpret_cast<const void**>(&ortDmlApi));\r\n\t\t\tOrt::ThreadingOptions threading_options;\r\n\t\t\tthreading_options.SetGlobalInterOpNumThreads((int)std::thread::hardware_concurrency());\r\n\t\t\tGlobalOrtEnv = new Ort::Env(threading_options, MoeVSOrtLoggingFn, nullptr, ORT_LOGGING_LEVEL_WARNING, logger_id);\r\n\t\t\tGlobalOrtEnv->DisableTelemetryEvents();\r\n\t\t\tGlobalOrtSessionOptions = new Ort::SessionOptions;\r\n\t\t\tortDmlApi->SessionOptionsAppendExecutionProvider_DML(*GlobalOrtSessionOptions, int(DeviceID_));\r\n\t\t\tGlobalOrtSessionOptions->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\r\n\t\t\tGlobalOrtSessionOptions->DisablePerSessionThreads();\r\n\t\t\tGlobalOrtSessionOptions->SetExecutionMode(ORT_SEQUENTIAL);\r\n\t\t\tGlobalOrtSessionOptions->DisableMemPattern();\r\n\t\t\tGlobalOrtMemoryInfo = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemType::OrtMemTypeCPU));\r\n\t\t\tCurDeviceID = DeviceID_;\r\n\t\t\tbreak;\r\n\t\t}\r\n#endif\r\n\t\tdefault:\r\n\t\t{\r\n\t\t\tif (ThreadCount_ == 0)\r\n\t\t\t\tThreadCount_ = std::thread::hardware_concurrency();\r\n\t\t\tGlobalOrtSessionOptions = new Ort::SessionOptions;\r\n\t\t\tGlobalOrtEnv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, logger_id, MoeVSOrtLoggingFn, nullptr);\r\n\t\t\tGlobalOrtSessionOptions->SetIntraOpNumThreads(static_cast<int>(ThreadCount_));\r\n\t\t\tGlobalOrtSessionOptions->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\r\n\t\t\tGlobalOrtMemoryInfo = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\r\n\t\t\tCurThreadCount = ThreadCount_;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tlogger.log(L\"[Info] Env Created\");\r\n}\r\n\r\nbool MoeVoiceStudioEnv::IsEnabled() const\r\n{\r\n\treturn GlobalOrtEnv && GlobalOrtMemoryInfo && GlobalOrtSessionOptions;\r\n}\r\n\r\nMoeVoiceStudioEnv GlobalMoeVSEnv;\r\n\r\nMoeVoiceStudioEnv& GetGlobalMoeVSEnv()\r\n{\r\n\treturn GlobalMoeVSEnv;\r\n}\r\n\r\nMoeVoiceStudioCoreEnvManagerEnd"
  },
  {
    "path": "libsvc/Modules/src/Models/ModelBase.cpp",
    "content": "﻿#include \"../../header/Models/ModelBase.hpp\"\r\n#include <commdlg.h>\r\nMoeVoiceStudioCoreHeader\r\n\r\nMoeVoiceStudioModule::MoeVoiceStudioModule(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_)\r\n{\r\n\tif (moevsenv::SingleOrtApiEnvEnabled())\r\n\t{\r\n\t\tOrtApiEnv.Load(ThreadCount_, DeviceID_, (unsigned)ExecutionProvider_);\r\n\t\t_cur_execution_provider = ExecutionProvider_;\r\n\t\tenv = OrtApiEnv.GetEnv();\r\n\t\tmemory_info = OrtApiEnv.GetMemoryInfo();\r\n\t\tsession_options = OrtApiEnv.GetSessionOptions();\r\n\t}\r\n\telse\r\n\t{\r\n\t\tmoevsenv::GetGlobalMoeVSEnv().Load(ThreadCount_, DeviceID_, (unsigned)ExecutionProvider_);\r\n\t\t_cur_execution_provider = ExecutionProvider_;\r\n\t\tenv = moevsenv::GetGlobalMoeVSEnv().GetEnv();\r\n\t\tmemory_info = moevsenv::GetGlobalMoeVSEnv().GetMemoryInfo();\r\n\t\tsession_options = moevsenv::GetGlobalMoeVSEnv().GetSessionOptions();\r\n\t}\r\n}\r\n\r\nMoeVoiceStudioModule::~MoeVoiceStudioModule()\r\n{\r\n\tenv = nullptr;\r\n\tmemory_info = nullptr;\r\n\tsession_options = nullptr;\r\n}\r\n\r\nstd::vector<std::wstring> MoeVoiceStudioModule::CutLens(const std::wstring& input)\r\n{\r\n\tstd::vector<std::wstring> _Lens;\r\n\tstd::wstring _tmpLen;\r\n\tfor (const auto& chari : input)\r\n\t{\r\n\t\tif ((chari == L'\\n') || (chari == L'\\r')) {\r\n\t\t\tif (!_tmpLen.empty())\r\n\t\t\t{\r\n\t\t\t\t_Lens.push_back(_tmpLen);\r\n\t\t\t\t_tmpLen = L\"\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\t_tmpLen += chari;\r\n\t\t}\r\n\t}\r\n\treturn _Lens;\r\n}\r\n\r\nstd::vector<std::wstring> MoeVoiceStudioModule::GetOpenFileNameMoeVS()\r\n{\r\n\tconstexpr long MaxPath = 8000;\r\n\tstd::vector<std::wstring> OFNLIST;\r\n#ifdef WIN32\r\n\tstd::vector<TCHAR> szFileName(MaxPath);\r\n\tstd::vector<TCHAR> szTitleName(MaxPath);\r\n\tOPENFILENAME ofn;\r\n\tZeroMemory(&ofn, sizeof(ofn));\r\n\tofn.lpstrFile = szFileName.data();\r\n\tofn.nMaxFile = MaxPath;\r\n\tofn.lpstrFileTitle = szTitleName.data();\r\n\tofn.nMaxFileTitle = MaxPath;\r\n\tofn.lStructSize = sizeof(OPENFILENAME);\r\n\tofn.hwndOwner = nullptr;\r\n\tconstexpr TCHAR szFilter[] = TEXT(\"Audio (*.wav;*.mp3;*.ogg;*.flac;*.aac)\\0*.wav;*.mp3;*.ogg;*.flac;*.aac\\0\");\r\n\tofn.lpstrFilter = szFilter;\r\n\tofn.lpstrTitle = nullptr;\r\n\tofn.lpstrDefExt = TEXT(\"wav\");\r\n\tofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER;\r\n\tif (GetOpenFileName(&ofn))\r\n\t{\r\n\t\tauto filePtr = szFileName.data();\r\n\t\tstd::wstring preFix = filePtr;\r\n\t\tfilePtr += preFix.length() + 1;\r\n\t\tif (!*filePtr)\r\n\t\t\tOFNLIST.emplace_back(preFix);\r\n\t\telse\r\n\t\t{\r\n\t\t\tpreFix += L'\\\\';\r\n\t\t\twhile (*filePtr != 0)\r\n\t\t\t{\r\n\t\t\t\tstd::wstring thisPath(filePtr);\r\n\t\t\t\tOFNLIST.emplace_back(preFix + thisPath);\r\n\t\t\t\tfilePtr += thisPath.length() + 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif(OFNLIST.empty())\r\n\t\tLibDLVoiceCodecThrow(\"Please Select Files\");\r\n\treturn OFNLIST;\r\n#else\r\n#endif\r\n}\r\n\r\nstd::vector<std::wstring> MoeVoiceStudioModule::Inference(std::wstring& _Datas,\r\n\tconst MoeVSProjectSpace::MoeVSParams& _InferParams,\r\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\r\n{\r\n\tMoeVSNotImplementedError;\r\n}\r\n\r\n/*\r\nint OnnxModule::InsertMessageToEmptyEditBox(std::wstring& _inputLens)\r\n{\r\n#ifdef WIN32\r\n\tstd::vector<TCHAR> szFileName(MaxPath);\r\n\tstd::vector<TCHAR> szTitleName(MaxPath);\r\n\tOPENFILENAME ofn;\r\n\tZeroMemory(&ofn, sizeof(ofn));\r\n\tofn.lpstrFile = szFileName.data();\r\n\tofn.nMaxFile = MaxPath;\r\n\tofn.lpstrFileTitle = szTitleName.data();\r\n\tofn.nMaxFileTitle = MaxPath;\r\n\tofn.lStructSize = sizeof(OPENFILENAME);\r\n\tofn.hwndOwner = nullptr;\r\n\r\n\tconstexpr TCHAR szFilter[] = TEXT(\"Audio (*.wav;*.mp3;*.ogg;*.flac;*.aac)\\0*.wav;*.mp3;*.ogg;*.flac;*.aac\\0\");\r\n\tofn.lpstrFilter = szFilter;\r\n\tofn.lpstrTitle = nullptr;\r\n\tofn.lpstrDefExt = TEXT(\"wav\");\r\n\tofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER;\r\n\tif (GetOpenFileName(&ofn))\r\n\t{\r\n\t\tauto filePtr = szFileName.data();\r\n\t\tstd::wstring preFix = filePtr;\r\n\t\tfilePtr += preFix.length() + 1;\r\n\t\tif (!*filePtr)\r\n\t\t\t_inputLens = preFix;\r\n\t\telse\r\n\t\t{\r\n\t\t\tpreFix += L'\\\\';\r\n\t\t\twhile (*filePtr != 0)\r\n\t\t\t{\r\n\t\t\t\tstd::wstring thisPath(filePtr);\r\n\t\t\t\t_inputLens += preFix + thisPath + L'\\n';\r\n\t\t\t\tfilePtr += thisPath.length() + 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse\r\n\t\treturn -2;\r\n\treturn 0;\r\n#else\r\n#endif\r\n}\r\n */\r\n\r\n/*\r\nvoid OnnxModule::ChangeDevice(Device _dev)\r\n{\r\n\tif (_dev == device_)\r\n\t\treturn;\r\n\tdevice_ = _dev;\r\n\tdelete session_options;\r\n\tdelete env;\r\n\tdelete memory_info;\r\n\tenv = nullptr;\r\n\tsession_options = nullptr;\r\n\tmemory_info = nullptr;\r\n\tswitch (_dev)\r\n\t{\r\n\t\tcase Device::CUDA:\r\n\t\t{\r\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\r\n\t\t\tbool ret = true;\r\n\t\t\tfor (const auto& it : AvailableProviders)\r\n\t\t\t\tif (it.find(\"CUDA\") != std::string::npos)\r\n\t\t\t\t\tret = false;\r\n\t\t\tif (ret)\r\n\t\t\t\tLibDLVoiceCodecThrow(\"CUDA Provider Not Found\");\r\n\t\t\tOrtCUDAProviderOptions cuda_option;\r\n\t\t\tcuda_option.device_id = int(__MoeVSGPUID);\r\n\t\t\tsession_options = new Ort::SessionOptions;\r\n\t\t\tenv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\r\n\t\t\tsession_options->AppendExecutionProvider_CUDA(cuda_option);\r\n\t\t\tsession_options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\r\n\t\t\tsession_options->SetIntraOpNumThreads(1);\r\n\t\t\tmemory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\r\n\t\t\tbreak;\r\n\t\t}\r\n#ifdef MOEVSDMLPROVIDER\r\n\t\tcase Device::DML:\r\n\t\t{\r\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\r\n\t\t\tstd::string ret;\r\n\t\t\tfor (const auto& it : AvailableProviders)\r\n\t\t\t\tif (it.find(\"Dml\") != std::string::npos)\r\n\t\t\t\t\tret = it;\r\n\t\t\tif (ret.empty())\r\n\t\t\t\tLibDLVoiceCodecThrow(\"DML Provider Not Found\");\r\n\t\t\tconst OrtApi& ortApi = Ort::GetApi();\r\n\t\t\tconst OrtDmlApi* ortDmlApi = nullptr;\r\n\t\t\tortApi.GetExecutionProviderApi(\"DML\", ORT_API_VERSION, reinterpret_cast<const void**>(&ortDmlApi));\r\n\r\n\t\t\tconst Ort::ThreadingOptions threadingOptions;\r\n\t\t\tenv = new Ort::Env(threadingOptions, ORT_LOGGING_LEVEL_VERBOSE, \"\");\r\n\t\t\tenv->DisableTelemetryEvents();\r\n\t\t\tsession_options = new Ort::SessionOptions;\r\n\t\t\tortDmlApi->SessionOptionsAppendExecutionProvider_DML(*session_options, int(__MoeVSGPUID));\r\n\t\t\tsession_options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\r\n\t\t\tsession_options->DisablePerSessionThreads();\r\n\t\t\tsession_options->SetExecutionMode(ORT_SEQUENTIAL);\r\n\t\t\tsession_options->DisableMemPattern();\r\n\t\t\tmemory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemType::OrtMemTypeCPU));\r\n\t\t\tbreak;\r\n\t\t}\r\n#endif\r\n\t\tdefault:\r\n\t\t{\r\n\t\t\tsession_options = new Ort::SessionOptions;\r\n\t\t\tenv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\r\n\t\t\tsession_options->SetIntraOpNumThreads(static_cast<int>(__MoeVSNumThreads));\r\n\t\t\tsession_options->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\r\n\t\t\tmemory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n */\r\n\r\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libsvc/Modules/src/Models/MoeVSProject.cpp",
    "content": "﻿#include \"../../header/Models/MoeVSProject.hpp\"\r\n#include \"../../header/InferTools/inferTools.hpp\"\r\n#include <cassert>\r\n\r\nnamespace MoeVSProjectSpace\r\n{\r\n    MoeVSProject::MoeVSProject(const std::wstring& _path)\r\n    {\r\n        FileWrapper project_file(_path.c_str(), L\"rb\");\r\n        if (!project_file.IsOpen())\r\n            LibDLVoiceCodecThrow(\"File Doesn't Exists\");\r\n        fseek(project_file, 0, SEEK_SET);\r\n\r\n        if (fread(&moevs_proj_header_, 1, sizeof(Header), project_file) != sizeof(Header))\r\n            LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n        if (!(moevs_proj_header_.ChunkSymbol[0] == 'M' && moevs_proj_header_.ChunkSymbol[1] == 'O' && moevs_proj_header_.ChunkSymbol[2] == 'E' && moevs_proj_header_.ChunkSymbol[3] == 'V' && moevs_proj_header_.ChunkSymbol[4] == 'S' && moevs_proj_header_.ChunkSymbol[5] == 'P' && moevs_proj_header_.ChunkSymbol[6] == 'R' && moevs_proj_header_.ChunkSymbol[7] == 'J'))\r\n            LibDLVoiceCodecThrow(\"Unrecognized File\");\r\n        if (moevs_proj_header_.DataHeaderAmount == 0)\r\n            LibDLVoiceCodecThrow(\"Empty Project\");\r\n\r\n\r\n        data_pos_ = std::vector<size_type>(moevs_proj_header_.DataHeaderAmount);\r\n        if (fread(data_pos_.data(), 1, sizeof(size_type) * (moevs_proj_header_.DataHeaderAmount), project_file) != sizeof(size_type) * (moevs_proj_header_.DataHeaderAmount))\r\n            LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n        data_chunk_begin_ = sizeof(Header) + sizeof(size_type) * (moevs_proj_header_.DataHeaderAmount);\r\n\r\n\r\n        size_type _n_bytes = 0;\r\n        const size_type _data_begin = data_chunk_begin_;\r\n        fseek(project_file, long(_data_begin), SEEK_SET);\r\n        for (const auto& _pos_index : data_pos_)\r\n        {\r\n            Data _datas;\r\n\r\n            //Header\r\n            if (fread(&_datas.Header, 1, sizeof(DataHeader), project_file) != sizeof(DataHeader))\r\n                LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n            if (!(_datas.Header.ChunkSymbol[0] == 'D' && _datas.Header.ChunkSymbol[1] == 'A' && _datas.Header.ChunkSymbol[2] == 'T' && _datas.Header.ChunkSymbol[3] == 'A'))\r\n                LibDLVoiceCodecThrow(\"Unrecognized File\");\r\n            _datas.ParamData.Slices.resize(_datas.Header.OrgLenSize);\r\n\r\n            //Audio\r\n            if (_datas.Header.OrgAudioOffsetPosSize != 0) {\r\n                _datas.Offset.OrgAudio = std::vector<size_type>(_datas.Header.OrgAudioOffsetPosSize);\r\n                _n_bytes = sizeof(size_type) * _datas.Header.OrgAudioOffsetPosSize;\r\n                if (fread(_datas.Offset.OrgAudio.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                size_t _data_idx = 0;\r\n                for (const auto& j : _datas.Offset.OrgAudio)\r\n                {\r\n                    if (!j) continue;\r\n                    std::vector<int16_t> hs_vector(j);\r\n                    _n_bytes = sizeof(int16_t) * j;\r\n                    if (fread(hs_vector.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                    _datas.ParamData.Slices[_data_idx].Audio = std::move(hs_vector);\r\n                    _data_idx += 1;\r\n                }\r\n            }\r\n\r\n\r\n            //F0\r\n            if (_datas.Header.F0OffsetPosSize != 0)\r\n            {\r\n                _datas.Offset.F0 = std::vector<size_type>(_datas.Header.F0OffsetPosSize);\r\n                _n_bytes = sizeof(size_type) * _datas.Header.F0OffsetPosSize;\r\n                if (fread(_datas.Offset.F0.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                size_t _data_idx = 0;\r\n                for (const auto& j : _datas.Offset.F0)\r\n                {\r\n                    if (!j) continue;\r\n                    std::vector<float> f0_vector(j);\r\n                    _n_bytes = sizeof(float) * j;\r\n                    if (fread(f0_vector.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                    _datas.ParamData.Slices[_data_idx].F0 = std::move(f0_vector);\r\n                    _data_idx += 1;\r\n                }\r\n            }\r\n\r\n\r\n            //Volume\r\n            if (_datas.Header.VolumeOffsetPosSize != 0)\r\n            {\r\n                _datas.Offset.Volume = std::vector<size_type>(_datas.Header.VolumeOffsetPosSize);\r\n                _n_bytes = sizeof(size_type) * _datas.Header.VolumeOffsetPosSize;\r\n                if (fread(_datas.Offset.Volume.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                size_t _data_idx = 0;\r\n                for (const auto& j : _datas.Offset.Volume)\r\n                {\r\n                    if (!j) continue;\r\n                    std::vector<float> Volume_vector(j);\r\n                    _n_bytes = sizeof(float) * j;\r\n                    if (fread(Volume_vector.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                    _datas.ParamData.Slices[_data_idx].Volume = std::move(Volume_vector);\r\n                    _data_idx += 1;\r\n                }\r\n            }\r\n\r\n\r\n            //ChrarcterMix\r\n            if (_datas.Header.CharacterOffsetPosSize != 0)\r\n            {\r\n                _datas.Offset.Speaker = std::vector<size_type>(_datas.Header.CharacterOffsetPosSize);\r\n                _n_bytes = sizeof(size_type) * _datas.Header.CharacterOffsetPosSize;\r\n                if (fread(_datas.Offset.Speaker.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                size_t _data_idx = 0;\r\n                for (const auto& j : _datas.Offset.Speaker)\r\n                {\r\n                    if (!j) continue;\r\n\r\n                    size_type NSpeaker = 0;\r\n                    if (fread(&NSpeaker, 1, sizeof(size_type), project_file) != sizeof(size_type))\r\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                    if (!NSpeaker) continue;\r\n\r\n                    std::vector<float> Speaker_vector(j);\r\n                    _n_bytes = sizeof(float) * j;\r\n                    if (fread(Speaker_vector.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                        LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                    std::vector<std::vector<float>> SpkVec;\r\n                    if (!Speaker_vector.empty())\r\n                    {\r\n                        const auto frames = Speaker_vector.size() / NSpeaker;\r\n                        for (size_t idxs = 0; idxs < NSpeaker; ++idxs)\r\n                            SpkVec.emplace_back(Speaker_vector.data() + idxs * frames, Speaker_vector.data() + (idxs + 1) * frames);\r\n                    }\r\n                    _datas.ParamData.Slices[_data_idx].Speaker = std::move(SpkVec);\r\n                    _data_idx += 1;\r\n                }\r\n            }\r\n\r\n\r\n            //OrgLen\r\n            if (_datas.Header.OrgLenSize != 0)\r\n            {\r\n                std::vector<long> OrgLen(_datas.Header.OrgLenSize);\r\n                _n_bytes = sizeof(long) * _datas.Header.OrgLenSize;\r\n                if (fread(OrgLen.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                for (size_t _data_idx = 0; _data_idx < OrgLen.size(); ++_data_idx)\r\n                    _datas.ParamData.Slices[_data_idx].OrgLen = OrgLen[_data_idx];\r\n            }\r\n\r\n\r\n            //Symbol\r\n            if (_datas.Header.SymbolSize != 0)\r\n            {\r\n                std::vector<unsigned char> BooleanVector(_datas.Header.SymbolSize);\r\n                _n_bytes = _datas.Header.SymbolSize;\r\n                if (fread(BooleanVector.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                for (size_t _data_idx = 0; _data_idx < BooleanVector.size(); ++_data_idx)\r\n                    _datas.ParamData.Slices[_data_idx].IsNotMute = BooleanVector[_data_idx];\r\n            }\r\n\r\n\r\n            //path\r\n            if (_datas.Header.PathSize != 0)\r\n            {\r\n                std::vector<char> PathStr(_datas.Header.PathSize);\r\n                _n_bytes = _datas.Header.PathSize;\r\n                if (fread(PathStr.data(), 1, _n_bytes, project_file) != _n_bytes)\r\n                    LibDLVoiceCodecThrow(\"Unexpected EOF\");\r\n                _datas.ParamData.Path = to_wide_string(PathStr.data());\r\n            }\r\n\r\n            data_.emplace_back(std::move(_datas));\r\n        }\r\n    }\r\n\r\n    MoeVSProject::MoeVSProject(const std::vector<MoeVoiceStudioSvcData>& _params)\r\n    {\r\n        moevs_proj_header_.DataHeaderAmount = size_type(_params.size());\r\n        data_chunk_begin_ = sizeof(Header) + sizeof(size_type) * (moevs_proj_header_.DataHeaderAmount);\r\n        data_pos_.push_back(0);\r\n        size_type _offset = 0;\r\n        for (const auto& i : _params)\r\n        {\r\n            Data _data;\r\n            _data.ParamData = i;\r\n            for (const auto& SliceData : i.Slices)\r\n            {\r\n                _data.Offset.OrgAudio.push_back(SliceData.Audio.size());\r\n                _data.Offset.F0.push_back(SliceData.F0.size());\r\n                _data.Offset.Volume.push_back(SliceData.Volume.size());\r\n                size_t size__ = 0;\r\n                for (auto& Speaker : SliceData.Speaker)\r\n                {\r\n                    size__ += Speaker.size();\r\n                }\r\n                _data.Offset.Speaker.push_back(size__);\r\n            }\r\n            _data.Header.OrgAudioOffsetPosSize = _data.Offset.OrgAudio.size();\r\n            _data.Header.F0OffsetPosSize = _data.Offset.F0.size();\r\n            _data.Header.VolumeOffsetPosSize = _data.Offset.Volume.size();\r\n            _data.Header.CharacterOffsetPosSize = _data.Offset.Speaker.size();\r\n            _data.Header.OrgLenSize = i.Slices.size();\r\n            _data.Header.SymbolSize = i.Slices.size();\r\n            const std::string bytePath = to_byte_string(i.Path);\r\n            _data.Header.PathSize = bytePath.length() + 1;\r\n            _offset += _data.Size();\r\n            data_pos_.push_back(_offset);\r\n            data_.emplace_back(std::move(_data));\r\n        }\r\n        data_pos_.pop_back();\r\n    }\r\n\r\n    void MoeVSProject::Write(const std::wstring& _path) const\r\n    {\r\n        FILE* project_file = nullptr;\r\n        _wfopen_s(&project_file, _path.c_str(), L\"wb\");\r\n        if (!project_file)\r\n            LibDLVoiceCodecThrow(\"Cannot Create File\");\r\n\r\n        fwrite(&moevs_proj_header_, 1, sizeof(Header), project_file);\r\n        fwrite(data_pos_.data(), 1, data_pos_.size() * sizeof(size_type), project_file);\r\n\r\n        for (const auto& i : data_)\r\n        {\r\n            fwrite(&i.Header, 1, sizeof(DataHeader), project_file);\r\n\r\n\r\n            fwrite(i.Offset.OrgAudio.data(), 1, sizeof(size_type) * i.Offset.OrgAudio.size(), project_file);\r\n            for (const auto& orgaudio : i.ParamData.Slices)\r\n                fwrite(orgaudio.Audio.data(), 1, orgaudio.Audio.size() * sizeof(int16_t), project_file);\r\n\r\n\r\n            fwrite(i.Offset.F0.data(), 1, sizeof(size_type) * i.Offset.F0.size(), project_file);\r\n            for (const auto& f0 : i.ParamData.Slices)\r\n                fwrite(f0.F0.data(), 1, f0.F0.size() * sizeof(float), project_file);\r\n\r\n\r\n            if (i.Header.VolumeOffsetPosSize != 0)\r\n            {\r\n                fwrite(i.Offset.Volume.data(), 1, sizeof(size_type) * i.Offset.Volume.size(), project_file);\r\n                for (const auto& volume : i.ParamData.Slices)\r\n                    fwrite(volume.Volume.data(), 1, volume.Volume.size() * sizeof(float), project_file);\r\n            }\r\n\r\n            if (i.Header.CharacterOffsetPosSize != 0)\r\n            {\r\n                fwrite(i.Offset.Speaker.data(), 1, sizeof(size_type) * i.Offset.Speaker.size(), project_file);\r\n                for (const auto& Speaker : i.ParamData.Slices)\r\n                {\r\n                    if (Speaker.Speaker.empty()) continue;\r\n                    const size_type NSPK = Speaker.Speaker.size();\r\n                    fwrite(&NSPK, 1, sizeof(size_type), project_file);\r\n                    for (const auto& Spkk : Speaker.Speaker)\r\n                        fwrite(Spkk.data(), 1, Spkk.size() * sizeof(float), project_file);\r\n                }\r\n            }\r\n\r\n            assert(i.ParamData.Slices.size() == i.Header.OrgLenSize);\r\n            std::vector<long> CurOrgLen(i.Header.OrgLenSize);\r\n            for (size_t index = 0; index < i.ParamData.Slices.size(); ++index)\r\n                CurOrgLen[index] = i.ParamData.Slices[index].OrgLen;\r\n            fwrite(CurOrgLen.data(), 1, sizeof(long) * CurOrgLen.size(), project_file);\r\n\r\n            assert(i.ParamData.Slices.size() == i.Header.SymbolSize);\r\n            std::vector<char> BooleanVector(i.Header.SymbolSize);\r\n            for (size_t index = 0; index < i.ParamData.Slices.size(); ++index)\r\n                BooleanVector[index] = i.ParamData.Slices[index].IsNotMute ? 1 : 0;\r\n            fwrite(BooleanVector.data(), 1, i.Header.SymbolSize, project_file);\r\n\r\n            const std::string bytePath = to_byte_string(i.ParamData.Path);\r\n            fwrite(bytePath.data(), 1, i.Header.PathSize, project_file);\r\n        }\r\n        fclose(project_file);\r\n    }\r\n\r\n    std::wstring MoeVSTTSToken::Serialization() const\r\n    {\r\n        if (Text.empty())\r\n            return L\"\\t\\t\\t{ }\";\r\n        std::wstring rtn = L\"\\t\\t\\t{\\n\";\r\n        rtn += L\"\\t\\t\\t\\t\\\"Text\\\": \\\"\" + Text + L\"\\\",\\n\";\r\n        rtn += L\"\\t\\t\\t\\t\\\"Phonemes\\\": \" + wstring_vector_to_string(Phonemes) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\t\\t\\\"Tones\\\": \" + vector_to_string(Tones) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\t\\t\\\"Durations\\\": \" + vector_to_string(Durations) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\t\\t\\\"Language\\\": \" + string_vector_to_string(Language) + L\"\\n\\t\\t\\t}\";\r\n        return rtn;\r\n    }\r\n\r\n    MoeVSTTSToken::MoeVSTTSToken(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams)\r\n    {\r\n        if (_JsonDocument.HasMember(\"Text\") && _JsonDocument[\"Text\"].IsString() && !_JsonDocument[\"Text\"].Empty())\r\n            Text = to_wide_string(_JsonDocument[\"Text\"].GetString());\r\n        else\r\n            LibDLVoiceCodecThrow(\"Field \\\"Text\\\" Should Not Be Empty\")\r\n\r\n            if (_JsonDocument.HasMember(\"Phonemes\") && _JsonDocument[\"Phonemes\"].IsArray())\r\n                for (const auto& j : _JsonDocument[\"Phonemes\"].GetArray())\r\n                    Phonemes.emplace_back(j.IsString() ? to_wide_string(j.GetString()) : L\"[UNK]\");\r\n\r\n        if (_JsonDocument.HasMember(\"Tones\") && _JsonDocument[\"Tones\"].IsArray())\r\n            for (const auto& j : _JsonDocument[\"Tones\"].GetArray())\r\n                Tones.emplace_back(j.IsInt() ? j.GetInt() : 0);\r\n\r\n        if (_JsonDocument.HasMember(\"Durations\") && _JsonDocument[\"Durations\"].IsArray())\r\n            for (const auto& j : _JsonDocument[\"Durations\"].GetArray())\r\n                Durations.emplace_back(j.IsInt() ? j.GetInt() : 0);\r\n\r\n        if (_JsonDocument.HasMember(\"Language\") && _JsonDocument[\"Language\"].IsArray())\r\n        {\r\n            const auto LanguageArr = _JsonDocument[\"Language\"].GetArray();\r\n            if (!LanguageArr.empty() && LanguageArr[0].IsString())\r\n                for (const auto& j : LanguageArr)\r\n                    Language.emplace_back(j.GetString());\r\n        }\r\n    }\r\n\r\n    std::wstring MoeVSTTSSeq::Serialization() const\r\n    {\r\n        if (TextSeq.empty())\r\n            return L\"\";\r\n        std::wstring rtn = L\"\\t{\\n\";\r\n        rtn += L\"\\t\\t\\\"TextSeq\\\": \\\"\" + TextSeq + L\"\\\",\\n\";\r\n        rtn += L\"\\t\\t\\\"SlicedTokens\\\": [\\n\";\r\n        for (const auto& iter : SlicedTokens)\r\n            rtn += iter.Serialization() + L\",\\n\";\r\n        if (!SlicedTokens.empty())\r\n            rtn.erase(rtn.end() - 2);\r\n        rtn += L\"\\t\\t],\\n\";\r\n        rtn += L\"\\t\\t\\\"SpeakerMix\\\": \" + vector_to_string(SpeakerMix) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"EmotionPrompt\\\": \" + wstring_vector_to_string(EmotionPrompt) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"NoiseScale\\\": \" + std::to_wstring(NoiseScale) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"LengthScale\\\": \" + std::to_wstring(LengthScale) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"DurationPredictorNoiseScale\\\": \" + std::to_wstring(DurationPredictorNoiseScale) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"FactorDpSdp\\\": \" + std::to_wstring(FactorDpSdp) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"GateThreshold\\\": \" + std::to_wstring(GateThreshold) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"MaxDecodeStep\\\": \" + std::to_wstring(MaxDecodeStep) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"Seed\\\": \" + std::to_wstring(Seed) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"SpeakerName\\\": \\\"\" + SpeakerName + L\"\\\",\\n\";\r\n        rtn += L\"\\t\\t\\\"RestTime\\\": \" + std::to_wstring(RestTime) + L\",\\n\";\r\n        rtn += L\"\\t\\t\\\"PlaceHolderSymbol\\\": \\\"\" + PlaceHolderSymbol + L\"\\\",\\n\";\r\n        rtn += L\"\\t\\t\\\"LanguageSymbol\\\": \\\"\" + to_wide_string(LanguageSymbol) + L\"\\\",\\n\";\r\n        rtn += L\"\\t\\t\\\"G2PAdditionalInfo\\\": \\\"\" + AdditionalInfo + L\"\\\"\\n\\t}\";\r\n        return rtn;\r\n    }\r\n\r\n    MoeVSTTSSeq::MoeVSTTSSeq(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams)\r\n    {\r\n        if (_JsonDocument.HasMember(\"LanguageSymbol\") && _JsonDocument[\"LanguageSymbol\"].IsString() && !_JsonDocument[\"LanguageSymbol\"].Empty())\r\n            LanguageSymbol = _JsonDocument[\"LanguageSymbol\"].GetString();\r\n        else\r\n            LanguageSymbol = _InitParams.LanguageSymbol;\r\n\r\n        if (_JsonDocument.HasMember(\"G2PAdditionalInfo\") && _JsonDocument[\"G2PAdditionalInfo\"].IsString() && !_JsonDocument[\"G2PAdditionalInfo\"].Empty())\r\n            AdditionalInfo = to_wide_string(_JsonDocument[\"G2PAdditionalInfo\"].GetString());\r\n        else\r\n            AdditionalInfo = _InitParams.AdditionalInfo;\r\n\r\n        if (_JsonDocument.HasMember(\"PlaceHolderSymbol\") && _JsonDocument[\"PlaceHolderSymbol\"].IsString() && !_JsonDocument[\"PlaceHolderSymbol\"].Empty())\r\n            PlaceHolderSymbol = to_wide_string(_JsonDocument[\"PlaceHolderSymbol\"].GetString());\r\n        else\r\n            PlaceHolderSymbol = _InitParams.PlaceHolderSymbol;\r\n\r\n        if (_JsonDocument.HasMember(\"TextSeq\") && _JsonDocument[\"TextSeq\"].IsString() && !_JsonDocument[\"TextSeq\"].Empty())\r\n            TextSeq = to_wide_string(_JsonDocument[\"TextSeq\"].GetString());\r\n        else\r\n            LibDLVoiceCodecThrow(\"Field \\\"TextSeq\\\" Should Not Be Empty\")\r\n\r\n            if (_JsonDocument.HasMember(\"SlicedTokens\") && _JsonDocument[\"SlicedTokens\"].IsArray())\r\n            {\r\n                const auto TokensArrayObject = _JsonDocument[\"SlicedTokens\"].GetArray();\r\n                for (const auto& iter : TokensArrayObject)\r\n                    SlicedTokens.emplace_back(iter, _InitParams);\r\n            }\r\n\r\n        if (_JsonDocument.HasMember(\"SpeakerMix\") && _JsonDocument[\"SpeakerMix\"].IsArray())\r\n            for (const auto& j : _JsonDocument[\"SpeakerMix\"].GetArray())\r\n                SpeakerMix.emplace_back(j.IsFloat() ? j.GetFloat() : 0.f);\r\n        else\r\n            SpeakerMix = _InitParams.SpeakerMix;\r\n        if (_JsonDocument.HasMember(\"EmotionPrompt\") && _JsonDocument[\"EmotionPrompt\"].IsArray())\r\n            for (const auto& j : _JsonDocument[\"EmotionPrompt\"].GetArray())\r\n                EmotionPrompt.emplace_back(j.IsString() ? to_wide_string(j.GetString()) : std::wstring());\r\n        else\r\n            EmotionPrompt = _InitParams.EmotionPrompt;\r\n        if (_JsonDocument.HasMember(\"NoiseScale\") && _JsonDocument[\"NoiseScale\"].IsFloat())\r\n            NoiseScale = _JsonDocument[\"NoiseScale\"].GetFloat();\r\n        else\r\n            NoiseScale = _InitParams.NoiseScale;\r\n        if (_JsonDocument.HasMember(\"LengthScale\") && _JsonDocument[\"LengthScale\"].IsFloat())\r\n            LengthScale = _JsonDocument[\"LengthScale\"].GetFloat();\r\n        else\r\n            LengthScale = _InitParams.LengthScale;\r\n        if (_JsonDocument.HasMember(\"RestTime\") && _JsonDocument[\"RestTime\"].IsFloat())\r\n            RestTime = _JsonDocument[\"RestTime\"].GetFloat();\r\n        else\r\n            RestTime = _InitParams.RestTime;\r\n        if (_JsonDocument.HasMember(\"DurationPredictorNoiseScale\") && _JsonDocument[\"DurationPredictorNoiseScale\"].IsFloat())\r\n            DurationPredictorNoiseScale = _JsonDocument[\"DurationPredictorNoiseScale\"].GetFloat();\r\n        else\r\n            DurationPredictorNoiseScale = _InitParams.DurationPredictorNoiseScale;\r\n        if (_JsonDocument.HasMember(\"FactorDpSdp\") && _JsonDocument[\"FactorDpSdp\"].IsFloat())\r\n            FactorDpSdp = _JsonDocument[\"FactorDpSdp\"].GetFloat();\r\n        else\r\n            FactorDpSdp = _InitParams.FactorDpSdp;\r\n        if (_JsonDocument.HasMember(\"GateThreshold\") && _JsonDocument[\"GateThreshold\"].IsFloat())\r\n            GateThreshold = _JsonDocument[\"GateThreshold\"].GetFloat();\r\n        else\r\n            GateThreshold = _InitParams.GateThreshold;\r\n        if (_JsonDocument.HasMember(\"MaxDecodeStep\") && _JsonDocument[\"MaxDecodeStep\"].IsFloat())\r\n            MaxDecodeStep = _JsonDocument[\"MaxDecodeStep\"].GetInt();\r\n        else\r\n            MaxDecodeStep = _InitParams.MaxDecodeStep;\r\n        if (_JsonDocument.HasMember(\"Seed\") && _JsonDocument[\"Seed\"].IsInt())\r\n            Seed = _JsonDocument[\"Seed\"].GetInt();\r\n        else\r\n            Seed = _InitParams.Seed;\r\n        if (_JsonDocument.HasMember(\"SpeakerName\") && _JsonDocument[\"SpeakerName\"].IsString())\r\n            SpeakerName = to_wide_string(_JsonDocument[\"SpeakerName\"].GetString());\r\n        else\r\n            SpeakerName = _InitParams.SpeakerName;\r\n\r\n        if (MaxDecodeStep < 2000) MaxDecodeStep = 2000;\r\n        if (MaxDecodeStep > 20000) MaxDecodeStep = 20000;\r\n        if (GateThreshold > 0.90f) GateThreshold = 0.90f;\r\n        if (GateThreshold < 0.2f) GateThreshold = 0.2f;\r\n        if (FactorDpSdp > 1.f) FactorDpSdp = 1.f;\r\n        if (FactorDpSdp < 0.f) FactorDpSdp = 0.f;\r\n        if (NoiseScale > 10.f) NoiseScale = 10.f;\r\n        if (NoiseScale < 0.f) NoiseScale = 0.f;\r\n        if (DurationPredictorNoiseScale > 10.f) DurationPredictorNoiseScale = 10.f;\r\n        if (DurationPredictorNoiseScale < 0.f) DurationPredictorNoiseScale = 0.f;\r\n        if (RestTime > 30.f) RestTime = 30.f;\r\n        if (LengthScale > 10.f) LengthScale = 10.f;\r\n        if (LengthScale < 0.1f) LengthScale = 0.1f;\r\n    }\r\n\r\n    bool MoeVSTTSSeq::operator==(const MoeVSTTSSeq& right) const\r\n    {\r\n        return Serialization() == right.Serialization();\r\n    }\r\n}"
  },
  {
    "path": "libsvc/Modules/src/Models/ReflowSvc.cpp",
    "content": "﻿#include \"../../header/Models/ReflowSvc.hpp\"\n#include \"../../header/Models/DiffSvc.hpp\"\n#include \"../../header/InferTools/AvCodec/AvCodeResample.h\"\n#include \"../../header/InferTools/Sampler/MoeVSSamplerManager.hpp\"\n#include \"../../header/InferTools/F0Extractor/F0ExtractorManager.hpp\"\n#include <random>\n#include <regex>\n\nMoeVoiceStudioCoreHeader\nvoid ReflowSvc::Destory()\n{\n\t//AudioEncoder\n\tdelete hubert;\n\thubert = nullptr;\n\n\t//ReflowSvcModel\n\tdelete encoder;      //Encoder\n\tencoder = nullptr;\n\tdelete velocity;      //WaveNet\n\tvelocity = nullptr;\n\tdelete after;        //AfterProcess\n\tafter = nullptr;\n}\n\nReflowSvc::~ReflowSvc()\n{\n\tlogger.log(L\"[Info] unloading ReflowSvc Models\");\n\tDestory();\n\tlogger.log(L\"[Info] ReflowSvc Models unloaded\");\n}\n\nReflowSvc::ReflowSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_):\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioReflowSingingVoiceConversion\");\n\n\t//Check Folder\n\tif (_Config[\"Folder\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"folder\\\" (Model Folder)\")\n\tif (!_Config[\"Folder\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Must Be String\")\n\tconst auto _folder = to_wide_string(_Config[\"Folder\"].GetString());\n\tif (_folder.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Can Not Be Empty\")\n\tconst std::wstring _path = GetCurrentFolder() + L\"/Models/\" + _folder + L\"/\" + _folder;\n\tconst auto cluster_folder = GetCurrentFolder() + L\"/Models/\" + _folder;\n\tif (_Config[\"Hubert\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Hubert\\\" (Hubert Folder)\")\n\tif (!_Config[\"Hubert\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Must Be String\")\n\tconst std::wstring HuPath = to_wide_string(_Config[\"Hubert\"].GetString());\n\tif (HuPath.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Can Not Be Empty\")\n\n\tstd::map<std::string, std::wstring> _PathDict;\n\n\t_PathDict[\"Cluster\"] = cluster_folder;\n\t_PathDict[\"Hubert\"] = GetCurrentFolder() + L\"/hubert/\" + HuPath + L\".onnx\";\n\n\t_PathDict[\"Encoder\"] = _path + L\"_encoder.onnx\";\n\t_PathDict[\"VelocityFn\"] = _path + L\"_velocity.onnx\";\n\t_PathDict[\"AfterProcess\"] = _path + L\"_after.onnx\";\n\n\tlogger.log(\"[Model Loader] Prepeocess Complete!\");\n\tload(_PathDict, _Config, _ProgressCallback);\n}\n\nReflowSvc::ReflowSvc(const std::map<std::string, std::wstring>& _PathDict,\n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) :\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioReflowSingingVoiceConversion\");\n\n\tload(_PathDict, _Config, _ProgressCallback);\n}\n\nReflowSvc::ReflowSvc(const Hparams& _Hps, const ProgressCallback& _ProgressCallback, ExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) :\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioReflowSingingVoiceConversion\");\n\n\t_samplingRate = max(_Hps.SamplingRate, 2000);\n\tmelBins = max(_Hps.MelBins, 1);\n\tHopSize = max(_Hps.HopSize, 1);\n\tHiddenUnitKDims = max(_Hps.HiddenUnitKDims, 1);\n\tSpeakerCount = max(_Hps.SpeakerCount, 1);\n\tEnableVolume = _Hps.EnableVolume;\n\tEnableCharaMix = _Hps.EnableCharaMix;\n\tReflowSvcVersion = _Hps.TensorExtractor;\n\tSpecMax = _Hps.SpecMax;\n\tSpecMin = _Hps.SpecMin;\n\tMaxStep = max(_Hps.MaxStep, 1);\n\tScale = _Hps.Scale;\n\tVaeMode = _Hps.VaeMode;\n\n\t_callback = _ProgressCallback;\n\n\tif (!_Hps.Cluster.Type.empty())\n\t{\n\t\tClusterCenterSize = _Hps.Cluster.ClusterCenterSize;\n\t\ttry\n\t\t{\n\t\t\tCluster = MoeVoiceStudioCluster::GetMoeVSCluster(_Hps.Cluster.Type, _Hps.Cluster.Path, HiddenUnitKDims, ClusterCenterSize);\n\t\t\tEnableCluster = true;\n\t\t}\n\t\tcatch (std::exception& e)\n\t\t{\n\t\t\tlogger.error(e.what());\n\t\t\tEnableCluster = false;\n\t\t}\n\t}\n\n\t//LoadModels\n\ttry\n\t{\n\t\tlogger.log(L\"[Info] loading ReflowSvc Models\");\n\t\thubert = new Ort::Session(*env, _Hps.HubertPath.c_str(), *session_options);\n\t\tencoder = new Ort::Session(*env, _Hps.ReflowSvc.Encoder.c_str(), *session_options);\n\t\tvelocity = new Ort::Session(*env, _Hps.ReflowSvc.VelocityFn.c_str(), *session_options);\n\t\tafter = new Ort::Session(*env, _Hps.ReflowSvc.After.c_str(), *session_options);\n\n\t\tlogger.log(L\"[Info] ReflowSvc Models loaded\");\n\t}\n\tcatch (Ort::Exception& _exception)\n\t{\n\t\tDestory();\n\t\tLibDLVoiceCodecThrow(_exception.what())\n\t}\n\n\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others _others_param;\n\t_others_param.Memory = *memory_info;\n\n\ttry\n\t{\n\t\t_TensorExtractor = GetTensorExtractor(ReflowSvcVersion, 48000, _samplingRate, HopSize, EnableCharaMix, EnableVolume, HiddenUnitKDims, SpeakerCount, _others_param);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tDestory();\n\t\tLibDLVoiceCodecThrow(e.what())\n\t}\n}\n\nvoid ReflowSvc::load(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback)\n{\n\t//Check SamplingRate\n\tif (_Config[\"Rate\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Rate\\\" (SamplingRate)\")\n\tif (_Config[\"Rate\"].IsInt() || _Config[\"Rate\"].IsInt64())\n\t\t_samplingRate = _Config[\"Rate\"].GetInt();\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Rate\\\" (SamplingRate) Must Be Int/Int64\")\n\n\tlogger.log(L\"[Info] Current Sampling Rate is\" + std::to_wstring(_samplingRate));\n\n\tif (_Config[\"MelBins\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"MelBins\\\" (MelBins)\")\n\tif (_Config[\"MelBins\"].IsInt() || _Config[\"MelBins\"].IsInt64())\n\t\tmelBins = _Config[\"MelBins\"].GetInt();\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"MelBins\\\" (MelBins) Must Be Int/Int64\")\n\n\tif (!(_Config[\"Hop\"].IsInt() || _Config[\"Hop\"].IsInt64()))\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must Be Int\")\n\tHopSize = _Config[\"Hop\"].GetInt();\n\n\tif (HopSize < 1)\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must > 0\")\n\n\tif (!(_Config[\"HiddenSize\"].IsInt() || _Config[\"HiddenSize\"].IsInt64()))\n\t\tlogger.log(L\"[Warn] Missing Field \\\"HiddenSize\\\", Use Default Value (256)\");\n\telse\n\t\tHiddenUnitKDims = _Config[\"HiddenSize\"].GetInt();\n\n\tif (!_Config[\"Scale\"].IsFloat())\n\t\tlogger.log(L\"[Warn] Missing Field \\\"Scale\\\", Use Default Value (1000.f)\");\n\telse\n\t\tScale = _Config[\"Scale\"].GetFloat();\n\n\tif (_Config[\"Characters\"].IsArray())\n\t\tSpeakerCount = (int64_t)_Config[\"Characters\"].Size();\n\n\tif (_Config[\"Volume\"].IsBool())\n\t\tEnableVolume = _Config[\"Volume\"].GetBool();\n\telse\n\t\tlogger.log(L\"[Warn] Missing Field \\\"Volume\\\", Use Default Value (False)\");\n\n\tif (!_Config[\"CharaMix\"].IsBool())\n\t\tlogger.log(L\"[Warn] Missing Field \\\"CharaMix\\\", Use Default Value (False)\");\n\telse\n\t\tEnableCharaMix = _Config[\"CharaMix\"].GetBool();\n\n\tif (!_Config[\"VaeMode\"].IsBool())\n\t\tlogger.log(L\"[Warn] Missing Field \\\"VaeMode\\\", Use Default Value (True)\");\n\telse\n\t\tVaeMode = _Config[\"VaeMode\"].GetBool();\n\n\tif (_Config.HasMember(\"SpecMax\") && _Config[\"SpecMax\"].IsDouble())\n\t\tSpecMax = _Config[\"SpecMax\"].GetFloat();\n\telse\n\t\tlogger.log(L\"[Warn] Missing Field \\\"SpecMax\\\", Use Default Value (2)\");\n\n\tif (_Config.HasMember(\"SpecMin\") && _Config[\"SpecMin\"].IsDouble())\n\t\tSpecMin = _Config[\"SpecMin\"].GetFloat();\n\telse\n\t\tlogger.log(L\"[Warn] Missing Field \\\"SpecMin\\\", Use Default Value (-12)\");\n\n\t_callback = _ProgressCallback;\n\n\tif (_Config[\"Cluster\"].IsString())\n\t{\n\t\tconst auto clus = to_wide_string(_Config[\"Cluster\"].GetString());\n\t\tif (!(_Config[\"KMeansLength\"].IsInt() || _Config[\"KMeansLength\"].IsInt64()))\n\t\t\tlogger.log(L\"[Warn] Missing Field \\\"KMeansLength\\\", Use Default Value (10000)\");\n\t\telse\n\t\t\tClusterCenterSize = _Config[\"KMeansLength\"].GetInt();\n\t\ttry\n\t\t{\n\t\t\tCluster = MoeVoiceStudioCluster::GetMoeVSCluster(clus, _PathDict.at(\"Cluster\"), HiddenUnitKDims, ClusterCenterSize);\n\t\t\tEnableCluster = true;\n\t\t}\n\t\tcatch (std::exception& e)\n\t\t{\n\t\t\tlogger.error(e.what());\n\t\t\tEnableCluster = false;\n\t\t}\n\t}\n\n\t//LoadModels\n\ttry\n\t{\n\t\tlogger.log(L\"[Info] loading ReflowSvc Models\");\n\t\thubert = new Ort::Session(*env, _PathDict.at(\"Hubert\").c_str(), *session_options);\n\n\t\tencoder = new Ort::Session(*env, _PathDict.at(\"Encoder\").c_str(), *session_options);\n\t\tvelocity = new Ort::Session(*env, _PathDict.at(\"VelocityFn\").c_str(), *session_options);\n\t\tafter = new Ort::Session(*env, _PathDict.at(\"AfterProcess\").c_str(), *session_options);\n\n\t\tlogger.log(L\"[Info] ReflowSvc Models loaded\");\n\t}\n\tcatch (Ort::Exception& _exception)\n\t{\n\t\tDestory();\n\t\tLibDLVoiceCodecThrow(_exception.what())\n\t}\n\n\tif (_Config[\"TensorExtractor\"].IsString())\n\t\tReflowSvcVersion = to_wide_string(_Config[\"TensorExtractor\"].GetString());\n\n\tif (_Config[\"MaxStep\"].IsInt())\n\t\tMaxStep = _Config[\"MaxStep\"].GetInt();\n\n\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others _others_param;\n\t_others_param.Memory = *memory_info;\n\n\ttry\n\t{\n\t\t_TensorExtractor = GetTensorExtractor(ReflowSvcVersion, 48000, _samplingRate, HopSize, EnableCharaMix, EnableVolume, HiddenUnitKDims, SpeakerCount, _others_param);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tDestory();\n\t\tLibDLVoiceCodecThrow(e.what())\n\t}\n}\n\nstd::vector<int16_t> ReflowSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\n\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Start!\");\n\tstd::vector<int16_t> _data;\n\tsize_t total_audio_size = 0;\n\tfor (const auto& data_size : _Slice.Slices)\n\t\ttotal_audio_size += data_size.OrgLen;\n\t_data.reserve(size_t(double(total_audio_size) * 1.5));\n\n\tauto step = (int64_t)_InferParams.Step;\n\tif (step > MaxStep) step = MaxStep;\n\tconst auto RealSteps = step;\n\t_callback(0, _Slice.Slices.size() * RealSteps);\n\tsize_t process = 0;\n\tfor (const auto& CurSlice : _Slice.Slices)\n\t{\n\t\tconst auto InferDurTime = clock();\n\t\tconst auto CurRtn = SliceInference(CurSlice, _InferParams, process);\n\t\t_data.insert(_data.end(), CurRtn.data(), CurRtn.data() + CurRtn.size());\n\t\tif (CurSlice.IsNotMute)\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Segment[\" + std::to_wstring(process) + L\"] Finished! Segment Use Time: \" + std::to_wstring(clock() - InferDurTime) + L\"ms, Segment Duration: \" + std::to_wstring((size_t)CurSlice.OrgLen * 1000ull / _InferParams.SrcSamplingRate) + L\"ms\");\n\t\telse\n\t\t{\n\t\t\tprocess += RealSteps;\n\t\t\t_callback(process, _Slice.Slices.size() * RealSteps);\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Jump Empty Segment[\" + std::to_wstring(process) + L\"]!\");\n\t\t}\n\t}\n\n\tlogger.log(L\"[Inferring] \\\"\" + _Slice.Path + L\"\\\" Finished\");\n\treturn _data;\n}\n\nstd::vector<int16_t> ReflowSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const\n{\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\n\tstd::mt19937 gen(int(_InferParams.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\tauto step = (int64_t)_InferParams.Step;\n\tif (step > MaxStep) step = MaxStep;\n\n\tif (_Slice.IsNotMute)\n\t{\n\t\tauto RawWav = InferTools::InterpResample(_Slice.Audio, (int)(_InferParams.SrcSamplingRate), 16000, 32768.0f);\n\t\tconst auto src_audio_length = RawWav.size();\n\t\tbool NeedPadding = false;\n\t\tif (_cur_execution_provider == ExecutionProviders::CUDA)\n\t\t{\n\t\t\tNeedPadding = RawWav.size() % 16000;\n\t\t\tconst size_t WavPaddedSize = RawWav.size() / 16000 + 1;\n\t\t\tif (NeedPadding)\n\t\t\t\tRawWav.resize(WavPaddedSize * 16000, 0.f);\n\t\t}\n\n\t\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)RawWav.size() };\n\t\tstd::vector<Ort::Value> HubertInputTensors, HubertOutPuts;\n\t\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RawWav.data(), RawWav.size(), HubertInputShape, 3));\n\t\ttry {\n\t\t\tHubertOutPuts = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\thubertInput.data(),\n\t\t\t\tHubertInputTensors.data(),\n\t\t\t\tHubertInputTensors.size(),\n\t\t\t\thubertOutput.data(),\n\t\t\t\thubertOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\n\t\t}\n\t\tconst auto HubertSize = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\tconst auto HubertOutPutData = HubertOutPuts[0].GetTensorMutableData<float>();\n\t\tauto HubertOutPutShape = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tHubertInputTensors.clear();\n\t\tif (HubertOutPutShape[2] != HiddenUnitKDims)\n\t\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\n\n\t\tstd::vector srcHiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\t\tif (SpeakerIdx >= SpeakerCount)\n\t\t\tSpeakerIdx = SpeakerCount;\n\t\tif (SpeakerIdx < 0)\n\t\t\tSpeakerIdx = 0;\n\n\t\tconst auto max_cluster_size = int64_t((size_t)HubertOutPutShape[1] * src_audio_length / RawWav.size());\n\t\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\n\t\t{\n\t\t\tconst auto pts = Cluster->find(srcHiddenUnits.data(), long(SpeakerIdx), max_cluster_size);\n\t\t\tfor (int64_t indexs = 0; indexs < max_cluster_size * HiddenUnitKDims; ++indexs)\n\t\t\t\tsrcHiddenUnits[indexs] = srcHiddenUnits[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\n\t\t}\n\t\tstd::vector<Ort::Value> finaOut;\n\t\tstd::vector<Ort::Value> ReflowOut;\n\n\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::InferParams _Inference_Params;\n\t\t_Inference_Params.AudioSize = _Slice.Audio.size();\n\t\t_Inference_Params.Chara = SpeakerIdx;\n\t\t_Inference_Params.NoiseScale = _InferParams.NoiseScale;\n\t\t_Inference_Params.DDSPNoiseScale = _InferParams.DDSPNoiseScale;\n\t\t_Inference_Params.Seed = int(_InferParams.Seed);\n\t\t_Inference_Params.upKeys = _InferParams.Keys;\n\n\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Inputs InputTensors;\n\n\t\tif (_cur_execution_provider == ExecutionProviders::CUDA && NeedPadding)\n\t\t{\n\t\t\tauto CUDAF0 = _Slice.F0;\n\t\t\tauto CUDAVolume = _Slice.Volume;\n\t\t\tauto CUDASpeaker = _Slice.Speaker;\n\t\t\tconst auto src_src_audio_length = _Slice.Audio.size();\n\t\t\tconst size_t WavPaddedSize = ((src_src_audio_length / (int)(_InferParams.SrcSamplingRate)) + 1) * (int)(_InferParams.SrcSamplingRate);\n\t\t\tconst size_t AudioPadSize = WavPaddedSize - src_src_audio_length;\n\t\t\tconst size_t PaddedF0Size = CUDAF0.size() + (CUDAF0.size() * AudioPadSize / src_src_audio_length);\n\n\t\t\tif (!CUDAF0.empty()) CUDAF0.resize(PaddedF0Size, 0.f);\n\t\t\tif (!CUDAVolume.empty()) CUDAVolume.resize(PaddedF0Size, 0.f);\n\t\t\tfor (auto iSpeaker : CUDASpeaker)\n\t\t\t{\n\t\t\t\tif (!iSpeaker.empty())\n\t\t\t\t\tiSpeaker.resize(PaddedF0Size, 0.f);\n\t\t\t}\n\t\t\t_Inference_Params.AudioSize = WavPaddedSize;\n\t\t\tInputTensors = _TensorExtractor->Extract(srcHiddenUnits, CUDAF0, CUDAVolume, CUDASpeaker, _Inference_Params);\n\t\t}\n\t\telse\n\t\t\tInputTensors = _TensorExtractor->Extract(srcHiddenUnits, _Slice.F0, _Slice.Volume, _Slice.Speaker, _Inference_Params);\n\n\t\tstd::vector<Ort::Value> EncoderOut;\n\t\ttry {\n\t\t\tEncoderOut = encoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tInputTensors.InputNames,\n\t\t\t\tInputTensors.Tensor.data(),\n\t\t\t\tmin(InputTensors.Tensor.size(), encoder->GetInputCount()),\n\t\t\t\tOutputNamesEncoder.data(),\n\t\t\t\tencoder->GetOutputCount());\n\t\t}\n\t\tcatch (Ort::Exception& e1)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: encoder\\n\") + e1.what()))\n\t\t}\n\n\t\tstd::vector<Ort::Value> SamplerInTensors;\n\t\tstd::vector<float> initial_noise(melBins * InputTensors.Data.FrameShape[1], 0.0);\n\t\tlong long noise_shape[4] = { 1,1,melBins,InputTensors.Data.FrameShape[1] };\n\t\tconst auto x_size = EncoderOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\tfloat t_end = max(min(1.f, _InferParams.TEnd), 0.002f);\n\t\tfloat t_start = max(min(_InferParams.TBegin, t_end - 0.001f), 0.f);\n\t\tif(x_size != 1)\n\t\t{\n\t\t\tauto x_it = EncoderOut[0].GetTensorMutableData<float>();\n\t\t\tauto x_end = EncoderOut[0].GetTensorMutableData<float>() + x_size;\n\t\t\twhile (x_it != x_end) { (*(x_it++) *= t_start) += ((t_end - t_start) * normal(gen) * _InferParams.NoiseScale); }\n\t\t\tSamplerInTensors.emplace_back(std::move(EncoderOut[0]));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (auto& it : initial_noise)\n\t\t\t\tit = normal(gen) * _InferParams.NoiseScale;\n\t\t\tSamplerInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));\n\t\t}\n\t\tfloat Time[] = { t_start };\n\t\tint64_t OneShape[] = { 1 };\n\t\tSamplerInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, Time, 1, OneShape, 1));\n\t\tSamplerInTensors.emplace_back(std::move(EncoderOut[1]));\n\t\tconst auto dt = (t_end - t_start) / float(step);\n\n\t\tauto PredOut = MoeVSSampler::GetMoeVSReflowSampler(_InferParams.ReflowSampler, velocity, melBins, _callback, memory_info)->Sample(SamplerInTensors, step, dt, Scale, _Process);\n\t\t\n\t\ttry\n\t\t{\n\t\t\tReflowOut = after->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tafterInput.data(),\n\t\t\t\tPredOut.data(),\n\t\t\t\tafterInput.size(),\n\t\t\t\tafterOutput.data(),\n\t\t\t\tafterOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e1)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()))\n\t\t}\n\n\t\tReflowOut.emplace_back(std::move(EncoderOut[2]));\n\n\t\ttry\n\t\t{\n\t\t\tfinaOut = GetCurrentVocoder()->Run(Ort::RunOptions{nullptr},\n\t\t\t\tnsfInput.data(),\n\t\t\t\tReflowOut.data(),\n\t\t\t\tGetCurrentVocoder()->GetInputCount(),\n\t\t\t\tnsfOutput.data(),\n\t\t\t\tnsfOutput.size());\n\t\t}\n\t\tcatch (Ort::Exception& e3)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\n\t\t}\n\n\t\tauto DiffOutputAudioSize = finaOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\tstd::vector<int16_t> DiffPCMOutput(DiffOutputAudioSize);\n\t\t{\n\t\t\tauto DiffOutputAudioData = finaOut[0].GetTensorData<float>();\n\t\t\tauto OutputAudioData = DiffPCMOutput.data();\n\t\t\tconst auto OutputAudioEnd = OutputAudioData + DiffPCMOutput.size();\n\t\t\twhile (OutputAudioData != OutputAudioEnd)\n\t\t\t\t*(OutputAudioData++) = (int16_t)(Clamp(*(DiffOutputAudioData++)) * 32766.f);\n\t\t}\n\t\tconst auto dstWavLen = (_Slice.OrgLen * int64_t(_samplingRate)) / (int)(_InferParams.SrcSamplingRate);\n\t\tDiffPCMOutput.resize(dstWavLen);\n\t\treturn DiffPCMOutput;\n\t}\n\tconst auto len = size_t(_Slice.OrgLen * int64_t(_samplingRate) / (int)(_InferParams.SrcSamplingRate));\n\treturn { len, 0i16, std::allocator<int16_t>() };\n}\n\nstd::vector<std::wstring> ReflowSvc::Inference(std::wstring& _Paths,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\n{\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\n\tstd::vector<std::wstring> _Lens = GetOpenFileNameMoeVS();\n\tstd::vector<std::wstring> AudioFolders;\n\tfor (auto& path : _Lens)\n\t{\n\t\tpath = std::regex_replace(path, std::wregex(L\"\\\\\\\\\"), L\"/\");\n\t\tauto PCMData = AudioPreprocess().codec(path, (int)(_InferParams.SrcSamplingRate));\n\t\tauto SlicePos = SliceAudio(PCMData, _SlicerSettings);\n\t\tauto Audio = GetAudioSlice(PCMData, SlicePos, _SlicerSettings);\n\t\tAudio.Path = path;\n\t\tPreProcessAudio(Audio);\n\t\tstd::vector<int16_t> _data = SliceInference(Audio, _InferParams);\n\n\t\tstd::wstring OutFolder = GetCurrentFolder() + L\"/Outputs/\" + path.substr(path.rfind(L'/') + 1, path.rfind(L'.') - path.rfind(L'/') - 1);\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\t\tif (SpeakerIdx >= SpeakerCount)\n\t\t\tSpeakerIdx = SpeakerCount;\n\t\tif (SpeakerIdx < 0)\n\t\t\tSpeakerIdx = 0;\n\t\tOutFolder += L\"-Params-(-NoiseScale=\" +\n\t\t\tstd::to_wstring(_InferParams.NoiseScale) +\n\t\t\tL\"-Speaker=\" +\n\t\t\t(EnableCharaMix ? std::wstring(L\"SpeakerMix\") : std::to_wstring(SpeakerIdx)) +\n\t\t\tL\"-Seed=\" +\n\t\t\tstd::to_wstring(_InferParams.Seed) +\n\t\t\tL\"-Sampler=\" +\n\t\t\t_InferParams.Sampler +\n\t\t\tL\"-F0Method=\" +\n\t\t\t_InferParams.F0Method + L\")\";\n\t\tif (_waccess((OutFolder + L\".wav\").c_str(), 0) != -1)\n\t\t{\n\t\t\tfor (size_t idx = 0; idx < 99999999; ++idx)\n\t\t\t\tif (_waccess((OutFolder + L\" (\" + std::to_wstring(idx) + L\").wav\").c_str(), 0) == -1)\n\t\t\t\t{\n\t\t\t\t\tOutFolder += L\" (\" + std::to_wstring(idx) + L\").wav\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\t\telse\n\t\t\tOutFolder += L\".wav\";\n\t\tAudioFolders.emplace_back(OutFolder);\n\t\tInferTools::Wav::WritePCMData(_samplingRate, 1, _data, OutFolder);\n\t}\n\treturn AudioFolders;\n}\n\nstd::vector<int16_t> ReflowSvc::InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\n\tauto step = (int64_t)_InferParams.Step;\n\tif (step > MaxStep) step = MaxStep;\n\tauto hubertin = InferTools::InterpResample<float>(PCMData, srcSr, 16000);\n\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\tif (SpeakerIdx >= SpeakerCount)\n\t\tSpeakerIdx = SpeakerCount;\n\tif (SpeakerIdx < 0)\n\t\tSpeakerIdx = 0;\n\tstd::mt19937 gen(int(_InferParams.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\n\tconst int64_t inputShape[3] = { 1i64,1i64,(int64_t)hubertin.size() };\n\tstd::vector<Ort::Value> inputTensorshu;\n\tinputTensorshu.emplace_back(Ort::Value::CreateTensor(*memory_info, hubertin.data(), hubertin.size(), inputShape, 3));\n\tstd::vector<Ort::Value> hubertOut;\n\n\tconst auto RealSteps = step;\n\t_callback(0, RealSteps);\n\n\ttry {\n\t\thubertOut = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\thubertInput.data(),\n\t\t\tinputTensorshu.data(),\n\t\t\tinputTensorshu.size(),\n\t\t\thubertOutput.data(),\n\t\t\thubertOutput.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\n\t}\n\tconst auto HubertSize = hubertOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tconst auto HubertOutPutData = hubertOut[0].GetTensorMutableData<float>();\n\tconst auto HubertOutPutShape = hubertOut[0].GetTensorTypeAndShapeInfo().GetShape();\n\tinputTensorshu.clear();\n\tif (HubertOutPutShape[2] != HiddenUnitKDims)\n\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\n\n\tstd::vector HiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\n\n\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\n\t{\n\t\tconst auto clus_size = HubertOutPutShape[1];\n\t\tconst auto pts = Cluster->find(HiddenUnits.data(), long(SpeakerIdx), clus_size);\n\t\tfor (size_t indexs = 0; indexs < HiddenUnits.size(); ++indexs)\n\t\t\tHiddenUnits[indexs] = HiddenUnits[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\n\t}\n\n\tconst auto HubertLen = int64_t(HubertSize) / HiddenUnitKDims;\n\tconst int64_t F0Shape[] = { 1, int64_t(PCMData.size() / HopSize) };\n\tconst int64_t HiddenUnitShape[] = { 1, HubertLen, HiddenUnitKDims };\n\tconstexpr int64_t CharaEmbShape[] = { 1 };\n\tconst int64_t CharaMixShape[] = { F0Shape[1], SpeakerCount };\n\n\tconst auto F0Extractor = MoeVSF0Extractor::GetF0Extractor(_InferParams.F0Method, _samplingRate, HopSize);\n\tauto F0Data = F0Extractor->ExtractF0(PCMData, PCMData.size() / HopSize);\n\tfor (auto& ifo : F0Data)\n\t\tifo *= (float)pow(2.0, static_cast<double>(_InferParams.Keys) / 12.0);\n\tF0Data = _TensorExtractor->GetInterpedF0(InferTools::InterpFunc(F0Data, long(F0Data.size()), long(F0Shape[1])));\n\tstd::vector<int64_t> Alignment = _TensorExtractor->GetAligments(F0Shape[1], HubertLen);\n\tint64_t CharaEmb[] = { SpeakerIdx };\n\n\tstd::vector<Ort::Value> EncoderTensors;\n\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tHiddenUnits.data(),\n\t\tHubertSize,\n\t\tHiddenUnitShape,\n\t\t3\n\t));\n\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tAlignment.data(),\n\t\tF0Shape[1],\n\t\tF0Shape,\n\t\t2\n\t));\n\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tF0Data.data(),\n\t\tF0Shape[1],\n\t\tF0Shape,\n\t\t2\n\t));\n\n\tstd::vector<const char*> InputNamesEncoder;\n\tstd::vector<float> Volume, SpkMap;\n\n\tif (EnableVolume)\n\t{\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"volume\", \"spk_mix\" };\n\t\tVolume = ExtractVolume(PCMData, HopSize);\n\t\tif (abs(int64_t(Volume.size()) - int64_t(F0Data.size())) > 3)\n\t\t\tVolume = InferTools::InterpFunc(ExtractVolume(PCMData, HopSize), long(Volume.size()), long(F0Shape[1]));\n\t\telse\n\t\t\tVolume.resize(F0Data.size(), 0.f);\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tVolume.data(),\n\t\t\tF0Shape[1],\n\t\t\tF0Shape,\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"spk_mix\" };\n\n\tif (EnableCharaMix)\n\t{\n\t\tSpkMap = _TensorExtractor->GetCurrectSpkMixData(std::vector<std::vector<float>>(), F0Shape[1], SpeakerIdx);\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tSpkMap.data(),\n\t\t\tSpkMap.size(),\n\t\t\tCharaMixShape,\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t{\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tCharaEmb,\n\t\t\t1,\n\t\t\tCharaEmbShape,\n\t\t\t1\n\t\t));\n\t}\n\n\tstd::vector<Ort::Value> EncoderOut;\n\ttry {\n\t\tEncoderOut = encoder->Run(Ort::RunOptions{ nullptr },\n\t\t\tInputNamesEncoder.data(),\n\t\t\tEncoderTensors.data(),\n\t\t\tmin(EncoderTensors.size(), encoder->GetInputCount()),\n\t\t\tOutputNamesEncoder.data(),\n\t\t\tencoder->GetOutputCount());\n\t}\n\tcatch (Ort::Exception& e1)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: encoder\\n\") + e1.what()))\n\t}\n\n\tsize_t _Process = 0;\n\tstd::vector<Ort::Value> SamplerInTensors;\n\tstd::vector<float> initial_noise(melBins * F0Shape[1], 0.0);\n\tlong long noise_shape[4] = { 1,1,melBins,F0Shape[1] };\n\tconst auto x_size = EncoderOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tfloat t_end = max(min(1.f, _InferParams.TEnd), 0.002f);\n\tfloat t_start = max(min(_InferParams.TBegin, t_end - 0.001f), 0.f);\n\tif (x_size != 1)\n\t{\n\t\tauto x_it = EncoderOut[0].GetTensorMutableData<float>();\n\t\tauto x_end = EncoderOut[0].GetTensorMutableData<float>() + x_size;\n\t\twhile (x_it != x_end) { (*(x_it++) *= t_start) += ((t_end - t_start) * normal(gen) * _InferParams.NoiseScale); }\n\t\tSamplerInTensors.emplace_back(std::move(EncoderOut[0]));\n\t}\n\telse\n\t{\n\t\tfor (auto& it : initial_noise)\n\t\t\tit = normal(gen) * _InferParams.NoiseScale;\n\t\tSamplerInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, initial_noise.data(), initial_noise.size(), noise_shape, 4));\n\t}\n\tfloat Time[] = { t_start };\n\tint64_t OneShape[] = { 1 };\n\tSamplerInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, Time, 1, OneShape, 1));\n\tSamplerInTensors.emplace_back(std::move(EncoderOut[1]));\n\tconst auto dt = (t_end - t_start) / float(step);\n\n\tauto PredOut = MoeVSSampler::GetMoeVSReflowSampler(_InferParams.ReflowSampler, velocity, melBins, _callback, memory_info)->Sample(SamplerInTensors, step, dt, Scale, _Process);\n\n\tstd::vector<Ort::Value> ReflowOut, finaOut;\n\n\ttry\n\t{\n\t\tReflowOut = after->Run(Ort::RunOptions{ nullptr },\n\t\t\tafterInput.data(),\n\t\t\tPredOut.data(),\n\t\t\tafterInput.size(),\n\t\t\tafterOutput.data(),\n\t\t\tafterOutput.size());\n\t}\n\tcatch (Ort::Exception& e1)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()))\n\t}\n\n\tReflowOut.emplace_back(std::move(EncoderOut[2]));\n\ttry\n\t{\n\t\tfinaOut = GetCurrentVocoder()->Run(Ort::RunOptions{ nullptr },\n\t\t\tnsfInput.data(),\n\t\t\tReflowOut.data(),\n\t\t\tGetCurrentVocoder()->GetInputCount(),\n\t\t\tnsfOutput.data(),\n\t\t\tnsfOutput.size());\n\t}\n\tcatch (Ort::Exception& e3)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\n\t}\n\n\tauto DiffOutputAudioSize = finaOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tstd::vector<int16_t> DiffOutput(DiffOutputAudioSize);\n\t{\n\t\tauto DiffOutputAudioData = finaOut[0].GetTensorData<float>();\n\t\tauto OutputAudioData = DiffOutput.data();\n\t\tconst auto OutputAudioEnd = OutputAudioData + DiffOutput.size();\n\t\twhile (OutputAudioData != OutputAudioEnd)\n\t\t\t*(OutputAudioData++) = (int16_t)(Clamp(*(DiffOutputAudioData++)) * 32766.f);\n\t}\n\treturn DiffOutput;\n}\n\nvoid ReflowSvc::NormMel(std::vector<float>& MelSpec) const\n{\n\tfor (auto& it : MelSpec)\n\t\tit = (it - SpecMin) / (SpecMax - SpecMin) * 2 - 1;\n}\n\nstd::vector<int16_t> ReflowSvc::ShallowDiffusionInference(\n\tstd::vector<float>& _16KAudioHubert,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\tstd::pair<std::vector<float>, int64_t>& _Mel,\n\tconst std::vector<float>& _SrcF0,\n\tconst std::vector<float>& _SrcVolume,\n\tconst std::vector<std::vector<float>>& _SrcSpeakerMap,\n\tsize_t& Process,\n\tint64_t SrcSize\n) const\n{\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\n\tstd::mt19937 gen(int(_InferParams.Seed));\n\tstd::normal_distribution<float> normal(0, 1);\n\tauto step = (int64_t)_InferParams.Step;\n\tif (step > MaxStep) step = MaxStep;\n\tstd::vector<const char*> InputNamesEncoder;\n\tconst auto _Mel_Size = _Mel.second;\n\n\tstd::vector<Ort::Value> HubertInputTensors, HubertOutputTensors;\n\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)_16KAudioHubert.size() };\n\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, _16KAudioHubert.data(), _16KAudioHubert.size(), HubertInputShape, 3));\n\ttry {\n\t\tHubertOutputTensors = hubert->Run(Ort::RunOptions{ nullptr },\n\t\t\thubertInput.data(),\n\t\t\tHubertInputTensors.data(),\n\t\t\tHubertInputTensors.size(),\n\t\t\thubertOutput.data(),\n\t\t\thubertOutput.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\n\t}\n\n\tint64_t SpeakerIdx = _InferParams.SpeakerId;\n\tif (SpeakerIdx >= SpeakerCount)\n\t\tSpeakerIdx = SpeakerCount;\n\tif (SpeakerIdx < 0)\n\t\tSpeakerIdx = 0;\n\n\tconst auto HubertLength = HubertOutputTensors[0].GetTensorTypeAndShapeInfo().GetShape()[1];\n\tconst int64_t FrameShape[] = { 1, _Mel_Size };\n\tconst int64_t CharaMixShape[] = { _Mel_Size, SpeakerCount };\n\tconstexpr int64_t OneShape[] = { 1 };\n\tint64_t CharaEmb[] = { SpeakerIdx };\n\n\tauto Alignment = _TensorExtractor->GetAligments(_Mel_Size, HubertLength);\n\tAlignment.resize(FrameShape[1]);\n\tauto F0Data = InferTools::InterpFunc(_SrcF0, long(_SrcF0.size()), long(FrameShape[1]));\n\tstd::vector<float> Volume, SpkMap;\n\n\tstd::vector<Ort::Value> EncoderTensors;\n\tEncoderTensors.emplace_back(std::move(HubertOutputTensors[0]));\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tAlignment.data(),\n\t\tFrameShape[1],\n\t\tFrameShape,\n\t\t2\n\t));\n\n\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info,\n\t\tF0Data.data(),\n\t\tFrameShape[1],\n\t\tFrameShape,\n\t\t2\n\t));\n\n\tif (EnableVolume)\n\t{\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"volume\", \"spk_mix\" };\n\t\tVolume = InferTools::InterpFunc(_SrcVolume, long(_SrcVolume.size()), long(FrameShape[1]));\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tVolume.data(),\n\t\t\tFrameShape[1],\n\t\t\tFrameShape,\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t\tInputNamesEncoder = { \"hubert\", \"mel2ph\", \"f0\", \"spk_mix\" };\n\n\tif (EnableCharaMix)\n\t{\n\t\tSpkMap = _TensorExtractor->GetCurrectSpkMixData(_SrcSpeakerMap, FrameShape[1], CharaEmb[0]);\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tSpkMap.data(),\n\t\t\tSpkMap.size(),\n\t\t\tCharaMixShape,\n\t\t\t2\n\t\t));\n\t}\n\telse\n\t{\n\t\tEncoderTensors.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info,\n\t\t\tCharaEmb,\n\t\t\t1,\n\t\t\tOneShape,\n\t\t\t1\n\t\t));\n\t}\n\n\tstd::vector<Ort::Value> EncoderOut;\n\ttry {\n\t\tEncoderOut = encoder->Run(Ort::RunOptions{ nullptr },\n\t\t\tInputNamesEncoder.data(),\n\t\t\tEncoderTensors.data(),\n\t\t\tmin(EncoderTensors.size(), encoder->GetInputCount()),\n\t\t\tOutputNamesEncoder.data(),\n\t\t\tencoder->GetOutputCount());\n\t}\n\tcatch (Ort::Exception& e1)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: encoder\\n\") + e1.what()))\n\t}\n\n\tNormMel(_Mel.first);\n\tlong long noise_shape[4] = { 1,1,melBins,_Mel_Size };\n\tstd::vector<Ort::Value> SamplerInTensors;\n\tfloat t_end = max(min(1.f, _InferParams.TEnd), 0.002f);\n\tfloat t_start = max(min(_InferParams.TBegin, t_end - 0.001f), 0.f);\n\tSamplerInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, _Mel.first.data(), _Mel.first.size(), noise_shape, 4));\n\tauto x_it = SamplerInTensors[0].GetTensorMutableData<float>();\n\tauto x_end = SamplerInTensors[0].GetTensorMutableData<float>() + _Mel.first.size();\n\twhile (x_it != x_end) { (*(x_it++) *= t_start) += ((t_end - t_start) * normal(gen) * _InferParams.NoiseScale); }\n\tfloat Time[] = { t_start };\n\tSamplerInTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, Time, 1, OneShape, 1));\n\tSamplerInTensors.emplace_back(std::move(EncoderOut[1]));\n\tconst auto dt = (t_end - t_start) / float(step);\n\n\tauto PredOut = MoeVSSampler::GetMoeVSReflowSampler(_InferParams.ReflowSampler, velocity, melBins, _callback, memory_info)->Sample(SamplerInTensors, step, dt, Scale, Process);\n\n\tstd::vector<Ort::Value> ReflowOut, finaOut;\n\ttry\n\t{\n\t\tReflowOut = after->Run(Ort::RunOptions{ nullptr },\n\t\t\tafterInput.data(),\n\t\t\tPredOut.data(),\n\t\t\tafterInput.size(),\n\t\t\tafterOutput.data(),\n\t\t\tafterOutput.size());\n\t}\n\tcatch (Ort::Exception& e1)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: pred\\n\") + e1.what()))\n\t}\n\n\tReflowOut.emplace_back(std::move(EncoderTensors[2]));\n\ttry\n\t{\n\t\tfinaOut = GetCurrentVocoder()->Run(Ort::RunOptions{ nullptr },\n\t\t\tnsfInput.data(),\n\t\t\tReflowOut.data(),\n\t\t\tGetCurrentVocoder()->GetInputCount(),\n\t\t\tnsfOutput.data(),\n\t\t\tnsfOutput.size());\n\t}\n\tcatch (Ort::Exception& e3)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Nsf\\n\") + e3.what()))\n\t}\n\n\tauto DiffOutputAudioSize = finaOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\tstd::vector<int16_t> DiffOutput(DiffOutputAudioSize);\n\t{\n\t\tauto DiffOutputAudioData = finaOut[0].GetTensorData<float>();\n\t\tauto OutputAudioData = DiffOutput.data();\n\t\tconst auto OutputAudioEnd = OutputAudioData + DiffOutput.size();\n\t\twhile (OutputAudioData != OutputAudioEnd)\n\t\t\t*(OutputAudioData++) = (int16_t)(Clamp(*(DiffOutputAudioData++)) * 32766.f);\n\t}\n\tconst auto dstWavLen = (SrcSize * int64_t(_samplingRate)) / (int)(_InferParams.SrcSamplingRate);\n\tDiffOutput.resize(dstWavLen);\n\treturn DiffOutput;\n}\n\nMoeVoiceStudioCoreEnd\n"
  },
  {
    "path": "libsvc/Modules/src/Models/SVC.cpp",
    "content": "﻿#include \"../../header/Models/SVC.hpp\"\n#include \"../../header/InferTools/F0Extractor/F0ExtractorManager.hpp\"\n\nMoeVoiceStudioCoreHeader\n\nSingingVoiceConversion::SingingVoiceConversion(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) : MoeVoiceStudioModule(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioSingingVoiceConversion\");\n}\n\nSingingVoiceConversion::~SingingVoiceConversion()\n{\n\tdelete hubert;\n\thubert = nullptr;\n}\n\nstd::vector<std::wstring> SingingVoiceConversion::Inference(std::wstring& _Paths,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\n{\n\tMoeVSNotImplementedError;\n}\n\nstd::vector<int16_t> SingingVoiceConversion::InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\tMoeVSNotImplementedError;\n}\n\nstd::vector<int16_t> SingingVoiceConversion::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\n{\n\tMoeVSNotImplementedError;\n}\n\nstd::vector<int16_t> SingingVoiceConversion::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const\n{\n\tMoeVSNotImplementedError;\n}\n\nstd::vector<float> SingingVoiceConversion::ExtractVolume(const std::vector<int16_t>& OrgAudio, int hop_size)\n{\n\tstd::vector<double> Audio;\n\tAudio.reserve(OrgAudio.size() * 2);\n\tAudio.insert(Audio.end(), hop_size, double(OrgAudio[0]) / 32768.);\n\tfor (const auto i : OrgAudio)\n\t\tAudio.emplace_back((double)i / 32768.);\n\tAudio.insert(Audio.end(), hop_size, double(OrgAudio[OrgAudio.size() - 1]) / 32768.);\n\tconst size_t n_frames = (OrgAudio.size() / hop_size) + 1;\n\tstd::vector<float> volume(n_frames);\n\tfor (auto& i : Audio)\n\t\ti = pow(i, 2);\n\tint64_t index = 0;\n\tfor (auto& i : volume)\n\t{\n\t\ti = sqrt((float)InferTools::getAvg(Audio.begin()._Ptr + index * hop_size, Audio.begin()._Ptr + (index + 1) * hop_size));\n\t\t++index;\n\t}\n\treturn volume;\n}\n\nstd::vector<float> SingingVoiceConversion::ExtractVolume(const std::vector<double>& OrgAudio) const\n{\n\tstd::vector<double> Audio;\n\tAudio.reserve(OrgAudio.size() * 2);\n\tAudio.insert(Audio.end(), HopSize, OrgAudio[0]);\n\tAudio.insert(Audio.end(), OrgAudio.begin(), OrgAudio.end());\n\tAudio.insert(Audio.end(), HopSize, OrgAudio[OrgAudio.size() - 1]);\n\tconst size_t n_frames = (OrgAudio.size() / HopSize) + 1;\n\tstd::vector<float> volume(n_frames);\n\tfor (auto& i : Audio)\n\t\ti = pow(i, 2);\n\tint64_t index = 0;\n\tfor (auto& i : volume)\n\t{\n\t\ti = sqrt((float)InferTools::getAvg(Audio.begin()._Ptr + index * HopSize, Audio.begin()._Ptr + (index + 1) * HopSize));\n\t\t++index;\n\t}\n\treturn volume;\n}\n\nMoeVSProjectSpace::MoeVoiceStudioSvcData SingingVoiceConversion::GetAudioSlice(const std::vector<int16_t>& input,\n\tconst std::vector<size_t>& _slice_pos,\n\tconst InferTools::SlicerSettings& _slicer)\n{\n\tMoeVSProjectSpace::MoeVoiceStudioSvcData audio_slice;\n\tfor (size_t i = 1; i < _slice_pos.size(); i++)\n\t{\n\t\tMoeVSProjectSpace::MoeVoiceStudioSvcSlice _CurSlice;\n\t\tconst bool is_not_mute = abs(InferTools::getAvg((input.data() + _slice_pos[i - 1]), (input.data() + _slice_pos[i]))) > _slicer.Threshold;\n\t\t_CurSlice.IsNotMute = is_not_mute;\n\t\t_CurSlice.OrgLen = long(_slice_pos[i] - _slice_pos[i - 1]);\n\t\tif (is_not_mute)\n\t\t\t_CurSlice.Audio = { (input.data() + _slice_pos[i - 1]), (input.data() + _slice_pos[i]) };\n\t\telse\n\t\t\t_CurSlice.Audio.clear();\n\t\taudio_slice.Slices.emplace_back(std::move(_CurSlice));\n\t}\n\treturn audio_slice;\n}\n\nvoid SingingVoiceConversion::PreProcessAudio(MoeVSProjectSpace::MoeVoiceStudioSvcData& input,\n\tint __SamplingRate, int __HopSize, const std::wstring& _f0_method)\n{\n\tconst auto F0Extractor = MoeVSF0Extractor::GetF0Extractor(_f0_method, __SamplingRate, __HopSize);\n\tconst auto num_slice = input.Slices.size();\n\tfor (size_t i = 0; i < num_slice; ++i)\n\t{\n\t\tif (input.Slices[i].IsNotMute)\n\t\t{\n\t\t\tinput.Slices[i].F0 = F0Extractor->ExtractF0(input.Slices[i].Audio, input.Slices[i].Audio.size() / __HopSize);\n\t\t\tinput.Slices[i].Volume = ExtractVolume(input.Slices[i].Audio, __HopSize);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tinput.Slices[i].F0.clear();\n\t\t\tinput.Slices[i].Volume.clear();\n\t\t}\n\t\tinput.Slices[i].Speaker.clear();\n\t}\n}\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libsvc/Modules/src/Models/VitsSvc.cpp",
    "content": "﻿#include \"../../header/Models/VitsSvc.hpp\"\r\n#include \"../../header/InferTools/AvCodec/AvCodeResample.h\"\r\n#include \"../../header/InferTools/F0Extractor/F0ExtractorManager.hpp\"\r\n#include <random>\r\n#include \"../../header/Logger/MoeSSLogger.hpp\"\r\n#include \"../../header/InferTools/TensorExtractor/TensorExtractorManager.hpp\"\r\n#include <regex>\r\n\r\n#include \"../../header/Modules.hpp\"\r\n\r\nMoeVoiceStudioCoreHeader\r\n\r\nvoid VitsSvc::Destory()\r\n{\r\n\tdelete hubert;\r\n\thubert = nullptr;\r\n\r\n\tdelete VitsSvcModel;\r\n\tVitsSvcModel = nullptr;\r\n}\r\n\r\nVitsSvc::~VitsSvc()\r\n{\r\n\tlogger.log(L\"[Info] unloading VitsSvc Models\");\r\n\tDestory();\r\n\tlogger.log(L\"[Info] VitsSvc Models unloaded\");\r\n}\r\n\r\nVitsSvc::VitsSvc(const MJson& _Config, const ProgressCallback& _ProgressCallback,\r\n\tExecutionProviders ExecutionProvider_,\r\n\tunsigned DeviceID_, unsigned ThreadCount_):\r\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\r\n{\r\n\tMoeVSClassName(L\"MoeVoiceStudioVitsSingingVoiceConversion\");\r\n\r\n\t//Check Folder\r\n\tif (_Config[\"Folder\"].IsNull())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"folder\\\" (Model Folder)\")\r\n\tif (!_Config[\"Folder\"].IsString())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Must Be String\")\r\n\tconst auto _folder = to_wide_string(_Config[\"Folder\"].GetString());\r\n\tconst auto cluster_folder = GetCurrentFolder() + L\"/Models/\" + _folder;\r\n\tif (_folder.empty())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Can Not Be Empty\")\r\n\tconst std::wstring _path = GetCurrentFolder() + L\"/Models/\" + _folder + L\"/\" + _folder;\r\n\r\n\tif (_Config[\"Hubert\"].IsNull())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Hubert\\\" (Hubert Folder)\")\r\n\tif (!_Config[\"Hubert\"].IsString())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Must Be String\")\r\n\tconst std::wstring HuPath = to_wide_string(_Config[\"Hubert\"].GetString());\r\n\tif (HuPath.empty())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Hubert\\\" (Hubert Folder) Can Not Be Empty\")\r\n\r\n\tstd::map<std::string, std::wstring> _PathDict;\r\n\t_PathDict[\"Cluster\"] = cluster_folder;\r\n\t_PathDict[\"Hubert\"] = (GetCurrentFolder() + L\"/hubert/\" + HuPath + L\".onnx\");\r\n\t_PathDict[\"RVC\"] = (_path + L\"_RVC.onnx\");\r\n\t_PathDict[\"SoVits\"] = (_path + L\"_SoVits.onnx\");\r\n\tif (_Config[\"ShallowDiffusion\"].IsString())\r\n\t{\r\n\t\tconst std::wstring ShallowDiffusionConf = GetCurrentFolder() + L\"/Models/\" + to_wide_string(_Config[\"ShallowDiffusion\"].GetString()) + L\".json\";\r\n\t\t_PathDict[\"ShallowDiffusionConfig\"] = ShallowDiffusionConf;\r\n\t\tif (_Config[\"MelOperator\"].IsString())\r\n\t\t\t_PathDict[\"MelOperator\"] = GetCurrentFolder() + L\"/MelOps\" + to_wide_string(_Config[\"MelOperator\"].GetString()) + L\".onnx\";\r\n\t\telse\r\n\t\t\t_PathDict[\"MelOperator\"] = GetCurrentFolder() + L\"/MelOps.onnx\";\r\n\t}\r\n\r\n\tlogger.log(\"[Model Loader] Prepeocess Complete!\");\r\n\tload(_PathDict, _Config, _ProgressCallback, ExecutionProvider_, DeviceID_, ThreadCount_, true);\r\n}\r\n\r\nVitsSvc::VitsSvc(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\r\n\tExecutionProviders ExecutionProvider_,\r\n\tunsigned DeviceID_, unsigned ThreadCount_) :\r\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\r\n{\r\n\tMoeVSClassName(L\"MoeVoiceStudioVitsSingingVoiceConversion\");\r\n\tload(_PathDict, _Config, _ProgressCallback, ExecutionProvider_, DeviceID_, ThreadCount_, false);\r\n}\r\n\r\nVitsSvc::VitsSvc(const Hparams& _Hps, const ProgressCallback& _ProgressCallback, ExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) :\r\n\tSingingVoiceConversion(ExecutionProvider_, DeviceID_, ThreadCount_)\r\n{\r\n\tMoeVSClassName(L\"MoeVoiceStudioVitsSingingVoiceConversion\");\r\n\r\n\t_samplingRate = max(_Hps.SamplingRate, 2000);\r\n\tHopSize = max(_Hps.HopSize, 1);\r\n\tHiddenUnitKDims = max(_Hps.HiddenUnitKDims, 1);\r\n\tSpeakerCount = max(_Hps.SpeakerCount, 1);\r\n\tEnableVolume = _Hps.EnableVolume;\r\n\tEnableCharaMix = _Hps.EnableCharaMix;\r\n\tVitsSvcVersion = _Hps.TensorExtractor;\r\n\r\n#ifdef MOEVSDMLPROVIDER\r\n\tif (ExecutionProvider_ == ExecutionProviders::DML && VitsSvcVersion == L\"SoVits4.0-DDSP\")\r\n\t\tLibDLVoiceCodecThrow(\"[Error] DirectXMl Not Support SoVits4.0V2, Please Use Cuda Or Cpu\")\r\n#endif\r\n\r\n\t_callback = _ProgressCallback;\r\n\r\n\tif (!_Hps.Cluster.Type.empty())\r\n\t{\r\n\t\tClusterCenterSize = _Hps.Cluster.ClusterCenterSize;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tCluster = MoeVoiceStudioCluster::GetMoeVSCluster(_Hps.Cluster.Type, _Hps.Cluster.Path, HiddenUnitKDims, ClusterCenterSize);\r\n\t\t\tEnableCluster = true;\r\n\t\t}\r\n\t\tcatch (std::exception& e)\r\n\t\t{\r\n\t\t\tlogger.error(e.what());\r\n\t\t\tEnableCluster = false;\r\n\t\t}\r\n\t}\r\n\r\n\ttry\r\n\t{\r\n\t\tlogger.log(L\"[Info] loading VitsSvcModel Models\");\r\n\t\thubert = new Ort::Session(*env, _Hps.HubertPath.c_str(), *session_options);\r\n\t\tVitsSvcModel = new Ort::Session(*env, _Hps.VitsSvc.VitsSvc.c_str(), *session_options);\r\n\t\tlogger.log(L\"[Info] VitsSvcModel Models loaded\");\r\n\t}\r\n\tcatch (Ort::Exception& _exception)\r\n\t{\r\n\t\tDestory();\r\n\t\tLibDLVoiceCodecThrow(_exception.what())\r\n\t}\r\n\r\n\tif (VitsSvcModel->GetInputCount() == 4 && VitsSvcVersion != L\"SoVits3.0\")\r\n\t\tVitsSvcVersion = L\"SoVits2.0\";\r\n\r\n\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others _others_param;\r\n\t_others_param.Memory = *memory_info;\r\n\ttry\r\n\t{\r\n\t\t_TensorExtractor = GetTensorExtractor(VitsSvcVersion, 48000, _samplingRate, HopSize, EnableCharaMix, EnableVolume, HiddenUnitKDims, SpeakerCount, _others_param);\r\n\t}\r\n\tcatch (std::exception& e)\r\n\t{\r\n\t\tDestory();\r\n\t\tLibDLVoiceCodecThrow(e.what())\r\n\t}\r\n}\r\n\r\nvoid VitsSvc::load(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback, ExecutionProviders ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_, bool MoeVoiceStudioFrontEnd)\r\n{\r\n\r\n\t//Check SamplingRate\r\n\tif (_Config[\"Rate\"].IsNull())\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Rate\\\" (SamplingRate)\")\r\n\tif (_Config[\"Rate\"].IsInt() || _Config[\"Rate\"].IsInt64())\r\n\t\t_samplingRate = _Config[\"Rate\"].GetInt();\r\n\telse\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Rate\\\" (SamplingRate) Must Be Int/Int64\")\r\n\r\n\tlogger.log(L\"[Info] Current Sampling Rate is\" + std::to_wstring(_samplingRate));\r\n\r\n\tif (!_Config[\"SoVits3\"].IsNull() && _Config[\"SoVits3\"].GetBool())\r\n\t\tVitsSvcVersion = L\"SoVits3.0\";\r\n\telse if (!_Config[\"SoVits2\"].IsNull() && _Config[\"SoVits2\"].GetBool())\r\n\t\tVitsSvcVersion = L\"SoVits2.0\";\r\n\telse if (!_Config[\"SoVits2.0\"].IsNull() && _Config[\"SoVits2.0\"].GetBool())\r\n\t\tVitsSvcVersion = L\"SoVits2.0\";\r\n\telse if (!_Config[\"SoVits3.0\"].IsNull() && _Config[\"SoVits3.0\"].GetBool())\r\n\t\tVitsSvcVersion = L\"SoVits3.0\";\r\n\telse if (_Config[\"Type\"].GetString() == std::string(\"RVC\"))\r\n\t\tVitsSvcVersion = L\"RVC\";\r\n\r\n\tif (!_Config[\"SoVits4.0V2\"].IsNull() && _Config[\"SoVits4.0V2\"].GetBool())\n\t\tVitsSvcVersion = L\"SoVits4.0-DDSP\";\r\n\r\n#ifdef MOEVSDMLPROVIDER\r\n\tif (ExecutionProvider_ == ExecutionProviders::DML && VitsSvcVersion == L\"SoVits4.0-DDSP\")\r\n\t\tLibDLVoiceCodecThrow(\"[Error] DirectXMl Not Support SoVits4.0V2, Please Use Cuda Or Cpu\")\r\n#endif\r\n\r\n\tif (!(_Config[\"Hop\"].IsInt() || _Config[\"Hop\"].IsInt64()))\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must Exist And Must Be Int\")\r\n\tHopSize = _Config[\"Hop\"].GetInt();\r\n\r\n\tif (!(_Config[\"HiddenSize\"].IsInt() || _Config[\"HiddenSize\"].IsInt64()))\r\n\t\tlogger.log(L\"[Warn] Missing Field \\\"HiddenSize\\\", Use Default Value (256)\");\r\n\telse\r\n\t\tHiddenUnitKDims = _Config[\"HiddenSize\"].GetInt();\r\n\r\n\tif (!_Config[\"CharaMix\"].IsBool())\r\n\t\tlogger.log(L\"[Warn] Missing Field \\\"CharaMix\\\", Use Default Value (False)\");\r\n\telse\r\n\t\tEnableCharaMix = _Config[\"CharaMix\"].GetBool();\r\n\r\n\tif (_Config[\"Cluster\"].IsString())\r\n\t{\r\n\t\tconst auto clus = to_wide_string(_Config[\"Cluster\"].GetString());\r\n\t\tif (!(_Config[\"KMeansLength\"].IsInt() || _Config[\"KMeansLength\"].IsInt64()))\r\n\t\t\tlogger.log(L\"[Warn] Missing Field \\\"KMeansLength\\\", Use Default Value (10000)\");\r\n\t\telse\r\n\t\t\tClusterCenterSize = _Config[\"KMeansLength\"].GetInt();\r\n\t\ttry\r\n\t\t{\r\n\t\t\tCluster = MoeVoiceStudioCluster::GetMoeVSCluster(clus, _PathDict.at(\"Cluster\"), HiddenUnitKDims, ClusterCenterSize);\r\n\t\t\tEnableCluster = true;\r\n\t\t}\r\n\t\tcatch (std::exception& e)\r\n\t\t{\r\n\t\t\tlogger.error(e.what());\r\n\t\t\tEnableCluster = false;\r\n\t\t}\r\n\t}\r\n\r\n\tif (HopSize < 1)\r\n\t\tLibDLVoiceCodecThrow(\"[Error] Hop Must > 0\")\r\n\r\n\tif (_Config[\"Volume\"].IsBool())\r\n\t\tEnableVolume = _Config[\"Volume\"].GetBool();\r\n\telse\r\n\t\tlogger.log(L\"[Warn] Missing Field \\\"Volume\\\", Use Default Value (False)\");\r\n\r\n\tif (_Config[\"Characters\"].IsArray())\r\n\t\tSpeakerCount = int64_t(_Config[\"Characters\"].Size());\r\n\r\n\t_callback = _ProgressCallback;\r\n\r\n\t//LoadModels\r\n\ttry\r\n\t{\r\n\t\tlogger.log(L\"[Info] loading VitsSvcModel Models\");\r\n\t\thubert = new Ort::Session(*env, _PathDict.at(\"Hubert\").c_str(), *session_options);\r\n\t\tif (VitsSvcVersion == L\"RVC\")\r\n\t\t\tVitsSvcModel = new Ort::Session(*env, _PathDict.at(\"RVC\").c_str(), *session_options);\r\n\t\telse\r\n\t\t\tVitsSvcModel = new Ort::Session(*env, _PathDict.at(\"SoVits\").c_str(), *session_options);\r\n\t\tlogger.log(L\"[Info] VitsSvcModel Models loaded\");\r\n\t}\r\n\tcatch (Ort::Exception& _exception)\r\n\t{\r\n\t\tDestory();\r\n\t\tLibDLVoiceCodecThrow(_exception.what())\r\n\t}\r\n\r\n\tif (VitsSvcModel->GetInputCount() == 4 && VitsSvcVersion != L\"SoVits3.0\")\r\n\t\tVitsSvcVersion = L\"SoVits2.0\";\r\n\r\n\tif (_Config[\"TensorExtractor\"].IsString())\r\n\t\tVitsSvcVersion = to_wide_string(_Config[\"TensorExtractor\"].GetString());\r\n\r\n\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others _others_param;\r\n\t_others_param.Memory = *memory_info;\r\n\ttry\r\n\t{\r\n\t\t_TensorExtractor = GetTensorExtractor(VitsSvcVersion, 48000, _samplingRate, HopSize, EnableCharaMix, EnableVolume, HiddenUnitKDims, SpeakerCount, _others_param);\r\n\t}\r\n\tcatch (std::exception& e)\r\n\t{\r\n\t\tDestory();\r\n\t\tLibDLVoiceCodecThrow(e.what())\r\n\t}\r\n}\r\n\r\nstd::vector<int16_t> VitsSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\r\n{\r\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\r\n\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Start!\");\r\n\tstd::vector<int16_t> _data;\r\n\tsize_t total_audio_size = 0;\r\n\tfor (const auto& data_size : _Slice.Slices)\r\n\t\ttotal_audio_size += data_size.OrgLen;\r\n\t_data.reserve(size_t(double(total_audio_size) * 1.5));\r\n\t_callback(0, _Slice.Slices.size());\r\n\tsize_t process = 0;\r\n\tfor (auto& CurSlice : _Slice.Slices)\r\n\t{\r\n\t\tconst auto InferDurTime = clock();\r\n\t\tconst auto CurRtn = SliceInference(CurSlice, _InferParams, process);\r\n\t\t_data.insert(_data.end(), CurRtn.data(), CurRtn.data() + CurRtn.size());\r\n\t\tif(CurSlice.IsNotMute)\r\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Segment[\" + std::to_wstring(process) + L\"] Finished! Segment Use Time: \" + std::to_wstring(clock() - InferDurTime) + L\"ms, Segment Duration: \" + std::to_wstring((size_t)CurSlice.OrgLen * 1000ull / (uint64_t)(_InferParams.SrcSamplingRate)) + L\"ms\");\r\n\t\telse\r\n\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Jump Empty Segment[\" + std::to_wstring(process) + L\"]!\");\r\n\t\t_callback(++process, _Slice.Slices.size());\r\n\t}\r\n\tlogger.log(L\"[Inferring] \\\"\" + _Slice.Path + L\"\\\" Finished\");\r\n\treturn _data;\r\n}\r\n\r\nstd::vector<int16_t> VitsSvc::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const\r\n{\r\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\r\n\tif (_Slice.IsNotMute)\r\n\t{\r\n\t\tstd::vector<float> _16KAudio, CUDAF0, CUDAVolume;\r\n\t\tstd::vector<std::vector<float>> CUDASpeaker;\r\n\r\n\t\t_16KAudio = InferTools::InterpResample(_Slice.Audio, (int)(_InferParams.SrcSamplingRate), 16000, 32768.0f);\r\n\t\tconst auto src_audio_length = _16KAudio.size();\r\n\t\tbool NeedPadding = false;\r\n\t\tif (_cur_execution_provider == ExecutionProviders::CUDA)\r\n\t\t{\r\n\t\t\tNeedPadding = _16KAudio.size() % 16000;\r\n\t\t\tconst size_t WavPaddedSize = _16KAudio.size() / 16000 + 1;\r\n\t\t\tif (NeedPadding)\r\n\t\t\t\t_16KAudio.resize(WavPaddedSize * 16000, 0.f);\r\n\t\t}\r\n\r\n\t\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)_16KAudio.size() };\r\n\t\tstd::vector<Ort::Value> HubertInputTensors, HubertOutPuts;\r\n\t\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, _16KAudio.data(), _16KAudio.size(), HubertInputShape, 3));\r\n\t\ttry {\r\n\t\t\tHubertOutPuts = hubert->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\thubertInput.data(),\r\n\t\t\t\tHubertInputTensors.data(),\r\n\t\t\t\tHubertInputTensors.size(),\r\n\t\t\t\thubertOutput.data(),\r\n\t\t\t\thubertOutput.size());\r\n\t\t}\r\n\t\tcatch (Ort::Exception& e)\r\n\t\t{\r\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\r\n\t\t}\r\n\t\tconst auto HubertSize = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\t\tconst auto HubertOutPutData = HubertOutPuts[0].GetTensorMutableData<float>();\r\n\t\tauto HubertOutPutShape = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetShape();\r\n\t\tif (HubertOutPutShape[2] != HiddenUnitKDims)\r\n\t\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\r\n\r\n\t\tstd::vector SrcHiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\r\n\r\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\r\n\t\tif (SpeakerIdx >= SpeakerCount)\r\n\t\t\tSpeakerIdx = SpeakerCount;\r\n\t\tif (SpeakerIdx < 0)\n\t\t\tSpeakerIdx = 0;\r\n\r\n\t\tconst auto max_cluster_size = int64_t((size_t)HubertOutPutShape[1] * src_audio_length / _16KAudio.size());\r\n\t\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\r\n\t\t{\r\n\t\t\tconst auto pts = Cluster->find(SrcHiddenUnits.data(), long(SpeakerIdx), max_cluster_size);\r\n\t\t\tfor (int64_t indexs = 0; indexs < max_cluster_size * HiddenUnitKDims; ++indexs)\r\n\t\t\t\tSrcHiddenUnits[indexs] = SrcHiddenUnits[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\r\n\t\t}\r\n\r\n\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::InferParams _Inference_Params;\r\n\t\t_Inference_Params.AudioSize = _Slice.Audio.size();\r\n\t\t_Inference_Params.Chara = SpeakerIdx;\r\n\t\t_Inference_Params.NoiseScale = _InferParams.NoiseScale;\r\n\t\t_Inference_Params.DDSPNoiseScale = _InferParams.DDSPNoiseScale;\r\n\t\t_Inference_Params.Seed = int(_InferParams.Seed);\r\n\t\t_Inference_Params.upKeys = _InferParams.Keys;\r\n\r\n\t\tMoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Inputs InputTensors;\r\n\r\n\t\tif (NeedPadding)\r\n\t\t{\r\n\t\t\tCUDAF0 = _Slice.F0;\r\n\t\t\tCUDAVolume = _Slice.Volume;\r\n\t\t\tCUDASpeaker = _Slice.Speaker;\r\n\t\t\tconst auto src_src_audio_length = _Slice.Audio.size();\r\n\t\t\tconst size_t WavPaddedSize = ((src_src_audio_length / (int)(_InferParams.SrcSamplingRate)) + 1) * (int)(_InferParams.SrcSamplingRate);\r\n\t\t\tconst size_t AudioPadSize = WavPaddedSize - src_src_audio_length;\r\n\t\t\tconst size_t PaddedF0Size = CUDAF0.size() + (CUDAF0.size() * AudioPadSize / src_src_audio_length);\r\n\r\n\t\t\tif (!CUDAF0.empty()) CUDAF0.resize(PaddedF0Size, 0.f);\r\n\t\t\tif (!CUDAVolume.empty()) CUDAVolume.resize(PaddedF0Size, 0.f);\r\n\t\t\tfor (auto iSpeaker : CUDASpeaker)\r\n\t\t\t{\r\n\t\t\t\tif (!iSpeaker.empty())\n\t\t\t\t\tiSpeaker.resize(PaddedF0Size, 0.f);\r\n\t\t\t}\r\n\t\t\t_Inference_Params.AudioSize = WavPaddedSize;\r\n\t\t\tInputTensors = _TensorExtractor->Extract(SrcHiddenUnits, CUDAF0, CUDAVolume, CUDASpeaker, _Inference_Params);\r\n\t\t}\r\n\t\telse\r\n\t\t\tInputTensors = _TensorExtractor->Extract(SrcHiddenUnits, _Slice.F0, _Slice.Volume, _Slice.Speaker, _Inference_Params);\r\n\r\n\t\tstd::vector<Ort::Value> finaOut;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tfinaOut = VitsSvcModel->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\tInputTensors.InputNames,\r\n\t\t\t\tInputTensors.Tensor.data(),\r\n\t\t\t\tInputTensors.Tensor.size(),\r\n\t\t\t\tsoVitsOutput.data(),\r\n\t\t\t\tsoVitsOutput.size());\r\n\t\t}\r\n\t\tcatch (Ort::Exception& e)\r\n\t\t{\r\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: VitsSvc\\n\") + e.what()))\r\n\t\t}\r\n\r\n\t\tauto VitsOutputAudioSize = finaOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\t\tstd::vector<int16_t> VitsOutput(VitsOutputAudioSize);\r\n\t\t{\r\n\t\t\tauto VitsOutputAudioData = finaOut[0].GetTensorData<float>();\r\n\t\t\tauto OutputAudioData = VitsOutput.data();\r\n\t\t\tconst auto OutputAudioEnd = OutputAudioData + VitsOutput.size();\r\n\t\t\twhile (OutputAudioData != OutputAudioEnd)\r\n\t\t\t\t*(OutputAudioData++) = (int16_t)(Clamp(*(VitsOutputAudioData++)) * 32766.f);\r\n\t\t}\r\n\r\n\t\tif(_InferParams.UseShallowDiffusion)\r\n\t\t{\r\n\t\t\tMoeVSModuleManager::ReloadMelOps(\n\t\t\t\t_InferParams.VocoderSamplingRate,\n\t\t\t\t_InferParams.VocoderHopSize,\n\t\t\t\t_InferParams.VocoderMelBins\n\t\t\t);\r\n\t\t\tconst auto TempAudio = InferTools::InterpResample(\r\n\t\t\t\tVitsOutput,\r\n\t\t\t\t_samplingRate,\r\n\t\t\t\t_InferParams.VocoderSamplingRate,\r\n\t\t\t\t32768.\r\n\t\t\t);\r\n\t\t\tauto Mel = MoeVSModuleManager::GetMelOperator()(TempAudio);\r\n\r\n\t\t\tif(_InferParams._ShallowDiffusionModel)\r\n\t\t\t{\r\n\t\t\t\tif(!_InferParams.ShallowDiffusionUseSrcAudio)\r\n\t\t\t\t{\r\n\t\t\t\t\tauto VitsOutputAudioData = finaOut[0].GetTensorData<float>();\r\n\t\t\t\t\t_16KAudio = { VitsOutputAudioData , VitsOutputAudioData + VitsOutputAudioSize };\r\n\t\t\t\t}\r\n\t\t\t\tauto SpcParams = _InferParams;\r\n\t\t\t\tstd::swap(SpcParams.SpeakerId, SpcParams.ShallowDiffuisonSpeaker);\r\n\t\t\t\tVitsOutput = ((MoeVSModuleManager::UnionSvcModel*)_InferParams._ShallowDiffusionModel)->\r\n\t\t\t\t\tShallowDiffusionInference(\r\n\t\t\t\t\t\t_16KAudio, SpcParams, Mel,\r\n\t\t\t\t\t\tNeedPadding ? CUDAF0 : _Slice.F0,\r\n\t\t\t\t\t\tNeedPadding ? CUDAVolume : _Slice.Volume,\r\n\t\t\t\t\t\tNeedPadding ? CUDASpeaker : _Slice.Speaker,\n\t\t\t\t\t\t_Process,\n\t\t\t\t\t\t(int64_t)TempAudio.size()\r\n\t\t\t\t\t);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tauto Rf0 = NeedPadding ? CUDAF0 : _Slice.F0;\r\n\t\t\t\tif (Rf0.size() != (size_t)Mel.second)\n\t\t\t\t\tRf0 = InferTools::InterpFunc(Rf0, (long)Rf0.size(), (long)Mel.second);\r\n\t\t\t\tVitsOutput = VocoderInfer(\r\n\t\t\t\t\tMel.first,\r\n\t\t\t\t\tRf0,\r\n\t\t\t\t\t_InferParams.VocoderMelBins,\r\n\t\t\t\t\tMel.second,\r\n\t\t\t\t\tmemory_info,\r\n\t\t\t\t\t_InferParams._VocoderModel\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/*if (shallow_diffusion && stft_operator && _InferParams.UseShallowDiffusion)\r\n\t\t{\r\n\t\t\tauto PCMAudioBegin = finaOut[0].GetTensorData<float>();\r\n\t\t\tauto PCMAudioEnd = PCMAudioBegin + finaOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\t\t\tauto MelSpec = MelExtractor(PCMAudioBegin, PCMAudioEnd);\r\n\t\t\tauto ShallowParam = _InferParams;\r\n\t\t\tShallowParam.SrcSamplingRate = _samplingRate;\r\n\t\t\tauto ShallowDiffusionOutput = shallow_diffusion->ShallowDiffusionInference(\n\t\t\t\tRawWav,\n\t\t\t\tShallowParam,\n\t\t\t\tstd::move(MelSpec[0]),\n\t\t\t\tNeedPadding ? CUDAF0 : _Slice.F0,\n\t\t\t\tNeedPadding ? CUDAVolume : _Slice.Volume,\n\t\t\t\tNeedPadding ? CUDASpeaker : _Slice.Speaker\n\t\t\t);\r\n\t\t\tShallowDiffusionOutput.resize(dstWavLen, 0);\r\n\t\t\treturn ShallowDiffusionOutput;\r\n\t\t}*/\r\n\r\n\t\tconst auto dstWavLen = (_Slice.OrgLen * int64_t(_samplingRate)) / (int)(_InferParams.SrcSamplingRate);\r\n\t\tVitsOutput.resize(dstWavLen);\r\n\t\treturn VitsOutput;\r\n\t}\r\n\t//Mute clips\r\n\tconst auto len = size_t(_Slice.OrgLen * int64_t(_samplingRate) / (int)(_InferParams.SrcSamplingRate));\r\n\treturn { len, 0i16, std::allocator<int16_t>() };\r\n}\r\n\r\nstd::vector<std::wstring> VitsSvc::Inference(std::wstring& _Paths,\r\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams,\r\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\r\n{\r\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\r\n\tstd::vector<std::wstring> _Lens = GetOpenFileNameMoeVS();\r\n\tstd::vector<std::wstring> AudioFolders;\r\n\tfor (auto& path : _Lens)\r\n\t{\r\n\t\tpath = std::regex_replace(path, std::wregex(L\"\\\\\\\\\"), L\"/\");\r\n\t\tauto PCMData = AudioPreprocess().codec(path, (int)(_InferParams.SrcSamplingRate));\r\n\t\tauto slicer_setting = _SlicerSettings;\r\n\t\tslicer_setting.SamplingRate = (int)(_InferParams.SrcSamplingRate);\r\n\t\tauto SlicePos = SliceAudio(PCMData, slicer_setting);\r\n\t\tauto Audio = GetAudioSlice(PCMData, SlicePos, slicer_setting);\r\n\t\tAudio.Path = path;\r\n\t\tPreProcessAudio(Audio, (int)(_InferParams.SrcSamplingRate), 512, _InferParams.F0Method);\r\n\t\tstd::vector<int16_t> _data = SliceInference(Audio, _InferParams);\r\n\r\n\t\tstd::wstring OutFolder = GetCurrentFolder() + L\"/Outputs/\" + path.substr(path.rfind(L'/') + 1, path.rfind(L'.') - path.rfind(L'/') - 1);\r\n\t\tint64_t SpeakerIdx = _InferParams.SpeakerId;\r\n\t\tif (SpeakerIdx >= SpeakerCount)\r\n\t\t\tSpeakerIdx = SpeakerCount;\r\n\t\tif (SpeakerIdx < 0)\n\t\t\tSpeakerIdx = 0;\r\n\t\tOutFolder += L\"-Params-(-NoiseScale=\" +\r\n\t\t\tstd::to_wstring(_InferParams.NoiseScale) +\r\n\t\t\tL\"-Speaker=\" +\r\n\t\t\t(EnableCharaMix ? std::wstring(L\"SpeakerMix\") : std::to_wstring(SpeakerIdx)) +\r\n\t\t\tL\"-Seed=\" +\r\n\t\t\tstd::to_wstring(_InferParams.Seed) +\r\n\t\t\tL\"-F0Method=\" +\r\n\t\t\t_InferParams.F0Method + L\")\";\r\n\t\tif (_waccess((OutFolder + L\".wav\").c_str(), 0) != -1)\r\n\t\t{\r\n\t\t\tfor (size_t idx = 0; idx < 99999999; ++idx)\r\n\t\t\t\tif (_waccess((OutFolder + L\" (\" + std::to_wstring(idx) + L\").wav\").c_str(), 0) == -1)\r\n\t\t\t\t{\r\n\t\t\t\t\tOutFolder += L\" (\" + std::to_wstring(idx) + L\").wav\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\tOutFolder += L\".wav\";\r\n\t\tAudioFolders.emplace_back(OutFolder);\r\n\t\t_data = InferTools::InterpResample(_data, _samplingRate, (int)(_InferParams.SrcSamplingRate), 1i16);\n\t\tInferTools::Wav::WritePCMData((int)(_InferParams.SrcSamplingRate), 1, _data, OutFolder);\r\n\t}\r\n\treturn AudioFolders;\r\n}\r\n\r\nstd::vector<int16_t> VitsSvc::InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\r\n{\r\n\t_TensorExtractor->SetSrcSamplingRates(_InferParams.SrcSamplingRate);\r\n\tauto hubertin = InferTools::InterpResample<float>(PCMData, srcSr, 16000);\r\n\tint64_t SpeakerIdx = _InferParams.SpeakerId;\r\n\tif (SpeakerIdx >= SpeakerCount)\r\n\t\tSpeakerIdx = SpeakerCount;\r\n\tif (SpeakerIdx < 0)\n\t\tSpeakerIdx = 0;\r\n\tstd::mt19937 gen(int(_InferParams.Seed));\r\n\tstd::normal_distribution<float> normal(0, 1);\r\n\tfloat noise_scale = _InferParams.NoiseScale;\r\n\tfloat ddsp_noise_scale = _InferParams.DDSPNoiseScale;\r\n\r\n\tconst int64_t inputShape[3] = { 1i64,1i64,(int64_t)hubertin.size() };\r\n\tstd::vector<Ort::Value> inputTensorshu;\r\n\tinputTensorshu.emplace_back(Ort::Value::CreateTensor(*memory_info, hubertin.data(), hubertin.size(), inputShape, 3));\r\n\tstd::vector<Ort::Value> hubertOut;\r\n\r\n\ttry {\r\n\t\thubertOut = hubert->Run(Ort::RunOptions{ nullptr },\r\n\t\t\thubertInput.data(),\r\n\t\t\tinputTensorshu.data(),\r\n\t\t\tinputTensorshu.size(),\r\n\t\t\thubertOutput.data(),\r\n\t\t\thubertOutput.size());\r\n\t}\r\n\tcatch (Ort::Exception& e)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()))\r\n\t}\r\n\tauto HubertSize = hubertOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\tauto HubertOutPutData = hubertOut[0].GetTensorMutableData<float>();\r\n\tauto HubertOutPutShape = hubertOut[0].GetTensorTypeAndShapeInfo().GetShape();\r\n\tinputTensorshu.clear();\r\n\tif (HubertOutPutShape[2] != HiddenUnitKDims)\r\n\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\")\r\n\r\n\tstd::vector HiddenUnitsSrc(HubertOutPutData, HubertOutPutData + HubertSize);\r\n\r\n\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\r\n\t{\r\n\t\tconst auto clus_size = HubertOutPutShape[1];\r\n\t\tconst auto pts = Cluster->find(HiddenUnitsSrc.data(), long(SpeakerIdx), clus_size);\r\n\t\tfor (size_t indexs = 0; indexs < HiddenUnitsSrc.size(); ++indexs)\r\n\t\t\tHiddenUnitsSrc[indexs] = HiddenUnitsSrc[indexs] * (1.f - _InferParams.ClusterRate) + pts[indexs] * _InferParams.ClusterRate;\r\n\t}\r\n\r\n\tconst auto HubertLen = int64_t(HubertSize) / HiddenUnitKDims;\r\n\tint64_t F0Shape[] = { 1, int64_t(PCMData.size() / HopSize) };\r\n\tint64_t HiddenUnitShape[] = { 1, HubertLen, HiddenUnitKDims };\r\n\tconstexpr int64_t LengthShape[] = { 1 };\r\n\tint64_t CharaEmbShape[] = { 1 };\r\n\tint64_t CharaMixShape[] = { F0Shape[1], SpeakerCount };\r\n\tint64_t RandnShape[] = { 1, 192, F0Shape[1] };\r\n\tconst int64_t IstftShape[] = { 1, 2048, F0Shape[1] };\r\n\tint64_t RandnCount = F0Shape[1] * 192;\r\n\tconst int64_t IstftCount = F0Shape[1] * 2048;\r\n\r\n\tstd::vector<float> RandnInput, IstftInput, UV, InterpedF0;\r\n\tstd::vector<int64_t> alignment;\r\n\tint64_t XLength[1] = { HubertLen };\r\n\tstd::vector<int64_t> Nsff0;\r\n\t//auto SoVitsInput = soVitsInput;\r\n\tint64_t Chara[] = { SpeakerIdx };\r\n\tstd::vector<float> charaMix;\r\n\r\n\tconst auto F0Extractor = MoeVSF0Extractor::GetF0Extractor(_InferParams.F0Method, _samplingRate, HopSize);\r\n\r\n\tauto srcF0Data = F0Extractor->ExtractF0(PCMData, PCMData.size() / HopSize);\r\n\tfor (auto& ifo : srcF0Data)\r\n\t\tifo *= (float)pow(2.0, static_cast<double>(_InferParams.Keys) / 12.0);\r\n\tstd::vector<float> HiddenUnits;\r\n\tstd::vector<float> F0Data;\r\n\r\n\tstd::vector<Ort::Value> _Tensors;\r\n\tstd::vector<const char*> SoVitsInput = soVitsInput;\r\n\r\n\t//Compatible with all versions\r\n\tif (VitsSvcVersion == L\"SoVits3.0\")\r\n\t{\r\n\t\tint64_t upSample = _samplingRate / 16000;\r\n\t\tHiddenUnits.reserve(HubertSize * (upSample + 1));\r\n\t\tfor (int64_t itS = 0; itS < HiddenUnitShape[1]; ++itS)\r\n\t\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\r\n\t\t\t\tHiddenUnits.insert(HiddenUnits.end(), HiddenUnitsSrc.begin() + itS * HiddenUnitKDims, HiddenUnitsSrc.begin() + (itS + 1) * HiddenUnitKDims);\r\n\t\tHiddenUnitShape[1] *= upSample;\r\n\t\tHubertSize *= upSample;\r\n\t\tF0Data = _TensorExtractor->GetInterpedF0(InferTools::InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1])));\r\n\t\tF0Shape[1] = HiddenUnitShape[1];\r\n\t\tXLength[0] = HiddenUnitShape[1];\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, F0Data.data(), F0Data.size(), F0Shape, 2));\r\n\t}\r\n\telse if (VitsSvcVersion == L\"SoVits2.0\")\r\n\t{\r\n\t\tHiddenUnits = std::move(HiddenUnitsSrc);\r\n\t\tF0Shape[1] = HiddenUnitShape[1];\r\n\t\tF0Data = InferTools::InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1]));\r\n\t\tXLength[0] = HiddenUnitShape[1];\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\r\n\t\tNsff0 = _TensorExtractor->GetNSFF0(F0Data);\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Nsff0.data(), Nsff0.size(), F0Shape, 2));\r\n\t}\r\n\telse if (VitsSvcVersion == L\"RVC\")\r\n\t{\r\n\t\tconstexpr int64_t upSample = 2;\r\n\t\tHiddenUnits.reserve(HubertSize * (upSample + 1));\r\n\t\tfor (int64_t itS = 0; itS < HiddenUnitShape[1]; ++itS)\r\n\t\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\r\n\t\t\t\tHiddenUnits.insert(HiddenUnits.end(), HiddenUnitsSrc.begin() + itS * HiddenUnitKDims, HiddenUnitsSrc.begin() + (itS + 1) * HiddenUnitKDims);\r\n\t\tHiddenUnitShape[1] *= upSample;\r\n\t\tHubertSize *= upSample;\r\n\t\tF0Data = InferTools::InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1]));\r\n\t\tF0Shape[1] = HiddenUnitShape[1];\r\n\t\tXLength[0] = HiddenUnitShape[1];\r\n\t\tRandnCount = 192 * F0Shape[1];\r\n\t\tRandnShape[2] = F0Shape[1];\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\r\n\t\tInterpedF0 = _TensorExtractor->GetInterpedF0(F0Data);\r\n\t\tNsff0 = _TensorExtractor->GetNSFF0(InterpedF0);\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Nsff0.data(), Nsff0.size(), F0Shape, 2));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), InterpedF0.size(), F0Shape, 2));\r\n\t\tSoVitsInput = RVCInput;\r\n\t\tRandnInput = std::vector<float>(RandnCount, 0.f);\r\n\t\tfor (auto& it : RandnInput)\r\n\t\t\tit = normal(gen) * noise_scale;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tHiddenUnits = std::move(HiddenUnitsSrc);\r\n\t\tF0Data = InferTools::InterpFunc(srcF0Data, long(srcF0Data.size()), long(F0Shape[1]));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\r\n\t\tInterpedF0 = _TensorExtractor->GetInterpedF0(F0Data);\r\n\t\talignment = _TensorExtractor->GetAligments(F0Shape[1], HubertLen);\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), InterpedF0.size(), F0Shape, 2));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, alignment.data(), InterpedF0.size(), F0Shape, 2));\r\n\t\tif (VitsSvcVersion != L\"SoVits4.0-DDSP\")\r\n\t\t{\r\n\t\t\tUV = _TensorExtractor->GetUV(F0Data);\r\n\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\" };\r\n\t\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, UV.data(), UV.size(), F0Shape, 2));\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\" };\r\n\t\t\tIstftInput = std::vector<float>(IstftCount, ddsp_noise_scale);\r\n\t\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, IstftInput.data(), IstftInput.size(), IstftShape, 3));\r\n\t\t}\r\n\t\tRandnInput = std::vector<float>(RandnCount, 0.f);\r\n\t\tfor (auto& it : RandnInput)\r\n\t\t\tit = normal(gen) * noise_scale;\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RandnInput.data(), RandnCount, RandnShape, 3));\r\n\t}\r\n\r\n\r\n\tif (EnableCharaMix)\r\n\t{\r\n\t\tCharaMixShape[0] = F0Shape[1];\r\n\t\tstd::vector charaMap(SpeakerCount, 0.f);\r\n\t\tcharaMap[SpeakerIdx] = 1.f;\r\n\t\tcharaMix.reserve((SpeakerCount + 1) * F0Shape[1]);\r\n\t\tfor (int64_t index = 0; index < F0Shape[1]; ++index)\r\n\t\t\tcharaMix.insert(charaMix.end(), charaMap.begin(), charaMap.end());\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, charaMix.data(), charaMix.size(), CharaMixShape, 2));\r\n\t}\r\n\telse\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, Chara, 1, CharaEmbShape, 1));\r\n\r\n\tif (VitsSvcVersion == L\"RVC\")\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RandnInput.data(), RandnCount, RandnShape, 3));\r\n\r\n\tstd::vector<float> VolumeData;\r\n\r\n\tif (EnableVolume)\r\n\t{\r\n\t\tSoVitsInput.emplace_back(\"vol\");\r\n\t\tVolumeData = ExtractVolume(PCMData, HopSize);\r\n\t\tVolumeData.resize(F0Shape[1], 0.f);\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, VolumeData.data(), F0Shape[1], F0Shape, 2));\r\n\t}\r\n\r\n\tstd::vector<Ort::Value> finaOut;\r\n\r\n\tfinaOut = VitsSvcModel->Run(Ort::RunOptions{ nullptr },\r\n\t\tSoVitsInput.data(),\r\n\t\t_Tensors.data(),\r\n\t\t_Tensors.size(),\r\n\t\tsoVitsOutput.data(),\r\n\t\tsoVitsOutput.size());\r\n\r\n\tconst auto dstWavLen = finaOut[0].GetTensorTypeAndShapeInfo().GetShape()[2];\r\n\tauto retdata = finaOut[0].GetTensorData<float>();\r\n\tstd::vector<int16_t> TempVecWav(dstWavLen, 0);\r\n\tauto TempVecWavData = TempVecWav.data();\r\n\tfor (int64_t bbb = 0; bbb < dstWavLen; bbb++)\r\n\t\t*(TempVecWavData++) = static_cast<int16_t>(Clamp(*(retdata++)) * 32766.0f);\r\n\tif(VitsSvcVersion == L\"RVC\")\n\t\tTempVecWav = InferTools::InterpResample(TempVecWav, _samplingRate, (int)(_InferParams.SrcSamplingRate), 1i16);\r\n\treturn TempVecWav;\r\n}\n\n/*std::vector<Ort::Value> VitsSvc::MelExtractor(const float* PCMAudioBegin, const float* PCMAudioEnd) const\r\n{\r\n\tstd::vector<float> _SRAudio{PCMAudioBegin, PCMAudioEnd};\r\n\t_SRAudio = InferTools::InterpResample(_SRAudio, _samplingRate, 16000, 1.f);\r\n\tconst auto _MelLength = int64_t(_SRAudio.size() * shallow_diffusion->GetSamplingRate() / 16000ull / shallow_diffusion->GetHopSize());\r\n\tconst auto _SpecLength = (int64_t)ceil(double(_SRAudio.size()) / 16000. * 100.);\r\n\tauto Alignment = _TensorExtractor->GetAligments(_MelLength, _SpecLength);\r\n\tAlignment.resize(_MelLength);\r\n\tstd::vector<Ort::Value> AudioTensors;\r\n\tconst int64_t AudioInputShape[] = { 1,1,int64_t(_SRAudio.size()) };\r\n\tconst int64_t AligShape[] = { 1,_MelLength };\r\n\tAudioTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, _SRAudio.data(), _SRAudio.size(), AudioInputShape, 3));\r\n\tAudioTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, Alignment.data(), Alignment.size(), AligShape, 2));\r\n\ttry\r\n\t{\r\n\t\treturn stft_operator->Run(Ort::RunOptions{ nullptr },\n\t\t\tStftInput.data(),\n\t\t\tAudioTensors.data(),\n\t\t\tAudioTensors.size(),\n\t\t\tStftOutput.data(),\n\t\t\tStftOutput.size()\n\t\t);\r\n\t}\r\n\tcatch (Ort::Exception& e)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: ShallowDiffusionStftOperator\\n\") + e.what()).c_str());\r\n\t}\r\n}*/\r\n\r\n//已弃用（旧MoeSS的推理函数）\r\n#ifdef MOESSDFN\r\nstd::vector<int16_t> VitsSvc::InferBatch() const\r\n{\r\n\tstd::wstring RawPath;\r\n\tint ret = InsertMessageToEmptyEditBox(RawPath);\r\n\tif (ret == -1)\r\n\t\tLibDLVoiceCodecThrow(\"TTS Does Not Support Automatic Completion\");\r\n\tif (ret == -2)\r\n\t\tLibDLVoiceCodecThrow(\"Please Select Files\");\r\n\tRawPath += L'\\n';\r\n\tstd::vector<std::wstring> _Lens = CutLens(RawPath);\r\n\tconst auto params = _get_init_params();\r\n\tauto tran = static_cast<int>(params.keys);\r\n\tauto threshold = static_cast<double>(params.threshold);\r\n\tauto minLen = static_cast<unsigned long>(params.minLen);\r\n\tauto frame_len = static_cast<unsigned long>(params.frame_len);\r\n\tauto frame_shift = static_cast<unsigned long>(params.frame_shift);\r\n\tif (frame_shift < 512 || frame_shift > 10240)\r\n\t\tframe_shift = 512;\r\n\tif (frame_len < 1024 || frame_len > 20480)\r\n\t\tframe_len = 1024;\r\n\tif (frame_shift > frame_len)\r\n\t{\r\n\t\tframe_shift = 512;\r\n\t\tframe_len = 4 * 1024;\r\n\t}\r\n\tif (minLen < 3 || minLen > 30)\r\n\t\tminLen = 3;\r\n\tif (threshold < 10.0 || threshold > 2000.0)\r\n\t\tthreshold = 30.0;\r\n\tint64_t charEmb = params.chara;\r\n\r\n\tstd::mt19937 gen(int(params.seed));\r\n\tstd::normal_distribution<float> normal(0, 1);\r\n\tfloat noise_scale = params.noise_scale;\r\n\tfloat ddsp_noise_scale = params.noise_scale_w;\r\n\tif (noise_scale > 50.0f)\r\n\t\tnoise_scale = 1.0f;\r\n\tif (ddsp_noise_scale > 50.0f)\r\n\t\tddsp_noise_scale = 1.0f;\r\n\tfor (auto& path : _Lens)\r\n\t{\r\n\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + path + L'\\\"');\r\n\t\tsize_t proc = 0;\r\n\t\tif (path[0] == L'\\\"')\r\n\t\t\tpath = path.substr(1);\r\n\t\tif (path[path.length() - 1] == L'\\\"')\r\n\t\t\tpath.pop_back();\r\n\t\tstd::vector<int16_t> _data;\r\n\t\t//Audio\r\n\t\tlogger.log(L\"[Inferring] PreProcessing \\\"\" + path + L\"\\\" Encoder\");\r\n\t\tauto RawWav = AudioPreprocess().codec(path, _samplingRate);\r\n\t\tauto HubertWav = AudioPreprocess().codec(path, 16000);\r\n\t\tauto info = cutWav(RawWav, threshold, minLen, static_cast<unsigned short>(frame_len), static_cast<unsigned short>(frame_shift));\r\n\t\tfor (size_t i = 1; i < info.cutOffset.size(); ++i)\r\n\t\t\tif ((info.cutOffset[i] - info.cutOffset[i - 1]) / RawWav.getHeader().bytesPerSec > 90)\r\n\t\t\t\tLibDLVoiceCodecThrow(\"Reached max slice length, please change slicer param\");\r\n\r\n\t\tconst auto LenFactor = ((double)16000 / (double)_samplingRate);\r\n\t\t_callback(proc, info.cutTag.size());\r\n\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + path + L\"\\\" Svc\");\r\n\t\tfor (size_t i = 1; i < info.cutOffset.size(); ++i)\r\n\t\t{\r\n\t\t\tif (info.cutTag[i - 1])\r\n\t\t\t{\r\n\t\t\t\tauto featureInput = F0PreProcess(_samplingRate, (short)hop);\r\n\t\t\t\tconst auto len = (info.cutOffset[i] - info.cutOffset[i - 1]) / 2;\r\n\t\t\t\tconst auto srcPos = info.cutOffset[i - 1] / 2;\r\n\t\t\t\tstd::vector<double> source(len, 0.0);\r\n\r\n\t\t\t\tfor (unsigned long long j = 0; j < len; ++j)\r\n\t\t\t\t\tsource[j] = (double)RawWav[srcPos + j] / 32768.0;\r\n\r\n\t\t\t\t//hubertIn\r\n\t\t\t\tconst auto hubertInLen = (size_t)((double)len * LenFactor);\r\n\t\t\t\tstd::vector<float> hubertin(hubertInLen, 0.0);\r\n\t\t\t\tconst auto startPos = (size_t)(((double)info.cutOffset[i - 1] / 2.0) * LenFactor);\r\n\t\t\t\tfor (size_t j = 0; j < hubertInLen; ++j)\r\n\t\t\t\t\thubertin[j] = (float)HubertWav[startPos + j] / 32768.0f;\r\n\r\n\t\t\t\t//hubert\r\n\t\t\t\tconst int64_t inputShape[3] = { 1i64,1i64,(int64_t)hubertInLen };\r\n\t\t\t\tstd::vector<Ort::Value> inputTensors;\r\n\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, hubertin.data(), hubertInLen, inputShape, 3));\r\n\t\t\t\tstd::vector<Ort::Value> hubertOut;\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\thubertOut = hubert->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\t\t\thubertInput.data(),\r\n\t\t\t\t\t\tinputTensors.data(),\r\n\t\t\t\t\t\tinputTensors.size(),\r\n\t\t\t\t\t\thubertOutput.data(),\r\n\t\t\t\t\t\thubertOutput.size());\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Ort::Exception& e)\r\n\t\t\t\t{\r\n\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()).c_str());\r\n\t\t\t\t}\r\n\t\t\t\tauto hubertOutData = hubertOut[0].GetTensorMutableData<float>();\r\n\t\t\t\tauto hubertOutLen = hubertOut[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\t\t\t\tauto hubertOutShape = hubertOut[0].GetTensorTypeAndShapeInfo().GetShape();\r\n\r\n\t\t\t\tstd::vector<long long> inputPitch1, alignment;\r\n\t\t\t\tstd::vector<float> inputPitch2;\r\n\t\t\t\tF0PreProcess::V4Return v4_return;\r\n\t\t\t\tstd::vector<float> hubOutData(hubertOutData, hubertOutData + hubertOutLen);\r\n\t\t\t\tif (SV3)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (_samplingRate / 16000 == 2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor (int64_t itS = hubertOutShape[1] - 1; itS + 1; --itS)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\thubOutData.insert(hubOutData.begin() + itS * 256, hubOutData.begin() + itS * 256, hubOutData.begin() + (itS + 1) * 256);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thubertOutShape[1] *= 2;\r\n\t\t\t\t\t\thubertOutLen *= 2;\r\n\t\t\t\t\t\tinputPitch2 = featureInput.GetF0AndOtherInput3(source.data(), (long long)len, (long long)hubertOutShape[1], (long long)tran);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (_samplingRate / 16000 == 3)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor (int64_t itS = hubertOutShape[1] - 1; itS + 1; --itS)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\thubOutData.insert(hubOutData.begin() + itS * 256, hubOutData.begin() + itS * 256, hubOutData.begin() + (itS + 1) * 256);\r\n\t\t\t\t\t\t\thubOutData.insert(hubOutData.begin() + itS * 256, hubOutData.begin() + itS * 256, hubOutData.begin() + (itS + 1) * 256);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thubertOutShape[1] *= 3;\r\n\t\t\t\t\t\thubertOutLen *= 3;\r\n\t\t\t\t\t\tinputPitch2 = featureInput.GetF0AndOtherInput3(source.data(), (long long)len, (long long)hubertOutShape[1], (long long)tran);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tLibDLVoiceCodecThrow(\"SoVits3.0 Only Support Sr: 48K,32K\");\r\n\t\t\t\t}\r\n\t\t\t\telse if (SV4)\r\n\t\t\t\t{\r\n\t\t\t\t\talignment = getAligments(len / hop, hubertOutShape[1]);\r\n\t\t\t\t\tv4_return = featureInput.GetF0AndOtherInput4(source.data(), (long long)len, tran);\r\n\t\t\t\t}\r\n\t\t\t\telse if (_modelType == modelType::RVC)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int64_t itS = hubertOutShape[1] - 1; itS + 1; --itS)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thubOutData.insert(hubOutData.begin() + itS * 256, hubOutData.begin() + itS * 256, hubOutData.begin() + (itS + 1) * 256);\r\n\t\t\t\t\t}\r\n\t\t\t\t\thubertOutShape[1] *= 2;\r\n\t\t\t\t\thubertOutLen *= 2;\r\n\t\t\t\t\tauto f0data = featureInput.GetF0AndOtherInputR(source.data(), (long long)len, (long long)hubertOutShape[1], (long long)tran);\r\n\t\t\t\t\tinputPitch1 = std::move(f0data.f0);\r\n\t\t\t\t\tinputPitch2 = std::move(f0data.f0f);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tinputPitch1 = featureInput.GetF0AndOtherInput(source.data(), (long long)len, (long long)hubertOutShape[1], (long long)tran);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinputTensors.clear();\r\n\t\t\t\tauto SoVitsInput = soVitsInput;\r\n\t\t\t\t//vits\r\n\t\t\t\tconstexpr long long ashape[1] = { 1 };\r\n\t\t\t\tlong long ainput[1] = { hubertOutShape[1] };\r\n\t\t\t\tconst long long bshape[2] = { 1, featureInput.getLen() };\r\n\t\t\t\tlong long cdata[1] = { charEmb };\r\n\t\t\t\tconstexpr long long cshape[1] = { 1 };\r\n\t\t\t\tconst int64 zinputShape[3] = { 1,192,featureInput.getLen() };\r\n\t\t\t\tconst int64 zinputCount = featureInput.getLen() * 192;\r\n\t\t\t\tstd::vector<float> zinput(zinputCount, 0.0);\r\n\r\n\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, hubOutData.data(), hubertOutLen, hubertOutShape.data(), 3));\r\n\t\t\t\tstd::vector<float> T_Window(2048 * featureInput.getLen(), ddsp_noise_scale);\r\n\r\n\t\t\t\tint64_t T_WindowShape[] = { 1, 2048, featureInput.getLen() };\r\n\t\t\t\tif (!SV4)\r\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, ainput, 1, ashape, 1));\r\n\t\t\t\tif (SV3)\r\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor<float>(*memory_info, inputPitch2.data(), featureInput.getLen(), bshape, 2));\r\n\t\t\t\telse if (SV4)\r\n\t\t\t\t{\r\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, v4_return.f0.data(), featureInput.getLen(), bshape, 2));\r\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, alignment.data(), featureInput.getLen(), bshape, 2));\r\n\r\n\t\t\t\t\tif (!SVV2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, v4_return.uv.data(), featureInput.getLen(), bshape, 2));\r\n\t\t\t\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\" };\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, T_Window.data(), T_Window.size(), T_WindowShape, 3));\r\n\t\t\t\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\" };\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (auto& it : zinput)\r\n\t\t\t\t\t\tit = normal(gen) * noise_scale;\r\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, zinput.data(), zinputCount, zinputShape, 3));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, inputPitch1.data(), featureInput.getLen(), bshape, 2));\r\n\t\t\t\t\tif (_modelType == modelType::RVC)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, inputPitch2.data(), featureInput.getLen(), bshape, 2));\r\n\t\t\t\t\t\tSoVitsInput = RVCInput;\r\n\t\t\t\t\t\tfor (auto& it : zinput)\r\n\t\t\t\t\t\t\tit = normal(gen) * noise_scale;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, cdata, 1, cshape, 1));\r\n\t\t\t\tstd::vector<Ort::Value> finaOut;\r\n\t\t\t\tif (_modelType == modelType::RVC)\r\n\t\t\t\t\tinputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, zinput.data(), zinputCount, zinputShape, 3));\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tfinaOut = VitsSvcModel->Run(Ort::RunOptions{ nullptr },\r\n\t\t\t\t\t\tSoVitsInput.data(),\r\n\t\t\t\t\t\tinputTensors.data(),\r\n\t\t\t\t\t\tinputTensors.size(),\r\n\t\t\t\t\t\tsoVitsOutput.data(),\r\n\t\t\t\t\t\tsoVitsOutput.size());\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Ort::Exception& e)\r\n\t\t\t\t{\r\n\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: sovits\\n\") + e.what()).c_str());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst auto shapeOut = finaOut[0].GetTensorTypeAndShapeInfo().GetShape();\r\n\t\t\t\tconst auto dstWavLen = int64_t(len);\r\n\t\t\t\tstd::vector<int16_t> TempVecWav(dstWavLen, 0);\r\n\t\t\t\tif (shapeOut[2] < dstWavLen)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int64_t bbb = 0; bbb < shapeOut[2]; bbb++)\r\n\t\t\t\t\t\tTempVecWav[bbb] = static_cast<int16_t>(finaOut[0].GetTensorData<float>()[bbb] * 32768.0f);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int64_t bbb = 0; bbb < dstWavLen; bbb++)\r\n\t\t\t\t\t\tTempVecWav[bbb] = static_cast<int16_t>(finaOut[0].GetTensorData<float>()[bbb] * 32768.0f);\r\n\t\t\t\t}\r\n\t\t\t\t_data.insert(_data.end(), TempVecWav.data(), TempVecWav.data() + (dstWavLen));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tconst auto len = (info.cutOffset[i] - info.cutOffset[i - 1]) / 2;\r\n\t\t\t\tconst auto data = new int16_t[len];\r\n\t\t\t\tmemset(data, 0, len * 2);\r\n\t\t\t\t_data.insert(_data.end(), data, data + len);\r\n\t\t\t\tdelete[] data;\r\n\t\t\t}\r\n\t\t\t_callback(++proc, info.cutTag.size());\r\n\t\t}\r\n\t\tlogger.log(L\"[Inferring] \\\"\" + path + L\"\\\" Finished\");\r\n\t\tif (_Lens.size() == 1)\r\n\t\t{\r\n\t\t\tlogger.log(L\"[Info] Finished, Send To FrontEnd\");\r\n\t\t\treturn _data;\r\n\t\t}\r\n\t\tstd::wstring outPutPath = GetCurrentFolder() + L\"\\\\OutPuts\\\\\" + path.substr(path.rfind(L'\\\\') + 1, path.rfind(L'.')) + L'-' + std::to_wstring(uint64_t(path.data())) + L\".wav\";\r\n\t\tlogger.log(L\"[Inferring] Write To \\\"\" + outPutPath + L'\\\"');\r\n\t\tWav(_samplingRate, long(_data.size()) * 2, _data.data()).Writef(outPutPath);\r\n\t}\r\n\tlogger.log(L\"[Info] Finished\");\r\n\treturn {};\r\n}\r\n#endif\r\n\r\n/*\r\nstd::vector<Ort::Value> VitsSvc::InferSliceTensor(const MoeVSProjectSpace::MoeVSAudioSlice& _Slice, size_t SliceIdx,\r\n\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams, std::vector<Ort::Value>& _Tensors,\r\n\tstd::vector<const char*>& SoVitsInput) const\r\n{\r\n\tint64_t charEmb = _InferParams.SpeakerId;\r\n\tfloat noise_scale = _InferParams.NoiseScale;\r\n\tfloat ddsp_noise_scale = _InferParams.DDSPNoiseScale;\r\n\r\n\tauto RawWav = TensorPreprocess::MoeVoiceStudioTensorExtractor::InterpResample(_Slice.Audio[SliceIdx], 48000, 16000, 32768.0f);\r\n\tconst int64_t HubertInputShape[3] = { 1i64,1i64,(int64_t)RawWav.size() };\r\n\tstd::vector<Ort::Value> HubertInputTensors, HubertOutPuts;\r\n\tHubertInputTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RawWav.data(), RawWav.size(), HubertInputShape, 3));\r\n\ttry {\r\n\t\tHubertOutPuts = hubert->Run(Ort::RunOptions{ nullptr },\r\n\t\t\thubertInput.data(),\r\n\t\t\tHubertInputTensors.data(),\r\n\t\t\tHubertInputTensors.size(),\r\n\t\t\thubertOutput.data(),\r\n\t\t\thubertOutput.size());\r\n\t}\r\n\tcatch (Ort::Exception& e)\r\n\t{\r\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: hubert\\n\") + e.what()).c_str());\r\n\t}\r\n\tauto HubertSize = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetElementCount();\r\n\tauto HubertOutPutData = HubertOutPuts[0].GetTensorMutableData<float>();\r\n\tauto HubertOutPutShape = HubertOutPuts[0].GetTensorTypeAndShapeInfo().GetShape();\r\n\tHubertInputTensors.clear();\r\n\tif (HubertOutPutShape[2] != HiddenUnitKDims)\r\n\t\tLibDLVoiceCodecThrow(\"HiddenUnitKDims UnMatch\");\r\n\r\n\tstd::vector srcHiddenUnits(HubertOutPutData, HubertOutPutData + HubertSize);\r\n\r\n\tif (EnableCluster && _InferParams.ClusterRate > 0.001f)\r\n\t{\r\n\t\tfor (int64_t indexs = 0; indexs < HubertOutPutShape[1]; ++indexs)\r\n\t\t{\r\n\t\t\tconst auto curbeg = srcHiddenUnits.data() + indexs * HubertOutPutShape[2];\r\n\t\t\tconst auto curend = srcHiddenUnits.data() + (indexs + 1) * HubertOutPutShape[2];\r\n\t\t\tconst auto hu = Cluster->find({ curbeg ,curend }, long(charEmb));\r\n\t\t\tfor (int64_t ind = 0; ind < HubertOutPutShape[2]; ++ind)\r\n\t\t\t\t*(curbeg + ind) = *(curbeg + ind) * (1.f - _InferParams.ClusterRate) + hu[ind] * _InferParams.ClusterRate;\r\n\t\t}\r\n\t}\r\n\r\n\tconst auto HubertLen = int64_t(HubertSize) / HiddenUnitKDims;\r\n\tint64_t F0Shape[] = { 1, int64_t(_Slice.Audio[SliceIdx].size() * _samplingRate / 48000 / HopSize) };\r\n\tint64_t HiddenUnitShape[] = { 1, HubertLen, HiddenUnitKDims };\r\n\tconstexpr int64_t LengthShape[] = { 1 };\r\n\tint64_t CharaEmbShape[] = { 1 };\r\n\tint64_t CharaMixShape[] = { F0Shape[1], SpeakerCount };\r\n\tint64_t RandnShape[] = { 1, 192, F0Shape[1] };\r\n\tconst int64_t IstftShape[] = { 1, 2048, F0Shape[1] };\r\n\tint64_t RandnCount = F0Shape[1] * 192;\r\n\tconst int64_t IstftCount = F0Shape[1] * 2048;\r\n\r\n\tstd::vector<float> RandnInput, IstftInput, UV, InterpedF0;\r\n\tstd::vector<int64_t> alignment;\r\n\tint64_t XLength[1] = { HubertLen };\r\n\tstd::vector<int64_t> Nsff0;\r\n\t//auto SoVitsInput = soVitsInput;\r\n\tint64_t Chara[] = { charEmb };\r\n\tstd::vector<float> charaMix;\r\n\r\n\tauto srcF0Data = _Slice.F0[SliceIdx];\r\n\tfor (auto& ifo : srcF0Data)\r\n\t\tifo *= (float)pow(2.0, static_cast<double>(_InferParams.Keys) / 12.0);\r\n\tstd::vector<float> HiddenUnits;\r\n\tstd::vector<float> F0Data;\r\n\r\n\t//Compatible with all versions\r\n\tif (SoVits3)\r\n\t{\r\n\t\tint64_t upSample = _samplingRate / 16000;\r\n\t\tHiddenUnits.reserve(HubertSize * (upSample + 1));\r\n\t\tfor (int64_t itS = 0; itS < HiddenUnitShape[1]; ++itS)\r\n\t\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\r\n\t\t\t\tHiddenUnits.insert(HiddenUnits.end(), srcHiddenUnits.begin() + itS * HiddenUnitKDims, srcHiddenUnits.begin() + (itS + 1) * HiddenUnitKDims);\r\n\t\tHiddenUnitShape[1] *= upSample;\r\n\t\tHubertSize *= upSample;\r\n\t\tF0Data = GetInterpedF0(InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1])));\r\n\t\tF0Shape[1] = HiddenUnitShape[1];\r\n\t\tXLength[0] = HiddenUnitShape[1];\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, F0Data.data(), F0Data.size(), F0Shape, 2));\r\n\t}\r\n\telse if (SoVits2)\r\n\t{\r\n\t\tHiddenUnits = std::move(srcHiddenUnits);\r\n\t\tF0Shape[1] = HiddenUnitShape[1];\r\n\t\tF0Data = InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1]));\r\n\t\tXLength[0] = HiddenUnitShape[1];\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\r\n\t\tNsff0 = GetNSFF0(F0Data);\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Nsff0.data(), Nsff0.size(), F0Shape, 2));\r\n\t}\r\n\telse if (_modelType == modelType::RVC)\r\n\t{\r\n\t\tconstexpr int64_t upSample = 2;\r\n\t\tHiddenUnits.reserve(HubertSize * (upSample + 1));\r\n\t\tfor (int64_t itS = 0; itS < HiddenUnitShape[1]; ++itS)\r\n\t\t\tfor (int64_t itSS = 0; itSS < upSample; ++itSS)\r\n\t\t\t\tHiddenUnits.insert(HiddenUnits.end(), srcHiddenUnits.begin() + itS * HiddenUnitKDims, srcHiddenUnits.begin() + (itS + 1) * HiddenUnitKDims);\r\n\t\tHiddenUnitShape[1] *= upSample;\r\n\t\tHubertSize *= upSample;\r\n\t\tF0Data = InterpFunc(srcF0Data, long(srcF0Data.size()), long(HiddenUnitShape[1]));\r\n\t\tF0Shape[1] = HiddenUnitShape[1];\r\n\t\tXLength[0] = HiddenUnitShape[1];\r\n\t\tRandnCount = 192 * F0Shape[1];\r\n\t\tRandnShape[2] = F0Shape[1];\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, XLength, 1, LengthShape, 1));\r\n\t\tInterpedF0 = GetInterpedF0(F0Data);\r\n\t\tNsff0 = GetNSFF0(InterpedF0);\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor<long long>(*memory_info, Nsff0.data(), Nsff0.size(), F0Shape, 2));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), InterpedF0.size(), F0Shape, 2));\r\n\t\tSoVitsInput = RVCInput;\r\n\t\tRandnInput = std::vector<float>(RandnCount, 0.f);\r\n\t\tfor (auto& it : RandnInput)\r\n\t\t\tit = normal(gen) * noise_scale;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tHiddenUnits = std::move(srcHiddenUnits);\r\n\t\tF0Data = InterpFunc(srcF0Data, long(srcF0Data.size()), long(F0Shape[1]));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, HiddenUnits.data(), HubertSize, HiddenUnitShape, 3));\r\n\t\tInterpedF0 = GetInterpedF0(F0Data);\r\n\t\talignment = GetAligments(F0Shape[1], HubertLen);\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, InterpedF0.data(), InterpedF0.size(), F0Shape, 2));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, alignment.data(), InterpedF0.size(), F0Shape, 2));\r\n\t\tif (!SoVitsDDSP)\r\n\t\t{\r\n\t\t\tUV = GetUV(F0Data);\r\n\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"uv\", \"noise\", \"sid\" };\r\n\t\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, UV.data(), UV.size(), F0Shape, 2));\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tSoVitsInput = { \"c\", \"f0\", \"mel2ph\", \"t_window\", \"noise\", \"sid\" };\r\n\t\t\tIstftInput = std::vector<float>(IstftCount, ddsp_noise_scale);\r\n\t\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, IstftInput.data(), IstftInput.size(), IstftShape, 3));\r\n\t\t}\r\n\t\tRandnInput = std::vector<float>(RandnCount, 0.f);\r\n\t\tfor (auto& it : RandnInput)\r\n\t\t\tit = normal(gen) * noise_scale;\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RandnInput.data(), RandnCount, RandnShape, 3));\r\n\t}\r\n\r\n\r\n\tif (EnableCharaMix)\r\n\t{\r\n\t\tif (SpeakerCount > 1)\r\n\t\t\tcharaMix = GetCurrectSpkMixData(_Slice.Speaker[SliceIdx], F0Shape[1]);\r\n\t\tCharaMixShape[0] = F0Shape[1];\r\n\t\tif (charaMix.empty())\r\n\t\t{\r\n\t\t\tstd::vector charaMap(SpeakerCount, 0.f);\r\n\t\t\tcharaMap[charEmb] = 1.f;\r\n\t\t\tcharaMix.reserve((SpeakerCount + 1) * F0Shape[1]);\r\n\t\t\tfor (int64_t index = 0; index < F0Shape[1]; ++index)\r\n\t\t\t\tcharaMix.insert(charaMix.end(), charaMap.begin(), charaMap.end());\r\n\t\t}\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, charaMix.data(), charaMix.size(), CharaMixShape, 2));\r\n\t}\r\n\telse\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, Chara, 1, CharaEmbShape, 1));\r\n\r\n\tif (_modelType == modelType::RVC)\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RandnInput.data(), RandnCount, RandnShape, 3));\r\n\r\n\tstd::vector<float> VolumeData;\r\n\r\n\tif (EnableVolume)\r\n\t{\r\n\t\tSoVitsInput.emplace_back(\"vol\");\r\n\t\tVolumeData = InterpFunc(_Slice.Volume[SliceIdx], long(_Slice.Volume[SliceIdx].size()), long(F0Shape[1]));\r\n\t\t_Tensors.emplace_back(Ort::Value::CreateTensor(*memory_info, VolumeData.data(), F0Shape[1], F0Shape, 2));\r\n\t}\r\n\r\n\treturn VitsSvcModel->Run(Ort::RunOptions{ nullptr },\r\n\t   SoVitsInput.data(),\r\n\t   _Tensors.data(),\r\n\t   _Tensors.size(),\r\n\t   soVitsOutput.data(),\r\n\t   soVitsOutput.size());\r\n}\r\n */\r\n\r\n#ifdef WIN32\r\n#ifdef MoeVSMui\r\n\r\nvoid VitsSvc::StartRT(Mui::Window::UIWindowBasic* window, const MoeVSProjectSpace::MoeVSSvcParams& _Params)\r\n{\r\n\tif (RTSTAT)\r\n\t\treturn;\r\n\r\n\tstd::wstring error;\r\n\r\n\trecoder = new MRecorder();\r\n\trecoder->InitRecorder(error, _samplingRate, 1, 16, Mui::_m_uint(_samplingRate * 0.5));\r\n\trecoder->Start();\r\n\r\n\taudio_player = new Mui::Render::MDS_AudioPlayer(window);\r\n\taudio_player->InitAudioPlayer(error);\r\n\r\n\taudio_stream = audio_player->CreateStreamPCM(recoder->GetFrameSize(), recoder->GetSampleRate(), recoder->GetChannels(), recoder->GetBitRate(), recoder->GetBlockAlign());\r\n\taudio_player->PlayTrack(audio_stream);\r\n\r\n\temptyLen = InferPCMData(std::vector<int16_t>(recoder->GetFrameSize() / 4 * 3), _samplingRate, _Params).size();\r\n\r\n\tstd::thread RT_RECORD_THREAD = std::thread([&]()\r\n\t\t{\r\n\t\t\tlogger.log(L\"[RTInference] Recording Thread Start!\");\r\n\t\t\twhile (RTSTAT)\r\n\t\t\t{\r\n\t\t\t\tconst auto PCM = recoder->GetStreamData();\r\n\t\t\t\tif (!PCM) continue;\r\n\t\t\t\trawInputBuffer.emplace_back((int16_t*)PCM->data, (int16_t*)(PCM->data + PCM->size));\r\n\t\t\t\tdelete PCM;\r\n\t\t\t}\r\n\t\t\tlogger.log(L\"[RTInference] Recording Thread End!\");\r\n\t\t});\r\n\r\n\tstd::thread RT_INPUT_CROSSFADE_THREAD = std::thread([&]()\r\n\t\t{\r\n\t\t\tlogger.log(L\"[RTInference] Input Crossfade Thread Start!\");\r\n\t\t\t//const auto config = _get_init_params();\r\n\t\t\twhile (RTSTAT)\r\n\t\t\t{\r\n\t\t\t\tif (rawInputBuffer.size() > 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tstd::vector<int16_t> pBuffer;\r\n\t\t\t\t\tpBuffer.reserve(2 * rawInputBuffer[0].size());\r\n\t\t\t\t\tpBuffer.insert(pBuffer.end(), rawInputBuffer[0].begin(), rawInputBuffer[0].end());\r\n\t\t\t\t\tpBuffer.insert(pBuffer.end(), rawInputBuffer[1].begin(),\r\n\t\t\t\t\t\trawInputBuffer[1].begin() + int64_t(rawInputBuffer[1].size()) / 2);\r\n\t\t\t\t\tinputBuffer.emplace_back(std::move(pBuffer));\r\n\t\t\t\t\trawInputBuffer.pop_front();\r\n\t\t\t\t}\r\n\t\t\t\tif (rawInputBuffer.size() > 100)\r\n\t\t\t\t{\r\n\t\t\t\t\tlogger.log(L\"[RTInferenceWarn] Raw Input Buffer Is Too Large\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlogger.log(L\"[RTInference] Input Crossfade Thread End!\");\r\n\t\t});\r\n\r\n\tstd::thread RT_INFERENCE_THREAD = std::thread([&]()\r\n\t\t{\r\n\t\t\tlogger.log(L\"[RTInference] Inferencing Thread Start!\");\r\n\t\t\tconst auto PCMSIZE = recoder->GetFrameSize() / 2;\r\n\t\t\twhile (RTSTAT)\r\n\t\t\t{\r\n\t\t\t\t//const auto configs = _get_init_params();\r\n\t\t\t\tif (!inputBuffer.empty())\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbool zeroVector = true;\r\n\t\t\t\t\t\tfor(const auto& i16data : inputBuffer[0])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(i16data> 1600)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tzeroVector = false;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(zeroVector)\r\n\t\t\t\t\t\t\trawOutputBuffer.emplace_back(std::vector<int16_t>(emptyLen, 0));\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tauto RtRES = InferPCMData(inputBuffer[0], _samplingRate, _Params);\r\n\t\t\t\t\t\t\trawOutputBuffer.emplace_back(std::move(RtRES));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tinputBuffer.pop_front();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (std::exception& e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tRTSTAT = false;\r\n\t\t\t\t\t\tinputBuffer.clear();\r\n\t\t\t\t\t\toutputBuffer.clear();\r\n\t\t\t\t\t\trawInputBuffer.clear();\r\n\t\t\t\t\t\trawOutputBuffer.clear();\r\n\t\t\t\t\t\tLibDLVoiceCodecThrow(e.what());\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (inputBuffer.size() > 100)\r\n\t\t\t\t{\r\n\t\t\t\t\tlogger.log(L\"[RTInferenceWarn] Input Buffer Is Too Large\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlogger.log(L\"[RTInference] Inferencing Thread End!\");\r\n\t\t});\r\n\r\n\tstd::thread RT_OUTPUT_CROSSFADE_THREAD = std::thread([&]()\r\n\t\t{\r\n\t\t\tlogger.log(L\"[RTInference] OutPut Crossfade Thread Start!\");\r\n\t\t\twhile (RTSTAT)\r\n\t\t\t{\r\n\t\t\t\tif (rawOutputBuffer.size() > 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tconst auto cross_fade_size = int64_t(rawOutputBuffer[0].size()) / 3;\r\n\t\t\t\t\tconst auto PCMSIZE = cross_fade_size * 2;\r\n\t\t\t\t\tfor (int64_t i = 0; i < cross_fade_size; ++i)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trawOutputBuffer[0][PCMSIZE + i] = int16_t(((double)rawOutputBuffer[0][PCMSIZE + i] * (1.0 - (double(i) / double(cross_fade_size)))) + ((double)rawOutputBuffer[1][i] * (double(i) / double(cross_fade_size))));\r\n\t\t\t\t\t\trawOutputBuffer[1][PCMSIZE + i] = int16_t(((double)rawOutputBuffer[0][PCMSIZE + i] * (1.0 - (double(i) / double(cross_fade_size)))) + ((double)rawOutputBuffer[1][i] * (double(i) / double(cross_fade_size))));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstd::vector pBuffer(rawOutputBuffer[0].data() + cross_fade_size / 2, rawOutputBuffer[0].data() + 2 * cross_fade_size + cross_fade_size / 2);\r\n\t\t\t\t\toutputBuffer.emplace_back(std::move(pBuffer));\r\n\t\t\t\t\trawOutputBuffer.pop_front();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlogger.log(L\"[RTInference] OutPut Crossfade Thread End!\");\r\n\t\t});\r\n\r\n\tstd::thread RT_OUTPUT_THREAD = std::thread([&]()\r\n\t\t{\r\n\t\t\tlogger.log(L\"[RTInference] OutPut Thread Start!\");\r\n\t\t\tconst auto PCMSIZE = recoder->GetFrameSize();\r\n\t\t\tstd::vector<Mui::_m_byte> pBuffer(PCMSIZE);\r\n\t\t\tMui::_m_size lastSize = 0;\r\n\t\t\twhile (RTSTAT)\r\n\t\t\t{\r\n\t\t\t\tif (!outputBuffer.empty())\r\n\t\t\t\t{\r\n\t\t\t\t\t//audio_player->WriteStreamPCM(audio_stream, (Mui::_m_byte*)outputBuffer.front().data(), Mui::_m_size(RTAudioSize));\r\n\t\t\t\t\t//outputBuffer.pop_front();\r\n\t\t\t\t\tauto queue_data = (Mui::_m_byte*)outputBuffer[0].data();\r\n\t\t\t\t\tauto queue_dataSize = Mui::_m_size(outputBuffer[0].size() * 2);\r\n\t\t\t\t\twhile (queue_dataSize + lastSize >= PCMSIZE)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//每次从队列中拿走帧大小的数据\r\n\t\t\t\t\t\tconst auto dataSize = PCMSIZE - lastSize;\r\n\t\t\t\t\t\tmemcpy(pBuffer.data() + lastSize, queue_data, dataSize);\r\n\t\t\t\t\t\t//调用WriteStream 播放\r\n\t\t\t\t\t\taudio_player->WriteStreamPCM(audio_stream, pBuffer.data(), PCMSIZE);\r\n\t\t\t\t\t\t//指针偏移\r\n\t\t\t\t\t\tqueue_data += dataSize;\r\n\t\t\t\t\t\tqueue_dataSize -= dataSize;\r\n\t\t\t\t\t\tlastSize = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//如果剩余数据不足PCMLength\r\n\t\t\t\t\tif (queue_dataSize > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//检查本次queue能否把缓冲区填满\r\n\t\t\t\t\t\tif (lastSize + queue_dataSize >= PCMSIZE)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//计算剩余空间\r\n\t\t\t\t\t\t\tconst auto dataSize = PCMSIZE - lastSize;\r\n\t\t\t\t\t\t\t//复制数据到buffer\r\n\t\t\t\t\t\t\tmemcpy(pBuffer.data() + lastSize, queue_data, dataSize);\r\n\t\t\t\t\t\t\taudio_player->WriteStreamPCM(audio_stream, pBuffer.data(), PCMSIZE);\r\n\t\t\t\t\t\t\tqueue_data += dataSize;\r\n\t\t\t\t\t\t\tqueue_dataSize -= dataSize;\r\n\t\t\t\t\t\t\tlastSize = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//如果剩余空间仍然不足PCMLength，将剩余数据复制到buffer中 等待下次循环\r\n\t\t\t\t\t\tif (queue_dataSize > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmemcpy(pBuffer.data() + lastSize, queue_data, queue_dataSize);\r\n\t\t\t\t\t\t\tlastSize += queue_dataSize;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlogger.log(L\"OUTPUTBUFFERLEN:\" + std::to_wstring(outputBuffer.size()));\r\n\t\t\t\t\tlogger.log(L\"INPUTBUFFERLEN:\" + std::to_wstring(inputBuffer.size()));\r\n\t\t\t\t\toutputBuffer.pop_front();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlogger.log(L\"[RTInference] OutPut Thread End!\");\r\n\t\t});\r\n\r\n\tlogger.log(L\"[RTInference] Start RTInference!\");\r\n\tfor (uint64_t idx = 0; idx < 1; ++idx)\r\n\t\trawInputBuffer.emplace_back(recoder->GetFrameSize() / 2, 0);\r\n\tRTSTAT = true;\r\n\tRT_RECORD_THREAD.detach();\r\n\tRT_INPUT_CROSSFADE_THREAD.detach();\r\n\tRT_INFERENCE_THREAD.detach();\r\n\tRT_OUTPUT_CROSSFADE_THREAD.detach();\r\n\tRT_OUTPUT_THREAD.detach();\r\n\twhile (true);\r\n}\r\n\r\nvoid VitsSvc::EndRT()\r\n{\r\n\trecoder->Stop();\r\n\taudio_player->StopTrack(audio_stream);\r\n\taudio_player->DeleteTrack(audio_stream);\r\n\tdelete audio_stream;\r\n\tdelete audio_player;\r\n\tdelete recoder;\r\n\taudio_stream = nullptr;\r\n\taudio_player = nullptr;\r\n\trecoder = nullptr;\r\n\tif (RTSTAT)\r\n\t\tRTSTAT = false;\r\n\tinputBuffer.clear();\r\n\toutputBuffer.clear();\r\n\trawInputBuffer.clear();\r\n\trawOutputBuffer.clear();\r\n}\r\n#endif\r\n#endif\r\n\r\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libsvc/Modules/src/Modules.cpp",
    "content": "﻿#include \"../header/Modules.hpp\"\r\n#include \"../header/InferTools/F0Extractor/DioF0Extractor.hpp\"\r\n#include \"../header/InferTools/F0Extractor/F0ExtractorManager.hpp\"\r\n#include \"../header/InferTools/TensorExtractor/MoeVSCoreTensorExtractor.hpp\"\r\n#include \"../header/InferTools/Cluster/MoeVSClusterManager.hpp\"\r\n#include \"../header/InferTools/Cluster/MoeVSKmeansCluster.hpp\"\r\n#include \"../header/InferTools/F0Extractor/HarvestF0Extractor.hpp\"\r\n#include \"../header/InferTools/Sampler/MoeVSSamplerManager.hpp\"\r\n#include \"../header/InferTools/Sampler/MoeVSSamplers.hpp\"\r\n#include \"../header/InferTools/F0Extractor/NetF0Predictors.hpp\"\r\n#ifdef MoeVoiceStudioIndexCluster\r\n#ifdef max\r\n#undef max\r\n#endif\r\n#include \"../header/InferTools/Cluster/MoeVSIndexCluster.hpp\"\r\n#endif\r\n\r\n#define MoeVSRegisterF0Constructor(__RegisterName, __ClassName) MoeVSF0Extractor::RegisterF0Extractor(__RegisterName,   \\\r\n\t[](int32_t sampling_rate, int32_t hop_size,\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\r\n\tint32_t n_f0_bins, double max_f0, double min_f0)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\r\n\t-> MoeVSF0Extractor::F0Extractor\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\r\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\r\n\t\treturn new MoeVSF0Extractor::__ClassName(sampling_rate, hop_size, n_f0_bins, max_f0, min_f0);\t\t\t\t\t\\\r\n\t})\r\n\r\n#define MoeVSRegisterTensorConstructor(__RegisterName, __ClassName) MoeVSTensorPreprocess::RegisterTensorExtractor(__RegisterName,\\\r\n\t[](uint64_t _srcsr, uint64_t _sr, uint64_t _hop,\t\t\t\t\t\t\t\t\t\t\t\t\t        \\\r\n\t\tbool _smix, bool _volume, uint64_t _hidden_size,\t\t\t\t\t\t\t\t\t\t\t\t\t    \\\r\n\t\tuint64_t _nspeaker,\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t                    \\\r\n\t\tconst MoeVSTensorPreprocess::MoeVoiceStudioTensorExtractor::Others& _other)                             \\\r\n\t\t->MoeVSTensorPreprocess::TensorExtractor\t\t\t\t\t\t\t\t\t\t\t\t\t            \\\r\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t    \\\r\n\t\treturn new MoeVSTensorPreprocess::__ClassName(_srcsr, _sr, _hop, _smix, _volume,\t\t\t\t\t\t\\\r\n\t\t\t_hidden_size, _nspeaker, _other);\t\t\t\t\t\t\t\t\t\t\t\t\t                \\\r\n\t})\r\n\r\n#define MoeVSRegisterCluster(__RegisterName, __ClassName) MoeVoiceStudioCluster::RegisterMoeVSCluster(__RegisterName,\\\r\n\t[](const std::wstring& _path, size_t hidden_size, size_t KmeansLen)\t\t\t\t\t\t\t\t\t\t\t\t \\\r\n\t\t->MoeVoiceStudioCluster::MoeVSCluster\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\r\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\r\n\t\treturn new MoeVoiceStudioCluster::__ClassName(_path, hidden_size, KmeansLen);\t\t\t\t\t\t\t\t \\\r\n\t})\r\n\r\n#define MoeVSRegisterSampler(__RegisterName, __ClassName) MoeVSSampler::RegisterMoeVSSampler(__RegisterName,\t\t \\\r\n\t[](Ort::Session* alpha, Ort::Session* dfn, Ort::Session* pred, int64_t Mel_Bins,\t\t\t\t\t\t\t\t \\\r\n\t\tconst MoeVSSampler::MoeVSBaseSampler::ProgressCallback& _ProgressCallback,\t\t\t\t\t\t\t\t \t \\\r\n\t\tOrt::MemoryInfo* memory) -> MoeVSSampler::MoeVSSampler\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\r\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\r\n\t\treturn new MoeVSSampler::__ClassName(alpha, dfn, pred, Mel_Bins, _ProgressCallback, memory);\t\t\t\t \\\r\n\t})\r\n\r\n#define MoeVSRegisterReflowSampler(__RegisterName, __ClassName) MoeVSSampler::RegisterMoeVSReflowSampler(__RegisterName,\t\t \\\r\n\t[](Ort::Session* velocity, int64_t Mel_Bins,\t\t\t\t\t\t\t\t \\\r\n\t\tconst MoeVSSampler::MoeVSBaseSampler::ProgressCallback& _ProgressCallback,\t\t\t\t\t\t\t\t \t \\\r\n\t\tOrt::MemoryInfo* memory) -> MoeVSSampler::MoeVSReflowSampler\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\r\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \\\r\n\t\treturn new MoeVSSampler::__ClassName(velocity, Mel_Bins, _ProgressCallback, memory);\t\t\t\t \\\r\n\t})\r\n\r\nnamespace MoeVSModuleManager\r\n{\r\n\tMoeVoiceStudioCore::SingingVoiceConversion* UnionSvcModel::GetPtr() const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_;\r\n\t\treturn Reflow_;\r\n\t}\r\n\r\n\tstd::vector<std::wstring> UnionSvcModel::Inference(std::wstring& _Paths, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, const InferTools::SlicerSettings& _SlicerSettings) const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->Inference(_Paths, _InferParams, _SlicerSettings);\r\n\t\treturn Reflow_->Inference(_Paths, _InferParams, _SlicerSettings);\r\n\t}\r\n\r\n\tstd::vector<int16_t> UnionSvcModel::InferPCMData(const std::vector<int16_t>& PCMData, long srcSr, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->InferPCMData(PCMData, srcSr, _InferParams);\r\n\t\treturn Reflow_->InferPCMData(PCMData, srcSr, _InferParams);\r\n\t}\r\n\r\n\tstd::vector<int16_t> UnionSvcModel::ShallowDiffusionInference(std::vector<float>& _16KAudioHubert, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, std::pair<std::vector<float>, int64_t>& _Mel, const std::vector<float>& _SrcF0, const std::vector<float>& _SrcVolume, const std::vector<std::vector<float>>& _SrcSpeakerMap, size_t& Process, int64_t SrcSize) const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->ShallowDiffusionInference(_16KAudioHubert, _InferParams, _Mel, _SrcF0, _SrcVolume, _SrcSpeakerMap, Process, SrcSize);\r\n\t\treturn Reflow_->ShallowDiffusionInference(_16KAudioHubert, _InferParams, _Mel, _SrcF0, _SrcVolume, _SrcSpeakerMap, Process, SrcSize);\r\n\t}\r\n\r\n\tstd::vector<int16_t> UnionSvcModel::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams) const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->SliceInference(_Slice,_InferParams);\r\n\t\treturn Reflow_->SliceInference(_Slice, _InferParams);\r\n\t}\r\n\r\n\tstd::vector<int16_t> UnionSvcModel::SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process) const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->SliceInference(_Slice, _InferParams, _Process);\r\n\t\treturn Reflow_->SliceInference(_Slice, _InferParams, _Process);\r\n\t}\r\n\r\n\tUnionSvcModel::UnionSvcModel(const MJson& Config, const MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback, int ProviderID, int NumThread, int DeviceID)\r\n\t{\r\n\t\tif (Config[\"Type\"].GetString() == \"DiffSvc\")\r\n\t\t\tDiffusion_ = new MoeVoiceStudioCore::DiffusionSvc(\r\n\t\t\t\tConfig, Callback,\r\n\t\t\t\tMoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders(ProviderID),\r\n\t\t\t\tDeviceID, NumThread\r\n\t\t\t);\r\n\t\telse if (Config[\"Type\"].GetString() == \"ReflowSvc\")\r\n\t\t\tReflow_ = new MoeVoiceStudioCore::ReflowSvc(\r\n\t\t\t\tConfig, Callback,\r\n\t\t\t\tMoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders(ProviderID),\r\n\t\t\t\tDeviceID, NumThread\r\n\t\t\t);\r\n\t\telse\r\n\t\t\tLibDLVoiceCodecThrow(\"Trying To Load VitsSvc Model As Union Model!\")\r\n\t}\r\n\r\n\tUnionSvcModel::UnionSvcModel(const MoeVoiceStudioCore::Hparams& Config, const MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback, int ProviderID, int NumThread, int DeviceID)\r\n\t{\r\n\t\tif ((Config.TensorExtractor.find(L\"Diff\") != std::wstring::npos) || Config.TensorExtractor.find(L\"diff\") != std::wstring::npos)\r\n\t\t\tDiffusion_ = new MoeVoiceStudioCore::DiffusionSvc(\r\n\t\t\t\tConfig, Callback,\r\n\t\t\t\tMoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders(ProviderID),\r\n\t\t\t\tDeviceID, NumThread\r\n\t\t\t);\r\n\t\telse\r\n\t\t\tReflow_ = new MoeVoiceStudioCore::ReflowSvc(\r\n\t\t\t\tConfig, Callback,\r\n\t\t\t\tMoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders(ProviderID),\r\n\t\t\t\tDeviceID, NumThread\r\n\t\t\t);\r\n\t}\r\n\r\n\tUnionSvcModel::~UnionSvcModel()\r\n\t{\r\n\t\tdelete Diffusion_;\r\n\t\tdelete Reflow_;\r\n\t\tDiffusion_ = nullptr;\r\n\t\tReflow_ = nullptr;\r\n\t}\r\n\r\n\tint64_t UnionSvcModel::GetMaxStep() const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->GetMaxStep();\r\n\t\treturn Reflow_->GetMaxStep();\r\n\t}\r\n\r\n\tbool UnionSvcModel::OldVersion() const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->OldVersion();\r\n\t\treturn false;\r\n\t}\r\n\r\n\tconst std::wstring& UnionSvcModel::GetDiffSvcVer() const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->GetDiffSvcVer();\r\n\t\treturn Reflow_->GetReflowSvcVer();\r\n\t}\r\n\r\n\tint64_t UnionSvcModel::GetMelBins() const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->GetMelBins();\r\n\t\treturn Reflow_->GetMelBins();\r\n\t}\r\n\n\tint UnionSvcModel::GetHopSize() const\n\t{\n\t\tif (Diffusion_) return Diffusion_->GetHopSize();\r\n\t\treturn Reflow_->GetHopSize();\n\t}\n\n\tint64_t UnionSvcModel::GetHiddenUnitKDims() const\n\t{\n\t\tif (Diffusion_) return Diffusion_->GetHiddenUnitKDims();\r\n\t\treturn Reflow_->GetHiddenUnitKDims();\n\t}\n\n\tint64_t UnionSvcModel::GetSpeakerCount() const\n\t{\n\t\tif (Diffusion_) return Diffusion_->GetSpeakerCount();\r\n\t\treturn Reflow_->GetSpeakerCount();\n\t}\n\n\tbool UnionSvcModel::CharaMixEnabled() const\n\t{\n\t\tif (Diffusion_) return Diffusion_->CharaMixEnabled();\r\n\t\treturn Reflow_->CharaMixEnabled();\n\t}\r\n\r\n\tlong UnionSvcModel::GetSamplingRate() const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->GetSamplingRate();\r\n\t\treturn Reflow_->GetSamplingRate();\r\n\t}\r\n\r\n\tvoid UnionSvcModel::NormMel(std::vector<float>& MelSpec) const\r\n\t{\r\n\t\tif (Diffusion_) return Diffusion_->NormMel(MelSpec);\r\n\t\treturn Reflow_->NormMel(MelSpec);\r\n\t}\r\n\r\n\tbool UnionSvcModel::IsDiffusion() const\r\n\t{\r\n\t\treturn Diffusion_;\r\n\t}\r\n}\r\n\r\nnamespace MoeVSModuleManager\r\n{\r\n\tbool MoeVoiceStudioCoreInitStat = false;\r\n\r\n\tMoeVoiceStudioCore::VitsSvc* GlobalVitsSvcModel = nullptr;\r\n\r\n\tUnionSvcModel* GlobalUnionSvcModel = nullptr;\r\n\r\n\tMoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback ProgessBar;\r\n\r\n\tint64_t SpeakerCount = 0;\r\n\tint64_t SamplingRate = 32000;\r\n\tint32_t VocoderHopSize = 512;\r\n\tint32_t VocoderMelBins = 128;\r\n\tint64_t VitsSamplingRate = 32000;\r\n\r\n\tint64_t& GetSamplingRate()\r\n\t{\r\n\t\treturn SamplingRate;\r\n\t}\r\n\r\n\tint64_t& GetSpeakerCount()\r\n\t{\r\n\t\treturn SpeakerCount;\r\n\t}\r\n\r\n\tint32_t& GetVocoderHopSize()\r\n\t{\r\n\t\treturn VocoderHopSize;\r\n\t}\r\n\r\n\tint32_t& GetVocoderMelBins()\r\n\t{\r\n\t\treturn VocoderMelBins;\r\n\t}\r\n\r\n\tvoid MoeVoiceStudioCoreInitSetup()\r\n\t{\r\n\t\tif (MoeVoiceStudioCoreInitStat)\r\n\t\t\treturn;\r\n\t\tMoeVSRegisterF0Constructor(L\"Dio\", DioF0Extractor);\r\n\t\tMoeVSRegisterF0Constructor(L\"Harvest\", HarvestF0Extractor);\r\n\t\tMoeVSRegisterF0Constructor(L\"RMVPE\", RMVPEF0Extractor);\r\n\t\tMoeVSRegisterF0Constructor(L\"FCPE\", MELPEF0Extractor);\r\n\t\tMoeVSRegisterTensorConstructor(L\"SoVits2.0\", SoVits2TensorExtractor);\r\n\t\tMoeVSRegisterTensorConstructor(L\"SoVits3.0\", SoVits3TensorExtractor);\r\n\t\tMoeVSRegisterTensorConstructor(L\"SoVits4.0\", SoVits4TensorExtractor);\r\n\t\tMoeVSRegisterTensorConstructor(L\"SoVits4.0-DDSP\", SoVits4DDSPTensorExtractor);\r\n\t\tMoeVSRegisterTensorConstructor(L\"RVC\", RVCTensorExtractor);\r\n\t\tMoeVSRegisterTensorConstructor(L\"DiffSvc\", DiffSvcTensorExtractor);\r\n\t\tMoeVSRegisterTensorConstructor(L\"DiffusionSvc\", DiffusionSvcTensorExtractor);\r\n\t\tMoeVSRegisterCluster(L\"KMeans\", KMeansCluster);\r\n#ifdef MoeVoiceStudioIndexCluster\r\n\t\tMoeVSRegisterCluster(L\"Index\", IndexCluster);\r\n#endif\r\n\t\tMoeVSRegisterSampler(L\"Pndm\", PndmSampler);\r\n\t\tMoeVSRegisterSampler(L\"DDim\", DDimSampler);\r\n\t\tMoeVSRegisterReflowSampler(L\"Eular\", ReflowEularSampler);\r\n\t\tMoeVSRegisterReflowSampler(L\"Rk4\", ReflowRk4Sampler);\r\n\t\tMoeVSRegisterReflowSampler(L\"Heun\", ReflowHeunSampler);\r\n\t\tMoeVSRegisterReflowSampler(L\"Pecece\", ReflowPececeSampler);\r\n\t\tMoeVoiceStudioCoreInitStat = true;\r\n\t}\r\n\r\n\tMoeVoiceStudioCore::VitsSvc* GetVitsSvcModel()\r\n\t{\r\n\t\treturn GlobalVitsSvcModel;\r\n\t}\r\n\r\n\tUnionSvcModel* GetUnionSvcModel()\r\n\t{\r\n\t\treturn GlobalUnionSvcModel;\r\n\t}\r\n\r\n\tvoid UnloadVitsSvcModel()\r\n\t{\r\n\t\tdelete GlobalVitsSvcModel;\r\n\t\tGlobalVitsSvcModel = nullptr;\r\n\t}\r\n\r\n\tvoid UnloadUnionSvcModel()\r\n\t{\r\n\t\tdelete GlobalUnionSvcModel;\r\n\t\tGlobalUnionSvcModel = nullptr;\r\n\t}\r\n\r\n\tvoid LoadVitsSvcModel(const MJson& Config,\r\n\t                  const MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\r\n\t                  int ProviderID, int NumThread, int DeviceID)\r\n\t{\r\n\t\tlogger.log(\"[Model Loader] Bonding Progress Event\");\r\n\t\tProgessBar = Callback;\r\n\t\tlogger.log(\"[Model Loader] Progress Event Bonded\");\r\n\t\tUnloadVitsSvcModel();\r\n\t\tlogger.log(\"[Model Loader] Empty Cache!\");\r\n\r\n\t\tif (Config[\"Type\"].GetString() == \"DiffSvc\")\r\n\t\t\tLibDLVoiceCodecThrow(\"Trying To Load Diffusion Model As VitsSvc Model!\")\r\n\r\n\t\tGlobalVitsSvcModel = new MoeVoiceStudioCore::VitsSvc(\r\n\t\t\tConfig, Callback,\r\n\t\t\tMoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders(ProviderID),\r\n\t\t\tDeviceID, NumThread\r\n\t\t);\r\n\r\n\t\tVitsSamplingRate = GlobalVitsSvcModel->GetSamplingRate();\r\n\t\tSamplingRate = VitsSamplingRate;\r\n\t}\r\n\r\n\tvoid LoadUnionSvcModel(const MJson& Config,\r\n\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\r\n\t\tint ProviderID, int NumThread, int DeviceID)\r\n\t{\r\n\t\tlogger.log(\"[Model Loader] Bonding Progress Event\");\r\n\t\tProgessBar = Callback;\r\n\t\tlogger.log(\"[Model Loader] Progress Event Bonded\");\r\n\t\tUnloadUnionSvcModel();\r\n\t\tlogger.log(\"[Model Loader] Empty Cache!\");\r\n\r\n\t\tGlobalUnionSvcModel = new UnionSvcModel(\r\n\t\t\tConfig, Callback, ProviderID, NumThread, DeviceID\r\n\t\t);\r\n\r\n\t\tif (VocoderEnabled())\r\n\t\t\tif (!GetVitsSvcModel() || (!GlobalUnionSvcModel->OldVersion() && GlobalUnionSvcModel->GetDiffSvcVer() == L\"DiffusionSvc\"))\r\n\t\t\t\tSamplingRate = GlobalUnionSvcModel->GetSamplingRate();\r\n\t}\r\n\r\n\tvoid LoadVocoderModel(const std::wstring& VocoderPath)\r\n\t{\r\n\t\tMoeVoiceStudioCore::LoadVocoderModel(VocoderPath);\r\n\t}\r\n\r\n\tvoid UnloadVocoderModel()\r\n\t{\r\n\t\tMoeVoiceStudioCore::UnLoadVocoderModel();\r\n\t}\r\n\r\n\tbool VocoderEnabled()\r\n\t{\r\n\t\treturn MoeVoiceStudioCore::VocoderEnabled();\r\n\t}\r\n\r\n\tstd::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcData& _Slice,\r\n\t\tconst MoeVSProjectSpace::MoeVSSvcParams& _InferParams)\r\n\t{\r\n\t\tconst bool DiffusionModelEnabled = GetUnionSvcModel() && VocoderEnabled();\r\n\t\tstd::vector<int16_t> RtnAudio;\r\n\t\tsize_t TotalAudioSize = 0;\r\n\t\tfor (const auto& data_size : _Slice.Slices)\r\n\t\t\tTotalAudioSize += data_size.OrgLen;\r\n\t\tRtnAudio.reserve(size_t(double(TotalAudioSize) * 1.5));\r\n\r\n\t\t//VitsSteps\r\n\t\tint64_t GlobalSteps = 0;\r\n\t\tif (GlobalVitsSvcModel)\n\t\t\tGlobalSteps = 1;\r\n\r\n\t\t//DiffusionSteps\r\n\t\tauto SkipDiffusionStep = (int64_t)_InferParams.Pndm;\r\n\t\tauto DiffusionTotalStep = (int64_t)_InferParams.Step;\r\n\t\t\r\n\t\tif (DiffusionModelEnabled && DiffusionTotalStep > GetUnionSvcModel()->GetMaxStep())\r\n\t\t\tDiffusionTotalStep = GetUnionSvcModel()->GetMaxStep();\r\n\t\tif (SkipDiffusionStep >= DiffusionTotalStep) \r\n\t\t\tSkipDiffusionStep = DiffusionTotalStep / 5;\r\n\t\tif (SkipDiffusionStep == 0) \r\n\t\t\tSkipDiffusionStep = 1;\r\n\t\tauto RealDiffSteps = DiffusionTotalStep;\r\n\t\tif (GetUnionSvcModel() && GetUnionSvcModel()->IsDiffusion())\r\n\t\t\tRealDiffSteps = DiffusionTotalStep % SkipDiffusionStep ? DiffusionTotalStep / SkipDiffusionStep + 1 : DiffusionTotalStep / SkipDiffusionStep;\r\n\t\tif((DiffusionModelEnabled && !GlobalVitsSvcModel) || (DiffusionModelEnabled && ShallowDiffusionEnabled()))\r\n\t\t{\r\n\t\t\tif (GetUnionSvcModel()->OldVersion())\r\n\t\t\t\tGlobalSteps += 1;\r\n\t\t\telse\r\n\t\t\t\tGlobalSteps += RealDiffSteps;\r\n\t\t}\r\n\r\n\t\t//TotalSteps\r\n\t\tconst int64_t TotalSteps = GlobalSteps * int64_t(_Slice.Slices.size());\r\n\t\tsize_t ProgressVal = 0;\r\n\t\tsize_t SliceIndex = 0;\r\n\t\tProgessBar(0, TotalSteps);\r\n\t\tfor (const auto& CurSlice : _Slice.Slices)\r\n\t\t{\r\n\t\t\tconst auto InferBeginTime = clock();\r\n\t\t\tconst auto CurRtn = SliceInference(CurSlice, _InferParams, ProgressVal);\r\n\t\t\tRtnAudio.insert(RtnAudio.end(), CurRtn.data(), CurRtn.data() + CurRtn.size());\r\n\t\t\tif (CurSlice.IsNotMute)\r\n\t\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Segment[\" + std::to_wstring(SliceIndex++) + L\"] Finished! Segment Use Time: \" + std::to_wstring(clock() - InferBeginTime) + L\"ms, Segment Duration: \" + std::to_wstring((size_t)CurSlice.OrgLen * 1000ull / 48000ull) + L\"ms\");\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (DiffusionModelEnabled && !GetUnionSvcModel()->OldVersion())\r\n\t\t\t\t{\r\n\t\t\t\t\tProgressVal += RealDiffSteps;\r\n\t\t\t\t\tProgessBar(ProgressVal, TotalSteps);\r\n\t\t\t\t}\r\n\t\t\t\tlogger.log(L\"[Inferring] Inferring \\\"\" + _Slice.Path + L\"\\\", Jump Empty Segment[\" + std::to_wstring(SliceIndex++) + L\"]!\");\r\n\t\t\t}\r\n\t\t\tif (DiffusionModelEnabled && GetUnionSvcModel()->OldVersion())\r\n\t\t\t\tProgessBar(++ProgressVal, TotalSteps);\r\n\t\t\tif (GlobalVitsSvcModel)\r\n\t\t\t\tProgessBar(++ProgressVal, TotalSteps);\r\n\t\t}\r\n\r\n\t\tlogger.log(L\"[Inferring] \\\"\" + _Slice.Path + L\"\\\" Finished\");\r\n\r\n\t\treturn RtnAudio;\r\n\t}\r\n\r\n\tint CurStftSr = -1, CurHopSize = -1, CurMelBins = -1;\r\n\r\n\tDlCodecStft::Mel* MelOperator = nullptr;\r\n\r\n\tvoid ReloadMelOps(int SamplingRate_I64, int Hopsize_I64, int MelBins_I64)\r\n\t{\r\n\t\tif (CurStftSr != SamplingRate_I64 || CurHopSize != Hopsize_I64 || CurMelBins != MelBins_I64)\r\n\t\t{\r\n\t\t\tdelete MelOperator;\r\n\t\t\tCurStftSr = SamplingRate_I64;\r\n\t\t\tCurHopSize = Hopsize_I64;\r\n\t\t\tCurMelBins = MelBins_I64;\r\n\t\t\tMelOperator = new DlCodecStft::Mel(Hopsize_I64 * 4, CurHopSize, CurStftSr, CurMelBins);\r\n\t\t}\r\n\t}\r\n\r\n\tDlCodecStft::Mel& GetMelOperator()\r\n\t{\r\n\t\treturn *MelOperator;\r\n\t}\r\n\r\n\tstd::vector<int16_t> Enhancer(std::vector<float>& Mel, const std::vector<float>& F0, size_t MelSize)\r\n\t{\r\n\t\tauto Rf0 = F0;\r\n\t\tif (Rf0.size() != MelSize)\n\t\t\tRf0 = InferTools::InterpFunc(Rf0, (long)Rf0.size(), (long)MelSize);\r\n\t\treturn MoeVoiceStudioCore::VocoderInfer(\n\t\t\tMel,\n\t\t\tRf0,\n\t\t\tVocoderMelBins,\n\t\t\t(int64_t)MelSize,\n\t\t\tGlobalVitsSvcModel->GetMemoryInfo()\n\t\t);\r\n\t}\r\n\r\n\tstd::vector<int16_t> SliceInference(const MoeVSProjectSpace::MoeVoiceStudioSvcSlice& _Slice, const MoeVSProjectSpace::MoeVSSvcParams& _InferParams, size_t& _Process)\r\n\t{\r\n\t\tconst bool DiffusionModelEnabled = GetUnionSvcModel() && VocoderEnabled();\r\n\t\tint64_t SamplingRate_I64 = VitsSamplingRate;\r\n\t\tSamplingRate = VitsSamplingRate;\r\n\t\tif ((DiffusionModelEnabled && !GlobalVitsSvcModel) || (_InferParams.UseShallowDiffusion && DiffusionModelEnabled && ShallowDiffusionEnabled()))\r\n\t\t{\r\n\t\t\tSamplingRate_I64 = GetUnionSvcModel()->GetSamplingRate();\r\n\t\t\tSamplingRate = GetUnionSvcModel()->GetSamplingRate();\r\n\t\t}\r\n\t\tif (!_Slice.IsNotMute)\r\n\t\t\treturn { size_t(_Slice.OrgLen * SamplingRate_I64 / 48000), 0i16, std::allocator<int16_t>() };\r\n\t\tstd::vector<int16_t> RtnAudio;\r\n\t\tRtnAudio.reserve(size_t(double(_Slice.Audio.size()) * 1.5));\r\n\r\n\t\tif (GlobalVitsSvcModel)\r\n\t\t{\r\n\t\t\tauto BgnTime = clock();\r\n\t\t\tif(_InferParams.UseShallowDiffusion && DiffusionModelEnabled && !GetUnionSvcModel()->OldVersion() && GetUnionSvcModel()->GetDiffSvcVer() == L\"DiffusionSvc\")\r\n\t\t\t{\r\n\t\t\t\tauto SpcParams = _InferParams;\r\n\t\t\t\tSpcParams._ShallowDiffusionModel = GetUnionSvcModel();\r\n\t\t\t\tSpcParams.VocoderSamplingRate = (int)SamplingRate_I64;\r\n\t\t\t\tSpcParams.VocoderHopSize = GetUnionSvcModel()->GetHopSize();\r\n\t\t\t\tSpcParams.VocoderMelBins = (int)GetUnionSvcModel()->GetMelBins();\r\n\t\t\t\tstd::swap(SpcParams.SpeakerId, SpcParams.ShallowDiffuisonSpeaker);\r\n\t\t\t\tRtnAudio = GlobalVitsSvcModel->SliceInference(_Slice, SpcParams, _Process);\r\n\t\t\t}\r\n\t\t\telse if(_InferParams.UseShallowDiffusion && VocoderEnabled() && !GetUnionSvcModel())\r\n\t\t\t{\r\n\t\t\t\tauto SpcParams = _InferParams;\r\n\t\t\t\tSpcParams.VocoderSamplingRate = (int)SamplingRate_I64;\r\n\t\t\t\tSpcParams.VocoderHopSize = VocoderHopSize;\r\n\t\t\t\tSpcParams.VocoderMelBins = VocoderMelBins;\r\n\t\t\t\tSpcParams._VocoderModel = MoeVoiceStudioCore::GetCurrentVocoder();\r\n\t\t\t\tRtnAudio = GlobalVitsSvcModel->SliceInference(_Slice, SpcParams, _Process);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tRtnAudio = GlobalVitsSvcModel->SliceInference(_Slice, _InferParams, _Process);\r\n\t\t\tlogger.log((\"[Inference] Slice Vits Use Time \" + std::to_string(clock() - BgnTime) + \"ms\").c_str());\r\n\t\t}\r\n\t\telse if (DiffusionModelEnabled)\r\n\t\t{\r\n\t\t\tconst auto BgnTime = clock();\r\n\t\t\tRtnAudio = GetUnionSvcModel()->SliceInference(_Slice, _InferParams, _Process);\r\n\t\t\tlogger.log((\"[Inference] Slice Diffusion Use Time \" + std::to_string(clock() - BgnTime) + \"ms\").c_str());\r\n\t\t}\r\n\t\telse\r\n\t\t\tLibDLVoiceCodecThrow(\"You Must Load A Model To Inference!\");\r\n\r\n\t\treturn RtnAudio;\r\n\t}\r\n\r\n\tbool ShallowDiffusionEnabled()\r\n\t{\r\n\t\tconst bool DiffusionModelEnabled = GetUnionSvcModel() && VocoderEnabled();\r\n\t\treturn DiffusionModelEnabled && !GetUnionSvcModel()->OldVersion() && GetUnionSvcModel()->GetDiffSvcVer() == L\"DiffusionSvc\";\r\n\t}\r\n}"
  },
  {
    "path": "libsvc/Modules/src/StringPreprocess.cpp",
    "content": "#include \"../header/StringPreprocess.hpp\"\r\n#ifdef _WIN32\r\n#include <Windows.h>\r\n#else\r\n#error\r\n#endif\r\n\r\nstd::string to_byte_string(const std::wstring& input)\r\n{\r\n\tstd::vector<char> ByteString(input.length() * 6);\r\n\tWideCharToMultiByte(\r\n\t\tCP_UTF8,\r\n\t\t0,\r\n\t\tinput.c_str(),\r\n\t\tint(input.length()),\r\n\t\tByteString.data(),\r\n\t\tint(ByteString.size()),\r\n\t\tnullptr,\r\n\t\tnullptr\r\n\t);\r\n\treturn ByteString.data();\r\n}\r\n\r\nstd::string to_ansi_string(const std::wstring& input)\r\n{\r\n\tstd::vector<char> ByteString(input.length() * 6);\r\n\tWideCharToMultiByte(\r\n\t\tCP_ACP,\r\n\t\t0,\r\n\t\tinput.c_str(),\r\n\t\tint(input.length()),\r\n\t\tByteString.data(),\r\n\t\tint(ByteString.size()),\r\n\t\tnullptr,\r\n\t\tnullptr\r\n\t);\r\n\treturn ByteString.data();\r\n}\r\n\r\nstd::wstring to_wide_string(const std::string& input)\r\n{\r\n\tstd::vector<wchar_t> WideString(input.length() * 2);\r\n\tMultiByteToWideChar(\r\n\t\tCP_UTF8,\r\n\t\t0,\r\n\t\tinput.c_str(),\r\n\t\tint(input.length()),\r\n\t\tWideString.data(),\r\n\t\tint(WideString.size())\r\n\t);\r\n\treturn WideString.data();\r\n}\r\n\r\nstd::wstring string_vector_to_string(const std::vector<std::string>& vector)\r\n{\r\n\tstd::wstring vecstr = L\"[\";\r\n\tfor (const auto& it : vector)\r\n\t\tif (!it.empty())\r\n\t\t\tvecstr += L'\\\"' + to_wide_string(it) + L\"\\\", \";\r\n\tif (vecstr.length() > 2)\r\n\t\tvecstr = vecstr.substr(0, vecstr.length() - 2);\r\n\tvecstr += L']';\r\n\treturn vecstr;\r\n}\r\n\r\nstd::wstring wstring_vector_to_string(const std::vector<std::wstring>& vector)\r\n{\r\n\tstd::wstring vecstr = L\"[\";\r\n\tfor (const auto& it : vector)\r\n\t\tif (!it.empty())\r\n\t\t\tvecstr += L'\\\"' + it + L\"\\\", \";\r\n\tif (vecstr.length() > 2)\r\n\t\tvecstr = vecstr.substr(0, vecstr.length() - 2);\r\n\tvecstr += L']';\r\n\treturn vecstr;\r\n}"
  },
  {
    "path": "libsvc/README.md",
    "content": "# 使用方法\r\n### 构建\r\n- 1、配置以下依赖：\r\n  - [ffmpeg](https://ffmpeg.org/)\r\n  - [onnxruntime](https://github.com/microsoft/onnxruntime)\r\n  - [fftw](http://fftw.org/)\r\n  - [openblas](https://github.com/OpenMathLib/OpenBLAS)\r\n  - [faiss](https://github.com/facebookresearch/faiss)\r\n  - [liblapack](https://netlib.org/lapack/)\r\n- 2、编译\r\n---\r\n### 使用动态库\r\n- 1、链接libsvc\r\n- 2、#include \"libsvc/Api/header/libsvc.h\"\r\n- 3、调用libsvc::Init()\r\n- 4、调用libsvc名称空间中的函数"
  },
  {
    "path": "libsvc/dllmain.cpp",
    "content": "﻿// dllmain.cpp : 定义 DLL 应用程序的入口点。\r\n#include \"Windows.h\"\r\n\r\nBOOL APIENTRY DllMain( HMODULE hModule,\r\n                       DWORD  ul_reason_for_call,\r\n                       LPVOID lpReserved\r\n                     )\r\n{\r\n    switch (ul_reason_for_call)\r\n    {\r\n    case DLL_PROCESS_ATTACH:\r\n    case DLL_THREAD_ATTACH:\r\n    case DLL_THREAD_DETACH:\r\n    case DLL_PROCESS_DETACH:\r\n        break;\r\n    }\r\n    return TRUE;\r\n}\r\n\r\n"
  },
  {
    "path": "libsvc/libsvc.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\packages\\VC-LTL.5.0.9\\build\\native\\VC-LTL.props\" Condition=\"Exists('..\\packages\\VC-LTL.5.0.9\\build\\native\\VC-LTL.props')\" />\r\n  <Import Project=\"..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.props\" Condition=\"Exists('..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.props')\" />\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"DebugLib|Win32\">\r\n      <Configuration>DebugLib</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"DebugLib|x64\">\r\n      <Configuration>DebugLib</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"ReleaseLib|Win32\">\r\n      <Configuration>ReleaseLib</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"ReleaseLib|x64\">\r\n      <Configuration>ReleaseLib</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <VCProjectVersion>16.0</VCProjectVersion>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <ProjectGuid>{dc31109b-1984-41db-bd9f-4261675c3962}</ProjectGuid>\r\n    <RootNamespace>libsvc</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <SupportLTL>true</SupportLTL>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <SupportLTL>true</SupportLTL>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)libsvc\\Modules\\Lib\\World\\src\\world;$(SolutionDir)Lib\\ffmpeg-4.2.1\\include;$(SolutionDir)libsvc\\Modules\\Lib\\MJson;$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)Lib\\faiss;$(SolutionDir)Lib\\openblas\\include;$(SolutionDir)Lib\\stft;$(IncludePath)</IncludePath>\r\n    <OutDir>$(SolutionDir)$(Platform)\\libsvc\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(Platform)\\libsvc\\$(Configuration)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|x64'\">\r\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)libsvc\\Modules\\Lib\\World\\src\\world;$(SolutionDir)Lib\\ffmpeg-4.2.1\\include;$(SolutionDir)libsvc\\Modules\\Lib\\MJson;$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)Lib\\faiss;$(SolutionDir)Lib\\openblas\\include;$(SolutionDir)Lib\\stft;$(IncludePath)</IncludePath>\r\n    <OutDir>$(SolutionDir)$(Platform)\\libsvc\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(Platform)\\libsvc\\$(Configuration)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)libsvc\\Modules\\Lib\\World\\src\\world;$(SolutionDir)Lib\\ffmpeg-4.2.1\\include;$(SolutionDir)libsvc\\Modules\\Lib\\MJson;$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)Lib\\faiss;$(SolutionDir)Lib\\openblas\\include;$(SolutionDir)Lib\\stft;$(IncludePath)</IncludePath>\r\n    <OutDir>$(SolutionDir)$(Platform)\\libsvc\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(Platform)\\libsvc\\$(Configuration)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\r\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)libsvc\\Modules\\Lib\\World\\src\\world;$(SolutionDir)Lib\\ffmpeg-4.2.1\\include;$(SolutionDir)libsvc\\Modules\\Lib\\MJson;$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)Lib\\faiss;$(SolutionDir)Lib\\openblas\\include;$(SolutionDir)Lib\\stft;$(IncludePath)</IncludePath>\r\n    <OutDir>$(SolutionDir)$(Platform)\\libsvc\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(Platform)\\libsvc\\$(Configuration)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;LIBSVC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableUAC>false</EnableUAC>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;LIBSVC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableUAC>false</EnableUAC>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;LIBSVC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableUAC>false</EnableUAC>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;LIBSVC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableUAC>false</EnableUAC>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_DEBUG;LIBSVC_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;MoeVoiceStudioIndexCluster;LibSvcDll;YYJSON_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n      <LanguageStandard>stdcpp20</LanguageStandard>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableUAC>false</EnableUAC>\r\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\ffmpeg-4.2.1\\Lib;$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native;$(SolutionDir)Lib\\;$(SolutionDir)Lib\\openblas\\lib;$(SolutionDir)Lib\\stft;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r\n      <AdditionalDependencies>avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;onnxruntime.lib;fftw3.lib;libopenblas.lib;%(AdditionalDependencies)</AdditionalDependencies>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;MoeVoiceStudioIndexCluster;LibSvcStaticLib;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n      <LanguageStandard>stdcpp20</LanguageStandard>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableUAC>false</EnableUAC>\r\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\ffmpeg-4.2.1\\Lib;$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native;$(SolutionDir)Lib\\;$(SolutionDir)Lib\\openblas\\lib;$(SolutionDir)Lib\\stft;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r\n      <AdditionalDependencies>avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;onnxruntime.lib;fftw3.lib;libopenblas.lib;%(AdditionalDependencies)</AdditionalDependencies>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>NDEBUG;LIBSVC_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;MoeVoiceStudioIndexCluster;LibSvcDll;YYJSON_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n      <LanguageStandard>stdcpp20</LanguageStandard>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableUAC>false</EnableUAC>\r\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\ffmpeg-4.2.1\\Lib;$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native;$(SolutionDir)Lib\\;$(SolutionDir)Lib\\openblas\\lib;$(SolutionDir)Lib\\stft;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r\n      <AdditionalDependencies>avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;onnxruntime.lib;fftw3.lib;libopenblas.lib;%(AdditionalDependencies)</AdditionalDependencies>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;MoeVoiceStudioIndexCluster;LibSvcStaticLib;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n      <LanguageStandard>stdcpp20</LanguageStandard>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableUAC>false</EnableUAC>\r\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\ffmpeg-4.2.1\\Lib;$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native;$(SolutionDir)Lib\\;$(SolutionDir)Lib\\openblas\\lib;$(SolutionDir)Lib\\stft;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r\n      <AdditionalDependencies>avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;onnxruntime.lib;fftw3.lib;libopenblas.lib;%(AdditionalDependencies)</AdditionalDependencies>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"Api\\header\\NativeApi.h\" />\r\n    <ClInclude Include=\"Api\\header\\libsvc.h\" />\r\n    <ClInclude Include=\"Modules\\framework.h\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\AvCodec\\AvCodeResample.h\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Cluster\\MoeVSBaseCluster.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Cluster\\MoeVSClusterManager.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Cluster\\MoeVSIndexCluster.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Cluster\\MoeVSKmeansCluster.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\DataStruct\\KDTree.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\BaseF0Extractor.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\DioF0Extractor.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\F0ExtractorManager.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\HarvestF0Extractor.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\NetF0Predictors.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\inferTools.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Sampler\\MoeVSBaseSampler.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Sampler\\MoeVSSamplerManager.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Sampler\\MoeVSSamplers.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Stft\\stft.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\TensorExtractor\\MoeVoiceStudioTensorExtractor.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\TensorExtractor\\MoeVSCoreTensorExtractor.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\TensorExtractor\\TensorExtractorManager.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\Logger\\MoeSSLogger.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\Models\\DiffSvc.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\Models\\EnvManager.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\Models\\ModelBase.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\Models\\MoeVSProject.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\Models\\ReflowSvc.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\Models\\SVC.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\Models\\VitsSvc.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\Modules.hpp\" />\r\n    <ClInclude Include=\"Modules\\header\\StringPreprocess.hpp\" />\r\n    <ClInclude Include=\"Modules\\Lib\\MJson\\MJson.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\MJson\\yyjson.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\cheaptrick.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\codec.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\common.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\constantnumbers.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\d4c.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\dio.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\fft.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\harvest.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\macrodefinitions.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\matlabfunctions.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\stonemask.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\synthesis.h\" />\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\synthesisrealtime.h\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"Api\\src\\NativeApi.cpp\" />\r\n    <ClCompile Include=\"Api\\src\\libsvc.cpp\" />\r\n    <ClCompile Include=\"dllmain.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\MJson\\MJson.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\MJson\\yyjson.c\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\cheaptrick.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\codec.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\common.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\d4c.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\dio.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\fft.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\harvest.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\matlabfunctions.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\stonemask.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\synthesis.cpp\" />\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\synthesisrealtime.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\AvCodec\\AvCodeResample.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Cluster\\MoeVSBaseCluster.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Cluster\\MoeVSClusterManager.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Cluster\\MoeVSIndexCluster.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Cluster\\MoeVSKmeansCluster.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\DataStruct\\KDTree.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\BaseF0Extractor.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\DioF0Extractor.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\F0ExtractorManager.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\HarvestF0Extractor.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\NetF0Predictors.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\inferTools.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Sampler\\MoeVSBaseSampler.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Sampler\\MoeVSSamplerManager.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Sampler\\MoeVSSamplers.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Stft\\stft.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\TensorExtractor\\MoeVoiceStudioTensorExtractor.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\TensorExtractor\\MoeVSCoreTensorExtractor.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\TensorExtractor\\TensorExtractorManager.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\Logger\\MoeSSLogger.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\Models\\DiffSvc.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\Models\\EnvManager.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\Models\\ModelBase.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\Models\\MoeVSProject.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\Models\\ReflowSvc.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\Models\\SVC.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\Models\\VitsSvc.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\Modules.cpp\" />\r\n    <ClCompile Include=\"Modules\\src\\StringPreprocess.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"packages.config\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n    <Import Project=\"..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.targets\" Condition=\"Exists('..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.targets')\" />\r\n  </ImportGroup>\r\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\r\n    <PropertyGroup>\r\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\r\n    </PropertyGroup>\r\n    <Error Condition=\"!Exists('..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.props'))\" />\r\n    <Error Condition=\"!Exists('..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\YY.NuGet.Import.Helper.1.0.0.4\\build\\native\\YY.NuGet.Import.Helper.targets'))\" />\r\n    <Error Condition=\"!Exists('..\\packages\\VC-LTL.5.0.9\\build\\native\\VC-LTL.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\VC-LTL.5.0.9\\build\\native\\VC-LTL.props'))\" />\r\n  </Target>\r\n</Project>"
  },
  {
    "path": "libsvc/libsvc.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"源文件\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"头文件\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"资源文件\">\r\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\">\r\n      <UniqueIdentifier>{fb0b5757-fc04-4d88-8597-2d94fe79e2cc}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\Models\">\r\n      <UniqueIdentifier>{54cbaedb-ecbf-4fb3-87b5-36ebc8c6cfce}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\InferTools\">\r\n      <UniqueIdentifier>{9b0ef72f-b6a6-40a5-b235-1976820fe35c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\InferTools\\AVCodec\">\r\n      <UniqueIdentifier>{aad5c051-397f-436b-9b11-fec3ca01aa9c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\InferTools\\DataStruct\">\r\n      <UniqueIdentifier>{6cfaac44-b900-49e1-8fc9-35f8f9ab6e18}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\InferTools\\F0Extractor\">\r\n      <UniqueIdentifier>{9e2f1339-c577-45aa-a509-5dddb4d9d542}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\InferTools\\Sampler\">\r\n      <UniqueIdentifier>{eb24584c-3751-4dbe-823e-90d25c93772e}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\InferTools\\Stft\">\r\n      <UniqueIdentifier>{c4adc16a-e759-4f1c-b5e6-3d76f4505e02}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\InferTools\\TensorExtractor\">\r\n      <UniqueIdentifier>{c7deefd2-d55c-4b5a-80d8-1cac74f545cc}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\Logger\">\r\n      <UniqueIdentifier>{e99697a0-cd74-43bc-ae4c-bfa1299311f4}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Modules\\InferTools\\Cluster\">\r\n      <UniqueIdentifier>{df45b238-81cd-49bf-bf84-ec6e97b35b83}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\">\r\n      <UniqueIdentifier>{d98ecef8-77c5-4e4a-915c-4d71f0ea665d}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\InferTools\">\r\n      <UniqueIdentifier>{4a90fefb-d821-42c0-aba2-b31ba87ffaaa}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\Logger\">\r\n      <UniqueIdentifier>{8c7cf0e0-76ea-40a0-82de-2e020b44c65f}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\Models\">\r\n      <UniqueIdentifier>{c579373a-26a1-4979-b8ba-93b8aee12708}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\InferTools\\AVCodec\">\r\n      <UniqueIdentifier>{94e998a7-0897-4c87-9ee0-1426f372b6b0}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\InferTools\\Cluster\">\r\n      <UniqueIdentifier>{3d85cc85-c9e7-4d29-92a2-57b044c10fc8}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\InferTools\\DataStruct\">\r\n      <UniqueIdentifier>{7ce28dec-70cd-445a-9a99-b11ebfc0635e}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\InferTools\\F0Extractor\">\r\n      <UniqueIdentifier>{65e1efd6-d194-4317-abb3-fa252719bef8}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\InferTools\\TensorExtractor\">\r\n      <UniqueIdentifier>{d60edd1b-50d6-4880-a09e-6f1a1d8b4f70}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\InferTools\\Stft\">\r\n      <UniqueIdentifier>{cfa6e269-3e22-43ed-8f28-fd50b9bf9d18}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Modules\\InferTools\\Sampler\">\r\n      <UniqueIdentifier>{965d3ac6-1a15-45bf-890e-af0cf1e0e3c4}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Lib\">\r\n      <UniqueIdentifier>{01dc10ac-ad67-4d10-b7a7-92cb14cf5fe3}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Lib\\World\">\r\n      <UniqueIdentifier>{c1060cbd-4688-4a7d-88f7-d81f38533cb8}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\Lib\\Json\">\r\n      <UniqueIdentifier>{7e0d0066-c7ce-4445-a80c-d93cda1fc5fe}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Lib\">\r\n      <UniqueIdentifier>{6c8a8d59-2b2b-4b2f-8dbb-3ccc3f802e9a}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Lib\\Json\">\r\n      <UniqueIdentifier>{bc3612f1-00b0-4d01-97b0-2eb66f7b33be}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\Lib\\World\">\r\n      <UniqueIdentifier>{3405ef93-0ba8-495b-9110-22b821411ce9}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"头文件\\API\">\r\n      <UniqueIdentifier>{e5b4addf-6f94-41ac-8186-49efa1f37d72}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"源文件\\API\">\r\n      <UniqueIdentifier>{c1f11d2a-5fb5-4480-b895-2e26036943b5}</UniqueIdentifier>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"Modules\\header\\Models\\EnvManager.hpp\">\r\n      <Filter>头文件\\Modules\\Models</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\Models\\DiffSvc.hpp\">\r\n      <Filter>头文件\\Modules\\Models</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\Models\\ModelBase.hpp\">\r\n      <Filter>头文件\\Modules\\Models</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\Models\\MoeVSProject.hpp\">\r\n      <Filter>头文件\\Modules\\Models</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\Models\\SVC.hpp\">\r\n      <Filter>头文件\\Modules\\Models</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\Models\\VitsSvc.hpp\">\r\n      <Filter>头文件\\Modules\\Models</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\Modules.hpp\">\r\n      <Filter>头文件\\Modules</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\StringPreprocess.hpp\">\r\n      <Filter>头文件\\Modules</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\Logger\\MoeSSLogger.hpp\">\r\n      <Filter>头文件\\Modules\\Logger</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\AvCodec\\AvCodeResample.h\">\r\n      <Filter>头文件\\Modules\\InferTools\\AVCodec</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Cluster\\MoeVSBaseCluster.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\Cluster</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Cluster\\MoeVSClusterManager.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\Cluster</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Cluster\\MoeVSIndexCluster.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\Cluster</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Cluster\\MoeVSKmeansCluster.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\Cluster</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\DataStruct\\KDTree.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\DataStruct</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\F0ExtractorManager.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\HarvestF0Extractor.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\NetF0Predictors.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\BaseF0Extractor.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\F0Extractor\\DioF0Extractor.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Sampler\\MoeVSBaseSampler.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\Sampler</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Sampler\\MoeVSSamplerManager.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\Sampler</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Sampler\\MoeVSSamplers.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\Sampler</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\Stft\\stft.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\Stft</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\TensorExtractor\\MoeVoiceStudioTensorExtractor.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\TensorExtractor</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\TensorExtractor\\MoeVSCoreTensorExtractor.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\TensorExtractor</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\TensorExtractor\\TensorExtractorManager.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools\\TensorExtractor</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\InferTools\\inferTools.hpp\">\r\n      <Filter>头文件\\Modules\\InferTools</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\framework.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\MJson\\MJson.h\">\r\n      <Filter>头文件\\Lib\\Json</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\MJson\\yyjson.h\">\r\n      <Filter>头文件\\Lib\\Json</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\synthesis.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\synthesisrealtime.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\cheaptrick.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\codec.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\common.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\constantnumbers.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\d4c.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\dio.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\fft.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\harvest.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\macrodefinitions.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\matlabfunctions.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\stonemask.h\">\r\n      <Filter>头文件\\Lib\\World</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Api\\header\\libsvc.h\">\r\n      <Filter>头文件\\API</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Modules\\header\\Models\\ReflowSvc.hpp\">\r\n      <Filter>头文件\\Modules\\Models</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Api\\header\\NativeApi.h\">\r\n      <Filter>头文件\\API</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"dllmain.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\Models\\DiffSvc.cpp\">\r\n      <Filter>源文件\\Modules\\Models</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\Models\\EnvManager.cpp\">\r\n      <Filter>源文件\\Modules\\Models</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\Models\\ModelBase.cpp\">\r\n      <Filter>源文件\\Modules\\Models</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\Models\\MoeVSProject.cpp\">\r\n      <Filter>源文件\\Modules\\Models</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\Models\\SVC.cpp\">\r\n      <Filter>源文件\\Modules\\Models</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\Models\\VitsSvc.cpp\">\r\n      <Filter>源文件\\Modules\\Models</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\Logger\\MoeSSLogger.cpp\">\r\n      <Filter>源文件\\Modules\\Logger</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\inferTools.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\TensorExtractor\\MoeVSCoreTensorExtractor.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\TensorExtractor</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\TensorExtractor\\TensorExtractorManager.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\TensorExtractor</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\TensorExtractor\\MoeVoiceStudioTensorExtractor.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\TensorExtractor</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Stft\\stft.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\Stft</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Sampler\\MoeVSSamplerManager.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\Sampler</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Sampler\\MoeVSSamplers.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\Sampler</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Sampler\\MoeVSBaseSampler.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\Sampler</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\F0ExtractorManager.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\HarvestF0Extractor.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\NetF0Predictors.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\BaseF0Extractor.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\F0Extractor\\DioF0Extractor.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\F0Extractor</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\DataStruct\\KDTree.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\DataStruct</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Cluster\\MoeVSClusterManager.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\Cluster</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Cluster\\MoeVSIndexCluster.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\Cluster</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Cluster\\MoeVSKmeansCluster.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\Cluster</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\Cluster\\MoeVSBaseCluster.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\Cluster</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\InferTools\\AvCodec\\AvCodeResample.cpp\">\r\n      <Filter>源文件\\Modules\\InferTools\\AVCodec</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\Modules.cpp\">\r\n      <Filter>源文件\\Modules</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\StringPreprocess.cpp\">\r\n      <Filter>源文件\\Modules</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\MJson\\yyjson.c\">\r\n      <Filter>源文件\\Lib\\Json</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\cheaptrick.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\codec.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\common.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\d4c.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\dio.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\fft.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\harvest.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\matlabfunctions.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\stonemask.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\synthesis.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\synthesisrealtime.cpp\">\r\n      <Filter>源文件\\Lib\\World</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\Lib\\MJson\\MJson.cpp\">\r\n      <Filter>源文件\\Lib\\Json</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Api\\src\\libsvc.cpp\">\r\n      <Filter>源文件\\API</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Modules\\src\\Models\\ReflowSvc.cpp\">\r\n      <Filter>源文件\\Modules\\Models</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Api\\src\\NativeApi.cpp\">\r\n      <Filter>源文件\\API</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"packages.config\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "libsvc/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"VC-LTL\" version=\"5.0.9\" targetFramework=\"native\" />\n  <package id=\"YY.NuGet.Import.Helper\" version=\"1.0.0.4\" targetFramework=\"native\" />\n</packages>"
  },
  {
    "path": "libtts/Api/NativeApi.cpp",
    "content": "#include \"NativeApi.h\"\n#include <deque>\n#include \"../Modules/Modules.hpp\"\n#include \"../Modules/Models/EnvManager.hpp\"\n\nstruct LibTTSParams\n{\n\tfloat NoiseScale = 0.3f;                           //          0-10\n\tint64_t Seed = 52468;                              //\n\tint64_t SpeakerId = 0;                             //ɫID\n\tuint64_t SrcSamplingRate = 48000;                  //Դ\n\tint64_t SpkCount = 2;                              //ģͽɫ\n\n\tstd::vector<float> SpeakerMix;                     //ɫϱ\n\tfloat LengthScale = 1.0f;                          //ʱ\n\tfloat DurationPredictorNoiseScale = 0.8f;          //ʱԤ\n\tfloat FactorDpSdp = 0.f;                           //ʱԤʱԤϱ\n\tfloat RestTime = 0.5f;                             //ͣʱ䣬ΪֱӶϿƵƵ\n\tfloat GateThreshold = 0.66666f;                    //Tacotron2EOSֵ\n\tint64_t MaxDecodeStep = 2000;                      //Tacotron2벽\n\tstd::vector<std::wstring> EmotionPrompt;           //б\n\tstd::wstring PlaceHolderSymbol = L\"|\";             //طָ\n\tstd::string LanguageSymbol = \"JP\";                 //\n\tstd::wstring AdditionalInfo = L\"\";                 //G2PϢ\n\tstd::wstring SpeakerName = L\"0\";                   //ɫ\n};\n\nstruct LibTTSToken\n{\n\tstd::wstring Text;                                 //ı\n\tstd::vector<std::wstring> Phonemes;                //\n\tstd::vector<int64_t> Tones;                        //\n\tstd::vector<int64_t> Durations;                    //ʱ\n\tstd::vector<std::string> Language;                 //\n};\n\nstruct LibTTSSeq\n{\n\tstd::wstring TextSeq;\n\tstd::vector<LibTTSToken> SlicedTokens;\n\tstd::vector<float> SpeakerMix;                     //ɫϱ\n\tstd::vector<std::wstring> EmotionPrompt;           //б\n\tstd::wstring PlaceHolderSymbol = L\"|\";             //طָ\n\tfloat NoiseScale = 0.3f;                           //             0-10\n\tfloat LengthScale = 1.0f;                          //ʱ\n\tfloat DurationPredictorNoiseScale = 0.3f;          //ʱԤ\n\tfloat FactorDpSdp = 0.3f;                          //ʱԤʱԤϱ\n\tfloat GateThreshold = 0.66666f;                    //Tacotron2EOSֵ\n\tint64_t MaxDecodeStep = 2000;                      //Tacotron2벽\n\tint64_t Seed = 52468;                              //\n\tfloat RestTime = 0.5f;                             //ͣʱ䣬ΪֱӶϿƵƵ\n\tstd::string LanguageSymbol = \"ZH\";                 //Ա\n\tstd::wstring SpeakerName = L\"0\";                   //ɫID\n\tstd::wstring AdditionalInfo = L\"\";                       //G2PϢ\n};\n\nconst wchar_t* LibTTSNullString = L\"\";\n#define LibTTSNullStrCheck(Str) ((Str)?(Str):(LibTTSNullString))\nstd::deque<std::wstring> ErrorQueue;\nsize_t MaxErrorCount = 20;\nstd::mutex ErrorMx;\n\nvoid RaiseError(const std::wstring& _Msg)\n{\n\tlogger.log(_Msg);\n\tErrorMx.lock();\n\tErrorQueue.emplace_front(_Msg);\n\tif (ErrorQueue.size() > MaxErrorCount)\n\t\tErrorQueue.pop_back();\n}\n\nvoid LibTTSInit()\n{\n\tMoeVSModuleManager::MoeVoiceStudioCoreInitSetup();\n}\n\nINT32 LibTTSSetGlobalEnv(UINT32 ThreadCount, UINT32 DeviceID, UINT32 Provider)\n{\n\ttry\n\t{\n\t\tmoevsenv::GetGlobalMoeVSEnv().Load(ThreadCount, DeviceID, Provider);\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n\nBSTR LibTTSGetError(size_t Index)\n{\n\tconst auto& Ref = ErrorQueue.at(Index);\n\tauto Ret = SysAllocString(Ref.c_str());\n\tErrorQueue.erase(ErrorQueue.begin() + ptrdiff_t(Index));\n\tErrorMx.unlock();\n\treturn Ret;\n}\n\nvoid* LibTTSLoadVocoder(LPWSTR VocoderPath)\n{\n\tif (!VocoderPath)\n\t{\n\t\tRaiseError(L\"VocoderPath Could Not Be Null\");\n\t\treturn nullptr;\n\t}\n\n\tconst auto& Env = moevsenv::GetGlobalMoeVSEnv();\n\ttry\n\t{\n\t\treturn new Ort::Session(*Env.GetEnv(), VocoderPath, *Env.GetSessionOptions());\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn nullptr;\n\t}\n}\n\nINT32 LibTTSUnloadVocoder(void* _Model)\n{\n\ttry\n\t{\n\t\tdelete (Ort::Session*)_Model;\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tRaiseError(to_wide_string(e.what()));\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nvoid LibTTSEnableFileLogger(bool _Cond)\n{\n\tMoeSSLogger::GetLogger().enable(_Cond);\n}\n\nvoid LibTTSWriteAudioFile(void* _PCMData, LPWSTR _OutputPath, INT32 _SamplingRate)\n{\n\tInferTools::Wav::WritePCMData(_SamplingRate, 1, *(std::vector<int16_t>*)(_PCMData), _OutputPath);\n}"
  },
  {
    "path": "libtts/Api/NativeApi.h",
    "content": "#pragma once\n#include \"../../framework.h\"\n#include \"windows.h\"\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\ttypedef void(*LibTTSProgCallback)(size_t, size_t);\n\n\tenum LibTTSExecutionProviders { CPU = 0, CUDA = 1, DML = 2 };\n\n\tenum LibTTSModelType { Vits, GptSoVits };\n\n#ifdef _MSC_VER\n#pragma pack(push, 4)\n#else\n#pragma pack(4)\n#endif\n\n\tstruct LibTTSParams;\n\tstruct LibTTSToken;\n\tstruct LibTTSSeq;\n\n\tstruct DiffusionSvcPaths\n\t{\n\t\tLPWSTR Encoder = nullptr;\n\t\tLPWSTR Denoise = nullptr;\n\t\tLPWSTR Pred = nullptr;\n\t\tLPWSTR After = nullptr;\n\t\tLPWSTR Alpha = nullptr;\n\t\tLPWSTR Naive = nullptr;\n\n\t\tLPWSTR DiffSvc = nullptr;\n\t};\n\n\tstruct ReflowSvcPaths\n\t{\n\t\tLPWSTR Encoder = nullptr;\n\t\tLPWSTR VelocityFn = nullptr;\n\t\tLPWSTR After = nullptr;\n\t};\n\n\tstruct LibTTSHparams\n\t{\n\t\tLPWSTR TensorExtractor = nullptr;\n\t\tDiffusionSvcPaths DiffusionSvc;\n\t\tReflowSvcPaths ReflowSvc;\n\n\t\tINT32 SamplingRate = 22050;\n\n\t\tINT32 HopSize = 320;\n\t\tINT64 HiddenUnitKDims = 256;\n\t\tINT64 SpeakerCount = 1;\n\t\tINT32 EnableCharaMix = false;\n\t\tINT32 EnableVolume = false;\n\t\tINT32 VaeMode = true;\n\n\t\tINT64 MelBins = 128;\n\t\tINT64 Pndms = 100;\n\t\tINT64 MaxStep = 1000;\n\t\tfloat SpecMin = -12;\n\t\tfloat SpecMax = 2;\n\t\tfloat Scale = 1000.f;\n\t};\n\n#ifdef _MSC_VER\n#pragma pack(pop)\n#else\n#pragma pack()\n#endif\n\n\t/******************************************Fun**********************************************/\n\n\tLibTTSApi void LibTTSInit();\n\n\tLibTTSApi INT32 LibTTSSetGlobalEnv(UINT32 ThreadCount, UINT32 DeviceID, UINT32 Provider);\n\n\tLibTTSApi void LibTTSSetMaxErrorCount(size_t Count);\n\n\tLibTTSApi BSTR LibTTSGetError(size_t Index);\n\n\tLibTTSApi void* LibTTSLoadModel(\n\t\tUINT32 _T,\n\t\tconst void* _Config,\n\t\tLibTTSProgCallback _ProgressCallback,\n\t\tUINT32 _ExecutionProvider = CPU,\n\t\tUINT32 _DeviceID = 0,\n\t\tUINT32 _ThreadCount = 0\n\t);\n\n\tLibTTSApi INT32 LibTTSUnloadModel(\n\t\tUINT32 _T,\n\t\tvoid* _Model\n\t);\n\n\tLibTTSApi void* LibTTSLoadVocoder(LPWSTR VocoderPath);\n\n\tLibTTSApi INT32 LibTTSUnloadVocoder(void* _Model);\n\n\tLibTTSApi void LibTTSEnableFileLogger(bool _Cond);\n\n\tLibTTSApi void LibTTSWriteAudioFile(void* _PCMData, LPWSTR _OutputPath, INT32 _SamplingRate);\n\n#ifdef __cplusplus\n}\n#endif"
  },
  {
    "path": "libtts/Modules/AvCodec/AvCodeResample.h",
    "content": "﻿#pragma once\n#include <vector>\n#include <string>\n#include \"../StringPreprocess.hpp\"\n#include \"matlabfunctions.h\"\n#include \"../InferTools/inferTools.hpp\"\nextern \"C\" {\n#include \"libavcodec/avcodec.h\"\n#include \"libavformat/avformat.h\"\n#include \"libswscale/swscale.h\"\n#include \"libswresample/swresample.h\"\n#include \"libavutil/samplefmt.h\"\n}\n\nclass AudioPreprocess\n{\npublic:\n    struct WAV_HEADER {\n        char             RIFF[4] = { 'R','I','F','F' };              //RIFF标识\n        unsigned long    ChunkSize;                                  //文件大小-8\n        char             WAVE[4] = { 'W','A','V','E' };              //WAVE块\n        char             fmt[4] = { 'f','m','t',' ' };               //fmt块\n        unsigned long    Subchunk1Size;                              //fmt块大小\n        unsigned short   AudioFormat;                                //编码格式\n        unsigned short   NumOfChan;                                  //声道数\n        WAV_HEADER(unsigned long cs = 36, unsigned long sc1s = 16, unsigned short af = 1, unsigned short nc = 1) :ChunkSize(cs), Subchunk1Size(sc1s), AudioFormat(af), NumOfChan(nc) {}\n    };\n    static WAV_HEADER GetHeader(const std::wstring& path)\n    {\n        WAV_HEADER header;\n        char buf[1024];\n        FILE* stream;\n        _wfreopen_s(&stream, path.c_str(), L\"rb\", stderr);\n        if (stream == nullptr) {\n            throw (std::exception(\"Wav Load Error\"));\n        }\n        fread(buf, 1, 1024, stream);\n        int pos = 0;\n        while (pos < InferTools::Wav::HEAD_LENGTH) {\n            if ((buf[pos] == 'R') && (buf[pos + 1] == 'I') && (buf[pos + 2] == 'F') && (buf[pos + 3] == 'F')) {\n                pos += 4;\n                break;\n            }\n            ++pos;\n        }\n        if (pos >= InferTools::Wav::HEAD_LENGTH)\n            throw (std::exception(\"Don't order fried rice (annoyed)\"));\n        header.ChunkSize = *(int*)&buf[pos];\n        pos += 8;\n        while (pos < InferTools::Wav::HEAD_LENGTH) {\n            if ((buf[pos] == 'f') && (buf[pos + 1] == 'm') && (buf[pos + 2] == 't')) {\n                pos += 4;\n                break;\n            }\n            ++pos;\n        }\n        if (pos >= InferTools::Wav::HEAD_LENGTH)\n            throw (std::exception(\"Don't order fried rice (annoyed)\"));\n        header.Subchunk1Size = *(int*)&buf[pos];\n        pos += 4;\n        header.AudioFormat = *(short*)&buf[pos];\n        pos += 2;\n        header.NumOfChan = *(short*)&buf[pos];\n        if (stream != nullptr) {\n            fclose(stream);\n        }\n        return header;\n    }\n    static std::vector<double> arange(double start, double end, double step = 1.0, double div = 1.0)\n    {\n        std::vector<double> output;\n        while (start < end)\n        {\n            output.push_back(start / div);\n            start += step;\n        }\n        return output;\n    }\n    std::vector<short> codec(const std::wstring& path, int sr)\n\t{\n        //if (path.substr(path.rfind(L'.')) == L\".wav\")\n        //    return resample(path, sr);\n        std::vector<uint8_t> outData;\n        int ret = avformat_open_input(&avFormatContext, to_byte_string(path).c_str(), nullptr, nullptr);\n        if (ret != 0) {\n            LibDLVoiceCodecThrow((std::string(\"Can't Open Audio File [ErrCode]\")+std::to_string(ret)).c_str())\n        }\n        ret = avformat_find_stream_info(avFormatContext, nullptr);\n        if (ret < 0) {\n            LibDLVoiceCodecThrow(\"Can't Get Audio Info\")\n        }\n        int streamIndex = 0;\n        for (unsigned i = 0; i < avFormatContext->nb_streams; ++i) {\n        \tconst AVMediaType avMediaType = avFormatContext->streams[i]->codecpar->codec_type;\n            if (avMediaType == AVMEDIA_TYPE_AUDIO) {\n                streamIndex = static_cast<int>(i);\n            }\n        }\n        const AVCodecParameters* avCodecParameters = avFormatContext->streams[streamIndex]->codecpar;\n        const AVCodecID avCodecId = avCodecParameters->codec_id;\n        const AVCodec* avCodec = avcodec_find_decoder(avCodecId);\n        if (avCodec == nullptr)\n            LibDLVoiceCodecThrow(\"Don't order fried rice (annoyed)\")\n        if (avCodecContext == nullptr) {\n            LibDLVoiceCodecThrow(\"Can't Get Decoder Info\")\n        }\n        avcodec_parameters_to_context(avCodecContext, avCodecParameters);\n        ret = avcodec_open2(avCodecContext, avCodec, nullptr);\n        if (ret < 0) {\n            LibDLVoiceCodecThrow(\"Can't Open Decoder\")\n        }\n        packet = (AVPacket*)av_malloc(sizeof(AVPacket));\n        const AVSampleFormat inFormat = avCodecContext->sample_fmt;\n        constexpr AVSampleFormat  outFormat = AV_SAMPLE_FMT_S16;\n        const int inSampleRate = avCodecContext->sample_rate;\n        const int outSampleRate = sr;\n\n        const auto nSample = static_cast<size_t>(avFormatContext->duration * sr / AV_TIME_BASE);\n\n        uint64_t in_ch_layout = avCodecContext->channel_layout;\n        if (path.substr(path.rfind(L'.')) == L\".wav\")\n        {\n            const auto head = GetHeader(path);\n            if (head.NumOfChan == 1)\n                in_ch_layout = AV_CH_LAYOUT_MONO;\n            else if (head.NumOfChan == 2)\n                in_ch_layout = AV_CH_LAYOUT_STEREO;\n            else\n                LibDLVoiceCodecThrow(\"unsupported Channel Num\")\n        }\n        constexpr uint64_t out_ch_layout = AV_CH_LAYOUT_MONO;\n        swr_alloc_set_opts(swrContext, out_ch_layout, outFormat, outSampleRate,\n            static_cast<int64_t>(in_ch_layout), inFormat, inSampleRate, 0, nullptr\n        );\n        swr_init(swrContext);\n        const int outChannelCount = av_get_channel_layout_nb_channels(out_ch_layout);\n        int currentIndex = 0;\n        out_buffer = (uint8_t*)av_malloc(2ull * sr);\n        while (av_read_frame(avFormatContext, packet) >= 0) {\n            if (packet->stream_index == streamIndex) {\n                avcodec_send_packet(avCodecContext, packet);\n                ret = avcodec_receive_frame(avCodecContext, inFrame);\n                if (ret == 0) {\n                    swr_convert(swrContext, &out_buffer, 2ull * sr,\n                        (const uint8_t**)inFrame->data, inFrame->nb_samples);\n                    const int out_buffer_size = av_samples_get_buffer_size(nullptr, outChannelCount, (inFrame->nb_samples * sr / inSampleRate) - 1, outFormat, 1);\n                    outData.insert(outData.end(), out_buffer, out_buffer + out_buffer_size);\n                }\n                ++currentIndex;\n                av_packet_unref(packet);\n            }\n        }\n        //Wav outWav(static_cast<unsigned long>(sr), static_cast<unsigned long>(outData.size()), outData.data());\n        auto outWav = reinterpret_cast<int16_t*>(outData.data());\n        const auto RawWavLen = int64_t(outData.size()) / 2;\n        if (nSample != static_cast<size_t>(RawWavLen))\n        {\n            const double interpOff = static_cast<double>(RawWavLen) / static_cast<double>(nSample);\n            const auto x0 = arange(0.0, static_cast<double>(RawWavLen), 1.0, 1.0);\n            std::vector<double> y0(RawWavLen);\n            for (int64_t i = 0; i < RawWavLen; ++i)\n                y0[i] = outWav[i] ? static_cast<double>(outWav[i]) : NAN;\n            const auto yi = new double[nSample];\n        \tauto xi = arange(0.0, static_cast<double>(RawWavLen), interpOff, 1.0);\n            while (xi.size() < nSample)\n                xi.push_back(*(xi.end() - 1) + interpOff);\n            while (xi.size() > nSample)\n                xi.pop_back();\n            interp1(x0.data(), y0.data(), static_cast<int>(RawWavLen), xi.data(), static_cast<int>(nSample), yi);\n            std::vector<short> DataChun(nSample);\n            for (size_t i = 0; i < nSample; ++i)\n                DataChun[i] = isnan(yi[i]) ? 0i16 : static_cast<short>(yi[i]);\n            delete[] yi;\n            return DataChun;\n        }\n        release();\n        return { outWav , outWav + RawWavLen };\n\t}\n    void release()\n\t{\n        if (packet)\n\t        av_packet_free(&packet);\n        if (inFrame)\n            av_frame_free(&inFrame);\n        if (out_buffer)\n            av_free(out_buffer);\n        if (swrContext)\n            swr_free(&swrContext);\n        if (avCodecContext)\n            avcodec_close(avCodecContext);\n        if (avFormatContext)\n            avformat_close_input(&avFormatContext);\n        inFrame = nullptr;\n        out_buffer = nullptr;\n        swrContext = nullptr;\n        avCodecContext = nullptr;\n        avFormatContext = nullptr;\n        packet = nullptr;\n\t}\n    void init()\n\t{\n        inFrame = av_frame_alloc();\n        out_buffer = nullptr;\n        swrContext = swr_alloc();\n        avCodecContext = avcodec_alloc_context3(nullptr);\n        avFormatContext = avformat_alloc_context();\n        packet = nullptr;\n\t}\n    AudioPreprocess()\n\t{\n        inFrame = av_frame_alloc();\n        out_buffer = nullptr;\n        swrContext = swr_alloc();\n        avCodecContext = avcodec_alloc_context3(nullptr);\n        avFormatContext = avformat_alloc_context();\n        packet = nullptr;\n\t}\n    ~AudioPreprocess()\n\t{\n        release();\n\t}\nprivate:\n    AVFrame* inFrame;\n    uint8_t* out_buffer;\n    SwrContext* swrContext;\n    AVCodecContext* avCodecContext;\n    AVFormatContext* avFormatContext;\n    AVPacket* packet;\n};"
  },
  {
    "path": "libtts/Modules/AvCodec/Recorder.cpp",
    "content": "﻿#include \"Recorder.h\"\n\nMRecorder::~MRecorder()\n{\n    //释放录制线程\n    m_runing = false;\n    m_iscapture = true;\n    if (m_thread)\n    {\n        m_signal.notify_all();\n        m_thread->join();\n        delete m_thread;\n    }\n    //释放设备资源\n    if (m_event[0])\n    {\n        for (Mui::_m_byte i = 0; i < 2; i++)\n        {\n            SetEvent(m_event[i]);\n            CloseHandle(m_event[i]);\n        }\n    }\n    if (m_captureBuffer) m_captureBuffer->Release();\n    if (m_captureDriver) m_captureDriver->Release();\n    //释放队列数据\n    while (true)\n    {\n        const auto data = GetStreamData();\n        delete data;\n        if (!data)\n            break;\n    }\n}\n\nbool MRecorder::InitRecorder(std::wstring& error, Mui::_m_uint sampleRate, Mui::_m_byte channels, Mui::_m_byte bit, Mui::_m_uint fs)\n{\n    if (m_captureDriver && m_captureBuffer)\n    {\n        error = L\"Initialized\";\n        return false;\n    }\n\n    CoInitializeEx(nullptr, COINIT_MULTITHREADED);\n    //创建录音设备\n    HRESULT hr = DirectSoundCaptureCreate(nullptr, &m_captureDriver, nullptr);\n    if (FAILED(hr))\n    {\n        error = L\"DirectSoundCaptureCreate failed!\";\n        return false;\n    }\n\n    if(sampleRate != 0)\n\t\tm_sampleRate = sampleRate;\n    if(channels != 0)\n\t\tm_channels = channels;\n    if(bit != 0)\n\t\tm_bit = bit;\n\n    //创建录音缓冲区\n    m_blockAlign = 2 * m_channels;\n\n    WAVEFORMATEX wavFormatEx;\n    wavFormatEx.wFormatTag = WAVE_FORMAT_PCM;\n    wavFormatEx.nChannels = m_channels;\n    wavFormatEx.nSamplesPerSec = m_sampleRate;\n    wavFormatEx.nAvgBytesPerSec = m_sampleRate * m_blockAlign;\n    wavFormatEx.nBlockAlign = WORD(m_blockAlign);\n    wavFormatEx.wBitsPerSample = m_bit;\n\n    m_frameSize = fs*2;\n\n    DSCBUFFERDESC dsBufferDesc = { sizeof(DSCBUFFERDESC) };\n    dsBufferDesc.lpwfxFormat = &wavFormatEx;\n    dsBufferDesc.dwBufferBytes = m_frameSize * 2;\n    //dsBufferDesc.dwFlags = DSBCAPS_CTRLPOSITIONNOTIFY;\n\n    hr = m_captureDriver->CreateCaptureBuffer(&dsBufferDesc, &m_captureBuffer, nullptr);\n    if (FAILED(hr))\n    {\n        error = L\"DirectSoundCaptureCreate failed!\";\n        m_captureDriver->Release(); m_captureDriver = nullptr;\n        return false;\n    }\n    \n    //创建通知事件\n    IDirectSoundNotify* Notify = nullptr;\n    m_captureBuffer->QueryInterface(IID_IDirectSoundNotify, (LPVOID*)&Notify);\n\n    DSBPOSITIONNOTIFY notify[2] = { 0 };\n    int offset = int(m_frameSize - 1);\n    for (int i = 0; i < 2; i++) {\n        notify[i].dwOffset = offset;\n        m_event[i] = CreateEventW(nullptr, false, false, nullptr);\n        notify[i].hEventNotify = m_event[i];\n        offset += (int)m_frameSize;\n    }\n\n    Notify->SetNotificationPositions(2, notify);\n    Notify->Release();\n\n    //创建录制线程\n    m_runing = true;\n    m_iscapture = false;\n\n    m_thread = new std::thread(&MRecorder::CaptureThread, this);\n\n\treturn true;\n}\n\nbool MRecorder::Start()\n{\n    if(m_captureBuffer)\n    {\n        if (m_iscapture) \n            return true;\n\n        m_iscapture = true;\n        m_signal.notify_all();\n        return SUCCEEDED(m_captureBuffer->Start(DSBPLAY_LOOPING));\n    }\n    return false;\n}\n\nbool MRecorder::Stop()\n{\n    if(m_captureBuffer)\n    {\n        if (!m_iscapture)\n            return true;\n\n        m_iscapture = false;\n        return SUCCEEDED(m_captureBuffer->Stop());\n    }\n    return false;\n}\n\nMRecorder::PCMData* MRecorder::GetStreamData()\n{\n    PCMData* ret = nullptr;\n    m_queue.dequeue(ret);\n    return ret;\n}\n\nMui::_m_size MRecorder::GetDataSize()\n{\n    return Mui::_m_size(m_queue.size() * m_frameSize);\n}\n\nvoid MRecorder::CaptureThread()\n{\n    while (m_runing)\n    {\n        //休眠线程\n        if (!m_iscapture) {\n            std::unique_lock<std::mutex> lock(m_lock);\n            while (!m_iscapture) m_signal.wait(lock);\n        }\n\n        //等待通知事件\n        const DWORD res = WaitForMultipleObjects(2, m_event, FALSE, INFINITE);\n\n        if (!m_iscapture) continue;\n\n        if (res >= WAIT_OBJECT_0 && res <= WAIT_OBJECT_0 + 1) \n        {\n            auto data = new PCMData();\n            UCHAR* buffer = nullptr;\n            DWORD dwBufferSize = 0;\n            if (FAILED(m_captureBuffer->Lock(m_offsetNum * m_frameSize, m_frameSize, (LPVOID*)&buffer, &dwBufferSize, nullptr, nullptr, 0)))\n                continue;\n\n            data->data = new Mui::_m_byte[dwBufferSize];\n            data->size = dwBufferSize;\n            memcpy(data->data, buffer, dwBufferSize);\n            m_queue.enqueue(data);\n\n            m_captureBuffer->Unlock(buffer, dwBufferSize, nullptr, 0);\n\n            m_offsetNum++;\n            if (m_offsetNum == 2)\n                m_offsetNum = 0;\n        }\n    }\n}\n"
  },
  {
    "path": "libtts/Modules/AvCodec/Recorder.h",
    "content": "﻿#pragma once\n#include <dsound.h>\n#include <deque>\n#include <Mui_Base.h>\n\n#pragma comment(lib, \"dsound.lib\")\n\nclass MRecorder\n{\npublic:\n\tstruct PCMData\n\t{\n\t\tMui::_m_lpbyte data = nullptr;\n\t\tMui::_m_uint size = 0;\n\n\t\t~PCMData() { delete data; }\n\t};\n\n\tMRecorder() = default;\n\t~MRecorder();\n\n\t/*初始化录音器\n\t* @param out error - 错误信息输出\n\t* @param sampleRate - 采样率 为0则默认 44100 (最大支持44100)\n\t* @param channels - 声道数 为0则默认 2 (最大2声道立体声)\n\t* @param bit - 位数 为0则默认 16 (最大支持16位)\n\t*/\n\tbool InitRecorder(std::wstring& error, Mui::_m_uint sampleRate = 0, Mui::_m_byte channels = 0, Mui::_m_byte bit = 0, Mui::_m_uint fs = 0);\n\n\tbool Start();\n\n\tbool Stop();\n\n\t//获取一段已录制的PCM音频数据 nullptr则没有数据\n\tPCMData* GetStreamData();\n\n\t//获取总dataSize\n\tMui::_m_size GetDataSize();\n\n\t//获取采样率\n\tMui::_m_uint GetSampleRate() const { return m_sampleRate; }\n\n\t//获取声道数\n\tMui::_m_byte GetChannels() const { return m_channels; }\n\n\t//获取位数\n\tMui::_m_byte GetBitRate() const { return m_bit; }\n\n\t//获取音频帧尺寸\n\tMui::_m_uint GetFrameSize() const { return m_frameSize; }\n\n\t//获取BlockAlign\n\tMui::_m_uint GetBlockAlign() const { return m_blockAlign; }\n\nprivate:\n\t//音频参数设置\n\tMui::_m_uint m_sampleRate = 44100;\n\tMui::_m_byte m_channels = 2;\n\tMui::_m_byte m_bit = 16;\n\n\tMui::_m_uint m_frameSize = 0;\n\n\tMui::_m_uint m_blockAlign = 0;\n\n\tHANDLE m_event[2] = { nullptr };\n\n\tIDirectSoundCapture* m_captureDriver = nullptr;\n\tIDirectSoundCaptureBuffer* m_captureBuffer = nullptr;\n\n\t//录音线程相关\n\tstd::mutex m_lock;\n\tstd::condition_variable m_signal;\n\tstd::atomic_bool m_runing;\n\tstd::atomic_bool m_iscapture;\n\tstd::thread* m_thread = nullptr;\n\n\tMui::_m_uint m_offsetNum = 0;\n\n\tvoid CaptureThread();\n\n\t//录音数据\n\ttemplate <typename T>\n\tclass Queue\n\t{\n\t\tstd::deque<T> m_queue;\n\t\tstd::mutex m_mutex;\n\tpublic:\n\t\tQueue() = default;\n\n\t\tbool empty()\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\treturn m_queue.empty();\n\t\t}\n\t\tauto size()\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\treturn m_queue.size();\n\t\t}\n\t\tvoid enqueue(T& t)\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\tm_queue.push_back(t);\n\t\t}\n\t\tbool dequeue(T& t)\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\tif (m_queue.empty())\n\t\t\t\treturn false;\n\t\t\tt = std::move(m_queue.front());\n\t\t\tm_queue.pop_front();\n\t\t\treturn true;\n\t\t}\n\t\tvoid clear()\n\t\t{\n\t\t\tstd::unique_lock<std::mutex> lock(m_mutex);\n\t\t\tm_queue.clear();\n\t\t}\n\t};\n\n\tQueue<PCMData*> m_queue;\n};"
  },
  {
    "path": "libtts/Modules/InferTools/G2P/MoeVSG2P.cpp",
    "content": "﻿#include \"MoeVSG2P.hpp\"\n#include \"MJson.h\"\n#include \"../../StringPreprocess.hpp\"\n#include \"../../InferTools/inferTools.hpp\"\n#include <fstream>\n\nMoeVoiceStudioG2PHeader\nstd::wregex SignRegex(L\"[!@#$%^&*()_+\\\\-=`~,./;'\\\\[\\\\]<>?:\\\"{}|\\\\\\\\。？！，、；：“”‘’『』「」（）〔〕【】─…·—～《》〈〉]+\");\nstd::wregex WordRegex(L\"[^!@#$%^&*()_+\\\\-=`~,./;'\\\\[\\\\]<>?:\\\"{}|\\\\\\\\。？！，、；：“”‘’『』「」（）〔〕【】─…·—～《》〈〉]+\");\nstd::wregex BlankRegex(L\"[ ]+\");\nstd::wregex ChineseRegex(L\"^[\\\\u4e00-\\\\u9fa5]{0,}$\");\nstd::wregex NumberRegex(L\"\\\\d+(?:\\\\.?\\\\d+)?\");\nstd::wstring ChineseNumber[] = { L\"零\",L\"一\",L\"二\",L\"三\",L\"四\",L\"五\",L\"六\",L\"七\",L\"八\",L\"九\",L\"十\" };\nstd::wstring ChineseNumberDigit[] = { L\"\",L\"十\",L\"百\",L\"千\",L\"万\",L\"十万\",L\"百万\",L\"千万\",L\"亿\" };\nstd::wstring JapaneseNumber[] = { L\"零\",L\"一\",L\"ニ\",L\"三\",L\"四\",L\"五\",L\"六\",L\"七\",L\"八\",L\"九\",L\"十\" };\nstd::wstring JapaneseNumberDigit[] = { L\"\",L\"十\",L\"百\",L\"千\",L\"万\",L\"十万\",L\"百万\",L\"千万\",L\"億\" };\nstd::unordered_map<std::wstring, std::wstring> _PUNCTUATION_MAP{\n\t{ L\"：\", L\",\" }, { L\"；\", L\",\" }, { L\"，\", L\",\" }, { L\"。\", L\".\" }, { L\"！\", L\"!\" }, { L\"？\", L\"?\" },\n\t{ L\"·\", L\",\" }, { L\"、\", L\",\" }, { L\"...\", L\"…\" }, { L\"$\", L\".\" }, { L\"“\", L\"'\" },\n\t{ L\"”\", L\"'\" }, { L\"‘\", L\"'\" }, { L\"’\", L\"'\" }, { L\"（\", L\"'\" }, { L\"）\", L\"'\" }, { L\"(\", L\"'\" },\n\t{ L\")\", L\"'\" }, { L\"《\", L\"'\" }, { L\"》\", L\"'\" }, { L\"【\", L\"'\" }, { L\"】\", L\"'\" }, { L\"[\", L\"'\" },\n\t{ L\"]\", L\"'\" }, { L\"—\", L\"-\" }, { L\"～\", L\"-\" }, { L\"~\", L\"-\" }, { L\"「\", L\"'\" }, { L\"」\", L\"'\" }\n};\nstd::unordered_map<std::wstring, std::wstring> _ALPHASYMBOL_MAP{\n\t{L\"#\", L\"シャープ\"}, { L\"%\", L\"パーセント\" }, { L\"&\", L\"アンド\" }, { L\"+\", L\"プラス\" }, { L\"-\", L\"マイナス\" },\n\t{ L\":\", L\"コロン\" }, { L\";\", L\"セミコロン\" }, { L\"<\", L\"小なり\" }, { L\"=\", L\"イコール\" }, { L\">\", L\"大なり\" },\n\t{ L\"@\", L\"アット\" }, { L\"a\", L\"エー\" }, { L\"b\", L\"ビー\" }, { L\"c\", L\"シー\" }, { L\"d\", L\"ディー\" }, { L\"e\", L\"イー\" },\n\t{ L\"f\", L\"エフ\" }, { L\"g\", L\"ジー\" }, { L\"h\", L\"エイチ\" }, { L\"i\", L\"アイ\" }, { L\"j\", L\"ジェー\" }, { L\"k\", L\"ケー\" },\n\t{ L\"l\", L\"エル\" }, { L\"m\", L\"エム\" }, { L\"n\", L\"エヌ\" }, { L\"o\", L\"オー\" }, { L\"p\", L\"ピー\" }, { L\"q\", L\"キュー\" },\n\t{ L\"r\", L\"アール\" }, { L\"s\", L\"エス\" }, { L\"t\", L\"ティー\" }, { L\"u\", L\"ユー\" }, { L\"v\", L\"ブイ\" }, { L\"w\", L\"ダブリュー\" },\n\t{ L\"x\", L\"エックス\" }, { L\"y\", L\"ワイ\" }, { L\"z\", L\"ゼット\" }, { L\"α\", L\"アルファ\" }, { L\"β\", L\"ベータ\" }, { L\"γ\", L\"ガンマ\" },\n\t{ L\"δ\", L\"デルタ\" }, { L\"ε\", L\"イプシロン\" }, { L\"ζ\", L\"ゼータ\" }, { L\"η\", L\"イータ\" }, { L\"θ\", L\"シータ\" }, { L\"ι\", L\"イオタ\" },\n\t{ L\"κ\", L\"カッパ\" }, { L\"λ\", L\"ラムダ\" }, { L\"μ\", L\"ミュー\" }, { L\"ν\", L\"ニュー\" }, { L\"ξ\", L\"クサイ\" }, { L\"ο\", L\"オミクロン\" },\n\t{ L\"π\", L\"パイ\" }, { L\"ρ\", L\"ロー\" }, { L\"σ\", L\"シグマ\" }, { L\"τ\", L\"タウ\" }, { L\"υ\", L\"ウプシロン\" }, { L\"φ\", L\"ファイ\" },\n\t{ L\"χ\", L\"カイ\" }, { L\"ψ\", L\"プサイ\" }, { L\"ω\", L\"オメガ\", }};\nstd::vector<std::pair<std::wstring, std::wstring>> _CURRENCY_MAP{{L\"\\\\$\", L\"ドル\"}, { L\"¥\", L\"円\" }, { L\"£\", L\"ポンド\" }, { L\"€\", L\"ユーロ\" }};\n\nMVSCleaner DefaultCleaner;\n\nMVSCleaner* GetDefCleaner()\n{\n\treturn &DefaultCleaner;\n}\n\n#ifdef WIN32\nMoeVoiceStudioG2PApi::~MoeVoiceStudioG2PApi()\n{\n\tunLoad();\n}\n\nMoeVoiceStudioG2PApi& MoeVoiceStudioG2PApi::operator=(MoeVoiceStudioG2PApi&& move) noexcept\n{\n\tfunc = move.func;\n\tm_hDynLib = move.m_hDynLib;\n\tmove.func = nullptr;\n\tmove.m_hDynLib = nullptr;\n\treturn *this;\n}\n\nbool MoeVoiceStudioG2PApi::enabled() const\n{\n\treturn m_hDynLib != nullptr;\n}\n\nMoeVoiceStudioG2PApi::SplitData MoeVoiceStudioG2PApi::GetSplitWords(const std::wstring& inputLen) const\n{\n\tSplitData TempData;\n\tif (getvocab)\n\t\tTempData = (*(SplitData*)getvocab(inputLen.c_str()));\n\treturn TempData;\n}\n\nvoid MoeVoiceStudioG2PApi::LoadDict(const std::wstring& Path) const\n{\n\tif (loaddic)\n\t\tloaddic(Path.c_str());\n}\n\nchar MoeVoiceStudioG2PApi::Load(const std::wstring& PluginName)\n{\n\tfunc = nullptr;\n\tfrel = nullptr;\n\tif (m_hDynLib)\n\t{\n\t\tFreeLibrary(m_hDynLib);\n\t\tm_hDynLib = nullptr;\n\t}\n\tm_hDynLib = LoadLibrary((PluginName).c_str());\n\tif (m_hDynLib == nullptr)\n\t\treturn -1;\n\tfunc = reinterpret_cast<funTy>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"PluginMain\")\n\t\t\t)\n\t\t);\n\tfrel = reinterpret_cast<freTy>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"Release\")\n\t\t\t)\n\t\t);\n\tgetvocab = reinterpret_cast<vocabFn>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"GetSplitData\")\n\t\t\t)\n\t\t);\n\tvocabrel = reinterpret_cast<freTy>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"RefreshTokenizer\")\n\t\t\t)\n\t\t);\n\tloaddic = reinterpret_cast<loadFn>(\n\t\treinterpret_cast<void*>(\n\t\t\tGetProcAddress(m_hDynLib, \"LoadDict\")\n\t\t\t)\n\t\t);\n\tif (func == nullptr)\n\t\treturn 1;\n\treturn 0;\n}\n\nstd::wstring MoeVoiceStudioG2PApi::functionAPI(const std::wstring& inputLen, const std::wstring& placeholderSymbol,\n\tconst std::wstring& extraInfo, const std::string& languageID) const\n{\n\tif (func)\n\t{\n\t\tconst auto tmp = func(inputLen.c_str(), placeholderSymbol.c_str(), extraInfo.c_str(), languageID.c_str());\n\t\tstd::wstring ret = tmp;\n\t\treturn ret;\n\t}\n\treturn inputLen;\n}\n\nvoid MoeVoiceStudioG2PApi::unLoad()\n{\n\tif (frel)\n\t\tfrel();\n\tif (vocabrel)\n\t\tvocabrel();\n\tvocabrel = nullptr;\n\tgetvocab = nullptr;\n\tloaddic = nullptr;\n\tfunc = nullptr;\n\tfrel = nullptr;\n\tif (m_hDynLib)\n\t\tFreeLibrary(m_hDynLib);\n\tm_hDynLib = nullptr;\n}\n#endif\n\nvoid MVSDict::GetDict(const std::wstring& path)\n{\n\tif (path.empty())\n\t{\n\t\t_Dict.clear();\n\t\treturn;\n\t}\n\tPlaceholderSymbol = L\"|\";\n\tstd::string phoneInfo, phoneInfoAll;\n\tstd::ifstream phonefile(path.c_str());\n\tif (!phonefile.is_open())\n\t\tLibDLVoiceCodecThrow(\"phone file not found\")\n\twhile (std::getline(phonefile, phoneInfo))\n\t\tphoneInfoAll += phoneInfo;\n\tphonefile.close();\n\tMJson PhoneJson;\n\tPhoneJson.Parse(phoneInfoAll);\n\tif (PhoneJson.HasParseError())\n\t\tLibDLVoiceCodecThrow(\"json file error\")\n\tfor (const auto& itr : PhoneJson.GetMemberArray())\n\t{\n\t\tstd::wstring Key = to_wide_string(itr.first);\n\t\tif (Key == L\"PlaceholderSymbol\")\n\t\t{\n\t\t\tif (itr.second.IsString() && itr.second.GetStringLength())\n\t\t\t\tPlaceholderSymbol = to_wide_string(itr.second.GetString());\n\t\t\tif (PlaceholderSymbol.length() > 1)\n\t\t\t\tPlaceholderSymbol = L\"|\";\n\t\t\tcontinue;\n\t\t}\n\t\tconst auto Value = itr.second.GetArray();\n\t\t_Dict[Key] = std::vector<std::wstring>();\n\t\tfor (const auto& it : Value)\n\t\t\t_Dict[Key].push_back(to_wide_string(it.GetString()));\n\t}\n}\n\nstd::vector<std::wstring> MVSDict::DictReplace(const std::vector<std::wstring>& input) const\n{\n\tstd::vector<std::wstring> _out;\n\tfor (const auto& i : input)\n\t\tif (_Dict.find(i) != _Dict.end())\n\t\t{\n\t\t\tconst auto& Value = _Dict.at(i);\n\t\t\t_out.insert(_out.end(), Value.begin(), Value.end());\n\t\t}\n\t\telse\n\t\t\t_out.emplace_back(i);\n\treturn _out;\n}\n\nstd::vector<std::wstring> MVSDict::DictReplace(const std::wstring& input, const std::wstring& tPlaceholderSymbol) const\n{\n\tstd::vector<std::wstring> _output;\n\tauto tmp = input;\n\ttmp += tPlaceholderSymbol;\n\twhile (!tmp.empty())\n\t{\n\t\tconst size_t pos = tmp.find(tPlaceholderSymbol);\n\t\tconst auto Key = tmp.substr(0, pos);\n\t\ttmp = tmp.substr(pos + 1);\n\t\tif (_Dict.find(Key) != _Dict.end())\n\t\t{\n\t\t\tconst auto& Value = _Dict.at(Key);\n\t\t\t_output.insert(_output.end(), Value.begin(), Value.end());\n\t\t}\n\t\telse\n\t\t\t_output.emplace_back(Key);\n\t}\n\n\tfor (int64_t i = int64_t(_output.size()) - 1; i >= 0; --i)\n\t\tif (_output[i].empty())\n\t\t\t_output.erase(_output.begin() + i);\n\n\treturn _output;\n}\n\nstd::wstring MVSDict::DictReplaceGetStr(const std::wstring& input, const std::wstring& tPlaceholderSymbol, bool usePlaceholderSymbol) const\n{\n\tconst auto tmp = DictReplace(input, tPlaceholderSymbol);\n\tstd::wstring output;\n\tfor (const auto& i : tmp)\n\t\tif (usePlaceholderSymbol)\n\t\t\toutput += i + tPlaceholderSymbol;\n\t\telse\n\t\t\toutput += i;\n\treturn output;\n}\n\nvoid Tokenizer::load(const std::wstring& _Path)\n{\n\tconst MJson _VocabJson(_Path);\n\tif (!_VocabJson.HasMember(\"ContinuingSubwordPrefix\") ||\n\t\t!_VocabJson.HasMember(\"Type\") ||\n\t\t!_VocabJson.HasMember(\"Vocab\") ||\n\t\t_VocabJson[\"ContinuingSubwordPrefix\"].Empty() ||\n\t\t_VocabJson[\"Type\"].Empty() ||\n\t\t!_VocabJson[\"ContinuingSubwordPrefix\"].IsString() ||\n\t\t!_VocabJson[\"Type\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"Vocab.json Error\")\n\tconst std::string Type = _VocabJson[\"Type\"].GetString();\n\tif (Type == \"Unigram\") Model = TokenizerModel::Unigram;\n\tSymbol = to_wide_string(_VocabJson[\"ContinuingSubwordPrefix\"].GetString());\n\n\tif (_VocabJson[\"Vocab\"].IsArray())\n\t{\n\t\tconst auto _VocabArray = _VocabJson[\"Vocab\"].GetArray();\n\t\tint64_t Index = 0;\n\t\tfor (const auto& Object : _VocabArray)\n\t\t{\n\t\t\tif (!(Object.IsString() || Object.IsArray()))\n\t\t\t{\n\t\t\t\tauto Beg = Object.MemberBegin();\n\t\t\t\tif (Beg.first.empty())\n\t\t\t\t\tcontinue;\n\t\t\t\tVocab[to_wide_string(Beg.first)] = Beg.second.GetInt64();\n\t\t\t}\n\t\t\telse\n\t\t\t\tVocab[to_wide_string(Object.IsString() ? Object.GetString() : Object.GetArray()[0].GetString())] = Index++;\n\t\t}\n\t}\n\telse\n\t{\n\t\tconst auto _VocabDict = _VocabJson[\"Vocab\"].GetMemberArray();\n\t\tfor (const auto& Pair : _VocabDict)\n\t\t{\n\t\t\tif (Pair.second.IsInt())\n\t\t\t\tVocab[to_wide_string(Pair.first)] = TokenizerType(Pair.second.GetInt());\n\t\t\telse if (Pair.second.IsFloat())\n\t\t\t\tVocab[to_wide_string(Pair.first)] = TokenizerType(Pair.second.GetFloat());\n\t\t}\n\t}\n\n\tif (_VocabJson.HasMember(\"UseSplit\") && _VocabJson[\"UseSplit\"].IsBool())\n\t\tUseSplit = _VocabJson[\"UseSplit\"].GetBool();\n}\n\nvoid Tokenizer::loadCleaner(const std::wstring& _Path) const\n{\n\tif (Cleaner)\n\t\tCleaner->loadG2p(_Path);\n}\n\nvoid Tokenizer::loadDict(const std::wstring& _Path) const\n{\n\tif (Cleaner)\n\t\tCleaner->loadDict(_Path);\n}\n\nstd::vector<std::wstring> Tokenizer::UnigramMethod(const std::wstring& Seq, size_t MaxWordLength, TokenizerMethod Method) const\n{\n\tif (Seq.empty())\n\t\treturn {};\n\t//auto SeqVector = SplitString(Seq, SignRegex);\n\tstd::vector<std::wstring> Tokens;\n\tTokens.emplace_back(L\"[CLS]\");\n\tstd::wstring SeqWord = Seq;\n\tif (Method == TokenizerMethod::Left)\n\t{\n\t\tbool FirstTime = true;\n\t\twhile (!SeqWord.empty())\n\t\t{\n\t\t\tfor (size_t SearchLength = min(MaxWordLength, SeqWord.length()); SearchLength > 0; --SearchLength)\n\t\t\t{\n\t\t\t\tif (FirstTime)\n\t\t\t\t{\n\t\t\t\t\tsize_t SubVal = 0;\n\t\t\t\t\tif (SearchLength > Symbol.length())\n\t\t\t\t\t\tSubVal = Symbol.length();\n\t\t\t\t\tconst auto SearchResult = Vocab.find(Symbol + SeqWord.substr(0, SearchLength - SubVal));\n\t\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t\t{\n\t\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\t\tSeqWord = SeqWord.substr(SearchLength - SubVal);\n\t\t\t\t\t\tFirstTime = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst auto SearchResult = Vocab.find(SeqWord.substr(0, SearchLength));\n\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t{\n\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\tSeqWord = SeqWord.substr(SearchLength);\n\t\t\t\t\tif (FirstTime) FirstTime = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (SearchLength == 1)\n\t\t\t\t{\n\t\t\t\t\tconst auto SubStr = SeqWord.substr(0, SearchLength);\n\t\t\t\t\tconst auto SearchRes = _PUNCTUATION_MAP.find(SubStr);\n\t\t\t\t\tif (SearchRes != _PUNCTUATION_MAP.end())\n\t\t\t\t\t{\n\t\t\t\t\t\tconst auto SearchR = Vocab.find(SearchRes->second);\n\t\t\t\t\t\tif (SearchR != Vocab.end())\n\t\t\t\t\t\t\tTokens.emplace_back(SearchR->first);\n\t\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (Tokens.empty() || Tokens.back() != L\"[UNK]\")\n\t\t\t\t\t\tTokens.emplace_back(SubStr);\n\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tLibDLVoiceCodecThrow(\"NotImplementedError\")\n\tTokens.emplace_back(L\"[SEP]\");\n\treturn Tokens;\n}\n\nstd::vector<std::wstring> Tokenizer::WordPieceMethod(const std::wstring& Seq, size_t MaxWordLength, TokenizerMethod Method) const\n{\n\tif (Seq.empty())\n\t\treturn {};\n\tauto SeqVector = SplitString(Seq, SignRegex);\n\tstd::vector<std::wstring> Tokens;\n\tTokens.emplace_back(L\"[CLS]\");\n\tif (Method == TokenizerMethod::Left)\n\t{\n\t\tfor (auto& SeqWord : SeqVector)\n\t\t{\n\t\t\tbool FirstTime = true;\n\t\t\twhile (!SeqWord.empty())\n\t\t\t{\n\t\t\t\tif (regex_match(SeqWord.substr(0, 1), ChineseRegex))\n\t\t\t\t{\n\t\t\t\t\tconst auto SearchResult = Vocab.find(SeqWord.substr(0, 1));\n\t\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\telse\n\t\t\t\t\t\tTokens.emplace_back(SeqWord.substr(0, 1));\n\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (size_t SearchLength = min(MaxWordLength, SeqWord.length()); SearchLength > 0; --SearchLength)\n\t\t\t\t{\n\t\t\t\t\tif (!FirstTime)\n\t\t\t\t\t{\n\t\t\t\t\t\tsize_t SubVal = 0;\n\t\t\t\t\t\tif (SearchLength > Symbol.length())\n\t\t\t\t\t\t\tSubVal = Symbol.length();\n\t\t\t\t\t\tconst auto SearchResult = Vocab.find(Symbol + SeqWord.substr(0, SearchLength - SubVal));\n\t\t\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\t\t\tSeqWord = SeqWord.substr(SearchLength - SubVal);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst auto SearchResult = Vocab.find(SeqWord.substr(0, SearchLength));\n\t\t\t\t\tif (SearchResult != Vocab.end())\n\t\t\t\t\t{\n\t\t\t\t\t\tTokens.emplace_back(SearchResult->first);\n\t\t\t\t\t\tSeqWord = SeqWord.substr(SearchLength);\n\t\t\t\t\t\tif (FirstTime) FirstTime = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (SearchLength == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst auto SubStr = SeqWord.substr(0, SearchLength);\n\t\t\t\t\t\tconst auto SearchRes = _PUNCTUATION_MAP.find(SubStr);\n\t\t\t\t\t\tif (SearchRes != _PUNCTUATION_MAP.end())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst auto SearchR = Vocab.find(SearchRes->second);\n\t\t\t\t\t\t\tif (SearchR != Vocab.end())\n\t\t\t\t\t\t\t\tTokens.emplace_back(SearchR->first);\n\t\t\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (Tokens.empty() || Tokens.back() != L\"[UNK]\")\n\t\t\t\t\t\t\tTokens.emplace_back(SubStr);\n\t\t\t\t\t\tSeqWord = SeqWord.substr(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tLibDLVoiceCodecThrow(\"NotImplementedError\")\n\tTokens.emplace_back(L\"[SEP]\");\n\treturn Tokens;\n}\n\nstd::vector<Tokenizer::TokenizerType> Tokenizer::operator()(const std::vector<std::wstring>& Seq, bool SkipBlank) const\n{\n\tstd::vector<TokenizerType> Tokens;\n\tconst auto UNKID = Vocab.at(L\"[UNK]\");\n\tfor (const auto& iter : Seq)\n\t{\n\t\tconst auto res = Vocab.find(iter);\n\t\tif (res != Vocab.end())\n\t\t\tTokens.emplace_back(res->second);\n\t\telse if(iter.empty() || Tokens.back() != UNKID)\n\t\t{\n\t\t\tif (SkipBlank && std::regex_match(iter, BlankRegex))\n\t\t\t\tcontinue;\n\t\t\tTokens.emplace_back(UNKID);\n\t\t}\n\t}\n\treturn Tokens;\n}\n\nstd::vector<std::wstring> SplitWordsFromStr(const std::wstring& Seq)\n{\n\tstd::vector<std::wstring> rtn;\n\tfor (const auto i : Seq)\n\t\trtn.emplace_back(std::wstring() + i);\n\treturn rtn;\n}\n\nstd::vector<std::wstring> Tokenizer::Tokenize(const std::wstring& Seq, size_t MaxWordLength, TokenizerMethod Method) const\n{\n\tif (Vocab.empty())\n\t\treturn SplitWordsFromStr(Seq);\n\tif (Model == TokenizerModel::WordPiece)\n\t\treturn WordPieceMethod(Seq, MaxWordLength, Method);\n\treturn UnigramMethod(Seq, MaxWordLength, Method);\n}\n\nstd::vector<std::wstring> Tokenizer::SplitString(const std::wstring& _InputRef, const std::wregex & _SignRegex)\n{\n\tif (_InputRef.empty())\n\t\treturn {};\n\tstd::wstring InputStr = _InputRef;\n\tstd::vector<std::wstring> TmpStrVec, StrVec;\n\tstd::wsmatch MatchedSign;\n\twhile (std::regex_search(InputStr, MatchedSign, _SignRegex))\n\t{\n\t\tif (MatchedSign.prefix().matched)\n\t\t\tTmpStrVec.push_back(MatchedSign.prefix());\n\t\tTmpStrVec.push_back(MatchedSign.str());\n\t\tInputStr = MatchedSign.suffix();\n\t}\n\tif (!InputStr.empty())\n\t\tTmpStrVec.emplace_back(InputStr);\n\tfor(const auto& i : TmpStrVec)\n\t{\n\t\tstd::wsregex_token_iterator TokenIter(i.begin(), i.end(), BlankRegex, -1);\n\t\tdecltype(TokenIter) TokenIterEnd;\n\t\tfor (; TokenIter != TokenIterEnd; ++TokenIter)\n\t\t\tif (!TokenIter->str().empty())\n\t\t\t\tStrVec.push_back(TokenIter->str());\n\t}\n\treturn StrVec;\n}\n\nstd::vector<std::wstring> Tokenizer::SplitWithPlugin(const std::vector<std::wstring>& _Inputs) const\n{\n\tstd::vector<std::wstring> SeqVec;\n\tfor(const auto& Seq : _Inputs)\n\t{\n\t\tconst auto SplitedWords = GetCleaner().GetCleaner().GetSplitWords(Seq);\n\t\tfor (size_t i = 0; i < SplitedWords.Size; ++i)\n\t\t{\n\t\t\tauto TmpString = to_wide_string(SplitedWords.Data[i]);\n\t\t\tTmpString = TmpString.substr(0, TmpString.find(L','));\n\t\t\tSeqVec.emplace_back(std::move(TmpString));\n\t\t}\n\t}\n\treturn SeqVec;\n}\n\nstd::wstring NumberToChinese(double Number)\n{\n\tstd::wstring StrRtn;\n\tstd::wstring InputStr = std::to_wstring(Number);\n\tconst size_t PIndex = InputStr.find(L'.');\n\tstd::wstring IntegerStr, FractionStr;\n\tif (PIndex != std::wstring::npos)\n\t{\n\t\tIntegerStr = InputStr.substr(0, PIndex);\n\t\tFractionStr = InputStr.substr(PIndex + 1);\n\t\twhile (!FractionStr.empty() && FractionStr.back() == L'0')\n\t\t\tFractionStr.pop_back();\n\t}\n\telse\n\t\tIntegerStr = std::move(InputStr);\n\n\tif (IntegerStr != L\"0\")\n\t{\n\t\tsize_t MaxIntegerStrLength = IntegerStr.length();\n\t\tfor (; MaxIntegerStrLength > 0; --MaxIntegerStrLength)\n\t\t\tif (IntegerStr[MaxIntegerStrLength - 1] != L'0')\n\t\t\t\tbreak;\n\t\tif (MaxIntegerStrLength < 1)\n\t\t\tMaxIntegerStrLength = 1;\n\n\t\tconst auto DigitNum = IntegerStr.length();\n\t\tfor (size_t i = 0; i < MaxIntegerStrLength; i++)\n\t\t{\n\t\t\tconst auto NumberIndex = IntegerStr[i] - L'0';\n\t\t\tconst auto DigitIndex = DigitNum - i - 1;\n\t\t\tif (0 == NumberIndex)\n\t\t\t{\n\t\t\t\tif ((i > 0 && L'0' == IntegerStr[i - 1]) || i == IntegerStr.length() - 1)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (DigitIndex >= 4 && 0 == DigitIndex % 4)\n\t\t\t\t\tStrRtn += ChineseNumberDigit[DigitIndex];\n\t\t\t\telse\n\t\t\t\t\tStrRtn += ChineseNumber[NumberIndex];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tStrRtn += ChineseNumber[NumberIndex];\n\t\t\t\tif (IntegerStr.length() == 2 && IntegerStr[0] == '1' && i == 0)\n\t\t\t\t\tStrRtn.erase(0);\n\t\t\t\tif (0 == DigitIndex % 4)\n\t\t\t\t\tStrRtn += ChineseNumberDigit[DigitIndex];\n\t\t\t\telse\n\t\t\t\t\tStrRtn += ChineseNumberDigit[DigitIndex % 4];\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tStrRtn += L\"零\";\n\n\tif (!FractionStr.empty())\n\t\tStrRtn += L\"点\";\n\tfor(const auto FractionI : FractionStr)\n\t{\n\t\tconst auto NumberIndex = FractionI - L'0';\n\t\tStrRtn += ChineseNumber[NumberIndex];\n\t}\n\treturn StrRtn;\n}\n\nstd::wstring NumberToJapanese(double Number)\n{\n\tstd::wstring StrRtn;\n\tstd::wstring InputStr = std::to_wstring(Number);\n\tconst size_t PIndex = InputStr.find(L'.');\n\tstd::wstring IntegerStr, FractionStr;\n\tif (PIndex != std::wstring::npos)\n\t{\n\t\tIntegerStr = InputStr.substr(0, PIndex);\n\t\tFractionStr = InputStr.substr(PIndex + 1);\n\t\twhile (!FractionStr.empty() && FractionStr.back() == L'0')\n\t\t\tFractionStr.pop_back();\n\t}\n\telse\n\t\tIntegerStr = std::move(InputStr);\n\n\tif (IntegerStr != L\"0\")\n\t{\n\t\tsize_t MaxIntegerStrLength = IntegerStr.length();\n\t\tfor (; MaxIntegerStrLength > 0; --MaxIntegerStrLength)\n\t\t\tif (IntegerStr[MaxIntegerStrLength - 1] != L'0')\n\t\t\t\tbreak;\n\t\tif (MaxIntegerStrLength < 1)\n\t\t\tMaxIntegerStrLength = 1;\n\n\t\tconst auto DigitNum = IntegerStr.length();\n\t\tfor (size_t i = 0; i < MaxIntegerStrLength; i++)\n\t\t{\n\t\t\tconst auto NumberIndex = IntegerStr[i] - L'0';\n\t\t\tconst auto DigitIndex = DigitNum - i - 1;\n\t\t\tif (0 == NumberIndex)\n\t\t\t{\n\t\t\t\tif ((i > 0 && L'0' == IntegerStr[i - 1]) || i == IntegerStr.length() - 1)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (DigitIndex >= 4 && 0 == DigitIndex % 4)\n\t\t\t\t\tStrRtn += JapaneseNumberDigit[DigitIndex];\n\t\t\t\telse\n\t\t\t\t\tStrRtn += JapaneseNumber[NumberIndex];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tStrRtn += JapaneseNumber[NumberIndex];\n\t\t\t\tif (IntegerStr.length() == 2 && IntegerStr[0] == '1' && i == 0)\n\t\t\t\t\tStrRtn.erase(0);\n\t\t\t\tif (0 == DigitIndex % 4)\n\t\t\t\t\tStrRtn += JapaneseNumberDigit[DigitIndex];\n\t\t\t\telse\n\t\t\t\t\tStrRtn += JapaneseNumberDigit[DigitIndex % 4];\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tStrRtn += L\"零\";\n\n\tif (!FractionStr.empty())\n\t\tStrRtn += L\"点\";\n\tfor (const auto FractionI : FractionStr)\n\t{\n\t\tconst auto NumberIndex = FractionI - L'0';\n\t\tStrRtn += JapaneseNumber[NumberIndex];\n\t}\n\treturn StrRtn;\n}\n\nstd::wstring ChineseNormalize(const std::wstring& _Input)\n{\n\tstd::wstring RtnStr;\n\tconst auto StrVec = Tokenizer::SplitString(_Input, NumberRegex);\n\tfor(const auto& Str : StrVec)\n\t{\n\t\tif (std::regex_match(Str, NumberRegex))\n\t\t\tRtnStr += NumberToChinese(_wtof(Str.c_str()));\n\t\telse\n\t\t\tRtnStr += Str;\n\t}\n\tRtnStr = std::regex_replace(RtnStr, std::wregex(L\"嗯\"), L\"恩\");\n\tRtnStr = std::regex_replace(RtnStr, std::wregex(L\"呣\"), L\"母\");\n\treturn RtnStr;\n}\n\nstd::wstring JapaneseNormalize(const std::wstring& _Input)\n{\n\tstd::wstring RtnStr;\n\tconst auto StrVec = Tokenizer::SplitString(_Input, NumberRegex);\n\tfor (const auto& Str : StrVec)\n\t{\n\t\tif (std::regex_match(Str, NumberRegex))\n\t\t\tRtnStr += NumberToJapanese(_wtof(Str.c_str()));\n\t\telse\n\t\t\tRtnStr += Str;\n\t}\n\tfor (const auto& PunPair : _CURRENCY_MAP)\n\t\tRtnStr = std::regex_replace(RtnStr, std::wregex(PunPair.first), PunPair.second);\n\treturn RtnStr;\n}\n\nstd::wstring NormalizeText(const std::wstring& _Input, const std::string& _Language)\n{\n\tif (_Language == \"ZH\")\n\t\treturn ChineseNormalize(_Input);\n\tif (_Language == \"JP\")\n\t\treturn JapaneseNormalize(_Input);\n\treturn _Input;\n}\n\nTokenizer EmptyTokenizer;\n\nTokenizer& GetEmptyVocabTokenizer()\n{\n\treturn EmptyTokenizer;\n}\n\nMoeVoiceStudioG2PEnd"
  },
  {
    "path": "libtts/Modules/InferTools/G2P/MoeVSG2P.hpp",
    "content": "﻿/**\n * FileName: MoeVSG2P.hpp\n * Note: MoeVoiceStudioCore G2P及字典（TTS用）\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2023-11-9 Create\n*/\n\n#pragma once\n#include <string>\n#ifdef _WIN32\n#ifndef UNICODE\n#define UNICODE\n#endif\n#include <Windows.h>\n#endif\n#include <map>\n#include <regex>\n#include <vector>\n#include <unordered_map>\n\n#define MoeVoiceStudioG2PHeader namespace MoeVSG2P {\n#define MoeVoiceStudioG2PEnd }\n\nMoeVoiceStudioG2PHeader\n\nclass MoeVoiceStudioG2PApi\n{\npublic:\n\tstruct SplitData\n\t{\n\t\tchar** Data = nullptr;\n\t\tsize_t Size = 0;\n\t};\n\tusing funTy = const wchar_t* (*)(const wchar_t*, const wchar_t*, const wchar_t*, const char*);\n\tusing freTy = void (*)();\n\tusing vocabFn = void* (*)(const wchar_t*);\n\tusing loadFn = void (*)(const wchar_t*);\n\tMoeVoiceStudioG2PApi() = default;\n\t~MoeVoiceStudioG2PApi();\n\tchar Load(const std::wstring& PluginName);\n\tvoid unLoad();\n\tvoid ReleaseVoc() const\n\t{\n\t\tif (vocabrel)\n\t\t\tvocabrel();\n\t}\n\t[[nodiscard]] SplitData GetSplitWords(const std::wstring& inputLen) const;\n\t[[nodiscard]] std::wstring functionAPI(const std::wstring& inputLen, const std::wstring& placeholderSymbol,\n\t\tconst std::wstring& extraInfo, const std::string& languageID) const;\n\tMoeVoiceStudioG2PApi(const MoeVoiceStudioG2PApi&) = delete;\n\tMoeVoiceStudioG2PApi(MoeVoiceStudioG2PApi&&) = delete;\n\tMoeVoiceStudioG2PApi& operator=(MoeVoiceStudioG2PApi&& move) noexcept;\n\t[[nodiscard]] bool enabled() const;\n\tMoeVoiceStudioG2PApi& operator=(const MoeVoiceStudioG2PApi&) = delete;\n\tvoid LoadDict(const std::wstring& Path) const;\nprivate:\n#ifdef WIN32\n\tconst wchar_t*(*func)(const wchar_t*, const wchar_t*, const wchar_t*, const char*) = nullptr;\n\tvoid (*frel)() = nullptr;\n\tvoid* (*getvocab)(const wchar_t*) = nullptr;\n\tvoid (*vocabrel)() = nullptr;\n\tvoid (*loaddic)(const wchar_t*) = nullptr;\n\tHINSTANCE m_hDynLib = nullptr;\n#endif\n};\n\nclass MVSDict\n{\npublic:\n\tMVSDict() = default;\n\t~MVSDict() = default;\n\n\t[[nodiscard]] bool enabled() const\n\t{\n\t\treturn !_Dict.empty();\n\t}\n\n\tvoid unload()\n\t{\n\t\t_Dict.clear();\n\t}\n\n\t[[nodiscard]] std::vector<std::wstring> DictReplace(const std::vector<std::wstring>& input) const;\n\n\t[[nodiscard]] std::vector<std::wstring> DictReplace(const std::wstring& input, const std::wstring& tPlaceholderSymbol) const;\n\n\t[[nodiscard]] std::wstring DictReplaceGetStr(const std::wstring& input, const std::wstring& tPlaceholderSymbol, bool usePlaceholderSymbol = true) const;\n\n\tvoid GetDict(const std::wstring& path);\n\n\t[[nodiscard]] std::wstring getPlaceholderSymbol() const\n\t{\n\t\treturn PlaceholderSymbol;\n\t}\nprivate:\n\tstd::map<std::wstring, std::vector<std::wstring>> _Dict;\n\tstd::wstring PlaceholderSymbol = L\"|\";\n};\n\nclass MVSCleaner\n{\npublic:\n\tMVSCleaner() = default;\n\n\t~MVSCleaner()\n\t{\n\t\tunloadDict();\n\t\tunloadG2p();\n\t}\n\n\tvoid unloadDict()\n\t{\n\t\t_Dict.unload();\n\t}\n\n\tvoid unloadG2p()\n\t{\n\t\t_G2p.unLoad();\n\t}\n\n\tvoid loadDict(const std::wstring& _path)\n\t{\n\t\tif (_Dict.enabled())\n\t\t\tunloadDict();\n\t\t_Dict.GetDict(_path);\n\t}\n\n\tvoid loadG2p(const std::wstring& _path)\n\t{\n\t\tif (_G2p.enabled())\n\t\t\tunloadG2p();\n\t\t_G2p.Load(_path);\n\t}\n\n\t[[nodiscard]] bool G2pEnabled() const\n\t{\n\t\treturn _G2p.enabled();\n\t}\n\n\t[[nodiscard]] bool DictEnabled() const\n\t{\n\t\treturn _Dict.enabled();\n\t}\n\n\t[[nodiscard]] std::wstring G2p(const std::wstring& _text, const std::wstring& placeholderSymbol,\n\t\tconst std::wstring& extraInfo, const std::string& languageID) const\n\t{\n\t\treturn _G2p.functionAPI(_text, placeholderSymbol, extraInfo, languageID);\n\t}\n\n\t[[nodiscard]] const MoeVoiceStudioG2PApi& GetCleaner() const\n\t{\n\t\treturn _G2p;\n\t}\n\n\t[[nodiscard]] auto DictReplace(const std::vector<std::wstring>& input) const\n\t{\n\t\treturn _Dict.DictReplace(input);\n\t}\n\n\t[[nodiscard]] auto DictReplace(const std::wstring& input, const std::wstring& tPlaceholderSymbol) const\n\t{\n\t\treturn _Dict.DictReplace(input, tPlaceholderSymbol);\n\t}\n\n\t[[nodiscard]] auto DictReplaceGetStr(const std::wstring& input, const std::wstring& tPlaceholderSymbol, bool usePlaceholderSymbol = true) const\n\t{\n\t\treturn _Dict.DictReplaceGetStr(input, tPlaceholderSymbol, usePlaceholderSymbol);\n\t}\n\n\t[[nodiscard]] std::wstring getPlaceholderSymbol() const\n\t{\n\t\treturn _Dict.getPlaceholderSymbol();\n\t}\n\nprotected:\n\tMoeVoiceStudioG2PApi _G2p;\n\tMVSDict _Dict;\n};\n\nclass Tokenizer\n{\npublic:\n\tusing TokenizerType = int64_t;\n\tenum class TokenizerMethod\n\t{\n\t\tLeft,\n\t\tRight\n\t};\n\tenum class TokenizerModel\n\t{\n\t\tUnigram,\n\t\tWordPiece\n\t};\n\tTokenizer() = default;\n\tTokenizer(const std::wstring& _Path)\n\t{\n\t\tload(_Path);\n\t}\n\tvoid BondCleaner(MVSCleaner* MCleaner)\n\t{\n\t\tCleaner = MCleaner;\n\t}\n\tvoid load(const std::wstring& _Path);\n\tvoid loadCleaner(const std::wstring& _Path) const;\n\tvoid loadDict(const std::wstring& _Path) const;\n\t[[nodiscard]] const MVSCleaner& GetCleaner() const\n\t{\n\t\treturn *Cleaner;\n\t}\n\tconst MVSCleaner* operator->() const\n\t{\n\t\treturn Cleaner;\n\t}\n\t[[nodiscard]] std::vector<std::wstring> WordPieceMethod(const std::wstring& Seq, size_t MaxWordLength = 25, TokenizerMethod Method = TokenizerMethod::Left) const;\n\t[[nodiscard]] std::vector<std::wstring> UnigramMethod(const std::wstring& Seq, size_t MaxWordLength = 25, TokenizerMethod Method = TokenizerMethod::Left) const;\n\tstd::vector<TokenizerType> operator()(const std::vector<std::wstring>& Seq, bool SkipBlank = false) const;\n\t[[nodiscard]] std::vector<std::wstring> Tokenize(const std::wstring& Seq, size_t MaxWordLength = 25, TokenizerMethod Method = TokenizerMethod::Left) const;\n\t[[nodiscard]] std::vector<std::wstring> SplitWithPlugin(const std::vector<std::wstring>& _Inputs) const;\n\tstatic std::vector<std::wstring> SplitString(const std::wstring& _InputRef, const std::wregex& _SignRegex);\nprivate:\n\tstd::unordered_map<std::wstring, TokenizerType> Vocab;\n\tstd::wstring Symbol = L\"##\";\n\tTokenizerModel Model = TokenizerModel::WordPiece;\n\tMVSCleaner* Cleaner = nullptr;\n\tbool UseSplit = false;\n};\n\nTokenizer& GetEmptyVocabTokenizer();\n\nMVSCleaner* GetDefCleaner();\n\nstd::wstring JapaneseNormalize(const std::wstring& _Input);\n\nstd::wstring ChineseNormalize(const std::wstring& _Input);\n\nstd::wstring NormalizeText(const std::wstring& _Input, const std::string& _Language);\n\nstd::wstring NumberToChinese(double Number);\n\nstd::wstring NumberToJapanese(double Number);\n\nMoeVoiceStudioG2PEnd"
  },
  {
    "path": "libtts/Modules/InferTools/inferTools.cpp",
    "content": "﻿#include \"inferTools.hpp\"\n#include \"string\"\n#ifdef MoeVoiceStudioAvxAcc\n#include <immintrin.h>\n#endif\nInferTools::Wav::Wav(const wchar_t* Path) :header(WAV_HEADER()) {\n    char buf[1024];\n    FILE* stream;\n    _wfreopen_s(&stream, Path, L\"rb\", stderr);\n    if (stream == nullptr) {\n        throw (std::exception(\"File not exists\"));\n    }\n    fread(buf, 1, HEAD_LENGTH, stream);\n    int pos = 0;\n    while (pos < HEAD_LENGTH) {\n        if ((buf[pos] == 'R') && (buf[pos + 1] == 'I') && (buf[pos + 2] == 'F') && (buf[pos + 3] == 'F')) {\n            pos += 4;\n            break;\n        }\n        ++pos;\n    }\n    if (pos >= HEAD_LENGTH)\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\n    header.ChunkSize = *(int*)&buf[pos];\n    pos += 8;\n    while (pos < HEAD_LENGTH) {\n        if ((buf[pos] == 'f') && (buf[pos + 1] == 'm') && (buf[pos + 2] == 't')) {\n            pos += 4;\n            break;\n        }\n        ++pos;\n    }\n    if (pos >= HEAD_LENGTH)\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\n    header.Subchunk1Size = *(int*)&buf[pos];\n    pos += 4;\n    header.AudioFormat = *(short*)&buf[pos];\n    pos += 2;\n    header.NumOfChan = *(short*)&buf[pos];\n    pos += 2;\n    header.SamplesPerSec = *(int*)&buf[pos];\n    pos += 4;\n    header.bytesPerSec = *(int*)&buf[pos];\n    pos += 4;\n    header.blockAlign = *(short*)&buf[pos];\n    pos += 2;\n    header.bitsPerSample = *(short*)&buf[pos];\n    pos += 2;\n    while (pos < HEAD_LENGTH) {\n        if ((buf[pos] == 'd') && (buf[pos + 1] == 'a') && (buf[pos + 2] == 't') && (buf[pos + 3] == 'a')) {\n            pos += 4;\n            break;\n        }\n        ++pos;\n    }\n    if (pos >= HEAD_LENGTH)\n        throw (std::exception(\"Don't order fried rice (annoyed)\"));\n    header.Subchunk2Size = *(int*)&buf[pos];\n    pos += 4;\n    StartPos = pos;\n    Data = new char[header.Subchunk2Size + 1];\n    fseek(stream, StartPos, SEEK_SET);\n    fread(Data, 1, header.Subchunk2Size, stream);\n    if (stream != nullptr) {\n        fclose(stream);\n    }\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n}\n\nInferTools::Wav::Wav(const Wav& input) :header(WAV_HEADER()) {\n    Data = new char[(input.header.Subchunk2Size + 1)];\n    if (Data == nullptr) { LibDLVoiceCodecThrow(\"OOM\") }\n    memcpy(header.RIFF, input.header.RIFF, 4);\n    memcpy(header.fmt, input.header.fmt, 4);\n    memcpy(header.WAVE, input.header.WAVE, 4);\n    memcpy(header.Subchunk2ID, input.header.Subchunk2ID, 4);\n    header.ChunkSize = input.header.ChunkSize;\n    header.Subchunk1Size = input.header.Subchunk1Size;\n    header.AudioFormat = input.header.AudioFormat;\n    header.NumOfChan = input.header.NumOfChan;\n    header.SamplesPerSec = input.header.SamplesPerSec;\n    header.bytesPerSec = input.header.bytesPerSec;\n    header.blockAlign = input.header.blockAlign;\n    header.bitsPerSample = input.header.bitsPerSample;\n    header.Subchunk2Size = input.header.Subchunk2Size;\n    StartPos = input.StartPos;\n    memcpy(Data, input.Data, input.header.Subchunk2Size);\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n}\n\nInferTools::Wav::Wav(Wav&& input) noexcept\n{\n    Data = input.Data;\n    input.Data = nullptr;\n    memcpy(header.RIFF, input.header.RIFF, 4);\n    memcpy(header.fmt, input.header.fmt, 4);\n    memcpy(header.WAVE, input.header.WAVE, 4);\n    memcpy(header.Subchunk2ID, input.header.Subchunk2ID, 4);\n    header.ChunkSize = input.header.ChunkSize;\n    header.Subchunk1Size = input.header.Subchunk1Size;\n    header.AudioFormat = input.header.AudioFormat;\n    header.NumOfChan = input.header.NumOfChan;\n    header.SamplesPerSec = input.header.SamplesPerSec;\n    header.bytesPerSec = input.header.bytesPerSec;\n    header.blockAlign = input.header.blockAlign;\n    header.bitsPerSample = input.header.bitsPerSample;\n    header.Subchunk2Size = input.header.Subchunk2Size;\n    StartPos = input.StartPos;\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n}\n\nInferTools::Wav& InferTools::Wav::operator=(Wav&& input) noexcept\n{\n    destory();\n    Data = input.Data;\n    input.Data = nullptr;\n    memcpy(header.RIFF, input.header.RIFF, 4);\n    memcpy(header.fmt, input.header.fmt, 4);\n    memcpy(header.WAVE, input.header.WAVE, 4);\n    memcpy(header.Subchunk2ID, input.header.Subchunk2ID, 4);\n    header.ChunkSize = input.header.ChunkSize;\n    header.Subchunk1Size = input.header.Subchunk1Size;\n    header.AudioFormat = input.header.AudioFormat;\n    header.NumOfChan = input.header.NumOfChan;\n    header.SamplesPerSec = input.header.SamplesPerSec;\n    header.bytesPerSec = input.header.bytesPerSec;\n    header.blockAlign = input.header.blockAlign;\n    header.bitsPerSample = input.header.bitsPerSample;\n    header.Subchunk2Size = input.header.Subchunk2Size;\n    StartPos = input.StartPos;\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n    return *this;\n}\n\nInferTools::Wav& InferTools::Wav::cat(const Wav& input)\n{\n    if (header.AudioFormat != 1) return *this;\n    if (header.SamplesPerSec != input.header.bitsPerSample || header.NumOfChan != input.header.NumOfChan) return *this;\n    char* buffer = new char[(int64_t)header.Subchunk2Size + (int64_t)input.header.Subchunk2Size + 1];\n    if (buffer == nullptr)return *this;\n    memcpy(buffer, Data, header.Subchunk2Size);\n    memcpy(buffer + header.Subchunk2Size, input.Data, input.header.Subchunk2Size);\n    header.ChunkSize += input.header.Subchunk2Size;\n    header.Subchunk2Size += input.header.Subchunk2Size;\n    delete[] Data;\n    Data = buffer;\n    SData = reinterpret_cast<int16_t*>(Data);\n    dataSize = header.Subchunk2Size / 2;\n    return *this;\n}\n\nstd::vector<size_t> InferTools::SliceAudio(const std::vector<int16_t>& input, const SlicerSettings& _slicer)\n{\n    if (input.size() < size_t(_slicer.MinLength) * _slicer.SamplingRate)\n        return {0, input.size()};\n\n    std::vector<unsigned long long> slice_point;\n    bool slice_tag = true;\n    slice_point.emplace_back(0);\n\n    unsigned long CurLength = 0;\n    for (size_t i = 0; i + _slicer.WindowLength < input.size(); i += _slicer.HopSize)\n    {\n\n        if (slice_tag)\n        {\n            const auto vol = abs(getAvg(input.data() + i, input.data() + i + _slicer.WindowLength));\n            if (vol < _slicer.Threshold)\n            {\n                slice_tag = false;\n                if (CurLength > _slicer.MinLength * _slicer.SamplingRate)\n                {\n                    CurLength = 0;\n                    slice_point.emplace_back(i + (_slicer.WindowLength / 2));\n                }\n            }\n            else\n                slice_tag = true;\n        }\n        else\n        {\n            const auto vol = abs(getAvg(input.data() + i, input.data() + i + _slicer.WindowLength));\n            if (vol < _slicer.Threshold)\n                slice_tag = false;\n            else\n            {\n                slice_tag = true;\n                if (CurLength > _slicer.MinLength * _slicer.SamplingRate)\n                {\n                    CurLength = 0;\n                    slice_point.emplace_back(i + (_slicer.WindowLength / 2));\n                }\n            }\n        }\n        CurLength += _slicer.HopSize;\n    }\n    slice_point.push_back(input.size());\n    return slice_point;\n}\n\nstd::vector<double> InferTools::arange(double start, double end, double step, double div)\n{\n    std::vector<double> output;\n    while (start < end)\n    {\n        output.push_back(start / div);\n        start += step;\n    }\n    return output;\n}\n\nstd::vector<float> InferTools::mean_filter(const std::vector<float>& vec, size_t window_size)\n{\n    std::vector<float> result;\n\n    if (window_size > vec.size() || window_size < 2)\n        return vec;\n\n    const size_t half = window_size / 2; // 窗口半径，向下取整\n\n    for (size_t i = half; i < vec.size() - half; i++) {\n        float sum = 0.0f;\n        for (size_t j = i - half; j <= i + half; j++) {\n            sum += vec[j];\n        }\n        result.push_back(sum / (float)(window_size % 2 ? window_size : window_size + 1));\n    }\n\n    return result;\n}\n\n#ifdef MoeVoiceStudioAvxAcc\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator+=(const FloatTensorWrapper& _right)\n{\n    if (_data_size != _right._data_size)\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\n    const size_t num_avx2_elements = _data_size / 8;\n    for (size_t i = 0; i < num_avx2_elements; i++) {\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\n        const __m256 result_avx2 = _mm256_add_ps(a_avx2, b_avx2);\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] += _right[i];\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator-=(const FloatTensorWrapper& _right)\n{\n    if (_data_size != _right._data_size)\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\n    const size_t num_avx2_elements = _data_size / 8;\n    for (size_t i = 0; i < num_avx2_elements; i++) {\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\n        const __m256 result_avx2 = _mm256_sub_ps(a_avx2, b_avx2);\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] -= _right[i];\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator*=(const FloatTensorWrapper& _right)\n{\n    if (_data_size != _right._data_size)\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\n    const size_t num_avx2_elements = _data_size / 8;\n    for (size_t i = 0; i < num_avx2_elements; i++) {\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\n        const __m256 result_avx2 = _mm256_mul_ps(a_avx2, b_avx2);\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] *= _right[i];\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator/=(const FloatTensorWrapper& _right)\n{\n    if (_data_size != _right._data_size)\n        LibDLVoiceCodecThrow(\"Vector Size MisMatch\");\n    const size_t num_avx2_elements = _data_size / 8;\n    for (size_t i = 0; i < num_avx2_elements; i++) {\n        const __m256 a_avx2 = _mm256_load_ps(&_data_ptr[i * 8]);\n        const __m256 b_avx2 = _mm256_load_ps(&_right[i * 8]);\n        const __m256 result_avx2 = _mm256_div_ps(a_avx2, b_avx2);\n        _mm256_store_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] /= _right[i];\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator+=(float _right)\n{\n    const size_t num_avx2_elements = _data_size / 8;\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\n        const __m256 result_avx2 = _mm256_add_ps(vec_avx2, value_avx2);\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] += _right;\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator-=(float _right)\n{\n    const size_t num_avx2_elements = _data_size / 8;\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\n        const __m256 result_avx2 = _mm256_sub_ps(vec_avx2, value_avx2);\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] -= _right;\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator*=(float _right)\n{\n    const size_t num_avx2_elements = _data_size / 8;\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\n        const __m256 result_avx2 = _mm256_mul_ps(vec_avx2, value_avx2);\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] *= _right;\n    return *this;\n}\n\nInferTools::FloatTensorWrapper& InferTools::FloatTensorWrapper::operator/=(float _right)\n{\n    const size_t num_avx2_elements = _data_size / 8;\n    const __m256 value_avx2 = _mm256_set1_ps(_right);\n    for (size_t i = 0; i < num_avx2_elements; ++i) {\n        const __m256 vec_avx2 = _mm256_loadu_ps(&_data_ptr[i * 8]);\n        const __m256 result_avx2 = _mm256_div_ps(vec_avx2, value_avx2);\n        _mm256_storeu_ps(&_data_ptr[i * 8], result_avx2);\n    }\n    for (size_t i = num_avx2_elements * 8; i < _data_size; ++i)\n        _data_ptr[i] /= _right;\n    return *this;\n}\n#endif"
  },
  {
    "path": "libtts/Modules/InferTools/inferTools.hpp",
    "content": "﻿/**\n * FileName: InferTools.hpp\n * Note: MoeVoiceStudioCore 推理工具的定义\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <fstream>\n#include <vector>\n#include <functional>\n#include <matlabfunctions.h>\n#include <filesystem>\n#define MOEVSINFERTOOLSHEADER namespace InferTools {\n#define MOEVSINFERTOOLSEND }\n\n#define LibDLVoiceCodecThrow(message) { \\\n\tconst std::string LibDlCodecThrowMessage = message;\\\n\tconst std::string LibDlCodecThrowMessagePrefix = std::string(\"[In \\\"\") + std::filesystem::path(__FILE__).filename().string() + \"\\\" Line \" + std::to_string(__LINE__) + \"] \"; \\\n\tif(LibDlCodecThrowMessage.substr(0, LibDlCodecThrowMessagePrefix.length()) != LibDlCodecThrowMessagePrefix) \\\n\t\tthrow std::exception((LibDlCodecThrowMessagePrefix + LibDlCodecThrowMessage).c_str()); \\\n\telse \\\n\t\tthrow std::exception(LibDlCodecThrowMessage.c_str()); \\\n}\n\nMOEVSINFERTOOLSHEADER\nstruct SlicerSettings\n{\n\tint32_t SamplingRate = 48000;\n\tdouble Threshold = 30.;\n\tdouble MinLength = 3.;\n\tint32_t WindowLength = 2048;\n\tint32_t HopSize = 512;\n};\nclass Wav {\npublic:\n\tstatic constexpr int HEAD_LENGTH = 1024;\n\tstruct WAV_HEADER {\n\t\tchar             RIFF[4] = { 'R','I','F','F' };\n\t\tunsigned long    ChunkSize;\n\t\tchar             WAVE[4] = { 'W','A','V','E' };\n\t\tchar             fmt[4] = { 'f','m','t',' ' };\n\t\tunsigned long    Subchunk1Size;\n\t\tunsigned short   AudioFormat;\n\t\tunsigned short   NumOfChan;\n\t\tunsigned long    SamplesPerSec;\n\t\tunsigned long    bytesPerSec;\n\t\tunsigned short   blockAlign;\n\t\tunsigned short   bitsPerSample;\n\t\tchar             Subchunk2ID[4] = { 'd','a','t','a' };\n\t\tunsigned long    Subchunk2Size;\n\t\tWAV_HEADER(unsigned long cs = 36, unsigned long sc1s = 16, unsigned short af = 1, unsigned short nc = 1, unsigned long sr = 22050, unsigned long bps = 44100, unsigned short ba = 2, unsigned short bips = 16, unsigned long sc2s = 0) :ChunkSize(cs), Subchunk1Size(sc1s), AudioFormat(af), NumOfChan(nc), SamplesPerSec(sr), bytesPerSec(bps), blockAlign(ba), bitsPerSample(bips), Subchunk2Size(sc2s) {}\n\t};\n\tusing iterator = int16_t*;\n\tWav(unsigned long cs = 36, unsigned long sc1s = 16, unsigned short af = 1, unsigned short nc = 1, unsigned long sr = 22050, unsigned long bps = 44100, unsigned short ba = 2, unsigned short bips = 16, unsigned long sc2s = 0) :header({\n\t\t\tcs,\n\t\t\tsc1s,\n\t\t\taf,\n\t\t\tnc,\n\t\t\tsr,\n\t\t\tbps,\n\t\t\tba,\n\t\t\tbips,\n\t\t\tsc2s\n\t\t}), Data(nullptr), StartPos(44) {\n\t\tdataSize = 0;\n\t\tSData = nullptr;\n\t}\n\tWav(unsigned long sr, unsigned long length, const void* data) :header({\n\t\t\t36,\n\t\t\t16,\n\t\t\t1,\n\t\t\t1,\n\t\t\tsr,\n\t\t\tsr * 2,\n\t\t\t2,\n\t\t\t16,\n\t\t\tlength\n\t\t}), Data(new char[length + 1]), StartPos(44)\n\t{\n\t\theader.ChunkSize = 36 + length;\n\t\tmemcpy(Data, data, length);\n\t\tSData = reinterpret_cast<int16_t*>(Data);\n\t\tdataSize = length / 2;\n\t}\n\tWav(const wchar_t* Path);\n\tWav(const Wav& input);\n\tWav(Wav&& input) noexcept;\n\tWav& operator=(const Wav& input) = delete;\n\tWav& operator=(Wav&& input) noexcept;\n\t~Wav() { destory(); }\n\tWav& cat(const Wav& input);\n\t[[nodiscard]] bool isEmpty() const { return this->header.Subchunk2Size == 0; }\n\t[[nodiscard]] const char* getData() const { return Data; }\n\tchar* getData() { return Data; }\n\t[[nodiscard]] WAV_HEADER getHeader() const { return header; }\n\tWAV_HEADER& Header() { return header; }\n\tvoid destory() const { delete[] Data; }\n\tvoid changeData(const void* indata, long length, int sr)\n\t{\n\t\tdelete[] Data;\n\t\tData = new char[length];\n\t\tmemcpy(Data, indata, length);\n\t\theader.ChunkSize = 36 + length;\n\t\theader.Subchunk2Size = length;\n\t\theader.SamplesPerSec = sr;\n\t\theader.bytesPerSec = 2 * sr;\n\t}\n\tint16_t& operator[](const size_t index) const\n\t{\n\t\tif (index < dataSize)\n\t\t\treturn *(SData + index);\n\t\treturn *(SData + dataSize - 1);\n\t}\n\t[[nodiscard]] iterator begin() const\n\t{\n\t\treturn reinterpret_cast<int16_t*>(Data);\n\t}\n\t[[nodiscard]] iterator end() const\n\t{\n\t\treturn reinterpret_cast<int16_t*>(Data + header.Subchunk2Size);\n\t}\n\t[[nodiscard]] int64_t getDataLen()const\n\t{\n\t\treturn static_cast<int64_t>(dataSize);\n\t}\n\tvoid Writef(const std::wstring& filepath) const\n\t{\n\t\tFILE* FOut = nullptr;\n\t\t_wfopen_s(&FOut, filepath.c_str(), L\"wb\");\n\t\tif (!FOut)\n\t\t\treturn;\n\t\tfwrite(&header, 1, sizeof(header), FOut);\n\t\tfwrite(Data, 1, dataSize * 2, FOut);\n\t\tfclose(FOut);\n\t\tFOut = nullptr;\n\t}\n\n\tstatic void WritePCMData(int samplingrate, int channel, const std::vector<int16_t>& PCMDATA, const std::wstring& filepath)\n\t{\n\t\tconst WAV_HEADER TmpHeader(long(36 + 2 * PCMDATA.size()), 16, 1, short(channel), samplingrate, samplingrate * 2 * channel, short(2 * channel), short(16), long(2 * PCMDATA.size()));\n\t\tFILE* FOut = nullptr;\n\t\t_wfopen_s(&FOut, filepath.c_str(), L\"wb\");\n\t\tif (!FOut) return;\n\t\tfwrite(&TmpHeader, 1, sizeof(TmpHeader), FOut);\n\t\tfwrite(PCMDATA.data(), 1, PCMDATA.size() * 2, FOut);\n\t\tfclose(FOut);\n\t\tFOut = nullptr;\n\t}\n\nprivate:\n\tWAV_HEADER header;\n\tchar* Data;\n\tint16_t* SData;\n\tsize_t dataSize;\n\tint StartPos;\n};\n\n/**\n * \\brief 切片机切片（获取切片位置）\n * \\param input PCM数据（SignedInt16）\n * \\param _slicer 切片机设置\n * \\return 切片位置\n */\nstd::vector<size_t> SliceAudio(const std::vector<int16_t>& input, const SlicerSettings& _slicer);\n\n/**\n * \\brief 均值滤波器\n * \\param vec 待滤波的数据\n * \\param window_size 窗口大小\n * \\return 滤波后数据\n */\nstd::vector<float> mean_filter(const std::vector<float>& vec, size_t window_size);\n\ntemplate<typename T>\ndouble getAvg(const T* start, const T* end)\n{\n\tconst auto size = end - start + 1;\n\tauto avg = (double)(*start);\n\tfor (auto i = 1; i < size; i++)\n\t\tavg = avg + (abs((double)start[i]) - avg) / (double)(i + 1ull);\n\treturn avg;\n}\n\nstd::vector<double> arange(double start, double end, double step = 1.0, double div = 1.0);\n\n/**\n * \\brief 重采样（插值）\n * \\tparam TOut 输出类型 \n * \\tparam TIn 输入类型\n * \\param _Data 输入数据\n * \\param src 输入采样率\n * \\param dst 输出采样率\n * \\param n_Div 给输出的数据统一除以这个数\n * \\return 输出数据\n */\ntemplate<typename TOut, typename TIn>\nstatic std::vector<TOut> InterpResample(const std::vector<TIn>& _Data, long src, long dst, TOut n_Div = TOut(1))\n{\n\tif (src != dst)\n\t{\n\t\tconst double intstep = double(src) / double(dst);\n\t\tconst auto xi = InferTools::arange(0, double(_Data.size()), intstep);\n\t\tauto x0 = InferTools::arange(0, double(_Data.size()));\n\t\twhile (x0.size() < _Data.size())\n\t\t\tx0.emplace_back(x0[x0.size() - 1] + 1.0);\n\t\twhile (x0.size() > _Data.size())\n\t\t\tx0.pop_back();\n\n\t\tstd::vector<double> y0(_Data.size());\n\t\tfor (size_t i = 0; i < _Data.size(); ++i)\n\t\t\ty0[i] = double(_Data[i]) / double(n_Div);\n\n\t\tstd::vector<double> yi(xi.size());\n\t\tinterp1(x0.data(), y0.data(), long(x0.size()), xi.data(), long(xi.size()), yi.data());\n\n\t\tstd::vector<TOut> out(xi.size());\n\t\tfor (size_t i = 0; i < yi.size(); ++i)\n\t\t\tout[i] = TOut(yi[i]);\n\t\treturn out;\n\t}\n\tstd::vector<TOut> out(_Data.size());\n\tfor (size_t i = 0; i < _Data.size(); ++i)\n\t\tout[i] = TOut(_Data[i]) / n_Div;\n\treturn out;\n}\n\n/**\n * \\brief 重采样（插值）\n * \\tparam T 数据类型\n * \\param Data 输入数据\n * \\param src 输入采样率\n * \\param dst 输出采样率\n * \\return 输出数据\n */\ntemplate<typename T>\nstatic std::vector<T> InterpFunc(const std::vector<T>& Data, long src, long dst)\n{\n\tif (src != dst)\n\t{\n\t\tconst double intstep = double(src) / double(dst);\n\t\tauto xi = InferTools::arange(0, double(Data.size()), intstep);\n\t\twhile (xi.size() < size_t(dst))\n\t\t\txi.emplace_back(xi[xi.size() - 1] + 1.0);\n\t\twhile (xi.size() > size_t(dst))\n\t\t\txi.pop_back();\n\t\tauto x0 = InferTools::arange(0, double(Data.size()));\n\t\twhile (x0.size() < Data.size())\n\t\t\tx0.emplace_back(x0[x0.size() - 1] + 1.0);\n\t\twhile (x0.size() > Data.size())\n\t\t\tx0.pop_back();\n\t\tstd::vector<double> y0(Data.size());\n\t\tfor (size_t i = 0; i < Data.size(); ++i)\n\t\t\ty0[i] = Data[i] <= T(0.0001) ? NAN : double(Data[i]);\n\t\tstd::vector<double> yi(xi.size());\n\t\tinterp1(x0.data(), y0.data(), long(x0.size()), xi.data(), long(xi.size()), yi.data());\n\t\tstd::vector<T> out(xi.size());\n\t\tfor (size_t i = 0; i < yi.size(); ++i)\n\t\t\tout[i] = isnan(yi[i]) ? T(0.0) : T(yi[i]);\n\t\treturn out;\n\t}\n\treturn Data;\n}\n#ifdef MoeVoiceStudioAvxAcc\nclass FloatTensorWrapper\n{\npublic:\n\tFloatTensorWrapper() = delete;\n\t~FloatTensorWrapper() { _data_ptr = nullptr; }\n\tFloatTensorWrapper(float* const data_p, size_t _size) : _data_ptr(data_p), _data_size(_size) {}\n\tFloatTensorWrapper(const FloatTensorWrapper& _copy) = delete;\n\tFloatTensorWrapper& operator=(const FloatTensorWrapper&) = delete;\n\tFloatTensorWrapper(FloatTensorWrapper&& _move) noexcept:_data_ptr(_move._data_ptr), _data_size(_move._data_size) {}\n\tFloatTensorWrapper& operator=(FloatTensorWrapper&& _move) noexcept\n\t{\n\t\t_data_ptr = _move._data_ptr;\n\t\t_data_size = _move._data_size;\n\t\treturn *this;\n\t}\n\ttemplate<typename T>\n\tstatic const T& Min(const T& a, const T& b) { return (a > b) ? b : a; }\n\tfloat& operator[](size_t index) const { return *(_data_ptr + Min(index, _data_size)); }\n\tFloatTensorWrapper& operator+=(const FloatTensorWrapper& _right);\n\tFloatTensorWrapper& operator-=(const FloatTensorWrapper& _right);\n\tFloatTensorWrapper& operator*=(const FloatTensorWrapper& _right);\n\tFloatTensorWrapper& operator/=(const FloatTensorWrapper& _right);\n\tFloatTensorWrapper& operator+=(float _right);\n\tFloatTensorWrapper& operator-=(float _right);\n\tFloatTensorWrapper& operator*=(float _right);\n\tFloatTensorWrapper& operator/=(float _right);\nprivate:\n\tfloat* _data_ptr = nullptr;\n\tsize_t _data_size = 0;\n};\n#endif\nMOEVSINFERTOOLSEND"
  },
  {
    "path": "libtts/Modules/Lib/MJson/MJson.cpp",
    "content": "#include \"MJson.h\"\n\nclass FileGuard\n{\npublic:\n\tFileGuard() = delete;\n\t~FileGuard()\n\t{\n\t\tif (_fp) fclose(_fp);\n\t\t_fp = nullptr;\n\t}\n\tFileGuard(const char* _path)\n\t{\n\t\tif (_fp) fclose(_fp);\n\t\t_wfopen_s(&_fp, to_wide_string(_path).c_str(), L\"rb\");\n\t}\n\tFileGuard(const std::wstring& _path)\n\t{\n\t\tif (_fp) fclose(_fp);\n\t\t_wfopen_s(&_fp, _path.c_str(), L\"rb\");\n\t}\n\toperator FILE* () const\n\t{\n\t\treturn _fp;\n\t}\nprivate:\n\tFILE* _fp = nullptr;\n\tstatic std::wstring to_wide_string(const std::string& input)\n\t{\n\t\tstd::vector<wchar_t> WideString(input.length() * 2);\n\t\tMultiByteToWideChar(\n\t\t\tCP_UTF8,\n\t\t\t0,\n\t\t\tinput.c_str(),\n\t\t\tint(input.length()),\n\t\t\tWideString.data(),\n\t\t\tint(WideString.size())\n\t\t);\n\t\treturn WideString.data();\n\t}\n};\n\nMJson::MJson(const char* _path)\n{\n\tconst auto file = FileGuard(_path);\n\t_document = yyjson_read_file(_path, YYJSON_READ_NOFLAG, nullptr, nullptr);\n\tif (!_document)\n\t\tthrow std::exception(\"Json Parse Error !\");\n\troot = yyjson_doc_get_root(_document);\n}\n\nMJson::MJson(const std::wstring& _path)\n{\n\tconst FileGuard fp(_path);\n\t_document = yyjson_read_fp(fp, YYJSON_READ_NOFLAG, nullptr, nullptr);\n\tif (!_document)\n\t\tthrow std::exception(\"File Not Exists!\");\n\troot = yyjson_doc_get_root(_document);\n}\n\nMJson::MJson(const std::string& _data, bool _read_from_string)\n{\n\tif (_read_from_string)\n\t\t_document = yyjson_read(_data.c_str(), _data.length(), YYJSON_READ_NOFLAG);\n\telse\n\t{\n\t\tconst auto file = FileGuard(_data.c_str());\n\t\t_document = yyjson_read_fp(file, YYJSON_READ_NOFLAG, nullptr, nullptr);\n\t}\n\tif (!_document)\n\t\tthrow std::exception(\"Json Parse Error !\");\n\troot = yyjson_doc_get_root(_document);\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/MJson/MJson.h",
    "content": "#pragma once\n#include \"../../framework.h\"\n#include <string>\n#include \"yyjson.h\"\n#include <vector>\n#ifdef _WIN32\n#include <Windows.h>\n#else\n#error\n#endif\n\nclass MJsonValue\n{\npublic:\n\tMJsonValue() = default;\n\tMJsonValue(yyjson_val* _val) : _Ptr(_val) {}\n\t~MJsonValue() = default;\n\tMJsonValue(MJsonValue&& _val) noexcept\n\t{\n\t\t_Ptr = _val._Ptr;\n\t\t_val._Ptr = nullptr;\n\t}\n\tMJsonValue(const MJsonValue& _val) = delete;\n\tMJsonValue& operator=(MJsonValue&& _val) noexcept\n\t{\n\t\t_Ptr = _val._Ptr;\n\t\t_val._Ptr = nullptr;\n\t\treturn *this;\n\t}\n\tMJsonValue& operator=(const MJsonValue& _val) = delete;\n\t[[nodiscard]] bool IsNull() const\n\t{\n\t\treturn yyjson_is_null(_Ptr);\n\t}\n\t[[nodiscard]] bool IsBoolean() const\n\t{\n\t\treturn yyjson_is_bool(_Ptr);\n\t}\n\t[[nodiscard]] bool IsBool() const\n\t{\n\t\treturn yyjson_is_bool(_Ptr);\n\t}\n\t[[nodiscard]] bool IsInt() const\n\t{\n\t\treturn yyjson_is_num(_Ptr);\n\t}\n\t[[nodiscard]] bool IsFloat() const\n\t{\n\t\treturn yyjson_is_num(_Ptr);\n\t}\n\t[[nodiscard]] bool IsInt64() const\n\t{\n\t\treturn yyjson_is_num(_Ptr);\n\t}\n\t[[nodiscard]] bool IsDouble() const\n\t{\n\t\treturn yyjson_is_num(_Ptr);\n\t}\n\t[[nodiscard]] bool IsString() const\n\t{\n\t\treturn yyjson_is_str(_Ptr);\n\t}\n\t[[nodiscard]] bool IsArray() const\n\t{\n\t\treturn yyjson_is_arr(_Ptr);\n\t}\n\t[[nodiscard]] bool GetBool() const\n\t{\n\t\treturn yyjson_get_bool(_Ptr);\n\t}\n\t[[nodiscard]] bool GetBoolean() const\n\t{\n\t\treturn yyjson_get_bool(_Ptr);\n\t}\n\t[[nodiscard]] int GetInt() const\n\t{\n\t\treturn int(yyjson_get_num(_Ptr));\n\t}\n\t[[nodiscard]] int64_t GetInt64() const\n\t{\n\t\treturn int64_t(yyjson_get_num(_Ptr));\n\t}\n\t[[nodiscard]] float GetFloat() const\n\t{\n\t\treturn float(yyjson_get_num(_Ptr));\n\t}\n\t[[nodiscard]] double GetDouble() const \n\t{\n\t\treturn yyjson_get_num(_Ptr);\n\t}\n\t[[nodiscard]] std::string GetString() const\n\t{\n\t\tif (const auto _str = yyjson_get_str(_Ptr))\n\t\t\treturn _str;\n\t\treturn \"\";\n\t}\n\t[[nodiscard]] std::vector<MJsonValue> GetArray() const\n\t{\n\t\tstd::vector<MJsonValue> _ret;\n\t\tif (!IsArray())\n\t\t\treturn {};\n\t\tconst auto _PArray = _Ptr;\n\t\tsize_t idx, max;\n\t\tyyjson_val* _Object;\n\t\tyyjson_arr_foreach(_PArray, idx, max, _Object)\n\t\t\t_ret.emplace_back(_Object);\n\t\treturn _ret;\n\t}\n\t[[nodiscard]] size_t GetSize() const\n\t{\n\t\treturn yyjson_get_len(_Ptr);\n\t}\n\t[[nodiscard]] size_t Size() const\n\t{\n\t\treturn yyjson_get_len(_Ptr);\n\t}\n\t[[nodiscard]] size_t GetStringLength() const\n\t{\n\t\treturn yyjson_get_len(_Ptr);\n\t}\n\t[[nodiscard]] MJsonValue Get(const std::string& _key) const\n\t{\n\t\treturn yyjson_obj_get(_Ptr, _key.c_str());\n\t}\n\t[[nodiscard]] MJsonValue operator[](const std::string& _key) const\n\t{\n\t\treturn yyjson_obj_get(_Ptr, _key.c_str());\n\t}\n\t[[nodiscard]] MJsonValue operator[](size_t _idx) const\n\t{\n\t\tif (!IsArray())\n\t\t\treturn _Ptr;\n\t\tconst auto _max = yyjson_arr_size(_Ptr);\n\t\tconst auto _val = yyjson_arr_get_first(_Ptr);\n\t\treturn _idx < _max ? _val + _idx : _val + _max - 1;\n\t}\n\t[[nodiscard]] bool Empty() const\n\t{\n\t\tif (!IsArray() && !IsString())\n\t\t\treturn true;\n\t\tauto _max = yyjson_arr_size(_Ptr);\n\t\tif (IsString()) _max = yyjson_get_len(_Ptr);\n\t\treturn !_max;\n\t}\n\t[[nodiscard]] size_t GetMemberCount() const\n\t{\n\t\treturn yyjson_obj_size(_Ptr);\n\t}\n\t[[nodiscard]] std::vector<std::pair<std::string, MJsonValue>> GetMemberArray() const\n\t{\n\t\tstd::vector<std::pair<std::string, MJsonValue>> ret;\n\t\tyyjson_val* key;\n\t\tyyjson_obj_iter iter = yyjson_obj_iter_with(_Ptr);\n\t\twhile ((key = yyjson_obj_iter_next(&iter))) {\n\t\t\tconst auto val = yyjson_obj_iter_get_val(key);\n\t\t\tret.emplace_back(MJsonValue(key).GetString(), val);\n\t\t}\n\t\treturn ret;\n\t}\n\t[[nodiscard]] std::pair<std::string, MJsonValue> MemberBegin() const\n\t{\n\t\tyyjson_obj_iter iter = yyjson_obj_iter_with(_Ptr);\n\t\tyyjson_val* key = yyjson_obj_iter_next(&iter);\n\t\treturn { MJsonValue(key).GetString(), yyjson_obj_iter_get_val(key) };\n\t}\n\t[[nodiscard]] bool HasMember(const std::string& _key) const\n\t{\n\t\treturn yyjson_obj_get(_Ptr, _key.c_str());\n\t}\nprivate:\n\tyyjson_val* _Ptr = nullptr;\n};\n\nclass MJson\n{\npublic:\n\tMJson() = default;\n\tMJson(const char* _path);\n\tMJson(const std::string& _data, bool _read_from_string);\n\tMJson(const std::wstring& _path);\n\t~MJson()\n\t{\n\t\tif(_document)\n\t\t{\n\t\t\tyyjson_doc_free(_document);\n\t\t\t_document = nullptr;\n\t\t\troot = nullptr;\n\t\t}\n\t}\n\tMJson(MJson&& _Right) noexcept\n\t{\n\t\t_document = _Right._document;\n\t\t_Right._document = nullptr;\n\t\troot = yyjson_doc_get_root(_document);\n\t}\n\tMJson(const MJson& _Right) = delete;\n\tMJson& operator=(MJson&& _Right) noexcept\n\t{\n\t\tif (_document)\n\t\t\tyyjson_doc_free(_document);\n\t\t_document = _Right._document;\n\t\t_Right._document = nullptr;\n\t\troot = yyjson_doc_get_root(_document);\n\t\treturn *this;\n\t}\n\tMJson& operator=(const MJson& _Right) = delete;\n\tvoid Parse(const std::string& _str)\n\t{\n\t\t_document = yyjson_read(_str.c_str(), _str.length(), YYJSON_READ_NOFLAG);\n\t\tif (!_document)\n\t\t\tthrow std::exception(\"Json Parse Error !\");\n\t\troot = yyjson_doc_get_root(_document);\n\t}\n\t[[nodiscard]] bool HasMember(const std::string& _key) const\n\t{\n\t\treturn yyjson_obj_get(root, _key.c_str());\n\t}\n\t[[nodiscard]] MJsonValue Get(const std::string& _key) const\n\t{\n\t\treturn yyjson_obj_get(root, _key.c_str());\n\t}\n\t[[nodiscard]] MJsonValue operator[](const std::string& _key) const\n\t{\n\t\treturn yyjson_obj_get(root, _key.c_str());\n\t}\n\t[[nodiscard]] MJsonValue operator[](size_t _idx) const\n\t{\n\t\tif (MJsonValue(root).IsArray())\n\t\t\treturn root;\n\t\tconst auto _max = yyjson_arr_size(root);\n\t\tconst auto _val = yyjson_arr_get_first(root);\n\t\treturn _idx < _max ? _val + _idx : _val + _max - 1;\n\t}\n\t[[nodiscard]] bool HasParseError() const\n\t{\n\t\treturn _document == nullptr;\n\t}\n\t[[nodiscard]] bool IsNull() const\n\t{\n\t\treturn yyjson_is_null(root);\n\t}\n\t[[nodiscard]] bool IsBoolean() const\n\t{\n\t\treturn yyjson_is_bool(root);\n\t}\n\t[[nodiscard]] bool IsBool() const\n\t{\n\t\treturn yyjson_is_bool(root);\n\t}\n\t[[nodiscard]] bool IsInt() const\n\t{\n\t\treturn yyjson_is_num(root);\n\t}\n\t[[nodiscard]] bool IsFloat() const\n\t{\n\t\treturn yyjson_is_num(root);\n\t}\n\t[[nodiscard]] bool IsInt64() const\n\t{\n\t\treturn yyjson_is_num(root);\n\t}\n\t[[nodiscard]] bool IsDouble() const\n\t{\n\t\treturn yyjson_is_num(root);\n\t}\n\t[[nodiscard]] bool IsString() const\n\t{\n\t\treturn yyjson_is_str(root);\n\t}\n\t[[nodiscard]] bool IsArray() const\n\t{\n\t\treturn yyjson_is_arr(root);\n\t}\n\t[[nodiscard]] bool GetBool() const\n\t{\n\t\treturn yyjson_get_bool(root);\n\t}\n\t[[nodiscard]] bool GetBoolean() const\n\t{\n\t\treturn yyjson_get_bool(root);\n\t}\n\t[[nodiscard]] int GetInt() const\n\t{\n\t\treturn int(yyjson_get_num(root));\n\t}\n\t[[nodiscard]] int64_t GetInt64() const\n\t{\n\t\treturn int64_t(yyjson_get_num(root));\n\t}\n\t[[nodiscard]] float GetFloat() const\n\t{\n\t\treturn float(yyjson_get_num(root));\n\t}\n\t[[nodiscard]] double GetDouble() const\n\t{\n\t\treturn yyjson_get_num(root);\n\t}\n\t[[nodiscard]] std::string GetString() const\n\t{\n\t\tif (const auto _str = yyjson_get_str(root))\n\t\t\treturn _str;\n\t\treturn \"\";\n\t}\n\t[[nodiscard]] std::vector<MJsonValue> GetArray() const\n\t{\n\t\tstd::vector<MJsonValue> _ret;\n\t\tif (!IsArray())\n\t\t\treturn {};\n\t\tconst auto _PArray = root;\n\t\tsize_t idx, max;\n\t\tyyjson_val* _Object;\n\t\tyyjson_arr_foreach(_PArray, idx, max, _Object)\n\t\t\t_ret.emplace_back(_Object);\n\t\treturn _ret;\n\t}\n\t[[nodiscard]] size_t GetSize() const\n\t{\n\t\treturn yyjson_get_len(root);\n\t}\n\t[[nodiscard]] size_t Size() const\n\t{\n\t\treturn yyjson_get_len(root);\n\t}\n\t[[nodiscard]] size_t GetStringLength() const\n\t{\n\t\treturn yyjson_get_len(root);\n\t}\n\t[[nodiscard]] size_t GetMemberCount() const\n\t{\n\t\treturn yyjson_obj_size(root);\n\t}\n\t[[nodiscard]] std::vector<std::pair<std::string,MJsonValue>> GetMemberArray() const\n\t{\n\t\tstd::vector<std::pair<std::string, MJsonValue>> ret;\n\t\tyyjson_val* key;\n\t\tyyjson_obj_iter iter = yyjson_obj_iter_with(root);\n\t\twhile ((key = yyjson_obj_iter_next(&iter))) {\n\t\t\tconst auto val = yyjson_obj_iter_get_val(key);\n\t\t\tret.emplace_back(MJsonValue(key).GetString(), val);\n\t\t}\n\t\treturn ret;\n\t}\nprivate:\n\tyyjson_doc* _document = nullptr;\n\tyyjson_val* root = nullptr;\n};"
  },
  {
    "path": "libtts/Modules/Lib/MJson/yyjson.c",
    "content": "/*==============================================================================\n * Created by Yaoyuan on 2019/3/9.\n * Copyright (C) 2019 Yaoyuan <ibireme@gmail.com>.\n *\n * Released under the MIT License:\n * https://github.com/ibireme/yyjson/blob/master/LICENSE\n *============================================================================*/\n\n#include \"yyjson.h\"\n#include <math.h>\n\n\n\n/*==============================================================================\n * Compile Hint Begin\n *============================================================================*/\n\n/* warning suppress begin */\n#if defined(__clang__)\n#   pragma clang diagnostic push\n#   pragma clang diagnostic ignored \"-Wunused-function\"\n#   pragma clang diagnostic ignored \"-Wunused-parameter\"\n#   pragma clang diagnostic ignored \"-Wunused-label\"\n#   pragma clang diagnostic ignored \"-Wunused-macros\"\n#elif defined(__GNUC__)\n#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)\n#   pragma GCC diagnostic push\n#   endif\n#   pragma GCC diagnostic ignored \"-Wunused-function\"\n#   pragma GCC diagnostic ignored \"-Wunused-parameter\"\n#   pragma GCC diagnostic ignored \"-Wunused-label\"\n#   pragma GCC diagnostic ignored \"-Wunused-macros\"\n#elif defined(_MSC_VER)\n#   pragma warning(push)\n#   pragma warning(disable:4100) /* unreferenced formal parameter */\n#   pragma warning(disable:4102) /* unreferenced label */\n#   pragma warning(disable:4127) /* conditional expression is constant */\n#   pragma warning(disable:4706) /* assignment within conditional expression */\n#endif\n\n\n\n/*==============================================================================\n * Version\n *============================================================================*/\n\nuint32_t yyjson_version(void) {\n    return YYJSON_VERSION_HEX;\n}\n\n\n\n/*==============================================================================\n * Flags\n *============================================================================*/\n\n/* gcc version check */\n#if defined(__GNUC__)\n#   if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)\n#       define yyjson_gcc_available(major, minor, patch) \\\n            ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) \\\n            >= (major * 10000 + minor * 100 + patch))\n#   elif defined(__GNUC_MINOR__)\n#       define yyjson_gcc_available(major, minor, patch) \\\n            ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100) \\\n            >= (major * 10000 + minor * 100 + patch))\n#   else\n#       define yyjson_gcc_available(major, minor, patch) \\\n            ((__GNUC__ * 10000) >= (major * 10000 + minor * 100 + patch))\n#   endif\n#else\n#       define yyjson_gcc_available(major, minor, patch) 0\n#endif\n\n/* real gcc check */\n#if !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(__ICC) && \\\n    defined(__GNUC__) && defined(__GNUC_MINOR__)\n#   define YYJSON_IS_REAL_GCC 1\n#else\n#   define YYJSON_IS_REAL_GCC 0\n#endif\n\n/* msvc intrinsic */\n#if YYJSON_MSC_VER >= 1400\n#   include <intrin.h>\n#   if defined(_M_AMD64) || defined(_M_ARM64)\n#       define MSC_HAS_BIT_SCAN_64 1\n#       pragma intrinsic(_BitScanForward64)\n#       pragma intrinsic(_BitScanReverse64)\n#   else\n#       define MSC_HAS_BIT_SCAN_64 0\n#   endif\n#   if defined(_M_AMD64) || defined(_M_ARM64) || \\\n        defined(_M_IX86) || defined(_M_ARM)\n#       define MSC_HAS_BIT_SCAN 1\n#       pragma intrinsic(_BitScanForward)\n#       pragma intrinsic(_BitScanReverse)\n#   else\n#       define MSC_HAS_BIT_SCAN 0\n#   endif\n#   if defined(_M_AMD64)\n#       define MSC_HAS_UMUL128 1\n#       pragma intrinsic(_umul128)\n#   else\n#       define MSC_HAS_UMUL128 0\n#   endif\n#else\n#   define MSC_HAS_BIT_SCAN_64 0\n#   define MSC_HAS_BIT_SCAN 0\n#   define MSC_HAS_UMUL128 0\n#endif\n\n/* gcc builtin */\n#if yyjson_has_builtin(__builtin_clzll) || yyjson_gcc_available(3, 4, 0)\n#   define GCC_HAS_CLZLL 1\n#else\n#   define GCC_HAS_CLZLL 0\n#endif\n\n#if yyjson_has_builtin(__builtin_ctzll) || yyjson_gcc_available(3, 4, 0)\n#   define GCC_HAS_CTZLL 1\n#else\n#   define GCC_HAS_CTZLL 0\n#endif\n\n/* int128 type */\n#if defined(__SIZEOF_INT128__) && (__SIZEOF_INT128__ == 16) && \\\n    (defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER))\n#    define YYJSON_HAS_INT128 1\n#else\n#    define YYJSON_HAS_INT128 0\n#endif\n\n/* IEEE 754 floating-point binary representation */\n#if defined(__STDC_IEC_559__) || defined(__STDC_IEC_60559_BFP__)\n#   define YYJSON_HAS_IEEE_754 1\n#elif (FLT_RADIX == 2) && (DBL_MANT_DIG == 53) && (DBL_DIG == 15) && \\\n     (DBL_MIN_EXP == -1021) && (DBL_MAX_EXP == 1024) && \\\n     (DBL_MIN_10_EXP == -307) && (DBL_MAX_10_EXP == 308)\n#   define YYJSON_HAS_IEEE_754 1\n#else\n#   define YYJSON_HAS_IEEE_754 0\n#endif\n\n/*\n Correct rounding in double number computations.\n \n On the x86 architecture, some compilers may use x87 FPU instructions for\n floating-point arithmetic. The x87 FPU loads all floating point number as\n 80-bit double-extended precision internally, then rounds the result to original\n precision, which may produce inaccurate results. For a more detailed\n explanation, see the paper: https://arxiv.org/abs/cs/0701192\n \n Here are some examples of double precision calculation error:\n \n     2877.0 / 1e6   == 0.002877,  but x87 returns 0.0028770000000000002\n     43683.0 * 1e21 == 4.3683e25, but x87 returns 4.3683000000000004e25\n \n Here are some examples of compiler flags to generate x87 instructions on x86:\n \n     clang -m32 -mno-sse\n     gcc/icc -m32 -mfpmath=387\n     msvc /arch:SSE or /arch:IA32\n \n If we are sure that there's no similar error described above, we can define the\n YYJSON_DOUBLE_MATH_CORRECT as 1 to enable the fast path calculation. This is\n not an accurate detection, it's just try to avoid the error at compile-time.\n An accurate detection can be done at run-time:\n \n     bool is_double_math_correct(void) {\n         volatile double r = 43683.0;\n         r *= 1e21;\n         return r == 4.3683e25;\n     }\n \n See also: utils.h in https://github.com/google/double-conversion/\n */\n#if !defined(FLT_EVAL_METHOD) && defined(__FLT_EVAL_METHOD__)\n#    define FLT_EVAL_METHOD __FLT_EVAL_METHOD__\n#endif\n\n#if defined(FLT_EVAL_METHOD) && FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1\n#    define YYJSON_DOUBLE_MATH_CORRECT 0\n#elif defined(i386) || defined(__i386) || defined(__i386__) || \\\n    defined(_X86_) || defined(__X86__) || defined(_M_IX86) || \\\n    defined(__I86__) || defined(__IA32__) || defined(__THW_INTEL)\n#   if (defined(_MSC_VER) && defined(_M_IX86_FP) && _M_IX86_FP == 2) || \\\n        (defined(__SSE2_MATH__) && __SSE2_MATH__)\n#       define YYJSON_DOUBLE_MATH_CORRECT 1\n#   else\n#       define YYJSON_DOUBLE_MATH_CORRECT 0\n#   endif\n#elif defined(__mc68000__) || defined(__pnacl__) || defined(__native_client__)\n#   define YYJSON_DOUBLE_MATH_CORRECT 0\n#else\n#   define YYJSON_DOUBLE_MATH_CORRECT 1\n#endif\n\n/* endian */\n#if yyjson_has_include(<sys/types.h>)\n#    include <sys/types.h>\n#endif\n\n#if yyjson_has_include(<endian.h>)\n#    include <endian.h>\n#elif yyjson_has_include(<machine/endian.h>)\n#    include <machine/endian.h>\n#elif yyjson_has_include(<sys/endian.h>)\n#    include <sys/endian.h>\n#endif\n\n#define YYJSON_BIG_ENDIAN       4321\n#define YYJSON_LITTLE_ENDIAN    1234\n\n#if defined(__BYTE_ORDER__) && __BYTE_ORDER__\n#   if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__\n#       define YYJSON_ENDIAN YYJSON_BIG_ENDIAN\n#   elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__\n#       define YYJSON_ENDIAN YYJSON_LITTLE_ENDIAN\n#   endif\n\n#elif defined(__BYTE_ORDER) && __BYTE_ORDER\n#   if __BYTE_ORDER == __BIG_ENDIAN\n#       define YYJSON_ENDIAN YYJSON_BIG_ENDIAN\n#   elif __BYTE_ORDER == __LITTLE_ENDIAN\n#       define YYJSON_ENDIAN YYJSON_LITTLE_ENDIAN\n#   endif\n\n#elif defined(BYTE_ORDER) && BYTE_ORDER\n#   if BYTE_ORDER == BIG_ENDIAN\n#       define YYJSON_ENDIAN YYJSON_BIG_ENDIAN\n#   elif BYTE_ORDER == LITTLE_ENDIAN\n#       define YYJSON_ENDIAN YYJSON_LITTLE_ENDIAN\n#   endif\n\n#elif (defined(__LITTLE_ENDIAN__) && __LITTLE_ENDIAN__ == 1) || \\\n    defined(__i386) || defined(__i386__) || \\\n    defined(_X86_) || defined(__X86__) || \\\n    defined(_M_IX86) || defined(__THW_INTEL__) || \\\n    defined(__x86_64) || defined(__x86_64__) || \\\n    defined(__amd64) || defined(__amd64__) || \\\n    defined(_M_AMD64) || defined(_M_X64) || \\\n    defined(__ia64) || defined(_IA64) || defined(__IA64__) ||  \\\n    defined(__ia64__) || defined(_M_IA64) || defined(__itanium__) || \\\n    defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \\\n    defined(__alpha) || defined(__alpha__) || defined(_M_ALPHA) || \\\n    defined(__riscv) || defined(__riscv__) || \\\n    defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__) || \\\n    defined(__EMSCRIPTEN__) || defined(__wasm__) || \\\n    defined(__loongarch__)\n#   define YYJSON_ENDIAN YYJSON_LITTLE_ENDIAN\n\n#elif (defined(__BIG_ENDIAN__) && __BIG_ENDIAN__ == 1) || \\\n    defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \\\n    defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) || \\\n    defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \\\n    defined(__ppc) || defined(__ppc__) || \\\n    defined(__sparc) || defined(__sparc__) || defined(__sparc64__) || \\\n    defined(__or1k__) || defined(__OR1K__)\n#   define YYJSON_ENDIAN YYJSON_BIG_ENDIAN\n\n#else\n#   define YYJSON_ENDIAN 0 /* unknown endian, detect at run-time */\n#endif\n\n/*\n Unaligned memory access detection.\n \n Some architectures cannot perform unaligned memory access, or unaligned memory\n accesses can have a large performance penalty. Modern compilers can make some\n optimizations for unaligned access. For example: https://godbolt.org/z/Ejo3Pa\n \n    typedef struct { char c[2] } vec2;\n    void copy_vec2(vec2 *dst, vec2 *src) {\n        *dst = *src;\n    }\n \n Compiler may generate `load/store` or `move` instruction if target architecture\n supports unaligned access, otherwise it may generate `call memcpy` instruction.\n \n We want to avoid `memcpy` calls, so we should disable unaligned access by\n define `YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS` as 1 on these architectures.\n */\n#ifndef YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n#   if defined(i386) || defined(__i386) || defined(__i386__) || \\\n        defined(__i486__) || defined(__i586__) || defined(__i686__) || \\\n        defined(_X86_) || defined(__X86__) || defined(_M_IX86) || \\\n        defined(__I86__) || defined(__IA32__) || \\\n        defined(__THW_INTEL) || defined(__THW_INTEL__) || \\\n        defined(__x86_64) || defined(__x86_64__) || \\\n        defined(__amd64) || defined(__amd64__) || \\\n        defined(_M_AMD64) || defined(_M_X64)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* x86 */\n\n#   elif defined(__ia64) || defined(_IA64) || defined(__IA64__) ||  \\\n        defined(__ia64__) || defined(_M_IA64) || defined(__itanium__)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 1 /* Itanium */\n\n#   elif defined(__arm64) || defined(__arm64__) || \\\n        defined(__AARCH64EL__) || defined(__AARCH64EB__) || \\\n        defined(__aarch64__) || defined(_M_ARM64)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* ARM64 */\n\n#   elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || \\\n        defined(__ARM_ARCH_5TEJ__) || defined(__ARM_ARCH_5TE__) || \\\n        defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6KZ__) || \\\n        defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6K__)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 1 /* ARM */\n\n#   elif defined(__ppc64__) || defined(__PPC64__) || \\\n        defined(__powerpc64__) || defined(_ARCH_PPC64) || \\\n        defined(__ppc) || defined(__ppc__) || defined(__PPC__) || \\\n        defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) || \\\n        defined(_ARCH_PPC) || defined(_M_PPC) || \\\n        defined(__PPCGECKO__) || defined(__PPCBROADWAY__) || defined(_XENON)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* PowerPC */\n\n#   elif defined(__loongarch__)\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* loongarch */\n\n#   else\n#       define YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS 0 /* Unknown */\n#   endif\n\n#endif\n\n/*\n Estimated initial ratio of the JSON data (data_size / value_count).\n For example:\n    \n    data:        {\"id\":12345678,\"name\":\"Harry\"}\n    data_size:   30\n    value_count: 5\n    ratio:       6\n    \n yyjson uses dynamic memory with a growth factor of 1.5 when reading and writing\n JSON, the ratios below are used to determine the initial memory size.\n \n A too large ratio will waste memory, and a too small ratio will cause multiple\n memory growths and degrade performance. Currently, these ratios are generated\n with some commonly used JSON datasets.\n */\n#define YYJSON_READER_ESTIMATED_PRETTY_RATIO 16\n#define YYJSON_READER_ESTIMATED_MINIFY_RATIO 6\n#define YYJSON_WRITER_ESTIMATED_PRETTY_RATIO 32\n#define YYJSON_WRITER_ESTIMATED_MINIFY_RATIO 18\n\n/* The initial and maximum size of the memory pool's chunk in yyjson_mut_doc. */\n#define YYJSON_MUT_DOC_STR_POOL_INIT_SIZE   0x100\n#define YYJSON_MUT_DOC_STR_POOL_MAX_SIZE    0x10000000\n#define YYJSON_MUT_DOC_VAL_POOL_INIT_SIZE   (0x10 * sizeof(yyjson_mut_val))\n#define YYJSON_MUT_DOC_VAL_POOL_MAX_SIZE    (0x1000000 * sizeof(yyjson_mut_val))\n\n/* Default value for compile-time options. */\n#ifndef YYJSON_DISABLE_READER\n#define YYJSON_DISABLE_READER 0\n#endif\n#ifndef YYJSON_DISABLE_WRITER\n#define YYJSON_DISABLE_WRITER 0\n#endif\n#ifndef YYJSON_DISABLE_UTILS\n#define YYJSON_DISABLE_UTILS 0\n#endif\n#ifndef YYJSON_DISABLE_FAST_FP_CONV\n#define YYJSON_DISABLE_FAST_FP_CONV 0\n#endif\n#ifndef YYJSON_DISABLE_NON_STANDARD\n#define YYJSON_DISABLE_NON_STANDARD 0\n#endif\n\n\n\n/*==============================================================================\n * Macros\n *============================================================================*/\n\n/* Macros used for loop unrolling and other purpose. */\n#define repeat2(x)  { x x }\n#define repeat3(x)  { x x x }\n#define repeat4(x)  { x x x x }\n#define repeat8(x)  { x x x x x x x x }\n#define repeat16(x) { x x x x x x x x x x x x x x x x }\n\n#define repeat2_incr(x)  { x(0) x(1) }\n#define repeat4_incr(x)  { x(0) x(1) x(2) x(3) }\n#define repeat8_incr(x)  { x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7) }\n#define repeat16_incr(x) { x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7) \\\n                           x(8) x(9) x(10) x(11) x(12) x(13) x(14) x(15) }\n#define repeat_in_1_18(x) { x(1) x(2) x(3) x(4) x(5) x(6) x(7) \\\n                            x(8) x(9) x(10) x(11) x(12) x(13) x(14) x(15) \\\n                            x(16) x(17) x(18) }\n\n/* Macros used to provide branch prediction information for compiler. */\n#undef  likely\n#define likely(x)       yyjson_likely(x)\n#undef  unlikely\n#define unlikely(x)     yyjson_unlikely(x)\n\n/* Macros used to provide inline information for compiler. */\n#undef  static_inline\n#define static_inline   static yyjson_inline\n#undef  static_noinline\n#define static_noinline static yyjson_noinline\n\n/* Macros for min and max. */\n#undef  yyjson_min\n#define yyjson_min(x, y) ((x) < (y) ? (x) : (y))\n#undef  yyjson_max\n#define yyjson_max(x, y) ((x) > (y) ? (x) : (y))\n\n/* Used to write u64 literal for C89 which doesn't support \"ULL\" suffix. */\n#undef  U64\n#define U64(hi, lo) ((((u64)hi##UL) << 32U) + lo##UL)\n\n/* Used to cast away (remove) const qualifier. */\n#define constcast(type) (type)(void *)(size_t)(const void *)\n\n\n\n/*==============================================================================\n * Integer Constants\n *============================================================================*/\n\n/* U64 constant values */\n#undef  U64_MAX\n#define U64_MAX         U64(0xFFFFFFFF, 0xFFFFFFFF)\n#undef  I64_MAX\n#define I64_MAX         U64(0x7FFFFFFF, 0xFFFFFFFF)\n#undef  USIZE_MAX\n#define USIZE_MAX       ((usize)(~(usize)0))\n\n/* Maximum number of digits for reading u32/u64/usize safety (not overflow). */\n#undef  U32_SAFE_DIG\n#define U32_SAFE_DIG    9   /* u32 max is 4294967295, 10 digits */\n#undef  U64_SAFE_DIG\n#define U64_SAFE_DIG    19  /* u64 max is 18446744073709551615, 20 digits */\n#undef  USIZE_SAFE_DIG\n#define USIZE_SAFE_DIG  (sizeof(usize) == 64 ? U64_SAFE_DIG : U32_SAFE_DIG)\n\n\n\n/*==============================================================================\n * IEEE-754 Double Number Constants\n *============================================================================*/\n\n/* Inf raw value (positive) */\n#define F64_RAW_INF U64(0x7FF00000, 0x00000000)\n\n/* NaN raw value (quiet NaN, no payload, no sign) */\n#if defined(__hppa__) || (defined(__mips__) && !defined(__mips_nan2008))\n#define F64_RAW_NAN U64(0x7FF7FFFF, 0xFFFFFFFF)\n#else\n#define F64_RAW_NAN U64(0x7FF80000, 0x00000000)\n#endif\n\n/* double number bits */\n#define F64_BITS 64\n\n/* double number exponent part bits */\n#define F64_EXP_BITS 11\n\n/* double number significand part bits */\n#define F64_SIG_BITS 52\n\n/* double number significand part bits (with 1 hidden bit) */\n#define F64_SIG_FULL_BITS 53\n\n/* double number significand bit mask */\n#define F64_SIG_MASK U64(0x000FFFFF, 0xFFFFFFFF)\n\n/* double number exponent bit mask */\n#define F64_EXP_MASK U64(0x7FF00000, 0x00000000)\n\n/* double number exponent bias */\n#define F64_EXP_BIAS 1023\n\n/* double number significant digits count in decimal */\n#define F64_DEC_DIG 17\n\n/* max significant digits count in decimal when reading double number */\n#define F64_MAX_DEC_DIG 768\n\n/* maximum decimal power of double number (1.7976931348623157e308) */\n#define F64_MAX_DEC_EXP 308\n\n/* minimum decimal power of double number (4.9406564584124654e-324) */\n#define F64_MIN_DEC_EXP (-324)\n\n/* maximum binary power of double number */\n#define F64_MAX_BIN_EXP 1024\n\n/* minimum binary power of double number */\n#define F64_MIN_BIN_EXP (-1021)\n\n\n\n/*==============================================================================\n * Types\n *============================================================================*/\n\n/** Type define for primitive types. */\ntypedef float       f32;\ntypedef double      f64;\ntypedef int8_t      i8;\ntypedef uint8_t     u8;\ntypedef int16_t     i16;\ntypedef uint16_t    u16;\ntypedef int32_t     i32;\ntypedef uint32_t    u32;\ntypedef int64_t     i64;\ntypedef uint64_t    u64;\ntypedef size_t      usize;\n\n/** 128-bit integer, used by floating-point number reader and writer. */\n#if YYJSON_HAS_INT128\n__extension__ typedef __int128          i128;\n__extension__ typedef unsigned __int128 u128;\n#endif\n\n/** 16/32/64-bit vector */\ntypedef struct v16 { char c1, c2; } v16;\ntypedef struct v32 { char c1, c2, c3, c4; } v32;\ntypedef struct v64 { char c1, c2, c3, c4, c5, c6, c7, c8; } v64;\n\n/** 16/32/64-bit vector union, used for unaligned memory access on modern CPU */\ntypedef union v16_uni { v16 v; u16 u; } v16_uni;\ntypedef union v32_uni { v32 v; u32 u; } v32_uni;\ntypedef union v64_uni { v64 v; u64 u; } v64_uni;\n\n\n\n/*==============================================================================\n * Load/Store Utils\n *============================================================================*/\n\n#define byte_move_idx(x) ((u8 *)dst)[x] = ((u8 *)src)[x];\n\nstatic_inline void byte_move_2(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat2_incr(byte_move_idx)\n#else\n    memmove(dst, src, 2);\n#endif\n}\n\nstatic_inline void byte_move_4(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat4_incr(byte_move_idx)\n#else\n    memmove(dst, src, 4);\n#endif\n}\n\nstatic_inline void byte_move_8(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat8_incr(byte_move_idx)\n#else\n    memmove(dst, src, 8);\n#endif\n}\n\nstatic_inline void byte_move_16(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat16_incr(byte_move_idx)\n#else\n    memmove(dst, src, 16);\n#endif\n}\n\nstatic_inline void byte_copy_2(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat2_incr(byte_move_idx)\n#else\n    memcpy(dst, src, 2);\n#endif\n}\n\nstatic_inline void byte_copy_4(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat4_incr(byte_move_idx)\n#else\n    memcpy(dst, src, 4);\n#endif\n}\n\nstatic_inline void byte_copy_8(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat8_incr(byte_move_idx)\n#else\n    memcpy(dst, src, 8);\n#endif\n}\n\nstatic_inline void byte_copy_16(void *dst, const void *src) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    repeat16_incr(byte_move_idx)\n#else\n    memcpy(dst, src, 16);\n#endif\n}\n\nstatic_inline bool byte_match_2(void *buf, const char *pat) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    return\n    ((u8 *)buf)[0] == ((const u8 *)pat)[0] &&\n    ((u8 *)buf)[1] == ((const u8 *)pat)[1];\n#else\n    v16_uni u1, u2;\n    u1.v = *(const v16 *)pat;\n    u2.v = *(const v16 *)buf;\n    return u1.u == u2.u;\n#endif\n}\n\nstatic_inline bool byte_match_4(void *buf, const char *pat) {\n#if YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n    return\n    ((u8 *)buf)[0] == ((const u8 *)pat)[0] &&\n    ((u8 *)buf)[1] == ((const u8 *)pat)[1] &&\n    ((u8 *)buf)[2] == ((const u8 *)pat)[2] &&\n    ((u8 *)buf)[3] == ((const u8 *)pat)[3];\n#else\n    v32_uni u1, u2;\n    u1.v = *(const v32 *)pat;\n    u2.v = *(const v32 *)buf;\n    return u1.u == u2.u;\n#endif\n}\n\nstatic_inline u16 byte_load_2(const void *src) {\n    v16_uni uni;\n    uni.v = *(const v16 *)src;\n    return uni.u;\n}\n\nstatic_inline u32 byte_load_3(const void *src) {\n    v32_uni uni;\n    ((v16_uni *)&uni)->v = *(const v16 *)src;\n    uni.v.c3 = ((const char *)src)[2];\n    uni.v.c4 = 0;\n    return uni.u;\n}\n\nstatic_inline u32 byte_load_4(const void *src) {\n    v32_uni uni;\n    uni.v = *(const v32 *)src;\n    return uni.u;\n}\n\n#undef byte_move_expr\n\n\n\n/*==============================================================================\n * Number Utils\n * These functions are used to detect and convert NaN and Inf numbers.\n *============================================================================*/\n\n/**\n This union is used to avoid violating the strict aliasing rule in C.\n `memcpy` can be used in both C and C++, but it may reduce performance without\n compiler optimization.\n */\ntypedef union { u64 u; f64 f; } f64_uni;\n\n/** Convert raw binary to double. */\nstatic_inline f64 f64_from_raw(u64 u) {\n#ifndef __cplusplus\n    f64_uni uni;\n    uni.u = u;\n    return uni.f;\n#else\n    f64 f;\n    memcpy(&f, &u, 8);\n    return f;\n#endif\n}\n\n/** Convert double to raw binary. */\nstatic_inline u64 f64_to_raw(f64 f) {\n#ifndef __cplusplus\n    f64_uni uni;\n    uni.f = f;\n    return uni.u;\n#else\n    u64 u;\n    memcpy(&u, &f, 8);\n    return u;\n#endif\n}\n\n/** Get raw 'infinity' with sign. */\nstatic_inline u64 f64_raw_get_inf(bool sign) {\n#if YYJSON_HAS_IEEE_754\n    return F64_RAW_INF | ((u64)sign << 63);\n#elif defined(INFINITY)\n    return f64_to_raw(sign ? -INFINITY : INFINITY);\n#else\n    return f64_to_raw(sign ? -HUGE_VAL : HUGE_VAL);\n#endif\n}\n\n/** Get raw 'nan' with sign. */\nstatic_inline u64 f64_raw_get_nan(bool sign) {\n#if YYJSON_HAS_IEEE_754\n    return F64_RAW_NAN | ((u64)sign << 63);\n#elif defined(NAN)\n    return f64_to_raw(sign ? (f64)-NAN : (f64)NAN);\n#else\n    return f64_to_raw((sign ? -0.0 : 0.0) / 0.0);\n#endif\n}\n\n/**\n Convert normalized u64 (highest bit is 1) to f64.\n \n Some compiler (such as Microsoft Visual C++ 6.0) do not support converting\n number from u64 to f64. This function will first convert u64 to i64 and then\n to f64, with `to nearest` rounding mode.\n */\nstatic_inline f64 normalized_u64_to_f64(u64 val) {\n#if YYJSON_U64_TO_F64_NO_IMPL\n    i64 sig = (i64)((val >> 1) | (val & 1));\n    return ((f64)sig) * (f64)2.0;\n#else\n    return (f64)val;\n#endif\n}\n\n\n\n/*==============================================================================\n * Size Utils\n * These functions are used for memory allocation.\n *============================================================================*/\n\n/** Returns whether the size is overflow after increment. */\nstatic_inline bool size_add_is_overflow(usize size, usize add) {\n    return size > (size + add);\n}\n\n/** Returns whether the size is power of 2 (size should not be 0). */\nstatic_inline bool size_is_pow2(usize size) {\n    return (size & (size - 1)) == 0;\n}\n\n/** Align size upwards (may overflow). */\nstatic_inline usize size_align_up(usize size, usize align) {\n    if (size_is_pow2(align)) {\n        return (size + (align - 1)) & ~(align - 1);\n    } else {\n        return size + align - (size + align - 1) % align - 1;\n    }\n}\n\n/** Align size downwards. */\nstatic_inline usize size_align_down(usize size, usize align) {\n    if (size_is_pow2(align)) {\n        return size & ~(align - 1);\n    } else {\n        return size - (size % align);\n    }\n}\n\n/** Align address upwards (may overflow). */\nstatic_inline void *mem_align_up(void *mem, usize align) {\n    usize size;\n    memcpy(&size, &mem, sizeof(usize));\n    size = size_align_up(size, align);\n    memcpy(&mem, &size, sizeof(usize));\n    return mem;\n}\n\n\n\n/*==============================================================================\n * Bits Utils\n * These functions are used by the floating-point number reader and writer.\n *============================================================================*/\n\n/** Returns the number of leading 0-bits in value (input should not be 0). */\nstatic_inline u32 u64_lz_bits(u64 v) {\n#if GCC_HAS_CLZLL\n    return (u32)__builtin_clzll(v);\n#elif MSC_HAS_BIT_SCAN_64\n    unsigned long r;\n    _BitScanReverse64(&r, v);\n    return (u32)63 - (u32)r;\n#elif MSC_HAS_BIT_SCAN\n    unsigned long hi, lo;\n    bool hi_set = _BitScanReverse(&hi, (u32)(v >> 32)) != 0;\n    _BitScanReverse(&lo, (u32)v);\n    hi |= 32;\n    return (u32)63 - (u32)(hi_set ? hi : lo);\n#else\n    /*\n     branchless, use de Bruijn sequences\n     see: https://www.chessprogramming.org/BitScan\n     */\n    const u8 table[64] = {\n        63, 16, 62,  7, 15, 36, 61,  3,  6, 14, 22, 26, 35, 47, 60,  2,\n         9,  5, 28, 11, 13, 21, 42, 19, 25, 31, 34, 40, 46, 52, 59,  1,\n        17,  8, 37,  4, 23, 27, 48, 10, 29, 12, 43, 20, 32, 41, 53, 18,\n        38, 24, 49, 30, 44, 33, 54, 39, 50, 45, 55, 51, 56, 57, 58,  0\n    };\n    v |= v >> 1;\n    v |= v >> 2;\n    v |= v >> 4;\n    v |= v >> 8;\n    v |= v >> 16;\n    v |= v >> 32;\n    return table[(v * U64(0x03F79D71, 0xB4CB0A89)) >> 58];\n#endif\n}\n\n/** Returns the number of trailing 0-bits in value (input should not be 0). */\nstatic_inline u32 u64_tz_bits(u64 v) {\n#if GCC_HAS_CTZLL\n    return (u32)__builtin_ctzll(v);\n#elif MSC_HAS_BIT_SCAN_64\n    unsigned long r;\n    _BitScanForward64(&r, v);\n    return (u32)r;\n#elif MSC_HAS_BIT_SCAN\n    unsigned long lo, hi;\n    bool lo_set = _BitScanForward(&lo, (u32)(v)) != 0;\n    _BitScanForward(&hi, (u32)(v >> 32));\n    hi += 32;\n    return lo_set ? lo : hi;\n#else\n    /*\n     branchless, use de Bruijn sequences\n     see: https://www.chessprogramming.org/BitScan\n     */\n    const u8 table[64] = {\n         0,  1,  2, 53,  3,  7, 54, 27,  4, 38, 41,  8, 34, 55, 48, 28,\n        62,  5, 39, 46, 44, 42, 22,  9, 24, 35, 59, 56, 49, 18, 29, 11,\n        63, 52,  6, 26, 37, 40, 33, 47, 61, 45, 43, 21, 23, 58, 17, 10,\n        51, 25, 36, 32, 60, 20, 57, 16, 50, 31, 19, 15, 30, 14, 13, 12\n    };\n    return table[((v & (~v + 1)) * U64(0x022FDD63, 0xCC95386D)) >> 58];\n#endif\n}\n\n\n\n/*==============================================================================\n * 128-bit Integer Utils\n * These functions are used by the floating-point number reader and writer.\n *============================================================================*/\n\n/** Multiplies two 64-bit unsigned integers (a * b),\n    returns the 128-bit result as 'hi' and 'lo'. */\nstatic_inline void u128_mul(u64 a, u64 b, u64 *hi, u64 *lo) {\n#if YYJSON_HAS_INT128\n    u128 m = (u128)a * b;\n    *hi = (u64)(m >> 64);\n    *lo = (u64)(m);\n#elif MSC_HAS_UMUL128\n    *lo = _umul128(a, b, hi);\n#else\n    u32 a0 = (u32)(a), a1 = (u32)(a >> 32);\n    u32 b0 = (u32)(b), b1 = (u32)(b >> 32);\n    u64 p00 = (u64)a0 * b0, p01 = (u64)a0 * b1;\n    u64 p10 = (u64)a1 * b0, p11 = (u64)a1 * b1;\n    u64 m0 = p01 + (p00 >> 32);\n    u32 m00 = (u32)(m0), m01 = (u32)(m0 >> 32);\n    u64 m1 = p10 + m00;\n    u32 m10 = (u32)(m1), m11 = (u32)(m1 >> 32);\n    *hi = p11 + m01 + m11;\n    *lo = ((u64)m10 << 32) | (u32)p00;\n#endif\n}\n\n/** Multiplies two 64-bit unsigned integers and add a value (a * b + c),\n    returns the 128-bit result as 'hi' and 'lo'. */\nstatic_inline void u128_mul_add(u64 a, u64 b, u64 c, u64 *hi, u64 *lo) {\n#if YYJSON_HAS_INT128\n    u128 m = (u128)a * b + c;\n    *hi = (u64)(m >> 64);\n    *lo = (u64)(m);\n#else\n    u64 h, l, t;\n    u128_mul(a, b, &h, &l);\n    t = l + c;\n    h += (u64)(((t < l) | (t < c)));\n    *hi = h;\n    *lo = t;\n#endif\n}\n\n\n\n/*==============================================================================\n * File Utils\n * These functions are used to read and write JSON files.\n *============================================================================*/\n\n#define YYJSON_FOPEN_EXT\n#if !defined(_MSC_VER) && defined(__GLIBC__) && defined(__GLIBC_PREREQ)\n#   if __GLIBC_PREREQ(2, 7)\n#       undef YYJSON_FOPEN_EXT\n#       define YYJSON_FOPEN_EXT \"e\" /* glibc extension to enable O_CLOEXEC */\n#   endif\n#endif\n\nstatic_inline FILE *fopen_safe(const char *path, const char *mode) {\n#if YYJSON_MSC_VER >= 1400\n    FILE *file = NULL;\n    if (fopen_s(&file, path, mode) != 0) return NULL;\n    return file;\n#else\n    return fopen(path, mode);\n#endif\n}\n\nstatic_inline FILE *fopen_readonly(const char *path) {\n    return fopen_safe(path, \"rb\" YYJSON_FOPEN_EXT);\n}\n\nstatic_inline FILE *fopen_writeonly(const char *path) {\n    return fopen_safe(path, \"wb\" YYJSON_FOPEN_EXT);\n}\n\nstatic_inline usize fread_safe(void *buf, usize size, FILE *file) {\n#if YYJSON_MSC_VER >= 1400\n    return fread_s(buf, size, 1, size, file);\n#else\n    return fread(buf, 1, size, file);\n#endif\n}\n\n\n\n/*==============================================================================\n * Default Memory Allocator\n * This is a simple libc memory allocator wrapper.\n *============================================================================*/\n\nstatic void *default_malloc(void *ctx, usize size) {\n    return malloc(size);\n}\n\nstatic void *default_realloc(void *ctx, void *ptr, usize old_size, usize size) {\n    return realloc(ptr, size);\n}\n\nstatic void default_free(void *ctx, void *ptr) {\n    free(ptr);\n}\n\nstatic const yyjson_alc YYJSON_DEFAULT_ALC = {\n    default_malloc,\n    default_realloc,\n    default_free,\n    NULL\n};\n\nstatic void *null_malloc(void *ctx, usize size) {\n    return NULL;\n}\n\nstatic void *null_realloc(void *ctx, void *ptr, usize old_size, usize size) {\n    return NULL;\n}\n\nstatic void null_free(void *ctx, void *ptr) {\n    return;\n}\n\nstatic const yyjson_alc YYJSON_NULL_ALC = {\n    null_malloc,\n    null_realloc,\n    null_free,\n    NULL\n};\n\n\n\n/*==============================================================================\n * Pool Memory Allocator\n * This is a simple memory allocator that uses linked list memory chunk.\n * The following code will be executed only when the library user creates\n * this allocator manually.\n *============================================================================*/\n\n/** chunk header */\ntypedef struct pool_chunk {\n    usize size; /* chunk memory size (include chunk header) */\n    struct pool_chunk *next;\n} pool_chunk;\n\n/** ctx header */\ntypedef struct pool_ctx {\n    usize size; /* total memory size (include ctx header) */\n    pool_chunk *free_list;\n} pool_ctx;\n\nstatic void *pool_malloc(void *ctx_ptr, usize size) {\n    pool_ctx *ctx = (pool_ctx *)ctx_ptr;\n    pool_chunk *next, *prev = NULL, *cur = ctx->free_list;\n    \n    if (unlikely(size == 0 || size >= ctx->size)) return NULL;\n    size = size_align_up(size, sizeof(pool_chunk)) + sizeof(pool_chunk);\n    \n    while (cur) {\n        if (cur->size < size) {\n            /* not enough space, try next chunk */\n            prev = cur;\n            cur = cur->next;\n            continue;\n        }\n        if (cur->size >= size + sizeof(pool_chunk) * 2) {\n            /* too much space, split this chunk */\n            next = (pool_chunk *)(void *)((u8 *)cur + size);\n            next->size = cur->size - size;\n            next->next = cur->next;\n            cur->size = size;\n        } else {\n            /* just enough space, use whole chunk */\n            next = cur->next;\n        }\n        if (prev) prev->next = next;\n        else ctx->free_list = next;\n        return (void *)(cur + 1);\n    }\n    return NULL;\n}\n\nstatic void pool_free(void *ctx_ptr, void *ptr) {\n    pool_ctx *ctx = (pool_ctx *)ctx_ptr;\n    pool_chunk *cur = ((pool_chunk *)ptr) - 1;\n    pool_chunk *prev = NULL, *next = ctx->free_list;\n    \n    while (next && next < cur) {\n        prev = next;\n        next = next->next;\n    }\n    if (prev) prev->next = cur;\n    else ctx->free_list = cur;\n    cur->next = next;\n    \n    if (next && ((u8 *)cur + cur->size) == (u8 *)next) {\n        /* merge cur to higher chunk */\n        cur->size += next->size;\n        cur->next = next->next;\n    }\n    if (prev && ((u8 *)prev + prev->size) == (u8 *)cur) {\n        /* merge cur to lower chunk */\n        prev->size += cur->size;\n        prev->next = cur->next;\n    }\n}\n\nstatic void *pool_realloc(void *ctx_ptr, void *ptr,\n                          usize old_size, usize size) {\n    pool_ctx *ctx = (pool_ctx *)ctx_ptr;\n    pool_chunk *cur = ((pool_chunk *)ptr) - 1, *prev, *next, *tmp;\n    usize free_size;\n    void *new_ptr;\n    \n    if (unlikely(size == 0 || size >= ctx->size)) return NULL;\n    size = size_align_up(size, sizeof(pool_chunk)) + sizeof(pool_chunk);\n    \n    /* reduce size */\n    if (unlikely(size <= cur->size)) {\n        free_size = cur->size - size;\n        if (free_size >= sizeof(pool_chunk) * 2) {\n            tmp = (pool_chunk *)(void *)((u8 *)cur + cur->size - free_size);\n            tmp->size = free_size;\n            pool_free(ctx_ptr, (void *)(tmp + 1));\n            cur->size -= free_size;\n        }\n        return ptr;\n    }\n    \n    /* find next and prev chunk */\n    prev = NULL;\n    next = ctx->free_list;\n    while (next && next < cur) {\n        prev = next;\n        next = next->next;\n    }\n    \n    /* merge to higher chunk if they are contiguous */\n    if ((u8 *)cur + cur->size == (u8 *)next &&\n        cur->size + next->size >= size) {\n        free_size = cur->size + next->size - size;\n        if (free_size > sizeof(pool_chunk) * 2) {\n            tmp = (pool_chunk *)(void *)((u8 *)cur + size);\n            if (prev) prev->next = tmp;\n            else ctx->free_list = tmp;\n            tmp->next = next->next;\n            tmp->size = free_size;\n            cur->size = size;\n        } else {\n            if (prev) prev->next = next->next;\n            else ctx->free_list = next->next;\n            cur->size += next->size;\n        }\n        return ptr;\n    }\n    \n    /* fallback to malloc and memcpy */\n    new_ptr = pool_malloc(ctx_ptr, size - sizeof(pool_chunk));\n    if (new_ptr) {\n        memcpy(new_ptr, ptr, cur->size - sizeof(pool_chunk));\n        pool_free(ctx_ptr, ptr);\n    }\n    return new_ptr;\n}\n\nbool yyjson_alc_pool_init(yyjson_alc *alc, void *buf, usize size) {\n    pool_chunk *chunk;\n    pool_ctx *ctx;\n    \n    if (unlikely(!alc)) return false;\n    *alc = YYJSON_NULL_ALC;\n    if (size < sizeof(pool_ctx) * 4) return false;\n    ctx = (pool_ctx *)mem_align_up(buf, sizeof(pool_ctx));\n    if (unlikely(!ctx)) return false;\n    size -= (usize)((u8 *)ctx - (u8 *)buf);\n    size = size_align_down(size, sizeof(pool_ctx));\n    \n    chunk = (pool_chunk *)(ctx + 1);\n    chunk->size = size - sizeof(pool_ctx);\n    chunk->next = NULL;\n    ctx->size = size;\n    ctx->free_list = chunk;\n    \n    alc->malloc = pool_malloc;\n    alc->realloc = pool_realloc;\n    alc->free = pool_free;\n    alc->ctx = (void *)ctx;\n    return true;\n}\n\n\n\n/*==============================================================================\n * JSON document and value\n *============================================================================*/\n\nstatic_inline void unsafe_yyjson_str_pool_release(yyjson_str_pool *pool,\n                                                  yyjson_alc *alc) {\n    yyjson_str_chunk *chunk = pool->chunks, *next;\n    while (chunk) {\n        next = chunk->next;\n        alc->free(alc->ctx, chunk);\n        chunk = next;\n    }\n}\n\nstatic_inline void unsafe_yyjson_val_pool_release(yyjson_val_pool *pool,\n                                                  yyjson_alc *alc) {\n    yyjson_val_chunk *chunk = pool->chunks, *next;\n    while (chunk) {\n        next = chunk->next;\n        alc->free(alc->ctx, chunk);\n        chunk = next;\n    }\n}\n\nbool unsafe_yyjson_str_pool_grow(yyjson_str_pool *pool,\n                                 const yyjson_alc *alc, usize len) {\n    yyjson_str_chunk *chunk;\n    usize size, max_len;\n    \n    /* create a new chunk */\n    max_len = USIZE_MAX - sizeof(yyjson_str_chunk);\n    if (unlikely(len > max_len)) return false;\n    size = len + sizeof(yyjson_str_chunk);\n    size = yyjson_max(pool->chunk_size, size);\n    chunk = (yyjson_str_chunk *)alc->malloc(alc->ctx, size);\n    if (unlikely(!chunk)) return false;\n    \n    /* insert the new chunk as the head of the linked list */\n    chunk->next = pool->chunks;\n    chunk->chunk_size = size;\n    pool->chunks = chunk;\n    pool->cur = (char *)chunk + sizeof(yyjson_str_chunk);\n    pool->end = (char *)chunk + size;\n    \n    /* the next chunk is twice the size of the current one */\n    size = yyjson_min(pool->chunk_size * 2, pool->chunk_size_max);\n    if (size < pool->chunk_size) size = pool->chunk_size_max; /* overflow */\n    pool->chunk_size = size;\n    return true;\n}\n\nbool unsafe_yyjson_val_pool_grow(yyjson_val_pool *pool,\n                                 const yyjson_alc *alc, usize count) {\n    yyjson_val_chunk *chunk;\n    usize size, max_count;\n    \n    /* create a new chunk */\n    max_count = USIZE_MAX / sizeof(yyjson_mut_val) - 1;\n    if (unlikely(count > max_count)) return false;\n    size = (count + 1) * sizeof(yyjson_mut_val);\n    size = yyjson_max(pool->chunk_size, size);\n    chunk = (yyjson_val_chunk *)alc->malloc(alc->ctx, size);\n    if (unlikely(!chunk)) return false;\n    \n    /* insert the new chunk as the head of the linked list */\n    chunk->next = pool->chunks;\n    chunk->chunk_size = size;\n    pool->chunks = chunk;\n    pool->cur = (yyjson_mut_val *)(void *)((u8 *)chunk) + 1;\n    pool->end = (yyjson_mut_val *)(void *)((u8 *)chunk + size);\n    \n    /* the next chunk is twice the size of the current one */\n    size = yyjson_min(pool->chunk_size * 2, pool->chunk_size_max);\n    if (size < pool->chunk_size) size = pool->chunk_size_max; /* overflow */\n    pool->chunk_size = size;\n    return true;\n}\n\nbool yyjson_mut_doc_set_str_pool_size(yyjson_mut_doc *doc, size_t len) {\n    usize max_size = USIZE_MAX - sizeof(yyjson_str_chunk);\n    if (!doc || !len || len > max_size) return false;\n    doc->str_pool.chunk_size = len + sizeof(yyjson_str_chunk);\n    return true;\n}\n\nbool yyjson_mut_doc_set_val_pool_size(yyjson_mut_doc *doc, size_t count) {\n    usize max_count = USIZE_MAX / sizeof(yyjson_mut_val) - 1;\n    if (!doc || !count || count > max_count) return false;\n    doc->val_pool.chunk_size = (count + 1) * sizeof(yyjson_mut_val);\n    return true;\n}\n\nvoid yyjson_mut_doc_free(yyjson_mut_doc *doc) {\n    if (doc) {\n        yyjson_alc alc = doc->alc;\n        unsafe_yyjson_str_pool_release(&doc->str_pool, &alc);\n        unsafe_yyjson_val_pool_release(&doc->val_pool, &alc);\n        alc.free(alc.ctx, doc);\n    }\n}\n\nyyjson_mut_doc *yyjson_mut_doc_new(const yyjson_alc *alc) {\n    yyjson_mut_doc *doc;\n    if (!alc) alc = &YYJSON_DEFAULT_ALC;\n    doc = (yyjson_mut_doc *)alc->malloc(alc->ctx, sizeof(yyjson_mut_doc));\n    if (!doc) return NULL;\n    memset(doc, 0, sizeof(yyjson_mut_doc));\n    \n    doc->alc = *alc;\n    doc->str_pool.chunk_size = YYJSON_MUT_DOC_STR_POOL_INIT_SIZE;\n    doc->str_pool.chunk_size_max = YYJSON_MUT_DOC_STR_POOL_MAX_SIZE;\n    doc->val_pool.chunk_size = YYJSON_MUT_DOC_VAL_POOL_INIT_SIZE;\n    doc->val_pool.chunk_size_max = YYJSON_MUT_DOC_VAL_POOL_MAX_SIZE;\n    return doc;\n}\n\nyyjson_mut_doc *yyjson_doc_mut_copy(yyjson_doc *doc, const yyjson_alc *alc) {\n    yyjson_mut_doc *m_doc;\n    yyjson_mut_val *m_val;\n    \n    if (!doc || !doc->root) return NULL;\n    m_doc = yyjson_mut_doc_new(alc);\n    if (!m_doc) return NULL;\n    m_val = yyjson_val_mut_copy(m_doc, doc->root);\n    if (!m_val) {\n        yyjson_mut_doc_free(m_doc);\n        return NULL;\n    }\n    yyjson_mut_doc_set_root(m_doc, m_val);\n    return m_doc;\n}\n\nyyjson_mut_doc *yyjson_mut_doc_mut_copy(yyjson_mut_doc *doc,\n                                        const yyjson_alc *alc) {\n    yyjson_mut_doc *m_doc;\n    yyjson_mut_val *m_val;\n    \n    if (!doc) return NULL;\n    if (!doc->root) return yyjson_mut_doc_new(alc);\n    \n    m_doc = yyjson_mut_doc_new(alc);\n    if (!m_doc) return NULL;\n    m_val = yyjson_mut_val_mut_copy(m_doc, doc->root);\n    if (!m_val) {\n        yyjson_mut_doc_free(m_doc);\n        return NULL;\n    }\n    yyjson_mut_doc_set_root(m_doc, m_val);\n    return m_doc;\n}\n\nyyjson_mut_val *yyjson_val_mut_copy(yyjson_mut_doc *m_doc,\n                                    yyjson_val *i_vals) {\n    /*\n     The immutable object or array stores all sub-values in a contiguous memory,\n     We copy them to another contiguous memory as mutable values,\n     then reconnect the mutable values with the original relationship.\n     */\n    \n    usize i_vals_len;\n    yyjson_mut_val *m_vals, *m_val;\n    yyjson_val *i_val, *i_end;\n    \n    if (!m_doc || !i_vals) return NULL;\n    i_end = unsafe_yyjson_get_next(i_vals);\n    i_vals_len = (usize)(unsafe_yyjson_get_next(i_vals) - i_vals);\n    m_vals = unsafe_yyjson_mut_val(m_doc, i_vals_len);\n    if (!m_vals) return NULL;\n    i_val = i_vals;\n    m_val = m_vals;\n    \n    for (; i_val < i_end; i_val++, m_val++) {\n        yyjson_type type = unsafe_yyjson_get_type(i_val);\n        m_val->tag = i_val->tag;\n        m_val->uni.u64 = i_val->uni.u64;\n        if (type == YYJSON_TYPE_STR || type == YYJSON_TYPE_RAW) {\n            const char *str = i_val->uni.str;\n            usize str_len = unsafe_yyjson_get_len(i_val);\n            m_val->uni.str = unsafe_yyjson_mut_strncpy(m_doc, str, str_len);\n            if (!m_val->uni.str) return NULL;\n        } else if (type == YYJSON_TYPE_ARR) {\n            usize len = unsafe_yyjson_get_len(i_val);\n            if (len > 0) {\n                yyjson_val *ii_val = i_val + 1, *ii_next;\n                yyjson_mut_val *mm_val = m_val + 1, *mm_ctn = m_val, *mm_next;\n                while (len-- > 1) {\n                    ii_next = unsafe_yyjson_get_next(ii_val);\n                    mm_next = mm_val + (ii_next - ii_val);\n                    mm_val->next = mm_next;\n                    ii_val = ii_next;\n                    mm_val = mm_next;\n                }\n                mm_val->next = mm_ctn + 1;\n                mm_ctn->uni.ptr = mm_val;\n            }\n        } else if (type == YYJSON_TYPE_OBJ) {\n            usize len = unsafe_yyjson_get_len(i_val);\n            if (len > 0) {\n                yyjson_val *ii_key = i_val + 1, *ii_nextkey;\n                yyjson_mut_val *mm_key = m_val + 1, *mm_ctn = m_val;\n                yyjson_mut_val *mm_nextkey;\n                while (len-- > 1) {\n                    ii_nextkey = unsafe_yyjson_get_next(ii_key + 1);\n                    mm_nextkey = mm_key + (ii_nextkey - ii_key);\n                    mm_key->next = mm_key + 1;\n                    mm_key->next->next = mm_nextkey;\n                    ii_key = ii_nextkey;\n                    mm_key = mm_nextkey;\n                }\n                mm_key->next = mm_key + 1;\n                mm_key->next->next = mm_ctn + 1;\n                mm_ctn->uni.ptr = mm_key;\n            }\n        }\n    }\n    \n    return m_vals;\n}\n\nstatic yyjson_mut_val *unsafe_yyjson_mut_val_mut_copy(yyjson_mut_doc *m_doc,\n                                                      yyjson_mut_val *m_vals) {\n    /*\n     The mutable object or array stores all sub-values in a circular linked\n     list, so we can traverse them in the same loop. The traversal starts from\n     the last item, continues with the first item in a list, and ends with the\n     second to last item, which needs to be linked to the last item to close the\n     circle.\n     */\n    \n    yyjson_mut_val *m_val = unsafe_yyjson_mut_val(m_doc, 1);\n    if (unlikely(!m_val)) return NULL;\n    m_val->tag = m_vals->tag;\n    \n    switch (unsafe_yyjson_get_type(m_vals)) {\n        case YYJSON_TYPE_OBJ:\n        case YYJSON_TYPE_ARR:\n            if (unsafe_yyjson_get_len(m_vals) > 0) {\n                yyjson_mut_val *last = (yyjson_mut_val *)m_vals->uni.ptr;\n                yyjson_mut_val *next = last->next, *prev;\n                prev = unsafe_yyjson_mut_val_mut_copy(m_doc, last);\n                if (!prev) return NULL;\n                m_val->uni.ptr = (void *)prev;\n                while (next != last) {\n                    prev->next = unsafe_yyjson_mut_val_mut_copy(m_doc, next);\n                    if (!prev->next) return NULL;\n                    prev = prev->next;\n                    next = next->next;\n                }\n                prev->next = (yyjson_mut_val *)m_val->uni.ptr;\n            }\n            break;\n        \n        case YYJSON_TYPE_RAW:\n        case YYJSON_TYPE_STR: {\n            const char *str = m_vals->uni.str;\n            usize str_len = unsafe_yyjson_get_len(m_vals);\n            m_val->uni.str = unsafe_yyjson_mut_strncpy(m_doc, str, str_len);\n            if (!m_val->uni.str) return NULL;\n            break;\n        }\n        \n        default:\n            m_val->uni = m_vals->uni;\n            break;\n    }\n    \n    return m_val;\n}\n\nyyjson_mut_val *yyjson_mut_val_mut_copy(yyjson_mut_doc *doc,\n                                        yyjson_mut_val *val) {\n    if (doc && val) return unsafe_yyjson_mut_val_mut_copy(doc, val);\n    return NULL;\n}\n\n/* Count the number of values and the total length of the strings. */\nstatic void yyjson_mut_stat(yyjson_mut_val *val,\n                            usize *val_sum, usize *str_sum) {\n    yyjson_type type = unsafe_yyjson_get_type(val);\n    *val_sum += 1;\n    if (type == YYJSON_TYPE_ARR || type == YYJSON_TYPE_OBJ) {\n        yyjson_mut_val *child = (yyjson_mut_val *)val->uni.ptr;\n        usize len = unsafe_yyjson_get_len(val), i;\n        len <<= (u8)(type == YYJSON_TYPE_OBJ);\n        *val_sum += len;\n        for (i = 0; i < len; i++) {\n            yyjson_type stype = unsafe_yyjson_get_type(child);\n            if (stype == YYJSON_TYPE_STR || stype == YYJSON_TYPE_RAW) {\n                *str_sum += unsafe_yyjson_get_len(child) + 1;\n            } else if (stype == YYJSON_TYPE_ARR || stype == YYJSON_TYPE_OBJ) {\n                yyjson_mut_stat(child, val_sum, str_sum);\n                *val_sum -= 1;\n            }\n            child = child->next;\n        }\n    } else if (type == YYJSON_TYPE_STR || type == YYJSON_TYPE_RAW) {\n        *str_sum += unsafe_yyjson_get_len(val) + 1;\n    }\n}\n\n/* Copy mutable values to immutable value pool. */\nstatic usize yyjson_imut_copy(yyjson_val **val_ptr, char **buf_ptr,\n                              yyjson_mut_val *mval) {\n    yyjson_val *val = *val_ptr;\n    yyjson_type type = unsafe_yyjson_get_type(mval);\n    if (type == YYJSON_TYPE_ARR || type == YYJSON_TYPE_OBJ) {\n        yyjson_mut_val *child = (yyjson_mut_val *)mval->uni.ptr;\n        usize len = unsafe_yyjson_get_len(mval), i;\n        usize val_sum = 1;\n        if (type == YYJSON_TYPE_OBJ) {\n            if (len) child = child->next->next;\n            len <<= 1;\n        } else {\n            if (len) child = child->next;\n        }\n        *val_ptr = val + 1;\n        for (i = 0; i < len; i++) {\n            val_sum += yyjson_imut_copy(val_ptr, buf_ptr, child);\n            child = child->next;\n        }\n        val->tag = mval->tag;\n        val->uni.ofs = val_sum * sizeof(yyjson_val);\n        return val_sum;\n    } else if (type == YYJSON_TYPE_STR || type == YYJSON_TYPE_RAW) {\n        char *buf = *buf_ptr;\n        usize len = unsafe_yyjson_get_len(mval);\n        memcpy((void *)buf, (const void *)mval->uni.str, len);\n        buf[len] = '\\0';\n        val->tag = mval->tag;\n        val->uni.str = buf;\n        *val_ptr = val + 1;\n        *buf_ptr = buf + len + 1;\n        return 1;\n    } else {\n        val->tag = mval->tag;\n        val->uni = mval->uni;\n        *val_ptr = val + 1;\n        return 1;\n    }\n}\n\nyyjson_doc *yyjson_mut_doc_imut_copy(yyjson_mut_doc *mdoc,\n                                     const yyjson_alc *alc) {\n    if (!mdoc) return NULL;\n    return yyjson_mut_val_imut_copy(mdoc->root, alc);\n}\n\nyyjson_doc *yyjson_mut_val_imut_copy(yyjson_mut_val *mval,\n                                     const yyjson_alc *alc) {\n    usize val_num = 0, str_sum = 0, hdr_size, buf_size;\n    yyjson_doc *doc = NULL;\n    yyjson_val *val_hdr = NULL;\n    \n    /* This value should be NULL here. Setting a non-null value suppresses\n       warning from the clang analyzer. */\n    char *str_hdr = (char *)(void *)&str_sum;\n    if (!mval) return NULL;\n    if (!alc) alc = &YYJSON_DEFAULT_ALC;\n    \n    /* traverse the input value to get pool size */\n    yyjson_mut_stat(mval, &val_num, &str_sum);\n    \n    /* create doc and val pool */\n    hdr_size = size_align_up(sizeof(yyjson_doc), sizeof(yyjson_val));\n    buf_size = hdr_size + val_num * sizeof(yyjson_val);\n    doc = (yyjson_doc *)alc->malloc(alc->ctx, buf_size);\n    if (!doc) return NULL;\n    memset(doc, 0, sizeof(yyjson_doc));\n    val_hdr = (yyjson_val *)(void *)((char *)(void *)doc + hdr_size);\n    doc->root = val_hdr;\n    doc->alc = *alc;\n    \n    /* create str pool */\n    if (str_sum > 0) {\n        str_hdr = (char *)alc->malloc(alc->ctx, str_sum);\n        doc->str_pool = str_hdr;\n        if (!str_hdr) {\n            alc->free(alc->ctx, (void *)doc);\n            return NULL;\n        }\n    }\n    \n    /* copy vals and strs */\n    doc->val_read = yyjson_imut_copy(&val_hdr, &str_hdr, mval);\n    doc->dat_read = str_sum + 1;\n    return doc;\n}\n\nstatic_inline bool unsafe_yyjson_num_equals(void *lhs, void *rhs) {\n    yyjson_val_uni *luni = &((yyjson_val *)lhs)->uni;\n    yyjson_val_uni *runi = &((yyjson_val *)rhs)->uni;\n    yyjson_subtype lt = unsafe_yyjson_get_subtype(lhs);\n    yyjson_subtype rt = unsafe_yyjson_get_subtype(rhs);\n    if (lt == rt)\n        return luni->u64 == runi->u64;\n    if (lt == YYJSON_SUBTYPE_SINT && rt == YYJSON_SUBTYPE_UINT)\n        return luni->i64 >= 0 && luni->u64 == runi->u64;\n    if (lt == YYJSON_SUBTYPE_UINT && rt == YYJSON_SUBTYPE_SINT)\n        return runi->i64 >= 0 && luni->u64 == runi->u64;\n    return false;\n}\n\nstatic_inline bool unsafe_yyjson_str_equals(void *lhs, void *rhs) {\n    usize len = unsafe_yyjson_get_len(lhs);\n    if (len != unsafe_yyjson_get_len(rhs)) return false;\n    return !memcmp(unsafe_yyjson_get_str(lhs),\n                   unsafe_yyjson_get_str(rhs), len);\n}\n\nbool unsafe_yyjson_equals(yyjson_val *lhs, yyjson_val *rhs) {\n    yyjson_type type = unsafe_yyjson_get_type(lhs);\n    if (type != unsafe_yyjson_get_type(rhs)) return false;\n    \n    switch (type) {\n        case YYJSON_TYPE_OBJ: {\n            usize len = unsafe_yyjson_get_len(lhs);\n            if (len != unsafe_yyjson_get_len(rhs)) return false;\n            if (len > 0) {\n                yyjson_obj_iter iter;\n                yyjson_obj_iter_init(rhs, &iter);\n                lhs = unsafe_yyjson_get_first(lhs);\n                while (len-- > 0) {\n                    rhs = yyjson_obj_iter_getn(&iter, lhs->uni.str,\n                                               unsafe_yyjson_get_len(lhs));\n                    if (!rhs || !unsafe_yyjson_equals(lhs + 1, rhs))\n                        return false;\n                    lhs = unsafe_yyjson_get_next(lhs + 1);\n                }\n            }\n            /* yyjson allows duplicate keys, so the check may be inaccurate */\n            return true;\n        }\n        \n        case YYJSON_TYPE_ARR: {\n            usize len = unsafe_yyjson_get_len(lhs);\n            if (len != unsafe_yyjson_get_len(rhs)) return false;\n            if (len > 0) {\n                lhs = unsafe_yyjson_get_first(lhs);\n                rhs = unsafe_yyjson_get_first(rhs);\n                while (len-- > 0) {\n                    if (!unsafe_yyjson_equals(lhs, rhs)) return false;\n                    lhs = unsafe_yyjson_get_next(lhs);\n                    rhs = unsafe_yyjson_get_next(rhs);\n                }\n            }\n            return true;\n        }\n        \n        case YYJSON_TYPE_NUM:\n            return unsafe_yyjson_num_equals(lhs, rhs);\n        \n        case YYJSON_TYPE_RAW:\n        case YYJSON_TYPE_STR:\n            return unsafe_yyjson_str_equals(lhs, rhs);\n        \n        case YYJSON_TYPE_NULL:\n        case YYJSON_TYPE_BOOL:\n            return lhs->tag == rhs->tag;\n        \n        default:\n            return false;\n    }\n}\n\nbool unsafe_yyjson_mut_equals(yyjson_mut_val *lhs, yyjson_mut_val *rhs) {\n    yyjson_type type = unsafe_yyjson_get_type(lhs);\n    if (type != unsafe_yyjson_get_type(rhs)) return false;\n    \n    switch (type) {\n        case YYJSON_TYPE_OBJ: {\n            usize len = unsafe_yyjson_get_len(lhs);\n            if (len != unsafe_yyjson_get_len(rhs)) return false;\n            if (len > 0) {\n                yyjson_mut_obj_iter iter;\n                yyjson_mut_obj_iter_init(rhs, &iter);\n                lhs = (yyjson_mut_val *)lhs->uni.ptr;\n                while (len-- > 0) {\n                    rhs = yyjson_mut_obj_iter_getn(&iter, lhs->uni.str,\n                                                   unsafe_yyjson_get_len(lhs));\n                    if (!rhs || !unsafe_yyjson_mut_equals(lhs->next, rhs))\n                        return false;\n                    lhs = lhs->next->next;\n                }\n            }\n            /* yyjson allows duplicate keys, so the check may be inaccurate */\n            return true;\n        }\n        \n        case YYJSON_TYPE_ARR: {\n            usize len = unsafe_yyjson_get_len(lhs);\n            if (len != unsafe_yyjson_get_len(rhs)) return false;\n            if (len > 0) {\n                lhs = (yyjson_mut_val *)lhs->uni.ptr;\n                rhs = (yyjson_mut_val *)rhs->uni.ptr;\n                while (len-- > 0) {\n                    if (!unsafe_yyjson_mut_equals(lhs, rhs)) return false;\n                    lhs = lhs->next;\n                    rhs = rhs->next;\n                }\n            }\n            return true;\n        }\n        \n        case YYJSON_TYPE_NUM:\n            return unsafe_yyjson_num_equals(lhs, rhs);\n        \n        case YYJSON_TYPE_RAW:\n        case YYJSON_TYPE_STR:\n            return unsafe_yyjson_str_equals(lhs, rhs);\n        \n        case YYJSON_TYPE_NULL:\n        case YYJSON_TYPE_BOOL:\n            return lhs->tag == rhs->tag;\n        \n        default:\n            return false;\n    }\n}\n\n\n\n#if !YYJSON_DISABLE_UTILS\n\n/*==============================================================================\n * JSON Pointer API (RFC 6901)\n *============================================================================*/\n\n/**\n Get a token from JSON pointer string.\n @param ptr [in,out]\n                in:  string that points to current token prefix `/`\n                out: string that points to next token prefix `/`, or string end\n @param end [in] end of the entire JSON Pointer string\n @param len [out] unescaped token length\n @param esc [out] number of escaped characters in this token\n @return head of the token, or NULL if syntax error\n */\nstatic_inline const char *ptr_next_token(const char **ptr, const char *end,\n                                         usize *len, usize *esc) {\n    const char *hdr = *ptr + 1;\n    const char *cur = hdr;\n    /* skip unescaped characters */\n    while (cur < end && *cur != '/' && *cur != '~') cur++;\n    if (likely(cur == end || *cur != '~')) {\n        /* no escaped characters, return */\n        *ptr = cur;\n        *len = (usize)(cur - hdr);\n        *esc = 0;\n        return hdr;\n    } else {\n        /* handle escaped characters */\n        usize esc_num = 0;\n        while (cur < end && *cur != '/') {\n            if (*cur++ == '~') {\n                if (cur == end || (*cur != '0' && *cur != '1')) {\n                    *ptr = cur - 1;\n                    return NULL;\n                }\n                esc_num++;\n            }\n        }\n        *ptr = cur;\n        *len = (usize)(cur - hdr) - esc_num;\n        *esc = esc_num;\n        return hdr;\n    }\n}\n\n/**\n Convert token string to index.\n @param cur [in]  token head\n @param len [in]  token length\n @param idx [out] the index number, or USIZE_MAX if token is '-'\n @return true if token is a valid array index\n */\nstatic_inline bool ptr_token_to_idx(const char *cur, usize len, usize *idx) {\n    const char *end = cur + len;\n    usize num = 0, add;\n    if (unlikely(len == 0 || len > USIZE_SAFE_DIG)) return false;\n    if (*cur == '0') {\n        if (unlikely(len > 1)) return false;\n        *idx = 0;\n        return true;\n    }\n    if (*cur == '-') {\n        if (unlikely(len > 1)) return false;\n        *idx = USIZE_MAX;\n        return true;\n    }\n    for (; cur < end && (add = (usize)((u8)*cur - (u8)'0')) <= 9; cur++) {\n        num = num * 10 + add;\n    }\n    if (unlikely(num == 0 || cur < end)) return false;\n    *idx = num;\n    return true;\n}\n\n/**\n Compare JSON key with token.\n @param key a string key (yyjson_val or yyjson_mut_val)\n @param tag the expected string key tag\n @param token a JSON pointer token\n @param len unescaped token length\n @param esc number of escaped characters in this token\n @return true if `str` is equals to `token`\n */\nstatic_inline bool ptr_token_eq(void *key, u64 tag,\n                                const char *token, usize len, usize esc) {\n    yyjson_val *val = (yyjson_val *)key;\n    if (val->tag != tag) return false;\n    if (likely(!esc)) {\n        return memcmp(val->uni.str, token, len) == 0;\n    } else {\n        const char *str = val->uni.str;\n        for (; len-- > 0; token++, str++) {\n            if (*token == '~') {\n                if (*str != (*++token == '0' ? '~' : '/')) return false;\n            } else {\n                if (*str != *token) return false;\n            }\n        }\n        return true;\n    }\n}\n\n/**\n Get a value from array by token.\n @param arr   an array, should not be NULL or non-array type\n @param token a JSON pointer token\n @param len   unescaped token length\n @param esc   number of escaped characters in this token\n @return value at index, or NULL if token is not index or index is out of range\n */\nstatic_inline yyjson_val *ptr_arr_get(yyjson_val *arr, const char *token,\n                                      usize len, usize esc) {\n    yyjson_val *val = unsafe_yyjson_get_first(arr);\n    usize num = unsafe_yyjson_get_len(arr), idx;\n    if (unlikely(num == 0)) return NULL;\n    if (unlikely(!ptr_token_to_idx(token, len, &idx))) return NULL;\n    if (unlikely(idx >= num)) return NULL;\n    if (unsafe_yyjson_arr_is_flat(arr)) {\n        return val + idx;\n    } else {\n        while (idx-- > 0) val = unsafe_yyjson_get_next(val);\n        return val;\n    }\n}\n\n/**\n Get a value from object by token.\n @param obj   [in] an object, should not be NULL or non-object type\n @param token [in] a JSON pointer token\n @param len   [in] unescaped token length\n @param esc   [in] number of escaped characters in this token\n @return value associated with the token, or NULL if no value\n */\nstatic_inline yyjson_val *ptr_obj_get(yyjson_val *obj, const char *token,\n                                      usize len, usize esc) {\n    u64 tag = (((u64)len) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    yyjson_val *key = unsafe_yyjson_get_first(obj);\n    usize num = unsafe_yyjson_get_len(obj);\n    if (unlikely(num == 0)) return NULL;\n    for (; num > 0; num--, key = unsafe_yyjson_get_next(key + 1)) {\n        if (ptr_token_eq(key, tag, token, len, esc)) return key + 1;\n    }\n    return NULL;\n}\n\n/**\n Get a value from array by token.\n @param arr   [in] an array, should not be NULL or non-array type\n @param token [in] a JSON pointer token\n @param len   [in] unescaped token length\n @param esc   [in] number of escaped characters in this token\n @param pre   [out] previous (sibling) value of the returned value\n @param last  [out] whether index is last\n @return value at index, or NULL if token is not index or index is out of range\n */\nstatic_inline yyjson_mut_val *ptr_mut_arr_get(yyjson_mut_val *arr,\n                                              const char *token,\n                                              usize len, usize esc,\n                                              yyjson_mut_val **pre,\n                                              bool *last) {\n    yyjson_mut_val *val = (yyjson_mut_val *)arr->uni.ptr; /* last (tail) */\n    usize num = unsafe_yyjson_get_len(arr), idx;\n    if (last) *last = false;\n    if (pre) *pre = NULL;\n    if (unlikely(num == 0)) {\n        if (last && len == 1 && (*token == '0' || *token == '-')) *last = true;\n        return NULL;\n    }\n    if (unlikely(!ptr_token_to_idx(token, len, &idx))) return NULL;\n    if (last) *last = (idx == num || idx == USIZE_MAX);\n    if (unlikely(idx >= num)) return NULL;\n    while (idx-- > 0) val = val->next;\n    *pre = val;\n    return val->next;\n}\n\n/**\n Get a value from object by token.\n @param obj   [in] an object, should not be NULL or non-object type\n @param token [in] a JSON pointer token\n @param len   [in] unescaped token length\n @param esc   [in] number of escaped characters in this token\n @param pre   [out] previous (sibling) key of the returned value's key\n @return value associated with the token, or NULL if no value\n */\nstatic_inline yyjson_mut_val *ptr_mut_obj_get(yyjson_mut_val *obj,\n                                              const char *token,\n                                              usize len, usize esc,\n                                              yyjson_mut_val **pre) {\n    u64 tag = (((u64)len) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    yyjson_mut_val *pre_key = (yyjson_mut_val *)obj->uni.ptr, *key;\n    usize num = unsafe_yyjson_get_len(obj);\n    if (pre) *pre = NULL;\n    if (unlikely(num == 0)) return NULL;\n    for (; num > 0; num--, pre_key = key) {\n        key = pre_key->next->next;\n        if (ptr_token_eq(key, tag, token, len, esc)) {\n            *pre = pre_key;\n            return key->next;\n        }\n    }\n    return NULL;\n}\n\n/**\n Create a string value with JSON pointer token.\n @param token [in] a JSON pointer token\n @param len   [in] unescaped token length\n @param esc   [in] number of escaped characters in this token\n @param doc   [in] used for memory allocation when creating value\n @return new string value, or NULL if memory allocation failed\n */\nstatic_inline yyjson_mut_val *ptr_new_key(const char *token,\n                                          usize len, usize esc,\n                                          yyjson_mut_doc *doc) {\n    const char *src = token;\n    if (likely(!esc)) {\n        return yyjson_mut_strncpy(doc, src, len);\n    } else {\n        const char *end = src + len + esc;\n        char *dst = unsafe_yyjson_mut_str_alc(doc, len + esc);\n        char *str = dst;\n        if (unlikely(!dst)) return NULL;\n        for (; src < end; src++, dst++) {\n            if (*src != '~') *dst = *src;\n            else *dst = (*++src == '0' ? '~' : '/');\n        }\n        *dst = '\\0';\n        return yyjson_mut_strn(doc, str, len);\n    }\n}\n\n/* macros for yyjson_ptr */\n#define return_err(_ret, _code, _pos, _msg) do { \\\n    if (err) { \\\n        err->code = YYJSON_PTR_ERR_##_code; \\\n        err->msg = _msg; \\\n        err->pos = (usize)(_pos); \\\n    } \\\n    return _ret; \\\n} while (false)\n\n#define return_err_resolve(_ret, _pos) \\\n    return_err(_ret, RESOLVE, _pos, \"JSON pointer cannot be resolved\")\n#define return_err_syntax(_ret, _pos) \\\n    return_err(_ret, SYNTAX, _pos, \"invalid escaped character\")\n#define return_err_alloc(_ret) \\\n    return_err(_ret, MEMORY_ALLOCATION, 0, \"failed to create value\")\n\nyyjson_val *unsafe_yyjson_ptr_getx(yyjson_val *val,\n                                   const char *ptr, size_t ptr_len,\n                                   yyjson_ptr_err *err) {\n    \n    const char *hdr = ptr, *end = ptr + ptr_len, *token;\n    usize len, esc;\n    yyjson_type type;\n    \n    while (true) {\n        token = ptr_next_token(&ptr, end, &len, &esc);\n        if (unlikely(!token)) return_err_syntax(NULL, ptr - hdr);\n        type = unsafe_yyjson_get_type(val);\n        if (type == YYJSON_TYPE_OBJ) {\n            val = ptr_obj_get(val, token, len, esc);\n        } else if (type == YYJSON_TYPE_ARR) {\n            val = ptr_arr_get(val, token, len, esc);\n        } else {\n            val = NULL;\n        }\n        if (!val) return_err_resolve(NULL, token - hdr);\n        if (ptr == end) return val;\n    }\n}\n\nyyjson_mut_val *unsafe_yyjson_mut_ptr_getx(yyjson_mut_val *val,\n                                           const char *ptr,\n                                           size_t ptr_len,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err) {\n    \n    const char *hdr = ptr, *end = ptr + ptr_len, *token;\n    usize len, esc;\n    yyjson_mut_val *ctn, *pre = NULL;\n    yyjson_type type;\n    bool idx_is_last = false;\n    \n    while (true) {\n        token = ptr_next_token(&ptr, end, &len, &esc);\n        if (unlikely(!token)) return_err_syntax(NULL, ptr - hdr);\n        ctn = val;\n        type = unsafe_yyjson_get_type(val);\n        if (type == YYJSON_TYPE_OBJ) {\n            val = ptr_mut_obj_get(val, token, len, esc, &pre);\n        } else if (type == YYJSON_TYPE_ARR) {\n            val = ptr_mut_arr_get(val, token, len, esc, &pre, &idx_is_last);\n        } else {\n            val = NULL;\n        }\n        if (ctx && (ptr == end)) {\n            if (type == YYJSON_TYPE_OBJ ||\n                (type == YYJSON_TYPE_ARR && (val || idx_is_last))) {\n                ctx->ctn = ctn;\n                ctx->pre = pre;\n            }\n        }\n        if (!val) return_err_resolve(NULL, token - hdr);\n        if (ptr == end) return val;\n    }\n}\n\nbool unsafe_yyjson_mut_ptr_putx(yyjson_mut_val *val,\n                                const char *ptr, size_t ptr_len,\n                                yyjson_mut_val *new_val,\n                                yyjson_mut_doc *doc,\n                                bool create_parent, bool insert_new,\n                                yyjson_ptr_ctx *ctx,\n                                yyjson_ptr_err *err) {\n    \n    const char *hdr = ptr, *end = ptr + ptr_len, *token;\n    usize token_len, esc, ctn_len;\n    yyjson_mut_val *ctn, *key, *pre = NULL;\n    yyjson_mut_val *sep_ctn = NULL, *sep_key = NULL, *sep_val = NULL;\n    yyjson_type ctn_type;\n    bool idx_is_last = false;\n    \n    /* skip exist parent nodes */\n    while (true) {\n        token = ptr_next_token(&ptr, end, &token_len, &esc);\n        if (unlikely(!token)) return_err_syntax(false, ptr - hdr);\n        ctn = val;\n        ctn_type = unsafe_yyjson_get_type(ctn);\n        if (ctn_type == YYJSON_TYPE_OBJ) {\n            val = ptr_mut_obj_get(ctn, token, token_len, esc, &pre);\n        } else if (ctn_type == YYJSON_TYPE_ARR) {\n            val = ptr_mut_arr_get(ctn, token, token_len, esc, &pre,\n                                  &idx_is_last);\n        } else return_err_resolve(false, token - hdr);\n        if (!val) break;\n        if (ptr == end) break; /* is last token */\n    }\n    \n    /* create parent nodes if not exist */\n    if (unlikely(ptr != end)) { /* not last token */\n        if (!create_parent) return_err_resolve(false, token - hdr);\n        \n        /* add value at last index if container is array */\n        if (ctn_type == YYJSON_TYPE_ARR) {\n            if (!idx_is_last || !insert_new) {\n                return_err_resolve(false, token - hdr);\n            }\n            val = yyjson_mut_obj(doc);\n            if (!val) return_err_alloc(false);\n            \n            /* delay attaching until all operations are completed */\n            sep_ctn = ctn;\n            sep_key = NULL;\n            sep_val = val;\n            \n            /* move to next token */\n            ctn = val;\n            val = NULL;\n            ctn_type = YYJSON_TYPE_OBJ;\n            token = ptr_next_token(&ptr, end, &token_len, &esc);\n            if (unlikely(!token)) return_err_resolve(false, token - hdr);\n        }\n        \n        /* container is object, create parent nodes */\n        while (ptr != end) { /* not last token */\n            key = ptr_new_key(token, token_len, esc, doc);\n            if (!key) return_err_alloc(false);\n            val = yyjson_mut_obj(doc);\n            if (!val) return_err_alloc(false);\n            \n            /* delay attaching until all operations are completed */\n            if (!sep_ctn) {\n                sep_ctn = ctn;\n                sep_key = key;\n                sep_val = val;\n            } else {\n                yyjson_mut_obj_add(ctn, key, val);\n            }\n            \n            /* move to next token */\n            ctn = val;\n            val = NULL;\n            token = ptr_next_token(&ptr, end, &token_len, &esc);\n            if (unlikely(!token)) return_err_syntax(false, ptr - hdr);\n        }\n    }\n    \n    /* JSON pointer is resolved, insert or replace target value */\n    ctn_len = unsafe_yyjson_get_len(ctn);\n    if (ctn_type == YYJSON_TYPE_OBJ) {\n        if (ctx) ctx->ctn = ctn;\n        if (!val || insert_new) {\n            /* insert new key-value pair */\n            key = ptr_new_key(token, token_len, esc, doc);\n            if (unlikely(!key)) return_err_alloc(false);\n            if (ctx) ctx->pre = ctn_len ? (yyjson_mut_val *)ctn->uni.ptr : key;\n            unsafe_yyjson_mut_obj_add(ctn, key, new_val, ctn_len);\n        } else {\n            /* replace exist value */\n            key = pre->next->next;\n            if (ctx) ctx->pre = pre;\n            if (ctx) ctx->old = val;\n            yyjson_mut_obj_put(ctn, key, new_val);\n        }\n    } else {\n        /* array */\n        if (ctx && (val || idx_is_last)) ctx->ctn = ctn;\n        if (insert_new) {\n            /* append new value */\n            if (val) {\n                pre->next = new_val;\n                new_val->next = val;\n                if (ctx) ctx->pre = pre;\n                unsafe_yyjson_set_len(ctn, ctn_len + 1);\n            } else if (idx_is_last) {\n                if (ctx) ctx->pre = ctn_len ?\n                    (yyjson_mut_val *)ctn->uni.ptr : new_val;\n                yyjson_mut_arr_append(ctn, new_val);\n            } else {\n                return_err_resolve(false, token - hdr);\n            }\n        } else {\n            /* replace exist value */\n            if (!val) return_err_resolve(false, token - hdr);\n            if (ctn_len > 1) {\n                new_val->next = val->next;\n                pre->next = new_val;\n                if (ctn->uni.ptr == val) ctn->uni.ptr = new_val;\n            } else {\n                new_val->next = new_val;\n                ctn->uni.ptr = new_val;\n                pre = new_val;\n            }\n            if (ctx) ctx->pre = pre;\n            if (ctx) ctx->old = val;\n        }\n    }\n    \n    /* all operations are completed, attach the new components to the target */\n    if (unlikely(sep_ctn)) {\n        if (sep_key) yyjson_mut_obj_add(sep_ctn, sep_key, sep_val);\n        else yyjson_mut_arr_append(sep_ctn, sep_val);\n    }\n    return true;\n}\n\nyyjson_mut_val *unsafe_yyjson_mut_ptr_replacex(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err) {\n    \n    yyjson_mut_val *cur_val;\n    yyjson_ptr_ctx cur_ctx;\n    memset(&cur_ctx, 0, sizeof(cur_ctx));\n    if (!ctx) ctx = &cur_ctx;\n    cur_val = unsafe_yyjson_mut_ptr_getx(val, ptr, len, ctx, err);\n    if (!cur_val) return NULL;\n    \n    if (yyjson_mut_is_obj(ctx->ctn)) {\n        yyjson_mut_val *key = ctx->pre->next->next;\n        yyjson_mut_obj_put(ctx->ctn, key, new_val);\n    } else {\n        yyjson_ptr_ctx_replace(ctx, new_val);\n    }\n    ctx->old = cur_val;\n    return cur_val;\n}\n\nyyjson_mut_val *unsafe_yyjson_mut_ptr_removex(yyjson_mut_val *val,\n                                              const char *ptr,\n                                              size_t len,\n                                              yyjson_ptr_ctx *ctx,\n                                              yyjson_ptr_err *err) {\n    yyjson_mut_val *cur_val;\n    yyjson_ptr_ctx cur_ctx;\n    memset(&cur_ctx, 0, sizeof(cur_ctx));\n    if (!ctx) ctx = &cur_ctx;\n    cur_val = unsafe_yyjson_mut_ptr_getx(val, ptr, len, ctx, err);\n    if (cur_val) {\n        if (yyjson_mut_is_obj(ctx->ctn)) {\n            yyjson_mut_val *key = ctx->pre->next->next;\n            yyjson_mut_obj_put(ctx->ctn, key, NULL);\n        } else {\n            yyjson_ptr_ctx_remove(ctx);\n        }\n        ctx->pre = NULL;\n        ctx->old = cur_val;\n    }\n    return cur_val;\n}\n\n/* macros for yyjson_ptr */\n#undef return_err\n#undef return_err_resolve\n#undef return_err_syntax\n#undef return_err_alloc\n\n\n\n/*==============================================================================\n * JSON Patch API (RFC 6902)\n *============================================================================*/\n\n/* JSON Patch operation */\ntypedef enum patch_op {\n    PATCH_OP_ADD,       /* path, value */\n    PATCH_OP_REMOVE,    /* path */\n    PATCH_OP_REPLACE,   /* path, value */\n    PATCH_OP_MOVE,      /* from, path */\n    PATCH_OP_COPY,      /* from, path */\n    PATCH_OP_TEST,      /* path, value */\n    PATCH_OP_NONE       /* invalid */\n} patch_op;\n\nstatic patch_op patch_op_get(yyjson_val *op) {\n    const char *str = op->uni.str;\n    switch (unsafe_yyjson_get_len(op)) {\n        case 3:\n            if (!memcmp(str, \"add\", 3)) return PATCH_OP_ADD;\n            return PATCH_OP_NONE;\n        case 4:\n            if (!memcmp(str, \"move\", 4)) return PATCH_OP_MOVE;\n            if (!memcmp(str, \"copy\", 4)) return PATCH_OP_COPY;\n            if (!memcmp(str, \"test\", 4)) return PATCH_OP_TEST;\n            return PATCH_OP_NONE;\n        case 6:\n            if (!memcmp(str, \"remove\", 6)) return PATCH_OP_REMOVE;\n            return PATCH_OP_NONE;\n        case 7:\n            if (!memcmp(str, \"replace\", 7)) return PATCH_OP_REPLACE;\n            return PATCH_OP_NONE;\n        default:\n            return PATCH_OP_NONE;\n    }\n}\n\n/* macros for yyjson_patch */\n#define return_err(_code, _msg) do { \\\n    if (err->ptr.code == YYJSON_PTR_ERR_MEMORY_ALLOCATION) { \\\n        err->code = YYJSON_PATCH_ERROR_MEMORY_ALLOCATION; \\\n        err->msg = _msg; \\\n        memset(&err->ptr, 0, sizeof(yyjson_ptr_err)); \\\n    } else { \\\n        err->code = YYJSON_PATCH_ERROR_##_code; \\\n        err->msg = _msg; \\\n        err->idx = iter.idx ? iter.idx - 1 : 0; \\\n    } \\\n    return NULL; \\\n} while (false)\n\n#define return_err_copy() \\\n    return_err(MEMORY_ALLOCATION, \"failed to copy value\")\n#define return_err_key(_key) \\\n    return_err(MISSING_KEY, \"missing key \" _key)\n#define return_err_val(_key) \\\n    return_err(INVALID_MEMBER, \"invalid member \" _key)\n\n#define ptr_get(_ptr) yyjson_mut_ptr_getx( \\\n    root, _ptr->uni.str, _ptr##_len, NULL, &err->ptr)\n#define ptr_add(_ptr, _val) yyjson_mut_ptr_addx( \\\n    root, _ptr->uni.str, _ptr##_len, _val, doc, false, NULL, &err->ptr)\n#define ptr_remove(_ptr) yyjson_mut_ptr_removex( \\\n    root, _ptr->uni.str, _ptr##_len, NULL, &err->ptr)\n#define ptr_replace(_ptr, _val)yyjson_mut_ptr_replacex( \\\n    root, _ptr->uni.str, _ptr##_len, _val, NULL, &err->ptr)\n    \nyyjson_mut_val *yyjson_patch(yyjson_mut_doc *doc,\n                             yyjson_val *orig,\n                             yyjson_val *patch,\n                             yyjson_patch_err *err) {\n\n    yyjson_mut_val *root;\n    yyjson_val *obj;\n    yyjson_arr_iter iter;\n    yyjson_patch_err err_tmp;\n    if (!err) err = &err_tmp;\n    memset(err, 0, sizeof(*err));\n    memset(&iter, 0, sizeof(iter));\n    \n    if (unlikely(!doc || !orig || !patch)) {\n        return_err(INVALID_PARAMETER, \"input parameter is NULL\");\n    }\n    if (unlikely(!yyjson_is_arr(patch))) {\n        return_err(INVALID_PARAMETER, \"input patch is not array\");\n    }\n    root = yyjson_val_mut_copy(doc, orig);\n    if (unlikely(!root)) return_err_copy();\n    \n    /* iterate through the patch array */\n    yyjson_arr_iter_init(patch, &iter);\n    while ((obj = yyjson_arr_iter_next(&iter))) {\n        patch_op op_enum;\n        yyjson_val *op, *path, *from = NULL, *value;\n        yyjson_mut_val *val = NULL, *test;\n        usize path_len, from_len = 0;\n        if (unlikely(!unsafe_yyjson_is_obj(obj))) {\n            return_err(INVALID_OPERATION, \"JSON patch operation is not object\");\n        }\n        \n        /* get required member: op */\n        op = yyjson_obj_get(obj, \"op\");\n        if (unlikely(!op)) return_err_key(\"`op`\");\n        if (unlikely(!yyjson_is_str(op))) return_err_val(\"`op`\");\n        op_enum = patch_op_get(op);\n        \n        /* get required member: path */\n        path = yyjson_obj_get(obj, \"path\");\n        if (unlikely(!path)) return_err_key(\"`path`\");\n        if (unlikely(!yyjson_is_str(path))) return_err_val(\"`path`\");\n        path_len = unsafe_yyjson_get_len(path);\n        \n        /* get required member: value, from */\n        switch (op_enum) {\n            case PATCH_OP_ADD: case PATCH_OP_REPLACE: case PATCH_OP_TEST:\n                value = yyjson_obj_get(obj, \"value\");\n                if (unlikely(!value)) return_err_key(\"`value`\");\n                val = yyjson_val_mut_copy(doc, value);\n                if (unlikely(!val)) return_err_copy();\n                break;\n            case PATCH_OP_MOVE: case PATCH_OP_COPY:\n                from = yyjson_obj_get(obj, \"from\");\n                if (unlikely(!from)) return_err_key(\"`from`\");\n                if (unlikely(!yyjson_is_str(from))) return_err_val(\"`from`\");\n                from_len = unsafe_yyjson_get_len(from);\n                break;\n            default:\n                break;\n        }\n        \n        /* perform an operation */\n        switch (op_enum) {\n            case PATCH_OP_ADD: /* add(path, val) */\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_REMOVE: /* remove(path) */\n                if (unlikely(!ptr_remove(path))) {\n                    return_err(POINTER, \"failed to remove `path`\");\n                }\n                break;\n            case PATCH_OP_REPLACE: /* replace(path, val) */\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_replace(path, val))) {\n                    return_err(POINTER, \"failed to replace `path`\");\n                }\n                break;\n            case PATCH_OP_MOVE: /* val = remove(from), add(path, val) */\n                if (unlikely(from_len == 0 && path_len == 0)) break;\n                val = ptr_remove(from);\n                if (unlikely(!val)) {\n                    return_err(POINTER, \"failed to remove `from`\");\n                }\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_COPY: /* val = get(from).copy, add(path, val) */\n                val = ptr_get(from);\n                if (unlikely(!val)) {\n                    return_err(POINTER, \"failed to get `from`\");\n                }\n                if (unlikely(path_len == 0)) { root = val; break; }\n                val = yyjson_mut_val_mut_copy(doc, val);\n                if (unlikely(!val)) return_err_copy();\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_TEST: /* test = get(path), test.eq(val) */\n                test = ptr_get(path);\n                if (unlikely(!test)) {\n                    return_err(POINTER, \"failed to get `path`\");\n                }\n                if (unlikely(!yyjson_mut_equals(val, test))) {\n                    return_err(EQUAL, \"failed to test equal\");\n                }\n                break;\n            default:\n                return_err(INVALID_MEMBER, \"unsupported `op`\");\n        }\n    }\n    return root;\n}\n\nyyjson_mut_val *yyjson_mut_patch(yyjson_mut_doc *doc,\n                                 yyjson_mut_val *orig,\n                                 yyjson_mut_val *patch,\n                                 yyjson_patch_err *err) {\n    yyjson_mut_val *root, *obj;\n    yyjson_mut_arr_iter iter;\n    yyjson_patch_err err_tmp;\n    if (!err) err = &err_tmp;\n    memset(err, 0, sizeof(*err));\n    memset(&iter, 0, sizeof(iter));\n    \n    if (unlikely(!doc || !orig || !patch)) {\n        return_err(INVALID_PARAMETER, \"input parameter is NULL\");\n    }\n    if (unlikely(!yyjson_mut_is_arr(patch))) {\n        return_err(INVALID_PARAMETER, \"input patch is not array\");\n    }\n    root = yyjson_mut_val_mut_copy(doc, orig);\n    if (unlikely(!root)) return_err_copy();\n    \n    /* iterate through the patch array */\n    yyjson_mut_arr_iter_init(patch, &iter);\n    while ((obj = yyjson_mut_arr_iter_next(&iter))) {\n        patch_op op_enum;\n        yyjson_mut_val *op, *path, *from = NULL, *value;\n        yyjson_mut_val *val = NULL, *test;\n        usize path_len, from_len = 0;\n        if (!unsafe_yyjson_is_obj(obj)) {\n            return_err(INVALID_OPERATION, \"JSON patch operation is not object\");\n        }\n        \n        /* get required member: op */\n        op = yyjson_mut_obj_get(obj, \"op\");\n        if (unlikely(!op)) return_err_key(\"`op`\");\n        if (unlikely(!yyjson_mut_is_str(op))) return_err_val(\"`op`\");\n        op_enum = patch_op_get((yyjson_val *)(void *)op);\n        \n        /* get required member: path */\n        path = yyjson_mut_obj_get(obj, \"path\");\n        if (unlikely(!path)) return_err_key(\"`path`\");\n        if (unlikely(!yyjson_mut_is_str(path))) return_err_val(\"`path`\");\n        path_len = unsafe_yyjson_get_len(path);\n        \n        /* get required member: value, from */\n        switch (op_enum) {\n            case PATCH_OP_ADD: case PATCH_OP_REPLACE: case PATCH_OP_TEST:\n                value = yyjson_mut_obj_get(obj, \"value\");\n                if (unlikely(!value)) return_err_key(\"`value`\");\n                val = yyjson_mut_val_mut_copy(doc, value);\n                if (unlikely(!val)) return_err_copy();\n                break;\n            case PATCH_OP_MOVE: case PATCH_OP_COPY:\n                from = yyjson_mut_obj_get(obj, \"from\");\n                if (unlikely(!from)) return_err_key(\"`from`\");\n                if (unlikely(!yyjson_mut_is_str(from))) {\n                    return_err_val(\"`from`\");\n                }\n                from_len = unsafe_yyjson_get_len(from);\n                break;\n            default:\n                break;\n        }\n        \n        /* perform an operation */\n        switch (op_enum) {\n            case PATCH_OP_ADD: /* add(path, val) */\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_REMOVE: /* remove(path) */\n                if (unlikely(!ptr_remove(path))) {\n                    return_err(POINTER, \"failed to remove `path`\");\n                }\n                break;\n            case PATCH_OP_REPLACE: /* replace(path, val) */\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_replace(path, val))) {\n                    return_err(POINTER, \"failed to replace `path`\");\n                }\n                break;\n            case PATCH_OP_MOVE: /* val = remove(from), add(path, val) */\n                if (unlikely(from_len == 0 && path_len == 0)) break;\n                val = ptr_remove(from);\n                if (unlikely(!val)) {\n                    return_err(POINTER, \"failed to remove `from`\");\n                }\n                if (unlikely(path_len == 0)) { root = val; break; }\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_COPY: /* val = get(from).copy, add(path, val) */\n                val = ptr_get(from);\n                if (unlikely(!val)) {\n                    return_err(POINTER, \"failed to get `from`\");\n                }\n                if (unlikely(path_len == 0)) { root = val; break; }\n                val = yyjson_mut_val_mut_copy(doc, val);\n                if (unlikely(!val)) return_err_copy();\n                if (unlikely(!ptr_add(path, val))) {\n                    return_err(POINTER, \"failed to add `path`\");\n                }\n                break;\n            case PATCH_OP_TEST: /* test = get(path), test.eq(val) */\n                test = ptr_get(path);\n                if (unlikely(!test)) {\n                    return_err(POINTER, \"failed to get `path`\");\n                }\n                if (unlikely(!yyjson_mut_equals(val, test))) {\n                    return_err(EQUAL, \"failed to test equal\");\n                }\n                break;\n            default:\n                return_err(INVALID_MEMBER, \"unsupported `op`\");\n        }\n    }\n    return root;\n}\n\n/* macros for yyjson_patch */\n#undef return_err\n#undef return_err_copy\n#undef return_err_key\n#undef return_err_val\n#undef ptr_get\n#undef ptr_add\n#undef ptr_remove\n#undef ptr_replace\n\n\n\n/*==============================================================================\n * JSON Merge-Patch API (RFC 7386)\n *============================================================================*/\n\nyyjson_mut_val *yyjson_merge_patch(yyjson_mut_doc *doc,\n                                   yyjson_val *orig,\n                                   yyjson_val *patch) {\n    usize idx, max;\n    yyjson_val *key, *orig_val, *patch_val, local_orig;\n    yyjson_mut_val *builder, *mut_key, *mut_val, *merged_val;\n    \n    if (unlikely(!yyjson_is_obj(patch))) {\n        return yyjson_val_mut_copy(doc, patch);\n    }\n    \n    builder = yyjson_mut_obj(doc);\n    if (unlikely(!builder)) return NULL;\n    \n    if (!yyjson_is_obj(orig)) {\n        orig = &local_orig;\n        orig->tag = builder->tag;\n        orig->uni = builder->uni;\n    }\n    \n    /* If orig is contributing, copy any items not modified by the patch */\n    if (orig != &local_orig)\n    {\n        yyjson_obj_foreach(orig, idx, max, key, orig_val) {\n            patch_val = yyjson_obj_getn(patch,\n                                        unsafe_yyjson_get_str(key),\n                                        unsafe_yyjson_get_len(key));\n            if (!patch_val) {\n                mut_key = yyjson_val_mut_copy(doc, key);\n                mut_val = yyjson_val_mut_copy(doc, orig_val);\n                if (!yyjson_mut_obj_add(builder, mut_key, mut_val)) return NULL;\n            }\n        }\n    }\n\n    /* Merge items modified by the patch. */\n    yyjson_obj_foreach(patch, idx, max, key, patch_val) {\n        /* null indicates the field is removed. */\n        if (unsafe_yyjson_is_null(patch_val)) {\n            continue;\n        }\n        mut_key = yyjson_val_mut_copy(doc, key);\n        orig_val = yyjson_obj_getn(orig,\n                                   unsafe_yyjson_get_str(key),\n                                   unsafe_yyjson_get_len(key));\n        merged_val = yyjson_merge_patch(doc, orig_val, patch_val);\n        if (!yyjson_mut_obj_add(builder, mut_key, merged_val)) return NULL;\n    }\n    \n    return builder;\n}\n\nyyjson_mut_val *yyjson_mut_merge_patch(yyjson_mut_doc *doc,\n                                       yyjson_mut_val *orig,\n                                       yyjson_mut_val *patch) {\n    usize idx, max;\n    yyjson_mut_val *key, *orig_val, *patch_val, local_orig;\n    yyjson_mut_val *builder, *mut_key, *mut_val, *merged_val;\n    \n    if (unlikely(!yyjson_mut_is_obj(patch))) {\n        return yyjson_mut_val_mut_copy(doc, patch);\n    }\n    \n    builder = yyjson_mut_obj(doc);\n    if (unlikely(!builder)) return NULL;\n    \n    if (!yyjson_mut_is_obj(orig)) {\n        orig = &local_orig;\n        orig->tag = builder->tag;\n        orig->uni = builder->uni;\n    }\n    \n    /* If orig is contributing, copy any items not modified by the patch */\n    if (orig != &local_orig)\n    {\n        yyjson_mut_obj_foreach(orig, idx, max, key, orig_val) {\n            patch_val = yyjson_mut_obj_getn(patch,\n                                            unsafe_yyjson_get_str(key),\n                                            unsafe_yyjson_get_len(key));\n            if (!patch_val) {\n                mut_key = yyjson_mut_val_mut_copy(doc, key);\n                mut_val = yyjson_mut_val_mut_copy(doc, orig_val);\n                if (!yyjson_mut_obj_add(builder, mut_key, mut_val)) return NULL;\n            }\n        }\n    }\n\n    /* Merge items modified by the patch. */\n    yyjson_mut_obj_foreach(patch, idx, max, key, patch_val) {\n        /* null indicates the field is removed. */\n        if (unsafe_yyjson_is_null(patch_val)) {\n            continue;\n        }\n        mut_key = yyjson_mut_val_mut_copy(doc, key);\n        orig_val = yyjson_mut_obj_getn(orig,\n                                       unsafe_yyjson_get_str(key),\n                                       unsafe_yyjson_get_len(key));\n        merged_val = yyjson_mut_merge_patch(doc, orig_val, patch_val);\n        if (!yyjson_mut_obj_add(builder, mut_key, merged_val)) return NULL;\n    }\n    \n    return builder;\n}\n\n#endif /* YYJSON_DISABLE_UTILS */\n\n\n\n/*==============================================================================\n * Power10 Lookup Table\n * These data are used by the floating-point number reader and writer.\n *============================================================================*/\n\n#if (!YYJSON_DISABLE_READER || !YYJSON_DISABLE_WRITER) && \\\n    (!YYJSON_DISABLE_FAST_FP_CONV)\n\n/** Minimum decimal exponent in pow10_sig_table. */\n#define POW10_SIG_TABLE_MIN_EXP -343\n\n/** Maximum decimal exponent in pow10_sig_table. */\n#define POW10_SIG_TABLE_MAX_EXP 324\n\n/** Minimum exact decimal exponent in pow10_sig_table */\n#define POW10_SIG_TABLE_MIN_EXACT_EXP 0\n\n/** Maximum exact decimal exponent in pow10_sig_table */\n#define POW10_SIG_TABLE_MAX_EXACT_EXP 55\n\n/** Normalized significant 128 bits of pow10, no rounded up (size: 10.4KB).\n    This lookup table is used by both the double number reader and writer.\n    (generate with misc/make_tables.c) */\nstatic const u64 pow10_sig_table[] = {\n    U64(0xBF29DCAB, 0xA82FDEAE), U64(0x7432EE87, 0x3880FC33), /* ~= 10^-343 */\n    U64(0xEEF453D6, 0x923BD65A), U64(0x113FAA29, 0x06A13B3F), /* ~= 10^-342 */\n    U64(0x9558B466, 0x1B6565F8), U64(0x4AC7CA59, 0xA424C507), /* ~= 10^-341 */\n    U64(0xBAAEE17F, 0xA23EBF76), U64(0x5D79BCF0, 0x0D2DF649), /* ~= 10^-340 */\n    U64(0xE95A99DF, 0x8ACE6F53), U64(0xF4D82C2C, 0x107973DC), /* ~= 10^-339 */\n    U64(0x91D8A02B, 0xB6C10594), U64(0x79071B9B, 0x8A4BE869), /* ~= 10^-338 */\n    U64(0xB64EC836, 0xA47146F9), U64(0x9748E282, 0x6CDEE284), /* ~= 10^-337 */\n    U64(0xE3E27A44, 0x4D8D98B7), U64(0xFD1B1B23, 0x08169B25), /* ~= 10^-336 */\n    U64(0x8E6D8C6A, 0xB0787F72), U64(0xFE30F0F5, 0xE50E20F7), /* ~= 10^-335 */\n    U64(0xB208EF85, 0x5C969F4F), U64(0xBDBD2D33, 0x5E51A935), /* ~= 10^-334 */\n    U64(0xDE8B2B66, 0xB3BC4723), U64(0xAD2C7880, 0x35E61382), /* ~= 10^-333 */\n    U64(0x8B16FB20, 0x3055AC76), U64(0x4C3BCB50, 0x21AFCC31), /* ~= 10^-332 */\n    U64(0xADDCB9E8, 0x3C6B1793), U64(0xDF4ABE24, 0x2A1BBF3D), /* ~= 10^-331 */\n    U64(0xD953E862, 0x4B85DD78), U64(0xD71D6DAD, 0x34A2AF0D), /* ~= 10^-330 */\n    U64(0x87D4713D, 0x6F33AA6B), U64(0x8672648C, 0x40E5AD68), /* ~= 10^-329 */\n    U64(0xA9C98D8C, 0xCB009506), U64(0x680EFDAF, 0x511F18C2), /* ~= 10^-328 */\n    U64(0xD43BF0EF, 0xFDC0BA48), U64(0x0212BD1B, 0x2566DEF2), /* ~= 10^-327 */\n    U64(0x84A57695, 0xFE98746D), U64(0x014BB630, 0xF7604B57), /* ~= 10^-326 */\n    U64(0xA5CED43B, 0x7E3E9188), U64(0x419EA3BD, 0x35385E2D), /* ~= 10^-325 */\n    U64(0xCF42894A, 0x5DCE35EA), U64(0x52064CAC, 0x828675B9), /* ~= 10^-324 */\n    U64(0x818995CE, 0x7AA0E1B2), U64(0x7343EFEB, 0xD1940993), /* ~= 10^-323 */\n    U64(0xA1EBFB42, 0x19491A1F), U64(0x1014EBE6, 0xC5F90BF8), /* ~= 10^-322 */\n    U64(0xCA66FA12, 0x9F9B60A6), U64(0xD41A26E0, 0x77774EF6), /* ~= 10^-321 */\n    U64(0xFD00B897, 0x478238D0), U64(0x8920B098, 0x955522B4), /* ~= 10^-320 */\n    U64(0x9E20735E, 0x8CB16382), U64(0x55B46E5F, 0x5D5535B0), /* ~= 10^-319 */\n    U64(0xC5A89036, 0x2FDDBC62), U64(0xEB2189F7, 0x34AA831D), /* ~= 10^-318 */\n    U64(0xF712B443, 0xBBD52B7B), U64(0xA5E9EC75, 0x01D523E4), /* ~= 10^-317 */\n    U64(0x9A6BB0AA, 0x55653B2D), U64(0x47B233C9, 0x2125366E), /* ~= 10^-316 */\n    U64(0xC1069CD4, 0xEABE89F8), U64(0x999EC0BB, 0x696E840A), /* ~= 10^-315 */\n    U64(0xF148440A, 0x256E2C76), U64(0xC00670EA, 0x43CA250D), /* ~= 10^-314 */\n    U64(0x96CD2A86, 0x5764DBCA), U64(0x38040692, 0x6A5E5728), /* ~= 10^-313 */\n    U64(0xBC807527, 0xED3E12BC), U64(0xC6050837, 0x04F5ECF2), /* ~= 10^-312 */\n    U64(0xEBA09271, 0xE88D976B), U64(0xF7864A44, 0xC633682E), /* ~= 10^-311 */\n    U64(0x93445B87, 0x31587EA3), U64(0x7AB3EE6A, 0xFBE0211D), /* ~= 10^-310 */\n    U64(0xB8157268, 0xFDAE9E4C), U64(0x5960EA05, 0xBAD82964), /* ~= 10^-309 */\n    U64(0xE61ACF03, 0x3D1A45DF), U64(0x6FB92487, 0x298E33BD), /* ~= 10^-308 */\n    U64(0x8FD0C162, 0x06306BAB), U64(0xA5D3B6D4, 0x79F8E056), /* ~= 10^-307 */\n    U64(0xB3C4F1BA, 0x87BC8696), U64(0x8F48A489, 0x9877186C), /* ~= 10^-306 */\n    U64(0xE0B62E29, 0x29ABA83C), U64(0x331ACDAB, 0xFE94DE87), /* ~= 10^-305 */\n    U64(0x8C71DCD9, 0xBA0B4925), U64(0x9FF0C08B, 0x7F1D0B14), /* ~= 10^-304 */\n    U64(0xAF8E5410, 0x288E1B6F), U64(0x07ECF0AE, 0x5EE44DD9), /* ~= 10^-303 */\n    U64(0xDB71E914, 0x32B1A24A), U64(0xC9E82CD9, 0xF69D6150), /* ~= 10^-302 */\n    U64(0x892731AC, 0x9FAF056E), U64(0xBE311C08, 0x3A225CD2), /* ~= 10^-301 */\n    U64(0xAB70FE17, 0xC79AC6CA), U64(0x6DBD630A, 0x48AAF406), /* ~= 10^-300 */\n    U64(0xD64D3D9D, 0xB981787D), U64(0x092CBBCC, 0xDAD5B108), /* ~= 10^-299 */\n    U64(0x85F04682, 0x93F0EB4E), U64(0x25BBF560, 0x08C58EA5), /* ~= 10^-298 */\n    U64(0xA76C5823, 0x38ED2621), U64(0xAF2AF2B8, 0x0AF6F24E), /* ~= 10^-297 */\n    U64(0xD1476E2C, 0x07286FAA), U64(0x1AF5AF66, 0x0DB4AEE1), /* ~= 10^-296 */\n    U64(0x82CCA4DB, 0x847945CA), U64(0x50D98D9F, 0xC890ED4D), /* ~= 10^-295 */\n    U64(0xA37FCE12, 0x6597973C), U64(0xE50FF107, 0xBAB528A0), /* ~= 10^-294 */\n    U64(0xCC5FC196, 0xFEFD7D0C), U64(0x1E53ED49, 0xA96272C8), /* ~= 10^-293 */\n    U64(0xFF77B1FC, 0xBEBCDC4F), U64(0x25E8E89C, 0x13BB0F7A), /* ~= 10^-292 */\n    U64(0x9FAACF3D, 0xF73609B1), U64(0x77B19161, 0x8C54E9AC), /* ~= 10^-291 */\n    U64(0xC795830D, 0x75038C1D), U64(0xD59DF5B9, 0xEF6A2417), /* ~= 10^-290 */\n    U64(0xF97AE3D0, 0xD2446F25), U64(0x4B057328, 0x6B44AD1D), /* ~= 10^-289 */\n    U64(0x9BECCE62, 0x836AC577), U64(0x4EE367F9, 0x430AEC32), /* ~= 10^-288 */\n    U64(0xC2E801FB, 0x244576D5), U64(0x229C41F7, 0x93CDA73F), /* ~= 10^-287 */\n    U64(0xF3A20279, 0xED56D48A), U64(0x6B435275, 0x78C1110F), /* ~= 10^-286 */\n    U64(0x9845418C, 0x345644D6), U64(0x830A1389, 0x6B78AAA9), /* ~= 10^-285 */\n    U64(0xBE5691EF, 0x416BD60C), U64(0x23CC986B, 0xC656D553), /* ~= 10^-284 */\n    U64(0xEDEC366B, 0x11C6CB8F), U64(0x2CBFBE86, 0xB7EC8AA8), /* ~= 10^-283 */\n    U64(0x94B3A202, 0xEB1C3F39), U64(0x7BF7D714, 0x32F3D6A9), /* ~= 10^-282 */\n    U64(0xB9E08A83, 0xA5E34F07), U64(0xDAF5CCD9, 0x3FB0CC53), /* ~= 10^-281 */\n    U64(0xE858AD24, 0x8F5C22C9), U64(0xD1B3400F, 0x8F9CFF68), /* ~= 10^-280 */\n    U64(0x91376C36, 0xD99995BE), U64(0x23100809, 0xB9C21FA1), /* ~= 10^-279 */\n    U64(0xB5854744, 0x8FFFFB2D), U64(0xABD40A0C, 0x2832A78A), /* ~= 10^-278 */\n    U64(0xE2E69915, 0xB3FFF9F9), U64(0x16C90C8F, 0x323F516C), /* ~= 10^-277 */\n    U64(0x8DD01FAD, 0x907FFC3B), U64(0xAE3DA7D9, 0x7F6792E3), /* ~= 10^-276 */\n    U64(0xB1442798, 0xF49FFB4A), U64(0x99CD11CF, 0xDF41779C), /* ~= 10^-275 */\n    U64(0xDD95317F, 0x31C7FA1D), U64(0x40405643, 0xD711D583), /* ~= 10^-274 */\n    U64(0x8A7D3EEF, 0x7F1CFC52), U64(0x482835EA, 0x666B2572), /* ~= 10^-273 */\n    U64(0xAD1C8EAB, 0x5EE43B66), U64(0xDA324365, 0x0005EECF), /* ~= 10^-272 */\n    U64(0xD863B256, 0x369D4A40), U64(0x90BED43E, 0x40076A82), /* ~= 10^-271 */\n    U64(0x873E4F75, 0xE2224E68), U64(0x5A7744A6, 0xE804A291), /* ~= 10^-270 */\n    U64(0xA90DE353, 0x5AAAE202), U64(0x711515D0, 0xA205CB36), /* ~= 10^-269 */\n    U64(0xD3515C28, 0x31559A83), U64(0x0D5A5B44, 0xCA873E03), /* ~= 10^-268 */\n    U64(0x8412D999, 0x1ED58091), U64(0xE858790A, 0xFE9486C2), /* ~= 10^-267 */\n    U64(0xA5178FFF, 0x668AE0B6), U64(0x626E974D, 0xBE39A872), /* ~= 10^-266 */\n    U64(0xCE5D73FF, 0x402D98E3), U64(0xFB0A3D21, 0x2DC8128F), /* ~= 10^-265 */\n    U64(0x80FA687F, 0x881C7F8E), U64(0x7CE66634, 0xBC9D0B99), /* ~= 10^-264 */\n    U64(0xA139029F, 0x6A239F72), U64(0x1C1FFFC1, 0xEBC44E80), /* ~= 10^-263 */\n    U64(0xC9874347, 0x44AC874E), U64(0xA327FFB2, 0x66B56220), /* ~= 10^-262 */\n    U64(0xFBE91419, 0x15D7A922), U64(0x4BF1FF9F, 0x0062BAA8), /* ~= 10^-261 */\n    U64(0x9D71AC8F, 0xADA6C9B5), U64(0x6F773FC3, 0x603DB4A9), /* ~= 10^-260 */\n    U64(0xC4CE17B3, 0x99107C22), U64(0xCB550FB4, 0x384D21D3), /* ~= 10^-259 */\n    U64(0xF6019DA0, 0x7F549B2B), U64(0x7E2A53A1, 0x46606A48), /* ~= 10^-258 */\n    U64(0x99C10284, 0x4F94E0FB), U64(0x2EDA7444, 0xCBFC426D), /* ~= 10^-257 */\n    U64(0xC0314325, 0x637A1939), U64(0xFA911155, 0xFEFB5308), /* ~= 10^-256 */\n    U64(0xF03D93EE, 0xBC589F88), U64(0x793555AB, 0x7EBA27CA), /* ~= 10^-255 */\n    U64(0x96267C75, 0x35B763B5), U64(0x4BC1558B, 0x2F3458DE), /* ~= 10^-254 */\n    U64(0xBBB01B92, 0x83253CA2), U64(0x9EB1AAED, 0xFB016F16), /* ~= 10^-253 */\n    U64(0xEA9C2277, 0x23EE8BCB), U64(0x465E15A9, 0x79C1CADC), /* ~= 10^-252 */\n    U64(0x92A1958A, 0x7675175F), U64(0x0BFACD89, 0xEC191EC9), /* ~= 10^-251 */\n    U64(0xB749FAED, 0x14125D36), U64(0xCEF980EC, 0x671F667B), /* ~= 10^-250 */\n    U64(0xE51C79A8, 0x5916F484), U64(0x82B7E127, 0x80E7401A), /* ~= 10^-249 */\n    U64(0x8F31CC09, 0x37AE58D2), U64(0xD1B2ECB8, 0xB0908810), /* ~= 10^-248 */\n    U64(0xB2FE3F0B, 0x8599EF07), U64(0x861FA7E6, 0xDCB4AA15), /* ~= 10^-247 */\n    U64(0xDFBDCECE, 0x67006AC9), U64(0x67A791E0, 0x93E1D49A), /* ~= 10^-246 */\n    U64(0x8BD6A141, 0x006042BD), U64(0xE0C8BB2C, 0x5C6D24E0), /* ~= 10^-245 */\n    U64(0xAECC4991, 0x4078536D), U64(0x58FAE9F7, 0x73886E18), /* ~= 10^-244 */\n    U64(0xDA7F5BF5, 0x90966848), U64(0xAF39A475, 0x506A899E), /* ~= 10^-243 */\n    U64(0x888F9979, 0x7A5E012D), U64(0x6D8406C9, 0x52429603), /* ~= 10^-242 */\n    U64(0xAAB37FD7, 0xD8F58178), U64(0xC8E5087B, 0xA6D33B83), /* ~= 10^-241 */\n    U64(0xD5605FCD, 0xCF32E1D6), U64(0xFB1E4A9A, 0x90880A64), /* ~= 10^-240 */\n    U64(0x855C3BE0, 0xA17FCD26), U64(0x5CF2EEA0, 0x9A55067F), /* ~= 10^-239 */\n    U64(0xA6B34AD8, 0xC9DFC06F), U64(0xF42FAA48, 0xC0EA481E), /* ~= 10^-238 */\n    U64(0xD0601D8E, 0xFC57B08B), U64(0xF13B94DA, 0xF124DA26), /* ~= 10^-237 */\n    U64(0x823C1279, 0x5DB6CE57), U64(0x76C53D08, 0xD6B70858), /* ~= 10^-236 */\n    U64(0xA2CB1717, 0xB52481ED), U64(0x54768C4B, 0x0C64CA6E), /* ~= 10^-235 */\n    U64(0xCB7DDCDD, 0xA26DA268), U64(0xA9942F5D, 0xCF7DFD09), /* ~= 10^-234 */\n    U64(0xFE5D5415, 0x0B090B02), U64(0xD3F93B35, 0x435D7C4C), /* ~= 10^-233 */\n    U64(0x9EFA548D, 0x26E5A6E1), U64(0xC47BC501, 0x4A1A6DAF), /* ~= 10^-232 */\n    U64(0xC6B8E9B0, 0x709F109A), U64(0x359AB641, 0x9CA1091B), /* ~= 10^-231 */\n    U64(0xF867241C, 0x8CC6D4C0), U64(0xC30163D2, 0x03C94B62), /* ~= 10^-230 */\n    U64(0x9B407691, 0xD7FC44F8), U64(0x79E0DE63, 0x425DCF1D), /* ~= 10^-229 */\n    U64(0xC2109436, 0x4DFB5636), U64(0x985915FC, 0x12F542E4), /* ~= 10^-228 */\n    U64(0xF294B943, 0xE17A2BC4), U64(0x3E6F5B7B, 0x17B2939D), /* ~= 10^-227 */\n    U64(0x979CF3CA, 0x6CEC5B5A), U64(0xA705992C, 0xEECF9C42), /* ~= 10^-226 */\n    U64(0xBD8430BD, 0x08277231), U64(0x50C6FF78, 0x2A838353), /* ~= 10^-225 */\n    U64(0xECE53CEC, 0x4A314EBD), U64(0xA4F8BF56, 0x35246428), /* ~= 10^-224 */\n    U64(0x940F4613, 0xAE5ED136), U64(0x871B7795, 0xE136BE99), /* ~= 10^-223 */\n    U64(0xB9131798, 0x99F68584), U64(0x28E2557B, 0x59846E3F), /* ~= 10^-222 */\n    U64(0xE757DD7E, 0xC07426E5), U64(0x331AEADA, 0x2FE589CF), /* ~= 10^-221 */\n    U64(0x9096EA6F, 0x3848984F), U64(0x3FF0D2C8, 0x5DEF7621), /* ~= 10^-220 */\n    U64(0xB4BCA50B, 0x065ABE63), U64(0x0FED077A, 0x756B53A9), /* ~= 10^-219 */\n    U64(0xE1EBCE4D, 0xC7F16DFB), U64(0xD3E84959, 0x12C62894), /* ~= 10^-218 */\n    U64(0x8D3360F0, 0x9CF6E4BD), U64(0x64712DD7, 0xABBBD95C), /* ~= 10^-217 */\n    U64(0xB080392C, 0xC4349DEC), U64(0xBD8D794D, 0x96AACFB3), /* ~= 10^-216 */\n    U64(0xDCA04777, 0xF541C567), U64(0xECF0D7A0, 0xFC5583A0), /* ~= 10^-215 */\n    U64(0x89E42CAA, 0xF9491B60), U64(0xF41686C4, 0x9DB57244), /* ~= 10^-214 */\n    U64(0xAC5D37D5, 0xB79B6239), U64(0x311C2875, 0xC522CED5), /* ~= 10^-213 */\n    U64(0xD77485CB, 0x25823AC7), U64(0x7D633293, 0x366B828B), /* ~= 10^-212 */\n    U64(0x86A8D39E, 0xF77164BC), U64(0xAE5DFF9C, 0x02033197), /* ~= 10^-211 */\n    U64(0xA8530886, 0xB54DBDEB), U64(0xD9F57F83, 0x0283FDFC), /* ~= 10^-210 */\n    U64(0xD267CAA8, 0x62A12D66), U64(0xD072DF63, 0xC324FD7B), /* ~= 10^-209 */\n    U64(0x8380DEA9, 0x3DA4BC60), U64(0x4247CB9E, 0x59F71E6D), /* ~= 10^-208 */\n    U64(0xA4611653, 0x8D0DEB78), U64(0x52D9BE85, 0xF074E608), /* ~= 10^-207 */\n    U64(0xCD795BE8, 0x70516656), U64(0x67902E27, 0x6C921F8B), /* ~= 10^-206 */\n    U64(0x806BD971, 0x4632DFF6), U64(0x00BA1CD8, 0xA3DB53B6), /* ~= 10^-205 */\n    U64(0xA086CFCD, 0x97BF97F3), U64(0x80E8A40E, 0xCCD228A4), /* ~= 10^-204 */\n    U64(0xC8A883C0, 0xFDAF7DF0), U64(0x6122CD12, 0x8006B2CD), /* ~= 10^-203 */\n    U64(0xFAD2A4B1, 0x3D1B5D6C), U64(0x796B8057, 0x20085F81), /* ~= 10^-202 */\n    U64(0x9CC3A6EE, 0xC6311A63), U64(0xCBE33036, 0x74053BB0), /* ~= 10^-201 */\n    U64(0xC3F490AA, 0x77BD60FC), U64(0xBEDBFC44, 0x11068A9C), /* ~= 10^-200 */\n    U64(0xF4F1B4D5, 0x15ACB93B), U64(0xEE92FB55, 0x15482D44), /* ~= 10^-199 */\n    U64(0x99171105, 0x2D8BF3C5), U64(0x751BDD15, 0x2D4D1C4A), /* ~= 10^-198 */\n    U64(0xBF5CD546, 0x78EEF0B6), U64(0xD262D45A, 0x78A0635D), /* ~= 10^-197 */\n    U64(0xEF340A98, 0x172AACE4), U64(0x86FB8971, 0x16C87C34), /* ~= 10^-196 */\n    U64(0x9580869F, 0x0E7AAC0E), U64(0xD45D35E6, 0xAE3D4DA0), /* ~= 10^-195 */\n    U64(0xBAE0A846, 0xD2195712), U64(0x89748360, 0x59CCA109), /* ~= 10^-194 */\n    U64(0xE998D258, 0x869FACD7), U64(0x2BD1A438, 0x703FC94B), /* ~= 10^-193 */\n    U64(0x91FF8377, 0x5423CC06), U64(0x7B6306A3, 0x4627DDCF), /* ~= 10^-192 */\n    U64(0xB67F6455, 0x292CBF08), U64(0x1A3BC84C, 0x17B1D542), /* ~= 10^-191 */\n    U64(0xE41F3D6A, 0x7377EECA), U64(0x20CABA5F, 0x1D9E4A93), /* ~= 10^-190 */\n    U64(0x8E938662, 0x882AF53E), U64(0x547EB47B, 0x7282EE9C), /* ~= 10^-189 */\n    U64(0xB23867FB, 0x2A35B28D), U64(0xE99E619A, 0x4F23AA43), /* ~= 10^-188 */\n    U64(0xDEC681F9, 0xF4C31F31), U64(0x6405FA00, 0xE2EC94D4), /* ~= 10^-187 */\n    U64(0x8B3C113C, 0x38F9F37E), U64(0xDE83BC40, 0x8DD3DD04), /* ~= 10^-186 */\n    U64(0xAE0B158B, 0x4738705E), U64(0x9624AB50, 0xB148D445), /* ~= 10^-185 */\n    U64(0xD98DDAEE, 0x19068C76), U64(0x3BADD624, 0xDD9B0957), /* ~= 10^-184 */\n    U64(0x87F8A8D4, 0xCFA417C9), U64(0xE54CA5D7, 0x0A80E5D6), /* ~= 10^-183 */\n    U64(0xA9F6D30A, 0x038D1DBC), U64(0x5E9FCF4C, 0xCD211F4C), /* ~= 10^-182 */\n    U64(0xD47487CC, 0x8470652B), U64(0x7647C320, 0x0069671F), /* ~= 10^-181 */\n    U64(0x84C8D4DF, 0xD2C63F3B), U64(0x29ECD9F4, 0x0041E073), /* ~= 10^-180 */\n    U64(0xA5FB0A17, 0xC777CF09), U64(0xF4681071, 0x00525890), /* ~= 10^-179 */\n    U64(0xCF79CC9D, 0xB955C2CC), U64(0x7182148D, 0x4066EEB4), /* ~= 10^-178 */\n    U64(0x81AC1FE2, 0x93D599BF), U64(0xC6F14CD8, 0x48405530), /* ~= 10^-177 */\n    U64(0xA21727DB, 0x38CB002F), U64(0xB8ADA00E, 0x5A506A7C), /* ~= 10^-176 */\n    U64(0xCA9CF1D2, 0x06FDC03B), U64(0xA6D90811, 0xF0E4851C), /* ~= 10^-175 */\n    U64(0xFD442E46, 0x88BD304A), U64(0x908F4A16, 0x6D1DA663), /* ~= 10^-174 */\n    U64(0x9E4A9CEC, 0x15763E2E), U64(0x9A598E4E, 0x043287FE), /* ~= 10^-173 */\n    U64(0xC5DD4427, 0x1AD3CDBA), U64(0x40EFF1E1, 0x853F29FD), /* ~= 10^-172 */\n    U64(0xF7549530, 0xE188C128), U64(0xD12BEE59, 0xE68EF47C), /* ~= 10^-171 */\n    U64(0x9A94DD3E, 0x8CF578B9), U64(0x82BB74F8, 0x301958CE), /* ~= 10^-170 */\n    U64(0xC13A148E, 0x3032D6E7), U64(0xE36A5236, 0x3C1FAF01), /* ~= 10^-169 */\n    U64(0xF18899B1, 0xBC3F8CA1), U64(0xDC44E6C3, 0xCB279AC1), /* ~= 10^-168 */\n    U64(0x96F5600F, 0x15A7B7E5), U64(0x29AB103A, 0x5EF8C0B9), /* ~= 10^-167 */\n    U64(0xBCB2B812, 0xDB11A5DE), U64(0x7415D448, 0xF6B6F0E7), /* ~= 10^-166 */\n    U64(0xEBDF6617, 0x91D60F56), U64(0x111B495B, 0x3464AD21), /* ~= 10^-165 */\n    U64(0x936B9FCE, 0xBB25C995), U64(0xCAB10DD9, 0x00BEEC34), /* ~= 10^-164 */\n    U64(0xB84687C2, 0x69EF3BFB), U64(0x3D5D514F, 0x40EEA742), /* ~= 10^-163 */\n    U64(0xE65829B3, 0x046B0AFA), U64(0x0CB4A5A3, 0x112A5112), /* ~= 10^-162 */\n    U64(0x8FF71A0F, 0xE2C2E6DC), U64(0x47F0E785, 0xEABA72AB), /* ~= 10^-161 */\n    U64(0xB3F4E093, 0xDB73A093), U64(0x59ED2167, 0x65690F56), /* ~= 10^-160 */\n    U64(0xE0F218B8, 0xD25088B8), U64(0x306869C1, 0x3EC3532C), /* ~= 10^-159 */\n    U64(0x8C974F73, 0x83725573), U64(0x1E414218, 0xC73A13FB), /* ~= 10^-158 */\n    U64(0xAFBD2350, 0x644EEACF), U64(0xE5D1929E, 0xF90898FA), /* ~= 10^-157 */\n    U64(0xDBAC6C24, 0x7D62A583), U64(0xDF45F746, 0xB74ABF39), /* ~= 10^-156 */\n    U64(0x894BC396, 0xCE5DA772), U64(0x6B8BBA8C, 0x328EB783), /* ~= 10^-155 */\n    U64(0xAB9EB47C, 0x81F5114F), U64(0x066EA92F, 0x3F326564), /* ~= 10^-154 */\n    U64(0xD686619B, 0xA27255A2), U64(0xC80A537B, 0x0EFEFEBD), /* ~= 10^-153 */\n    U64(0x8613FD01, 0x45877585), U64(0xBD06742C, 0xE95F5F36), /* ~= 10^-152 */\n    U64(0xA798FC41, 0x96E952E7), U64(0x2C481138, 0x23B73704), /* ~= 10^-151 */\n    U64(0xD17F3B51, 0xFCA3A7A0), U64(0xF75A1586, 0x2CA504C5), /* ~= 10^-150 */\n    U64(0x82EF8513, 0x3DE648C4), U64(0x9A984D73, 0xDBE722FB), /* ~= 10^-149 */\n    U64(0xA3AB6658, 0x0D5FDAF5), U64(0xC13E60D0, 0xD2E0EBBA), /* ~= 10^-148 */\n    U64(0xCC963FEE, 0x10B7D1B3), U64(0x318DF905, 0x079926A8), /* ~= 10^-147 */\n    U64(0xFFBBCFE9, 0x94E5C61F), U64(0xFDF17746, 0x497F7052), /* ~= 10^-146 */\n    U64(0x9FD561F1, 0xFD0F9BD3), U64(0xFEB6EA8B, 0xEDEFA633), /* ~= 10^-145 */\n    U64(0xC7CABA6E, 0x7C5382C8), U64(0xFE64A52E, 0xE96B8FC0), /* ~= 10^-144 */\n    U64(0xF9BD690A, 0x1B68637B), U64(0x3DFDCE7A, 0xA3C673B0), /* ~= 10^-143 */\n    U64(0x9C1661A6, 0x51213E2D), U64(0x06BEA10C, 0xA65C084E), /* ~= 10^-142 */\n    U64(0xC31BFA0F, 0xE5698DB8), U64(0x486E494F, 0xCFF30A62), /* ~= 10^-141 */\n    U64(0xF3E2F893, 0xDEC3F126), U64(0x5A89DBA3, 0xC3EFCCFA), /* ~= 10^-140 */\n    U64(0x986DDB5C, 0x6B3A76B7), U64(0xF8962946, 0x5A75E01C), /* ~= 10^-139 */\n    U64(0xBE895233, 0x86091465), U64(0xF6BBB397, 0xF1135823), /* ~= 10^-138 */\n    U64(0xEE2BA6C0, 0x678B597F), U64(0x746AA07D, 0xED582E2C), /* ~= 10^-137 */\n    U64(0x94DB4838, 0x40B717EF), U64(0xA8C2A44E, 0xB4571CDC), /* ~= 10^-136 */\n    U64(0xBA121A46, 0x50E4DDEB), U64(0x92F34D62, 0x616CE413), /* ~= 10^-135 */\n    U64(0xE896A0D7, 0xE51E1566), U64(0x77B020BA, 0xF9C81D17), /* ~= 10^-134 */\n    U64(0x915E2486, 0xEF32CD60), U64(0x0ACE1474, 0xDC1D122E), /* ~= 10^-133 */\n    U64(0xB5B5ADA8, 0xAAFF80B8), U64(0x0D819992, 0x132456BA), /* ~= 10^-132 */\n    U64(0xE3231912, 0xD5BF60E6), U64(0x10E1FFF6, 0x97ED6C69), /* ~= 10^-131 */\n    U64(0x8DF5EFAB, 0xC5979C8F), U64(0xCA8D3FFA, 0x1EF463C1), /* ~= 10^-130 */\n    U64(0xB1736B96, 0xB6FD83B3), U64(0xBD308FF8, 0xA6B17CB2), /* ~= 10^-129 */\n    U64(0xDDD0467C, 0x64BCE4A0), U64(0xAC7CB3F6, 0xD05DDBDE), /* ~= 10^-128 */\n    U64(0x8AA22C0D, 0xBEF60EE4), U64(0x6BCDF07A, 0x423AA96B), /* ~= 10^-127 */\n    U64(0xAD4AB711, 0x2EB3929D), U64(0x86C16C98, 0xD2C953C6), /* ~= 10^-126 */\n    U64(0xD89D64D5, 0x7A607744), U64(0xE871C7BF, 0x077BA8B7), /* ~= 10^-125 */\n    U64(0x87625F05, 0x6C7C4A8B), U64(0x11471CD7, 0x64AD4972), /* ~= 10^-124 */\n    U64(0xA93AF6C6, 0xC79B5D2D), U64(0xD598E40D, 0x3DD89BCF), /* ~= 10^-123 */\n    U64(0xD389B478, 0x79823479), U64(0x4AFF1D10, 0x8D4EC2C3), /* ~= 10^-122 */\n    U64(0x843610CB, 0x4BF160CB), U64(0xCEDF722A, 0x585139BA), /* ~= 10^-121 */\n    U64(0xA54394FE, 0x1EEDB8FE), U64(0xC2974EB4, 0xEE658828), /* ~= 10^-120 */\n    U64(0xCE947A3D, 0xA6A9273E), U64(0x733D2262, 0x29FEEA32), /* ~= 10^-119 */\n    U64(0x811CCC66, 0x8829B887), U64(0x0806357D, 0x5A3F525F), /* ~= 10^-118 */\n    U64(0xA163FF80, 0x2A3426A8), U64(0xCA07C2DC, 0xB0CF26F7), /* ~= 10^-117 */\n    U64(0xC9BCFF60, 0x34C13052), U64(0xFC89B393, 0xDD02F0B5), /* ~= 10^-116 */\n    U64(0xFC2C3F38, 0x41F17C67), U64(0xBBAC2078, 0xD443ACE2), /* ~= 10^-115 */\n    U64(0x9D9BA783, 0x2936EDC0), U64(0xD54B944B, 0x84AA4C0D), /* ~= 10^-114 */\n    U64(0xC5029163, 0xF384A931), U64(0x0A9E795E, 0x65D4DF11), /* ~= 10^-113 */\n    U64(0xF64335BC, 0xF065D37D), U64(0x4D4617B5, 0xFF4A16D5), /* ~= 10^-112 */\n    U64(0x99EA0196, 0x163FA42E), U64(0x504BCED1, 0xBF8E4E45), /* ~= 10^-111 */\n    U64(0xC06481FB, 0x9BCF8D39), U64(0xE45EC286, 0x2F71E1D6), /* ~= 10^-110 */\n    U64(0xF07DA27A, 0x82C37088), U64(0x5D767327, 0xBB4E5A4C), /* ~= 10^-109 */\n    U64(0x964E858C, 0x91BA2655), U64(0x3A6A07F8, 0xD510F86F), /* ~= 10^-108 */\n    U64(0xBBE226EF, 0xB628AFEA), U64(0x890489F7, 0x0A55368B), /* ~= 10^-107 */\n    U64(0xEADAB0AB, 0xA3B2DBE5), U64(0x2B45AC74, 0xCCEA842E), /* ~= 10^-106 */\n    U64(0x92C8AE6B, 0x464FC96F), U64(0x3B0B8BC9, 0x0012929D), /* ~= 10^-105 */\n    U64(0xB77ADA06, 0x17E3BBCB), U64(0x09CE6EBB, 0x40173744), /* ~= 10^-104 */\n    U64(0xE5599087, 0x9DDCAABD), U64(0xCC420A6A, 0x101D0515), /* ~= 10^-103 */\n    U64(0x8F57FA54, 0xC2A9EAB6), U64(0x9FA94682, 0x4A12232D), /* ~= 10^-102 */\n    U64(0xB32DF8E9, 0xF3546564), U64(0x47939822, 0xDC96ABF9), /* ~= 10^-101 */\n    U64(0xDFF97724, 0x70297EBD), U64(0x59787E2B, 0x93BC56F7), /* ~= 10^-100 */\n    U64(0x8BFBEA76, 0xC619EF36), U64(0x57EB4EDB, 0x3C55B65A), /* ~= 10^-99 */\n    U64(0xAEFAE514, 0x77A06B03), U64(0xEDE62292, 0x0B6B23F1), /* ~= 10^-98 */\n    U64(0xDAB99E59, 0x958885C4), U64(0xE95FAB36, 0x8E45ECED), /* ~= 10^-97 */\n    U64(0x88B402F7, 0xFD75539B), U64(0x11DBCB02, 0x18EBB414), /* ~= 10^-96 */\n    U64(0xAAE103B5, 0xFCD2A881), U64(0xD652BDC2, 0x9F26A119), /* ~= 10^-95 */\n    U64(0xD59944A3, 0x7C0752A2), U64(0x4BE76D33, 0x46F0495F), /* ~= 10^-94 */\n    U64(0x857FCAE6, 0x2D8493A5), U64(0x6F70A440, 0x0C562DDB), /* ~= 10^-93 */\n    U64(0xA6DFBD9F, 0xB8E5B88E), U64(0xCB4CCD50, 0x0F6BB952), /* ~= 10^-92 */\n    U64(0xD097AD07, 0xA71F26B2), U64(0x7E2000A4, 0x1346A7A7), /* ~= 10^-91 */\n    U64(0x825ECC24, 0xC873782F), U64(0x8ED40066, 0x8C0C28C8), /* ~= 10^-90 */\n    U64(0xA2F67F2D, 0xFA90563B), U64(0x72890080, 0x2F0F32FA), /* ~= 10^-89 */\n    U64(0xCBB41EF9, 0x79346BCA), U64(0x4F2B40A0, 0x3AD2FFB9), /* ~= 10^-88 */\n    U64(0xFEA126B7, 0xD78186BC), U64(0xE2F610C8, 0x4987BFA8), /* ~= 10^-87 */\n    U64(0x9F24B832, 0xE6B0F436), U64(0x0DD9CA7D, 0x2DF4D7C9), /* ~= 10^-86 */\n    U64(0xC6EDE63F, 0xA05D3143), U64(0x91503D1C, 0x79720DBB), /* ~= 10^-85 */\n    U64(0xF8A95FCF, 0x88747D94), U64(0x75A44C63, 0x97CE912A), /* ~= 10^-84 */\n    U64(0x9B69DBE1, 0xB548CE7C), U64(0xC986AFBE, 0x3EE11ABA), /* ~= 10^-83 */\n    U64(0xC24452DA, 0x229B021B), U64(0xFBE85BAD, 0xCE996168), /* ~= 10^-82 */\n    U64(0xF2D56790, 0xAB41C2A2), U64(0xFAE27299, 0x423FB9C3), /* ~= 10^-81 */\n    U64(0x97C560BA, 0x6B0919A5), U64(0xDCCD879F, 0xC967D41A), /* ~= 10^-80 */\n    U64(0xBDB6B8E9, 0x05CB600F), U64(0x5400E987, 0xBBC1C920), /* ~= 10^-79 */\n    U64(0xED246723, 0x473E3813), U64(0x290123E9, 0xAAB23B68), /* ~= 10^-78 */\n    U64(0x9436C076, 0x0C86E30B), U64(0xF9A0B672, 0x0AAF6521), /* ~= 10^-77 */\n    U64(0xB9447093, 0x8FA89BCE), U64(0xF808E40E, 0x8D5B3E69), /* ~= 10^-76 */\n    U64(0xE7958CB8, 0x7392C2C2), U64(0xB60B1D12, 0x30B20E04), /* ~= 10^-75 */\n    U64(0x90BD77F3, 0x483BB9B9), U64(0xB1C6F22B, 0x5E6F48C2), /* ~= 10^-74 */\n    U64(0xB4ECD5F0, 0x1A4AA828), U64(0x1E38AEB6, 0x360B1AF3), /* ~= 10^-73 */\n    U64(0xE2280B6C, 0x20DD5232), U64(0x25C6DA63, 0xC38DE1B0), /* ~= 10^-72 */\n    U64(0x8D590723, 0x948A535F), U64(0x579C487E, 0x5A38AD0E), /* ~= 10^-71 */\n    U64(0xB0AF48EC, 0x79ACE837), U64(0x2D835A9D, 0xF0C6D851), /* ~= 10^-70 */\n    U64(0xDCDB1B27, 0x98182244), U64(0xF8E43145, 0x6CF88E65), /* ~= 10^-69 */\n    U64(0x8A08F0F8, 0xBF0F156B), U64(0x1B8E9ECB, 0x641B58FF), /* ~= 10^-68 */\n    U64(0xAC8B2D36, 0xEED2DAC5), U64(0xE272467E, 0x3D222F3F), /* ~= 10^-67 */\n    U64(0xD7ADF884, 0xAA879177), U64(0x5B0ED81D, 0xCC6ABB0F), /* ~= 10^-66 */\n    U64(0x86CCBB52, 0xEA94BAEA), U64(0x98E94712, 0x9FC2B4E9), /* ~= 10^-65 */\n    U64(0xA87FEA27, 0xA539E9A5), U64(0x3F2398D7, 0x47B36224), /* ~= 10^-64 */\n    U64(0xD29FE4B1, 0x8E88640E), U64(0x8EEC7F0D, 0x19A03AAD), /* ~= 10^-63 */\n    U64(0x83A3EEEE, 0xF9153E89), U64(0x1953CF68, 0x300424AC), /* ~= 10^-62 */\n    U64(0xA48CEAAA, 0xB75A8E2B), U64(0x5FA8C342, 0x3C052DD7), /* ~= 10^-61 */\n    U64(0xCDB02555, 0x653131B6), U64(0x3792F412, 0xCB06794D), /* ~= 10^-60 */\n    U64(0x808E1755, 0x5F3EBF11), U64(0xE2BBD88B, 0xBEE40BD0), /* ~= 10^-59 */\n    U64(0xA0B19D2A, 0xB70E6ED6), U64(0x5B6ACEAE, 0xAE9D0EC4), /* ~= 10^-58 */\n    U64(0xC8DE0475, 0x64D20A8B), U64(0xF245825A, 0x5A445275), /* ~= 10^-57 */\n    U64(0xFB158592, 0xBE068D2E), U64(0xEED6E2F0, 0xF0D56712), /* ~= 10^-56 */\n    U64(0x9CED737B, 0xB6C4183D), U64(0x55464DD6, 0x9685606B), /* ~= 10^-55 */\n    U64(0xC428D05A, 0xA4751E4C), U64(0xAA97E14C, 0x3C26B886), /* ~= 10^-54 */\n    U64(0xF5330471, 0x4D9265DF), U64(0xD53DD99F, 0x4B3066A8), /* ~= 10^-53 */\n    U64(0x993FE2C6, 0xD07B7FAB), U64(0xE546A803, 0x8EFE4029), /* ~= 10^-52 */\n    U64(0xBF8FDB78, 0x849A5F96), U64(0xDE985204, 0x72BDD033), /* ~= 10^-51 */\n    U64(0xEF73D256, 0xA5C0F77C), U64(0x963E6685, 0x8F6D4440), /* ~= 10^-50 */\n    U64(0x95A86376, 0x27989AAD), U64(0xDDE70013, 0x79A44AA8), /* ~= 10^-49 */\n    U64(0xBB127C53, 0xB17EC159), U64(0x5560C018, 0x580D5D52), /* ~= 10^-48 */\n    U64(0xE9D71B68, 0x9DDE71AF), U64(0xAAB8F01E, 0x6E10B4A6), /* ~= 10^-47 */\n    U64(0x92267121, 0x62AB070D), U64(0xCAB39613, 0x04CA70E8), /* ~= 10^-46 */\n    U64(0xB6B00D69, 0xBB55C8D1), U64(0x3D607B97, 0xC5FD0D22), /* ~= 10^-45 */\n    U64(0xE45C10C4, 0x2A2B3B05), U64(0x8CB89A7D, 0xB77C506A), /* ~= 10^-44 */\n    U64(0x8EB98A7A, 0x9A5B04E3), U64(0x77F3608E, 0x92ADB242), /* ~= 10^-43 */\n    U64(0xB267ED19, 0x40F1C61C), U64(0x55F038B2, 0x37591ED3), /* ~= 10^-42 */\n    U64(0xDF01E85F, 0x912E37A3), U64(0x6B6C46DE, 0xC52F6688), /* ~= 10^-41 */\n    U64(0x8B61313B, 0xBABCE2C6), U64(0x2323AC4B, 0x3B3DA015), /* ~= 10^-40 */\n    U64(0xAE397D8A, 0xA96C1B77), U64(0xABEC975E, 0x0A0D081A), /* ~= 10^-39 */\n    U64(0xD9C7DCED, 0x53C72255), U64(0x96E7BD35, 0x8C904A21), /* ~= 10^-38 */\n    U64(0x881CEA14, 0x545C7575), U64(0x7E50D641, 0x77DA2E54), /* ~= 10^-37 */\n    U64(0xAA242499, 0x697392D2), U64(0xDDE50BD1, 0xD5D0B9E9), /* ~= 10^-36 */\n    U64(0xD4AD2DBF, 0xC3D07787), U64(0x955E4EC6, 0x4B44E864), /* ~= 10^-35 */\n    U64(0x84EC3C97, 0xDA624AB4), U64(0xBD5AF13B, 0xEF0B113E), /* ~= 10^-34 */\n    U64(0xA6274BBD, 0xD0FADD61), U64(0xECB1AD8A, 0xEACDD58E), /* ~= 10^-33 */\n    U64(0xCFB11EAD, 0x453994BA), U64(0x67DE18ED, 0xA5814AF2), /* ~= 10^-32 */\n    U64(0x81CEB32C, 0x4B43FCF4), U64(0x80EACF94, 0x8770CED7), /* ~= 10^-31 */\n    U64(0xA2425FF7, 0x5E14FC31), U64(0xA1258379, 0xA94D028D), /* ~= 10^-30 */\n    U64(0xCAD2F7F5, 0x359A3B3E), U64(0x096EE458, 0x13A04330), /* ~= 10^-29 */\n    U64(0xFD87B5F2, 0x8300CA0D), U64(0x8BCA9D6E, 0x188853FC), /* ~= 10^-28 */\n    U64(0x9E74D1B7, 0x91E07E48), U64(0x775EA264, 0xCF55347D), /* ~= 10^-27 */\n    U64(0xC6120625, 0x76589DDA), U64(0x95364AFE, 0x032A819D), /* ~= 10^-26 */\n    U64(0xF79687AE, 0xD3EEC551), U64(0x3A83DDBD, 0x83F52204), /* ~= 10^-25 */\n    U64(0x9ABE14CD, 0x44753B52), U64(0xC4926A96, 0x72793542), /* ~= 10^-24 */\n    U64(0xC16D9A00, 0x95928A27), U64(0x75B7053C, 0x0F178293), /* ~= 10^-23 */\n    U64(0xF1C90080, 0xBAF72CB1), U64(0x5324C68B, 0x12DD6338), /* ~= 10^-22 */\n    U64(0x971DA050, 0x74DA7BEE), U64(0xD3F6FC16, 0xEBCA5E03), /* ~= 10^-21 */\n    U64(0xBCE50864, 0x92111AEA), U64(0x88F4BB1C, 0xA6BCF584), /* ~= 10^-20 */\n    U64(0xEC1E4A7D, 0xB69561A5), U64(0x2B31E9E3, 0xD06C32E5), /* ~= 10^-19 */\n    U64(0x9392EE8E, 0x921D5D07), U64(0x3AFF322E, 0x62439FCF), /* ~= 10^-18 */\n    U64(0xB877AA32, 0x36A4B449), U64(0x09BEFEB9, 0xFAD487C2), /* ~= 10^-17 */\n    U64(0xE69594BE, 0xC44DE15B), U64(0x4C2EBE68, 0x7989A9B3), /* ~= 10^-16 */\n    U64(0x901D7CF7, 0x3AB0ACD9), U64(0x0F9D3701, 0x4BF60A10), /* ~= 10^-15 */\n    U64(0xB424DC35, 0x095CD80F), U64(0x538484C1, 0x9EF38C94), /* ~= 10^-14 */\n    U64(0xE12E1342, 0x4BB40E13), U64(0x2865A5F2, 0x06B06FB9), /* ~= 10^-13 */\n    U64(0x8CBCCC09, 0x6F5088CB), U64(0xF93F87B7, 0x442E45D3), /* ~= 10^-12 */\n    U64(0xAFEBFF0B, 0xCB24AAFE), U64(0xF78F69A5, 0x1539D748), /* ~= 10^-11 */\n    U64(0xDBE6FECE, 0xBDEDD5BE), U64(0xB573440E, 0x5A884D1B), /* ~= 10^-10 */\n    U64(0x89705F41, 0x36B4A597), U64(0x31680A88, 0xF8953030), /* ~= 10^-9 */\n    U64(0xABCC7711, 0x8461CEFC), U64(0xFDC20D2B, 0x36BA7C3D), /* ~= 10^-8 */\n    U64(0xD6BF94D5, 0xE57A42BC), U64(0x3D329076, 0x04691B4C), /* ~= 10^-7 */\n    U64(0x8637BD05, 0xAF6C69B5), U64(0xA63F9A49, 0xC2C1B10F), /* ~= 10^-6 */\n    U64(0xA7C5AC47, 0x1B478423), U64(0x0FCF80DC, 0x33721D53), /* ~= 10^-5 */\n    U64(0xD1B71758, 0xE219652B), U64(0xD3C36113, 0x404EA4A8), /* ~= 10^-4 */\n    U64(0x83126E97, 0x8D4FDF3B), U64(0x645A1CAC, 0x083126E9), /* ~= 10^-3 */\n    U64(0xA3D70A3D, 0x70A3D70A), U64(0x3D70A3D7, 0x0A3D70A3), /* ~= 10^-2 */\n    U64(0xCCCCCCCC, 0xCCCCCCCC), U64(0xCCCCCCCC, 0xCCCCCCCC), /* ~= 10^-1 */\n    U64(0x80000000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^0 */\n    U64(0xA0000000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^1 */\n    U64(0xC8000000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^2 */\n    U64(0xFA000000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^3 */\n    U64(0x9C400000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^4 */\n    U64(0xC3500000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^5 */\n    U64(0xF4240000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^6 */\n    U64(0x98968000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^7 */\n    U64(0xBEBC2000, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^8 */\n    U64(0xEE6B2800, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^9 */\n    U64(0x9502F900, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^10 */\n    U64(0xBA43B740, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^11 */\n    U64(0xE8D4A510, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^12 */\n    U64(0x9184E72A, 0x00000000), U64(0x00000000, 0x00000000), /* == 10^13 */\n    U64(0xB5E620F4, 0x80000000), U64(0x00000000, 0x00000000), /* == 10^14 */\n    U64(0xE35FA931, 0xA0000000), U64(0x00000000, 0x00000000), /* == 10^15 */\n    U64(0x8E1BC9BF, 0x04000000), U64(0x00000000, 0x00000000), /* == 10^16 */\n    U64(0xB1A2BC2E, 0xC5000000), U64(0x00000000, 0x00000000), /* == 10^17 */\n    U64(0xDE0B6B3A, 0x76400000), U64(0x00000000, 0x00000000), /* == 10^18 */\n    U64(0x8AC72304, 0x89E80000), U64(0x00000000, 0x00000000), /* == 10^19 */\n    U64(0xAD78EBC5, 0xAC620000), U64(0x00000000, 0x00000000), /* == 10^20 */\n    U64(0xD8D726B7, 0x177A8000), U64(0x00000000, 0x00000000), /* == 10^21 */\n    U64(0x87867832, 0x6EAC9000), U64(0x00000000, 0x00000000), /* == 10^22 */\n    U64(0xA968163F, 0x0A57B400), U64(0x00000000, 0x00000000), /* == 10^23 */\n    U64(0xD3C21BCE, 0xCCEDA100), U64(0x00000000, 0x00000000), /* == 10^24 */\n    U64(0x84595161, 0x401484A0), U64(0x00000000, 0x00000000), /* == 10^25 */\n    U64(0xA56FA5B9, 0x9019A5C8), U64(0x00000000, 0x00000000), /* == 10^26 */\n    U64(0xCECB8F27, 0xF4200F3A), U64(0x00000000, 0x00000000), /* == 10^27 */\n    U64(0x813F3978, 0xF8940984), U64(0x40000000, 0x00000000), /* == 10^28 */\n    U64(0xA18F07D7, 0x36B90BE5), U64(0x50000000, 0x00000000), /* == 10^29 */\n    U64(0xC9F2C9CD, 0x04674EDE), U64(0xA4000000, 0x00000000), /* == 10^30 */\n    U64(0xFC6F7C40, 0x45812296), U64(0x4D000000, 0x00000000), /* == 10^31 */\n    U64(0x9DC5ADA8, 0x2B70B59D), U64(0xF0200000, 0x00000000), /* == 10^32 */\n    U64(0xC5371912, 0x364CE305), U64(0x6C280000, 0x00000000), /* == 10^33 */\n    U64(0xF684DF56, 0xC3E01BC6), U64(0xC7320000, 0x00000000), /* == 10^34 */\n    U64(0x9A130B96, 0x3A6C115C), U64(0x3C7F4000, 0x00000000), /* == 10^35 */\n    U64(0xC097CE7B, 0xC90715B3), U64(0x4B9F1000, 0x00000000), /* == 10^36 */\n    U64(0xF0BDC21A, 0xBB48DB20), U64(0x1E86D400, 0x00000000), /* == 10^37 */\n    U64(0x96769950, 0xB50D88F4), U64(0x13144480, 0x00000000), /* == 10^38 */\n    U64(0xBC143FA4, 0xE250EB31), U64(0x17D955A0, 0x00000000), /* == 10^39 */\n    U64(0xEB194F8E, 0x1AE525FD), U64(0x5DCFAB08, 0x00000000), /* == 10^40 */\n    U64(0x92EFD1B8, 0xD0CF37BE), U64(0x5AA1CAE5, 0x00000000), /* == 10^41 */\n    U64(0xB7ABC627, 0x050305AD), U64(0xF14A3D9E, 0x40000000), /* == 10^42 */\n    U64(0xE596B7B0, 0xC643C719), U64(0x6D9CCD05, 0xD0000000), /* == 10^43 */\n    U64(0x8F7E32CE, 0x7BEA5C6F), U64(0xE4820023, 0xA2000000), /* == 10^44 */\n    U64(0xB35DBF82, 0x1AE4F38B), U64(0xDDA2802C, 0x8A800000), /* == 10^45 */\n    U64(0xE0352F62, 0xA19E306E), U64(0xD50B2037, 0xAD200000), /* == 10^46 */\n    U64(0x8C213D9D, 0xA502DE45), U64(0x4526F422, 0xCC340000), /* == 10^47 */\n    U64(0xAF298D05, 0x0E4395D6), U64(0x9670B12B, 0x7F410000), /* == 10^48 */\n    U64(0xDAF3F046, 0x51D47B4C), U64(0x3C0CDD76, 0x5F114000), /* == 10^49 */\n    U64(0x88D8762B, 0xF324CD0F), U64(0xA5880A69, 0xFB6AC800), /* == 10^50 */\n    U64(0xAB0E93B6, 0xEFEE0053), U64(0x8EEA0D04, 0x7A457A00), /* == 10^51 */\n    U64(0xD5D238A4, 0xABE98068), U64(0x72A49045, 0x98D6D880), /* == 10^52 */\n    U64(0x85A36366, 0xEB71F041), U64(0x47A6DA2B, 0x7F864750), /* == 10^53 */\n    U64(0xA70C3C40, 0xA64E6C51), U64(0x999090B6, 0x5F67D924), /* == 10^54 */\n    U64(0xD0CF4B50, 0xCFE20765), U64(0xFFF4B4E3, 0xF741CF6D), /* == 10^55 */\n    U64(0x82818F12, 0x81ED449F), U64(0xBFF8F10E, 0x7A8921A4), /* ~= 10^56 */\n    U64(0xA321F2D7, 0x226895C7), U64(0xAFF72D52, 0x192B6A0D), /* ~= 10^57 */\n    U64(0xCBEA6F8C, 0xEB02BB39), U64(0x9BF4F8A6, 0x9F764490), /* ~= 10^58 */\n    U64(0xFEE50B70, 0x25C36A08), U64(0x02F236D0, 0x4753D5B4), /* ~= 10^59 */\n    U64(0x9F4F2726, 0x179A2245), U64(0x01D76242, 0x2C946590), /* ~= 10^60 */\n    U64(0xC722F0EF, 0x9D80AAD6), U64(0x424D3AD2, 0xB7B97EF5), /* ~= 10^61 */\n    U64(0xF8EBAD2B, 0x84E0D58B), U64(0xD2E08987, 0x65A7DEB2), /* ~= 10^62 */\n    U64(0x9B934C3B, 0x330C8577), U64(0x63CC55F4, 0x9F88EB2F), /* ~= 10^63 */\n    U64(0xC2781F49, 0xFFCFA6D5), U64(0x3CBF6B71, 0xC76B25FB), /* ~= 10^64 */\n    U64(0xF316271C, 0x7FC3908A), U64(0x8BEF464E, 0x3945EF7A), /* ~= 10^65 */\n    U64(0x97EDD871, 0xCFDA3A56), U64(0x97758BF0, 0xE3CBB5AC), /* ~= 10^66 */\n    U64(0xBDE94E8E, 0x43D0C8EC), U64(0x3D52EEED, 0x1CBEA317), /* ~= 10^67 */\n    U64(0xED63A231, 0xD4C4FB27), U64(0x4CA7AAA8, 0x63EE4BDD), /* ~= 10^68 */\n    U64(0x945E455F, 0x24FB1CF8), U64(0x8FE8CAA9, 0x3E74EF6A), /* ~= 10^69 */\n    U64(0xB975D6B6, 0xEE39E436), U64(0xB3E2FD53, 0x8E122B44), /* ~= 10^70 */\n    U64(0xE7D34C64, 0xA9C85D44), U64(0x60DBBCA8, 0x7196B616), /* ~= 10^71 */\n    U64(0x90E40FBE, 0xEA1D3A4A), U64(0xBC8955E9, 0x46FE31CD), /* ~= 10^72 */\n    U64(0xB51D13AE, 0xA4A488DD), U64(0x6BABAB63, 0x98BDBE41), /* ~= 10^73 */\n    U64(0xE264589A, 0x4DCDAB14), U64(0xC696963C, 0x7EED2DD1), /* ~= 10^74 */\n    U64(0x8D7EB760, 0x70A08AEC), U64(0xFC1E1DE5, 0xCF543CA2), /* ~= 10^75 */\n    U64(0xB0DE6538, 0x8CC8ADA8), U64(0x3B25A55F, 0x43294BCB), /* ~= 10^76 */\n    U64(0xDD15FE86, 0xAFFAD912), U64(0x49EF0EB7, 0x13F39EBE), /* ~= 10^77 */\n    U64(0x8A2DBF14, 0x2DFCC7AB), U64(0x6E356932, 0x6C784337), /* ~= 10^78 */\n    U64(0xACB92ED9, 0x397BF996), U64(0x49C2C37F, 0x07965404), /* ~= 10^79 */\n    U64(0xD7E77A8F, 0x87DAF7FB), U64(0xDC33745E, 0xC97BE906), /* ~= 10^80 */\n    U64(0x86F0AC99, 0xB4E8DAFD), U64(0x69A028BB, 0x3DED71A3), /* ~= 10^81 */\n    U64(0xA8ACD7C0, 0x222311BC), U64(0xC40832EA, 0x0D68CE0C), /* ~= 10^82 */\n    U64(0xD2D80DB0, 0x2AABD62B), U64(0xF50A3FA4, 0x90C30190), /* ~= 10^83 */\n    U64(0x83C7088E, 0x1AAB65DB), U64(0x792667C6, 0xDA79E0FA), /* ~= 10^84 */\n    U64(0xA4B8CAB1, 0xA1563F52), U64(0x577001B8, 0x91185938), /* ~= 10^85 */\n    U64(0xCDE6FD5E, 0x09ABCF26), U64(0xED4C0226, 0xB55E6F86), /* ~= 10^86 */\n    U64(0x80B05E5A, 0xC60B6178), U64(0x544F8158, 0x315B05B4), /* ~= 10^87 */\n    U64(0xA0DC75F1, 0x778E39D6), U64(0x696361AE, 0x3DB1C721), /* ~= 10^88 */\n    U64(0xC913936D, 0xD571C84C), U64(0x03BC3A19, 0xCD1E38E9), /* ~= 10^89 */\n    U64(0xFB587849, 0x4ACE3A5F), U64(0x04AB48A0, 0x4065C723), /* ~= 10^90 */\n    U64(0x9D174B2D, 0xCEC0E47B), U64(0x62EB0D64, 0x283F9C76), /* ~= 10^91 */\n    U64(0xC45D1DF9, 0x42711D9A), U64(0x3BA5D0BD, 0x324F8394), /* ~= 10^92 */\n    U64(0xF5746577, 0x930D6500), U64(0xCA8F44EC, 0x7EE36479), /* ~= 10^93 */\n    U64(0x9968BF6A, 0xBBE85F20), U64(0x7E998B13, 0xCF4E1ECB), /* ~= 10^94 */\n    U64(0xBFC2EF45, 0x6AE276E8), U64(0x9E3FEDD8, 0xC321A67E), /* ~= 10^95 */\n    U64(0xEFB3AB16, 0xC59B14A2), U64(0xC5CFE94E, 0xF3EA101E), /* ~= 10^96 */\n    U64(0x95D04AEE, 0x3B80ECE5), U64(0xBBA1F1D1, 0x58724A12), /* ~= 10^97 */\n    U64(0xBB445DA9, 0xCA61281F), U64(0x2A8A6E45, 0xAE8EDC97), /* ~= 10^98 */\n    U64(0xEA157514, 0x3CF97226), U64(0xF52D09D7, 0x1A3293BD), /* ~= 10^99 */\n    U64(0x924D692C, 0xA61BE758), U64(0x593C2626, 0x705F9C56), /* ~= 10^100 */\n    U64(0xB6E0C377, 0xCFA2E12E), U64(0x6F8B2FB0, 0x0C77836C), /* ~= 10^101 */\n    U64(0xE498F455, 0xC38B997A), U64(0x0B6DFB9C, 0x0F956447), /* ~= 10^102 */\n    U64(0x8EDF98B5, 0x9A373FEC), U64(0x4724BD41, 0x89BD5EAC), /* ~= 10^103 */\n    U64(0xB2977EE3, 0x00C50FE7), U64(0x58EDEC91, 0xEC2CB657), /* ~= 10^104 */\n    U64(0xDF3D5E9B, 0xC0F653E1), U64(0x2F2967B6, 0x6737E3ED), /* ~= 10^105 */\n    U64(0x8B865B21, 0x5899F46C), U64(0xBD79E0D2, 0x0082EE74), /* ~= 10^106 */\n    U64(0xAE67F1E9, 0xAEC07187), U64(0xECD85906, 0x80A3AA11), /* ~= 10^107 */\n    U64(0xDA01EE64, 0x1A708DE9), U64(0xE80E6F48, 0x20CC9495), /* ~= 10^108 */\n    U64(0x884134FE, 0x908658B2), U64(0x3109058D, 0x147FDCDD), /* ~= 10^109 */\n    U64(0xAA51823E, 0x34A7EEDE), U64(0xBD4B46F0, 0x599FD415), /* ~= 10^110 */\n    U64(0xD4E5E2CD, 0xC1D1EA96), U64(0x6C9E18AC, 0x7007C91A), /* ~= 10^111 */\n    U64(0x850FADC0, 0x9923329E), U64(0x03E2CF6B, 0xC604DDB0), /* ~= 10^112 */\n    U64(0xA6539930, 0xBF6BFF45), U64(0x84DB8346, 0xB786151C), /* ~= 10^113 */\n    U64(0xCFE87F7C, 0xEF46FF16), U64(0xE6126418, 0x65679A63), /* ~= 10^114 */\n    U64(0x81F14FAE, 0x158C5F6E), U64(0x4FCB7E8F, 0x3F60C07E), /* ~= 10^115 */\n    U64(0xA26DA399, 0x9AEF7749), U64(0xE3BE5E33, 0x0F38F09D), /* ~= 10^116 */\n    U64(0xCB090C80, 0x01AB551C), U64(0x5CADF5BF, 0xD3072CC5), /* ~= 10^117 */\n    U64(0xFDCB4FA0, 0x02162A63), U64(0x73D9732F, 0xC7C8F7F6), /* ~= 10^118 */\n    U64(0x9E9F11C4, 0x014DDA7E), U64(0x2867E7FD, 0xDCDD9AFA), /* ~= 10^119 */\n    U64(0xC646D635, 0x01A1511D), U64(0xB281E1FD, 0x541501B8), /* ~= 10^120 */\n    U64(0xF7D88BC2, 0x4209A565), U64(0x1F225A7C, 0xA91A4226), /* ~= 10^121 */\n    U64(0x9AE75759, 0x6946075F), U64(0x3375788D, 0xE9B06958), /* ~= 10^122 */\n    U64(0xC1A12D2F, 0xC3978937), U64(0x0052D6B1, 0x641C83AE), /* ~= 10^123 */\n    U64(0xF209787B, 0xB47D6B84), U64(0xC0678C5D, 0xBD23A49A), /* ~= 10^124 */\n    U64(0x9745EB4D, 0x50CE6332), U64(0xF840B7BA, 0x963646E0), /* ~= 10^125 */\n    U64(0xBD176620, 0xA501FBFF), U64(0xB650E5A9, 0x3BC3D898), /* ~= 10^126 */\n    U64(0xEC5D3FA8, 0xCE427AFF), U64(0xA3E51F13, 0x8AB4CEBE), /* ~= 10^127 */\n    U64(0x93BA47C9, 0x80E98CDF), U64(0xC66F336C, 0x36B10137), /* ~= 10^128 */\n    U64(0xB8A8D9BB, 0xE123F017), U64(0xB80B0047, 0x445D4184), /* ~= 10^129 */\n    U64(0xE6D3102A, 0xD96CEC1D), U64(0xA60DC059, 0x157491E5), /* ~= 10^130 */\n    U64(0x9043EA1A, 0xC7E41392), U64(0x87C89837, 0xAD68DB2F), /* ~= 10^131 */\n    U64(0xB454E4A1, 0x79DD1877), U64(0x29BABE45, 0x98C311FB), /* ~= 10^132 */\n    U64(0xE16A1DC9, 0xD8545E94), U64(0xF4296DD6, 0xFEF3D67A), /* ~= 10^133 */\n    U64(0x8CE2529E, 0x2734BB1D), U64(0x1899E4A6, 0x5F58660C), /* ~= 10^134 */\n    U64(0xB01AE745, 0xB101E9E4), U64(0x5EC05DCF, 0xF72E7F8F), /* ~= 10^135 */\n    U64(0xDC21A117, 0x1D42645D), U64(0x76707543, 0xF4FA1F73), /* ~= 10^136 */\n    U64(0x899504AE, 0x72497EBA), U64(0x6A06494A, 0x791C53A8), /* ~= 10^137 */\n    U64(0xABFA45DA, 0x0EDBDE69), U64(0x0487DB9D, 0x17636892), /* ~= 10^138 */\n    U64(0xD6F8D750, 0x9292D603), U64(0x45A9D284, 0x5D3C42B6), /* ~= 10^139 */\n    U64(0x865B8692, 0x5B9BC5C2), U64(0x0B8A2392, 0xBA45A9B2), /* ~= 10^140 */\n    U64(0xA7F26836, 0xF282B732), U64(0x8E6CAC77, 0x68D7141E), /* ~= 10^141 */\n    U64(0xD1EF0244, 0xAF2364FF), U64(0x3207D795, 0x430CD926), /* ~= 10^142 */\n    U64(0x8335616A, 0xED761F1F), U64(0x7F44E6BD, 0x49E807B8), /* ~= 10^143 */\n    U64(0xA402B9C5, 0xA8D3A6E7), U64(0x5F16206C, 0x9C6209A6), /* ~= 10^144 */\n    U64(0xCD036837, 0x130890A1), U64(0x36DBA887, 0xC37A8C0F), /* ~= 10^145 */\n    U64(0x80222122, 0x6BE55A64), U64(0xC2494954, 0xDA2C9789), /* ~= 10^146 */\n    U64(0xA02AA96B, 0x06DEB0FD), U64(0xF2DB9BAA, 0x10B7BD6C), /* ~= 10^147 */\n    U64(0xC83553C5, 0xC8965D3D), U64(0x6F928294, 0x94E5ACC7), /* ~= 10^148 */\n    U64(0xFA42A8B7, 0x3ABBF48C), U64(0xCB772339, 0xBA1F17F9), /* ~= 10^149 */\n    U64(0x9C69A972, 0x84B578D7), U64(0xFF2A7604, 0x14536EFB), /* ~= 10^150 */\n    U64(0xC38413CF, 0x25E2D70D), U64(0xFEF51385, 0x19684ABA), /* ~= 10^151 */\n    U64(0xF46518C2, 0xEF5B8CD1), U64(0x7EB25866, 0x5FC25D69), /* ~= 10^152 */\n    U64(0x98BF2F79, 0xD5993802), U64(0xEF2F773F, 0xFBD97A61), /* ~= 10^153 */\n    U64(0xBEEEFB58, 0x4AFF8603), U64(0xAAFB550F, 0xFACFD8FA), /* ~= 10^154 */\n    U64(0xEEAABA2E, 0x5DBF6784), U64(0x95BA2A53, 0xF983CF38), /* ~= 10^155 */\n    U64(0x952AB45C, 0xFA97A0B2), U64(0xDD945A74, 0x7BF26183), /* ~= 10^156 */\n    U64(0xBA756174, 0x393D88DF), U64(0x94F97111, 0x9AEEF9E4), /* ~= 10^157 */\n    U64(0xE912B9D1, 0x478CEB17), U64(0x7A37CD56, 0x01AAB85D), /* ~= 10^158 */\n    U64(0x91ABB422, 0xCCB812EE), U64(0xAC62E055, 0xC10AB33A), /* ~= 10^159 */\n    U64(0xB616A12B, 0x7FE617AA), U64(0x577B986B, 0x314D6009), /* ~= 10^160 */\n    U64(0xE39C4976, 0x5FDF9D94), U64(0xED5A7E85, 0xFDA0B80B), /* ~= 10^161 */\n    U64(0x8E41ADE9, 0xFBEBC27D), U64(0x14588F13, 0xBE847307), /* ~= 10^162 */\n    U64(0xB1D21964, 0x7AE6B31C), U64(0x596EB2D8, 0xAE258FC8), /* ~= 10^163 */\n    U64(0xDE469FBD, 0x99A05FE3), U64(0x6FCA5F8E, 0xD9AEF3BB), /* ~= 10^164 */\n    U64(0x8AEC23D6, 0x80043BEE), U64(0x25DE7BB9, 0x480D5854), /* ~= 10^165 */\n    U64(0xADA72CCC, 0x20054AE9), U64(0xAF561AA7, 0x9A10AE6A), /* ~= 10^166 */\n    U64(0xD910F7FF, 0x28069DA4), U64(0x1B2BA151, 0x8094DA04), /* ~= 10^167 */\n    U64(0x87AA9AFF, 0x79042286), U64(0x90FB44D2, 0xF05D0842), /* ~= 10^168 */\n    U64(0xA99541BF, 0x57452B28), U64(0x353A1607, 0xAC744A53), /* ~= 10^169 */\n    U64(0xD3FA922F, 0x2D1675F2), U64(0x42889B89, 0x97915CE8), /* ~= 10^170 */\n    U64(0x847C9B5D, 0x7C2E09B7), U64(0x69956135, 0xFEBADA11), /* ~= 10^171 */\n    U64(0xA59BC234, 0xDB398C25), U64(0x43FAB983, 0x7E699095), /* ~= 10^172 */\n    U64(0xCF02B2C2, 0x1207EF2E), U64(0x94F967E4, 0x5E03F4BB), /* ~= 10^173 */\n    U64(0x8161AFB9, 0x4B44F57D), U64(0x1D1BE0EE, 0xBAC278F5), /* ~= 10^174 */\n    U64(0xA1BA1BA7, 0x9E1632DC), U64(0x6462D92A, 0x69731732), /* ~= 10^175 */\n    U64(0xCA28A291, 0x859BBF93), U64(0x7D7B8F75, 0x03CFDCFE), /* ~= 10^176 */\n    U64(0xFCB2CB35, 0xE702AF78), U64(0x5CDA7352, 0x44C3D43E), /* ~= 10^177 */\n    U64(0x9DEFBF01, 0xB061ADAB), U64(0x3A088813, 0x6AFA64A7), /* ~= 10^178 */\n    U64(0xC56BAEC2, 0x1C7A1916), U64(0x088AAA18, 0x45B8FDD0), /* ~= 10^179 */\n    U64(0xF6C69A72, 0xA3989F5B), U64(0x8AAD549E, 0x57273D45), /* ~= 10^180 */\n    U64(0x9A3C2087, 0xA63F6399), U64(0x36AC54E2, 0xF678864B), /* ~= 10^181 */\n    U64(0xC0CB28A9, 0x8FCF3C7F), U64(0x84576A1B, 0xB416A7DD), /* ~= 10^182 */\n    U64(0xF0FDF2D3, 0xF3C30B9F), U64(0x656D44A2, 0xA11C51D5), /* ~= 10^183 */\n    U64(0x969EB7C4, 0x7859E743), U64(0x9F644AE5, 0xA4B1B325), /* ~= 10^184 */\n    U64(0xBC4665B5, 0x96706114), U64(0x873D5D9F, 0x0DDE1FEE), /* ~= 10^185 */\n    U64(0xEB57FF22, 0xFC0C7959), U64(0xA90CB506, 0xD155A7EA), /* ~= 10^186 */\n    U64(0x9316FF75, 0xDD87CBD8), U64(0x09A7F124, 0x42D588F2), /* ~= 10^187 */\n    U64(0xB7DCBF53, 0x54E9BECE), U64(0x0C11ED6D, 0x538AEB2F), /* ~= 10^188 */\n    U64(0xE5D3EF28, 0x2A242E81), U64(0x8F1668C8, 0xA86DA5FA), /* ~= 10^189 */\n    U64(0x8FA47579, 0x1A569D10), U64(0xF96E017D, 0x694487BC), /* ~= 10^190 */\n    U64(0xB38D92D7, 0x60EC4455), U64(0x37C981DC, 0xC395A9AC), /* ~= 10^191 */\n    U64(0xE070F78D, 0x3927556A), U64(0x85BBE253, 0xF47B1417), /* ~= 10^192 */\n    U64(0x8C469AB8, 0x43B89562), U64(0x93956D74, 0x78CCEC8E), /* ~= 10^193 */\n    U64(0xAF584166, 0x54A6BABB), U64(0x387AC8D1, 0x970027B2), /* ~= 10^194 */\n    U64(0xDB2E51BF, 0xE9D0696A), U64(0x06997B05, 0xFCC0319E), /* ~= 10^195 */\n    U64(0x88FCF317, 0xF22241E2), U64(0x441FECE3, 0xBDF81F03), /* ~= 10^196 */\n    U64(0xAB3C2FDD, 0xEEAAD25A), U64(0xD527E81C, 0xAD7626C3), /* ~= 10^197 */\n    U64(0xD60B3BD5, 0x6A5586F1), U64(0x8A71E223, 0xD8D3B074), /* ~= 10^198 */\n    U64(0x85C70565, 0x62757456), U64(0xF6872D56, 0x67844E49), /* ~= 10^199 */\n    U64(0xA738C6BE, 0xBB12D16C), U64(0xB428F8AC, 0x016561DB), /* ~= 10^200 */\n    U64(0xD106F86E, 0x69D785C7), U64(0xE13336D7, 0x01BEBA52), /* ~= 10^201 */\n    U64(0x82A45B45, 0x0226B39C), U64(0xECC00246, 0x61173473), /* ~= 10^202 */\n    U64(0xA34D7216, 0x42B06084), U64(0x27F002D7, 0xF95D0190), /* ~= 10^203 */\n    U64(0xCC20CE9B, 0xD35C78A5), U64(0x31EC038D, 0xF7B441F4), /* ~= 10^204 */\n    U64(0xFF290242, 0xC83396CE), U64(0x7E670471, 0x75A15271), /* ~= 10^205 */\n    U64(0x9F79A169, 0xBD203E41), U64(0x0F0062C6, 0xE984D386), /* ~= 10^206 */\n    U64(0xC75809C4, 0x2C684DD1), U64(0x52C07B78, 0xA3E60868), /* ~= 10^207 */\n    U64(0xF92E0C35, 0x37826145), U64(0xA7709A56, 0xCCDF8A82), /* ~= 10^208 */\n    U64(0x9BBCC7A1, 0x42B17CCB), U64(0x88A66076, 0x400BB691), /* ~= 10^209 */\n    U64(0xC2ABF989, 0x935DDBFE), U64(0x6ACFF893, 0xD00EA435), /* ~= 10^210 */\n    U64(0xF356F7EB, 0xF83552FE), U64(0x0583F6B8, 0xC4124D43), /* ~= 10^211 */\n    U64(0x98165AF3, 0x7B2153DE), U64(0xC3727A33, 0x7A8B704A), /* ~= 10^212 */\n    U64(0xBE1BF1B0, 0x59E9A8D6), U64(0x744F18C0, 0x592E4C5C), /* ~= 10^213 */\n    U64(0xEDA2EE1C, 0x7064130C), U64(0x1162DEF0, 0x6F79DF73), /* ~= 10^214 */\n    U64(0x9485D4D1, 0xC63E8BE7), U64(0x8ADDCB56, 0x45AC2BA8), /* ~= 10^215 */\n    U64(0xB9A74A06, 0x37CE2EE1), U64(0x6D953E2B, 0xD7173692), /* ~= 10^216 */\n    U64(0xE8111C87, 0xC5C1BA99), U64(0xC8FA8DB6, 0xCCDD0437), /* ~= 10^217 */\n    U64(0x910AB1D4, 0xDB9914A0), U64(0x1D9C9892, 0x400A22A2), /* ~= 10^218 */\n    U64(0xB54D5E4A, 0x127F59C8), U64(0x2503BEB6, 0xD00CAB4B), /* ~= 10^219 */\n    U64(0xE2A0B5DC, 0x971F303A), U64(0x2E44AE64, 0x840FD61D), /* ~= 10^220 */\n    U64(0x8DA471A9, 0xDE737E24), U64(0x5CEAECFE, 0xD289E5D2), /* ~= 10^221 */\n    U64(0xB10D8E14, 0x56105DAD), U64(0x7425A83E, 0x872C5F47), /* ~= 10^222 */\n    U64(0xDD50F199, 0x6B947518), U64(0xD12F124E, 0x28F77719), /* ~= 10^223 */\n    U64(0x8A5296FF, 0xE33CC92F), U64(0x82BD6B70, 0xD99AAA6F), /* ~= 10^224 */\n    U64(0xACE73CBF, 0xDC0BFB7B), U64(0x636CC64D, 0x1001550B), /* ~= 10^225 */\n    U64(0xD8210BEF, 0xD30EFA5A), U64(0x3C47F7E0, 0x5401AA4E), /* ~= 10^226 */\n    U64(0x8714A775, 0xE3E95C78), U64(0x65ACFAEC, 0x34810A71), /* ~= 10^227 */\n    U64(0xA8D9D153, 0x5CE3B396), U64(0x7F1839A7, 0x41A14D0D), /* ~= 10^228 */\n    U64(0xD31045A8, 0x341CA07C), U64(0x1EDE4811, 0x1209A050), /* ~= 10^229 */\n    U64(0x83EA2B89, 0x2091E44D), U64(0x934AED0A, 0xAB460432), /* ~= 10^230 */\n    U64(0xA4E4B66B, 0x68B65D60), U64(0xF81DA84D, 0x5617853F), /* ~= 10^231 */\n    U64(0xCE1DE406, 0x42E3F4B9), U64(0x36251260, 0xAB9D668E), /* ~= 10^232 */\n    U64(0x80D2AE83, 0xE9CE78F3), U64(0xC1D72B7C, 0x6B426019), /* ~= 10^233 */\n    U64(0xA1075A24, 0xE4421730), U64(0xB24CF65B, 0x8612F81F), /* ~= 10^234 */\n    U64(0xC94930AE, 0x1D529CFC), U64(0xDEE033F2, 0x6797B627), /* ~= 10^235 */\n    U64(0xFB9B7CD9, 0xA4A7443C), U64(0x169840EF, 0x017DA3B1), /* ~= 10^236 */\n    U64(0x9D412E08, 0x06E88AA5), U64(0x8E1F2895, 0x60EE864E), /* ~= 10^237 */\n    U64(0xC491798A, 0x08A2AD4E), U64(0xF1A6F2BA, 0xB92A27E2), /* ~= 10^238 */\n    U64(0xF5B5D7EC, 0x8ACB58A2), U64(0xAE10AF69, 0x6774B1DB), /* ~= 10^239 */\n    U64(0x9991A6F3, 0xD6BF1765), U64(0xACCA6DA1, 0xE0A8EF29), /* ~= 10^240 */\n    U64(0xBFF610B0, 0xCC6EDD3F), U64(0x17FD090A, 0x58D32AF3), /* ~= 10^241 */\n    U64(0xEFF394DC, 0xFF8A948E), U64(0xDDFC4B4C, 0xEF07F5B0), /* ~= 10^242 */\n    U64(0x95F83D0A, 0x1FB69CD9), U64(0x4ABDAF10, 0x1564F98E), /* ~= 10^243 */\n    U64(0xBB764C4C, 0xA7A4440F), U64(0x9D6D1AD4, 0x1ABE37F1), /* ~= 10^244 */\n    U64(0xEA53DF5F, 0xD18D5513), U64(0x84C86189, 0x216DC5ED), /* ~= 10^245 */\n    U64(0x92746B9B, 0xE2F8552C), U64(0x32FD3CF5, 0xB4E49BB4), /* ~= 10^246 */\n    U64(0xB7118682, 0xDBB66A77), U64(0x3FBC8C33, 0x221DC2A1), /* ~= 10^247 */\n    U64(0xE4D5E823, 0x92A40515), U64(0x0FABAF3F, 0xEAA5334A), /* ~= 10^248 */\n    U64(0x8F05B116, 0x3BA6832D), U64(0x29CB4D87, 0xF2A7400E), /* ~= 10^249 */\n    U64(0xB2C71D5B, 0xCA9023F8), U64(0x743E20E9, 0xEF511012), /* ~= 10^250 */\n    U64(0xDF78E4B2, 0xBD342CF6), U64(0x914DA924, 0x6B255416), /* ~= 10^251 */\n    U64(0x8BAB8EEF, 0xB6409C1A), U64(0x1AD089B6, 0xC2F7548E), /* ~= 10^252 */\n    U64(0xAE9672AB, 0xA3D0C320), U64(0xA184AC24, 0x73B529B1), /* ~= 10^253 */\n    U64(0xDA3C0F56, 0x8CC4F3E8), U64(0xC9E5D72D, 0x90A2741E), /* ~= 10^254 */\n    U64(0x88658996, 0x17FB1871), U64(0x7E2FA67C, 0x7A658892), /* ~= 10^255 */\n    U64(0xAA7EEBFB, 0x9DF9DE8D), U64(0xDDBB901B, 0x98FEEAB7), /* ~= 10^256 */\n    U64(0xD51EA6FA, 0x85785631), U64(0x552A7422, 0x7F3EA565), /* ~= 10^257 */\n    U64(0x8533285C, 0x936B35DE), U64(0xD53A8895, 0x8F87275F), /* ~= 10^258 */\n    U64(0xA67FF273, 0xB8460356), U64(0x8A892ABA, 0xF368F137), /* ~= 10^259 */\n    U64(0xD01FEF10, 0xA657842C), U64(0x2D2B7569, 0xB0432D85), /* ~= 10^260 */\n    U64(0x8213F56A, 0x67F6B29B), U64(0x9C3B2962, 0x0E29FC73), /* ~= 10^261 */\n    U64(0xA298F2C5, 0x01F45F42), U64(0x8349F3BA, 0x91B47B8F), /* ~= 10^262 */\n    U64(0xCB3F2F76, 0x42717713), U64(0x241C70A9, 0x36219A73), /* ~= 10^263 */\n    U64(0xFE0EFB53, 0xD30DD4D7), U64(0xED238CD3, 0x83AA0110), /* ~= 10^264 */\n    U64(0x9EC95D14, 0x63E8A506), U64(0xF4363804, 0x324A40AA), /* ~= 10^265 */\n    U64(0xC67BB459, 0x7CE2CE48), U64(0xB143C605, 0x3EDCD0D5), /* ~= 10^266 */\n    U64(0xF81AA16F, 0xDC1B81DA), U64(0xDD94B786, 0x8E94050A), /* ~= 10^267 */\n    U64(0x9B10A4E5, 0xE9913128), U64(0xCA7CF2B4, 0x191C8326), /* ~= 10^268 */\n    U64(0xC1D4CE1F, 0x63F57D72), U64(0xFD1C2F61, 0x1F63A3F0), /* ~= 10^269 */\n    U64(0xF24A01A7, 0x3CF2DCCF), U64(0xBC633B39, 0x673C8CEC), /* ~= 10^270 */\n    U64(0x976E4108, 0x8617CA01), U64(0xD5BE0503, 0xE085D813), /* ~= 10^271 */\n    U64(0xBD49D14A, 0xA79DBC82), U64(0x4B2D8644, 0xD8A74E18), /* ~= 10^272 */\n    U64(0xEC9C459D, 0x51852BA2), U64(0xDDF8E7D6, 0x0ED1219E), /* ~= 10^273 */\n    U64(0x93E1AB82, 0x52F33B45), U64(0xCABB90E5, 0xC942B503), /* ~= 10^274 */\n    U64(0xB8DA1662, 0xE7B00A17), U64(0x3D6A751F, 0x3B936243), /* ~= 10^275 */\n    U64(0xE7109BFB, 0xA19C0C9D), U64(0x0CC51267, 0x0A783AD4), /* ~= 10^276 */\n    U64(0x906A617D, 0x450187E2), U64(0x27FB2B80, 0x668B24C5), /* ~= 10^277 */\n    U64(0xB484F9DC, 0x9641E9DA), U64(0xB1F9F660, 0x802DEDF6), /* ~= 10^278 */\n    U64(0xE1A63853, 0xBBD26451), U64(0x5E7873F8, 0xA0396973), /* ~= 10^279 */\n    U64(0x8D07E334, 0x55637EB2), U64(0xDB0B487B, 0x6423E1E8), /* ~= 10^280 */\n    U64(0xB049DC01, 0x6ABC5E5F), U64(0x91CE1A9A, 0x3D2CDA62), /* ~= 10^281 */\n    U64(0xDC5C5301, 0xC56B75F7), U64(0x7641A140, 0xCC7810FB), /* ~= 10^282 */\n    U64(0x89B9B3E1, 0x1B6329BA), U64(0xA9E904C8, 0x7FCB0A9D), /* ~= 10^283 */\n    U64(0xAC2820D9, 0x623BF429), U64(0x546345FA, 0x9FBDCD44), /* ~= 10^284 */\n    U64(0xD732290F, 0xBACAF133), U64(0xA97C1779, 0x47AD4095), /* ~= 10^285 */\n    U64(0x867F59A9, 0xD4BED6C0), U64(0x49ED8EAB, 0xCCCC485D), /* ~= 10^286 */\n    U64(0xA81F3014, 0x49EE8C70), U64(0x5C68F256, 0xBFFF5A74), /* ~= 10^287 */\n    U64(0xD226FC19, 0x5C6A2F8C), U64(0x73832EEC, 0x6FFF3111), /* ~= 10^288 */\n    U64(0x83585D8F, 0xD9C25DB7), U64(0xC831FD53, 0xC5FF7EAB), /* ~= 10^289 */\n    U64(0xA42E74F3, 0xD032F525), U64(0xBA3E7CA8, 0xB77F5E55), /* ~= 10^290 */\n    U64(0xCD3A1230, 0xC43FB26F), U64(0x28CE1BD2, 0xE55F35EB), /* ~= 10^291 */\n    U64(0x80444B5E, 0x7AA7CF85), U64(0x7980D163, 0xCF5B81B3), /* ~= 10^292 */\n    U64(0xA0555E36, 0x1951C366), U64(0xD7E105BC, 0xC332621F), /* ~= 10^293 */\n    U64(0xC86AB5C3, 0x9FA63440), U64(0x8DD9472B, 0xF3FEFAA7), /* ~= 10^294 */\n    U64(0xFA856334, 0x878FC150), U64(0xB14F98F6, 0xF0FEB951), /* ~= 10^295 */\n    U64(0x9C935E00, 0xD4B9D8D2), U64(0x6ED1BF9A, 0x569F33D3), /* ~= 10^296 */\n    U64(0xC3B83581, 0x09E84F07), U64(0x0A862F80, 0xEC4700C8), /* ~= 10^297 */\n    U64(0xF4A642E1, 0x4C6262C8), U64(0xCD27BB61, 0x2758C0FA), /* ~= 10^298 */\n    U64(0x98E7E9CC, 0xCFBD7DBD), U64(0x8038D51C, 0xB897789C), /* ~= 10^299 */\n    U64(0xBF21E440, 0x03ACDD2C), U64(0xE0470A63, 0xE6BD56C3), /* ~= 10^300 */\n    U64(0xEEEA5D50, 0x04981478), U64(0x1858CCFC, 0xE06CAC74), /* ~= 10^301 */\n    U64(0x95527A52, 0x02DF0CCB), U64(0x0F37801E, 0x0C43EBC8), /* ~= 10^302 */\n    U64(0xBAA718E6, 0x8396CFFD), U64(0xD3056025, 0x8F54E6BA), /* ~= 10^303 */\n    U64(0xE950DF20, 0x247C83FD), U64(0x47C6B82E, 0xF32A2069), /* ~= 10^304 */\n    U64(0x91D28B74, 0x16CDD27E), U64(0x4CDC331D, 0x57FA5441), /* ~= 10^305 */\n    U64(0xB6472E51, 0x1C81471D), U64(0xE0133FE4, 0xADF8E952), /* ~= 10^306 */\n    U64(0xE3D8F9E5, 0x63A198E5), U64(0x58180FDD, 0xD97723A6), /* ~= 10^307 */\n    U64(0x8E679C2F, 0x5E44FF8F), U64(0x570F09EA, 0xA7EA7648), /* ~= 10^308 */\n    U64(0xB201833B, 0x35D63F73), U64(0x2CD2CC65, 0x51E513DA), /* ~= 10^309 */\n    U64(0xDE81E40A, 0x034BCF4F), U64(0xF8077F7E, 0xA65E58D1), /* ~= 10^310 */\n    U64(0x8B112E86, 0x420F6191), U64(0xFB04AFAF, 0x27FAF782), /* ~= 10^311 */\n    U64(0xADD57A27, 0xD29339F6), U64(0x79C5DB9A, 0xF1F9B563), /* ~= 10^312 */\n    U64(0xD94AD8B1, 0xC7380874), U64(0x18375281, 0xAE7822BC), /* ~= 10^313 */\n    U64(0x87CEC76F, 0x1C830548), U64(0x8F229391, 0x0D0B15B5), /* ~= 10^314 */\n    U64(0xA9C2794A, 0xE3A3C69A), U64(0xB2EB3875, 0x504DDB22), /* ~= 10^315 */\n    U64(0xD433179D, 0x9C8CB841), U64(0x5FA60692, 0xA46151EB), /* ~= 10^316 */\n    U64(0x849FEEC2, 0x81D7F328), U64(0xDBC7C41B, 0xA6BCD333), /* ~= 10^317 */\n    U64(0xA5C7EA73, 0x224DEFF3), U64(0x12B9B522, 0x906C0800), /* ~= 10^318 */\n    U64(0xCF39E50F, 0xEAE16BEF), U64(0xD768226B, 0x34870A00), /* ~= 10^319 */\n    U64(0x81842F29, 0xF2CCE375), U64(0xE6A11583, 0x00D46640), /* ~= 10^320 */\n    U64(0xA1E53AF4, 0x6F801C53), U64(0x60495AE3, 0xC1097FD0), /* ~= 10^321 */\n    U64(0xCA5E89B1, 0x8B602368), U64(0x385BB19C, 0xB14BDFC4), /* ~= 10^322 */\n    U64(0xFCF62C1D, 0xEE382C42), U64(0x46729E03, 0xDD9ED7B5), /* ~= 10^323 */\n    U64(0x9E19DB92, 0xB4E31BA9), U64(0x6C07A2C2, 0x6A8346D1)  /* ~= 10^324 */\n};\n\n/**\n Get the cached pow10 value from pow10_sig_table.\n @param exp10 The exponent of pow(10, e). This value must in range\n              POW10_SIG_TABLE_MIN_EXP to POW10_SIG_TABLE_MAX_EXP.\n @param hi    The highest 64 bits of pow(10, e).\n @param lo    The lower 64 bits after `hi`.\n */\nstatic_inline void pow10_table_get_sig(i32 exp10, u64 *hi, u64 *lo) {\n    i32 idx = exp10 - (POW10_SIG_TABLE_MIN_EXP);\n    *hi = pow10_sig_table[idx * 2];\n    *lo = pow10_sig_table[idx * 2 + 1];\n}\n\n/**\n Get the exponent (base 2) for highest 64 bits significand in pow10_sig_table.\n */\nstatic_inline void pow10_table_get_exp(i32 exp10, i32 *exp2) {\n    /* e2 = floor(log2(pow(10, e))) - 64 + 1 */\n    /*    = floor(e * log2(10) - 63)         */\n    *exp2 = (exp10 * 217706 - 4128768) >> 16;\n}\n\n#endif\n\n\n\n#if !YYJSON_DISABLE_READER\n\n/*==============================================================================\n * JSON Character Matcher\n *============================================================================*/\n\n/** Character type */\ntypedef u8 char_type;\n\n/** Whitespace character: ' ', '\\\\t', '\\\\n', '\\\\r'. */\nstatic const char_type CHAR_TYPE_SPACE      = 1 << 0;\n\n/** Number character: '-', [0-9]. */\nstatic const char_type CHAR_TYPE_NUMBER     = 1 << 1;\n\n/** JSON Escaped character: '\"', '\\', [0x00-0x1F]. */\nstatic const char_type CHAR_TYPE_ESC_ASCII  = 1 << 2;\n\n/** Non-ASCII character: [0x80-0xFF]. */\nstatic const char_type CHAR_TYPE_NON_ASCII  = 1 << 3;\n\n/** JSON container character: '{', '['. */\nstatic const char_type CHAR_TYPE_CONTAINER  = 1 << 4;\n\n/** Comment character: '/'. */\nstatic const char_type CHAR_TYPE_COMMENT    = 1 << 5;\n\n/** Line end character: '\\\\n', '\\\\r', '\\0'. */\nstatic const char_type CHAR_TYPE_LINE_END   = 1 << 6;\n\n/** Hexadecimal numeric character: [0-9a-fA-F]. */\nstatic const char_type CHAR_TYPE_HEX        = 1 << 7;\n\n/** Character type table (generate with misc/make_tables.c) */\nstatic const char_type char_table[256] = {\n    0x44, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,\n    0x04, 0x05, 0x45, 0x04, 0x04, 0x45, 0x04, 0x04,\n    0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,\n    0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,\n    0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x20,\n    0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,\n    0x82, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00,\n    0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08\n};\n\n/** Match a character with specified type. */\nstatic_inline bool char_is_type(u8 c, char_type type) {\n    return (char_table[c] & type) != 0;\n}\n\n/** Match a whitespace: ' ', '\\\\t', '\\\\n', '\\\\r'. */\nstatic_inline bool char_is_space(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_SPACE);\n}\n\n/** Match a whitespace or comment: ' ', '\\\\t', '\\\\n', '\\\\r', '/'. */\nstatic_inline bool char_is_space_or_comment(u8 c) {\n    return char_is_type(c, (char_type)(CHAR_TYPE_SPACE | CHAR_TYPE_COMMENT));\n}\n\n/** Match a JSON number: '-', [0-9]. */\nstatic_inline bool char_is_number(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_NUMBER);\n}\n\n/** Match a JSON container: '{', '['. */\nstatic_inline bool char_is_container(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_CONTAINER);\n}\n\n/** Match a stop character in ASCII string: '\"', '\\', [0x00-0x1F,0x80-0xFF]. */\nstatic_inline bool char_is_ascii_stop(u8 c) {\n    return char_is_type(c, (char_type)(CHAR_TYPE_ESC_ASCII |\n                                       CHAR_TYPE_NON_ASCII));\n}\n\n/** Match a line end character: '\\\\n', '\\\\r', '\\0'. */\nstatic_inline bool char_is_line_end(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_LINE_END);\n}\n\n/** Match a hexadecimal numeric character: [0-9a-fA-F]. */\nstatic_inline bool char_is_hex(u8 c) {\n    return char_is_type(c, (char_type)CHAR_TYPE_HEX);\n}\n\n\n\n/*==============================================================================\n * Digit Character Matcher\n *============================================================================*/\n\n/** Digit type */\ntypedef u8 digi_type;\n\n/** Digit: '0'. */\nstatic const digi_type DIGI_TYPE_ZERO       = 1 << 0;\n\n/** Digit: [1-9]. */\nstatic const digi_type DIGI_TYPE_NONZERO    = 1 << 1;\n\n/** Plus sign (positive): '+'. */\nstatic const digi_type DIGI_TYPE_POS        = 1 << 2;\n\n/** Minus sign (negative): '-'. */\nstatic const digi_type DIGI_TYPE_NEG        = 1 << 3;\n\n/** Decimal point: '.' */\nstatic const digi_type DIGI_TYPE_DOT        = 1 << 4;\n\n/** Exponent sign: 'e, 'E'. */\nstatic const digi_type DIGI_TYPE_EXP        = 1 << 5;\n\n/** Digit type table (generate with misc/make_tables.c) */\nstatic const digi_type digi_table[256] = {\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x10, 0x00,\n    0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,\n    0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n};\n\n/** Match a character with specified type. */\nstatic_inline bool digi_is_type(u8 d, digi_type type) {\n    return (digi_table[d] & type) != 0;\n}\n\n/** Match a sign: '+', '-' */\nstatic_inline bool digi_is_sign(u8 d) {\n    return digi_is_type(d, (digi_type)(DIGI_TYPE_POS | DIGI_TYPE_NEG));\n}\n\n/** Match a none zero digit: [1-9] */\nstatic_inline bool digi_is_nonzero(u8 d) {\n    return digi_is_type(d, (digi_type)DIGI_TYPE_NONZERO);\n}\n\n/** Match a digit: [0-9] */\nstatic_inline bool digi_is_digit(u8 d) {\n    return digi_is_type(d, (digi_type)(DIGI_TYPE_ZERO | DIGI_TYPE_NONZERO));\n}\n\n/** Match an exponent sign: 'e', 'E'. */\nstatic_inline bool digi_is_exp(u8 d) {\n    return digi_is_type(d, (digi_type)DIGI_TYPE_EXP);\n}\n\n/** Match a floating point indicator: '.', 'e', 'E'. */\nstatic_inline bool digi_is_fp(u8 d) {\n    return digi_is_type(d, (digi_type)(DIGI_TYPE_DOT | DIGI_TYPE_EXP));\n}\n\n/** Match a digit or floating point indicator: [0-9], '.', 'e', 'E'. */\nstatic_inline bool digi_is_digit_or_fp(u8 d) {\n    return digi_is_type(d, (digi_type)(DIGI_TYPE_ZERO | DIGI_TYPE_NONZERO |\n                                       DIGI_TYPE_DOT | DIGI_TYPE_EXP));\n}\n\n\n\n/*==============================================================================\n * Hex Character Reader\n * This function is used by JSON reader to read escaped characters.\n *============================================================================*/\n\n/**\n This table is used to convert 4 hex character sequence to a number.\n A valid hex character [0-9A-Fa-f] will mapped to it's raw number [0x00, 0x0F],\n an invalid hex character will mapped to [0xF0].\n (generate with misc/make_tables.c)\n */\nstatic const u8 hex_conv_table[256] = {\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n    0x08, 0x09, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0\n};\n\n/**\n Scans an escaped character sequence as a UTF-16 code unit (branchless).\n e.g. \"\\\\u005C\" should pass \"005C\" as `cur`.\n \n This requires the string has 4-byte zero padding.\n */\nstatic_inline bool read_hex_u16(const u8 *cur, u16 *val) {\n    u16 c0, c1, c2, c3, t0, t1;\n    c0 = hex_conv_table[cur[0]];\n    c1 = hex_conv_table[cur[1]];\n    c2 = hex_conv_table[cur[2]];\n    c3 = hex_conv_table[cur[3]];\n    t0 = (u16)((c0 << 8) | c2);\n    t1 = (u16)((c1 << 8) | c3);\n    *val = (u16)((t0 << 4) | t1);\n    return ((t0 | t1) & (u16)0xF0F0) == 0;\n}\n\n\n\n/*==============================================================================\n * JSON Reader Utils\n * These functions are used by JSON reader to read literals and comments.\n *============================================================================*/\n\n/** Read 'true' literal, '*cur' should be 't'. */\nstatic_inline bool read_true(u8 **ptr, yyjson_val *val) {\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if (likely(byte_match_4(cur, \"true\"))) {\n        val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE;\n        *end = cur + 4;\n        return true;\n    }\n    return false;\n}\n\n/** Read 'false' literal, '*cur' should be 'f'. */\nstatic_inline bool read_false(u8 **ptr, yyjson_val *val) {\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if (likely(byte_match_4(cur + 1, \"alse\"))) {\n        val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE;\n        *end = cur + 5;\n        return true;\n    }\n    return false;\n}\n\n/** Read 'null' literal, '*cur' should be 'n'. */\nstatic_inline bool read_null(u8 **ptr, yyjson_val *val) {\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if (likely(byte_match_4(cur, \"null\"))) {\n        val->tag = YYJSON_TYPE_NULL;\n        *end = cur + 4;\n        return true;\n    }\n    return false;\n}\n\n/** Read 'Inf' or 'Infinity' literal (ignoring case). */\nstatic_inline bool read_inf(bool sign, u8 **ptr, u8 **pre, yyjson_val *val) {\n#if !YYJSON_DISABLE_NON_STANDARD\n    u8 *hdr = *ptr - sign;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if ((cur[0] == 'I' || cur[0] == 'i') &&\n        (cur[1] == 'N' || cur[1] == 'n') &&\n        (cur[2] == 'F' || cur[2] == 'f')) {\n        if ((cur[3] == 'I' || cur[3] == 'i') &&\n            (cur[4] == 'N' || cur[4] == 'n') &&\n            (cur[5] == 'I' || cur[5] == 'i') &&\n            (cur[6] == 'T' || cur[6] == 't') &&\n            (cur[7] == 'Y' || cur[7] == 'y')) {\n            cur += 8;\n        } else {\n            cur += 3;\n        }\n        *end = cur;\n        if (pre) {\n            /* add null-terminator for previous raw string */\n            if (*pre) **pre = '\\0';\n            *pre = cur;\n            val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW;\n            val->uni.str = (const char *)hdr;\n        } else {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n            val->uni.u64 = f64_raw_get_inf(sign);\n        }\n        return true;\n    }\n#endif\n    return false;\n}\n\n/** Read 'NaN' literal (ignoring case). */\nstatic_inline bool read_nan(bool sign, u8 **ptr, u8 **pre, yyjson_val *val) {\n#if !YYJSON_DISABLE_NON_STANDARD\n    u8 *hdr = *ptr - sign;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    if ((cur[0] == 'N' || cur[0] == 'n') &&\n        (cur[1] == 'A' || cur[1] == 'a') &&\n        (cur[2] == 'N' || cur[2] == 'n')) {\n        cur += 3;\n        *end = cur;\n        if (pre) {\n            /* add null-terminator for previous raw string */\n            if (*pre) **pre = '\\0';\n            *pre = cur;\n            val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW;\n            val->uni.str = (const char *)hdr;\n        } else {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n            val->uni.u64 = f64_raw_get_nan(sign);\n        }\n        return true;\n    }\n#endif\n    return false;\n}\n\n/** Read 'Inf', 'Infinity' or 'NaN' literal (ignoring case). */\nstatic_inline bool read_inf_or_nan(bool sign, u8 **ptr, u8 **pre,\n                                   yyjson_val *val) {\n    if (read_inf(sign, ptr, pre, val)) return true;\n    if (read_nan(sign, ptr, pre, val)) return true;\n    return false;\n}\n\n/** Read a JSON number as raw string. */\nstatic_noinline bool read_number_raw(u8 **ptr,\n                                     u8 **pre,\n                                     yyjson_read_flag flg,\n                                     yyjson_val *val,\n                                     const char **msg) {\n    \n#define return_err(_pos, _msg) do { \\\n    *msg = _msg; \\\n    *end = _pos; \\\n    return false; \\\n} while (false)\n    \n#define return_raw() do { \\\n    val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW; \\\n    val->uni.str = (const char *)hdr; \\\n    *pre = cur; *end = cur; return true; \\\n} while (false)\n    \n    u8 *hdr = *ptr;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    \n    /* add null-terminator for previous raw string */\n    if (*pre) **pre = '\\0';\n    \n    /* skip sign */\n    cur += (*cur == '-');\n    \n    /* read first digit, check leading zero */\n    if (unlikely(!digi_is_digit(*cur))) {\n        if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) {\n            if (read_inf_or_nan(*hdr == '-', &cur, pre, val)) return_raw();\n        }\n        return_err(cur, \"no digit after minus sign\");\n    }\n    \n    /* read integral part */\n    if (*cur == '0') {\n        cur++;\n        if (unlikely(digi_is_digit(*cur))) {\n            return_err(cur - 1, \"number with leading zero is not allowed\");\n        }\n        if (!digi_is_fp(*cur)) return_raw();\n    } else {\n        while (digi_is_digit(*cur)) cur++;\n        if (!digi_is_fp(*cur)) return_raw();\n    }\n    \n    /* read fraction part */\n    if (*cur == '.') {\n        cur++;\n        if (!digi_is_digit(*cur++)) {\n            return_err(cur, \"no digit after decimal point\");\n        }\n        while (digi_is_digit(*cur)) cur++;\n    }\n    \n    /* read exponent part */\n    if (digi_is_exp(*cur)) {\n        cur += 1 + digi_is_sign(cur[1]);\n        if (!digi_is_digit(*cur++)) {\n            return_err(cur, \"no digit after exponent sign\");\n        }\n        while (digi_is_digit(*cur)) cur++;\n    }\n    \n    return_raw();\n    \n#undef return_err\n#undef return_raw\n}\n\n/**\n Skips spaces and comments as many as possible.\n \n It will return false in these cases:\n    1. No character is skipped. The 'end' pointer is set as input cursor.\n    2. A multiline comment is not closed. The 'end' pointer is set as the head\n       of this comment block.\n */\nstatic_noinline bool skip_spaces_and_comments(u8 **ptr) {\n    u8 *hdr = *ptr;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    while (true) {\n        if (byte_match_2(cur, \"/*\")) {\n            hdr = cur;\n            cur += 2;\n            while (true) {\n                if (byte_match_2(cur, \"*/\")) {\n                    cur += 2;\n                    break;\n                }\n                if (*cur == 0) {\n                    *end = hdr;\n                    return false;\n                }\n                cur++;\n            }\n            continue;\n        }\n        if (byte_match_2(cur, \"//\")) {\n            cur += 2;\n            while (!char_is_line_end(*cur)) cur++;\n            continue;\n        }\n        if (char_is_space(*cur)) {\n            cur += 1;\n            while (char_is_space(*cur)) cur++;\n            continue;\n        }\n        break;\n    }\n    *end = cur;\n    return hdr != cur;\n}\n\n/**\n Check truncated string.\n Returns true if `cur` match `str` but is truncated.\n */\nstatic_inline bool is_truncated_str(u8 *cur, u8 *end,\n                                    const char *str,\n                                    bool case_sensitive) {\n    usize len = strlen(str);\n    if (cur + len <= end || end <= cur) return false;\n    if (case_sensitive) {\n        return memcmp(cur, str, (usize)(end - cur)) == 0;\n    }\n    for (; cur < end; cur++, str++) {\n        if ((*cur != (u8)*str) && (*cur != (u8)*str - 'a' + 'A')) {\n            return false;\n        }\n    }\n    return true;\n}\n\n/**\n Check truncated JSON on parsing errors.\n Returns true if the input is valid but truncated.\n */\nstatic_noinline bool is_truncated_end(u8 *hdr, u8 *cur, u8 *end,\n                                      yyjson_read_code code,\n                                      yyjson_read_flag flg) {\n    if (cur >= end) return true;\n    if (code == YYJSON_READ_ERROR_LITERAL) {\n        if (is_truncated_str(cur, end, \"true\", true) ||\n            is_truncated_str(cur, end, \"false\", true) ||\n            is_truncated_str(cur, end, \"null\", true)) {\n            return true;\n        }\n    }\n    if (code == YYJSON_READ_ERROR_UNEXPECTED_CHARACTER ||\n        code == YYJSON_READ_ERROR_INVALID_NUMBER ||\n        code == YYJSON_READ_ERROR_LITERAL) {\n        if ((flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (*cur == '-') cur++;\n            if (is_truncated_str(cur, end, \"infinity\", false) ||\n                is_truncated_str(cur, end, \"nan\", false)) {\n                return true;\n            }\n        }\n    }\n    if (code == YYJSON_READ_ERROR_UNEXPECTED_CONTENT) {\n        if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) {\n            if (hdr + 3 <= cur &&\n                is_truncated_str(cur - 3, end, \"infinity\", false)) {\n                return true; /* e.g. infin would be read as inf + in */\n            }\n        }\n    }\n    if (code == YYJSON_READ_ERROR_INVALID_STRING) {\n        usize len = (usize)(end - cur);\n        \n        /* unicode escape sequence */\n        if (*cur == '\\\\') {\n            if (len == 1) return true;\n            if (len <= 5) {\n                if (*++cur != 'u') return false;\n                for (++cur; cur < end; cur++) {\n                    if (!char_is_hex(*cur)) return false;\n                }\n                return true;\n            }\n            return false;\n        }\n        \n        /* 2 to 4 bytes UTF-8, see `read_string()` for details. */\n        if (*cur & 0x80) {\n            u8 c0 = cur[0], c1 = cur[1], c2 = cur[2];\n            if (len == 1) {\n                /* 2 bytes UTF-8, truncated */\n                if ((c0 & 0xE0) == 0xC0 && (c0 & 0x1E) != 0x00) return true;\n                /* 3 bytes UTF-8, truncated */\n                if ((c0 & 0xF0) == 0xE0) return true;\n                /* 4 bytes UTF-8, truncated */\n                if ((c0 & 0xF8) == 0xF0 && (c0 & 0x07) <= 0x04) return true;\n            }\n            if (len == 2) {\n                /* 3 bytes UTF-8, truncated */\n                if ((c0 & 0xF0) == 0xE0 &&\n                    (c1 & 0xC0) == 0x80) {\n                    u8 pat = (u8)(((c0 & 0x0F) << 1) | ((c1 & 0x20) >> 5));\n                    return 0x01 <= pat && pat != 0x1B;\n                }\n                /* 4 bytes UTF-8, truncated */\n                if ((c0 & 0xF8) == 0xF0 &&\n                    (c1 & 0xC0) == 0x80) {\n                    u8 pat = (u8)(((c0 & 0x07) << 2) | ((c1 & 0x30) >> 4));\n                    return 0x01 <= pat && pat <= 0x10;\n                }\n            }\n            if (len == 3) {\n                /* 4 bytes UTF-8, truncated */\n                if ((c0 & 0xF8) == 0xF0 &&\n                    (c1 & 0xC0) == 0x80 &&\n                    (c2 & 0xC0) == 0x80) {\n                    u8 pat = (u8)(((c0 & 0x07) << 2) | ((c1 & 0x30) >> 4));\n                    return 0x01 <= pat && pat <= 0x10;\n                }\n            }\n        }\n    }\n    return false;\n}\n\n\n\n#if YYJSON_HAS_IEEE_754 && !YYJSON_DISABLE_FAST_FP_CONV /* FP_READER */\n\n/*==============================================================================\n * BigInt For Floating Point Number Reader\n *\n * The bigint algorithm is used by floating-point number reader to get correctly\n * rounded result for numbers with lots of digits. This part of code is rarely\n * used for common numbers.\n *============================================================================*/\n\n/** Maximum exponent of exact pow10 */\n#define U64_POW10_MAX_EXP 19\n\n/** Table: [ 10^0, ..., 10^19 ] (generate with misc/make_tables.c) */\nstatic const u64 u64_pow10_table[U64_POW10_MAX_EXP + 1] = {\n    U64(0x00000000, 0x00000001), U64(0x00000000, 0x0000000A),\n    U64(0x00000000, 0x00000064), U64(0x00000000, 0x000003E8),\n    U64(0x00000000, 0x00002710), U64(0x00000000, 0x000186A0),\n    U64(0x00000000, 0x000F4240), U64(0x00000000, 0x00989680),\n    U64(0x00000000, 0x05F5E100), U64(0x00000000, 0x3B9ACA00),\n    U64(0x00000002, 0x540BE400), U64(0x00000017, 0x4876E800),\n    U64(0x000000E8, 0xD4A51000), U64(0x00000918, 0x4E72A000),\n    U64(0x00005AF3, 0x107A4000), U64(0x00038D7E, 0xA4C68000),\n    U64(0x002386F2, 0x6FC10000), U64(0x01634578, 0x5D8A0000),\n    U64(0x0DE0B6B3, 0xA7640000), U64(0x8AC72304, 0x89E80000)\n};\n\n/** Maximum numbers of chunks used by a bigint (58 is enough here). */\n#define BIGINT_MAX_CHUNKS 64\n\n/** Unsigned arbitrarily large integer */\ntypedef struct bigint {\n    u32 used; /* used chunks count, should not be 0 */\n    u64 bits[BIGINT_MAX_CHUNKS]; /* chunks */\n} bigint;\n\n/**\n Evaluate 'big += val'.\n @param big A big number (can be 0).\n @param val An unsigned integer (can be 0).\n */\nstatic_inline void bigint_add_u64(bigint *big, u64 val) {\n    u32 idx, max;\n    u64 num = big->bits[0];\n    u64 add = num + val;\n    big->bits[0] = add;\n    if (likely((add >= num) || (add >= val))) return;\n    for ((void)(idx = 1), max = big->used; idx < max; idx++) {\n        if (likely(big->bits[idx] != U64_MAX)) {\n            big->bits[idx] += 1;\n            return;\n        }\n        big->bits[idx] = 0;\n    }\n    big->bits[big->used++] = 1;\n}\n\n/**\n Evaluate 'big *= val'.\n @param big A big number (can be 0).\n @param val An unsigned integer (cannot be 0).\n */\nstatic_inline void bigint_mul_u64(bigint *big, u64 val) {\n    u32 idx = 0, max = big->used;\n    u64 hi, lo, carry = 0;\n    for (; idx < max; idx++) {\n        if (big->bits[idx]) break;\n    }\n    for (; idx < max; idx++) {\n        u128_mul_add(big->bits[idx], val, carry, &hi, &lo);\n        big->bits[idx] = lo;\n        carry = hi;\n    }\n    if (carry) big->bits[big->used++] = carry;\n}\n\n/**\n Evaluate 'big *= 2^exp'.\n @param big A big number (can be 0).\n @param exp An exponent integer (can be 0).\n */\nstatic_inline void bigint_mul_pow2(bigint *big, u32 exp) {\n    u32 shft = exp % 64;\n    u32 move = exp / 64;\n    u32 idx = big->used;\n    if (unlikely(shft == 0)) {\n        for (; idx > 0; idx--) {\n            big->bits[idx + move - 1] = big->bits[idx - 1];\n        }\n        big->used += move;\n        while (move) big->bits[--move] = 0;\n    } else {\n        big->bits[idx] = 0;\n        for (; idx > 0; idx--) {\n            u64 num = big->bits[idx] << shft;\n            num |= big->bits[idx - 1] >> (64 - shft);\n            big->bits[idx + move] = num;\n        }\n        big->bits[move] = big->bits[0] << shft;\n        big->used += move + (big->bits[big->used + move] > 0);\n        while (move) big->bits[--move] = 0;\n    }\n}\n\n/**\n Evaluate 'big *= 10^exp'.\n @param big A big number (can be 0).\n @param exp An exponent integer (cannot be 0).\n */\nstatic_inline void bigint_mul_pow10(bigint *big, i32 exp) {\n    for (; exp >= U64_POW10_MAX_EXP; exp -= U64_POW10_MAX_EXP) {\n        bigint_mul_u64(big, u64_pow10_table[U64_POW10_MAX_EXP]);\n    }\n    if (exp) {\n        bigint_mul_u64(big, u64_pow10_table[exp]);\n    }\n}\n\n/**\n Compare two bigint.\n @return -1 if 'a < b', +1 if 'a > b', 0 if 'a == b'.\n */\nstatic_inline i32 bigint_cmp(bigint *a, bigint *b) {\n    u32 idx = a->used;\n    if (a->used < b->used) return -1;\n    if (a->used > b->used) return +1;\n    while (idx-- > 0) {\n        u64 av = a->bits[idx];\n        u64 bv = b->bits[idx];\n        if (av < bv) return -1;\n        if (av > bv) return +1;\n    }\n    return 0;\n}\n\n/**\n Evaluate 'big = val'.\n @param big A big number (can be 0).\n @param val An unsigned integer (can be 0).\n */\nstatic_inline void bigint_set_u64(bigint *big, u64 val) {\n    big->used = 1;\n    big->bits[0] = val;\n}\n\n/** Set a bigint with floating point number string. */\nstatic_noinline void bigint_set_buf(bigint *big, u64 sig, i32 *exp,\n                                    u8 *sig_cut, u8 *sig_end, u8 *dot_pos) {\n    \n    if (unlikely(!sig_cut)) {\n        /* no digit cut, set significant part only */\n        bigint_set_u64(big, sig);\n        return;\n        \n    } else {\n        /* some digits were cut, read them from 'sig_cut' to 'sig_end' */\n        u8 *hdr = sig_cut;\n        u8 *cur = hdr;\n        u32 len = 0;\n        u64 val = 0;\n        bool dig_big_cut = false;\n        bool has_dot = (hdr < dot_pos) & (dot_pos < sig_end);\n        u32 dig_len_total = U64_SAFE_DIG + (u32)(sig_end - hdr) - has_dot;\n        \n        sig -= (*sig_cut >= '5'); /* sig was rounded before */\n        if (dig_len_total > F64_MAX_DEC_DIG) {\n            dig_big_cut = true;\n            sig_end -= dig_len_total - (F64_MAX_DEC_DIG + 1);\n            sig_end -= (dot_pos + 1 == sig_end);\n            dig_len_total = (F64_MAX_DEC_DIG + 1);\n        }\n        *exp -= (i32)dig_len_total - U64_SAFE_DIG;\n        \n        big->used = 1;\n        big->bits[0] = sig;\n        while (cur < sig_end) {\n            if (likely(cur != dot_pos)) {\n                val = val * 10 + (u8)(*cur++ - '0');\n                len++;\n                if (unlikely(cur == sig_end && dig_big_cut)) {\n                    /* The last digit must be non-zero,    */\n                    /* set it to '1' for correct rounding. */\n                    val = val - (val % 10) + 1;\n                }\n                if (len == U64_SAFE_DIG || cur == sig_end) {\n                    bigint_mul_pow10(big, (i32)len);\n                    bigint_add_u64(big, val);\n                    val = 0;\n                    len = 0;\n                }\n            } else {\n                cur++;\n            }\n        }\n    }\n}\n\n\n\n/*==============================================================================\n * Diy Floating Point\n *============================================================================*/\n\n/** \"Do It Yourself Floating Point\" struct. */\ntypedef struct diy_fp {\n    u64 sig; /* significand */\n    i32 exp; /* exponent, base 2 */\n    i32 pad; /* padding, useless */\n} diy_fp;\n\n/** Get cached rounded diy_fp with pow(10, e) The input value must in range\n    [POW10_SIG_TABLE_MIN_EXP, POW10_SIG_TABLE_MAX_EXP]. */\nstatic_inline diy_fp diy_fp_get_cached_pow10(i32 exp10) {\n    diy_fp fp;\n    u64 sig_ext;\n    pow10_table_get_sig(exp10, &fp.sig, &sig_ext);\n    pow10_table_get_exp(exp10, &fp.exp);\n    fp.sig += (sig_ext >> 63);\n    return fp;\n}\n\n/** Returns fp * fp2. */\nstatic_inline diy_fp diy_fp_mul(diy_fp fp, diy_fp fp2) {\n    u64 hi, lo;\n    u128_mul(fp.sig, fp2.sig, &hi, &lo);\n    fp.sig = hi + (lo >> 63);\n    fp.exp += fp2.exp + 64;\n    return fp;\n}\n\n/** Convert diy_fp to IEEE-754 raw value. */\nstatic_inline u64 diy_fp_to_ieee_raw(diy_fp fp) {\n    u64 sig = fp.sig;\n    i32 exp = fp.exp;\n    u32 lz_bits;\n    if (unlikely(fp.sig == 0)) return 0;\n    \n    lz_bits = u64_lz_bits(sig);\n    sig <<= lz_bits;\n    sig >>= F64_BITS - F64_SIG_FULL_BITS;\n    exp -= (i32)lz_bits;\n    exp += F64_BITS - F64_SIG_FULL_BITS;\n    exp += F64_SIG_BITS;\n    \n    if (unlikely(exp >= F64_MAX_BIN_EXP)) {\n        /* overflow */\n        return F64_RAW_INF;\n    } else if (likely(exp >= F64_MIN_BIN_EXP - 1)) {\n        /* normal */\n        exp += F64_EXP_BIAS;\n        return ((u64)exp << F64_SIG_BITS) | (sig & F64_SIG_MASK);\n    } else if (likely(exp >= F64_MIN_BIN_EXP - F64_SIG_FULL_BITS)) {\n        /* subnormal */\n        return sig >> (F64_MIN_BIN_EXP - exp - 1);\n    } else {\n        /* underflow */\n        return 0;\n    }\n}\n\n\n\n/*==============================================================================\n * JSON Number Reader (IEEE-754)\n *============================================================================*/\n\n/** Maximum exact pow10 exponent for double value. */\n#define F64_POW10_EXP_MAX_EXACT 22\n\n/** Cached pow10 table. */\nstatic const f64 f64_pow10_table[] = {\n    1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12,\n    1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22\n};\n\n/**\n Read a JSON number.\n \n 1. This function assume that the floating-point number is in IEEE-754 format.\n 2. This function support uint64/int64/double number. If an integer number\n    cannot fit in uint64/int64, it will returns as a double number. If a double\n    number is infinite, the return value is based on flag.\n 3. This function (with inline attribute) may generate a lot of instructions.\n */\nstatic_inline bool read_number(u8 **ptr,\n                               u8 **pre,\n                               yyjson_read_flag flg,\n                               yyjson_val *val,\n                               const char **msg) {\n    \n#define return_err(_pos, _msg) do { \\\n    *msg = _msg; \\\n    *end = _pos; \\\n    return false; \\\n} while (false)\n    \n#define return_0() do { \\\n    val->tag = YYJSON_TYPE_NUM | (u8)((u8)sign << 3); \\\n    val->uni.u64 = 0; \\\n    *end = cur; return true; \\\n} while (false)\n\n#define return_i64(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | (u8)((u8)sign << 3); \\\n    val->uni.u64 = (u64)(sign ? (u64)(~(_v) + 1) : (u64)(_v)); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_f64(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL; \\\n    val->uni.f64 = sign ? -(f64)(_v) : (f64)(_v); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_f64_bin(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL; \\\n    val->uni.u64 = ((u64)sign << 63) | (u64)(_v); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_inf() do { \\\n    if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw(); \\\n    if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) return_f64_bin(F64_RAW_INF); \\\n    else return_err(hdr, \"number is infinity when parsed as double\"); \\\n} while (false)\n    \n#define return_raw() do { \\\n    if (*pre) **pre = '\\0'; /* add null-terminator for previous raw string */ \\\n    val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW; \\\n    val->uni.str = (const char *)hdr; \\\n    *pre = cur; *end = cur; return true; \\\n} while (false)\n    \n    u8 *sig_cut = NULL; /* significant part cutting position for long number */\n    u8 *sig_end = NULL; /* significant part ending position */\n    u8 *dot_pos = NULL; /* decimal point position */\n    \n    u64 sig = 0; /* significant part of the number */\n    i32 exp = 0; /* exponent part of the number */\n    \n    bool exp_sign; /* temporary exponent sign from literal part */\n    i64 exp_sig = 0; /* temporary exponent number from significant part */\n    i64 exp_lit = 0; /* temporary exponent number from exponent literal part */\n    u64 num; /* temporary number for reading */\n    u8 *tmp; /* temporary cursor for reading */\n    \n    u8 *hdr = *ptr;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    bool sign;\n    \n    /* read number as raw string if has `YYJSON_READ_NUMBER_AS_RAW` flag */\n    if (unlikely(pre && !(flg & YYJSON_READ_BIGNUM_AS_RAW))) {\n        return read_number_raw(ptr, pre, flg, val, msg);\n    }\n    \n    sign = (*hdr == '-');\n    cur += sign;\n    \n    /* begin with a leading zero or non-digit */\n    if (unlikely(!digi_is_nonzero(*cur))) { /* 0 or non-digit char */\n        if (unlikely(*cur != '0')) { /* non-digit char */\n            if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) {\n                if (read_inf_or_nan(sign, &cur, pre, val)) {\n                    *end = cur;\n                    return true;\n                }\n            }\n            return_err(cur, \"no digit after minus sign\");\n        }\n        /* begin with 0 */\n        if (likely(!digi_is_digit_or_fp(*++cur))) return_0();\n        if (likely(*cur == '.')) {\n            dot_pos = cur++;\n            if (unlikely(!digi_is_digit(*cur))) {\n                return_err(cur, \"no digit after decimal point\");\n            }\n            while (unlikely(*cur == '0')) cur++;\n            if (likely(digi_is_digit(*cur))) {\n                /* first non-zero digit after decimal point */\n                sig = (u64)(*cur - '0'); /* read first digit */\n                cur--;\n                goto digi_frac_1; /* continue read fraction part */\n            }\n        }\n        if (unlikely(digi_is_digit(*cur))) {\n            return_err(cur - 1, \"number with leading zero is not allowed\");\n        }\n        if (unlikely(digi_is_exp(*cur))) { /* 0 with any exponent is still 0 */\n            cur += (usize)1 + digi_is_sign(cur[1]);\n            if (unlikely(!digi_is_digit(*cur))) {\n                return_err(cur, \"no digit after exponent sign\");\n            }\n            while (digi_is_digit(*++cur));\n        }\n        return_f64_bin(0);\n    }\n    \n    /* begin with non-zero digit */\n    sig = (u64)(*cur - '0');\n    \n    /*\n     Read integral part, same as the following code.\n     \n         for (int i = 1; i <= 18; i++) {\n            num = cur[i] - '0';\n            if (num <= 9) sig = num + sig * 10;\n            else goto digi_sepr_i;\n         }\n     */\n#define expr_intg(i) \\\n    if (likely((num = (u64)(cur[i] - (u8)'0')) <= 9)) sig = num + sig * 10; \\\n    else { goto digi_sepr_##i; }\n    repeat_in_1_18(expr_intg)\n#undef expr_intg\n    \n    \n    cur += 19; /* skip continuous 19 digits */\n    if (!digi_is_digit_or_fp(*cur)) {\n        /* this number is an integer consisting of 19 digits */\n        if (sign && (sig > ((u64)1 << 63))) { /* overflow */\n            if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw();\n            return_f64(normalized_u64_to_f64(sig));\n        }\n        return_i64(sig);\n    }\n    goto digi_intg_more; /* read more digits in integral part */\n    \n    \n    /* process first non-digit character */\n#define expr_sepr(i) \\\n    digi_sepr_##i: \\\n    if (likely(!digi_is_fp(cur[i]))) { cur += i; return_i64(sig); } \\\n    dot_pos = cur + i; \\\n    if (likely(cur[i] == '.')) goto digi_frac_##i; \\\n    cur += i; sig_end = cur; goto digi_exp_more;\n    repeat_in_1_18(expr_sepr)\n#undef expr_sepr\n    \n    \n    /* read fraction part */\n#define expr_frac(i) \\\n    digi_frac_##i: \\\n    if (likely((num = (u64)(cur[i + 1] - (u8)'0')) <= 9)) \\\n        sig = num + sig * 10; \\\n    else { goto digi_stop_##i; }\n    repeat_in_1_18(expr_frac)\n#undef expr_frac\n    \n    cur += 20; /* skip 19 digits and 1 decimal point */\n    if (!digi_is_digit(*cur)) goto digi_frac_end; /* fraction part end */\n    goto digi_frac_more; /* read more digits in fraction part */\n    \n    \n    /* significant part end */\n#define expr_stop(i) \\\n    digi_stop_##i: \\\n    cur += i + 1; \\\n    goto digi_frac_end;\n    repeat_in_1_18(expr_stop)\n#undef expr_stop\n    \n    \n    /* read more digits in integral part */\ndigi_intg_more:\n    if (digi_is_digit(*cur)) {\n        if (!digi_is_digit_or_fp(cur[1])) {\n            /* this number is an integer consisting of 20 digits */\n            num = (u64)(*cur - '0');\n            if ((sig < (U64_MAX / 10)) ||\n                (sig == (U64_MAX / 10) && num <= (U64_MAX % 10))) {\n                sig = num + sig * 10;\n                cur++;\n                /* convert to double if overflow */\n                if (sign) {\n                    if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw();\n                    return_f64(normalized_u64_to_f64(sig));\n                }\n                return_i64(sig);\n            }\n        }\n    }\n    \n    if (digi_is_exp(*cur)) {\n        dot_pos = cur;\n        goto digi_exp_more;\n    }\n    \n    if (*cur == '.') {\n        dot_pos = cur++;\n        if (!digi_is_digit(*cur)) {\n            return_err(cur, \"no digit after decimal point\");\n        }\n    }\n    \n    \n    /* read more digits in fraction part */\ndigi_frac_more:\n    sig_cut = cur; /* too large to fit in u64, excess digits need to be cut */\n    sig += (*cur >= '5'); /* round */\n    while (digi_is_digit(*++cur));\n    if (!dot_pos) {\n        if (!digi_is_fp(*cur) && (flg & YYJSON_READ_BIGNUM_AS_RAW)) {\n            return_raw(); /* it's a large integer */\n        }\n        dot_pos = cur;\n        if (*cur == '.') {\n            if (!digi_is_digit(*++cur)) {\n                return_err(cur, \"no digit after decimal point\");\n            }\n            while (digi_is_digit(*cur)) cur++;\n        }\n    }\n    exp_sig = (i64)(dot_pos - sig_cut);\n    exp_sig += (dot_pos < sig_cut);\n    \n    /* ignore trailing zeros */\n    tmp = cur - 1;\n    while (*tmp == '0' || *tmp == '.') tmp--;\n    if (tmp < sig_cut) {\n        sig_cut = NULL;\n    } else {\n        sig_end = cur;\n    }\n    \n    if (digi_is_exp(*cur)) goto digi_exp_more;\n    goto digi_exp_finish;\n    \n    \n    /* fraction part end */\ndigi_frac_end:\n    if (unlikely(dot_pos + 1 == cur)) {\n        return_err(cur, \"no digit after decimal point\");\n    }\n    sig_end = cur;\n    exp_sig = -(i64)((u64)(cur - dot_pos) - 1);\n    if (likely(!digi_is_exp(*cur))) {\n        if (unlikely(exp_sig < F64_MIN_DEC_EXP - 19)) {\n            return_f64_bin(0); /* underflow */\n        }\n        exp = (i32)exp_sig;\n        goto digi_finish;\n    } else {\n        goto digi_exp_more;\n    }\n    \n    \n    /* read exponent part */\ndigi_exp_more:\n    exp_sign = (*++cur == '-');\n    cur += digi_is_sign(*cur);\n    if (unlikely(!digi_is_digit(*cur))) {\n        return_err(cur, \"no digit after exponent sign\");\n    }\n    while (*cur == '0') cur++;\n    \n    /* read exponent literal */\n    tmp = cur;\n    while (digi_is_digit(*cur)) {\n        exp_lit = (i64)((u8)(*cur++ - '0') + (u64)exp_lit * 10);\n    }\n    if (unlikely(cur - tmp >= U64_SAFE_DIG)) {\n        if (exp_sign) {\n            return_f64_bin(0); /* underflow */\n        } else {\n            return_inf(); /* overflow */\n        }\n    }\n    exp_sig += exp_sign ? -exp_lit : exp_lit;\n    \n    \n    /* validate exponent value */\ndigi_exp_finish:\n    if (unlikely(exp_sig < F64_MIN_DEC_EXP - 19)) {\n        return_f64_bin(0); /* underflow */\n    }\n    if (unlikely(exp_sig > F64_MAX_DEC_EXP)) {\n        return_inf(); /* overflow */\n    }\n    exp = (i32)exp_sig;\n    \n    \n    /* all digit read finished */\ndigi_finish:\n    \n    /*\n     Fast path 1:\n     \n     1. The floating-point number calculation should be accurate, see the\n        comments of macro `YYJSON_DOUBLE_MATH_CORRECT`.\n     2. Correct rounding should be performed (fegetround() == FE_TONEAREST).\n     3. The input of floating point number calculation does not lose precision,\n        which means: 64 - leading_zero(input) - trailing_zero(input) < 53.\n    \n     We don't check all available inputs here, because that would make the code\n     more complicated, and not friendly to branch predictor.\n     */\n#if YYJSON_DOUBLE_MATH_CORRECT\n    if (sig < ((u64)1 << 53) &&\n        exp >= -F64_POW10_EXP_MAX_EXACT &&\n        exp <= +F64_POW10_EXP_MAX_EXACT) {\n        f64 dbl = (f64)sig;\n        if (exp < 0) {\n            dbl /= f64_pow10_table[-exp];\n        } else {\n            dbl *= f64_pow10_table[+exp];\n        }\n        return_f64(dbl);\n    }\n#endif\n    \n    /*\n     Fast path 2:\n     \n     To keep it simple, we only accept normal number here,\n     let the slow path to handle subnormal and infinity number.\n     */\n    if (likely(!sig_cut &&\n               exp > -F64_MAX_DEC_EXP + 1 &&\n               exp < +F64_MAX_DEC_EXP - 20)) {\n        /*\n         The result value is exactly equal to (sig * 10^exp),\n         the exponent part (10^exp) can be converted to (sig2 * 2^exp2).\n         \n         The sig2 can be an infinite length number, only the highest 128 bits\n         is cached in the pow10_sig_table.\n         \n         Now we have these bits:\n         sig1 (normalized 64bit)        : aaaaaaaa\n         sig2 (higher 64bit)            : bbbbbbbb\n         sig2_ext (lower 64bit)         : cccccccc\n         sig2_cut (extra unknown bits)  : dddddddddddd....\n         \n         And the calculation process is:\n         ----------------------------------------\n                 aaaaaaaa *\n                 bbbbbbbbccccccccdddddddddddd....\n         ----------------------------------------\n         abababababababab +\n                 acacacacacacacac +\n                         adadadadadadadadadad....\n         ----------------------------------------\n         [hi____][lo____] +\n                 [hi2___][lo2___] +\n                         [unknown___________....]\n         ----------------------------------------\n         \n         The addition with carry may affect higher bits, but if there is a 0\n         in higher bits, the bits higher than 0 will not be affected.\n         \n         `lo2` + `unknown` may get a carry bit and may affect `hi2`, the max\n         value of `hi2` is 0xFFFFFFFFFFFFFFFE, so `hi2` will not overflow.\n         \n         `lo` + `hi2` may also get a carry bit and may affect `hi`, but only\n         the highest significant 53 bits of `hi` is needed. If there is a 0\n         in the lower bits of `hi`, then all the following bits can be dropped.\n         \n         To convert the result to IEEE-754 double number, we need to perform\n         correct rounding:\n         1. if bit 54 is 0, round down,\n         2. if bit 54 is 1 and any bit beyond bit 54 is 1, round up,\n         3. if bit 54 is 1 and all bits beyond bit 54 are 0, round to even,\n            as the extra bits is unknown, this case will not be handled here.\n         */\n        \n        u64 raw;\n        u64 sig1, sig2, sig2_ext, hi, lo, hi2, lo2, add, bits;\n        i32 exp2;\n        u32 lz;\n        bool exact = false, carry, round_up;\n        \n        /* convert (10^exp) to (sig2 * 2^exp2) */\n        pow10_table_get_sig(exp, &sig2, &sig2_ext);\n        pow10_table_get_exp(exp, &exp2);\n        \n        /* normalize and multiply */\n        lz = u64_lz_bits(sig);\n        sig1 = sig << lz;\n        exp2 -= (i32)lz;\n        u128_mul(sig1, sig2, &hi, &lo);\n        \n        /*\n         The `hi` is in range [0x4000000000000000, 0xFFFFFFFFFFFFFFFE],\n         To get normalized value, `hi` should be shifted to the left by 0 or 1.\n         \n         The highest significant 53 bits is used by IEEE-754 double number,\n         and the bit 54 is used to detect rounding direction.\n         \n         The lowest (64 - 54 - 1) bits is used to check whether it contains 0.\n         */\n        bits = hi & (((u64)1 << (64 - 54 - 1)) - 1);\n        if (bits - 1 < (((u64)1 << (64 - 54 - 1)) - 2)) {\n            /*\n             (bits != 0 && bits != 0x1FF) => (bits - 1 < 0x1FF - 1)\n             The `bits` is not zero, so we don't need to check `round to even`\n             case. The `bits` contains bit `0`, so we can drop the extra bits\n             after `0`.\n             */\n            exact = true;\n            \n        } else {\n            /*\n             (bits == 0 || bits == 0x1FF)\n             The `bits` is filled with all `0` or all `1`, so we need to check\n             lower bits with another 64-bit multiplication.\n             */\n            u128_mul(sig1, sig2_ext, &hi2, &lo2);\n            \n            add = lo + hi2;\n            if (add + 1 > (u64)1) {\n                /*\n                 (add != 0 && add != U64_MAX) => (add + 1 > 1)\n                 The `add` is not zero, so we don't need to check `round to\n                 even` case. The `add` contains bit `0`, so we can drop the\n                 extra bits after `0`. The `hi` cannot be U64_MAX, so it will\n                 not overflow.\n                 */\n                carry = add < lo || add < hi2;\n                hi += carry;\n                exact = true;\n            }\n        }\n        \n        if (exact) {\n            /* normalize */\n            lz = hi < ((u64)1 << 63);\n            hi <<= lz;\n            exp2 -= (i32)lz;\n            exp2 += 64;\n            \n            /* test the bit 54 and get rounding direction */\n            round_up = (hi & ((u64)1 << (64 - 54))) > (u64)0;\n            hi += (round_up ? ((u64)1 << (64 - 54)) : (u64)0);\n            \n            /* test overflow */\n            if (hi < ((u64)1 << (64 - 54))) {\n                hi = ((u64)1 << 63);\n                exp2 += 1;\n            }\n            \n            /* This is a normal number, convert it to IEEE-754 format. */\n            hi >>= F64_BITS - F64_SIG_FULL_BITS;\n            exp2 += F64_BITS - F64_SIG_FULL_BITS + F64_SIG_BITS;\n            exp2 += F64_EXP_BIAS;\n            raw = ((u64)exp2 << F64_SIG_BITS) | (hi & F64_SIG_MASK);\n            return_f64_bin(raw);\n        }\n    }\n    \n    /*\n     Slow path: read double number exactly with diyfp.\n     1. Use cached diyfp to get an approximation value.\n     2. Use bigcomp to check the approximation value if needed.\n     \n     This algorithm refers to google's double-conversion project:\n     https://github.com/google/double-conversion\n     */\n    {\n        const i32 ERR_ULP_LOG = 3;\n        const i32 ERR_ULP = 1 << ERR_ULP_LOG;\n        const i32 ERR_CACHED_POW = ERR_ULP / 2;\n        const i32 ERR_MUL_FIXED = ERR_ULP / 2;\n        const i32 DIY_SIG_BITS = 64;\n        const i32 EXP_BIAS = F64_EXP_BIAS + F64_SIG_BITS;\n        const i32 EXP_SUBNORMAL = -EXP_BIAS + 1;\n        \n        u64 fp_err;\n        u32 bits;\n        i32 order_of_magnitude;\n        i32 effective_significand_size;\n        i32 precision_digits_count;\n        u64 precision_bits;\n        u64 half_way;\n        \n        u64 raw;\n        diy_fp fp, fp_upper;\n        bigint big_full, big_comp;\n        i32 cmp;\n        \n        fp.sig = sig;\n        fp.exp = 0;\n        fp_err = sig_cut ? (u64)(ERR_ULP / 2) : (u64)0;\n        \n        /* normalize */\n        bits = u64_lz_bits(fp.sig);\n        fp.sig <<= bits;\n        fp.exp -= (i32)bits;\n        fp_err <<= bits;\n        \n        /* multiply and add error */\n        fp = diy_fp_mul(fp, diy_fp_get_cached_pow10(exp));\n        fp_err += (u64)ERR_CACHED_POW + (fp_err != 0) + (u64)ERR_MUL_FIXED;\n        \n        /* normalize */\n        bits = u64_lz_bits(fp.sig);\n        fp.sig <<= bits;\n        fp.exp -= (i32)bits;\n        fp_err <<= bits;\n        \n        /* effective significand */\n        order_of_magnitude = DIY_SIG_BITS + fp.exp;\n        if (likely(order_of_magnitude >= EXP_SUBNORMAL + F64_SIG_FULL_BITS)) {\n            effective_significand_size = F64_SIG_FULL_BITS;\n        } else if (order_of_magnitude <= EXP_SUBNORMAL) {\n            effective_significand_size = 0;\n        } else {\n            effective_significand_size = order_of_magnitude - EXP_SUBNORMAL;\n        }\n        \n        /* precision digits count */\n        precision_digits_count = DIY_SIG_BITS - effective_significand_size;\n        if (unlikely(precision_digits_count + ERR_ULP_LOG >= DIY_SIG_BITS)) {\n            i32 shr = (precision_digits_count + ERR_ULP_LOG) - DIY_SIG_BITS + 1;\n            fp.sig >>= shr;\n            fp.exp += shr;\n            fp_err = (fp_err >> shr) + 1 + (u32)ERR_ULP;\n            precision_digits_count -= shr;\n        }\n        \n        /* half way */\n        precision_bits = fp.sig & (((u64)1 << precision_digits_count) - 1);\n        precision_bits *= (u32)ERR_ULP;\n        half_way = (u64)1 << (precision_digits_count - 1);\n        half_way *= (u32)ERR_ULP;\n        \n        /* rounding */\n        fp.sig >>= precision_digits_count;\n        fp.sig += (precision_bits >= half_way + fp_err);\n        fp.exp += precision_digits_count;\n        \n        /* get IEEE double raw value */\n        raw = diy_fp_to_ieee_raw(fp);\n        if (unlikely(raw == F64_RAW_INF)) return_inf();\n        if (likely(precision_bits <= half_way - fp_err ||\n                   precision_bits >= half_way + fp_err)) {\n            return_f64_bin(raw); /* number is accurate */\n        }\n        /* now the number is the correct value, or the next lower value */\n        \n        /* upper boundary */\n        if (raw & F64_EXP_MASK) {\n            fp_upper.sig = (raw & F64_SIG_MASK) + ((u64)1 << F64_SIG_BITS);\n            fp_upper.exp = (i32)((raw & F64_EXP_MASK) >> F64_SIG_BITS);\n        } else {\n            fp_upper.sig = (raw & F64_SIG_MASK);\n            fp_upper.exp = 1;\n        }\n        fp_upper.exp -= F64_EXP_BIAS + F64_SIG_BITS;\n        fp_upper.sig <<= 1;\n        fp_upper.exp -= 1;\n        fp_upper.sig += 1; /* add half ulp */\n        \n        /* compare with bigint */\n        bigint_set_buf(&big_full, sig, &exp, sig_cut, sig_end, dot_pos);\n        bigint_set_u64(&big_comp, fp_upper.sig);\n        if (exp >= 0) {\n            bigint_mul_pow10(&big_full, +exp);\n        } else {\n            bigint_mul_pow10(&big_comp, -exp);\n        }\n        if (fp_upper.exp > 0) {\n            bigint_mul_pow2(&big_comp, (u32)+fp_upper.exp);\n        } else {\n            bigint_mul_pow2(&big_full, (u32)-fp_upper.exp);\n        }\n        cmp = bigint_cmp(&big_full, &big_comp);\n        if (likely(cmp != 0)) {\n            /* round down or round up */\n            raw += (cmp > 0);\n        } else {\n            /* falls midway, round to even */\n            raw += (raw & 1);\n        }\n        \n        if (unlikely(raw == F64_RAW_INF)) return_inf();\n        return_f64_bin(raw);\n    }\n    \n#undef return_err\n#undef return_inf\n#undef return_0\n#undef return_i64\n#undef return_f64\n#undef return_f64_bin\n#undef return_raw\n}\n\n\n\n#else /* FP_READER */\n\n/**\n Read a JSON number.\n This is a fallback function if the custom number reader is disabled.\n This function use libc's strtod() to read floating-point number.\n */\nstatic_noinline bool read_number(u8 **ptr,\n                                 u8 **pre,\n                                 yyjson_read_flag flg,\n                                 yyjson_val *val,\n                                 const char **msg) {\n    \n#define return_err(_pos, _msg) do { \\\n    *msg = _msg; \\\n    *end = _pos; \\\n    return false; \\\n} while (false)\n    \n#define return_0() do { \\\n    val->tag = YYJSON_TYPE_NUM | (u64)((u8)sign << 3); \\\n    val->uni.u64 = 0; \\\n    *end = cur; return true; \\\n} while (false)\n\n#define return_i64(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | (u64)((u8)sign << 3); \\\n    val->uni.u64 = (u64)(sign ? (u64)(~(_v) + 1) : (u64)(_v)); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_f64(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL; \\\n    val->uni.f64 = sign ? -(f64)(_v) : (f64)(_v); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_f64_bin(_v) do { \\\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL; \\\n    val->uni.u64 = ((u64)sign << 63) | (u64)(_v); \\\n    *end = cur; return true; \\\n} while (false)\n    \n#define return_inf() do { \\\n    if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw(); \\\n    if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) return_f64_bin(F64_RAW_INF); \\\n    else return_err(hdr, \"number is infinity when parsed as double\"); \\\n} while (false)\n    \n#define return_raw() do { \\\n    if (*pre) **pre = '\\0'; /* add null-terminator for previous raw string */ \\\n    val->tag = ((u64)(cur - hdr) << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW; \\\n    val->uni.str = (const char *)hdr; \\\n    *pre = cur; *end = cur; return true; \\\n} while (false)\n    \n    u64 sig, num;\n    u8 *hdr = *ptr;\n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    u8 *dot = NULL;\n    u8 *f64_end = NULL;\n    bool sign;\n    \n    /* read number as raw string if has `YYJSON_READ_NUMBER_AS_RAW` flag */\n    if (unlikely(pre && !(flg & YYJSON_READ_BIGNUM_AS_RAW))) {\n        return read_number_raw(ptr, pre, flg, val, msg);\n    }\n    \n    sign = (*hdr == '-');\n    cur += sign;\n    sig = (u8)(*cur - '0');\n    \n    /* read first digit, check leading zero */\n    if (unlikely(!digi_is_digit(*cur))) {\n        if (flg & YYJSON_READ_ALLOW_INF_AND_NAN) {\n            if (read_inf_or_nan(sign, &cur, pre, val)) {\n                *end = cur;\n                return true;\n            }\n        }\n        return_err(cur, \"no digit after minus sign\");\n    }\n    if (*cur == '0') {\n        cur++;\n        if (unlikely(digi_is_digit(*cur))) {\n            return_err(cur - 1, \"number with leading zero is not allowed\");\n        }\n        if (!digi_is_fp(*cur)) return_0();\n        goto read_double;\n    }\n    \n    /* read continuous digits, up to 19 characters */\n#define expr_intg(i) \\\n    if (likely((num = (u64)(cur[i] - (u8)'0')) <= 9)) sig = num + sig * 10; \\\n    else { cur += i; goto intg_end; }\n    repeat_in_1_18(expr_intg)\n#undef expr_intg\n    \n    /* here are 19 continuous digits, skip them */\n    cur += 19;\n    if (digi_is_digit(cur[0]) && !digi_is_digit_or_fp(cur[1])) {\n        /* this number is an integer consisting of 20 digits */\n        num = (u8)(*cur - '0');\n        if ((sig < (U64_MAX / 10)) ||\n            (sig == (U64_MAX / 10) && num <= (U64_MAX % 10))) {\n            sig = num + sig * 10;\n            cur++;\n            if (sign) {\n                if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw();\n                return_f64(normalized_u64_to_f64(sig));\n            }\n            return_i64(sig);\n        }\n    }\n    \nintg_end:\n    /* continuous digits ended */\n    if (!digi_is_digit_or_fp(*cur)) {\n        /* this number is an integer consisting of 1 to 19 digits */\n        if (sign && (sig > ((u64)1 << 63))) {\n            if (flg & YYJSON_READ_BIGNUM_AS_RAW) return_raw();\n            return_f64(normalized_u64_to_f64(sig));\n        }\n        return_i64(sig);\n    }\n    \nread_double:\n    /* this number should be read as double */\n    while (digi_is_digit(*cur)) cur++;\n    if (!digi_is_fp(*cur) && (flg & YYJSON_READ_BIGNUM_AS_RAW)) {\n        return_raw(); /* it's a large integer */\n    }\n    if (*cur == '.') {\n        /* skip fraction part */\n        dot = cur;\n        cur++;\n        if (!digi_is_digit(*cur)) {\n            return_err(cur, \"no digit after decimal point\");\n        }\n        cur++;\n        while (digi_is_digit(*cur)) cur++;\n    }\n    if (digi_is_exp(*cur)) {\n        /* skip exponent part */\n        cur += 1 + digi_is_sign(cur[1]);\n        if (!digi_is_digit(*cur)) {\n            return_err(cur, \"no digit after exponent sign\");\n        }\n        cur++;\n        while (digi_is_digit(*cur)) cur++;\n    }\n    \n    /*\n     libc's strtod() is used to parse the floating-point number.\n     \n     Note that the decimal point character used by strtod() is locale-dependent,\n     and the rounding direction may affected by fesetround().\n     \n     For currently known locales, (en, zh, ja, ko, am, he, hi) use '.' as the\n     decimal point, while other locales use ',' as the decimal point.\n     \n     Here strtod() is called twice for different locales, but if another thread\n     happens calls setlocale() between two strtod(), parsing may still fail.\n     */\n    val->uni.f64 = strtod((const char *)hdr, (char **)&f64_end);\n    if (unlikely(f64_end != cur)) {\n        /* replace '.' with ',' for locale */\n        bool cut = (*cur == ',');\n        if (cut) *cur = ' ';\n        if (dot) *dot = ',';\n        val->uni.f64 = strtod((const char *)hdr, (char **)&f64_end);\n        /* restore ',' to '.' */\n        if (cut) *cur = ',';\n        if (dot) *dot = '.';\n        if (unlikely(f64_end != cur)) {\n            return_err(hdr, \"strtod() failed to parse the number\");\n        }\n    }\n    if (unlikely(val->uni.f64 >= HUGE_VAL || val->uni.f64 <= -HUGE_VAL)) {\n        return_inf();\n    }\n    val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n    *end = cur;\n    return true;\n    \n#undef return_err\n#undef return_0\n#undef return_i64\n#undef return_f64\n#undef return_f64_bin\n#undef return_inf\n#undef return_raw\n}\n\n#endif /* FP_READER */\n\n\n\n/*==============================================================================\n * JSON String Reader\n *============================================================================*/\n\n/**\n Read a JSON string.\n @param ptr The head pointer of string before '\"' prefix (inout).\n @param lst JSON last position.\n @param inv Allow invalid unicode.\n @param val The string value to be written.\n @param msg The error message pointer.\n @return Whether success.\n */\nstatic_inline bool read_string(u8 **ptr,\n                               u8 *lst,\n                               bool inv,\n                               yyjson_val *val,\n                               const char **msg) {\n    /*\n     Each unicode code point is encoded as 1 to 4 bytes in UTF-8 encoding,\n     we use 4-byte mask and pattern value to validate UTF-8 byte sequence,\n     this requires the input data to have 4-byte zero padding.\n     ---------------------------------------------------\n     1 byte\n     unicode range [U+0000, U+007F]\n     unicode min   [.......0]\n     unicode max   [.1111111]\n     bit pattern   [0.......]\n     ---------------------------------------------------\n     2 byte\n     unicode range [U+0080, U+07FF]\n     unicode min   [......10 ..000000]\n     unicode max   [...11111 ..111111]\n     bit require   [...xxxx. ........] (1E 00)\n     bit mask      [xxx..... xx......] (E0 C0)\n     bit pattern   [110..... 10......] (C0 80)\n     ---------------------------------------------------\n     3 byte\n     unicode range [U+0800, U+FFFF]\n     unicode min   [........ ..100000 ..000000]\n     unicode max   [....1111 ..111111 ..111111]\n     bit require   [....xxxx ..x..... ........] (0F 20 00)\n     bit mask      [xxxx.... xx...... xx......] (F0 C0 C0)\n     bit pattern   [1110.... 10...... 10......] (E0 80 80)\n     ---------------------------------------------------\n     3 byte invalid (reserved for surrogate halves)\n     unicode range [U+D800, U+DFFF]\n     unicode min   [....1101 ..100000 ..000000]\n     unicode max   [....1101 ..111111 ..111111]\n     bit mask      [....xxxx ..x..... ........] (0F 20 00)\n     bit pattern   [....1101 ..1..... ........] (0D 20 00)\n     ---------------------------------------------------\n     4 byte\n     unicode range [U+10000, U+10FFFF]\n     unicode min   [........ ...10000 ..000000 ..000000]\n     unicode max   [.....100 ..001111 ..111111 ..111111]\n     bit require   [.....xxx ..xx.... ........ ........] (07 30 00 00)\n     bit mask      [xxxxx... xx...... xx...... xx......] (F8 C0 C0 C0)\n     bit pattern   [11110... 10...... 10...... 10......] (F0 80 80 80)\n     ---------------------------------------------------\n     */\n#if YYJSON_ENDIAN == YYJSON_BIG_ENDIAN\n    const u32 b1_mask = 0x80000000UL;\n    const u32 b1_patt = 0x00000000UL;\n    const u32 b2_mask = 0xE0C00000UL;\n    const u32 b2_patt = 0xC0800000UL;\n    const u32 b2_requ = 0x1E000000UL;\n    const u32 b3_mask = 0xF0C0C000UL;\n    const u32 b3_patt = 0xE0808000UL;\n    const u32 b3_requ = 0x0F200000UL;\n    const u32 b3_erro = 0x0D200000UL;\n    const u32 b4_mask = 0xF8C0C0C0UL;\n    const u32 b4_patt = 0xF0808080UL;\n    const u32 b4_requ = 0x07300000UL;\n    const u32 b4_err0 = 0x04000000UL;\n    const u32 b4_err1 = 0x03300000UL;\n#elif YYJSON_ENDIAN == YYJSON_LITTLE_ENDIAN\n    const u32 b1_mask = 0x00000080UL;\n    const u32 b1_patt = 0x00000000UL;\n    const u32 b2_mask = 0x0000C0E0UL;\n    const u32 b2_patt = 0x000080C0UL;\n    const u32 b2_requ = 0x0000001EUL;\n    const u32 b3_mask = 0x00C0C0F0UL;\n    const u32 b3_patt = 0x008080E0UL;\n    const u32 b3_requ = 0x0000200FUL;\n    const u32 b3_erro = 0x0000200DUL;\n    const u32 b4_mask = 0xC0C0C0F8UL;\n    const u32 b4_patt = 0x808080F0UL;\n    const u32 b4_requ = 0x00003007UL;\n    const u32 b4_err0 = 0x00000004UL;\n    const u32 b4_err1 = 0x00003003UL;\n#else\n    v32_uni b1_mask_uni = {{ 0x80, 0x00, 0x00, 0x00 }};\n    v32_uni b1_patt_uni = {{ 0x00, 0x00, 0x00, 0x00 }};\n    v32_uni b2_mask_uni = {{ 0xE0, 0xC0, 0x00, 0x00 }};\n    v32_uni b2_patt_uni = {{ 0xC0, 0x80, 0x00, 0x00 }};\n    v32_uni b2_requ_uni = {{ 0x1E, 0x00, 0x00, 0x00 }};\n    v32_uni b3_mask_uni = {{ 0xF0, 0xC0, 0xC0, 0x00 }};\n    v32_uni b3_patt_uni = {{ 0xE0, 0x80, 0x80, 0x00 }};\n    v32_uni b3_requ_uni = {{ 0x0F, 0x20, 0x00, 0x00 }};\n    v32_uni b3_erro_uni = {{ 0x0D, 0x20, 0x00, 0x00 }};\n    v32_uni b4_mask_uni = {{ 0xF8, 0xC0, 0xC0, 0xC0 }};\n    v32_uni b4_patt_uni = {{ 0xF0, 0x80, 0x80, 0x80 }};\n    v32_uni b4_requ_uni = {{ 0x07, 0x30, 0x00, 0x00 }};\n    v32_uni b4_err0_uni = {{ 0x04, 0x00, 0x00, 0x00 }};\n    v32_uni b4_err1_uni = {{ 0x03, 0x30, 0x00, 0x00 }};\n    u32 b1_mask = b1_mask_uni.u;\n    u32 b1_patt = b1_patt_uni.u;\n    u32 b2_mask = b2_mask_uni.u;\n    u32 b2_patt = b2_patt_uni.u;\n    u32 b2_requ = b2_requ_uni.u;\n    u32 b3_mask = b3_mask_uni.u;\n    u32 b3_patt = b3_patt_uni.u;\n    u32 b3_requ = b3_requ_uni.u;\n    u32 b3_erro = b3_erro_uni.u;\n    u32 b4_mask = b4_mask_uni.u;\n    u32 b4_patt = b4_patt_uni.u;\n    u32 b4_requ = b4_requ_uni.u;\n    u32 b4_err0 = b4_err0_uni.u;\n    u32 b4_err1 = b4_err1_uni.u;\n#endif\n    \n#define is_valid_seq_1(uni) ( \\\n    ((uni & b1_mask) == b1_patt) \\\n)\n\n#define is_valid_seq_2(uni) ( \\\n    ((uni & b2_mask) == b2_patt) && \\\n    ((uni & b2_requ)) \\\n)\n    \n#define is_valid_seq_3(uni) ( \\\n    ((uni & b3_mask) == b3_patt) && \\\n    ((tmp = (uni & b3_requ))) && \\\n    ((tmp != b3_erro)) \\\n)\n    \n#define is_valid_seq_4(uni) ( \\\n    ((uni & b4_mask) == b4_patt) && \\\n    ((tmp = (uni & b4_requ))) && \\\n    ((tmp & b4_err0) == 0 || (tmp & b4_err1) == 0) \\\n)\n    \n#define return_err(_end, _msg) do { \\\n    *msg = _msg; \\\n    *end = _end; \\\n    return false; \\\n} while (false)\n    \n    u8 *cur = *ptr;\n    u8 **end = ptr;\n    u8 *src = ++cur, *dst, *pos;\n    u16 hi, lo;\n    u32 uni, tmp;\n    \nskip_ascii:\n    /* Most strings have no escaped characters, so we can jump them quickly. */\n    \nskip_ascii_begin:\n    /*\n     We want to make loop unrolling, as shown in the following code. Some\n     compiler may not generate instructions as expected, so we rewrite it with\n     explicit goto statements. We hope the compiler can generate instructions\n     like this: https://godbolt.org/z/8vjsYq\n     \n         while (true) repeat16({\n            if (likely(!(char_is_ascii_stop(*src)))) src++;\n            else break;\n         })\n     */\n#define expr_jump(i) \\\n    if (likely(!char_is_ascii_stop(src[i]))) {} \\\n    else goto skip_ascii_stop##i;\n    \n#define expr_stop(i) \\\n    skip_ascii_stop##i: \\\n    src += i; \\\n    goto skip_ascii_end;\n    \n    repeat16_incr(expr_jump)\n    src += 16;\n    goto skip_ascii_begin;\n    repeat16_incr(expr_stop)\n    \n#undef expr_jump\n#undef expr_stop\n    \nskip_ascii_end:\n    \n    /*\n     GCC may store src[i] in a register at each line of expr_jump(i) above.\n     These instructions are useless and will degrade performance.\n     This inline asm is a hint for gcc: \"the memory has been modified,\n     do not cache it\".\n     \n     MSVC, Clang, ICC can generate expected instructions without this hint.\n     */\n#if YYJSON_IS_REAL_GCC\n    __asm__ volatile(\"\":\"=m\"(*src));\n#endif\n    if (likely(*src == '\"')) {\n        val->tag = ((u64)(src - cur) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = (const char *)cur;\n        *src = '\\0';\n        *end = src + 1;\n        return true;\n    }\n    \nskip_utf8:\n    if (*src & 0x80) { /* non-ASCII character */\n        /*\n         Non-ASCII character appears here, which means that the text is likely\n         to be written in non-English or emoticons. According to some common\n         data set statistics, byte sequences of the same length may appear\n         consecutively. We process the byte sequences of the same length in each\n         loop, which is more friendly to branch prediction.\n         */\n        pos = src;\n        uni = byte_load_4(src);\n        while (is_valid_seq_3(uni)) {\n            src += 3;\n            uni = byte_load_4(src);\n        }\n        if (is_valid_seq_1(uni)) goto skip_ascii;\n        while (is_valid_seq_2(uni)) {\n            src += 2;\n            uni = byte_load_4(src);\n        }\n        while (is_valid_seq_4(uni)) {\n            src += 4;\n            uni = byte_load_4(src);\n        }\n        if (unlikely(pos == src)) {\n            if (!inv) return_err(src, \"invalid UTF-8 encoding in string\");\n            ++src;\n        }\n        goto skip_ascii;\n    }\n    \n    /* The escape character appears, we need to copy it. */\n    dst = src;\ncopy_escape:\n    if (likely(*src == '\\\\')) {\n        switch (*++src) {\n            case '\"':  *dst++ = '\"';  src++; break;\n            case '\\\\': *dst++ = '\\\\'; src++; break;\n            case '/':  *dst++ = '/';  src++; break;\n            case 'b':  *dst++ = '\\b'; src++; break;\n            case 'f':  *dst++ = '\\f'; src++; break;\n            case 'n':  *dst++ = '\\n'; src++; break;\n            case 'r':  *dst++ = '\\r'; src++; break;\n            case 't':  *dst++ = '\\t'; src++; break;\n            case 'u':\n                if (unlikely(!read_hex_u16(++src, &hi))) {\n                    return_err(src - 2, \"invalid escaped sequence in string\");\n                }\n                src += 4;\n                if (likely((hi & 0xF800) != 0xD800)) {\n                    /* a BMP character */\n                    if (hi >= 0x800) {\n                        *dst++ = (u8)(0xE0 | (hi >> 12));\n                        *dst++ = (u8)(0x80 | ((hi >> 6) & 0x3F));\n                        *dst++ = (u8)(0x80 | (hi & 0x3F));\n                    } else if (hi >= 0x80) {\n                        *dst++ = (u8)(0xC0 | (hi >> 6));\n                        *dst++ = (u8)(0x80 | (hi & 0x3F));\n                    } else {\n                        *dst++ = (u8)hi;\n                    }\n                } else {\n                    /* a non-BMP character, represented as a surrogate pair */\n                    if (unlikely((hi & 0xFC00) != 0xD800)) {\n                        return_err(src - 6, \"invalid high surrogate in string\");\n                    }\n                    if (unlikely(!byte_match_2(src, \"\\\\u\"))) {\n                        return_err(src, \"no low surrogate in string\");\n                    }\n                    if (unlikely(!read_hex_u16(src + 2, &lo))) {\n                        return_err(src, \"invalid escaped sequence in string\");\n                    }\n                    if (unlikely((lo & 0xFC00) != 0xDC00)) {\n                        return_err(src, \"invalid low surrogate in string\");\n                    }\n                    uni = ((((u32)hi - 0xD800) << 10) |\n                            ((u32)lo - 0xDC00)) + 0x10000;\n                    *dst++ = (u8)(0xF0 | (uni >> 18));\n                    *dst++ = (u8)(0x80 | ((uni >> 12) & 0x3F));\n                    *dst++ = (u8)(0x80 | ((uni >> 6) & 0x3F));\n                    *dst++ = (u8)(0x80 | (uni & 0x3F));\n                    src += 6;\n                }\n                break;\n            default: return_err(src, \"invalid escaped character in string\");\n        }\n    } else if (likely(*src == '\"')) {\n        val->tag = ((u64)(dst - cur) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = (const char *)cur;\n        *dst = '\\0';\n        *end = src + 1;\n        return true;\n    } else {\n        if (!inv) return_err(src, \"unexpected control character in string\");\n        if (src >= lst) return_err(src, \"unclosed string\");\n        *dst++ = *src++;\n    }\n    \ncopy_ascii:\n    /*\n     Copy continuous ASCII, loop unrolling, same as the following code:\n     \n         while (true) repeat16({\n            if (unlikely(char_is_ascii_stop(*src))) break;\n            *dst++ = *src++;\n         })\n     */\n#if YYJSON_IS_REAL_GCC\n#   define expr_jump(i) \\\n    if (likely(!(char_is_ascii_stop(src[i])))) {} \\\n    else { __asm__ volatile(\"\":\"=m\"(src[i])); goto copy_ascii_stop_##i; }\n#else\n#   define expr_jump(i) \\\n    if (likely(!(char_is_ascii_stop(src[i])))) {} \\\n    else { goto copy_ascii_stop_##i; }\n#endif\n    repeat16_incr(expr_jump)\n#undef expr_jump\n    \n    byte_move_16(dst, src);\n    src += 16;\n    dst += 16;\n    goto copy_ascii;\n    \ncopy_ascii_stop_0:\n    goto copy_utf8;\ncopy_ascii_stop_1:\n    byte_move_2(dst, src);\n    src += 1;\n    dst += 1;\n    goto copy_utf8;\ncopy_ascii_stop_2:\n    byte_move_2(dst, src);\n    src += 2;\n    dst += 2;\n    goto copy_utf8;\ncopy_ascii_stop_3:\n    byte_move_4(dst, src);\n    src += 3;\n    dst += 3;\n    goto copy_utf8;\ncopy_ascii_stop_4:\n    byte_move_4(dst, src);\n    src += 4;\n    dst += 4;\n    goto copy_utf8;\ncopy_ascii_stop_5:\n    byte_move_4(dst, src);\n    byte_move_2(dst + 4, src + 4);\n    src += 5;\n    dst += 5;\n    goto copy_utf8;\ncopy_ascii_stop_6:\n    byte_move_4(dst, src);\n    byte_move_2(dst + 4, src + 4);\n    src += 6;\n    dst += 6;\n    goto copy_utf8;\ncopy_ascii_stop_7:\n    byte_move_8(dst, src);\n    src += 7;\n    dst += 7;\n    goto copy_utf8;\ncopy_ascii_stop_8:\n    byte_move_8(dst, src);\n    src += 8;\n    dst += 8;\n    goto copy_utf8;\ncopy_ascii_stop_9:\n    byte_move_8(dst, src);\n    byte_move_2(dst + 8, src + 8);\n    src += 9;\n    dst += 9;\n    goto copy_utf8;\ncopy_ascii_stop_10:\n    byte_move_8(dst, src);\n    byte_move_2(dst + 8, src + 8);\n    src += 10;\n    dst += 10;\n    goto copy_utf8;\ncopy_ascii_stop_11:\n    byte_move_8(dst, src);\n    byte_move_4(dst + 8, src + 8);\n    src += 11;\n    dst += 11;\n    goto copy_utf8;\ncopy_ascii_stop_12:\n    byte_move_8(dst, src);\n    byte_move_4(dst + 8, src + 8);\n    src += 12;\n    dst += 12;\n    goto copy_utf8;\ncopy_ascii_stop_13:\n    byte_move_8(dst, src);\n    byte_move_4(dst + 8, src + 8);\n    byte_move_2(dst + 12, src + 12);\n    src += 13;\n    dst += 13;\n    goto copy_utf8;\ncopy_ascii_stop_14:\n    byte_move_8(dst, src);\n    byte_move_4(dst + 8, src + 8);\n    byte_move_2(dst + 12, src + 12);\n    src += 14;\n    dst += 14;\n    goto copy_utf8;\ncopy_ascii_stop_15:\n    byte_move_16(dst, src);\n    src += 15;\n    dst += 15;\n    goto copy_utf8;\n    \ncopy_utf8:\n    if (*src & 0x80) { /* non-ASCII character */\n        pos = src;\n        uni = byte_load_4(src);\n        while (is_valid_seq_3(uni)) {\n            byte_move_4(dst, &uni);\n            dst += 3;\n            src += 3;\n            uni = byte_load_4(src);\n        }\n        if (is_valid_seq_1(uni)) goto copy_ascii;\n        while (is_valid_seq_2(uni)) {\n            byte_move_2(dst, &uni);\n            dst += 2;\n            src += 2;\n            uni = byte_load_4(src);\n        }\n        while (is_valid_seq_4(uni)) {\n            byte_move_4(dst, &uni);\n            dst += 4;\n            src += 4;\n            uni = byte_load_4(src);\n        }\n        if (unlikely(pos == src)) {\n            if (!inv) return_err(src, \"invalid UTF-8 encoding in string\");\n            goto copy_ascii_stop_1;\n        }\n        goto copy_ascii;\n    }\n    goto copy_escape;\n    \n#undef return_err\n#undef is_valid_seq_1\n#undef is_valid_seq_2\n#undef is_valid_seq_3\n#undef is_valid_seq_4\n}\n\n\n\n/*==============================================================================\n * JSON Reader Implementation\n *\n * We use goto statements to build the finite state machine (FSM).\n * The FSM's state was held by program counter (PC) and the 'goto' make the\n * state transitions.\n *============================================================================*/\n\n/** Read single value JSON document. */\nstatic_noinline yyjson_doc *read_root_single(u8 *hdr,\n                                             u8 *cur,\n                                             u8 *end,\n                                             yyjson_alc alc,\n                                             yyjson_read_flag flg,\n                                             yyjson_read_err *err) {\n    \n#define has_flag(_flag) unlikely((flg & YYJSON_READ_##_flag) != 0)\n    \n#define return_err(_pos, _code, _msg) do { \\\n    if (is_truncated_end(hdr, _pos, end, YYJSON_READ_ERROR_##_code, flg)) { \\\n        err->pos = (usize)(end - hdr); \\\n        err->code = YYJSON_READ_ERROR_UNEXPECTED_END; \\\n        err->msg = \"unexpected end of data\"; \\\n    } else { \\\n        err->pos = (usize)(_pos - hdr); \\\n        err->code = YYJSON_READ_ERROR_##_code; \\\n        err->msg = _msg; \\\n    } \\\n    if (val_hdr) alc.free(alc.ctx, (void *)val_hdr); \\\n    return NULL; \\\n} while (false)\n    \n    usize hdr_len; /* value count used by doc */\n    usize alc_num; /* value count capacity */\n    yyjson_val *val_hdr; /* the head of allocated values */\n    yyjson_val *val; /* current value */\n    yyjson_doc *doc; /* the JSON document, equals to val_hdr */\n    const char *msg; /* error message */\n    \n    bool raw; /* read number as raw */\n    bool inv; /* allow invalid unicode */\n    u8 *raw_end; /* raw end for null-terminator */\n    u8 **pre; /* previous raw end pointer */\n    \n    hdr_len = sizeof(yyjson_doc) / sizeof(yyjson_val);\n    hdr_len += (sizeof(yyjson_doc) % sizeof(yyjson_val)) > 0;\n    alc_num = hdr_len + 1; /* single value */\n    \n    val_hdr = (yyjson_val *)alc.malloc(alc.ctx, alc_num * sizeof(yyjson_val));\n    if (unlikely(!val_hdr)) goto fail_alloc;\n    val = val_hdr + hdr_len;\n    raw = (flg & (YYJSON_READ_NUMBER_AS_RAW | YYJSON_READ_BIGNUM_AS_RAW)) != 0;\n    inv = (flg & YYJSON_READ_ALLOW_INVALID_UNICODE) != 0;\n    raw_end = NULL;\n    pre = raw ? &raw_end : NULL;\n    \n    if (char_is_number(*cur)) {\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto doc_end;\n        goto fail_number;\n    }\n    if (*cur == '\"') {\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto doc_end;\n        goto fail_string;\n    }\n    if (*cur == 't') {\n        if (likely(read_true(&cur, val))) goto doc_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        if (likely(read_false(&cur, val))) goto doc_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        if (likely(read_null(&cur, val))) goto doc_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto doc_end;\n        }\n        goto fail_literal;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n        if (read_inf_or_nan(false, &cur, pre, val)) goto doc_end;\n    }\n    goto fail_character;\n    \ndoc_end:\n    /* check invalid contents after json document */\n    if (unlikely(cur < end) && !has_flag(STOP_WHEN_DONE)) {\n        if (has_flag(ALLOW_COMMENTS)) {\n            if (!skip_spaces_and_comments(&cur)) {\n                if (byte_match_2(cur, \"/*\")) goto fail_comment;\n            }\n        } else {\n            while (char_is_space(*cur)) cur++;\n        }\n        if (unlikely(cur < end)) goto fail_garbage;\n    }\n    \n    if (pre && *pre) **pre = '\\0';\n    doc = (yyjson_doc *)val_hdr;\n    doc->root = val_hdr + hdr_len;\n    doc->alc = alc;\n    doc->dat_read = (usize)(cur - hdr);\n    doc->val_read = 1;\n    doc->str_pool = has_flag(INSITU) ? NULL : (char *)hdr;\n    return doc;\n    \nfail_string:\n    return_err(cur, INVALID_STRING, msg);\nfail_number:\n    return_err(cur, INVALID_NUMBER, msg);\nfail_alloc:\n    return_err(cur, MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_literal:\n    return_err(cur, LITERAL, \"invalid literal\");\nfail_comment:\n    return_err(cur, INVALID_COMMENT, \"unclosed multiline comment\");\nfail_character:\n    return_err(cur, UNEXPECTED_CHARACTER, \"unexpected character\");\nfail_garbage:\n    return_err(cur, UNEXPECTED_CONTENT, \"unexpected content after document\");\n    \n#undef has_flag\n#undef return_err\n}\n\n/** Read JSON document (accept all style, but optimized for minify). */\nstatic_inline yyjson_doc *read_root_minify(u8 *hdr,\n                                           u8 *cur,\n                                           u8 *end,\n                                           yyjson_alc alc,\n                                           yyjson_read_flag flg,\n                                           yyjson_read_err *err) {\n    \n#define has_flag(_flag) unlikely((flg & YYJSON_READ_##_flag) != 0)\n    \n#define return_err(_pos, _code, _msg) do { \\\n    if (is_truncated_end(hdr, _pos, end, YYJSON_READ_ERROR_##_code, flg)) { \\\n        err->pos = (usize)(end - hdr); \\\n        err->code = YYJSON_READ_ERROR_UNEXPECTED_END; \\\n        err->msg = \"unexpected end of data\"; \\\n    } else { \\\n        err->pos = (usize)(_pos - hdr); \\\n        err->code = YYJSON_READ_ERROR_##_code; \\\n        err->msg = _msg; \\\n    } \\\n    if (val_hdr) alc.free(alc.ctx, (void *)val_hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define val_incr() do { \\\n    val++; \\\n    if (unlikely(val >= val_end)) { \\\n        usize alc_old = alc_len; \\\n        alc_len += alc_len / 2; \\\n        if ((alc_len >= alc_max)) goto fail_alloc; \\\n        val_tmp = (yyjson_val *)alc.realloc(alc.ctx, (void *)val_hdr, \\\n            alc_old * sizeof(yyjson_val), \\\n            alc_len * sizeof(yyjson_val)); \\\n        if ((!val_tmp)) goto fail_alloc; \\\n        val = val_tmp + (usize)(val - val_hdr); \\\n        ctn = val_tmp + (usize)(ctn - val_hdr); \\\n        val_hdr = val_tmp; \\\n        val_end = val_tmp + (alc_len - 2); \\\n    } \\\n} while (false)\n    \n    usize dat_len; /* data length in bytes, hint for allocator */\n    usize hdr_len; /* value count used by yyjson_doc */\n    usize alc_len; /* value count allocated */\n    usize alc_max; /* maximum value count for allocator */\n    usize ctn_len; /* the number of elements in current container */\n    yyjson_val *val_hdr; /* the head of allocated values */\n    yyjson_val *val_end; /* the end of allocated values */\n    yyjson_val *val_tmp; /* temporary pointer for realloc */\n    yyjson_val *val; /* current JSON value */\n    yyjson_val *ctn; /* current container */\n    yyjson_val *ctn_parent; /* parent of current container */\n    yyjson_doc *doc; /* the JSON document, equals to val_hdr */\n    const char *msg; /* error message */\n    \n    bool raw; /* read number as raw */\n    bool inv; /* allow invalid unicode */\n    u8 *raw_end; /* raw end for null-terminator */\n    u8 **pre; /* previous raw end pointer */\n    \n    dat_len = has_flag(STOP_WHEN_DONE) ? 256 : (usize)(end - cur);\n    hdr_len = sizeof(yyjson_doc) / sizeof(yyjson_val);\n    hdr_len += (sizeof(yyjson_doc) % sizeof(yyjson_val)) > 0;\n    alc_max = USIZE_MAX / sizeof(yyjson_val);\n    alc_len = hdr_len + (dat_len / YYJSON_READER_ESTIMATED_MINIFY_RATIO) + 4;\n    alc_len = yyjson_min(alc_len, alc_max);\n    \n    val_hdr = (yyjson_val *)alc.malloc(alc.ctx, alc_len * sizeof(yyjson_val));\n    if (unlikely(!val_hdr)) goto fail_alloc;\n    val_end = val_hdr + (alc_len - 2); /* padding for key-value pair reading */\n    val = val_hdr + hdr_len;\n    ctn = val;\n    ctn_len = 0;\n    raw = (flg & (YYJSON_READ_NUMBER_AS_RAW | YYJSON_READ_BIGNUM_AS_RAW)) != 0;\n    inv = (flg & YYJSON_READ_ALLOW_INVALID_UNICODE) != 0;\n    raw_end = NULL;\n    pre = raw ? &raw_end : NULL;\n    \n    if (*cur++ == '{') {\n        ctn->tag = YYJSON_TYPE_OBJ;\n        ctn->uni.ofs = 0;\n        goto obj_key_begin;\n    } else {\n        ctn->tag = YYJSON_TYPE_ARR;\n        ctn->uni.ofs = 0;\n        goto arr_val_begin;\n    }\n    \narr_begin:\n    /* save current container */\n    ctn->tag = (((u64)ctn_len + 1) << YYJSON_TAG_BIT) |\n               (ctn->tag & YYJSON_TAG_MASK);\n    \n    /* create a new array value, save parent container offset */\n    val_incr();\n    val->tag = YYJSON_TYPE_ARR;\n    val->uni.ofs = (usize)((u8 *)val - (u8 *)ctn);\n    \n    /* push the new array value as current container */\n    ctn = val;\n    ctn_len = 0;\n    \narr_val_begin:\n    if (*cur == '{') {\n        cur++;\n        goto obj_begin;\n    }\n    if (*cur == '[') {\n        cur++;\n        goto arr_begin;\n    }\n    if (char_is_number(*cur)) {\n        val_incr();\n        ctn_len++;\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto arr_val_end;\n        goto fail_number;\n    }\n    if (*cur == '\"') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto arr_val_end;\n        goto fail_string;\n    }\n    if (*cur == 't') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_true(&cur, val))) goto arr_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_false(&cur, val))) goto arr_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_null(&cur, val))) goto arr_val_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto arr_val_end;\n        }\n        goto fail_literal;\n    }\n    if (*cur == ']') {\n        cur++;\n        if (likely(ctn_len == 0)) goto arr_end;\n        if (has_flag(ALLOW_TRAILING_COMMAS)) goto arr_end;\n        while (*cur != ',') cur--;\n        goto fail_trailing_comma;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto arr_val_begin;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN) &&\n        (*cur == 'i' || *cur == 'I' || *cur == 'N')) {\n        val_incr();\n        ctn_len++;\n        if (read_inf_or_nan(false, &cur, pre, val)) goto arr_val_end;\n        goto fail_character;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto arr_val_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \narr_val_end:\n    if (*cur == ',') {\n        cur++;\n        goto arr_val_begin;\n    }\n    if (*cur == ']') {\n        cur++;\n        goto arr_end;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto arr_val_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto arr_val_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \narr_end:\n    /* get parent container */\n    ctn_parent = (yyjson_val *)(void *)((u8 *)ctn - ctn->uni.ofs);\n    \n    /* save the next sibling value offset */\n    ctn->uni.ofs = (usize)((u8 *)val - (u8 *)ctn) + sizeof(yyjson_val);\n    ctn->tag = ((ctn_len) << YYJSON_TAG_BIT) | YYJSON_TYPE_ARR;\n    if (unlikely(ctn == ctn_parent)) goto doc_end;\n    \n    /* pop parent as current container */\n    ctn = ctn_parent;\n    ctn_len = (usize)(ctn->tag >> YYJSON_TAG_BIT);\n    if ((ctn->tag & YYJSON_TYPE_MASK) == YYJSON_TYPE_OBJ) {\n        goto obj_val_end;\n    } else {\n        goto arr_val_end;\n    }\n    \nobj_begin:\n    /* push container */\n    ctn->tag = (((u64)ctn_len + 1) << YYJSON_TAG_BIT) |\n               (ctn->tag & YYJSON_TAG_MASK);\n    val_incr();\n    val->tag = YYJSON_TYPE_OBJ;\n    /* offset to the parent */\n    val->uni.ofs = (usize)((u8 *)val - (u8 *)ctn);\n    ctn = val;\n    ctn_len = 0;\n    \nobj_key_begin:\n    if (likely(*cur == '\"')) {\n        val_incr();\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto obj_key_end;\n        goto fail_string;\n    }\n    if (likely(*cur == '}')) {\n        cur++;\n        if (likely(ctn_len == 0)) goto obj_end;\n        if (has_flag(ALLOW_TRAILING_COMMAS)) goto obj_end;\n        while (*cur != ',') cur--;\n        goto fail_trailing_comma;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_key_begin;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_key_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_key_end:\n    if (*cur == ':') {\n        cur++;\n        goto obj_val_begin;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_key_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_key_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_val_begin:\n    if (*cur == '\"') {\n        val++;\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto obj_val_end;\n        goto fail_string;\n    }\n    if (char_is_number(*cur)) {\n        val++;\n        ctn_len++;\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto obj_val_end;\n        goto fail_number;\n    }\n    if (*cur == '{') {\n        cur++;\n        goto obj_begin;\n    }\n    if (*cur == '[') {\n        cur++;\n        goto arr_begin;\n    }\n    if (*cur == 't') {\n        val++;\n        ctn_len++;\n        if (likely(read_true(&cur, val))) goto obj_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        val++;\n        ctn_len++;\n        if (likely(read_false(&cur, val))) goto obj_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        val++;\n        ctn_len++;\n        if (likely(read_null(&cur, val))) goto obj_val_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto obj_val_end;\n        }\n        goto fail_literal;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_val_begin;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN) &&\n        (*cur == 'i' || *cur == 'I' || *cur == 'N')) {\n        val++;\n        ctn_len++;\n        if (read_inf_or_nan(false, &cur, pre, val)) goto obj_val_end;\n        goto fail_character;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_val_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_val_end:\n    if (likely(*cur == ',')) {\n        cur++;\n        goto obj_key_begin;\n    }\n    if (likely(*cur == '}')) {\n        cur++;\n        goto obj_end;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_val_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_val_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_end:\n    /* pop container */\n    ctn_parent = (yyjson_val *)(void *)((u8 *)ctn - ctn->uni.ofs);\n    /* point to the next value */\n    ctn->uni.ofs = (usize)((u8 *)val - (u8 *)ctn) + sizeof(yyjson_val);\n    ctn->tag = (ctn_len << (YYJSON_TAG_BIT - 1)) | YYJSON_TYPE_OBJ;\n    if (unlikely(ctn == ctn_parent)) goto doc_end;\n    ctn = ctn_parent;\n    ctn_len = (usize)(ctn->tag >> YYJSON_TAG_BIT);\n    if ((ctn->tag & YYJSON_TYPE_MASK) == YYJSON_TYPE_OBJ) {\n        goto obj_val_end;\n    } else {\n        goto arr_val_end;\n    }\n    \ndoc_end:\n    /* check invalid contents after json document */\n    if (unlikely(cur < end) && !has_flag(STOP_WHEN_DONE)) {\n        if (has_flag(ALLOW_COMMENTS)) {\n            skip_spaces_and_comments(&cur);\n            if (byte_match_2(cur, \"/*\")) goto fail_comment;\n        }\n        else while (char_is_space(*cur)) cur++;\n        if (unlikely(cur < end)) goto fail_garbage;\n    }\n    \n    if (pre && *pre) **pre = '\\0';\n    doc = (yyjson_doc *)val_hdr;\n    doc->root = val_hdr + hdr_len;\n    doc->alc = alc;\n    doc->dat_read = (usize)(cur - hdr);\n    doc->val_read = (usize)((val - doc->root) + 1);\n    doc->str_pool = has_flag(INSITU) ? NULL : (char *)hdr;\n    return doc;\n    \nfail_string:\n    return_err(cur, INVALID_STRING, msg);\nfail_number:\n    return_err(cur, INVALID_NUMBER, msg);\nfail_alloc:\n    return_err(cur, MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_trailing_comma:\n    return_err(cur, JSON_STRUCTURE, \"trailing comma is not allowed\");\nfail_literal:\n    return_err(cur, LITERAL, \"invalid literal\");\nfail_comment:\n    return_err(cur, INVALID_COMMENT, \"unclosed multiline comment\");\nfail_character:\n    return_err(cur, UNEXPECTED_CHARACTER, \"unexpected character\");\nfail_garbage:\n    return_err(cur, UNEXPECTED_CONTENT, \"unexpected content after document\");\n    \n#undef has_flag\n#undef val_incr\n#undef return_err\n}\n\n/** Read JSON document (accept all style, but optimized for pretty). */\nstatic_inline yyjson_doc *read_root_pretty(u8 *hdr,\n                                           u8 *cur,\n                                           u8 *end,\n                                           yyjson_alc alc,\n                                           yyjson_read_flag flg,\n                                           yyjson_read_err *err) {\n    \n#define has_flag(_flag) unlikely((flg & YYJSON_READ_##_flag) != 0)\n    \n#define return_err(_pos, _code, _msg) do { \\\n    if (is_truncated_end(hdr, _pos, end, YYJSON_READ_ERROR_##_code, flg)) { \\\n        err->pos = (usize)(end - hdr); \\\n        err->code = YYJSON_READ_ERROR_UNEXPECTED_END; \\\n        err->msg = \"unexpected end of data\"; \\\n    } else { \\\n        err->pos = (usize)(_pos - hdr); \\\n        err->code = YYJSON_READ_ERROR_##_code; \\\n        err->msg = _msg; \\\n    } \\\n    if (val_hdr) alc.free(alc.ctx, (void *)val_hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define val_incr() do { \\\n    val++; \\\n    if (unlikely(val >= val_end)) { \\\n        usize alc_old = alc_len; \\\n        alc_len += alc_len / 2; \\\n        if ((alc_len >= alc_max)) goto fail_alloc; \\\n        val_tmp = (yyjson_val *)alc.realloc(alc.ctx, (void *)val_hdr, \\\n            alc_old * sizeof(yyjson_val), \\\n            alc_len * sizeof(yyjson_val)); \\\n        if ((!val_tmp)) goto fail_alloc; \\\n        val = val_tmp + (usize)(val - val_hdr); \\\n        ctn = val_tmp + (usize)(ctn - val_hdr); \\\n        val_hdr = val_tmp; \\\n        val_end = val_tmp + (alc_len - 2); \\\n    } \\\n} while (false)\n    \n    usize dat_len; /* data length in bytes, hint for allocator */\n    usize hdr_len; /* value count used by yyjson_doc */\n    usize alc_len; /* value count allocated */\n    usize alc_max; /* maximum value count for allocator */\n    usize ctn_len; /* the number of elements in current container */\n    yyjson_val *val_hdr; /* the head of allocated values */\n    yyjson_val *val_end; /* the end of allocated values */\n    yyjson_val *val_tmp; /* temporary pointer for realloc */\n    yyjson_val *val; /* current JSON value */\n    yyjson_val *ctn; /* current container */\n    yyjson_val *ctn_parent; /* parent of current container */\n    yyjson_doc *doc; /* the JSON document, equals to val_hdr */\n    const char *msg; /* error message */\n    \n    bool raw; /* read number as raw */\n    bool inv; /* allow invalid unicode */\n    u8 *raw_end; /* raw end for null-terminator */\n    u8 **pre; /* previous raw end pointer */\n    \n    dat_len = has_flag(STOP_WHEN_DONE) ? 256 : (usize)(end - cur);\n    hdr_len = sizeof(yyjson_doc) / sizeof(yyjson_val);\n    hdr_len += (sizeof(yyjson_doc) % sizeof(yyjson_val)) > 0;\n    alc_max = USIZE_MAX / sizeof(yyjson_val);\n    alc_len = hdr_len + (dat_len / YYJSON_READER_ESTIMATED_PRETTY_RATIO) + 4;\n    alc_len = yyjson_min(alc_len, alc_max);\n    \n    val_hdr = (yyjson_val *)alc.malloc(alc.ctx, alc_len * sizeof(yyjson_val));\n    if (unlikely(!val_hdr)) goto fail_alloc;\n    val_end = val_hdr + (alc_len - 2); /* padding for key-value pair reading */\n    val = val_hdr + hdr_len;\n    ctn = val;\n    ctn_len = 0;\n    raw = (flg & (YYJSON_READ_NUMBER_AS_RAW | YYJSON_READ_BIGNUM_AS_RAW)) != 0;\n    inv = (flg & YYJSON_READ_ALLOW_INVALID_UNICODE) != 0;\n    raw_end = NULL;\n    pre = raw ? &raw_end : NULL;\n    \n    if (*cur++ == '{') {\n        ctn->tag = YYJSON_TYPE_OBJ;\n        ctn->uni.ofs = 0;\n        if (*cur == '\\n') cur++;\n        goto obj_key_begin;\n    } else {\n        ctn->tag = YYJSON_TYPE_ARR;\n        ctn->uni.ofs = 0;\n        if (*cur == '\\n') cur++;\n        goto arr_val_begin;\n    }\n    \narr_begin:\n    /* save current container */\n    ctn->tag = (((u64)ctn_len + 1) << YYJSON_TAG_BIT) |\n               (ctn->tag & YYJSON_TAG_MASK);\n    \n    /* create a new array value, save parent container offset */\n    val_incr();\n    val->tag = YYJSON_TYPE_ARR;\n    val->uni.ofs = (usize)((u8 *)val - (u8 *)ctn);\n    \n    /* push the new array value as current container */\n    ctn = val;\n    ctn_len = 0;\n    if (*cur == '\\n') cur++;\n    \narr_val_begin:\n#if YYJSON_IS_REAL_GCC\n    while (true) repeat16({\n        if (byte_match_2(cur, \"  \")) cur += 2;\n        else break;\n    })\n#else\n    while (true) repeat16({\n        if (likely(byte_match_2(cur, \"  \"))) cur += 2;\n        else break;\n    })\n#endif\n    \n    if (*cur == '{') {\n        cur++;\n        goto obj_begin;\n    }\n    if (*cur == '[') {\n        cur++;\n        goto arr_begin;\n    }\n    if (char_is_number(*cur)) {\n        val_incr();\n        ctn_len++;\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto arr_val_end;\n        goto fail_number;\n    }\n    if (*cur == '\"') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto arr_val_end;\n        goto fail_string;\n    }\n    if (*cur == 't') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_true(&cur, val))) goto arr_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_false(&cur, val))) goto arr_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        val_incr();\n        ctn_len++;\n        if (likely(read_null(&cur, val))) goto arr_val_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto arr_val_end;\n        }\n        goto fail_literal;\n    }\n    if (*cur == ']') {\n        cur++;\n        if (likely(ctn_len == 0)) goto arr_end;\n        if (has_flag(ALLOW_TRAILING_COMMAS)) goto arr_end;\n        while (*cur != ',') cur--;\n        goto fail_trailing_comma;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto arr_val_begin;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN) &&\n        (*cur == 'i' || *cur == 'I' || *cur == 'N')) {\n        val_incr();\n        ctn_len++;\n        if (read_inf_or_nan(false, &cur, pre, val)) goto arr_val_end;\n        goto fail_character;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto arr_val_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \narr_val_end:\n    if (byte_match_2(cur, \",\\n\")) {\n        cur += 2;\n        goto arr_val_begin;\n    }\n    if (*cur == ',') {\n        cur++;\n        goto arr_val_begin;\n    }\n    if (*cur == ']') {\n        cur++;\n        goto arr_end;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto arr_val_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto arr_val_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \narr_end:\n    /* get parent container */\n    ctn_parent = (yyjson_val *)(void *)((u8 *)ctn - ctn->uni.ofs);\n    \n    /* save the next sibling value offset */\n    ctn->uni.ofs = (usize)((u8 *)val - (u8 *)ctn) + sizeof(yyjson_val);\n    ctn->tag = ((ctn_len) << YYJSON_TAG_BIT) | YYJSON_TYPE_ARR;\n    if (unlikely(ctn == ctn_parent)) goto doc_end;\n    \n    /* pop parent as current container */\n    ctn = ctn_parent;\n    ctn_len = (usize)(ctn->tag >> YYJSON_TAG_BIT);\n    if (*cur == '\\n') cur++;\n    if ((ctn->tag & YYJSON_TYPE_MASK) == YYJSON_TYPE_OBJ) {\n        goto obj_val_end;\n    } else {\n        goto arr_val_end;\n    }\n    \nobj_begin:\n    /* push container */\n    ctn->tag = (((u64)ctn_len + 1) << YYJSON_TAG_BIT) |\n               (ctn->tag & YYJSON_TAG_MASK);\n    val_incr();\n    val->tag = YYJSON_TYPE_OBJ;\n    /* offset to the parent */\n    val->uni.ofs = (usize)((u8 *)val - (u8 *)ctn);\n    ctn = val;\n    ctn_len = 0;\n    if (*cur == '\\n') cur++;\n    \nobj_key_begin:\n#if YYJSON_IS_REAL_GCC\n    while (true) repeat16({\n        if (byte_match_2(cur, \"  \")) cur += 2;\n        else break;\n    })\n#else\n    while (true) repeat16({\n        if (likely(byte_match_2(cur, \"  \"))) cur += 2;\n        else break;\n    })\n#endif\n    if (likely(*cur == '\"')) {\n        val_incr();\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto obj_key_end;\n        goto fail_string;\n    }\n    if (likely(*cur == '}')) {\n        cur++;\n        if (likely(ctn_len == 0)) goto obj_end;\n        if (has_flag(ALLOW_TRAILING_COMMAS)) goto obj_end;\n        while (*cur != ',') cur--;\n        goto fail_trailing_comma;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_key_begin;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_key_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_key_end:\n    if (byte_match_2(cur, \": \")) {\n        cur += 2;\n        goto obj_val_begin;\n    }\n    if (*cur == ':') {\n        cur++;\n        goto obj_val_begin;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_key_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_key_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_val_begin:\n    if (*cur == '\"') {\n        val++;\n        ctn_len++;\n        if (likely(read_string(&cur, end, inv, val, &msg))) goto obj_val_end;\n        goto fail_string;\n    }\n    if (char_is_number(*cur)) {\n        val++;\n        ctn_len++;\n        if (likely(read_number(&cur, pre, flg, val, &msg))) goto obj_val_end;\n        goto fail_number;\n    }\n    if (*cur == '{') {\n        cur++;\n        goto obj_begin;\n    }\n    if (*cur == '[') {\n        cur++;\n        goto arr_begin;\n    }\n    if (*cur == 't') {\n        val++;\n        ctn_len++;\n        if (likely(read_true(&cur, val))) goto obj_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'f') {\n        val++;\n        ctn_len++;\n        if (likely(read_false(&cur, val))) goto obj_val_end;\n        goto fail_literal;\n    }\n    if (*cur == 'n') {\n        val++;\n        ctn_len++;\n        if (likely(read_null(&cur, val))) goto obj_val_end;\n        if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN)) {\n            if (read_nan(false, &cur, pre, val)) goto obj_val_end;\n        }\n        goto fail_literal;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_val_begin;\n    }\n    if (unlikely(flg & YYJSON_READ_ALLOW_INF_AND_NAN) &&\n        (*cur == 'i' || *cur == 'I' || *cur == 'N')) {\n        val++;\n        ctn_len++;\n        if (read_inf_or_nan(false, &cur, pre, val)) goto obj_val_end;\n        goto fail_character;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_val_begin;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_val_end:\n    if (byte_match_2(cur, \",\\n\")) {\n        cur += 2;\n        goto obj_key_begin;\n    }\n    if (likely(*cur == ',')) {\n        cur++;\n        goto obj_key_begin;\n    }\n    if (likely(*cur == '}')) {\n        cur++;\n        goto obj_end;\n    }\n    if (char_is_space(*cur)) {\n        while (char_is_space(*++cur));\n        goto obj_val_end;\n    }\n    if (has_flag(ALLOW_COMMENTS)) {\n        if (skip_spaces_and_comments(&cur)) goto obj_val_end;\n        if (byte_match_2(cur, \"/*\")) goto fail_comment;\n    }\n    goto fail_character;\n    \nobj_end:\n    /* pop container */\n    ctn_parent = (yyjson_val *)(void *)((u8 *)ctn - ctn->uni.ofs);\n    /* point to the next value */\n    ctn->uni.ofs = (usize)((u8 *)val - (u8 *)ctn) + sizeof(yyjson_val);\n    ctn->tag = (ctn_len << (YYJSON_TAG_BIT - 1)) | YYJSON_TYPE_OBJ;\n    if (unlikely(ctn == ctn_parent)) goto doc_end;\n    ctn = ctn_parent;\n    ctn_len = (usize)(ctn->tag >> YYJSON_TAG_BIT);\n    if (*cur == '\\n') cur++;\n    if ((ctn->tag & YYJSON_TYPE_MASK) == YYJSON_TYPE_OBJ) {\n        goto obj_val_end;\n    } else {\n        goto arr_val_end;\n    }\n    \ndoc_end:\n    /* check invalid contents after json document */\n    if (unlikely(cur < end) && !has_flag(STOP_WHEN_DONE)) {\n        if (has_flag(ALLOW_COMMENTS)) {\n            skip_spaces_and_comments(&cur);\n            if (byte_match_2(cur, \"/*\")) goto fail_comment;\n        }\n        else while (char_is_space(*cur)) cur++;\n        if (unlikely(cur < end)) goto fail_garbage;\n    }\n    \n    if (pre && *pre) **pre = '\\0';\n    doc = (yyjson_doc *)val_hdr;\n    doc->root = val_hdr + hdr_len;\n    doc->alc = alc;\n    doc->dat_read = (usize)(cur - hdr);\n    doc->val_read = (usize)((val - val_hdr)) - hdr_len + 1;\n    doc->str_pool = has_flag(INSITU) ? NULL : (char *)hdr;\n    return doc;\n    \nfail_string:\n    return_err(cur, INVALID_STRING, msg);\nfail_number:\n    return_err(cur, INVALID_NUMBER, msg);\nfail_alloc:\n    return_err(cur, MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_trailing_comma:\n    return_err(cur, JSON_STRUCTURE, \"trailing comma is not allowed\");\nfail_literal:\n    return_err(cur, LITERAL, \"invalid literal\");\nfail_comment:\n    return_err(cur, INVALID_COMMENT, \"unclosed multiline comment\");\nfail_character:\n    return_err(cur, UNEXPECTED_CHARACTER, \"unexpected character\");\nfail_garbage:\n    return_err(cur, UNEXPECTED_CONTENT, \"unexpected content after document\");\n    \n#undef has_flag\n#undef val_incr\n#undef return_err\n}\n\n\n\n/*==============================================================================\n * JSON Reader Entrance\n *============================================================================*/\n\nyyjson_doc *yyjson_read_opts(char *dat,\n                             usize len,\n                             yyjson_read_flag flg,\n                             const yyjson_alc *alc_ptr,\n                             yyjson_read_err *err) {\n    \n#define has_flag(_flag) unlikely((flg & YYJSON_READ_##_flag) != 0)\n    \n#define return_err(_pos, _code, _msg) do { \\\n    err->pos = (usize)(_pos); \\\n    err->msg = _msg; \\\n    err->code = YYJSON_READ_ERROR_##_code; \\\n    if (!has_flag(INSITU) && hdr) alc.free(alc.ctx, (void *)hdr); \\\n    return NULL; \\\n} while (false)\n    \n    yyjson_read_err dummy_err;\n    yyjson_alc alc;\n    yyjson_doc *doc;\n    u8 *hdr = NULL, *end, *cur;\n    \n#if YYJSON_DISABLE_NON_STANDARD\n    flg &= ~YYJSON_READ_ALLOW_TRAILING_COMMAS;\n    flg &= ~YYJSON_READ_ALLOW_COMMENTS;\n    flg &= ~YYJSON_READ_ALLOW_INF_AND_NAN;\n    flg &= ~YYJSON_READ_ALLOW_INVALID_UNICODE;\n#endif\n    \n    /* validate input parameters */\n    if (!err) err = &dummy_err;\n    if (likely(!alc_ptr)) {\n        alc = YYJSON_DEFAULT_ALC;\n    } else {\n        alc = *alc_ptr;\n    }\n    if (unlikely(!dat)) {\n        return_err(0, INVALID_PARAMETER, \"input data is NULL\");\n    }\n    if (unlikely(!len)) {\n        return_err(0, INVALID_PARAMETER, \"input length is 0\");\n    }\n    \n    /* add 4-byte zero padding for input data if necessary */\n    if (has_flag(INSITU)) {\n        hdr = (u8 *)dat;\n        end = (u8 *)dat + len;\n        cur = (u8 *)dat;\n    } else {\n        if (unlikely(len >= USIZE_MAX - YYJSON_PADDING_SIZE)) {\n            return_err(0, MEMORY_ALLOCATION, \"memory allocation failed\");\n        }\n        hdr = (u8 *)alc.malloc(alc.ctx, len + YYJSON_PADDING_SIZE);\n        if (unlikely(!hdr)) {\n            return_err(0, MEMORY_ALLOCATION, \"memory allocation failed\");\n        }\n        end = hdr + len;\n        cur = hdr;\n        memcpy(hdr, dat, len);\n        memset(end, 0, YYJSON_PADDING_SIZE);\n    }\n    \n    /* skip empty contents before json document */\n    if (unlikely(char_is_space_or_comment(*cur))) {\n        if (has_flag(ALLOW_COMMENTS)) {\n            if (!skip_spaces_and_comments(&cur)) {\n                return_err(cur - hdr, INVALID_COMMENT,\n                           \"unclosed multiline comment\");\n            }\n        } else {\n            if (likely(char_is_space(*cur))) {\n                while (char_is_space(*++cur));\n            }\n        }\n        if (unlikely(cur >= end)) {\n            return_err(0, EMPTY_CONTENT, \"input data is empty\");\n        }\n    }\n    \n    /* read json document */\n    if (likely(char_is_container(*cur))) {\n        if (char_is_space(cur[1]) && char_is_space(cur[2])) {\n            doc = read_root_pretty(hdr, cur, end, alc, flg, err);\n        } else {\n            doc = read_root_minify(hdr, cur, end, alc, flg, err);\n        }\n    } else {\n        doc = read_root_single(hdr, cur, end, alc, flg, err);\n    }\n    \n    /* check result */\n    if (likely(doc)) {\n        memset(err, 0, sizeof(yyjson_read_err));\n    } else {\n        /* RFC 8259: JSON text MUST be encoded using UTF-8 */\n        if (err->pos == 0 && err->code != YYJSON_READ_ERROR_MEMORY_ALLOCATION) {\n            if ((hdr[0] == 0xEF && hdr[1] == 0xBB && hdr[2] == 0xBF)) {\n                err->msg = \"byte order mark (BOM) is not supported\";\n            } else if (len >= 4 &&\n                       ((hdr[0] == 0x00 && hdr[1] == 0x00 &&\n                         hdr[2] == 0xFE && hdr[3] == 0xFF) ||\n                        (hdr[0] == 0xFF && hdr[1] == 0xFE &&\n                         hdr[2] == 0x00 && hdr[3] == 0x00))) {\n                err->msg = \"UTF-32 encoding is not supported\";\n            } else if (len >= 2 &&\n                       ((hdr[0] == 0xFE && hdr[1] == 0xFF) ||\n                        (hdr[0] == 0xFF && hdr[1] == 0xFE))) {\n                err->msg = \"UTF-16 encoding is not supported\";\n            }\n        }\n        if (!has_flag(INSITU)) alc.free(alc.ctx, (void *)hdr);\n    }\n    return doc;\n    \n#undef has_flag\n#undef return_err\n}\n\nyyjson_doc *yyjson_read_file(const char *path,\n                             yyjson_read_flag flg,\n                             const yyjson_alc *alc_ptr,\n                             yyjson_read_err *err) {\n#define return_err(_code, _msg) do { \\\n    err->pos = 0; \\\n    err->msg = _msg; \\\n    err->code = YYJSON_READ_ERROR_##_code; \\\n    return NULL; \\\n} while (false)\n    \n    yyjson_read_err dummy_err;\n    yyjson_doc *doc;\n    FILE *file;\n    \n    if (!err) err = &dummy_err;\n    if (unlikely(!path)) return_err(INVALID_PARAMETER, \"input path is NULL\");\n    \n    file = fopen_readonly(path);\n    if (unlikely(!file)) return_err(FILE_OPEN, \"file opening failed\");\n    \n    doc = yyjson_read_fp(file, flg, alc_ptr, err);\n    fclose(file);\n    return doc;\n    \n#undef return_err\n}\n\nyyjson_doc *yyjson_read_fp(FILE *file,\n                           yyjson_read_flag flg,\n                           const yyjson_alc *alc_ptr,\n                           yyjson_read_err *err) {\n#define return_err(_code, _msg) do { \\\n    err->pos = 0; \\\n    err->msg = _msg; \\\n    err->code = YYJSON_READ_ERROR_##_code; \\\n    if (buf) alc.free(alc.ctx, buf); \\\n    return NULL; \\\n} while (false)\n    \n    yyjson_read_err dummy_err;\n    yyjson_alc alc = alc_ptr ? *alc_ptr : YYJSON_DEFAULT_ALC;\n    yyjson_doc *doc;\n    \n    long file_size = 0, file_pos;\n    void *buf = NULL;\n    usize buf_size = 0;\n    \n    /* validate input parameters */\n    if (!err) err = &dummy_err;\n    if (unlikely(!file)) return_err(INVALID_PARAMETER, \"input file is NULL\");\n    \n    /* get current position */\n    file_pos = ftell(file);\n    if (file_pos != -1) {\n        /* get total file size, may fail */\n        if (fseek(file, 0, SEEK_END) == 0) file_size = ftell(file);\n        /* reset to original position, may fail */\n        if (fseek(file, file_pos, SEEK_SET) != 0) file_size = 0;\n        /* get file size from current postion to end */\n        if (file_size > 0) file_size -= file_pos;\n    }\n    \n    /* read file */\n    if (file_size > 0) {\n        /* read the entire file in one call */\n        buf_size = (usize)file_size + YYJSON_PADDING_SIZE;\n        buf = alc.malloc(alc.ctx, buf_size);\n        if (buf == NULL) {\n            return_err(MEMORY_ALLOCATION, \"fail to alloc memory\");\n        }\n        if (fread_safe(buf, (usize)file_size, file) != (usize)file_size) {\n            return_err(FILE_READ, \"file reading failed\");\n        }\n    } else {\n        /* failed to get file size, read it as a stream */\n        usize chunk_min = (usize)64;\n        usize chunk_max = (usize)512 * 1024 * 1024;\n        usize chunk_now = chunk_min;\n        usize read_size;\n        void *tmp;\n        \n        buf_size = YYJSON_PADDING_SIZE;\n        while (true) {\n            if (buf_size + chunk_now < buf_size) { /* overflow */\n                return_err(MEMORY_ALLOCATION, \"fail to alloc memory\");\n            }\n            buf_size += chunk_now;\n            if (!buf) {\n                buf = alc.malloc(alc.ctx, buf_size);\n                if (!buf) return_err(MEMORY_ALLOCATION, \"fail to alloc memory\");\n            } else {\n                tmp = alc.realloc(alc.ctx, buf, buf_size - chunk_now, buf_size);\n                if (!tmp) return_err(MEMORY_ALLOCATION, \"fail to alloc memory\");\n                buf = tmp;\n            }\n            tmp = ((u8 *)buf) + buf_size - YYJSON_PADDING_SIZE - chunk_now;\n            read_size = fread_safe(tmp, chunk_now, file);\n            file_size += (long)read_size;\n            if (read_size != chunk_now) break;\n            \n            chunk_now *= 2;\n            if (chunk_now > chunk_max) chunk_now = chunk_max;\n        }\n    }\n    \n    /* read JSON */\n    memset((u8 *)buf + file_size, 0, YYJSON_PADDING_SIZE);\n    flg |= YYJSON_READ_INSITU;\n    doc = yyjson_read_opts((char *)buf, (usize)file_size, flg, &alc, err);\n    if (doc) {\n        doc->str_pool = (char *)buf;\n        return doc;\n    } else {\n        alc.free(alc.ctx, buf);\n        return NULL;\n    }\n    \n#undef return_err\n}\n\n\n\nconst char *yyjson_read_number(const char *dat,\n                               yyjson_val *val,\n                               yyjson_read_flag flg,\n                               const yyjson_alc *alc,\n                               yyjson_read_err *err) {\n#define return_err(_pos, _code, _msg) do { \\\n    err->pos = _pos > hdr ? (usize)(_pos - hdr) : 0; \\\n    err->msg = _msg; \\\n    err->code = YYJSON_READ_ERROR_##_code; \\\n    return NULL; \\\n} while (false)\n    \n    u8 *hdr = constcast(u8 *)dat, *cur = hdr;\n    bool raw; /* read number as raw */\n    u8 *raw_end; /* raw end for null-terminator */\n    u8 **pre; /* previous raw end pointer */\n    const char *msg;\n    yyjson_read_err dummy_err;\n    \n#if !YYJSON_HAS_IEEE_754 || YYJSON_DISABLE_FAST_FP_CONV\n    u8 buf[128];\n    usize dat_len;\n#endif\n    \n    if (!err) err = &dummy_err;\n    if (unlikely(!dat)) {\n        return_err(cur, INVALID_PARAMETER, \"input data is NULL\");\n    }\n    if (unlikely(!val)) {\n        return_err(cur, INVALID_PARAMETER, \"output value is NULL\");\n    }\n    \n#if !YYJSON_HAS_IEEE_754 || YYJSON_DISABLE_FAST_FP_CONV\n    if (!alc) alc = &YYJSON_DEFAULT_ALC;\n    dat_len = strlen(dat);\n    if (dat_len < sizeof(buf)) {\n        memcpy(buf, dat, dat_len + 1);\n        hdr = buf;\n        cur = hdr;\n    } else {\n        hdr = (u8 *)alc->malloc(alc->ctx, dat_len + 1);\n        cur = hdr;\n        if (unlikely(!hdr)) {\n            return_err(cur, MEMORY_ALLOCATION, \"memory allocation failed\");\n        }\n        memcpy(hdr, dat, dat_len + 1);\n    }\n    hdr[dat_len] = 0;\n#endif\n    \n#if YYJSON_DISABLE_NON_STANDARD\n    flg &= ~YYJSON_READ_ALLOW_INF_AND_NAN;\n#endif\n    \n    raw = (flg & (YYJSON_READ_NUMBER_AS_RAW | YYJSON_READ_BIGNUM_AS_RAW)) != 0;\n    raw_end = NULL;\n    pre = raw ? &raw_end : NULL;\n    \n#if !YYJSON_HAS_IEEE_754 || YYJSON_DISABLE_FAST_FP_CONV\n    if (!read_number(&cur, pre, flg, val, &msg)) {\n        if (dat_len >= sizeof(buf)) alc->free(alc->ctx, hdr);\n        return_err(cur, INVALID_NUMBER, msg);\n    }\n    if (dat_len >= sizeof(buf)) alc->free(alc->ctx, hdr);\n    if (yyjson_is_raw(val)) val->uni.str = dat;\n    return dat + (cur - hdr);\n#else\n    if (!read_number(&cur, pre, flg, val, &msg)) {\n        return_err(cur, INVALID_NUMBER, msg);\n    }\n    return (const char *)cur;\n#endif\n    \n#undef return_err\n}\n\n#endif /* YYJSON_DISABLE_READER */\n\n\n\n#if !YYJSON_DISABLE_WRITER\n\n/*==============================================================================\n * Integer Writer\n *\n * The maximum value of uint32_t is 4294967295 (10 digits),\n * these digits are named as 'aabbccddee' here.\n *\n * Although most compilers may convert the \"division by constant value\" into\n * \"multiply and shift\", manual conversion can still help some compilers\n * generate fewer and better instructions.\n *\n * Reference:\n * Division by Invariant Integers using Multiplication, 1994.\n * https://gmplib.org/~tege/divcnst-pldi94.pdf\n * Improved division by invariant integers, 2011.\n * https://gmplib.org/~tege/division-paper.pdf\n *============================================================================*/\n\n/** Digit table from 00 to 99. */\nyyjson_align(2)\nstatic const char digit_table[200] = {\n    '0', '0', '0', '1', '0', '2', '0', '3', '0', '4',\n    '0', '5', '0', '6', '0', '7', '0', '8', '0', '9',\n    '1', '0', '1', '1', '1', '2', '1', '3', '1', '4',\n    '1', '5', '1', '6', '1', '7', '1', '8', '1', '9',\n    '2', '0', '2', '1', '2', '2', '2', '3', '2', '4',\n    '2', '5', '2', '6', '2', '7', '2', '8', '2', '9',\n    '3', '0', '3', '1', '3', '2', '3', '3', '3', '4',\n    '3', '5', '3', '6', '3', '7', '3', '8', '3', '9',\n    '4', '0', '4', '1', '4', '2', '4', '3', '4', '4',\n    '4', '5', '4', '6', '4', '7', '4', '8', '4', '9',\n    '5', '0', '5', '1', '5', '2', '5', '3', '5', '4',\n    '5', '5', '5', '6', '5', '7', '5', '8', '5', '9',\n    '6', '0', '6', '1', '6', '2', '6', '3', '6', '4',\n    '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',\n    '7', '0', '7', '1', '7', '2', '7', '3', '7', '4',\n    '7', '5', '7', '6', '7', '7', '7', '8', '7', '9',\n    '8', '0', '8', '1', '8', '2', '8', '3', '8', '4',\n    '8', '5', '8', '6', '8', '7', '8', '8', '8', '9',\n    '9', '0', '9', '1', '9', '2', '9', '3', '9', '4',\n    '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'\n};\n\nstatic_inline u8 *write_u32_len_8(u32 val, u8 *buf) {\n    u32 aa, bb, cc, dd, aabb, ccdd;                 /* 8 digits: aabbccdd */\n    aabb = (u32)(((u64)val * 109951163) >> 40);     /* (val / 10000) */\n    ccdd = val - aabb * 10000;                      /* (val % 10000) */\n    aa = (aabb * 5243) >> 19;                       /* (aabb / 100) */\n    cc = (ccdd * 5243) >> 19;                       /* (ccdd / 100) */\n    bb = aabb - aa * 100;                           /* (aabb % 100) */\n    dd = ccdd - cc * 100;                           /* (ccdd % 100) */\n    ((v16 *)buf)[0] = ((const v16 *)digit_table)[aa];\n    ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n    ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n    ((v16 *)buf)[3] = ((const v16 *)digit_table)[dd];\n    return buf + 8;\n}\n\nstatic_inline u8 *write_u32_len_4(u32 val, u8 *buf) {\n    u32 aa, bb;                                     /* 4 digits: aabb */\n    aa = (val * 5243) >> 19;                        /* (val / 100) */\n    bb = val - aa * 100;                            /* (val % 100) */\n    ((v16 *)buf)[0] = ((const v16 *)digit_table)[aa];\n    ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n    return buf + 4;\n}\n\nstatic_inline u8 *write_u32_len_1_8(u32 val, u8 *buf) {\n    u32 aa, bb, cc, dd, aabb, bbcc, ccdd, lz;\n    \n    if (val < 100) {                                /* 1-2 digits: aa */\n        lz = val < 10;                              /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (val * 2 + lz));\n        buf -= lz;\n        return buf + 2;\n        \n    } else if (val < 10000) {                       /* 3-4 digits: aabb */\n        aa = (val * 5243) >> 19;                    /* (val / 100) */\n        bb = val - aa * 100;                        /* (val % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        return buf + 4;\n        \n    } else if (val < 1000000) {                     /* 5-6 digits: aabbcc */\n        aa = (u32)(((u64)val * 429497) >> 32);      /* (val / 10000) */\n        bbcc = val - aa * 10000;                    /* (val % 10000) */\n        bb = (bbcc * 5243) >> 19;                   /* (bbcc / 100) */\n        cc = bbcc - bb * 100;                       /* (bbcc % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n        return buf + 6;\n        \n    } else {                                        /* 7-8 digits: aabbccdd */\n        aabb = (u32)(((u64)val * 109951163) >> 40); /* (val / 10000) */\n        ccdd = val - aabb * 10000;                  /* (val % 10000) */\n        aa = (aabb * 5243) >> 19;                   /* (aabb / 100) */\n        cc = (ccdd * 5243) >> 19;                   /* (ccdd / 100) */\n        bb = aabb - aa * 100;                       /* (aabb % 100) */\n        dd = ccdd - cc * 100;                       /* (ccdd % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n        ((v16 *)buf)[3] = ((const v16 *)digit_table)[dd];\n        return buf + 8;\n    }\n}\n\nstatic_inline u8 *write_u64_len_5_8(u32 val, u8 *buf) {\n    u32 aa, bb, cc, dd, aabb, bbcc, ccdd, lz;\n    \n    if (val < 1000000) {                            /* 5-6 digits: aabbcc */\n        aa = (u32)(((u64)val * 429497) >> 32);      /* (val / 10000) */\n        bbcc = val - aa * 10000;                    /* (val % 10000) */\n        bb = (bbcc * 5243) >> 19;                   /* (bbcc / 100) */\n        cc = bbcc - bb * 100;                       /* (bbcc % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n        return buf + 6;\n        \n    } else {                                        /* 7-8 digits: aabbccdd */\n        aabb = (u32)(((u64)val * 109951163) >> 40); /* (val / 10000) */\n        ccdd = val - aabb * 10000;                  /* (val % 10000) */\n        aa = (aabb * 5243) >> 19;                   /* (aabb / 100) */\n        cc = (ccdd * 5243) >> 19;                   /* (ccdd / 100) */\n        bb = aabb - aa * 100;                       /* (aabb % 100) */\n        dd = ccdd - cc * 100;                       /* (ccdd % 100) */\n        lz = aa < 10;                               /* leading zero: 0 or 1 */\n        ((v16 *)buf)[0] = *(const v16 *)(digit_table + (aa * 2 + lz));\n        buf -= lz;\n        ((v16 *)buf)[1] = ((const v16 *)digit_table)[bb];\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[cc];\n        ((v16 *)buf)[3] = ((const v16 *)digit_table)[dd];\n        return buf + 8;\n    }\n}\n\nstatic_inline u8 *write_u64(u64 val, u8 *buf) {\n    u64 tmp, hgh;\n    u32 mid, low;\n    \n    if (val < 100000000) {                          /* 1-8 digits */\n        buf = write_u32_len_1_8((u32)val, buf);\n        return buf;\n        \n    } else if (val < (u64)100000000 * 100000000) {  /* 9-16 digits */\n        hgh = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - hgh * 100000000);         /* (val % 100000000) */\n        buf = write_u32_len_1_8((u32)hgh, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n        \n    } else {                                        /* 17-20 digits */\n        tmp = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - tmp * 100000000);         /* (val % 100000000) */\n        hgh = (u32)(tmp / 10000);                   /* (tmp / 10000) */\n        mid = (u32)(tmp - hgh * 10000);             /* (tmp % 10000) */\n        buf = write_u64_len_5_8((u32)hgh, buf);\n        buf = write_u32_len_4(mid, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n    }\n}\n\n\n\n/*==============================================================================\n * Number Writer\n *============================================================================*/\n\n#if YYJSON_HAS_IEEE_754 && !YYJSON_DISABLE_FAST_FP_CONV  /* FP_WRITER */\n\n/** Trailing zero count table for number 0 to 99.\n    (generate with misc/make_tables.c) */\nstatic const u8 dec_trailing_zero_table[] = {\n    2, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 0, 0, 0, 0, 0, 0, 0, 0, 0\n};\n\n/** Write an unsigned integer with a length of 1 to 16. */\nstatic_inline u8 *write_u64_len_1_to_16(u64 val, u8 *buf) {\n    u64 hgh;\n    u32 low;\n    if (val < 100000000) {                          /* 1-8 digits */\n        buf = write_u32_len_1_8((u32)val, buf);\n        return buf;\n    } else {                                        /* 9-16 digits */\n        hgh = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - hgh * 100000000);         /* (val % 100000000) */\n        buf = write_u32_len_1_8((u32)hgh, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n    }\n}\n\n/** Write an unsigned integer with a length of 1 to 17. */\nstatic_inline u8 *write_u64_len_1_to_17(u64 val, u8 *buf) {\n    u64 hgh;\n    u32 mid, low, one;\n    if (val >= (u64)100000000 * 10000000) {         /* len: 16 to 17 */\n        hgh = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - hgh * 100000000);         /* (val % 100000000) */\n        one = (u32)(hgh / 100000000);               /* (hgh / 100000000) */\n        mid = (u32)(hgh - (u64)one * 100000000);    /* (hgh % 100000000) */\n        *buf = (u8)((u8)one + (u8)'0');\n        buf += one > 0;\n        buf = write_u32_len_8(mid, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n    } else if (val >= (u64)100000000){              /* len: 9 to 15 */\n        hgh = val / 100000000;                      /* (val / 100000000) */\n        low = (u32)(val - hgh * 100000000);         /* (val % 100000000) */\n        buf = write_u32_len_1_8((u32)hgh, buf);\n        buf = write_u32_len_8(low, buf);\n        return buf;\n    } else { /* len: 1 to 8 */\n        buf = write_u32_len_1_8((u32)val, buf);\n        return buf;\n    }\n}\n\n/**\n Write an unsigned integer with a length of 15 to 17 with trailing zero trimmed.\n These digits are named as \"aabbccddeeffgghhii\" here.\n For example, input 1234567890123000, output \"1234567890123\".\n */\nstatic_inline u8 *write_u64_len_15_to_17_trim(u8 *buf, u64 sig) {\n    bool lz;                                        /* leading zero */\n    u32 tz1, tz2, tz;                               /* trailing zero */\n    \n    u32 abbccddee = (u32)(sig / 100000000);\n    u32 ffgghhii = (u32)(sig - (u64)abbccddee * 100000000);\n    u32 abbcc = abbccddee / 10000;                  /* (abbccddee / 10000) */\n    u32 ddee = abbccddee - abbcc * 10000;           /* (abbccddee % 10000) */\n    u32 abb = (u32)(((u64)abbcc * 167773) >> 24);   /* (abbcc / 100) */\n    u32 a = (abb * 41) >> 12;                       /* (abb / 100) */\n    u32 bb = abb - a * 100;                         /* (abb % 100) */\n    u32 cc = abbcc - abb * 100;                     /* (abbcc % 100) */\n    \n    /* write abbcc */\n    buf[0] = (u8)(a + '0');\n    buf += a > 0;\n    lz = bb < 10 && a == 0;\n    ((v16 *)buf)[0] = *(const v16 *)(digit_table + (bb * 2 + lz));\n    buf -= lz;\n    ((v16 *)buf)[1] = ((const v16 *)digit_table)[cc];\n    \n    if (ffgghhii) {\n        u32 dd = (ddee * 5243) >> 19;               /* (ddee / 100) */\n        u32 ee = ddee - dd * 100;                   /* (ddee % 100) */\n        u32 ffgg = (u32)(((u64)ffgghhii * 109951163) >> 40); /* (val / 10000) */\n        u32 hhii = ffgghhii - ffgg * 10000;         /* (val % 10000) */\n        u32 ff = (ffgg * 5243) >> 19;               /* (aabb / 100) */\n        u32 gg = ffgg - ff * 100;                   /* (aabb % 100) */\n        ((v16 *)buf)[2] = ((const v16 *)digit_table)[dd];\n        ((v16 *)buf)[3] = ((const v16 *)digit_table)[ee];\n        ((v16 *)buf)[4] = ((const v16 *)digit_table)[ff];\n        ((v16 *)buf)[5] = ((const v16 *)digit_table)[gg];\n        if (hhii) {\n            u32 hh = (hhii * 5243) >> 19;           /* (ccdd / 100) */\n            u32 ii = hhii - hh * 100;               /* (ccdd % 100) */\n            ((v16 *)buf)[6] = ((const v16 *)digit_table)[hh];\n            ((v16 *)buf)[7] = ((const v16 *)digit_table)[ii];\n            tz1 = dec_trailing_zero_table[hh];\n            tz2 = dec_trailing_zero_table[ii];\n            tz = ii ? tz2 : (tz1 + 2);\n            buf += 16 - tz;\n            return buf;\n        } else {\n            tz1 = dec_trailing_zero_table[ff];\n            tz2 = dec_trailing_zero_table[gg];\n            tz = gg ? tz2 : (tz1 + 2);\n            buf += 12 - tz;\n            return buf;\n        }\n    } else {\n        if (ddee) {\n            u32 dd = (ddee * 5243) >> 19;           /* (ddee / 100) */\n            u32 ee = ddee - dd * 100;               /* (ddee % 100) */\n            ((v16 *)buf)[2] = ((const v16 *)digit_table)[dd];\n            ((v16 *)buf)[3] = ((const v16 *)digit_table)[ee];\n            tz1 = dec_trailing_zero_table[dd];\n            tz2 = dec_trailing_zero_table[ee];\n            tz = ee ? tz2 : (tz1 + 2);\n            buf += 8 - tz;\n            return buf;\n        } else {\n            tz1 = dec_trailing_zero_table[bb];\n            tz2 = dec_trailing_zero_table[cc];\n            tz = cc ? tz2 : (tz1 + tz2);\n            buf += 4 - tz;\n            return buf;\n        }\n    }\n}\n\n/** Write a signed integer in the range -324 to 308. */\nstatic_inline u8 *write_f64_exp(i32 exp, u8 *buf) {\n    buf[0] = '-';\n    buf += exp < 0;\n    exp = exp < 0 ? -exp : exp;\n    if (exp < 100) {\n        u32 lz = exp < 10;\n        *(v16 *)&buf[0] = *(const v16 *)(digit_table + ((u32)exp * 2 + lz));\n        return buf + 2 - lz;\n    } else {\n        u32 hi = ((u32)exp * 656) >> 16;            /* exp / 100 */\n        u32 lo = (u32)exp - hi * 100;               /* exp % 100 */\n        buf[0] = (u8)((u8)hi + (u8)'0');\n        *(v16 *)&buf[1] = *(const v16 *)(digit_table + (lo * 2));\n        return buf + 3;\n    }\n}\n\n/** Multiplies 128-bit integer and returns highest 64-bit rounded value. */\nstatic_inline u64 round_to_odd(u64 hi, u64 lo, u64 cp) {\n    u64 x_hi, x_lo, y_hi, y_lo;\n    u128_mul(cp, lo, &x_hi, &x_lo);\n    u128_mul_add(cp, hi, x_hi, &y_hi, &y_lo);\n    return y_hi | (y_lo > 1);\n}\n\n/**\n Convert double number from binary to decimal.\n The output significand is shortest decimal but may have trailing zeros.\n \n This function use the Schubfach algorithm:\n Raffaello Giulietti, The Schubfach way to render doubles (5th version), 2022.\n https://drive.google.com/file/d/1gp5xv4CAa78SVgCeWfGqqI4FfYYYuNFb\n https://mail.openjdk.java.net/pipermail/core-libs-dev/2021-November/083536.html\n https://github.com/openjdk/jdk/pull/3402 (Java implementation)\n https://github.com/abolz/Drachennest (C++ implementation)\n \n See also:\n Dragonbox: A New Floating-Point Binary-to-Decimal Conversion Algorithm, 2022.\n https://github.com/jk-jeon/dragonbox/blob/master/other_files/Dragonbox.pdf\n https://github.com/jk-jeon/dragonbox\n \n @param sig_raw The raw value of significand in IEEE 754 format.\n @param exp_raw The raw value of exponent in IEEE 754 format.\n @param sig_bin The decoded value of significand in binary.\n @param exp_bin The decoded value of exponent in binary.\n @param sig_dec The output value of significand in decimal.\n @param exp_dec The output value of exponent in decimal.\n @warning The input double number should not be 0, inf, nan.\n */\nstatic_inline void f64_bin_to_dec(u64 sig_raw, u32 exp_raw,\n                                  u64 sig_bin, i32 exp_bin,\n                                  u64 *sig_dec, i32 *exp_dec) {\n    \n    bool is_even, regular_spacing, u_inside, w_inside, round_up;\n    u64 s, sp, cb, cbl, cbr, vb, vbl, vbr, pow10hi, pow10lo, upper, lower, mid;\n    i32 k, h, exp10;\n    \n    is_even = !(sig_bin & 1);\n    regular_spacing = (sig_raw == 0 && exp_raw > 1);\n    \n    cbl = 4 * sig_bin - 2 + regular_spacing;\n    cb  = 4 * sig_bin;\n    cbr = 4 * sig_bin + 2;\n    \n    /* exp_bin: [-1074, 971]                                                  */\n    /* k = regular_spacing ? floor(log10(pow(2, exp_bin)))                    */\n    /*                     : floor(log10(pow(2, exp_bin) * 3.0 / 4.0))        */\n    /*   = regular_spacing ? floor(exp_bin * log10(2))                        */\n    /*                     : floor(exp_bin * log10(2) + log10(3.0 / 4.0))     */\n    k = (i32)(exp_bin * 315653 - (regular_spacing ? 131237 : 0)) >> 20;\n    \n    /* k: [-324, 292]                                                         */\n    /* h = exp_bin + floor(log2(pow(10, e)))                                  */\n    /*   = exp_bin + floor(log2(10) * e)                                      */\n    exp10 = -k;\n    h = exp_bin + ((exp10 * 217707) >> 16) + 1;\n    \n    pow10_table_get_sig(exp10, &pow10hi, &pow10lo);\n    pow10lo += (exp10 < POW10_SIG_TABLE_MIN_EXACT_EXP ||\n                exp10 > POW10_SIG_TABLE_MAX_EXACT_EXP);\n    vbl = round_to_odd(pow10hi, pow10lo, cbl << h);\n    vb  = round_to_odd(pow10hi, pow10lo, cb  << h);\n    vbr = round_to_odd(pow10hi, pow10lo, cbr << h);\n    \n    lower = vbl + !is_even;\n    upper = vbr - !is_even;\n    \n    s = vb / 4;\n    if (s >= 10) {\n        sp = s / 10;\n        u_inside = (lower <= 40 * sp);\n        w_inside = (upper >= 40 * sp + 40);\n        if (u_inside != w_inside) {\n            *sig_dec = sp + w_inside;\n            *exp_dec = k + 1;\n            return;\n        }\n    }\n    \n    u_inside = (lower <= 4 * s);\n    w_inside = (upper >= 4 * s + 4);\n    \n    mid = 4 * s + 2;\n    round_up = (vb > mid) || (vb == mid && (s & 1) != 0);\n    \n    *sig_dec = s + ((u_inside != w_inside) ? w_inside : round_up);\n    *exp_dec = k;\n}\n\n/**\n Write a double number (requires 32 bytes buffer).\n \n We follows the ECMAScript specification to print floating point numbers,\n but with the following changes:\n 1. Keep the negative sign of 0.0 to preserve input information.\n 2. Keep decimal point to indicate the number is floating point.\n 3. Remove positive sign of exponent part.\n */\nstatic_noinline u8 *write_f64_raw(u8 *buf, u64 raw, yyjson_write_flag flg) {\n    u64 sig_bin, sig_dec, sig_raw;\n    i32 exp_bin, exp_dec, sig_len, dot_pos, i, max;\n    u32 exp_raw, hi, lo;\n    u8 *hdr, *num_hdr, *num_end, *dot_end;\n    bool sign;\n    \n    /* decode raw bytes from IEEE-754 double format. */\n    sign = (bool)(raw >> (F64_BITS - 1));\n    sig_raw = raw & F64_SIG_MASK;\n    exp_raw = (u32)((raw & F64_EXP_MASK) >> F64_SIG_BITS);\n    \n    /* return inf and nan */\n    if (unlikely(exp_raw == ((u32)1 << F64_EXP_BITS) - 1)) {\n        if (flg & YYJSON_WRITE_INF_AND_NAN_AS_NULL) {\n            byte_copy_4(buf, \"null\");\n            return buf + 4;\n        } else if (flg & YYJSON_WRITE_ALLOW_INF_AND_NAN) {\n            if (sig_raw == 0) {\n                buf[0] = '-';\n                buf += sign;\n                byte_copy_8(buf, \"Infinity\");\n                buf += 8;\n                return buf;\n            } else {\n                byte_copy_4(buf, \"NaN\");\n                return buf + 3;\n            }\n        } else {\n            return NULL;\n        }\n    }\n    \n    /* add sign for all finite double value, including 0.0 and inf */\n    buf[0] = '-';\n    buf += sign;\n    hdr = buf;\n    \n    /* return zero */\n    if ((raw << 1) == 0) {\n        byte_copy_4(buf, \"0.0\");\n        buf += 3;\n        return buf;\n    }\n    \n    if (likely(exp_raw != 0)) {\n        /* normal number */\n        sig_bin = sig_raw | ((u64)1 << F64_SIG_BITS);\n        exp_bin = (i32)exp_raw - F64_EXP_BIAS - F64_SIG_BITS;\n        \n        /* fast path for small integer number without fraction */\n        if (-F64_SIG_BITS <= exp_bin && exp_bin <= 0) {\n            if (u64_tz_bits(sig_bin) >= (u32)-exp_bin) {\n                /* number is integer in range 1 to 0x1FFFFFFFFFFFFF */\n                sig_dec = sig_bin >> -exp_bin;\n                buf = write_u64_len_1_to_16(sig_dec, buf);\n                byte_copy_2(buf, \".0\");\n                buf += 2;\n                return buf;\n            }\n        }\n        \n        /* binary to decimal */\n        f64_bin_to_dec(sig_raw, exp_raw, sig_bin, exp_bin, &sig_dec, &exp_dec);\n        \n        /* the sig length is 15 to 17 */\n        sig_len = 17;\n        sig_len -= (sig_dec < (u64)100000000 * 100000000);\n        sig_len -= (sig_dec < (u64)100000000 * 10000000);\n        \n        /* the decimal point position relative to the first digit */\n        dot_pos = sig_len + exp_dec;\n        \n        if (-6 < dot_pos && dot_pos <= 21) {\n            /* no need to write exponent part */\n            if (dot_pos <= 0) {\n                /* dot before first digit */\n                /* such as 0.1234, 0.000001234 */\n                num_hdr = hdr + (2 - dot_pos);\n                num_end = write_u64_len_15_to_17_trim(num_hdr, sig_dec);\n                hdr[0] = '0';\n                hdr[1] = '.';\n                hdr += 2;\n                max = -dot_pos;\n                for (i = 0; i < max; i++) hdr[i] = '0';\n                return num_end;\n            } else {\n                /* dot after first digit */\n                /* such as 1.234, 1234.0, 123400000000000000000.0 */\n                memset(hdr +  0, '0', 8);\n                memset(hdr +  8, '0', 8);\n                memset(hdr + 16, '0', 8);\n                num_hdr = hdr + 1;\n                num_end = write_u64_len_15_to_17_trim(num_hdr, sig_dec);\n                for (i = 0; i < dot_pos; i++) hdr[i] = hdr[i + 1];\n                hdr[dot_pos] = '.';\n                dot_end = hdr + dot_pos + 2;\n                return dot_end < num_end ? num_end : dot_end;\n            }\n        } else {\n            /* write with scientific notation */\n            /* such as 1.234e56 */\n            u8 *end = write_u64_len_15_to_17_trim(buf + 1, sig_dec);\n            end -= (end == buf + 2); /* remove '.0', e.g. 2.0e34 -> 2e34 */\n            exp_dec += sig_len - 1;\n            hdr[0] = hdr[1];\n            hdr[1] = '.';\n            end[0] = 'e';\n            buf = write_f64_exp(exp_dec, end + 1);\n            return buf;\n        }\n        \n    } else {\n        /* subnormal number */\n        sig_bin = sig_raw;\n        exp_bin = 1 - F64_EXP_BIAS - F64_SIG_BITS;\n        \n        /* binary to decimal */\n        f64_bin_to_dec(sig_raw, exp_raw, sig_bin, exp_bin, &sig_dec, &exp_dec);\n        \n        /* write significand part */\n        buf = write_u64_len_1_to_17(sig_dec, buf + 1);\n        hdr[0] = hdr[1];\n        hdr[1] = '.';\n        do {\n            buf--;\n            exp_dec++;\n        } while (*buf == '0');\n        exp_dec += (i32)(buf - hdr - 2);\n        buf += (*buf != '.');\n        buf[0] = 'e';\n        buf++;\n        \n        /* write exponent part */\n        buf[0] = '-';\n        buf++;\n        exp_dec = -exp_dec;\n        hi = ((u32)exp_dec * 656) >> 16; /* exp / 100 */\n        lo = (u32)exp_dec - hi * 100; /* exp % 100 */\n        buf[0] = (u8)((u8)hi + (u8)'0');\n        *(v16 *)&buf[1] = *(const v16 *)(digit_table + (lo * 2));\n        buf += 3;\n        return buf;\n    }\n}\n\n#else /* FP_WRITER */\n\n/** Write a double number (requires 32 bytes buffer). */\nstatic_noinline u8 *write_f64_raw(u8 *buf, u64 raw, yyjson_write_flag flg) {\n    /*\n     For IEEE 754, `DBL_DECIMAL_DIG` is 17 for round-trip.\n     For non-IEEE formats, 17 is used to avoid buffer overflow,\n     round-trip is not guaranteed.\n     */\n#if defined(DBL_DECIMAL_DIG) && DBL_DECIMAL_DIG != 17\n    int dig = DBL_DECIMAL_DIG > 17 ? 17 : DBL_DECIMAL_DIG;\n#else\n    int dig = 17;\n#endif\n    \n    /*\n     The snprintf() function is locale-dependent. For currently known locales,\n     (en, zh, ja, ko, am, he, hi) use '.' as the decimal point, while other\n     locales use ',' as the decimal point. we need to replace ',' with '.'\n     to avoid the locale setting.\n     */\n    f64 val = f64_from_raw(raw);\n#if YYJSON_MSC_VER >= 1400\n    int len = sprintf_s((char *)buf, 32, \"%.*g\", dig, val);\n#elif defined(snprintf) || (YYJSON_STDC_VER >= 199901L)\n    int len = snprintf((char *)buf, 32, \"%.*g\", dig, val);\n#else\n    int len = sprintf((char *)buf, \"%.*g\", dig, val);\n#endif\n    \n    u8 *cur = buf;\n    if (unlikely(len < 1)) return NULL;\n    cur += (*cur == '-');\n    if (unlikely(!digi_is_digit(*cur))) {\n        /* nan, inf, or bad output */\n        if (flg & YYJSON_WRITE_INF_AND_NAN_AS_NULL) {\n            byte_copy_4(buf, \"null\");\n            return buf + 4;\n        } else if (flg & YYJSON_WRITE_ALLOW_INF_AND_NAN) {\n            if (*cur == 'i') {\n                byte_copy_8(cur, \"Infinity\");\n                cur += 8;\n                return cur;\n            } else if (*cur == 'n') {\n                byte_copy_4(buf, \"NaN\");\n                return buf + 3;\n            }\n        }\n        return NULL;\n    } else {\n        /* finite number */\n        int i = 0;\n        bool fp = false;\n        for (; i < len; i++) {\n            if (buf[i] == ',') buf[i] = '.';\n            if (digi_is_fp((u8)buf[i])) fp = true;\n        }\n        if (!fp) {\n            buf[len++] = '.';\n            buf[len++] = '0';\n        }\n    }\n    return buf + len;\n}\n\n#endif /* FP_WRITER */\n\n/** Write a JSON number (requires 32 bytes buffer). */\nstatic_inline u8 *write_number(u8 *cur, yyjson_val *val,\n                               yyjson_write_flag flg) {\n    if (val->tag & YYJSON_SUBTYPE_REAL) {\n        u64 raw = val->uni.u64;\n        return write_f64_raw(cur, raw, flg);\n    } else {\n        u64 pos = val->uni.u64;\n        u64 neg = ~pos + 1;\n        usize sgn = ((val->tag & YYJSON_SUBTYPE_SINT) > 0) & ((i64)pos < 0);\n        *cur = '-';\n        return write_u64(sgn ? neg : pos, cur + sgn);\n    }\n}\n\n\n\n/*==============================================================================\n * String Writer\n *============================================================================*/\n\n/** Character encode type, if (type > CHAR_ENC_ERR_1) bytes = type / 2; */\ntypedef u8 char_enc_type;\n#define CHAR_ENC_CPY_1  0 /* 1-byte UTF-8, copy. */\n#define CHAR_ENC_ERR_1  1 /* 1-byte UTF-8, error. */\n#define CHAR_ENC_ESC_A  2 /* 1-byte ASCII, escaped as '\\x'. */\n#define CHAR_ENC_ESC_1  3 /* 1-byte UTF-8, escaped as '\\uXXXX'. */\n#define CHAR_ENC_CPY_2  4 /* 2-byte UTF-8, copy. */\n#define CHAR_ENC_ESC_2  5 /* 2-byte UTF-8, escaped as '\\uXXXX'. */\n#define CHAR_ENC_CPY_3  6 /* 3-byte UTF-8, copy. */\n#define CHAR_ENC_ESC_3  7 /* 3-byte UTF-8, escaped as '\\uXXXX'. */\n#define CHAR_ENC_CPY_4  8 /* 4-byte UTF-8, copy. */\n#define CHAR_ENC_ESC_4  9 /* 4-byte UTF-8, escaped as '\\uXXXX\\uXXXX'. */\n\n/** Character encode type table: don't escape unicode, don't escape '/'.\n    (generate with misc/make_tables.c) */\nstatic const char_enc_type enc_table_cpy[256] = {\n    3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 3,\n    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n    0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n    8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1\n};\n\n/** Character encode type table: don't escape unicode, escape '/'.\n    (generate with misc/make_tables.c) */\nstatic const char_enc_type enc_table_cpy_slash[256] = {\n    3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 3,\n    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n    0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n    8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1\n};\n\n/** Character encode type table: escape unicode, don't escape '/'.\n    (generate with misc/make_tables.c) */\nstatic const char_enc_type enc_table_esc[256] = {\n    3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 3,\n    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n    0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n    9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1\n};\n\n/** Character encode type table: escape unicode, escape '/'.\n    (generate with misc/make_tables.c) */\nstatic const char_enc_type enc_table_esc_slash[256] = {\n    3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 3,\n    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n    0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n    9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1\n};\n\n/** Escaped hex character table: [\"00\" \"01\" \"02\" ... \"FD\" \"FE\" \"FF\"].\n    (generate with misc/make_tables.c) */\nyyjson_align(2)\nstatic const u8 esc_hex_char_table[512] = {\n    '0', '0', '0', '1', '0', '2', '0', '3',\n    '0', '4', '0', '5', '0', '6', '0', '7',\n    '0', '8', '0', '9', '0', 'A', '0', 'B',\n    '0', 'C', '0', 'D', '0', 'E', '0', 'F',\n    '1', '0', '1', '1', '1', '2', '1', '3',\n    '1', '4', '1', '5', '1', '6', '1', '7',\n    '1', '8', '1', '9', '1', 'A', '1', 'B',\n    '1', 'C', '1', 'D', '1', 'E', '1', 'F',\n    '2', '0', '2', '1', '2', '2', '2', '3',\n    '2', '4', '2', '5', '2', '6', '2', '7',\n    '2', '8', '2', '9', '2', 'A', '2', 'B',\n    '2', 'C', '2', 'D', '2', 'E', '2', 'F',\n    '3', '0', '3', '1', '3', '2', '3', '3',\n    '3', '4', '3', '5', '3', '6', '3', '7',\n    '3', '8', '3', '9', '3', 'A', '3', 'B',\n    '3', 'C', '3', 'D', '3', 'E', '3', 'F',\n    '4', '0', '4', '1', '4', '2', '4', '3',\n    '4', '4', '4', '5', '4', '6', '4', '7',\n    '4', '8', '4', '9', '4', 'A', '4', 'B',\n    '4', 'C', '4', 'D', '4', 'E', '4', 'F',\n    '5', '0', '5', '1', '5', '2', '5', '3',\n    '5', '4', '5', '5', '5', '6', '5', '7',\n    '5', '8', '5', '9', '5', 'A', '5', 'B',\n    '5', 'C', '5', 'D', '5', 'E', '5', 'F',\n    '6', '0', '6', '1', '6', '2', '6', '3',\n    '6', '4', '6', '5', '6', '6', '6', '7',\n    '6', '8', '6', '9', '6', 'A', '6', 'B',\n    '6', 'C', '6', 'D', '6', 'E', '6', 'F',\n    '7', '0', '7', '1', '7', '2', '7', '3',\n    '7', '4', '7', '5', '7', '6', '7', '7',\n    '7', '8', '7', '9', '7', 'A', '7', 'B',\n    '7', 'C', '7', 'D', '7', 'E', '7', 'F',\n    '8', '0', '8', '1', '8', '2', '8', '3',\n    '8', '4', '8', '5', '8', '6', '8', '7',\n    '8', '8', '8', '9', '8', 'A', '8', 'B',\n    '8', 'C', '8', 'D', '8', 'E', '8', 'F',\n    '9', '0', '9', '1', '9', '2', '9', '3',\n    '9', '4', '9', '5', '9', '6', '9', '7',\n    '9', '8', '9', '9', '9', 'A', '9', 'B',\n    '9', 'C', '9', 'D', '9', 'E', '9', 'F',\n    'A', '0', 'A', '1', 'A', '2', 'A', '3',\n    'A', '4', 'A', '5', 'A', '6', 'A', '7',\n    'A', '8', 'A', '9', 'A', 'A', 'A', 'B',\n    'A', 'C', 'A', 'D', 'A', 'E', 'A', 'F',\n    'B', '0', 'B', '1', 'B', '2', 'B', '3',\n    'B', '4', 'B', '5', 'B', '6', 'B', '7',\n    'B', '8', 'B', '9', 'B', 'A', 'B', 'B',\n    'B', 'C', 'B', 'D', 'B', 'E', 'B', 'F',\n    'C', '0', 'C', '1', 'C', '2', 'C', '3',\n    'C', '4', 'C', '5', 'C', '6', 'C', '7',\n    'C', '8', 'C', '9', 'C', 'A', 'C', 'B',\n    'C', 'C', 'C', 'D', 'C', 'E', 'C', 'F',\n    'D', '0', 'D', '1', 'D', '2', 'D', '3',\n    'D', '4', 'D', '5', 'D', '6', 'D', '7',\n    'D', '8', 'D', '9', 'D', 'A', 'D', 'B',\n    'D', 'C', 'D', 'D', 'D', 'E', 'D', 'F',\n    'E', '0', 'E', '1', 'E', '2', 'E', '3',\n    'E', '4', 'E', '5', 'E', '6', 'E', '7',\n    'E', '8', 'E', '9', 'E', 'A', 'E', 'B',\n    'E', 'C', 'E', 'D', 'E', 'E', 'E', 'F',\n    'F', '0', 'F', '1', 'F', '2', 'F', '3',\n    'F', '4', 'F', '5', 'F', '6', 'F', '7',\n    'F', '8', 'F', '9', 'F', 'A', 'F', 'B',\n    'F', 'C', 'F', 'D', 'F', 'E', 'F', 'F'\n};\n\n/** Escaped single character table. (generate with misc/make_tables.c) */\nyyjson_align(2)\nstatic const u8 esc_single_char_table[512] = {\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    '\\\\', 'b', '\\\\', 't', '\\\\', 'n', ' ', ' ',\n    '\\\\', 'f', '\\\\', 'r', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', '\\\\', '\"', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', '\\\\', '/',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    '\\\\', '\\\\', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\n    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '\n};\n\n/** Returns the encode table with options. */\nstatic_inline const char_enc_type *get_enc_table_with_flag(\n    yyjson_read_flag flg) {\n    if (unlikely(flg & YYJSON_WRITE_ESCAPE_UNICODE)) {\n        if (unlikely(flg & YYJSON_WRITE_ESCAPE_SLASHES)) {\n            return enc_table_esc_slash;\n        } else {\n            return enc_table_esc;\n        }\n    } else {\n        if (unlikely(flg & YYJSON_WRITE_ESCAPE_SLASHES)) {\n            return enc_table_cpy_slash;\n        } else {\n            return enc_table_cpy;\n        }\n    }\n}\n\n/** Write raw string. */\nstatic_inline u8 *write_raw(u8 *cur, const u8 *raw, usize raw_len) {\n    memcpy(cur, raw, raw_len);\n    return cur + raw_len;\n}\n\n/**\n Write UTF-8 string (requires len * 6 + 2 bytes buffer).\n @param cur Buffer cursor.\n @param esc Escape unicode.\n @param inv Allow invalid unicode.\n @param str A UTF-8 string, null-terminator is not required.\n @param str_len Length of string in bytes.\n @param enc_table Encode type table for character.\n @return The buffer cursor after string, or NULL on invalid unicode.\n */\nstatic_inline u8 *write_string(u8 *cur, bool esc, bool inv,\n                               const u8 *str, usize str_len,\n                               const char_enc_type *enc_table) {\n    \n    /* UTF-8 character mask and pattern, see `read_string()` for details. */\n#if YYJSON_ENDIAN == YYJSON_BIG_ENDIAN\n    const u16 b2_mask = 0xE0C0UL;\n    const u16 b2_patt = 0xC080UL;\n    const u16 b2_requ = 0x1E00UL;\n    const u32 b3_mask = 0xF0C0C000UL;\n    const u32 b3_patt = 0xE0808000UL;\n    const u32 b3_requ = 0x0F200000UL;\n    const u32 b3_erro = 0x0D200000UL;\n    const u32 b4_mask = 0xF8C0C0C0UL;\n    const u32 b4_patt = 0xF0808080UL;\n    const u32 b4_requ = 0x07300000UL;\n    const u32 b4_err0 = 0x04000000UL;\n    const u32 b4_err1 = 0x03300000UL;\n#elif YYJSON_ENDIAN == YYJSON_LITTLE_ENDIAN\n    const u16 b2_mask = 0xC0E0UL;\n    const u16 b2_patt = 0x80C0UL;\n    const u16 b2_requ = 0x001EUL;\n    const u32 b3_mask = 0x00C0C0F0UL;\n    const u32 b3_patt = 0x008080E0UL;\n    const u32 b3_requ = 0x0000200FUL;\n    const u32 b3_erro = 0x0000200DUL;\n    const u32 b4_mask = 0xC0C0C0F8UL;\n    const u32 b4_patt = 0x808080F0UL;\n    const u32 b4_requ = 0x00003007UL;\n    const u32 b4_err0 = 0x00000004UL;\n    const u32 b4_err1 = 0x00003003UL;\n#else\n    v16_uni b2_mask_uni = {{ 0xE0, 0xC0 }};\n    v16_uni b2_patt_uni = {{ 0xC0, 0x80 }};\n    v16_uni b2_requ_uni = {{ 0x1E, 0x00 }};\n    v32_uni b3_mask_uni = {{ 0xF0, 0xC0, 0xC0, 0x00 }};\n    v32_uni b3_patt_uni = {{ 0xE0, 0x80, 0x80, 0x00 }};\n    v32_uni b3_requ_uni = {{ 0x0F, 0x20, 0x00, 0x00 }};\n    v32_uni b3_erro_uni = {{ 0x0D, 0x20, 0x00, 0x00 }};\n    v32_uni b4_mask_uni = {{ 0xF8, 0xC0, 0xC0, 0xC0 }};\n    v32_uni b4_patt_uni = {{ 0xF0, 0x80, 0x80, 0x80 }};\n    v32_uni b4_requ_uni = {{ 0x07, 0x30, 0x00, 0x00 }};\n    v32_uni b4_err0_uni = {{ 0x04, 0x00, 0x00, 0x00 }};\n    v32_uni b4_err1_uni = {{ 0x03, 0x30, 0x00, 0x00 }};\n    u16 b2_mask = b2_mask_uni.u;\n    u16 b2_patt = b2_patt_uni.u;\n    u16 b2_requ = b2_requ_uni.u;\n    u32 b3_mask = b3_mask_uni.u;\n    u32 b3_patt = b3_patt_uni.u;\n    u32 b3_requ = b3_requ_uni.u;\n    u32 b3_erro = b3_erro_uni.u;\n    u32 b4_mask = b4_mask_uni.u;\n    u32 b4_patt = b4_patt_uni.u;\n    u32 b4_requ = b4_requ_uni.u;\n    u32 b4_err0 = b4_err0_uni.u;\n    u32 b4_err1 = b4_err1_uni.u;\n#endif\n    \n#define is_valid_seq_2(uni) ( \\\n    ((uni & b2_mask) == b2_patt) && \\\n    ((uni & b2_requ)) \\\n)\n    \n#define is_valid_seq_3(uni) ( \\\n    ((uni & b3_mask) == b3_patt) && \\\n    ((tmp = (uni & b3_requ))) && \\\n    ((tmp != b3_erro)) \\\n)\n    \n#define is_valid_seq_4(uni) ( \\\n    ((uni & b4_mask) == b4_patt) && \\\n    ((tmp = (uni & b4_requ))) && \\\n    ((tmp & b4_err0) == 0 || (tmp & b4_err1) == 0) \\\n)\n    \n    /* The replacement character U+FFFD, used to indicate invalid character. */\n    const v32 rep = { 'F', 'F', 'F', 'D' };\n    const v32 pre = { '\\\\', 'u', '0', '0' };\n    \n    const u8 *src = str;\n    const u8 *end = str + str_len;\n    *cur++ = '\"';\n    \ncopy_ascii:\n    /*\n     Copy continuous ASCII, loop unrolling, same as the following code:\n     \n         while (end > src) (\n            if (unlikely(enc_table[*src])) break;\n            *cur++ = *src++;\n         );\n     */\n#define expr_jump(i) \\\n    if (unlikely(enc_table[src[i]])) goto stop_char_##i;\n    \n#define expr_stop(i) \\\n    stop_char_##i: \\\n    memcpy(cur, src, i); \\\n    cur += i; src += i; goto copy_utf8;\n    \n    while (end - src >= 16) {\n        repeat16_incr(expr_jump)\n        byte_copy_16(cur, src);\n        cur += 16; src += 16;\n    }\n    \n    while (end - src >= 4) {\n        repeat4_incr(expr_jump)\n        byte_copy_4(cur, src);\n        cur += 4; src += 4;\n    }\n    \n    while (end > src) {\n        expr_jump(0)\n        *cur++ = *src++;\n    }\n    \n    *cur++ = '\"';\n    return cur;\n    \n    repeat16_incr(expr_stop)\n    \n#undef expr_jump\n#undef expr_stop\n    \ncopy_utf8:\n    if (unlikely(src + 4 > end)) {\n        if (end == src) goto copy_end;\n        if (end - src < enc_table[*src] / 2) goto err_one;\n    }\n    switch (enc_table[*src]) {\n        case CHAR_ENC_CPY_1: {\n            *cur++ = *src++;\n            goto copy_ascii;\n        }\n        case CHAR_ENC_CPY_2: {\n            u16 v;\n            v = byte_load_2(src);\n            if (unlikely(!is_valid_seq_2(v))) goto err_cpy;\n            \n            byte_copy_2(cur, src);\n            cur += 2;\n            src += 2;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_CPY_3: {\n            u32 v, tmp;\n            if (likely(src + 4 <= end)) {\n                v = byte_load_4(src);\n                if (unlikely(!is_valid_seq_3(v))) goto err_cpy;\n                byte_copy_4(cur, src);\n            } else {\n                v = byte_load_3(src);\n                if (unlikely(!is_valid_seq_3(v))) goto err_cpy;\n                byte_copy_4(cur, &v);\n            }\n            cur += 3;\n            src += 3;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_CPY_4: {\n            u32 v, tmp;\n            v = byte_load_4(src);\n            if (unlikely(!is_valid_seq_4(v))) goto err_cpy;\n            \n            byte_copy_4(cur, src);\n            cur += 4;\n            src += 4;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_A: {\n            byte_move_2(cur, &esc_single_char_table[*src * 2]);\n            cur += 2;\n            src += 1;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_1: {\n            byte_copy_4(cur + 0, &pre);\n            byte_copy_2(cur + 4, &esc_hex_char_table[*src * 2]);\n            cur += 6;\n            src += 1;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_2: {\n            u16 u, v;\n            v = byte_load_2(src);\n            if (unlikely(!is_valid_seq_2(v))) goto err_esc;\n            \n            u = (u16)(((u16)(src[0] & 0x1F) << 6) |\n                      ((u16)(src[1] & 0x3F) << 0));\n            byte_copy_2(cur + 0, &pre);\n            byte_copy_2(cur + 2, &esc_hex_char_table[(u >> 8) * 2]);\n            byte_copy_2(cur + 4, &esc_hex_char_table[(u & 0xFF) * 2]);\n            cur += 6;\n            src += 2;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_3: {\n            u16 u;\n            u32 v, tmp;\n            v = byte_load_3(src);\n            if (unlikely(!is_valid_seq_3(v))) goto err_esc;\n            \n            u = (u16)(((u16)(src[0] & 0x0F) << 12) |\n                      ((u16)(src[1] & 0x3F) << 6) |\n                      ((u16)(src[2] & 0x3F) << 0));\n            byte_copy_2(cur + 0, &pre);\n            byte_copy_2(cur + 2, &esc_hex_char_table[(u >> 8) * 2]);\n            byte_copy_2(cur + 4, &esc_hex_char_table[(u & 0xFF) * 2]);\n            cur += 6;\n            src += 3;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ESC_4: {\n            u32 hi, lo, u, v, tmp;\n            v = byte_load_4(src);\n            if (unlikely(!is_valid_seq_4(v))) goto err_esc;\n            \n            u = ((u32)(src[0] & 0x07) << 18) |\n                ((u32)(src[1] & 0x3F) << 12) |\n                ((u32)(src[2] & 0x3F) << 6) |\n                ((u32)(src[3] & 0x3F) << 0);\n            u -= 0x10000;\n            hi = (u >> 10) + 0xD800;\n            lo = (u & 0x3FF) + 0xDC00;\n            byte_copy_2(cur + 0, &pre);\n            byte_copy_2(cur + 2, &esc_hex_char_table[(hi >> 8) * 2]);\n            byte_copy_2(cur + 4, &esc_hex_char_table[(hi & 0xFF) * 2]);\n            byte_copy_2(cur + 6, &pre);\n            byte_copy_2(cur + 8, &esc_hex_char_table[(lo >> 8) * 2]);\n            byte_copy_2(cur + 10, &esc_hex_char_table[(lo & 0xFF) * 2]);\n            cur += 12;\n            src += 4;\n            goto copy_utf8;\n        }\n        case CHAR_ENC_ERR_1: {\n            goto err_one;\n        }\n        default: break;\n    }\n    \ncopy_end:\n    *cur++ = '\"';\n    return cur;\n    \nerr_one:\n    if (esc) goto err_esc;\n    else goto err_cpy;\n    \nerr_cpy:\n    if (!inv) return NULL;\n    *cur++ = *src++;\n    goto copy_utf8;\n    \nerr_esc:\n    if (!inv) return NULL;\n    byte_copy_2(cur + 0, &pre);\n    byte_copy_4(cur + 2, &rep);\n    cur += 6;\n    src += 1;\n    goto copy_utf8;\n    \n#undef is_valid_seq_2\n#undef is_valid_seq_3\n#undef is_valid_seq_4\n}\n\n\n\n/*==============================================================================\n * Writer Utilities\n *============================================================================*/\n\n/** Write null (requires 8 bytes buffer). */\nstatic_inline u8 *write_null(u8 *cur) {\n    v64 v = { 'n', 'u', 'l', 'l', ',', '\\n', 0, 0 };\n    byte_copy_8(cur, &v);\n    return cur + 4;\n}\n\n/** Write bool (requires 8 bytes buffer). */\nstatic_inline u8 *write_bool(u8 *cur, bool val) {\n    v64 v0 = { 'f', 'a', 'l', 's', 'e', ',', '\\n', 0 };\n    v64 v1 = { 't', 'r', 'u', 'e', ',', '\\n', 0, 0 };\n    if (val) {\n        byte_copy_8(cur, &v1);\n    } else {\n        byte_copy_8(cur, &v0);\n    }\n    return cur + 5 - val;\n}\n\n/** Write indent (requires level x 4 bytes buffer).\n    Param spaces should not larger than 4. */\nstatic_inline u8 *write_indent(u8 *cur, usize level, usize spaces) {\n    while (level-- > 0) {\n        byte_copy_4(cur, \"    \");\n        cur += spaces;\n    }\n    return cur;\n}\n\n/** Write data to file pointer. */\nstatic bool write_dat_to_fp(FILE *fp, u8 *dat, usize len,\n                            yyjson_write_err *err) {\n    if (fwrite(dat, len, 1, fp) != 1) {\n        err->msg = \"file writing failed\";\n        err->code = YYJSON_WRITE_ERROR_FILE_WRITE;\n        return false;\n    }\n    return true;\n}\n\n/** Write data to file. */\nstatic bool write_dat_to_file(const char *path, u8 *dat, usize len,\n                              yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    err->msg = _msg; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    if (file) fclose(file); \\\n    return false; \\\n} while (false)\n    \n    FILE *file = fopen_writeonly(path);\n    if (file == NULL) {\n        return_err(FILE_OPEN, \"file opening failed\");\n    }\n    if (fwrite(dat, len, 1, file) != 1) {\n        return_err(FILE_WRITE, \"file writing failed\");\n    }\n    if (fclose(file) != 0) {\n        file = NULL;\n        return_err(FILE_WRITE, \"file closing failed\");\n    }\n    return true;\n    \n#undef return_err\n}\n\n\n\n/*==============================================================================\n * JSON Writer Implementation\n *============================================================================*/\n\ntypedef struct yyjson_write_ctx {\n    usize tag;\n} yyjson_write_ctx;\n\nstatic_inline void yyjson_write_ctx_set(yyjson_write_ctx *ctx,\n                                        usize size, bool is_obj) {\n    ctx->tag = (size << 1) | (usize)is_obj;\n}\n\nstatic_inline void yyjson_write_ctx_get(yyjson_write_ctx *ctx,\n                                        usize *size, bool *is_obj) {\n    usize tag = ctx->tag;\n    *size = tag >> 1;\n    *is_obj = (bool)(tag & 1);\n}\n\n/** Write single JSON value. */\nstatic_inline u8 *yyjson_write_single(yyjson_val *val,\n                                      yyjson_write_flag flg,\n                                      yyjson_alc alc,\n                                      usize *dat_len,\n                                      yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    if (hdr) alc.free(alc.ctx, (void *)hdr); \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    hdr = (u8 *)alc.malloc(alc.ctx, _len); \\\n    if (!hdr) goto fail_alloc; \\\n    cur = hdr; \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    u8 *hdr = NULL, *cur;\n    usize str_len;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    \n    switch (unsafe_yyjson_get_type(val)) {\n        case YYJSON_TYPE_RAW:\n            str_len = unsafe_yyjson_get_len(val);\n            str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n            check_str_len(str_len);\n            incr_len(str_len + 1);\n            cur = write_raw(cur, str_ptr, str_len);\n            break;\n            \n        case YYJSON_TYPE_STR:\n            str_len = unsafe_yyjson_get_len(val);\n            str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n            check_str_len(str_len);\n            incr_len(str_len * 6 + 4);\n            cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n            if (unlikely(!cur)) goto fail_str;\n            break;\n            \n        case YYJSON_TYPE_NUM:\n            incr_len(32);\n            cur = write_number(cur, val, flg);\n            if (unlikely(!cur)) goto fail_num;\n            break;\n            \n        case YYJSON_TYPE_BOOL:\n            incr_len(8);\n            cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n            break;\n            \n        case YYJSON_TYPE_NULL:\n            incr_len(8);\n            cur = write_null(cur);\n            break;\n            \n        case YYJSON_TYPE_ARR:\n            incr_len(4);\n            byte_copy_2(cur, \"[]\");\n            cur += 2;\n            break;\n            \n        case YYJSON_TYPE_OBJ:\n            incr_len(4);\n            byte_copy_2(cur, \"{}\");\n            cur += 2;\n            break;\n            \n        default:\n            goto fail_type;\n    }\n    \n    *cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    memset(err, 0, sizeof(yyjson_write_err));\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef check_str_len\n#undef incr_len\n}\n\n/** Write JSON document minify.\n    The root of this document should be a non-empty container. */\nstatic_inline u8 *yyjson_write_minify(const yyjson_val *root,\n                                      const yyjson_write_flag flg,\n                                      const yyjson_alc alc,\n                                      usize *dat_len,\n                                      yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    if (hdr) alc.free(alc.ctx, hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    ext_len = (usize)(_len); \\\n    if (unlikely((u8 *)(cur + ext_len) >= (u8 *)ctx)) { \\\n        alc_inc = yyjson_max(alc_len / 2, ext_len); \\\n        alc_inc = size_align_up(alc_inc, sizeof(yyjson_write_ctx)); \\\n        if (size_add_is_overflow(alc_len, alc_inc)) goto fail_alloc; \\\n        alc_len += alc_inc; \\\n        tmp = (u8 *)alc.realloc(alc.ctx, hdr, alc_len - alc_inc, alc_len); \\\n        if (unlikely(!tmp)) goto fail_alloc; \\\n        ctx_len = (usize)(end - (u8 *)ctx); \\\n        ctx_tmp = (yyjson_write_ctx *)(void *)(tmp + (alc_len - ctx_len)); \\\n        memmove((void *)ctx_tmp, (void *)(tmp + ((u8 *)ctx - hdr)), ctx_len); \\\n        ctx = ctx_tmp; \\\n        cur = tmp + (cur - hdr); \\\n        end = tmp + alc_len; \\\n        hdr = tmp; \\\n    } \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    yyjson_val *val;\n    yyjson_type val_type;\n    usize ctn_len, ctn_len_tmp;\n    bool ctn_obj, ctn_obj_tmp, is_key;\n    u8 *hdr, *cur, *end, *tmp;\n    yyjson_write_ctx *ctx, *ctx_tmp;\n    usize alc_len, alc_inc, ctx_len, ext_len, str_len;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    \n    alc_len = root->uni.ofs / sizeof(yyjson_val);\n    alc_len = alc_len * YYJSON_WRITER_ESTIMATED_MINIFY_RATIO + 64;\n    alc_len = size_align_up(alc_len, sizeof(yyjson_write_ctx));\n    hdr = (u8 *)alc.malloc(alc.ctx, alc_len);\n    if (!hdr) goto fail_alloc;\n    cur = hdr;\n    end = hdr + alc_len;\n    ctx = (yyjson_write_ctx *)(void *)end;\n    \ndoc_begin:\n    val = constcast(yyjson_val *)root;\n    val_type = unsafe_yyjson_get_type(val);\n    ctn_obj = (val_type == YYJSON_TYPE_OBJ);\n    ctn_len = unsafe_yyjson_get_len(val) << (u8)ctn_obj;\n    *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n    val++;\n    \nval_begin:\n    val_type = unsafe_yyjson_get_type(val);\n    if (val_type == YYJSON_TYPE_STR) {\n        is_key = ((u8)ctn_obj & (u8)~ctn_len);\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len * 6 + 16);\n        cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n        if (unlikely(!cur)) goto fail_str;\n        *cur++ = is_key ? ':' : ',';\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NUM) {\n        incr_len(32);\n        cur = write_number(cur, val, flg);\n        if (unlikely(!cur)) goto fail_num;\n        *cur++ = ',';\n        goto val_end;\n    }\n    if ((val_type & (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) ==\n                    (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) {\n        ctn_len_tmp = unsafe_yyjson_get_len(val);\n        ctn_obj_tmp = (val_type == YYJSON_TYPE_OBJ);\n        incr_len(16);\n        if (unlikely(ctn_len_tmp == 0)) {\n            /* write empty container */\n            *cur++ = (u8)('[' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = (u8)(']' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = ',';\n            goto val_end;\n        } else {\n            /* push context, setup new container */\n            yyjson_write_ctx_set(--ctx, ctn_len, ctn_obj);\n            ctn_len = ctn_len_tmp << (u8)ctn_obj_tmp;\n            ctn_obj = ctn_obj_tmp;\n            *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n            val++;\n            goto val_begin;\n        }\n    }\n    if (val_type == YYJSON_TYPE_BOOL) {\n        incr_len(16);\n        cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n        cur++;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NULL) {\n        incr_len(16);\n        cur = write_null(cur);\n        cur++;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_RAW) {\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len + 2);\n        cur = write_raw(cur, str_ptr, str_len);\n        *cur++ = ',';\n        goto val_end;\n    }\n    goto fail_type;\n    \nval_end:\n    val++;\n    ctn_len--;\n    if (unlikely(ctn_len == 0)) goto ctn_end;\n    goto val_begin;\n    \nctn_end:\n    cur--;\n    *cur++ = (u8)(']' | ((u8)ctn_obj << 5));\n    *cur++ = ',';\n    if (unlikely((u8 *)ctx >= end)) goto doc_end;\n    yyjson_write_ctx_get(ctx++, &ctn_len, &ctn_obj);\n    ctn_len--;\n    if (likely(ctn_len > 0)) {\n        goto val_begin;\n    } else {\n        goto ctn_end;\n    }\n    \ndoc_end:\n    *--cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    memset(err, 0, sizeof(yyjson_write_err));\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef incr_len\n#undef check_str_len\n}\n\n/** Write JSON document pretty.\n    The root of this document should be a non-empty container. */\nstatic_inline u8 *yyjson_write_pretty(const yyjson_val *root,\n                                      const yyjson_write_flag flg,\n                                      const yyjson_alc alc,\n                                      usize *dat_len,\n                                      yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    if (hdr) alc.free(alc.ctx, hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    ext_len = (usize)(_len); \\\n    if (unlikely((u8 *)(cur + ext_len) >= (u8 *)ctx)) { \\\n        alc_inc = yyjson_max(alc_len / 2, ext_len); \\\n        alc_inc = size_align_up(alc_inc, sizeof(yyjson_write_ctx)); \\\n        if (size_add_is_overflow(alc_len, alc_inc)) goto fail_alloc; \\\n        alc_len += alc_inc; \\\n        tmp = (u8 *)alc.realloc(alc.ctx, hdr, alc_len - alc_inc, alc_len); \\\n        if (unlikely(!tmp)) goto fail_alloc; \\\n        ctx_len = (usize)(end - (u8 *)ctx); \\\n        ctx_tmp = (yyjson_write_ctx *)(void *)(tmp + (alc_len - ctx_len)); \\\n        memmove((void *)ctx_tmp, (void *)(tmp + ((u8 *)ctx - hdr)), ctx_len); \\\n        ctx = ctx_tmp; \\\n        cur = tmp + (cur - hdr); \\\n        end = tmp + alc_len; \\\n        hdr = tmp; \\\n    } \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    yyjson_val *val;\n    yyjson_type val_type;\n    usize ctn_len, ctn_len_tmp;\n    bool ctn_obj, ctn_obj_tmp, is_key, no_indent;\n    u8 *hdr, *cur, *end, *tmp;\n    yyjson_write_ctx *ctx, *ctx_tmp;\n    usize alc_len, alc_inc, ctx_len, ext_len, str_len, level;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    usize spaces = (flg & YYJSON_WRITE_PRETTY_TWO_SPACES) ? 2 : 4;\n    \n    alc_len = root->uni.ofs / sizeof(yyjson_val);\n    alc_len = alc_len * YYJSON_WRITER_ESTIMATED_PRETTY_RATIO + 64;\n    alc_len = size_align_up(alc_len, sizeof(yyjson_write_ctx));\n    hdr = (u8 *)alc.malloc(alc.ctx, alc_len);\n    if (!hdr) goto fail_alloc;\n    cur = hdr;\n    end = hdr + alc_len;\n    ctx = (yyjson_write_ctx *)(void *)end;\n    \ndoc_begin:\n    val = constcast(yyjson_val *)root;\n    val_type = unsafe_yyjson_get_type(val);\n    ctn_obj = (val_type == YYJSON_TYPE_OBJ);\n    ctn_len = unsafe_yyjson_get_len(val) << (u8)ctn_obj;\n    *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n    *cur++ = '\\n';\n    val++;\n    level = 1;\n    \nval_begin:\n    val_type = unsafe_yyjson_get_type(val);\n    if (val_type == YYJSON_TYPE_STR) {\n        is_key = (bool)((u8)ctn_obj & (u8)~ctn_len);\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len * 6 + 16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n        if (unlikely(!cur)) goto fail_str;\n        *cur++ = is_key ? ':' : ',';\n        *cur++ = is_key ? ' ' : '\\n';\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NUM) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(32 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_number(cur, val, flg);\n        if (unlikely(!cur)) goto fail_num;\n        *cur++ = ',';\n        *cur++ = '\\n';\n        goto val_end;\n    }\n    if ((val_type & (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) ==\n                    (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        ctn_len_tmp = unsafe_yyjson_get_len(val);\n        ctn_obj_tmp = (val_type == YYJSON_TYPE_OBJ);\n        if (unlikely(ctn_len_tmp == 0)) {\n            /* write empty container */\n            incr_len(16 + (no_indent ? 0 : level * 4));\n            cur = write_indent(cur, no_indent ? 0 : level, spaces);\n            *cur++ = (u8)('[' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = (u8)(']' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = ',';\n            *cur++ = '\\n';\n            goto val_end;\n        } else {\n            /* push context, setup new container */\n            incr_len(32 + (no_indent ? 0 : level * 4));\n            yyjson_write_ctx_set(--ctx, ctn_len, ctn_obj);\n            ctn_len = ctn_len_tmp << (u8)ctn_obj_tmp;\n            ctn_obj = ctn_obj_tmp;\n            cur = write_indent(cur, no_indent ? 0 : level, spaces);\n            level++;\n            *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n            *cur++ = '\\n';\n            val++;\n            goto val_begin;\n        }\n    }\n    if (val_type == YYJSON_TYPE_BOOL) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n        cur += 2;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NULL) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_null(cur);\n        cur += 2;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_RAW) {\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len + 3);\n        cur = write_raw(cur, str_ptr, str_len);\n        *cur++ = ',';\n        *cur++ = '\\n';\n        goto val_end;\n    }\n    goto fail_type;\n    \nval_end:\n    val++;\n    ctn_len--;\n    if (unlikely(ctn_len == 0)) goto ctn_end;\n    goto val_begin;\n    \nctn_end:\n    cur -= 2;\n    *cur++ = '\\n';\n    incr_len(level * 4);\n    cur = write_indent(cur, --level, spaces);\n    *cur++ = (u8)(']' | ((u8)ctn_obj << 5));\n    if (unlikely((u8 *)ctx >= end)) goto doc_end;\n    yyjson_write_ctx_get(ctx++, &ctn_len, &ctn_obj);\n    ctn_len--;\n    *cur++ = ',';\n    *cur++ = '\\n';\n    if (likely(ctn_len > 0)) {\n        goto val_begin;\n    } else {\n        goto ctn_end;\n    }\n    \ndoc_end:\n    *cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    memset(err, 0, sizeof(yyjson_write_err));\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef incr_len\n#undef check_str_len\n}\n\nchar *yyjson_val_write_opts(const yyjson_val *val,\n                            yyjson_write_flag flg,\n                            const yyjson_alc *alc_ptr,\n                            usize *dat_len,\n                            yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    usize dummy_dat_len;\n    yyjson_alc alc = alc_ptr ? *alc_ptr : YYJSON_DEFAULT_ALC;\n    yyjson_val *root = constcast(yyjson_val *)val;\n    \n    err = err ? err : &dummy_err;\n    dat_len = dat_len ? dat_len : &dummy_dat_len;\n    \n#if YYJSON_DISABLE_NON_STANDARD\n    flg &= ~YYJSON_WRITE_ALLOW_INF_AND_NAN;\n    flg &= ~YYJSON_WRITE_ALLOW_INVALID_UNICODE;\n#endif\n    \n    if (unlikely(!root)) {\n        *dat_len = 0;\n        err->msg = \"input JSON is NULL\";\n        err->code = YYJSON_READ_ERROR_INVALID_PARAMETER;\n        return NULL;\n    }\n    \n    if (!unsafe_yyjson_is_ctn(root) || unsafe_yyjson_get_len(root) == 0) {\n        return (char *)yyjson_write_single(root, flg, alc, dat_len, err);\n    } else if (flg & (YYJSON_WRITE_PRETTY | YYJSON_WRITE_PRETTY_TWO_SPACES)) {\n        return (char *)yyjson_write_pretty(root, flg, alc, dat_len, err);\n    } else {\n        return (char *)yyjson_write_minify(root, flg, alc, dat_len, err);\n    }\n}\n\nchar *yyjson_write_opts(const yyjson_doc *doc,\n                        yyjson_write_flag flg,\n                        const yyjson_alc *alc_ptr,\n                        usize *dat_len,\n                        yyjson_write_err *err) {\n    yyjson_val *root = doc ? doc->root : NULL;\n    return yyjson_val_write_opts(root, flg, alc_ptr, dat_len, err);\n}\n\nbool yyjson_val_write_file(const char *path,\n                           const yyjson_val *val,\n                           yyjson_write_flag flg,\n                           const yyjson_alc *alc_ptr,\n                           yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    u8 *dat;\n    usize dat_len = 0;\n    yyjson_val *root = constcast(yyjson_val *)val;\n    bool suc;\n    \n    alc_ptr = alc_ptr ? alc_ptr : &YYJSON_DEFAULT_ALC;\n    err = err ? err : &dummy_err;\n    if (unlikely(!path || !*path)) {\n        err->msg = \"input path is invalid\";\n        err->code = YYJSON_READ_ERROR_INVALID_PARAMETER;\n        return false;\n    }\n    \n    dat = (u8 *)yyjson_val_write_opts(root, flg, alc_ptr, &dat_len, err);\n    if (unlikely(!dat)) return false;\n    suc = write_dat_to_file(path, dat, dat_len, err);\n    alc_ptr->free(alc_ptr->ctx, dat);\n    return suc;\n}\n\nbool yyjson_val_write_fp(FILE *fp,\n                         const yyjson_val *val,\n                         yyjson_write_flag flg,\n                         const yyjson_alc *alc_ptr,\n                         yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    u8 *dat;\n    usize dat_len = 0;\n    yyjson_val *root = constcast(yyjson_val *)val;\n    bool suc;\n    \n    alc_ptr = alc_ptr ? alc_ptr : &YYJSON_DEFAULT_ALC;\n    err = err ? err : &dummy_err;\n    if (unlikely(!fp)) {\n        err->msg = \"input fp is invalid\";\n        err->code = YYJSON_READ_ERROR_INVALID_PARAMETER;\n        return false;\n    }\n    \n    dat = (u8 *)yyjson_val_write_opts(root, flg, alc_ptr, &dat_len, err);\n    if (unlikely(!dat)) return false;\n    suc = write_dat_to_fp(fp, dat, dat_len, err);\n    alc_ptr->free(alc_ptr->ctx, dat);\n    return suc;\n}\n\nbool yyjson_write_file(const char *path,\n                       const yyjson_doc *doc,\n                       yyjson_write_flag flg,\n                       const yyjson_alc *alc_ptr,\n                       yyjson_write_err *err) {\n    yyjson_val *root = doc ? doc->root : NULL;\n    return yyjson_val_write_file(path, root, flg, alc_ptr, err);\n}\n\nbool yyjson_write_fp(FILE *fp,\n                    const yyjson_doc *doc,\n                    yyjson_write_flag flg,\n                     const yyjson_alc *alc_ptr,\n                    yyjson_write_err *err) {\n    yyjson_val *root = doc ? doc->root : NULL;\n    return yyjson_val_write_fp(fp, root, flg, alc_ptr, err);\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Writer Implementation\n *============================================================================*/\n\ntypedef struct yyjson_mut_write_ctx {\n    usize tag;\n    yyjson_mut_val *ctn;\n} yyjson_mut_write_ctx;\n\nstatic_inline void yyjson_mut_write_ctx_set(yyjson_mut_write_ctx *ctx,\n                                            yyjson_mut_val *ctn,\n                                            usize size, bool is_obj) {\n    ctx->tag = (size << 1) | (usize)is_obj;\n    ctx->ctn = ctn;\n}\n\nstatic_inline void yyjson_mut_write_ctx_get(yyjson_mut_write_ctx *ctx,\n                                            yyjson_mut_val **ctn,\n                                            usize *size, bool *is_obj) {\n    usize tag = ctx->tag;\n    *size = tag >> 1;\n    *is_obj = (bool)(tag & 1);\n    *ctn = ctx->ctn;\n}\n\n/** Get the estimated number of values for the mutable JSON document. */\nstatic_inline usize yyjson_mut_doc_estimated_val_num(\n    const yyjson_mut_doc *doc) {\n    usize sum = 0;\n    yyjson_val_chunk *chunk = doc->val_pool.chunks;\n    while (chunk) {\n        sum += chunk->chunk_size / sizeof(yyjson_mut_val) - 1;\n        if (chunk == doc->val_pool.chunks) {\n            sum -= (usize)(doc->val_pool.end - doc->val_pool.cur);\n        }\n        chunk = chunk->next;\n    }\n    return sum;\n}\n\n/** Write single JSON value. */\nstatic_inline u8 *yyjson_mut_write_single(yyjson_mut_val *val,\n                                          yyjson_write_flag flg,\n                                          yyjson_alc alc,\n                                          usize *dat_len,\n                                          yyjson_write_err *err) {\n    return yyjson_write_single((yyjson_val *)val, flg, alc, dat_len, err);\n}\n\n/** Write JSON document minify.\n    The root of this document should be a non-empty container. */\nstatic_inline u8 *yyjson_mut_write_minify(const yyjson_mut_val *root,\n                                          usize estimated_val_num,\n                                          yyjson_write_flag flg,\n                                          yyjson_alc alc,\n                                          usize *dat_len,\n                                          yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    if (hdr) alc.free(alc.ctx, hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    ext_len = (usize)(_len); \\\n    if (unlikely((u8 *)(cur + ext_len) >= (u8 *)ctx)) { \\\n        alc_inc = yyjson_max(alc_len / 2, ext_len); \\\n        alc_inc = size_align_up(alc_inc, sizeof(yyjson_mut_write_ctx)); \\\n        if (size_add_is_overflow(alc_len, alc_inc)) goto fail_alloc; \\\n        alc_len += alc_inc; \\\n        tmp = (u8 *)alc.realloc(alc.ctx, hdr, alc_len - alc_inc, alc_len); \\\n        if (unlikely(!tmp)) goto fail_alloc; \\\n        ctx_len = (usize)(end - (u8 *)ctx); \\\n        ctx_tmp = (yyjson_mut_write_ctx *)(void *)(tmp + (alc_len - ctx_len)); \\\n        memmove((void *)ctx_tmp, (void *)(tmp + ((u8 *)ctx - hdr)), ctx_len); \\\n        ctx = ctx_tmp; \\\n        cur = tmp + (cur - hdr); \\\n        end = tmp + alc_len; \\\n        hdr = tmp; \\\n    } \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    yyjson_mut_val *val, *ctn;\n    yyjson_type val_type;\n    usize ctn_len, ctn_len_tmp;\n    bool ctn_obj, ctn_obj_tmp, is_key;\n    u8 *hdr, *cur, *end, *tmp;\n    yyjson_mut_write_ctx *ctx, *ctx_tmp;\n    usize alc_len, alc_inc, ctx_len, ext_len, str_len;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    \n    alc_len = estimated_val_num * YYJSON_WRITER_ESTIMATED_MINIFY_RATIO + 64;\n    alc_len = size_align_up(alc_len, sizeof(yyjson_mut_write_ctx));\n    hdr = (u8 *)alc.malloc(alc.ctx, alc_len);\n    if (!hdr) goto fail_alloc;\n    cur = hdr;\n    end = hdr + alc_len;\n    ctx = (yyjson_mut_write_ctx *)(void *)end;\n    \ndoc_begin:\n    val = constcast(yyjson_mut_val *)root;\n    val_type = unsafe_yyjson_get_type(val);\n    ctn_obj = (val_type == YYJSON_TYPE_OBJ);\n    ctn_len = unsafe_yyjson_get_len(val) << (u8)ctn_obj;\n    *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n    ctn = val;\n    val = (yyjson_mut_val *)val->uni.ptr; /* tail */\n    val = ctn_obj ? val->next->next : val->next;\n    \nval_begin:\n    val_type = unsafe_yyjson_get_type(val);\n    if (val_type == YYJSON_TYPE_STR) {\n        is_key = ((u8)ctn_obj & (u8)~ctn_len);\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len * 6 + 16);\n        cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n        if (unlikely(!cur)) goto fail_str;\n        *cur++ = is_key ? ':' : ',';\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NUM) {\n        incr_len(32);\n        cur = write_number(cur, (yyjson_val *)val, flg);\n        if (unlikely(!cur)) goto fail_num;\n        *cur++ = ',';\n        goto val_end;\n    }\n    if ((val_type & (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) ==\n                    (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) {\n        ctn_len_tmp = unsafe_yyjson_get_len(val);\n        ctn_obj_tmp = (val_type == YYJSON_TYPE_OBJ);\n        incr_len(16);\n        if (unlikely(ctn_len_tmp == 0)) {\n            /* write empty container */\n            *cur++ = (u8)('[' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = (u8)(']' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = ',';\n            goto val_end;\n        } else {\n            /* push context, setup new container */\n            yyjson_mut_write_ctx_set(--ctx, ctn, ctn_len, ctn_obj);\n            ctn_len = ctn_len_tmp << (u8)ctn_obj_tmp;\n            ctn_obj = ctn_obj_tmp;\n            *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n            ctn = val;\n            val = (yyjson_mut_val *)ctn->uni.ptr; /* tail */\n            val = ctn_obj ? val->next->next : val->next;\n            goto val_begin;\n        }\n    }\n    if (val_type == YYJSON_TYPE_BOOL) {\n        incr_len(16);\n        cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n        cur++;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NULL) {\n        incr_len(16);\n        cur = write_null(cur);\n        cur++;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_RAW) {\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len + 2);\n        cur = write_raw(cur, str_ptr, str_len);\n        *cur++ = ',';\n        goto val_end;\n    }\n    goto fail_type;\n    \nval_end:\n    ctn_len--;\n    if (unlikely(ctn_len == 0)) goto ctn_end;\n    val = val->next;\n    goto val_begin;\n    \nctn_end:\n    cur--;\n    *cur++ = (u8)(']' | ((u8)ctn_obj << 5));\n    *cur++ = ',';\n    if (unlikely((u8 *)ctx >= end)) goto doc_end;\n    val = ctn->next;\n    yyjson_mut_write_ctx_get(ctx++, &ctn, &ctn_len, &ctn_obj);\n    ctn_len--;\n    if (likely(ctn_len > 0)) {\n        goto val_begin;\n    } else {\n        goto ctn_end;\n    }\n    \ndoc_end:\n    *--cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    err->code = YYJSON_WRITE_SUCCESS;\n    err->msg = \"success\";\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef incr_len\n#undef check_str_len\n}\n\n/** Write JSON document pretty.\n    The root of this document should be a non-empty container. */\nstatic_inline u8 *yyjson_mut_write_pretty(const yyjson_mut_val *root,\n                                          usize estimated_val_num,\n                                          yyjson_write_flag flg,\n                                          yyjson_alc alc,\n                                          usize *dat_len,\n                                          yyjson_write_err *err) {\n    \n#define return_err(_code, _msg) do { \\\n    *dat_len = 0; \\\n    err->code = YYJSON_WRITE_ERROR_##_code; \\\n    err->msg = _msg; \\\n    if (hdr) alc.free(alc.ctx, hdr); \\\n    return NULL; \\\n} while (false)\n    \n#define incr_len(_len) do { \\\n    ext_len = (usize)(_len); \\\n    if (unlikely((u8 *)(cur + ext_len) >= (u8 *)ctx)) { \\\n        alc_inc = yyjson_max(alc_len / 2, ext_len); \\\n        alc_inc = size_align_up(alc_inc, sizeof(yyjson_mut_write_ctx)); \\\n        if (size_add_is_overflow(alc_len, alc_inc)) goto fail_alloc; \\\n        alc_len += alc_inc; \\\n        tmp = (u8 *)alc.realloc(alc.ctx, hdr, alc_len - alc_inc, alc_len); \\\n        if (unlikely(!tmp)) goto fail_alloc; \\\n        ctx_len = (usize)(end - (u8 *)ctx); \\\n        ctx_tmp = (yyjson_mut_write_ctx *)(void *)(tmp + (alc_len - ctx_len)); \\\n        memmove((void *)ctx_tmp, (void *)(tmp + ((u8 *)ctx - hdr)), ctx_len); \\\n        ctx = ctx_tmp; \\\n        cur = tmp + (cur - hdr); \\\n        end = tmp + alc_len; \\\n        hdr = tmp; \\\n    } \\\n} while (false)\n    \n#define check_str_len(_len) do { \\\n    if ((USIZE_MAX < U64_MAX) && (_len >= (USIZE_MAX - 16) / 6)) \\\n        goto fail_alloc; \\\n} while (false)\n    \n    yyjson_mut_val *val, *ctn;\n    yyjson_type val_type;\n    usize ctn_len, ctn_len_tmp;\n    bool ctn_obj, ctn_obj_tmp, is_key, no_indent;\n    u8 *hdr, *cur, *end, *tmp;\n    yyjson_mut_write_ctx *ctx, *ctx_tmp;\n    usize alc_len, alc_inc, ctx_len, ext_len, str_len, level;\n    const u8 *str_ptr;\n    const char_enc_type *enc_table = get_enc_table_with_flag(flg);\n    bool esc = (flg & YYJSON_WRITE_ESCAPE_UNICODE) != 0;\n    bool inv = (flg & YYJSON_WRITE_ALLOW_INVALID_UNICODE) != 0;\n    usize spaces = (flg & YYJSON_WRITE_PRETTY_TWO_SPACES) ? 2 : 4;\n    \n    alc_len = estimated_val_num * YYJSON_WRITER_ESTIMATED_PRETTY_RATIO + 64;\n    alc_len = size_align_up(alc_len, sizeof(yyjson_mut_write_ctx));\n    hdr = (u8 *)alc.malloc(alc.ctx, alc_len);\n    if (!hdr) goto fail_alloc;\n    cur = hdr;\n    end = hdr + alc_len;\n    ctx = (yyjson_mut_write_ctx *)(void *)end;\n    \ndoc_begin:\n    val = constcast(yyjson_mut_val *)root;\n    val_type = unsafe_yyjson_get_type(val);\n    ctn_obj = (val_type == YYJSON_TYPE_OBJ);\n    ctn_len = unsafe_yyjson_get_len(val) << (u8)ctn_obj;\n    *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n    *cur++ = '\\n';\n    ctn = val;\n    val = (yyjson_mut_val *)val->uni.ptr; /* tail */\n    val = ctn_obj ? val->next->next : val->next;\n    level = 1;\n    \nval_begin:\n    val_type = unsafe_yyjson_get_type(val);\n    if (val_type == YYJSON_TYPE_STR) {\n        is_key = (bool)((u8)ctn_obj & (u8)~ctn_len);\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len * 6 + 16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_string(cur, esc, inv, str_ptr, str_len, enc_table);\n        if (unlikely(!cur)) goto fail_str;\n        *cur++ = is_key ? ':' : ',';\n        *cur++ = is_key ? ' ' : '\\n';\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NUM) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(32 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_number(cur, (yyjson_val *)val, flg);\n        if (unlikely(!cur)) goto fail_num;\n        *cur++ = ',';\n        *cur++ = '\\n';\n        goto val_end;\n    }\n    if ((val_type & (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) ==\n                    (YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ)) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        ctn_len_tmp = unsafe_yyjson_get_len(val);\n        ctn_obj_tmp = (val_type == YYJSON_TYPE_OBJ);\n        if (unlikely(ctn_len_tmp == 0)) {\n            /* write empty container */\n            incr_len(16 + (no_indent ? 0 : level * 4));\n            cur = write_indent(cur, no_indent ? 0 : level, spaces);\n            *cur++ = (u8)('[' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = (u8)(']' | ((u8)ctn_obj_tmp << 5));\n            *cur++ = ',';\n            *cur++ = '\\n';\n            goto val_end;\n        } else {\n            /* push context, setup new container */\n            incr_len(32 + (no_indent ? 0 : level * 4));\n            yyjson_mut_write_ctx_set(--ctx, ctn, ctn_len, ctn_obj);\n            ctn_len = ctn_len_tmp << (u8)ctn_obj_tmp;\n            ctn_obj = ctn_obj_tmp;\n            cur = write_indent(cur, no_indent ? 0 : level, spaces);\n            level++;\n            *cur++ = (u8)('[' | ((u8)ctn_obj << 5));\n            *cur++ = '\\n';\n            ctn = val;\n            val = (yyjson_mut_val *)ctn->uni.ptr; /* tail */\n            val = ctn_obj ? val->next->next : val->next;\n            goto val_begin;\n        }\n    }\n    if (val_type == YYJSON_TYPE_BOOL) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_bool(cur, unsafe_yyjson_get_bool(val));\n        cur += 2;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_NULL) {\n        no_indent = (bool)((u8)ctn_obj & (u8)ctn_len);\n        incr_len(16 + (no_indent ? 0 : level * 4));\n        cur = write_indent(cur, no_indent ? 0 : level, spaces);\n        cur = write_null(cur);\n        cur += 2;\n        goto val_end;\n    }\n    if (val_type == YYJSON_TYPE_RAW) {\n        str_len = unsafe_yyjson_get_len(val);\n        str_ptr = (const u8 *)unsafe_yyjson_get_str(val);\n        check_str_len(str_len);\n        incr_len(str_len + 3);\n        cur = write_raw(cur, str_ptr, str_len);\n        *cur++ = ',';\n        *cur++ = '\\n';\n        goto val_end;\n    }\n    goto fail_type;\n    \nval_end:\n    ctn_len--;\n    if (unlikely(ctn_len == 0)) goto ctn_end;\n    val = val->next;\n    goto val_begin;\n    \nctn_end:\n    cur -= 2;\n    *cur++ = '\\n';\n    incr_len(level * 4);\n    cur = write_indent(cur, --level, spaces);\n    *cur++ = (u8)(']' | ((u8)ctn_obj << 5));\n    if (unlikely((u8 *)ctx >= end)) goto doc_end;\n    val = ctn->next;\n    yyjson_mut_write_ctx_get(ctx++, &ctn, &ctn_len, &ctn_obj);\n    ctn_len--;\n    *cur++ = ',';\n    *cur++ = '\\n';\n    if (likely(ctn_len > 0)) {\n        goto val_begin;\n    } else {\n        goto ctn_end;\n    }\n    \ndoc_end:\n    *cur = '\\0';\n    *dat_len = (usize)(cur - hdr);\n    err->code = YYJSON_WRITE_SUCCESS;\n    err->msg = \"success\";\n    return hdr;\n    \nfail_alloc:\n    return_err(MEMORY_ALLOCATION, \"memory allocation failed\");\nfail_type:\n    return_err(INVALID_VALUE_TYPE, \"invalid JSON value type\");\nfail_num:\n    return_err(NAN_OR_INF, \"nan or inf number is not allowed\");\nfail_str:\n    return_err(INVALID_STRING, \"invalid utf-8 encoding in string\");\n    \n#undef return_err\n#undef incr_len\n#undef check_str_len\n}\n\nstatic char *yyjson_mut_write_opts_impl(const yyjson_mut_val *val,\n                                        usize estimated_val_num,\n                                        yyjson_write_flag flg,\n                                        const yyjson_alc *alc_ptr,\n                                        usize *dat_len,\n                                        yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    usize dummy_dat_len;\n    yyjson_alc alc = alc_ptr ? *alc_ptr : YYJSON_DEFAULT_ALC;\n    yyjson_mut_val *root = constcast(yyjson_mut_val *)val;\n    \n    err = err ? err : &dummy_err;\n    dat_len = dat_len ? dat_len : &dummy_dat_len;\n    \n#if YYJSON_DISABLE_NON_STANDARD\n    flg &= ~YYJSON_WRITE_ALLOW_INF_AND_NAN;\n    flg &= ~YYJSON_WRITE_ALLOW_INVALID_UNICODE;\n#endif\n    \n    if (unlikely(!root)) {\n        *dat_len = 0;\n        err->msg = \"input JSON is NULL\";\n        err->code = YYJSON_WRITE_ERROR_INVALID_PARAMETER;\n        return NULL;\n    }\n    \n    if (!unsafe_yyjson_is_ctn(root) || unsafe_yyjson_get_len(root) == 0) {\n        return (char *)yyjson_mut_write_single(root, flg, alc, dat_len, err);\n    } else if (flg & (YYJSON_WRITE_PRETTY | YYJSON_WRITE_PRETTY_TWO_SPACES)) {\n        return (char *)yyjson_mut_write_pretty(root, estimated_val_num,\n                                               flg, alc, dat_len, err);\n    } else {\n        return (char *)yyjson_mut_write_minify(root, estimated_val_num,\n                                               flg, alc, dat_len, err);\n    }\n}\n\nchar *yyjson_mut_val_write_opts(const yyjson_mut_val *val,\n                                yyjson_write_flag flg,\n                                const yyjson_alc *alc_ptr,\n                                usize *dat_len,\n                                yyjson_write_err *err) {\n    return yyjson_mut_write_opts_impl(val, 0, flg, alc_ptr, dat_len, err);\n}\n\nchar *yyjson_mut_write_opts(const yyjson_mut_doc *doc,\n                            yyjson_write_flag flg,\n                            const yyjson_alc *alc_ptr,\n                            usize *dat_len,\n                            yyjson_write_err *err) {\n    yyjson_mut_val *root;\n    usize estimated_val_num;\n    if (likely(doc)) {\n        root = doc->root;\n        estimated_val_num = yyjson_mut_doc_estimated_val_num(doc);\n    } else {\n        root = NULL;\n        estimated_val_num = 0;\n    }\n    return yyjson_mut_write_opts_impl(root, estimated_val_num,\n                                      flg, alc_ptr, dat_len, err);\n}\n\nbool yyjson_mut_val_write_file(const char *path,\n                               const yyjson_mut_val *val,\n                               yyjson_write_flag flg,\n                               const yyjson_alc *alc_ptr,\n                               yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    u8 *dat;\n    usize dat_len = 0;\n    yyjson_mut_val *root = constcast(yyjson_mut_val *)val;\n    bool suc;\n    \n    alc_ptr = alc_ptr ? alc_ptr : &YYJSON_DEFAULT_ALC;\n    err = err ? err : &dummy_err;\n    if (unlikely(!path || !*path)) {\n        err->msg = \"input path is invalid\";\n        err->code = YYJSON_WRITE_ERROR_INVALID_PARAMETER;\n        return false;\n    }\n    \n    dat = (u8 *)yyjson_mut_val_write_opts(root, flg, alc_ptr, &dat_len, err);\n    if (unlikely(!dat)) return false;\n    suc = write_dat_to_file(path, dat, dat_len, err);\n    alc_ptr->free(alc_ptr->ctx, dat);\n    return suc;\n}\n\nbool yyjson_mut_val_write_fp(FILE *fp,\n                             const yyjson_mut_val *val,\n                             yyjson_write_flag flg,\n                             const yyjson_alc *alc_ptr,\n                             yyjson_write_err *err) {\n    yyjson_write_err dummy_err;\n    u8 *dat;\n    usize dat_len = 0;\n    yyjson_mut_val *root = constcast(yyjson_mut_val *)val;\n    bool suc;\n    \n    alc_ptr = alc_ptr ? alc_ptr : &YYJSON_DEFAULT_ALC;\n    err = err ? err : &dummy_err;\n    if (unlikely(!fp)) {\n        err->msg = \"input fp is invalid\";\n        err->code = YYJSON_WRITE_ERROR_INVALID_PARAMETER;\n        return false;\n    }\n    \n    dat = (u8 *)yyjson_mut_val_write_opts(root, flg, alc_ptr, &dat_len, err);\n    if (unlikely(!dat)) return false;\n    suc = write_dat_to_fp(fp, dat, dat_len, err);\n    alc_ptr->free(alc_ptr->ctx, dat);\n    return suc;\n}\n\nbool yyjson_mut_write_file(const char *path,\n                           const yyjson_mut_doc *doc,\n                           yyjson_write_flag flg,\n                           const yyjson_alc *alc_ptr,\n                           yyjson_write_err *err) {\n    yyjson_mut_val *root = doc ? doc->root : NULL;\n    return yyjson_mut_val_write_file(path, root, flg, alc_ptr, err);\n}\n\nbool yyjson_mut_write_fp(FILE *fp,\n                         const yyjson_mut_doc *doc,\n                         yyjson_write_flag flg,\n                         const yyjson_alc *alc_ptr,\n                         yyjson_write_err *err) {\n    yyjson_mut_val *root = doc ? doc->root : NULL;\n    return yyjson_mut_val_write_fp(fp, root, flg, alc_ptr, err);\n}\n\n#endif /* YYJSON_DISABLE_WRITER */\n\n\n\n/*==============================================================================\n * Compiler Hint End\n *============================================================================*/\n\n#if defined(__clang__)\n#   pragma clang diagnostic pop\n#elif defined(__GNUC__)\n#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)\n#   pragma GCC diagnostic pop\n#   endif\n#elif defined(_MSC_VER)\n#   pragma warning(pop)\n#endif /* warning suppress end */\n"
  },
  {
    "path": "libtts/Modules/Lib/MJson/yyjson.h",
    "content": "/*==============================================================================\n * Created by Yaoyuan on 2019/3/9.\n * Copyright (C) 2019 Yaoyuan <ibireme@gmail.com>.\n *\n * Released under the MIT License:\n * https://github.com/ibireme/yyjson/blob/master/LICENSE\n *============================================================================*/\n\n/** @file yyjson.h */\n\n#ifndef YYJSON_H\n#define YYJSON_H\n\n/*==============================================================================\n * Header Files\n *============================================================================*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <stddef.h>\n#include <limits.h>\n#include <string.h>\n#include <float.h>\n\n\n\n/*==============================================================================\n * Compile-time Options\n *============================================================================*/\n\n/*\n Define as 1 to disable JSON reader if JSON parsing is not required.\n \n This will disable these functions at compile-time:\n    - yyjson_read_opts()\n    - yyjson_read_file()\n    - yyjson_read()\n    - yyjson_read_number()\n    - yyjson_mut_read_number()\n \n This will reduce the binary size by about 60%.\n */\n#ifndef YYJSON_DISABLE_READER\n#endif\n\n/*\n Define as 1 to disable JSON writer if JSON serialization is not required.\n \n This will disable these functions at compile-time:\n    - yyjson_write()\n    - yyjson_write_file()\n    - yyjson_write_opts()\n    - yyjson_val_write()\n    - yyjson_val_write_file()\n    - yyjson_val_write_opts()\n    - yyjson_mut_write()\n    - yyjson_mut_write_file()\n    - yyjson_mut_write_opts()\n    - yyjson_mut_val_write()\n    - yyjson_mut_val_write_file()\n    - yyjson_mut_val_write_opts()\n \n This will reduce the binary size by about 30%.\n */\n#ifndef YYJSON_DISABLE_WRITER\n#endif\n\n/*\n Define as 1 to disable JSON Pointer, JSON Patch and JSON Merge Patch supports.\n \n This will disable these functions at compile-time:\n    - yyjson_ptr_xxx()\n    - yyjson_mut_ptr_xxx()\n    - yyjson_doc_ptr_xxx()\n    - yyjson_mut_doc_ptr_xxx()\n    - yyjson_patch()\n    - yyjson_mut_patch()\n    - yyjson_merge_patch()\n    - yyjson_mut_merge_patch()\n */\n#ifndef YYJSON_DISABLE_UTILS\n#endif\n\n/*\n Define as 1 to disable the fast floating-point number conversion in yyjson,\n and use libc's `strtod/snprintf` instead.\n \n This will reduce the binary size by about 30%, but significantly slow down the\n floating-point read/write speed.\n */\n#ifndef YYJSON_DISABLE_FAST_FP_CONV\n#endif\n\n/*\n Define as 1 to disable non-standard JSON support at compile-time:\n    - Reading and writing inf/nan literal, such as `NaN`, `-Infinity`.\n    - Single line and multiple line comments.\n    - Single trailing comma at the end of an object or array.\n    - Invalid unicode in string value.\n \n This will also invalidate these run-time options:\n    - YYJSON_READ_ALLOW_INF_AND_NAN\n    - YYJSON_READ_ALLOW_COMMENTS\n    - YYJSON_READ_ALLOW_TRAILING_COMMAS\n    - YYJSON_READ_ALLOW_INVALID_UNICODE\n    - YYJSON_WRITE_ALLOW_INF_AND_NAN\n    - YYJSON_WRITE_ALLOW_INVALID_UNICODE\n \n This will reduce the binary size by about 10%, and slightly improve the JSON\n read/write speed.\n */\n#ifndef YYJSON_DISABLE_NON_STANDARD\n#endif\n\n/*\n Define as 1 to disable unaligned memory access if target architecture does not\n support unaligned memory access (such as some embedded processors).\n \n If this value is not defined, yyjson will perform some automatic detection.\n The wrong definition of this option may cause some performance degradation,\n but will not cause any run-time errors.\n */\n#ifndef YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS\n#endif\n\n/* Define as 1 to export symbols when building this library as Windows DLL. */\n#ifndef YYJSON_EXPORTS\n#endif\n\n/* Define as 1 to import symbols when using this library as Windows DLL. */\n#ifndef YYJSON_IMPORTS\n#endif\n\n/* Define as 1 to include <stdint.h> for compiler which doesn't support C99. */\n#ifndef YYJSON_HAS_STDINT_H\n#endif\n\n/* Define as 1 to include <stdbool.h> for compiler which doesn't support C99. */\n#ifndef YYJSON_HAS_STDBOOL_H\n#endif\n\n\n\n/*==============================================================================\n * Compiler Macros\n *============================================================================*/\n\n/** compiler version (MSVC) */\n#ifdef _MSC_VER\n#   define YYJSON_MSC_VER _MSC_VER\n#else\n#   define YYJSON_MSC_VER 0\n#endif\n\n/** compiler version (GCC) */\n#ifdef __GNUC__\n#   define YYJSON_GCC_VER __GNUC__\n#else\n#   define YYJSON_GCC_VER 0\n#endif\n\n/** C version (STDC) */\n#if defined(__STDC__) && (__STDC__ >= 1) && defined(__STDC_VERSION__)\n#   define YYJSON_STDC_VER __STDC_VERSION__\n#else\n#   define YYJSON_STDC_VER 0\n#endif\n\n/** C++ version */\n#if defined(__cplusplus)\n#   define YYJSON_CPP_VER __cplusplus\n#else\n#   define YYJSON_CPP_VER 0\n#endif\n\n/** compiler builtin check (since gcc 10.0, clang 2.6, icc 2021) */\n#ifndef yyjson_has_builtin\n#   ifdef __has_builtin\n#       define yyjson_has_builtin(x) __has_builtin(x)\n#   else\n#       define yyjson_has_builtin(x) 0\n#   endif\n#endif\n\n/** compiler attribute check (since gcc 5.0, clang 2.9, icc 17) */\n#ifndef yyjson_has_attribute\n#   ifdef __has_attribute\n#       define yyjson_has_attribute(x) __has_attribute(x)\n#   else\n#       define yyjson_has_attribute(x) 0\n#   endif\n#endif\n\n/** compiler feature check (since clang 2.6, icc 17) */\n#ifndef yyjson_has_feature\n#   ifdef __has_feature\n#       define yyjson_has_feature(x) __has_feature(x)\n#   else\n#       define yyjson_has_feature(x) 0\n#   endif\n#endif\n\n/** include check (since gcc 5.0, clang 2.7, icc 16, msvc 2017 15.3) */\n#ifndef yyjson_has_include\n#   ifdef __has_include\n#       define yyjson_has_include(x) __has_include(x)\n#   else\n#       define yyjson_has_include(x) 0\n#   endif\n#endif\n\n/** inline for compiler */\n#ifndef yyjson_inline\n#   if YYJSON_MSC_VER >= 1200\n#       define yyjson_inline __forceinline\n#   elif defined(_MSC_VER)\n#       define yyjson_inline __inline\n#   elif yyjson_has_attribute(always_inline) || YYJSON_GCC_VER >= 4\n#       define yyjson_inline __inline__ __attribute__((always_inline))\n#   elif defined(__clang__) || defined(__GNUC__)\n#       define yyjson_inline __inline__\n#   elif defined(__cplusplus) || YYJSON_STDC_VER >= 199901L\n#       define yyjson_inline inline\n#   else\n#       define yyjson_inline\n#   endif\n#endif\n\n/** noinline for compiler */\n#ifndef yyjson_noinline\n#   if YYJSON_MSC_VER >= 1400\n#       define yyjson_noinline __declspec(noinline)\n#   elif yyjson_has_attribute(noinline) || YYJSON_GCC_VER >= 4\n#       define yyjson_noinline __attribute__((noinline))\n#   else\n#       define yyjson_noinline\n#   endif\n#endif\n\n/** align for compiler */\n#ifndef yyjson_align\n#   if YYJSON_MSC_VER >= 1300\n#       define yyjson_align(x) __declspec(align(x))\n#   elif yyjson_has_attribute(aligned) || defined(__GNUC__)\n#       define yyjson_align(x) __attribute__((aligned(x)))\n#   elif YYJSON_CPP_VER >= 201103L\n#       define yyjson_align(x) alignas(x)\n#   else\n#       define yyjson_align(x)\n#   endif\n#endif\n\n/** likely for compiler */\n#ifndef yyjson_likely\n#   if yyjson_has_builtin(__builtin_expect) || \\\n    (YYJSON_GCC_VER >= 4 && YYJSON_GCC_VER != 5)\n#       define yyjson_likely(expr) __builtin_expect(!!(expr), 1)\n#   else\n#       define yyjson_likely(expr) (expr)\n#   endif\n#endif\n\n/** unlikely for compiler */\n#ifndef yyjson_unlikely\n#   if yyjson_has_builtin(__builtin_expect) || \\\n    (YYJSON_GCC_VER >= 4 && YYJSON_GCC_VER != 5)\n#       define yyjson_unlikely(expr) __builtin_expect(!!(expr), 0)\n#   else\n#       define yyjson_unlikely(expr) (expr)\n#   endif\n#endif\n\n/** deprecate warning */\n#ifndef yyjson_deprecated\n#   if YYJSON_MSC_VER >= 1400\n#       define yyjson_deprecated(msg) __declspec(deprecated(msg))\n#   elif yyjson_has_feature(attribute_deprecated_with_message) || \\\n        (YYJSON_GCC_VER > 4 || (YYJSON_GCC_VER == 4 && __GNUC_MINOR__ >= 5))\n#       define yyjson_deprecated(msg) __attribute__((deprecated(msg)))\n#   elif YYJSON_GCC_VER >= 3\n#       define yyjson_deprecated(msg) __attribute__((deprecated))\n#   else\n#       define yyjson_deprecated(msg)\n#   endif\n#endif\n\n/** function export */\n#ifndef yyjson_api\n#   if defined(_WIN32)\n#       if defined(YYJSON_EXPORTS) && YYJSON_EXPORTS\n#           define yyjson_api __declspec(dllexport)\n#       elif defined(YYJSON_IMPORTS) && YYJSON_IMPORTS\n#           define yyjson_api __declspec(dllimport)\n#       else\n#           define yyjson_api\n#       endif\n#   elif yyjson_has_attribute(visibility) || YYJSON_GCC_VER >= 4\n#       define yyjson_api __attribute__((visibility(\"default\")))\n#   else\n#       define yyjson_api\n#   endif\n#endif\n\n/** inline function export */\n#ifndef yyjson_api_inline\n#   define yyjson_api_inline static yyjson_inline\n#endif\n\n/** stdint (C89 compatible) */\n#if (defined(YYJSON_HAS_STDINT_H) && YYJSON_HAS_STDINT_H) || \\\n    YYJSON_MSC_VER >= 1600 || YYJSON_STDC_VER >= 199901L || \\\n    defined(_STDINT_H) || defined(_STDINT_H_) || \\\n    defined(__CLANG_STDINT_H) || defined(_STDINT_H_INCLUDED) || \\\n    yyjson_has_include(<stdint.h>)\n#   include <stdint.h>\n#elif defined(_MSC_VER)\n#   if _MSC_VER < 1300\n        typedef signed char         int8_t;\n        typedef signed short        int16_t;\n        typedef signed int          int32_t;\n        typedef unsigned char       uint8_t;\n        typedef unsigned short      uint16_t;\n        typedef unsigned int        uint32_t;\n        typedef signed __int64      int64_t;\n        typedef unsigned __int64    uint64_t;\n#   else\n        typedef signed __int8       int8_t;\n        typedef signed __int16      int16_t;\n        typedef signed __int32      int32_t;\n        typedef unsigned __int8     uint8_t;\n        typedef unsigned __int16    uint16_t;\n        typedef unsigned __int32    uint32_t;\n        typedef signed __int64      int64_t;\n        typedef unsigned __int64    uint64_t;\n#   endif\n#else\n#   if UCHAR_MAX == 0xFFU\n        typedef signed char     int8_t;\n        typedef unsigned char   uint8_t;\n#   else\n#       error cannot find 8-bit integer type\n#   endif\n#   if USHRT_MAX == 0xFFFFU\n        typedef unsigned short  uint16_t;\n        typedef signed short    int16_t;\n#   elif UINT_MAX == 0xFFFFU\n        typedef unsigned int    uint16_t;\n        typedef signed int      int16_t;\n#   else\n#       error cannot find 16-bit integer type\n#   endif\n#   if UINT_MAX == 0xFFFFFFFFUL\n        typedef unsigned int    uint32_t;\n        typedef signed int      int32_t;\n#   elif ULONG_MAX == 0xFFFFFFFFUL\n        typedef unsigned long   uint32_t;\n        typedef signed long     int32_t;\n#   elif USHRT_MAX == 0xFFFFFFFFUL\n        typedef unsigned short  uint32_t;\n        typedef signed short    int32_t;\n#   else\n#       error cannot find 32-bit integer type\n#   endif\n#   if defined(__INT64_TYPE__) && defined(__UINT64_TYPE__)\n        typedef __INT64_TYPE__  int64_t;\n        typedef __UINT64_TYPE__ uint64_t;\n#   elif defined(__GNUC__) || defined(__clang__)\n#       if !defined(_SYS_TYPES_H) && !defined(__int8_t_defined)\n        __extension__ typedef long long             int64_t;\n#       endif\n        __extension__ typedef unsigned long long    uint64_t;\n#   elif defined(_LONG_LONG) || defined(__MWERKS__) || defined(_CRAYC) || \\\n        defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n        typedef long long           int64_t;\n        typedef unsigned long long  uint64_t;\n#   elif (defined(__BORLANDC__) && __BORLANDC__ > 0x460) || \\\n        defined(__WATCOM_INT64__) || defined (__alpha) || defined (__DECC)\n        typedef __int64             int64_t;\n        typedef unsigned __int64    uint64_t;\n#   else\n#       error cannot find 64-bit integer type\n#   endif\n#endif\n\n/** stdbool (C89 compatible) */\n#if (defined(YYJSON_HAS_STDBOOL_H) && YYJSON_HAS_STDBOOL_H) || \\\n    (yyjson_has_include(<stdbool.h>) && !defined(__STRICT_ANSI__)) || \\\n    YYJSON_MSC_VER >= 1800 || YYJSON_STDC_VER >= 199901L\n#   include <stdbool.h>\n#elif !defined(__bool_true_false_are_defined)\n#   define __bool_true_false_are_defined 1\n#   if defined(__cplusplus)\n#       if defined(__GNUC__) && !defined(__STRICT_ANSI__)\n#           define _Bool bool\n#           if __cplusplus < 201103L\n#               define bool bool\n#               define false false\n#               define true true\n#           endif\n#       endif\n#   else\n#       define bool unsigned char\n#       define true 1\n#       define false 0\n#   endif\n#endif\n\n/** char bit check */\n#if defined(CHAR_BIT)\n#   if CHAR_BIT != 8\n#       error non 8-bit char is not supported\n#   endif\n#endif\n\n/**\n Microsoft Visual C++ 6.0 doesn't support converting number from u64 to f64:\n error C2520: conversion from unsigned __int64 to double not implemented.\n */\n#ifndef YYJSON_U64_TO_F64_NO_IMPL\n#   if (0 < YYJSON_MSC_VER) && (YYJSON_MSC_VER <= 1200)\n#       define YYJSON_U64_TO_F64_NO_IMPL 1\n#   else\n#       define YYJSON_U64_TO_F64_NO_IMPL 0\n#   endif\n#endif\n\n\n\n/*==============================================================================\n * Compile Hint Begin\n *============================================================================*/\n\n/* extern \"C\" begin */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* warning suppress begin */\n#if defined(__clang__)\n#   pragma clang diagnostic push\n#   pragma clang diagnostic ignored \"-Wunused-function\"\n#   pragma clang diagnostic ignored \"-Wunused-parameter\"\n#elif defined(__GNUC__)\n#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)\n#   pragma GCC diagnostic push\n#   endif\n#   pragma GCC diagnostic ignored \"-Wunused-function\"\n#   pragma GCC diagnostic ignored \"-Wunused-parameter\"\n#elif defined(_MSC_VER)\n#   pragma warning(push)\n#   pragma warning(disable:4800) /* 'int': forcing value to 'true' or 'false' */\n#endif\n\n\n\n/*==============================================================================\n * Version\n *============================================================================*/\n\n/** The major version of yyjson. */\n#define YYJSON_VERSION_MAJOR  0\n\n/** The minor version of yyjson. */\n#define YYJSON_VERSION_MINOR  7\n\n/** The patch version of yyjson. */\n#define YYJSON_VERSION_PATCH  0\n\n/** The version of yyjson in hex: `(major << 16) | (minor << 8) | (patch)`. */\n#define YYJSON_VERSION_HEX    0x000700\n\n/** The version string of yyjson. */\n#define YYJSON_VERSION_STRING \"0.7.0\"\n\n/** The version of yyjson in hex, same as `YYJSON_VERSION_HEX`. */\nyyjson_api uint32_t yyjson_version(void);\n\n\n\n/*==============================================================================\n * JSON Types\n *============================================================================*/\n\n/** Type of JSON value (3 bit). */\ntypedef uint8_t yyjson_type;\n#define YYJSON_TYPE_NONE        ((uint8_t)0)        /* _____000 */\n#define YYJSON_TYPE_RAW         ((uint8_t)1)        /* _____001 */\n#define YYJSON_TYPE_NULL        ((uint8_t)2)        /* _____010 */\n#define YYJSON_TYPE_BOOL        ((uint8_t)3)        /* _____011 */\n#define YYJSON_TYPE_NUM         ((uint8_t)4)        /* _____100 */\n#define YYJSON_TYPE_STR         ((uint8_t)5)        /* _____101 */\n#define YYJSON_TYPE_ARR         ((uint8_t)6)        /* _____110 */\n#define YYJSON_TYPE_OBJ         ((uint8_t)7)        /* _____111 */\n\n/** Subtype of JSON value (2 bit). */\ntypedef uint8_t yyjson_subtype;\n#define YYJSON_SUBTYPE_NONE     ((uint8_t)(0 << 3)) /* ___00___ */\n#define YYJSON_SUBTYPE_FALSE    ((uint8_t)(0 << 3)) /* ___00___ */\n#define YYJSON_SUBTYPE_TRUE     ((uint8_t)(1 << 3)) /* ___01___ */\n#define YYJSON_SUBTYPE_UINT     ((uint8_t)(0 << 3)) /* ___00___ */\n#define YYJSON_SUBTYPE_SINT     ((uint8_t)(1 << 3)) /* ___01___ */\n#define YYJSON_SUBTYPE_REAL     ((uint8_t)(2 << 3)) /* ___10___ */\n\n/** Mask and bits of JSON value tag. */\n#define YYJSON_TYPE_MASK        ((uint8_t)0x07)     /* _____111 */\n#define YYJSON_TYPE_BIT         ((uint8_t)3)\n#define YYJSON_SUBTYPE_MASK     ((uint8_t)0x18)     /* ___11___ */\n#define YYJSON_SUBTYPE_BIT      ((uint8_t)2)\n#define YYJSON_RESERVED_MASK    ((uint8_t)0xE0)     /* 111_____ */\n#define YYJSON_RESERVED_BIT     ((uint8_t)3)\n#define YYJSON_TAG_MASK         ((uint8_t)0xFF)     /* 11111111 */\n#define YYJSON_TAG_BIT          ((uint8_t)8)\n\n/** Padding size for JSON reader. */\n#define YYJSON_PADDING_SIZE     4\n\n\n\n/*==============================================================================\n * Allocator\n *============================================================================*/\n\n/**\n A memory allocator.\n \n Typically you don't need to use it, unless you want to customize your own\n memory allocator.\n */\ntypedef struct yyjson_alc {\n    /** Same as libc's malloc(size), should not be NULL. */\n    void *(*malloc)(void *ctx, size_t size);\n    /** Same as libc's realloc(ptr, size), should not be NULL. */\n    void *(*realloc)(void *ctx, void *ptr, size_t old_size, size_t size);\n    /** Same as libc's free(ptr), should not be NULL. */\n    void (*free)(void *ctx, void *ptr);\n    /** A context for malloc/realloc/free, can be NULL. */\n    void *ctx;\n} yyjson_alc;\n\n/**\n A pool allocator uses fixed length pre-allocated memory.\n \n This allocator may be used to avoid malloc/realloc calls. The pre-allocated \n memory should be held by the caller. The maximum amount of memory required to\n read a JSON can be calculated using the `yyjson_read_max_memory_usage()`\n function, but the amount of memory required to write a JSON cannot be directly \n calculated.\n \n This is not a general-purpose allocator. If used to read multiple JSON \n documents and only some of them are released, it may cause memory\n fragmentation, leading to performance degradation and memory waste. Therefore, \n it is recommended to use this allocator only for reading or writing a single \n JSON document.\n \n @param alc The allocator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n    If `buf` or `size` is invalid, this will be set to an empty allocator.\n @param buf The buffer memory for this allocator.\n    If this parameter is NULL, the function will fail and return false.\n @param size The size of `buf`, in bytes.\n    If this parameter is less than 8 words (32/64 bytes on 32/64-bit OS), the\n    function will fail and return false.\n @return true if the `alc` has been successfully initialized.\n \n @par Example\n @code\n    // parse JSON with stack memory\n    char buf[1024];\n    yyjson_alc alc;\n    yyjson_alc_pool_init(&alc, buf, 1024);\n    \n    const char *json = \"{\\\"name\\\":\\\"Helvetica\\\",\\\"size\\\":16}\"\n    yyjson_doc *doc = yyjson_read_opts(json, strlen(json), 0, &alc, NULL);\n    // the memory of `doc` is on the stack\n @endcode\n */\nyyjson_api bool yyjson_alc_pool_init(yyjson_alc *alc, void *buf, size_t size);\n\n\n\n/*==============================================================================\n * JSON Structure\n *============================================================================*/\n\n/**\n An immutable document for reading JSON.\n This document holds memory for all its JSON values and strings. When it is no\n longer used, the user should call `yyjson_doc_free()` to free its memory.\n */\ntypedef struct yyjson_doc yyjson_doc;\n\n/**\n An immutable value for reading JSON.\n A JSON Value has the same lifetime as its document. The memory is held by its\n document and and cannot be freed alone.\n */\ntypedef struct yyjson_val yyjson_val;\n\n/**\n A mutable document for building JSON.\n This document holds memory for all its JSON values and strings. When it is no\n longer used, the user should call `yyjson_mut_doc_free()` to free its memory.\n */\ntypedef struct yyjson_mut_doc yyjson_mut_doc;\n\n/**\n A mutable value for building JSON.\n A JSON Value has the same lifetime as its document. The memory is held by its\n document and and cannot be freed alone.\n */\ntypedef struct yyjson_mut_val yyjson_mut_val;\n\n\n\n/*==============================================================================\n * JSON Reader API\n *============================================================================*/\n\n/** Run-time options for JSON reader. */\ntypedef uint32_t yyjson_read_flag;\n\n/** Default option (RFC 8259 compliant):\n    - Read positive integer as uint64_t.\n    - Read negative integer as int64_t.\n    - Read floating-point number as double with round-to-nearest mode.\n    - Read integer which cannot fit in uint64_t or int64_t as double.\n    - Report error if double number is infinity.\n    - Report error if string contains invalid UTF-8 character or BOM.\n    - Report error on trailing commas, comments, inf and nan literals. */\nstatic const yyjson_read_flag YYJSON_READ_NOFLAG                = 0 << 0;\n\n/** Read the input data in-situ.\n    This option allows the reader to modify and use input data to store string\n    values, which can increase reading speed slightly.\n    The caller should hold the input data before free the document.\n    The input data must be padded by at least `YYJSON_PADDING_SIZE` bytes.\n    For example: `[1,2]` should be `[1,2]\\0\\0\\0\\0`, input length should be 5. */\nstatic const yyjson_read_flag YYJSON_READ_INSITU                = 1 << 0;\n\n/** Stop when done instead of issuing an error if there's additional content\n    after a JSON document. This option may be used to parse small pieces of JSON\n    in larger data, such as `NDJSON`. */\nstatic const yyjson_read_flag YYJSON_READ_STOP_WHEN_DONE        = 1 << 1;\n\n/** Allow single trailing comma at the end of an object or array,\n    such as `[1,2,3,]`, `{\"a\":1,\"b\":2,}` (non-standard). */\nstatic const yyjson_read_flag YYJSON_READ_ALLOW_TRAILING_COMMAS = 1 << 2;\n\n/** Allow C-style single line and multiple line comments (non-standard). */\nstatic const yyjson_read_flag YYJSON_READ_ALLOW_COMMENTS        = 1 << 3;\n\n/** Allow inf/nan number and literal, case-insensitive,\n    such as 1e999, NaN, inf, -Infinity (non-standard). */\nstatic const yyjson_read_flag YYJSON_READ_ALLOW_INF_AND_NAN     = 1 << 4;\n\n/** Read all numbers as raw strings (value with `YYJSON_TYPE_RAW` type),\n    inf/nan literal is also read as raw with `ALLOW_INF_AND_NAN` flag. */\nstatic const yyjson_read_flag YYJSON_READ_NUMBER_AS_RAW         = 1 << 5;\n\n/** Allow reading invalid unicode when parsing string values (non-standard).\n    Invalid characters will be allowed to appear in the string values, but\n    invalid escape sequences will still be reported as errors.\n    This flag does not affect the performance of correctly encoded strings.\n    \n    @warning Strings in JSON values may contain incorrect encoding when this\n    option is used, you need to handle these strings carefully to avoid security\n    risks. */\nstatic const yyjson_read_flag YYJSON_READ_ALLOW_INVALID_UNICODE = 1 << 6;\n\n/** Read big numbers as raw strings. These big numbers include integers that\n    cannot be represented by `int64_t` and `uint64_t`, and floating-point\n    numbers that cannot be represented by finite `double`.\n    The flag will be overridden by `YYJSON_READ_NUMBER_AS_RAW` flag. */\nstatic const yyjson_read_flag YYJSON_READ_BIGNUM_AS_RAW         = 1 << 7;\n\n\n\n/** Result code for JSON reader. */\ntypedef uint32_t yyjson_read_code;\n\n/** Success, no error. */\nstatic const yyjson_read_code YYJSON_READ_SUCCESS                       = 0;\n\n/** Invalid parameter, such as NULL input string or 0 input length. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_INVALID_PARAMETER       = 1;\n\n/** Memory allocation failure occurs. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_MEMORY_ALLOCATION       = 2;\n\n/** Input JSON string is empty. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_EMPTY_CONTENT           = 3;\n\n/** Unexpected content after document, such as `[123]abc`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_CONTENT      = 4;\n\n/** Unexpected ending, such as `[123`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_END          = 5;\n\n/** Unexpected character inside the document, such as `[abc]`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_CHARACTER    = 6;\n\n/** Invalid JSON structure, such as `[1,]`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_JSON_STRUCTURE          = 7;\n\n/** Invalid comment, such as unclosed multi-line comment. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_INVALID_COMMENT         = 8;\n\n/** Invalid number, such as `123.e12`, `000`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_INVALID_NUMBER          = 9;\n\n/** Invalid string, such as invalid escaped character inside a string. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_INVALID_STRING          = 10;\n\n/** Invalid JSON literal, such as `truu`. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_LITERAL                 = 11;\n\n/** Failed to open a file. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_FILE_OPEN               = 12;\n\n/** Failed to read a file. */\nstatic const yyjson_read_code YYJSON_READ_ERROR_FILE_READ               = 13;\n\n/** Error information for JSON reader. */\ntypedef struct yyjson_read_err {\n    /** Error code, see `yyjson_read_code` for all possible values. */\n    yyjson_read_code code;\n    /** Error message, constant, no need to free (NULL if success). */\n    const char *msg;\n    /** Error byte position for input data (0 if success). */\n    size_t pos;\n} yyjson_read_err;\n\n\n\n/**\n Read JSON with options.\n \n This function is thread-safe when:\n 1. The `dat` is not modified by other threads.\n 2. The `alc` is thread-safe or NULL.\n \n @param dat The JSON data (UTF-8 without BOM), null-terminator is not required.\n    If this parameter is NULL, the function will fail and return NULL.\n    The `dat` will not be modified without the flag `YYJSON_READ_INSITU`, so you\n    can pass a `const char *` string and case it to `char *` if you don't use\n    the `YYJSON_READ_INSITU` flag.\n @param len The length of JSON data in bytes.\n    If this parameter is 0, the function will fail and return NULL.\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON reader.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON document, or NULL if an error occurs.\n    When it's no longer needed, it should be freed with `yyjson_doc_free()`.\n */\nyyjson_api yyjson_doc *yyjson_read_opts(char *dat,\n                                        size_t len,\n                                        yyjson_read_flag flg,\n                                        const yyjson_alc *alc,\n                                        yyjson_read_err *err);\n\n/**\n Read a JSON file.\n \n This function is thread-safe when:\n 1. The file is not modified by other threads.\n 2. The `alc` is thread-safe or NULL.\n \n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return NULL.\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON reader.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON document, or NULL if an error occurs.\n    When it's no longer needed, it should be freed with `yyjson_doc_free()`.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to read.\n */\nyyjson_api yyjson_doc *yyjson_read_file(const char *path,\n                                        yyjson_read_flag flg,\n                                        const yyjson_alc *alc,\n                                        yyjson_read_err *err);\n\n/**\n Read JSON from a file pointer.\n \n @param fp The file pointer.\n    The data will be read from the current position of the FILE to the end.\n    If this fp is NULL or invalid, the function will fail and return NULL.\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON reader.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON document, or NULL if an error occurs.\n    When it's no longer needed, it should be freed with `yyjson_doc_free()`.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to read.\n */\nyyjson_api yyjson_doc *yyjson_read_fp(FILE *fp,\n                                      yyjson_read_flag flg,\n                                      const yyjson_alc *alc,\n                                      yyjson_read_err *err);\n\n/**\n Read a JSON string.\n \n This function is thread-safe.\n \n @param dat The JSON data (UTF-8 without BOM), null-terminator is not required.\n    If this parameter is NULL, the function will fail and return NULL.\n @param len The length of JSON data in bytes.\n    If this parameter is 0, the function will fail and return NULL.\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @return A new JSON document, or NULL if an error occurs.\n    When it's no longer needed, it should be freed with `yyjson_doc_free()`.\n */\nyyjson_api_inline yyjson_doc *yyjson_read(const char *dat,\n                                          size_t len,\n                                          yyjson_read_flag flg) {\n    flg &= ~YYJSON_READ_INSITU; /* const string cannot be modified */\n    return yyjson_read_opts((char *)(void *)(size_t)(const void *)dat,\n                            len, flg, NULL, NULL);\n}\n\n/**\n Returns the size of maximum memory usage to read a JSON data.\n \n You may use this value to avoid malloc() or calloc() call inside the reader\n to get better performance, or read multiple JSON with one piece of memory.\n \n @param len The length of JSON data in bytes.\n @param flg The JSON read options.\n @return The maximum memory size to read this JSON, or 0 if overflow.\n \n @par Example\n @code\n    // read multiple JSON with same pre-allocated memory\n    \n    char *dat1, *dat2, *dat3; // JSON data\n    size_t len1, len2, len3; // JSON length\n    size_t max_len = MAX(len1, MAX(len2, len3));\n    yyjson_doc *doc;\n    \n    // use one allocator for multiple JSON\n    size_t size = yyjson_read_max_memory_usage(max_len, 0);\n    void *buf = malloc(size);\n    yyjson_alc alc;\n    yyjson_alc_pool_init(&alc, buf, size);\n    \n    // no more alloc() or realloc() call during reading\n    doc = yyjson_read_opts(dat1, len1, 0, &alc, NULL);\n    yyjson_doc_free(doc);\n    doc = yyjson_read_opts(dat2, len2, 0, &alc, NULL);\n    yyjson_doc_free(doc);\n    doc = yyjson_read_opts(dat3, len3, 0, &alc, NULL);\n    yyjson_doc_free(doc);\n    \n    free(buf);\n @endcode\n @see yyjson_alc_pool_init()\n */\nyyjson_api_inline size_t yyjson_read_max_memory_usage(size_t len,\n                                                      yyjson_read_flag flg) {\n    /*\n     1. The max value count is (json_size / 2 + 1),\n        for example: \"[1,2,3,4]\" size is 9, value count is 5.\n     2. Some broken JSON may cost more memory during reading, but fail at end,\n        for example: \"[[[[[[[[\".\n     3. yyjson use 16 bytes per value, see struct yyjson_val.\n     4. yyjson use dynamic memory with a growth factor of 1.5.\n     \n     The max memory size is (json_size / 2 * 16 * 1.5 + padding).\n     */\n    size_t mul = (size_t)12 + !(flg & YYJSON_READ_INSITU);\n    size_t pad = 256;\n    size_t max = (size_t)(~(size_t)0);\n    if (flg & YYJSON_READ_STOP_WHEN_DONE) len = len < 256 ? 256 : len;\n    if (len >= (max - pad - mul) / mul) return 0;\n    return len * mul + pad;\n}\n\n/**\n Read a JSON number.\n\n This function is thread-safe when data is not modified by other threads.\n\n @param dat The JSON data (UTF-8 without BOM), null-terminator is required.\n    If this parameter is NULL, the function will fail and return NULL.\n @param val The output value where result is stored.\n    If this parameter is NULL, the function will fail and return NULL.\n    The value will hold either UINT or SINT or REAL number;\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n    Supports `YYJSON_READ_NUMBER_AS_RAW` and `YYJSON_READ_ALLOW_INF_AND_NAN`.\n @param alc The memory allocator used for long number.\n    It is only used when the built-in floating point reader is disabled.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return If successful, a pointer to the character after the last character\n    used in the conversion, NULL if an error occurs.\n */\nyyjson_api const char *yyjson_read_number(const char *dat,\n                                          yyjson_val *val,\n                                          yyjson_read_flag flg,\n                                          const yyjson_alc *alc,\n                                          yyjson_read_err *err);\n\n/**\n Read a JSON number.\n\n This function is thread-safe when data is not modified by other threads.\n\n @param dat The JSON data (UTF-8 without BOM), null-terminator is required.\n    If this parameter is NULL, the function will fail and return NULL.\n @param val The output value where result is stored.\n    If this parameter is NULL, the function will fail and return NULL.\n    The value will hold either UINT or SINT or REAL number;\n @param flg The JSON read options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n    Supports `YYJSON_READ_NUMBER_AS_RAW` and `YYJSON_READ_ALLOW_INF_AND_NAN`.\n @param alc The memory allocator used for long number.\n    It is only used when the built-in floating point reader is disabled.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return If successful, a pointer to the character after the last character\n    used in the conversion, NULL if an error occurs.\n */\nyyjson_api_inline const char *yyjson_mut_read_number(const char *dat,\n                                                     yyjson_mut_val *val,\n                                                     yyjson_read_flag flg,\n                                                     const yyjson_alc *alc,\n                                                     yyjson_read_err *err) {\n    return yyjson_read_number(dat, (yyjson_val *)val, flg, alc, err);\n}\n\n\n/*==============================================================================\n * JSON Writer API\n *============================================================================*/\n\n/** Run-time options for JSON writer. */\ntypedef uint32_t yyjson_write_flag;\n\n/** Default option:\n    - Write JSON minify.\n    - Report error on inf or nan number.\n    - Report error on invalid UTF-8 string.\n    - Do not escape unicode or slash. */\nstatic const yyjson_write_flag YYJSON_WRITE_NOFLAG                  = 0 << 0;\n\n/** Write JSON pretty with 4 space indent. */\nstatic const yyjson_write_flag YYJSON_WRITE_PRETTY                  = 1 << 0;\n\n/** Escape unicode as `uXXXX`, make the output ASCII only. */\nstatic const yyjson_write_flag YYJSON_WRITE_ESCAPE_UNICODE          = 1 << 1;\n\n/** Escape '/' as '\\/'. */\nstatic const yyjson_write_flag YYJSON_WRITE_ESCAPE_SLASHES          = 1 << 2;\n\n/** Write inf and nan number as 'Infinity' and 'NaN' literal (non-standard). */\nstatic const yyjson_write_flag YYJSON_WRITE_ALLOW_INF_AND_NAN       = 1 << 3;\n\n/** Write inf and nan number as null literal.\n    This flag will override `YYJSON_WRITE_ALLOW_INF_AND_NAN` flag. */\nstatic const yyjson_write_flag YYJSON_WRITE_INF_AND_NAN_AS_NULL     = 1 << 4;\n\n/** Allow invalid unicode when encoding string values (non-standard).\n    Invalid characters in string value will be copied byte by byte.\n    If `YYJSON_WRITE_ESCAPE_UNICODE` flag is also set, invalid character will be\n    escaped as `U+FFFD` (replacement character).\n    This flag does not affect the performance of correctly encoded strings. */\nstatic const yyjson_write_flag YYJSON_WRITE_ALLOW_INVALID_UNICODE   = 1 << 5;\n\n/** Write JSON pretty with 2 space indent.\n    This flag will override `YYJSON_WRITE_PRETTY` flag. */\nstatic const yyjson_write_flag YYJSON_WRITE_PRETTY_TWO_SPACES       = 1 << 6;\n\n\n\n/** Result code for JSON writer */\ntypedef uint32_t yyjson_write_code;\n\n/** Success, no error. */\nstatic const yyjson_write_code YYJSON_WRITE_SUCCESS                     = 0;\n\n/** Invalid parameter, such as NULL document. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_PARAMETER     = 1;\n\n/** Memory allocation failure occurs. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_MEMORY_ALLOCATION     = 2;\n\n/** Invalid value type in JSON document. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_VALUE_TYPE    = 3;\n\n/** NaN or Infinity number occurs. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_NAN_OR_INF            = 4;\n\n/** Failed to open a file. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_FILE_OPEN             = 5;\n\n/** Failed to write a file. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_FILE_WRITE            = 6;\n\n/** Invalid unicode in string. */\nstatic const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_STRING        = 7;\n\n/** Error information for JSON writer. */\ntypedef struct yyjson_write_err {\n    /** Error code, see `yyjson_write_code` for all possible values. */\n    yyjson_write_code code;\n    /** Error message, constant, no need to free (NULL if success). */\n    const char *msg;\n} yyjson_write_err;\n\n\n\n/*==============================================================================\n * JSON Document Writer API\n *============================================================================*/\n\n/**\n Write a document to JSON string with options.\n \n This function is thread-safe when:\n The `alc` is thread-safe or NULL.\n \n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free() or alc->free().\n */\nyyjson_api char *yyjson_write_opts(const yyjson_doc *doc,\n                                   yyjson_write_flag flg,\n                                   const yyjson_alc *alc,\n                                   size_t *len,\n                                   yyjson_write_err *err);\n\n/**\n Write a document to JSON file with options.\n \n This function is thread-safe when:\n 1. The file is not accessed by other threads.\n 2. The `alc` is thread-safe or NULL.\n\n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return false.\n    If this file is not empty, the content will be discarded.\n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_write_file(const char *path,\n                                  const yyjson_doc *doc,\n                                  yyjson_write_flag flg,\n                                  const yyjson_alc *alc,\n                                  yyjson_write_err *err);\n\n/**\n Write a document to file pointer with options.\n \n @param fp The file pointer.\n    The data will be written to the current position of the file.\n    If this fp is NULL or invalid, the function will fail and return false.\n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_write_fp(FILE *fp,\n                                const yyjson_doc *doc,\n                                yyjson_write_flag flg,\n                                const yyjson_alc *alc,\n                                yyjson_write_err *err);\n\n/**\n Write a document to JSON string.\n \n This function is thread-safe.\n \n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free().\n */\nyyjson_api_inline char *yyjson_write(const yyjson_doc *doc,\n                                     yyjson_write_flag flg,\n                                     size_t *len) {\n    return yyjson_write_opts(doc, flg, NULL, len, NULL);\n}\n\n\n\n/**\n Write a document to JSON string with options.\n \n This function is thread-safe when:\n 1. The `doc` is not modified by other threads.\n 2. The `alc` is thread-safe or NULL.\n\n @param doc The mutable JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free() or alc->free().\n */\nyyjson_api char *yyjson_mut_write_opts(const yyjson_mut_doc *doc,\n                                       yyjson_write_flag flg,\n                                       const yyjson_alc *alc,\n                                       size_t *len,\n                                       yyjson_write_err *err);\n\n/**\n Write a document to JSON file with options.\n \n This function is thread-safe when:\n 1. The file is not accessed by other threads.\n 2. The `doc` is not modified by other threads.\n 3. The `alc` is thread-safe or NULL.\n \n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return false.\n    If this file is not empty, the content will be discarded.\n @param doc The mutable JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_mut_write_file(const char *path,\n                                      const yyjson_mut_doc *doc,\n                                      yyjson_write_flag flg,\n                                      const yyjson_alc *alc,\n                                      yyjson_write_err *err);\n\n/**\n Write a document to file pointer with options.\n \n @param fp The file pointer.\n    The data will be written to the current position of the file.\n    If this fp is NULL or invalid, the function will fail and return false.\n @param doc The mutable JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_mut_write_fp(FILE *fp,\n                                    const yyjson_mut_doc *doc,\n                                    yyjson_write_flag flg,\n                                    const yyjson_alc *alc,\n                                    yyjson_write_err *err);\n\n/**\n Write a document to JSON string.\n \n This function is thread-safe when:\n The `doc` is not modified by other threads.\n \n @param doc The JSON document.\n    If this doc is NULL or has no root, the function will fail and return false.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free().\n */\nyyjson_api_inline char *yyjson_mut_write(const yyjson_mut_doc *doc,\n                                         yyjson_write_flag flg,\n                                         size_t *len) {\n    return yyjson_mut_write_opts(doc, flg, NULL, len, NULL);\n}\n\n\n\n/*==============================================================================\n * JSON Value Writer API\n *============================================================================*/\n\n/**\n Write a value to JSON string with options.\n \n This function is thread-safe when:\n The `alc` is thread-safe or NULL.\n \n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free() or alc->free().\n */\nyyjson_api char *yyjson_val_write_opts(const yyjson_val *val,\n                                       yyjson_write_flag flg,\n                                       const yyjson_alc *alc,\n                                       size_t *len,\n                                       yyjson_write_err *err);\n\n/**\n Write a value to JSON file with options.\n \n This function is thread-safe when:\n 1. The file is not accessed by other threads.\n 2. The `alc` is thread-safe or NULL.\n \n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return false.\n    If this file is not empty, the content will be discarded.\n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_val_write_file(const char *path,\n                                      const yyjson_val *val,\n                                      yyjson_write_flag flg,\n                                      const yyjson_alc *alc,\n                                      yyjson_write_err *err);\n\n/**\n Write a value to file pointer with options.\n \n @param fp The file pointer.\n    The data will be written to the current position of the file.\n    If this path is NULL or invalid, the function will fail and return false.\n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_val_write_fp(FILE *fp,\n                                    const yyjson_val *val,\n                                    yyjson_write_flag flg,\n                                    const yyjson_alc *alc,\n                                    yyjson_write_err *err);\n\n/**\n Write a value to JSON string.\n \n This function is thread-safe.\n \n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free().\n */\nyyjson_api_inline char *yyjson_val_write(const yyjson_val *val,\n                                         yyjson_write_flag flg,\n                                         size_t *len) {\n    return yyjson_val_write_opts(val, flg, NULL, len, NULL);\n}\n\n/**\n Write a value to JSON string with options.\n \n This function is thread-safe when:\n 1. The `val` is not modified by other threads.\n 2. The `alc` is thread-safe or NULL.\n \n @param val The mutable JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return  A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free() or alc->free().\n */\nyyjson_api char *yyjson_mut_val_write_opts(const yyjson_mut_val *val,\n                                           yyjson_write_flag flg,\n                                           const yyjson_alc *alc,\n                                           size_t *len,\n                                           yyjson_write_err *err);\n\n/**\n Write a value to JSON file with options.\n \n This function is thread-safe when:\n 1. The file is not accessed by other threads.\n 2. The `val` is not modified by other threads.\n 3. The `alc` is thread-safe or NULL.\n \n @param path The JSON file's path.\n    If this path is NULL or invalid, the function will fail and return false.\n    If this file is not empty, the content will be discarded.\n @param val The mutable JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_mut_val_write_file(const char *path,\n                                          const yyjson_mut_val *val,\n                                          yyjson_write_flag flg,\n                                          const yyjson_alc *alc,\n                                          yyjson_write_err *err);\n\n/**\n Write a value to JSON file with options.\n \n @param fp The file pointer.\n    The data will be written to the current position of the file.\n    If this path is NULL or invalid, the function will fail and return false.\n @param val The mutable JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param alc The memory allocator used by JSON writer.\n    Pass NULL to use the libc's default allocator.\n @param err A pointer to receive error information.\n    Pass NULL if you don't need error information.\n @return true if successful, false if an error occurs.\n \n @warning On 32-bit operating system, files larger than 2GB may fail to write.\n */\nyyjson_api bool yyjson_mut_val_write_fp(FILE *fp,\n                                        const yyjson_mut_val *val,\n                                        yyjson_write_flag flg,\n                                        const yyjson_alc *alc,\n                                        yyjson_write_err *err);\n\n/**\n Write a value to JSON string.\n \n This function is thread-safe when:\n The `val` is not modified by other threads.\n \n @param val The JSON root value.\n    If this parameter is NULL, the function will fail and return NULL.\n @param flg The JSON write options.\n    Multiple options can be combined with `|` operator. 0 means no options.\n @param len A pointer to receive output length in bytes (not including the\n    null-terminator). Pass NULL if you don't need length information.\n @return A new JSON string, or NULL if an error occurs.\n    This string is encoded as UTF-8 with a null-terminator.\n    When it's no longer needed, it should be freed with free().\n */\nyyjson_api_inline char *yyjson_mut_val_write(const yyjson_mut_val *val,\n                                             yyjson_write_flag flg,\n                                             size_t *len) {\n    return yyjson_mut_val_write_opts(val, flg, NULL, len, NULL);\n}\n\n\n\n/*==============================================================================\n * JSON Document API\n *============================================================================*/\n\n/** Returns the root value of this JSON document.\n    Returns NULL if `doc` is NULL. */\nyyjson_api_inline yyjson_val *yyjson_doc_get_root(yyjson_doc *doc);\n\n/** Returns read size of input JSON data.\n    Returns 0 if `doc` is NULL.\n    For example: the read size of `[1,2,3]` is 7 bytes.  */\nyyjson_api_inline size_t yyjson_doc_get_read_size(yyjson_doc *doc);\n\n/** Returns total value count in this JSON document.\n    Returns 0 if `doc` is NULL.\n    For example: the value count of `[1,2,3]` is 4. */\nyyjson_api_inline size_t yyjson_doc_get_val_count(yyjson_doc *doc);\n\n/** Release the JSON document and free the memory.\n    After calling this function, the `doc` and all values from the `doc` are no\n    longer available. This function will do nothing if the `doc` is NULL. */\nyyjson_api_inline void yyjson_doc_free(yyjson_doc *doc);\n\n\n\n/*==============================================================================\n * JSON Value Type API\n *============================================================================*/\n\n/** Returns whether the JSON value is raw.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_raw(yyjson_val *val);\n\n/** Returns whether the JSON value is `null`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_null(yyjson_val *val);\n\n/** Returns whether the JSON value is `true`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_true(yyjson_val *val);\n\n/** Returns whether the JSON value is `false`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_false(yyjson_val *val);\n\n/** Returns whether the JSON value is bool (true/false).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_bool(yyjson_val *val);\n\n/** Returns whether the JSON value is unsigned integer (uint64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_uint(yyjson_val *val);\n\n/** Returns whether the JSON value is signed integer (int64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_sint(yyjson_val *val);\n\n/** Returns whether the JSON value is integer (uint64_t/int64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_int(yyjson_val *val);\n\n/** Returns whether the JSON value is real number (double).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_real(yyjson_val *val);\n\n/** Returns whether the JSON value is number (uint64_t/int64_t/double).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_num(yyjson_val *val);\n\n/** Returns whether the JSON value is string.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_str(yyjson_val *val);\n\n/** Returns whether the JSON value is array.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_arr(yyjson_val *val);\n\n/** Returns whether the JSON value is object.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_obj(yyjson_val *val);\n\n/** Returns whether the JSON value is container (array/object).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_is_ctn(yyjson_val *val);\n\n\n\n/*==============================================================================\n * JSON Value Content API\n *============================================================================*/\n\n/** Returns the JSON value's type.\n    Returns YYJSON_TYPE_NONE if `val` is NULL. */\nyyjson_api_inline yyjson_type yyjson_get_type(yyjson_val *val);\n\n/** Returns the JSON value's subtype.\n    Returns YYJSON_SUBTYPE_NONE if `val` is NULL. */\nyyjson_api_inline yyjson_subtype yyjson_get_subtype(yyjson_val *val);\n\n/** Returns the JSON value's tag.\n    Returns 0 if `val` is NULL. */\nyyjson_api_inline uint8_t yyjson_get_tag(yyjson_val *val);\n\n/** Returns the JSON value's type description.\n    The return value should be one of these strings: \"raw\", \"null\", \"string\",\n    \"array\", \"object\", \"true\", \"false\", \"uint\", \"sint\", \"real\", \"unknown\". */\nyyjson_api_inline const char *yyjson_get_type_desc(yyjson_val *val);\n\n/** Returns the content if the value is raw.\n    Returns NULL if `val` is NULL or type is not raw. */\nyyjson_api_inline const char *yyjson_get_raw(yyjson_val *val);\n\n/** Returns the content if the value is bool.\n    Returns NULL if `val` is NULL or type is not bool. */\nyyjson_api_inline bool yyjson_get_bool(yyjson_val *val);\n\n/** Returns the content and cast to uint64_t.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline uint64_t yyjson_get_uint(yyjson_val *val);\n\n/** Returns the content and cast to int64_t.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline int64_t yyjson_get_sint(yyjson_val *val);\n\n/** Returns the content and cast to int.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline int yyjson_get_int(yyjson_val *val);\n\n/** Returns the content if the value is real number, or 0.0 on error.\n    Returns 0.0 if `val` is NULL or type is not real(double). */\nyyjson_api_inline double yyjson_get_real(yyjson_val *val);\n\n/** Returns the content and typecast to `double` if the value is number.\n    Returns 0.0 if `val` is NULL or type is not number(uint/sint/real). */\nyyjson_api_inline double yyjson_get_num(yyjson_val *val);\n\n/** Returns the content if the value is string.\n    Returns NULL if `val` is NULL or type is not string. */\nyyjson_api_inline const char *yyjson_get_str(yyjson_val *val);\n\n/** Returns the content length (string length, array size, object size.\n    Returns 0 if `val` is NULL or type is not string/array/object. */\nyyjson_api_inline size_t yyjson_get_len(yyjson_val *val);\n\n/** Returns whether the JSON value is equals to a string.\n    Returns false if input is NULL or type is not string. */\nyyjson_api_inline bool yyjson_equals_str(yyjson_val *val, const char *str);\n\n/** Returns whether the JSON value is equals to a string.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    Returns false if input is NULL or type is not string. */\nyyjson_api_inline bool yyjson_equals_strn(yyjson_val *val, const char *str,\n                                          size_t len);\n\n/** Returns whether two JSON values are equal (deep compare).\n    Returns false if input is NULL.\n    @note the result may be inaccurate if object has duplicate keys.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api_inline bool yyjson_equals(yyjson_val *lhs, yyjson_val *rhs);\n\n/** Set the value to raw.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_raw(yyjson_val *val,\n                                      const char *raw, size_t len);\n\n/** Set the value to null.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_null(yyjson_val *val);\n\n/** Set the value to bool.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_bool(yyjson_val *val, bool num);\n\n/** Set the value to uint.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_uint(yyjson_val *val, uint64_t num);\n\n/** Set the value to sint.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_sint(yyjson_val *val, int64_t num);\n\n/** Set the value to int.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_int(yyjson_val *val, int num);\n\n/** Set the value to real.\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_real(yyjson_val *val, double num);\n\n/** Set the value to string (null-terminated).\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_str(yyjson_val *val, const char *str);\n\n/** Set the value to string (with length).\n    Returns false if input is NULL or `val` is object or array.\n    @warning This will modify the `immutable` value, use with caution. */\nyyjson_api_inline bool yyjson_set_strn(yyjson_val *val,\n                                       const char *str, size_t len);\n\n\n\n/*==============================================================================\n * JSON Array API\n *============================================================================*/\n\n/** Returns the number of elements in this array.\n    Returns 0 if `arr` is NULL or type is not array. */\nyyjson_api_inline size_t yyjson_arr_size(yyjson_val *arr);\n\n/** Returns the element at the specified position in this array.\n    Returns NULL if array is NULL/empty or the index is out of bounds.\n    @warning This function takes a linear search time if array is not flat.\n        For example: `[1,{},3]` is flat, `[1,[2],3]` is not flat. */\nyyjson_api_inline yyjson_val *yyjson_arr_get(yyjson_val *arr, size_t idx);\n\n/** Returns the first element of this array.\n    Returns NULL if `arr` is NULL/empty or type is not array. */\nyyjson_api_inline yyjson_val *yyjson_arr_get_first(yyjson_val *arr);\n\n/** Returns the last element of this array.\n    Returns NULL if `arr` is NULL/empty or type is not array.\n    @warning This function takes a linear search time if array is not flat.\n        For example: `[1,{},3]` is flat, `[1,[2],3]` is not flat.*/\nyyjson_api_inline yyjson_val *yyjson_arr_get_last(yyjson_val *arr);\n\n\n\n/*==============================================================================\n * JSON Array Iterator API\n *============================================================================*/\n\n/**\n A JSON array iterator.\n \n @par Example\n @code\n    yyjson_val *val;\n    yyjson_arr_iter iter = yyjson_arr_iter_with(arr);\n    while ((val = yyjson_arr_iter_next(&iter))) {\n        your_func(val);\n    }\n @endcode\n */\ntypedef struct yyjson_arr_iter {\n    size_t idx; /**< next value's index */\n    size_t max; /**< maximum index (arr.size) */\n    yyjson_val *cur; /**< next value */\n} yyjson_arr_iter;\n\n/**\n Initialize an iterator for this array.\n \n @param arr The array to be iterated over.\n    If this parameter is NULL or not an array, `iter` will be set to empty.\n @param iter The iterator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n @return true if the `iter` has been successfully initialized.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline bool yyjson_arr_iter_init(yyjson_val *arr,\n                                            yyjson_arr_iter *iter);\n\n/**\n Create an iterator with an array , same as `yyjson_arr_iter_init()`.\n \n @param arr The array to be iterated over.\n    If this parameter is NULL or not an array, an empty iterator will returned.\n @return A new iterator for the array.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline yyjson_arr_iter yyjson_arr_iter_with(yyjson_val *arr);\n\n/**\n Returns whether the iteration has more elements.\n If `iter` is NULL, this function will return false.\n */\nyyjson_api_inline bool yyjson_arr_iter_has_next(yyjson_arr_iter *iter);\n\n/**\n Returns the next element in the iteration, or NULL on end.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_val *yyjson_arr_iter_next(yyjson_arr_iter *iter);\n\n/**\n Macro for iterating over an array.\n It works like iterator, but with a more intuitive API.\n \n @par Example\n @code\n    size_t idx, max;\n    yyjson_val *val;\n    yyjson_arr_foreach(arr, idx, max, val) {\n        your_func(idx, val);\n    }\n @endcode\n */\n#define yyjson_arr_foreach(arr, idx, max, val) \\\n    for ((idx) = 0, \\\n        (max) = yyjson_arr_size(arr), \\\n        (val) = yyjson_arr_get_first(arr); \\\n        (idx) < (max); \\\n        (idx)++, \\\n        (val) = unsafe_yyjson_get_next(val))\n\n\n\n/*==============================================================================\n * JSON Object API\n *============================================================================*/\n\n/** Returns the number of key-value pairs in this object.\n    Returns 0 if `obj` is NULL or type is not object. */\nyyjson_api_inline size_t yyjson_obj_size(yyjson_val *obj);\n\n/** Returns the value to which the specified key is mapped.\n    Returns NULL if this object contains no mapping for the key.\n    Returns NULL if `obj/key` is NULL, or type is not object.\n    \n    The `key` should be a null-terminated UTF-8 string.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_val *yyjson_obj_get(yyjson_val *obj, const char *key);\n\n/** Returns the value to which the specified key is mapped.\n    Returns NULL if this object contains no mapping for the key.\n    Returns NULL if `obj/key` is NULL, or type is not object.\n    \n    The `key` should be a UTF-8 string, null-terminator is not required.\n    The `key_len` should be the length of the key, in bytes.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_val *yyjson_obj_getn(yyjson_val *obj, const char *key,\n                                              size_t key_len);\n\n\n\n/*==============================================================================\n * JSON Object Iterator API\n *============================================================================*/\n\n/**\n A JSON object iterator.\n \n @par Example\n @code\n    yyjson_val *key, *val;\n    yyjson_obj_iter iter = yyjson_obj_iter_with(obj);\n    while ((key = yyjson_obj_iter_next(&iter))) {\n        val = yyjson_obj_iter_get_val(key);\n        your_func(key, val);\n    }\n @endcode\n \n If the ordering of the keys is known at compile-time, you can use this method\n to speed up value lookups:\n @code\n    // {\"k1\":1, \"k2\": 3, \"k3\": 3}\n    yyjson_val *key, *val;\n    yyjson_obj_iter iter = yyjson_obj_iter_with(obj);\n    yyjson_val *v1 = yyjson_obj_iter_get(&iter, \"k1\");\n    yyjson_val *v3 = yyjson_obj_iter_get(&iter, \"k3\");\n @endcode\n @see yyjson_obj_iter_get() and yyjson_obj_iter_getn()\n */\ntypedef struct yyjson_obj_iter {\n    size_t idx; /**< next key's index */\n    size_t max; /**< maximum key index (obj.size) */\n    yyjson_val *cur; /**< next key */\n    yyjson_val *obj; /**< the object being iterated */\n} yyjson_obj_iter;\n\n/**\n Initialize an iterator for this object.\n \n @param obj The object to be iterated over.\n    If this parameter is NULL or not an object, `iter` will be set to empty.\n @param iter The iterator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n @return true if the `iter` has been successfully initialized.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline bool yyjson_obj_iter_init(yyjson_val *obj,\n                                            yyjson_obj_iter *iter);\n\n/**\n Create an iterator with an object, same as `yyjson_obj_iter_init()`.\n \n @param obj The object to be iterated over.\n    If this parameter is NULL or not an object, an empty iterator will returned.\n @return A new iterator for the object.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline yyjson_obj_iter yyjson_obj_iter_with(yyjson_val *obj);\n\n/**\n Returns whether the iteration has more elements.\n If `iter` is NULL, this function will return false.\n */\nyyjson_api_inline bool yyjson_obj_iter_has_next(yyjson_obj_iter *iter);\n\n/**\n Returns the next key in the iteration, or NULL on end.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_val *yyjson_obj_iter_next(yyjson_obj_iter *iter);\n\n/**\n Returns the value for key inside the iteration.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_val *yyjson_obj_iter_get_val(yyjson_val *key);\n\n/**\n Iterates to a specified key and returns the value.\n \n This function does the same thing as `yyjson_obj_get()`, but is much faster\n if the ordering of the keys is known at compile-time and you are using the same\n order to look up the values. If the key exists in this object, then the\n iterator will stop at the next key, otherwise the iterator will not change and\n NULL is returned.\n \n @param iter The object iterator, should not be NULL.\n @param key The key, should be a UTF-8 string with null-terminator.\n @return The value to which the specified key is mapped.\n    NULL if this object contains no mapping for the key or input is invalid.\n \n @warning This function takes a linear search time if the key is not nearby.\n */\nyyjson_api_inline yyjson_val *yyjson_obj_iter_get(yyjson_obj_iter *iter,\n                                                  const char *key);\n\n/**\n Iterates to a specified key and returns the value.\n\n This function does the same thing as `yyjson_obj_getn()`, but is much faster\n if the ordering of the keys is known at compile-time and you are using the same\n order to look up the values. If the key exists in this object, then the\n iterator will stop at the next key, otherwise the iterator will not change and\n NULL is returned.\n \n @param iter The object iterator, should not be NULL.\n @param key The key, should be a UTF-8 string, null-terminator is not required.\n @param key_len The the length of `key`, in bytes.\n @return The value to which the specified key is mapped.\n    NULL if this object contains no mapping for the key or input is invalid.\n \n @warning This function takes a linear search time if the key is not nearby.\n */\nyyjson_api_inline yyjson_val *yyjson_obj_iter_getn(yyjson_obj_iter *iter,\n                                                   const char *key,\n                                                   size_t key_len);\n\n/**\n Macro for iterating over an object.\n It works like iterator, but with a more intuitive API.\n \n @par Example\n @code\n    size_t idx, max;\n    yyjson_val *key, *val;\n    yyjson_obj_foreach(obj, idx, max, key, val) {\n        your_func(key, val);\n    }\n @endcode\n */\n#define yyjson_obj_foreach(obj, idx, max, key, val) \\\n    for ((idx) = 0, \\\n        (max) = yyjson_obj_size(obj), \\\n        (key) = (obj) ? unsafe_yyjson_get_first(obj) : NULL, \\\n        (val) = (key) + 1; \\\n        (idx) < (max); \\\n        (idx)++, \\\n        (key) = unsafe_yyjson_get_next(val), \\\n        (val) = (key) + 1)\n\n\n\n/*==============================================================================\n * Mutable JSON Document API\n *============================================================================*/\n\n/** Returns the root value of this JSON document.\n    Returns NULL if `doc` is NULL. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_root(yyjson_mut_doc *doc);\n\n/** Sets the root value of this JSON document.\n    Pass NULL to clear root value of the document. */\nyyjson_api_inline void yyjson_mut_doc_set_root(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *root);\n\n/**\n Set the string pool size for a mutable document.\n This function does not allocate memory immediately, but uses the size when\n the next memory allocation is needed.\n \n If the caller knows the approximate bytes of strings that the document needs to\n store (e.g. copy string with `yyjson_mut_strcpy` function), setting a larger\n size can avoid multiple memory allocations and improve performance.\n \n @param doc The mutable document.\n @param len The desired string pool size in bytes (total string length).\n @return true if successful, false if size is 0 or overflow.\n */\nyyjson_api bool yyjson_mut_doc_set_str_pool_size(yyjson_mut_doc *doc,\n                                                 size_t len);\n\n/**\n Set the value pool size for a mutable document.\n This function does not allocate memory immediately, but uses the size when\n the next memory allocation is needed.\n \n If the caller knows the approximate number of values that the document needs to\n store (e.g. create new value with `yyjson_mut_xxx` functions), setting a larger\n size can avoid multiple memory allocations and improve performance.\n \n @param doc The mutable document.\n @param count The desired value pool size (number of `yyjson_mut_val`).\n @return true if successful, false if size is 0 or overflow.\n */\nyyjson_api bool yyjson_mut_doc_set_val_pool_size(yyjson_mut_doc *doc,\n                                                 size_t count);\n\n/** Release the JSON document and free the memory.\n    After calling this function, the `doc` and all values from the `doc` are no\n    longer available. This function will do nothing if the `doc` is NULL.  */\nyyjson_api void yyjson_mut_doc_free(yyjson_mut_doc *doc);\n\n/** Creates and returns a new mutable JSON document, returns NULL on error.\n    If allocator is NULL, the default allocator will be used. */\nyyjson_api yyjson_mut_doc *yyjson_mut_doc_new(const yyjson_alc *alc);\n\n/** Copies and returns a new mutable document from input, returns NULL on error.\n    This makes a `deep-copy` on the immutable document.\n    If allocator is NULL, the default allocator will be used.\n    @note `imut_doc` -> `mut_doc`. */\nyyjson_api yyjson_mut_doc *yyjson_doc_mut_copy(yyjson_doc *doc,\n                                               const yyjson_alc *alc);\n\n/** Copies and returns a new mutable document from input, returns NULL on error.\n    This makes a `deep-copy` on the mutable document.\n    If allocator is NULL, the default allocator will be used.\n    @note `mut_doc` -> `mut_doc`. */\nyyjson_api yyjson_mut_doc *yyjson_mut_doc_mut_copy(yyjson_mut_doc *doc,\n                                                   const yyjson_alc *alc);\n\n/** Copies and returns a new mutable value from input, returns NULL on error.\n    This makes a `deep-copy` on the immutable value.\n    The memory was managed by mutable document.\n    @note `imut_val` -> `mut_val`. */\nyyjson_api yyjson_mut_val *yyjson_val_mut_copy(yyjson_mut_doc *doc,\n                                               yyjson_val *val);\n\n/** Copies and returns a new mutable value from input, returns NULL on error.\n    This makes a `deep-copy` on the mutable value.\n    The memory was managed by mutable document.\n    @note `mut_val` -> `mut_val`.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api yyjson_mut_val *yyjson_mut_val_mut_copy(yyjson_mut_doc *doc,\n                                                   yyjson_mut_val *val);\n\n/** Copies and returns a new immutable document from input,\n    returns NULL on error. This makes a `deep-copy` on the mutable document.\n    The returned document should be freed with `yyjson_doc_free()`.\n    @note `mut_doc` -> `imut_doc`.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api yyjson_doc *yyjson_mut_doc_imut_copy(yyjson_mut_doc *doc,\n                                                const yyjson_alc *alc);\n\n/** Copies and returns a new immutable document from input,\n    returns NULL on error. This makes a `deep-copy` on the mutable value.\n    The returned document should be freed with `yyjson_doc_free()`.\n    @note `mut_val` -> `imut_doc`.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api yyjson_doc *yyjson_mut_val_imut_copy(yyjson_mut_val *val,\n                                                const yyjson_alc *alc);\n\n\n\n/*==============================================================================\n * Mutable JSON Value Type API\n *============================================================================*/\n\n/** Returns whether the JSON value is raw.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_raw(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is `null`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_null(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is `true`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_true(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is `false`.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_false(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is bool (true/false).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_bool(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is unsigned integer (uint64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_uint(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is signed integer (int64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_sint(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is integer (uint64_t/int64_t).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_int(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is real number (double).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_real(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is number (uint/sint/real).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_num(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is string.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_str(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is array.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_arr(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is object.\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_obj(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is container (array/object).\n    Returns false if `val` is NULL. */\nyyjson_api_inline bool yyjson_mut_is_ctn(yyjson_mut_val *val);\n\n\n\n/*==============================================================================\n * Mutable JSON Value Content API\n *============================================================================*/\n\n/** Returns the JSON value's type.\n    Returns `YYJSON_TYPE_NONE` if `val` is NULL. */\nyyjson_api_inline yyjson_type yyjson_mut_get_type(yyjson_mut_val *val);\n\n/** Returns the JSON value's subtype.\n    Returns `YYJSON_SUBTYPE_NONE` if `val` is NULL. */\nyyjson_api_inline yyjson_subtype yyjson_mut_get_subtype(yyjson_mut_val *val);\n\n/** Returns the JSON value's tag.\n    Returns 0 if `val` is NULL. */\nyyjson_api_inline uint8_t yyjson_mut_get_tag(yyjson_mut_val *val);\n\n/** Returns the JSON value's type description.\n    The return value should be one of these strings: \"raw\", \"null\", \"string\",\n    \"array\", \"object\", \"true\", \"false\", \"uint\", \"sint\", \"real\", \"unknown\". */\nyyjson_api_inline const char *yyjson_mut_get_type_desc(yyjson_mut_val *val);\n\n/** Returns the content if the value is raw.\n    Returns NULL if `val` is NULL or type is not raw. */\nyyjson_api_inline const char *yyjson_mut_get_raw(yyjson_mut_val *val);\n\n/** Returns the content if the value is bool.\n    Returns NULL if `val` is NULL or type is not bool. */\nyyjson_api_inline bool yyjson_mut_get_bool(yyjson_mut_val *val);\n\n/** Returns the content and cast to uint64_t.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline uint64_t yyjson_mut_get_uint(yyjson_mut_val *val);\n\n/** Returns the content and cast to int64_t.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline int64_t yyjson_mut_get_sint(yyjson_mut_val *val);\n\n/** Returns the content and cast to int.\n    Returns 0 if `val` is NULL or type is not integer(sint/uint). */\nyyjson_api_inline int yyjson_mut_get_int(yyjson_mut_val *val);\n\n/** Returns the content if the value is real number.\n    Returns 0.0 if `val` is NULL or type is not real(double). */\nyyjson_api_inline double yyjson_mut_get_real(yyjson_mut_val *val);\n\n/** Returns the content and typecast to `double` if the value is number.\n    Returns 0.0 if `val` is NULL or type is not number(uint/sint/real). */\nyyjson_api_inline double yyjson_mut_get_num(yyjson_mut_val *val);\n\n/** Returns the content if the value is string.\n    Returns NULL if `val` is NULL or type is not string. */\nyyjson_api_inline const char *yyjson_mut_get_str(yyjson_mut_val *val);\n\n/** Returns the content length (string length, array size, object size.\n    Returns 0 if `val` is NULL or type is not string/array/object. */\nyyjson_api_inline size_t yyjson_mut_get_len(yyjson_mut_val *val);\n\n/** Returns whether the JSON value is equals to a string.\n    The `str` should be a null-terminated UTF-8 string.\n    Returns false if input is NULL or type is not string. */\nyyjson_api_inline bool yyjson_mut_equals_str(yyjson_mut_val *val,\n                                             const char *str);\n\n/** Returns whether the JSON value is equals to a string.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    Returns false if input is NULL or type is not string. */\nyyjson_api_inline bool yyjson_mut_equals_strn(yyjson_mut_val *val,\n                                              const char *str, size_t len);\n\n/** Returns whether two JSON values are equal (deep compare).\n    Returns false if input is NULL.\n    @note the result may be inaccurate if object has duplicate keys.\n    @warning This function is recursive and may cause a stack overflow\n        if the object level is too deep. */\nyyjson_api_inline bool yyjson_mut_equals(yyjson_mut_val *lhs,\n                                         yyjson_mut_val *rhs);\n\n/** Set the value to raw.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_raw(yyjson_mut_val *val,\n                                          const char *raw, size_t len);\n\n/** Set the value to null.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_null(yyjson_mut_val *val);\n\n/** Set the value to bool.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_bool(yyjson_mut_val *val, bool num);\n\n/** Set the value to uint.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_uint(yyjson_mut_val *val, uint64_t num);\n\n/** Set the value to sint.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_sint(yyjson_mut_val *val, int64_t num);\n\n/** Set the value to int.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_int(yyjson_mut_val *val, int num);\n\n/** Set the value to real.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_real(yyjson_mut_val *val, double num);\n\n/** Set the value to string (null-terminated).\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_str(yyjson_mut_val *val, const char *str);\n\n/** Set the value to string (with length).\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_strn(yyjson_mut_val *val,\n                                           const char *str, size_t len);\n\n/** Set the value to array.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_arr(yyjson_mut_val *val);\n\n/** Set the value to array.\n    Returns false if input is NULL.\n    @warning This function should not be used on an existing object or array. */\nyyjson_api_inline bool yyjson_mut_set_obj(yyjson_mut_val *val);\n\n\n\n/*==============================================================================\n * Mutable JSON Value Creation API\n *============================================================================*/\n\n/** Creates and returns a raw value, returns NULL on error.\n    The `str` should be a null-terminated UTF-8 string.\n    \n    @warning The input string is not copied, you should keep this string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_raw(yyjson_mut_doc *doc,\n                                                 const char *str);\n\n/** Creates and returns a raw value, returns NULL on error.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    \n    @warning The input string is not copied, you should keep this string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawn(yyjson_mut_doc *doc,\n                                                  const char *str,\n                                                  size_t len);\n\n/** Creates and returns a raw value, returns NULL on error.\n    The `str` should be a null-terminated UTF-8 string.\n    The input string is copied and held by the document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawcpy(yyjson_mut_doc *doc,\n                                                    const char *str);\n\n/** Creates and returns a raw value, returns NULL on error.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    The input string is copied and held by the document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawncpy(yyjson_mut_doc *doc,\n                                                     const char *str,\n                                                     size_t len);\n\n/** Creates and returns a null value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_null(yyjson_mut_doc *doc);\n\n/** Creates and returns a true value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_true(yyjson_mut_doc *doc);\n\n/** Creates and returns a false value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_false(yyjson_mut_doc *doc);\n\n/** Creates and returns a bool value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_bool(yyjson_mut_doc *doc,\n                                                  bool val);\n\n/** Creates and returns an unsigned integer value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_uint(yyjson_mut_doc *doc,\n                                                  uint64_t num);\n\n/** Creates and returns a signed integer value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_sint(yyjson_mut_doc *doc,\n                                                  int64_t num);\n\n/** Creates and returns a signed integer value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_int(yyjson_mut_doc *doc,\n                                                 int64_t num);\n\n/** Creates and returns an real number value, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_real(yyjson_mut_doc *doc,\n                                                  double num);\n\n/** Creates and returns a string value, returns NULL on error.\n    The `str` should be a null-terminated UTF-8 string.\n    @warning The input string is not copied, you should keep this string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_str(yyjson_mut_doc *doc,\n                                                 const char *str);\n\n/** Creates and returns a string value, returns NULL on error.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    @warning The input string is not copied, you should keep this string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strn(yyjson_mut_doc *doc,\n                                                  const char *str,\n                                                  size_t len);\n\n/** Creates and returns a string value, returns NULL on error.\n    The `str` should be a null-terminated UTF-8 string.\n    The input string is copied and held by the document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strcpy(yyjson_mut_doc *doc,\n                                                    const char *str);\n\n/** Creates and returns a string value, returns NULL on error.\n    The `str` should be a UTF-8 string, null-terminator is not required.\n    The input string is copied and held by the document. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strncpy(yyjson_mut_doc *doc,\n                                                     const char *str,\n                                                     size_t len);\n\n\n\n/*==============================================================================\n * Mutable JSON Array API\n *============================================================================*/\n\n/** Returns the number of elements in this array.\n    Returns 0 if `arr` is NULL or type is not array. */\nyyjson_api_inline size_t yyjson_mut_arr_size(yyjson_mut_val *arr);\n\n/** Returns the element at the specified position in this array.\n    Returns NULL if array is NULL/empty or the index is out of bounds.\n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get(yyjson_mut_val *arr,\n                                                     size_t idx);\n\n/** Returns the first element of this array.\n    Returns NULL if `arr` is NULL/empty or type is not array. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_first(yyjson_mut_val *arr);\n\n/** Returns the last element of this array.\n    Returns NULL if `arr` is NULL/empty or type is not array. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_last(yyjson_mut_val *arr);\n\n\n\n/*==============================================================================\n * Mutable JSON Array Iterator API\n *============================================================================*/\n\n/**\n A mutable JSON array iterator.\n \n @warning You should not modify the array while iterating over it, but you can\n    use `yyjson_mut_arr_iter_remove()` to remove current value.\n \n @par Example\n @code\n    yyjson_mut_val *val;\n    yyjson_mut_arr_iter iter = yyjson_mut_arr_iter_with(arr);\n    while ((val = yyjson_mut_arr_iter_next(&iter))) {\n        your_func(val);\n        if (your_val_is_unused(val)) {\n            yyjson_mut_arr_iter_remove(&iter);\n        }\n    }\n @endcode\n */\ntypedef struct yyjson_mut_arr_iter {\n    size_t idx; /**< next value's index */\n    size_t max; /**< maximum index (arr.size) */\n    yyjson_mut_val *cur; /**< current value */\n    yyjson_mut_val *pre; /**< previous value */\n    yyjson_mut_val *arr; /**< the array being iterated */\n} yyjson_mut_arr_iter;\n\n/**\n Initialize an iterator for this array.\n \n @param arr The array to be iterated over.\n    If this parameter is NULL or not an array, `iter` will be set to empty.\n @param iter The iterator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n @return true if the `iter` has been successfully initialized.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline bool yyjson_mut_arr_iter_init(yyjson_mut_val *arr,\n    yyjson_mut_arr_iter *iter);\n\n/**\n Create an iterator with an array , same as `yyjson_mut_arr_iter_init()`.\n \n @param arr The array to be iterated over.\n    If this parameter is NULL or not an array, an empty iterator will returned.\n @return A new iterator for the array.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline yyjson_mut_arr_iter yyjson_mut_arr_iter_with(\n    yyjson_mut_val *arr);\n\n/**\n Returns whether the iteration has more elements.\n If `iter` is NULL, this function will return false.\n */\nyyjson_api_inline bool yyjson_mut_arr_iter_has_next(\n    yyjson_mut_arr_iter *iter);\n\n/**\n Returns the next element in the iteration, or NULL on end.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_next(\n    yyjson_mut_arr_iter *iter);\n\n/**\n Removes and returns current element in the iteration.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_remove(\n    yyjson_mut_arr_iter *iter);\n\n/**\n Macro for iterating over an array.\n It works like iterator, but with a more intuitive API.\n \n @warning You should not modify the array while iterating over it.\n \n @par Example\n @code\n    size_t idx, max;\n    yyjson_mut_val *val;\n    yyjson_mut_arr_foreach(arr, idx, max, val) {\n        your_func(idx, val);\n    }\n @endcode\n */\n#define yyjson_mut_arr_foreach(arr, idx, max, val) \\\n    for ((idx) = 0, \\\n        (max) = yyjson_mut_arr_size(arr), \\\n        (val) = yyjson_mut_arr_get_first(arr); \\\n        (idx) < (max); \\\n        (idx)++, \\\n        (val) = (val)->next)\n\n\n\n/*==============================================================================\n * Mutable JSON Array Creation API\n *============================================================================*/\n\n/**\n Creates and returns an empty mutable array.\n @param doc A mutable document, used for memory allocation only.\n @return The new array. NULL if input is NULL or memory allocation failed.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr(yyjson_mut_doc *doc);\n\n/**\n Creates and returns a new mutable array with the given boolean values.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of boolean values.\n @param count The value count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const bool vals[3] = { true, false, true };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_bool(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_bool(\n    yyjson_mut_doc *doc, const bool *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given sint numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of sint numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int64_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint64(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint(\n    yyjson_mut_doc *doc, const int64_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const uint64_t vals[3] = { 0, 1, 0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_uint(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint(\n    yyjson_mut_doc *doc, const uint64_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given real numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of real numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const double vals[3] = { 0.1, 0.2, 0.3 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_real(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_real(\n    yyjson_mut_doc *doc, const double *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given int8 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of int8 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int8_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint8(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint8(\n    yyjson_mut_doc *doc, const int8_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given int16 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of int16 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int16_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint16(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint16(\n    yyjson_mut_doc *doc, const int16_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given int32 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of int32 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int32_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint32(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint32(\n    yyjson_mut_doc *doc, const int32_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given int64 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of int64 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const int64_t vals[3] = { -1, 0, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_sint64(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint64(\n    yyjson_mut_doc *doc, const int64_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint8 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint8 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const uint8_t vals[3] = { 0, 1, 0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_uint8(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint8(\n    yyjson_mut_doc *doc, const uint8_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint16 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint16 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const uint16_t vals[3] = { 0, 1, 0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_uint16(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint16(\n    yyjson_mut_doc *doc, const uint16_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint32 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint32 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const uint32_t vals[3] = { 0, 1, 0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_uint32(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint32(\n    yyjson_mut_doc *doc, const uint32_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given uint64 numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of uint64 numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n     const uint64_t vals[3] = { 0, 1, 0 };\n     yyjson_mut_val *arr = yyjson_mut_arr_with_uint64(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint64(\n    yyjson_mut_doc *doc, const uint64_t *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given float numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of float numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const float vals[3] = { -1.0f, 0.0f, 1.0f };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_float(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_float(\n    yyjson_mut_doc *doc, const float *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given double numbers.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of double numbers.\n @param count The number count. If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const double vals[3] = { -1.0, 0.0, 1.0 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_double(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_double(\n    yyjson_mut_doc *doc, const double *vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given strings, these strings\n will not be copied.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of UTF-8 null-terminator strings.\n    If this array contains NULL, the function will fail and return NULL.\n @param count The number of values in `vals`.\n    If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @warning The input strings are not copied, you should keep these strings\n    unmodified for the lifetime of this JSON document. If these strings will be\n    modified, you should use `yyjson_mut_arr_with_strcpy()` instead.\n \n @par Example\n @code\n    const char *vals[3] = { \"a\", \"b\", \"c\" };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_str(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_str(\n    yyjson_mut_doc *doc, const char **vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given strings and string\n lengths, these strings will not be copied.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of UTF-8 strings, null-terminator is not required.\n    If this array contains NULL, the function will fail and return NULL.\n @param lens A C array of string lengths, in bytes.\n @param count The number of strings in `vals`.\n    If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @warning The input strings are not copied, you should keep these strings\n    unmodified for the lifetime of this JSON document. If these strings will be\n    modified, you should use `yyjson_mut_arr_with_strncpy()` instead.\n \n @par Example\n @code\n    const char *vals[3] = { \"a\", \"bb\", \"c\" };\n    const size_t lens[3] = { 1, 2, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_strn(doc, vals, lens, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strn(\n    yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count);\n\n/**\n Creates and returns a new mutable array with the given strings, these strings\n will be copied.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of UTF-8 null-terminator strings.\n    If this array contains NULL, the function will fail and return NULL.\n @param count The number of values in `vals`.\n    If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const char *vals[3] = { \"a\", \"b\", \"c\" };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_strcpy(doc, vals, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strcpy(\n    yyjson_mut_doc *doc, const char **vals, size_t count);\n\n/**\n Creates and returns a new mutable array with the given strings and string\n lengths, these strings will be copied.\n \n @param doc A mutable document, used for memory allocation only.\n    If this parameter is NULL, the function will fail and return NULL.\n @param vals A C array of UTF-8 strings, null-terminator is not required.\n    If this array contains NULL, the function will fail and return NULL.\n @param lens A C array of string lengths, in bytes.\n @param count The number of strings in `vals`.\n    If this value is 0, an empty array will return.\n @return The new array. NULL if input is invalid or memory allocation failed.\n \n @par Example\n @code\n    const char *vals[3] = { \"a\", \"bb\", \"c\" };\n    const size_t lens[3] = { 1, 2, 1 };\n    yyjson_mut_val *arr = yyjson_mut_arr_with_strn(doc, vals, lens, 3);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strncpy(\n    yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count);\n\n\n\n/*==============================================================================\n * Mutable JSON Array Modification API\n *============================================================================*/\n\n/**\n Inserts a value into an array at a given index.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The value to be inserted. Returns false if it is NULL.\n @param idx The index to which to insert the new value.\n    Returns false if the index is out of range.\n @return Whether successful.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_arr_insert(yyjson_mut_val *arr,\n                                             yyjson_mut_val *val, size_t idx);\n\n/**\n Inserts a value at the end of the array.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The value to be inserted. Returns false if it is NULL.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_append(yyjson_mut_val *arr,\n                                             yyjson_mut_val *val);\n\n/**\n Inserts a value at the head of the array.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The value to be inserted. Returns false if it is NULL.\n @return    Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_prepend(yyjson_mut_val *arr,\n                                              yyjson_mut_val *val);\n\n/**\n Replaces a value at index and returns old value.\n @param arr The array to which the value is to be replaced.\n    Returns false if it is NULL or not an array.\n @param idx The index to which to replace the value.\n    Returns false if the index is out of range.\n @param val The new value to replace. Returns false if it is NULL.\n @return Old value, or NULL on error.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_replace(yyjson_mut_val *arr,\n                                                         size_t idx,\n                                                         yyjson_mut_val *val);\n\n/**\n Removes and returns a value at index.\n @param arr The array from which the value is to be removed.\n    Returns false if it is NULL or not an array.\n @param idx The index from which to remove the value.\n    Returns false if the index is out of range.\n @return Old value, or NULL on error.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove(yyjson_mut_val *arr,\n                                                        size_t idx);\n\n/**\n Removes and returns the first value in this array.\n @param arr The array from which the value is to be removed.\n    Returns false if it is NULL or not an array.\n @return The first value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_first(\n    yyjson_mut_val *arr);\n\n/**\n Removes and returns the last value in this array.\n @param arr The array from which the value is to be removed.\n    Returns false if it is NULL or not an array.\n @return The last value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_last(\n    yyjson_mut_val *arr);\n\n/**\n Removes all values within a specified range in the array.\n @param arr The array from which the value is to be removed.\n    Returns false if it is NULL or not an array.\n @param idx The start index of the range (0 is the first).\n @param len The number of items in the range (can be 0).\n @return Whether successful.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_arr_remove_range(yyjson_mut_val *arr,\n                                                   size_t idx, size_t len);\n\n/**\n Removes all values in this array.\n @param arr The array from which all of the values are to be removed.\n    Returns false if it is NULL or not an array.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_clear(yyjson_mut_val *arr);\n\n/**\n Rotates values in this array for the given number of times.\n For example: `[1,2,3,4,5]` rotate 2 is `[3,4,5,1,2]`.\n @param arr The array to be rotated.\n @param idx Index (or times) to rotate.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_arr_rotate(yyjson_mut_val *arr,\n                                             size_t idx);\n\n\n\n/*==============================================================================\n * Mutable JSON Array Modification Convenience API\n *============================================================================*/\n\n/**\n Adds a value at the end of the array.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The value to be inserted. Returns false if it is NULL.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_val(yyjson_mut_val *arr,\n                                              yyjson_mut_val *val);\n\n/**\n Adds a `null` value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_null(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr);\n\n/**\n Adds a `true` value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_true(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr);\n\n/**\n Adds a `false` value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_false(yyjson_mut_doc *doc,\n                                                yyjson_mut_val *arr);\n\n/**\n Adds a bool value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param val The bool value to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_bool(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               bool val);\n\n/**\n Adds an unsigned integer value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param num The number to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_uint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               uint64_t num);\n\n/**\n Adds a signed integer value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param num The number to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_sint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               int64_t num);\n\n/**\n Adds a integer value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param num The number to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_int(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *arr,\n                                              int64_t num);\n\n/**\n Adds a double value at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param num The number to be added.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_real(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               double num);\n\n/**\n Adds a string value at the end of the array (no copy).\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param str A null-terminated UTF-8 string.\n @return Whether successful.\n @warning The input string is not copied, you should keep this string unmodified\n    for the lifetime of this JSON document.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_str(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *arr,\n                                              const char *str);\n\n/**\n Adds a string value at the end of the array (no copy).\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param str A UTF-8 string, null-terminator is not required.\n @param len The length of the string, in bytes.\n @return Whether successful.\n @warning The input string is not copied, you should keep this string unmodified\n    for the lifetime of this JSON document.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_strn(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               const char *str,\n                                               size_t len);\n\n/**\n Adds a string value at the end of the array (copied).\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param str A null-terminated UTF-8 string.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_strcpy(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *arr,\n                                                 const char *str);\n\n/**\n Adds a string value at the end of the array (copied).\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @param str A UTF-8 string, null-terminator is not required.\n @param len The length of the string, in bytes.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_arr_add_strncpy(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *arr,\n                                                  const char *str,\n                                                  size_t len);\n\n/**\n Creates and adds a new array at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return The new array, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_arr(yyjson_mut_doc *doc,\n                                                         yyjson_mut_val *arr);\n\n/**\n Creates and adds a new object at the end of the array.\n @param doc The `doc` is only used for memory allocation.\n @param arr The array to which the value is to be inserted.\n    Returns false if it is NULL or not an array.\n @return The new object, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_obj(yyjson_mut_doc *doc,\n                                                         yyjson_mut_val *arr);\n\n\n\n/*==============================================================================\n * Mutable JSON Object API\n *============================================================================*/\n\n/** Returns the number of key-value pairs in this object.\n    Returns 0 if `obj` is NULL or type is not object. */\nyyjson_api_inline size_t yyjson_mut_obj_size(yyjson_mut_val *obj);\n\n/** Returns the value to which the specified key is mapped.\n    Returns NULL if this object contains no mapping for the key.\n    Returns NULL if `obj/key` is NULL, or type is not object.\n    \n    The `key` should be a null-terminated UTF-8 string.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_get(yyjson_mut_val *obj,\n                                                     const char *key);\n\n/** Returns the value to which the specified key is mapped.\n    Returns NULL if this object contains no mapping for the key.\n    Returns NULL if `obj/key` is NULL, or type is not object.\n    \n    The `key` should be a UTF-8 string, null-terminator is not required.\n    The `key_len` should be the length of the key, in bytes.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_getn(yyjson_mut_val *obj,\n                                                      const char *key,\n                                                      size_t key_len);\n\n\n\n/*==============================================================================\n * Mutable JSON Object Iterator API\n *============================================================================*/\n\n/**\n A mutable JSON object iterator.\n \n @warning You should not modify the object while iterating over it, but you can\n    use `yyjson_mut_obj_iter_remove()` to remove current value.\n \n @par Example\n @code\n    yyjson_mut_val *key, *val;\n    yyjson_mut_obj_iter iter = yyjson_mut_obj_iter_with(obj);\n    while ((key = yyjson_mut_obj_iter_next(&iter))) {\n        val = yyjson_mut_obj_iter_get_val(key);\n        your_func(key, val);\n        if (your_val_is_unused(key, val)) {\n            yyjson_mut_obj_iter_remove(&iter);\n        }\n    }\n @endcode\n \n If the ordering of the keys is known at compile-time, you can use this method\n to speed up value lookups:\n @code\n    // {\"k1\":1, \"k2\": 3, \"k3\": 3}\n    yyjson_mut_val *key, *val;\n    yyjson_mut_obj_iter iter = yyjson_mut_obj_iter_with(obj);\n    yyjson_mut_val *v1 = yyjson_mut_obj_iter_get(&iter, \"k1\");\n    yyjson_mut_val *v3 = yyjson_mut_obj_iter_get(&iter, \"k3\");\n @endcode\n @see `yyjson_mut_obj_iter_get()` and `yyjson_mut_obj_iter_getn()`\n */\ntypedef struct yyjson_mut_obj_iter {\n    size_t idx; /**< next key's index */\n    size_t max; /**< maximum key index (obj.size) */\n    yyjson_mut_val *cur; /**< current key */\n    yyjson_mut_val *pre; /**< previous key */\n    yyjson_mut_val *obj; /**< the object being iterated */\n} yyjson_mut_obj_iter;\n\n/**\n Initialize an iterator for this object.\n \n @param obj The object to be iterated over.\n    If this parameter is NULL or not an array, `iter` will be set to empty.\n @param iter The iterator to be initialized.\n    If this parameter is NULL, the function will fail and return false.\n @return true if the `iter` has been successfully initialized.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline bool yyjson_mut_obj_iter_init(yyjson_mut_val *obj,\n    yyjson_mut_obj_iter *iter);\n\n/**\n Create an iterator with an object, same as `yyjson_obj_iter_init()`.\n \n @param obj The object to be iterated over.\n    If this parameter is NULL or not an object, an empty iterator will returned.\n @return A new iterator for the object.\n \n @note The iterator does not need to be destroyed.\n */\nyyjson_api_inline yyjson_mut_obj_iter yyjson_mut_obj_iter_with(\n    yyjson_mut_val *obj);\n\n/**\n Returns whether the iteration has more elements.\n If `iter` is NULL, this function will return false.\n */\nyyjson_api_inline bool yyjson_mut_obj_iter_has_next(\n    yyjson_mut_obj_iter *iter);\n\n/**\n Returns the next key in the iteration, or NULL on end.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_next(\n    yyjson_mut_obj_iter *iter);\n\n/**\n Returns the value for key inside the iteration.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get_val(\n    yyjson_mut_val *key);\n\n/**\n Removes current key-value pair in the iteration, returns the removed value.\n If `iter` is NULL, this function will return NULL.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_remove(\n    yyjson_mut_obj_iter *iter);\n\n/**\n Iterates to a specified key and returns the value.\n \n This function does the same thing as `yyjson_mut_obj_get()`, but is much faster\n if the ordering of the keys is known at compile-time and you are using the same\n order to look up the values. If the key exists in this object, then the\n iterator will stop at the next key, otherwise the iterator will not change and\n NULL is returned.\n \n @param iter The object iterator, should not be NULL.\n @param key The key, should be a UTF-8 string with null-terminator.\n @return The value to which the specified key is mapped.\n    NULL if this object contains no mapping for the key or input is invalid.\n \n @warning This function takes a linear search time if the key is not nearby.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get(\n    yyjson_mut_obj_iter *iter, const char *key);\n\n/**\n Iterates to a specified key and returns the value.\n \n This function does the same thing as `yyjson_mut_obj_getn()` but is much faster\n if the ordering of the keys is known at compile-time and you are using the same\n order to look up the values. If the key exists in this object, then the\n iterator will stop at the next key, otherwise the iterator will not change and\n NULL is returned.\n \n @param iter The object iterator, should not be NULL.\n @param key The key, should be a UTF-8 string, null-terminator is not required.\n @param key_len The the length of `key`, in bytes.\n @return The value to which the specified key is mapped.\n    NULL if this object contains no mapping for the key or input is invalid.\n \n @warning This function takes a linear search time if the key is not nearby.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_getn(\n    yyjson_mut_obj_iter *iter, const char *key, size_t key_len);\n\n/**\n Macro for iterating over an object.\n It works like iterator, but with a more intuitive API.\n \n @warning You should not modify the object while iterating over it.\n \n @par Example\n @code\n    size_t idx, max;\n    yyjson_val *key, *val;\n    yyjson_obj_foreach(obj, idx, max, key, val) {\n        your_func(key, val);\n    }\n @endcode\n */\n#define yyjson_mut_obj_foreach(obj, idx, max, key, val) \\\n    for ((idx) = 0, \\\n        (max) = yyjson_mut_obj_size(obj), \\\n        (key) = (max) ? ((yyjson_mut_val *)(obj)->uni.ptr)->next->next : NULL, \\\n        (val) = (key) ? (key)->next : NULL; \\\n        (idx) < (max); \\\n        (idx)++, \\\n        (key) = (val)->next, \\\n        (val) = (key)->next)\n\n\n\n/*==============================================================================\n * Mutable JSON Object Creation API\n *============================================================================*/\n\n/** Creates and returns a mutable object, returns NULL on error. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj(yyjson_mut_doc *doc);\n\n/**\n Creates and returns a mutable object with keys and values, returns NULL on\n error. The keys and values are not copied. The strings should be a\n null-terminated UTF-8 string.\n \n @warning The input string is not copied, you should keep this string\n    unmodified for the lifetime of this JSON document.\n \n @par Example\n @code\n    const char *keys[2] = { \"id\", \"name\" };\n    const char *vals[2] = { \"01\", \"Harry\" };\n    yyjson_mut_val *obj = yyjson_mut_obj_with_str(doc, keys, vals, 2);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_str(yyjson_mut_doc *doc,\n                                                          const char **keys,\n                                                          const char **vals,\n                                                          size_t count);\n\n/**\n Creates and returns a mutable object with key-value pairs and pair count,\n returns NULL on error. The keys and values are not copied. The strings should\n be a null-terminated UTF-8 string.\n \n @warning The input string is not copied, you should keep this string\n    unmodified for the lifetime of this JSON document.\n \n @par Example\n @code\n    const char *kv_pairs[4] = { \"id\", \"01\", \"name\", \"Harry\" };\n    yyjson_mut_val *obj = yyjson_mut_obj_with_kv(doc, kv_pairs, 2);\n @endcode\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_kv(yyjson_mut_doc *doc,\n                                                         const char **kv_pairs,\n                                                         size_t pair_count);\n\n\n\n/*==============================================================================\n * Mutable JSON Object Modification API\n *============================================================================*/\n\n/**\n Adds a key-value pair at the end of the object.\n This function allows duplicated key in one object.\n @param obj The object to which the new key-value pair is to be added.\n @param key The key, should be a string which is created by `yyjson_mut_str()`,\n    `yyjson_mut_strn()`, `yyjson_mut_strcpy()` or `yyjson_mut_strncpy()`.\n @param val The value to add to the object.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_obj_add(yyjson_mut_val *obj,\n                                          yyjson_mut_val *key,\n                                          yyjson_mut_val *val);\n/**\n Sets a key-value pair at the end of the object.\n This function may remove all key-value pairs for the given key before add.\n @param obj The object to which the new key-value pair is to be added.\n @param key The key, should be a string which is created by `yyjson_mut_str()`,\n    `yyjson_mut_strn()`, `yyjson_mut_strcpy()` or `yyjson_mut_strncpy()`.\n @param val The value to add to the object. If this value is null, the behavior\n    is same as `yyjson_mut_obj_remove()`.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_obj_put(yyjson_mut_val *obj,\n                                          yyjson_mut_val *key,\n                                          yyjson_mut_val *val);\n\n/**\n Inserts a key-value pair to the object at the given position.\n This function allows duplicated key in one object.\n @param obj The object to which the new key-value pair is to be added.\n @param key The key, should be a string which is created by `yyjson_mut_str()`,\n    `yyjson_mut_strn()`, `yyjson_mut_strcpy()` or `yyjson_mut_strncpy()`.\n @param val The value to add to the object.\n @param idx The index to which to insert the new pair.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_obj_insert(yyjson_mut_val *obj,\n                                             yyjson_mut_val *key,\n                                             yyjson_mut_val *val,\n                                             size_t idx);\n\n/**\n Removes all key-value pair from the object with given key.\n @param obj The object from which the key-value pair is to be removed.\n @param key The key, should be a string value.\n @return The first matched value, or NULL if no matched value.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove(yyjson_mut_val *obj,\n                                                        yyjson_mut_val *key);\n\n/**\n Removes all key-value pair from the object with given key.\n @param obj The object from which the key-value pair is to be removed.\n @param key The key, should be a UTF-8 string with null-terminator.\n @return The first matched value, or NULL if no matched value.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_key(\n    yyjson_mut_val *obj, const char *key);\n\n/**\n Removes all key-value pair from the object with given key.\n @param obj The object from which the key-value pair is to be removed.\n @param key The key, should be a UTF-8 string, null-terminator is not required.\n @param key_len The length of the key.\n @return The first matched value, or NULL if no matched value.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_keyn(\n    yyjson_mut_val *obj, const char *key, size_t key_len);\n\n/**\n Removes all key-value pairs in this object.\n @param obj The object from which all of the values are to be removed.\n @return Whether successful.\n */\nyyjson_api_inline bool yyjson_mut_obj_clear(yyjson_mut_val *obj);\n\n/**\n Replaces value from the object with given key.\n If the key is not exist, or the value is NULL, it will fail.\n @param obj The object to which the value is to be replaced.\n @param key The key, should be a string value.\n @param val The value to replace into the object.\n @return Whether successful.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_obj_replace(yyjson_mut_val *obj,\n                                              yyjson_mut_val *key,\n                                              yyjson_mut_val *val);\n\n/**\n Rotates key-value pairs in the object for the given number of times.\n For example: `{\"a\":1,\"b\":2,\"c\":3,\"d\":4}` rotate 1 is\n `{\"b\":2,\"c\":3,\"d\":4,\"a\":1}`.\n @param obj The object to be rotated.\n @param idx Index (or times) to rotate.\n @return Whether successful.\n @warning This function takes a linear search time.\n */\nyyjson_api_inline bool yyjson_mut_obj_rotate(yyjson_mut_val *obj,\n                                             size_t idx);\n\n\n\n/*==============================================================================\n * Mutable JSON Object Modification Convenience API\n *============================================================================*/\n\n/** Adds a `null` value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_null(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key);\n\n/** Adds a `true` value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_true(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key);\n\n/** Adds a `false` value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_false(yyjson_mut_doc *doc,\n                                                yyjson_mut_val *obj,\n                                                const char *key);\n\n/** Adds a bool value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_bool(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key, bool val);\n\n/** Adds an unsigned integer value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_uint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key, uint64_t val);\n\n/** Adds a signed integer value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_sint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key, int64_t val);\n\n/** Adds an int value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_int(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *key, int64_t val);\n\n/** Adds a double value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_real(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key, double val);\n\n/** Adds a string value at the end of the object.\n    The `key` and `val` should be null-terminated UTF-8 strings.\n    This function allows duplicated key in one object.\n    \n    @warning The key/value string are not copied, you should keep these strings\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_str(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *key, const char *val);\n\n/** Adds a string value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    The `val` should be a UTF-8 string, null-terminator is not required.\n    The `len` should be the length of the `val`, in bytes.\n    This function allows duplicated key in one object.\n    \n    @warning The key/value string are not copied, you should keep these strings\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_strn(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *key,\n                                               const char *val, size_t len);\n\n/** Adds a string value at the end of the object.\n    The `key` and `val` should be null-terminated UTF-8 strings.\n    The value string is copied.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_strcpy(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *obj,\n                                                 const char *key,\n                                                 const char *val);\n\n/** Adds a string value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    The `val` should be a UTF-8 string, null-terminator is not required.\n    The `len` should be the length of the `val`, in bytes.\n    This function allows duplicated key in one object.\n    \n    @warning The key/value string are not copied, you should keep these strings\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_strncpy(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *obj,\n                                                  const char *key,\n                                                  const char *val, size_t len);\n\n/** Adds a JSON value at the end of the object.\n    The `key` should be a null-terminated UTF-8 string.\n    This function allows duplicated key in one object.\n    \n    @warning The key string are not copied, you should keep the string\n        unmodified for the lifetime of this JSON document. */\nyyjson_api_inline bool yyjson_mut_obj_add_val(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *key,\n                                              yyjson_mut_val *val);\n\n/** Removes all key-value pairs for the given key.\n    Returns the first value to which the specified key is mapped or NULL if this\n    object contains no mapping for the key.\n    The `key` should be a null-terminated UTF-8 string.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_str(\n    yyjson_mut_val *obj, const char *key);\n\n/** Removes all key-value pairs for the given key.\n    Returns the first value to which the specified key is mapped or NULL if this\n    object contains no mapping for the key.\n    The `key` should be a UTF-8 string, null-terminator is not required.\n    The `len` should be the length of the key, in bytes.\n    \n    @warning This function takes a linear search time. */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_strn(\n    yyjson_mut_val *obj, const char *key, size_t len);\n\n/** Replaces all matching keys with the new key.\n    Returns true if at least one key was renamed.\n    The `key` and `new_key` should be a null-terminated UTF-8 string.\n    The `new_key` is copied and held by doc.\n    \n    @warning This function takes a linear search time.\n    If `new_key` already exists, it will cause duplicate keys.\n */\nyyjson_api_inline bool yyjson_mut_obj_rename_key(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *obj,\n                                                 const char *key,\n                                                 const char *new_key);\n\n/** Replaces all matching keys with the new key.\n    Returns true if at least one key was renamed.\n    The `key` and `new_key` should be a UTF-8 string,\n    null-terminator is not required. The `new_key` is copied and held by doc.\n    \n    @warning This function takes a linear search time.\n    If `new_key` already exists, it will cause duplicate keys.\n */\nyyjson_api_inline bool yyjson_mut_obj_rename_keyn(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *obj,\n                                                  const char *key,\n                                                  size_t len,\n                                                  const char *new_key,\n                                                  size_t new_len);\n\n\n\n/*==============================================================================\n * JSON Pointer API (RFC 6901)\n * https://tools.ietf.org/html/rfc6901\n *============================================================================*/\n\n/** JSON Pointer error code. */\ntypedef uint32_t yyjson_ptr_code;\n\n/** No JSON pointer error. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_NONE = 0;\n\n/** Invalid input parameter, such as NULL input. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_PARAMETER = 1;\n\n/** JSON pointer syntax error, such as invalid escape, token no prefix. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_SYNTAX = 2;\n\n/** JSON pointer resolve failed, such as index out of range, key not found. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_RESOLVE = 3;\n\n/** Document's root is NULL, but it is required for the function call. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_NULL_ROOT = 4;\n\n/** Cannot set root as the target is not a document. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_SET_ROOT = 5;\n\n/** The memory allocation failed and a new value could not be created. */\nstatic const yyjson_ptr_code YYJSON_PTR_ERR_MEMORY_ALLOCATION = 6;\n\n/** Error information for JSON pointer. */\ntypedef struct yyjson_ptr_err {\n    /** Error code, see `yyjson_ptr_code` for all possible values. */\n    yyjson_ptr_code code;\n    /** Error message, constant, no need to free (NULL if no error). */\n    const char *msg;\n    /** Error byte position for input JSON pointer (0 if no error). */\n    size_t pos;\n} yyjson_ptr_err;\n\n/**\n A context for JSON pointer operation.\n \n This struct stores the context of JSON Pointer operation result. The struct\n can be used with three helper functions: `ctx_append()`, `ctx_replace()`, and\n `ctx_remove()`, which perform the corresponding operations on the container\n without re-parsing the JSON Pointer.\n \n For example:\n @code\n    // doc before: {\"a\":[0,1,null]}\n    // ptr: \"/a/2\"\n    val = yyjson_mut_doc_ptr_getx(doc, ptr, strlen(ptr), &ctx, &err);\n    if (yyjson_is_null(val)) {\n        yyjson_ptr_ctx_remove(&ctx);\n    }\n    // doc after: {\"a\":[0,1]}\n @endcode\n */\ntypedef struct yyjson_ptr_ctx {\n    /**\n     The container (parent) of the target value. It can be either an array or\n     an object. If the target location has no value, but all its parent\n     containers exist, and the target location can be used to insert a new\n     value, then `ctn` is the parent container of the target location.\n     Otherwise, `ctn` is NULL.\n     */\n    yyjson_mut_val *ctn;\n    /**\n     The previous sibling of the target value. It can be either a value in an\n     array or a key in an object. As the container is a `circular linked list`\n     of elements, `pre` is the previous node of the target value. If the\n     operation is `add` or `set`, then `pre` is the previous node of the new\n     value, not the original target value. If the target value does not exist,\n     `pre` is NULL.\n     */\n    yyjson_mut_val *pre;\n    /**\n     The removed value if the operation is `set`, `replace` or `remove`. It can\n     be used to restore the original state of the document if needed.\n     */\n    yyjson_mut_val *old;\n} yyjson_ptr_ctx;\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_get(yyjson_doc *doc,\n                                                 const char *ptr);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_getn(yyjson_doc *doc,\n                                                  const char *ptr, size_t len);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_getx(yyjson_doc *doc,\n                                                  const char *ptr, size_t len,\n                                                  yyjson_ptr_err *err);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_ptr_get(yyjson_val *val,\n                                             const char *ptr);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_ptr_getn(yyjson_val *val,\n                                              const char *ptr, size_t len);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_val *yyjson_ptr_getx(yyjson_val *val,\n                                              const char *ptr, size_t len,\n                                              yyjson_ptr_err *err);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_get(yyjson_mut_doc *doc,\n                                                         const char *ptr);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getn(yyjson_mut_doc *doc,\n                                                          const char *ptr,\n                                                          size_t len);\n\n/**\n Get value by a JSON Pointer.\n @param doc The JSON document to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The value referenced by the JSON pointer.\n    NULL if `doc` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getx(yyjson_mut_doc *doc,\n                                                          const char *ptr,\n                                                          size_t len,\n                                                          yyjson_ptr_ctx *ctx,\n                                                          yyjson_ptr_err *err);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_get(yyjson_mut_val *val,\n                                                     const char *ptr);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getn(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len);\n\n/**\n Get value by a JSON Pointer.\n @param val The JSON value to be queried.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The value referenced by the JSON pointer.\n    NULL if `val` or `ptr` is NULL, or the JSON pointer cannot be resolved.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getx(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len,\n                                                      yyjson_ptr_ctx *ctx,\n                                                      yyjson_ptr_err *err);\n\n/**\n Add (insert) value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The value to be added.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n @note The parent nodes will be created if they do not exist.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_add(yyjson_mut_doc *doc,\n                                              const char *ptr,\n                                              yyjson_mut_val *new_val);\n\n/**\n Add (insert) value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be added.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n @note The parent nodes will be created if they do not exist.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_addn(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val);\n\n/**\n Add (insert) value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be added.\n @param create_parent Whether to create parent nodes if not exist.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_addx(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val,\n                                               bool create_parent,\n                                               yyjson_ptr_ctx *ctx,\n                                               yyjson_ptr_err *err);\n\n/**\n Add (insert) value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param doc Only used to create new values when needed.\n @param new_val The value to be added.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n @note The parent nodes will be created if they do not exist.\n */\nyyjson_api_inline bool yyjson_mut_ptr_add(yyjson_mut_val *val,\n                                          const char *ptr,\n                                          yyjson_mut_val *new_val,\n                                          yyjson_mut_doc *doc);\n\n/**\n Add (insert) value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param doc Only used to create new values when needed.\n @param new_val The value to be added.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n @note The parent nodes will be created if they do not exist.\n */\nyyjson_api_inline bool yyjson_mut_ptr_addn(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc);\n\n/**\n Add (insert) value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param doc Only used to create new values when needed.\n @param new_val The value to be added.\n @param create_parent Whether to create parent nodes if not exist.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return true if JSON pointer is valid and new value is added, false otherwise.\n */\nyyjson_api_inline bool yyjson_mut_ptr_addx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err);\n\n/**\n Set value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The value to be set, pass NULL to remove.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note The parent nodes will be created if they do not exist.\n    If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_set(yyjson_mut_doc *doc,\n                                              const char *ptr,\n                                              yyjson_mut_val *new_val);\n\n/**\n Set value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be set, pass NULL to remove.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note The parent nodes will be created if they do not exist.\n    If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_setn(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val);\n\n/**\n Set value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be set, pass NULL to remove.\n @param create_parent Whether to create parent nodes if not exist.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_doc_ptr_setx(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val,\n                                               bool create_parent,\n                                               yyjson_ptr_ctx *ctx,\n                                               yyjson_ptr_err *err);\n\n/**\n Set value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The value to be set, pass NULL to remove.\n @param doc Only used to create new values when needed.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note The parent nodes will be created if they do not exist.\n    If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_ptr_set(yyjson_mut_val *val,\n                                          const char *ptr,\n                                          yyjson_mut_val *new_val,\n                                          yyjson_mut_doc *doc);\n\n/**\n Set value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be set, pass NULL to remove.\n @param doc Only used to create new values when needed.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note The parent nodes will be created if they do not exist.\n    If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_ptr_setn(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc);\n\n/**\n Set value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The value to be set, pass NULL to remove.\n @param doc Only used to create new values when needed.\n @param create_parent Whether to create parent nodes if not exist.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return true if JSON pointer is valid and new value is set, false otherwise.\n @note If the target value already exists, it will be replaced by the new value.\n */\nyyjson_api_inline bool yyjson_mut_ptr_setx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err);\n\n/**\n Replace value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The new value to replace the old one.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replace(\n    yyjson_mut_doc *doc, const char *ptr, yyjson_mut_val *new_val);\n\n/**\n Replace value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The new value to replace the old one.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacen(\n    yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val);\n\n/**\n Replace value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The new value to replace the old one.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacex(\n    yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err);\n\n/**\n Replace value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @param new_val The new value to replace the old one.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replace(\n    yyjson_mut_val *val, const char *ptr, yyjson_mut_val *new_val);\n\n/**\n Replace value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The new value to replace the old one.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacen(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val);\n\n/**\n Replace value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param new_val The new value to replace the old one.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The old value that was replaced, or NULL if not found.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacex(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err);\n\n/**\n Remove value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_remove(\n    yyjson_mut_doc *doc, const char *ptr);\n\n/**\n Remove value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removen(\n    yyjson_mut_doc *doc, const char *ptr, size_t len);\n\n/**\n Remove value by a JSON pointer.\n @param doc The target JSON document.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removex(\n    yyjson_mut_doc *doc, const char *ptr, size_t len,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err);\n\n/**\n Remove value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8 with null-terminator).\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_remove(yyjson_mut_val *val,\n                                                        const char *ptr);\n\n/**\n Remove value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removen(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len);\n\n/**\n Remove value by a JSON pointer.\n @param val The target JSON value.\n @param ptr The JSON pointer string (UTF-8, null-terminator is not required).\n @param len The length of `ptr` in bytes.\n @param ctx A pointer to store the result context, or NULL if not needed.\n @param err A pointer to store the error information, or NULL if not needed.\n @return The removed value, or NULL on error.\n */\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removex(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len,\n                                                         yyjson_ptr_ctx *ctx,\n                                                         yyjson_ptr_err *err);\n\n/**\n Append value by JSON pointer context.\n @param ctx The context from the `yyjson_mut_ptr_xxx()` calls.\n @param key New key if `ctx->ctn` is object, or NULL if `ctx->ctn` is array.\n @param val New value to be added.\n @return true on success or false on fail.\n */\nyyjson_api_inline bool yyjson_ptr_ctx_append(yyjson_ptr_ctx *ctx,\n                                             yyjson_mut_val *key,\n                                             yyjson_mut_val *val);\n\n/**\n Replace value by JSON pointer context.\n @param ctx The context from the `yyjson_mut_ptr_xxx()` calls.\n @param val New value to be replaced.\n @return true on success or false on fail.\n @note If success, the old value will be returned via `ctx->old`.\n */\nyyjson_api_inline bool yyjson_ptr_ctx_replace(yyjson_ptr_ctx *ctx,\n                                              yyjson_mut_val *val);\n\n/**\n Remove value by JSON pointer context.\n @param ctx The context from the `yyjson_mut_ptr_xxx()` calls.\n @return true on success or false on fail.\n @note If success, the old value will be returned via `ctx->old`.\n */\nyyjson_api_inline bool yyjson_ptr_ctx_remove(yyjson_ptr_ctx *ctx);\n\n\n\n/*==============================================================================\n * JSON Patch API (RFC 6902)\n * https://tools.ietf.org/html/rfc6902\n *============================================================================*/\n\n/** Result code for JSON patch. */\ntypedef uint32_t yyjson_patch_code;\n\n/** Success, no error. */\nstatic const yyjson_patch_code YYJSON_PATCH_SUCCESS = 0;\n\n/** Invalid parameter, such as NULL input or non-array patch. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_PARAMETER = 1;\n\n/** Memory allocation failure occurs. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_MEMORY_ALLOCATION = 2;\n\n/** JSON patch operation is not object type. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_OPERATION = 3;\n\n/** JSON patch operation is missing a required key. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_MISSING_KEY = 4;\n\n/** JSON patch operation member is invalid. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_MEMBER = 5;\n\n/** JSON patch operation `test` not equal. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_EQUAL = 6;\n\n/** JSON patch operation failed on JSON pointer. */\nstatic const yyjson_patch_code YYJSON_PATCH_ERROR_POINTER = 7;\n\n/** Error information for JSON patch. */\ntypedef struct yyjson_patch_err {\n    /** Error code, see `yyjson_patch_code` for all possible values. */\n    yyjson_patch_code code;\n    /** Index of the error operation (0 if no error). */\n    size_t idx;\n    /** Error message, constant, no need to free (NULL if no error). */\n    const char *msg;\n    /** JSON pointer error if `code == YYJSON_PATCH_ERROR_POINTER`. */\n    yyjson_ptr_err ptr;\n} yyjson_patch_err;\n\n/**\n Creates and returns a patched JSON value (RFC 6902).\n The memory of the returned value is allocated by the `doc`.\n The `err` is used to receive error information, pass NULL if not needed.\n Returns NULL if the patch could not be applied.\n */\nyyjson_api yyjson_mut_val *yyjson_patch(yyjson_mut_doc *doc,\n                                        yyjson_val *orig,\n                                        yyjson_val *patch,\n                                        yyjson_patch_err *err);\n\n/**\n Creates and returns a patched JSON value (RFC 6902).\n The memory of the returned value is allocated by the `doc`.\n The `err` is used to receive error information, pass NULL if not needed.\n Returns NULL if the patch could not be applied.\n */\nyyjson_api yyjson_mut_val *yyjson_mut_patch(yyjson_mut_doc *doc,\n                                            yyjson_mut_val *orig,\n                                            yyjson_mut_val *patch,\n                                            yyjson_patch_err *err);\n\n\n\n/*==============================================================================\n * JSON Merge-Patch API (RFC 7386)\n * https://tools.ietf.org/html/rfc7386\n *============================================================================*/\n\n/**\n Creates and returns a merge-patched JSON value (RFC 7386).\n The memory of the returned value is allocated by the `doc`.\n Returns NULL if the patch could not be applied.\n\n @warning This function is recursive and may cause a stack overflow if the\n    object level is too deep.\n */\nyyjson_api yyjson_mut_val *yyjson_merge_patch(yyjson_mut_doc *doc,\n                                              yyjson_val *orig,\n                                              yyjson_val *patch);\n\n/**\n Creates and returns a merge-patched JSON value (RFC 7386).\n The memory of the returned value is allocated by the `doc`.\n Returns NULL if the patch could not be applied.\n\n @warning This function is recursive and may cause a stack overflow if the\n    object level is too deep.\n */\nyyjson_api yyjson_mut_val *yyjson_mut_merge_patch(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *orig,\n                                                  yyjson_mut_val *patch);\n\n\n\n/*==============================================================================\n * JSON Structure (Implementation)\n *============================================================================*/\n\n/** Payload of a JSON value (8 bytes). */\ntypedef union yyjson_val_uni {\n    uint64_t    u64;\n    int64_t     i64;\n    double      f64;\n    const char *str;\n    void       *ptr;\n    size_t      ofs;\n} yyjson_val_uni;\n\n/**\n Immutable JSON value, 16 bytes.\n */\nstruct yyjson_val {\n    uint64_t tag; /**< type, subtype and length */\n    yyjson_val_uni uni; /**< payload */\n};\n\nstruct yyjson_doc {\n    /** Root value of the document (nonnull). */\n    yyjson_val *root;\n    /** Allocator used by document (nonnull). */\n    yyjson_alc alc;\n    /** The total number of bytes read when parsing JSON (nonzero). */\n    size_t dat_read;\n    /** The total number of value read when parsing JSON (nonzero). */\n    size_t val_read;\n    /** The string pool used by JSON values (nullable). */\n    char *str_pool;\n};\n\n\n\n/*==============================================================================\n * Unsafe JSON Value API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_type unsafe_yyjson_get_type(void *val) {\n    uint8_t tag = (uint8_t)((yyjson_val *)val)->tag;\n    return (yyjson_type)(tag & YYJSON_TYPE_MASK);\n}\n\nyyjson_api_inline yyjson_subtype unsafe_yyjson_get_subtype(void *val) {\n    uint8_t tag = (uint8_t)((yyjson_val *)val)->tag;\n    return (yyjson_subtype)(tag & YYJSON_SUBTYPE_MASK);\n}\n\nyyjson_api_inline uint8_t unsafe_yyjson_get_tag(void *val) {\n    uint8_t tag = (uint8_t)((yyjson_val *)val)->tag;\n    return (uint8_t)(tag & YYJSON_TAG_MASK);\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_raw(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_RAW;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_null(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_NULL;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_bool(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_BOOL;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_num(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_NUM;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_str(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_STR;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_arr(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_ARR;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_obj(void *val) {\n    return unsafe_yyjson_get_type(val) == YYJSON_TYPE_OBJ;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_ctn(void *val) {\n    uint8_t mask = YYJSON_TYPE_ARR & YYJSON_TYPE_OBJ;\n    return (unsafe_yyjson_get_tag(val) & mask) == mask;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_uint(void *val) {\n    const uint8_t patt = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_sint(void *val) {\n    const uint8_t patt = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_int(void *val) {\n    const uint8_t mask = YYJSON_TAG_MASK & (~YYJSON_SUBTYPE_SINT);\n    const uint8_t patt = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n    return (unsafe_yyjson_get_tag(val) & mask) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_real(void *val) {\n    const uint8_t patt = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_true(void *val) {\n    const uint8_t patt = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_is_false(void *val) {\n    const uint8_t patt = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE;\n    return unsafe_yyjson_get_tag(val) == patt;\n}\n\nyyjson_api_inline bool unsafe_yyjson_arr_is_flat(yyjson_val *val) {\n    size_t ofs = val->uni.ofs;\n    size_t len = (size_t)(val->tag >> YYJSON_TAG_BIT);\n    return len * sizeof(yyjson_val) + sizeof(yyjson_val) == ofs;\n}\n\nyyjson_api_inline const char *unsafe_yyjson_get_raw(void *val) {\n    return ((yyjson_val *)val)->uni.str;\n}\n\nyyjson_api_inline bool unsafe_yyjson_get_bool(void *val) {\n    uint8_t tag = unsafe_yyjson_get_tag(val);\n    return (bool)((tag & YYJSON_SUBTYPE_MASK) >> YYJSON_TYPE_BIT);\n}\n\nyyjson_api_inline uint64_t unsafe_yyjson_get_uint(void *val) {\n    return ((yyjson_val *)val)->uni.u64;\n}\n\nyyjson_api_inline int64_t unsafe_yyjson_get_sint(void *val) {\n    return ((yyjson_val *)val)->uni.i64;\n}\n\nyyjson_api_inline int unsafe_yyjson_get_int(void *val) {\n    return (int)((yyjson_val *)val)->uni.i64;\n}\n\nyyjson_api_inline double unsafe_yyjson_get_real(void *val) {\n    return ((yyjson_val *)val)->uni.f64;\n}\n\nyyjson_api_inline double unsafe_yyjson_get_num(void *val) {\n    uint8_t tag = unsafe_yyjson_get_tag(val);\n    if (tag == (YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL)) {\n        return ((yyjson_val *)val)->uni.f64;\n    } else if (tag == (YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT)) {\n        return (double)((yyjson_val *)val)->uni.i64;\n    } else if (tag == (YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT)) {\n#if YYJSON_U64_TO_F64_NO_IMPL\n        uint64_t msb = ((uint64_t)1) << 63;\n        uint64_t num = ((yyjson_val *)val)->uni.u64;\n        if ((num & msb) == 0) {\n            return (double)(int64_t)num;\n        } else {\n            return ((double)(int64_t)((num >> 1) | (num & 1))) * (double)2.0;\n        }\n#else\n        return (double)((yyjson_val *)val)->uni.u64;\n#endif\n    }\n    return 0.0;\n}\n\nyyjson_api_inline const char *unsafe_yyjson_get_str(void *val) {\n    return ((yyjson_val *)val)->uni.str;\n}\n\nyyjson_api_inline size_t unsafe_yyjson_get_len(void *val) {\n    return (size_t)(((yyjson_val *)val)->tag >> YYJSON_TAG_BIT);\n}\n\nyyjson_api_inline yyjson_val *unsafe_yyjson_get_first(yyjson_val *ctn) {\n    return ctn + 1;\n}\n\nyyjson_api_inline yyjson_val *unsafe_yyjson_get_next(yyjson_val *val) {\n    bool is_ctn = unsafe_yyjson_is_ctn(val);\n    size_t ctn_ofs = val->uni.ofs;\n    size_t ofs = (is_ctn ? ctn_ofs : sizeof(yyjson_val));\n    return (yyjson_val *)(void *)((uint8_t *)val + ofs);\n}\n\nyyjson_api_inline bool unsafe_yyjson_equals_strn(void *val, const char *str,\n                                                 size_t len) {\n    uint64_t tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    return ((yyjson_val *)val)->tag == tag &&\n    memcmp(((yyjson_val *)val)->uni.str, str, len) == 0;\n}\n\nyyjson_api_inline bool unsafe_yyjson_equals_str(void *val, const char *str) {\n    return unsafe_yyjson_equals_strn(val, str, strlen(str));\n}\n\nyyjson_api_inline void unsafe_yyjson_set_type(void *val, yyjson_type type,\n                                              yyjson_subtype subtype) {\n    uint8_t tag = (type | subtype);\n    uint64_t new_tag = ((yyjson_val *)val)->tag;\n    new_tag = (new_tag & (~(uint64_t)YYJSON_TAG_MASK)) | (uint64_t)tag;\n    ((yyjson_val *)val)->tag = new_tag;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_len(void *val, size_t len) {\n    uint64_t tag = ((yyjson_val *)val)->tag & YYJSON_TAG_MASK;\n    tag |= (uint64_t)len << YYJSON_TAG_BIT;\n    ((yyjson_val *)val)->tag = tag;\n}\n\nyyjson_api_inline void unsafe_yyjson_inc_len(void *val) {\n    uint64_t tag = ((yyjson_val *)val)->tag;\n    tag += (uint64_t)(1 << YYJSON_TAG_BIT);\n    ((yyjson_val *)val)->tag = tag;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_raw(void *val, const char *raw,\n                                             size_t len) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_RAW, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, len);\n    ((yyjson_val *)val)->uni.str = raw;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_null(void *val) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_NULL, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, 0);\n}\n\nyyjson_api_inline void unsafe_yyjson_set_bool(void *val, bool num) {\n    yyjson_subtype subtype = num ? YYJSON_SUBTYPE_TRUE : YYJSON_SUBTYPE_FALSE;\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_BOOL, subtype);\n    unsafe_yyjson_set_len(val, 0);\n}\n\nyyjson_api_inline void unsafe_yyjson_set_uint(void *val, uint64_t num) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_NUM, YYJSON_SUBTYPE_UINT);\n    unsafe_yyjson_set_len(val, 0);\n    ((yyjson_val *)val)->uni.u64 = num;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_sint(void *val, int64_t num) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_NUM, YYJSON_SUBTYPE_SINT);\n    unsafe_yyjson_set_len(val, 0);\n    ((yyjson_val *)val)->uni.i64 = num;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_real(void *val, double num) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_NUM, YYJSON_SUBTYPE_REAL);\n    unsafe_yyjson_set_len(val, 0);\n    ((yyjson_val *)val)->uni.f64 = num;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_str(void *val, const char *str) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_STR, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, strlen(str));\n    ((yyjson_val *)val)->uni.str = str;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_strn(void *val, const char *str,\n                                              size_t len) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_STR, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, len);\n    ((yyjson_val *)val)->uni.str = str;\n}\n\nyyjson_api_inline void unsafe_yyjson_set_arr(void *val, size_t size) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_ARR, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, size);\n}\n\nyyjson_api_inline void unsafe_yyjson_set_obj(void *val, size_t size) {\n    unsafe_yyjson_set_type(val, YYJSON_TYPE_OBJ, YYJSON_SUBTYPE_NONE);\n    unsafe_yyjson_set_len(val, size);\n}\n\n\n\n/*==============================================================================\n * JSON Document API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_val *yyjson_doc_get_root(yyjson_doc *doc) {\n    return doc ? doc->root : NULL;\n}\n\nyyjson_api_inline size_t yyjson_doc_get_read_size(yyjson_doc *doc) {\n    return doc ? doc->dat_read : 0;\n}\n\nyyjson_api_inline size_t yyjson_doc_get_val_count(yyjson_doc *doc) {\n    return doc ? doc->val_read : 0;\n}\n\nyyjson_api_inline void yyjson_doc_free(yyjson_doc *doc) {\n    if (doc) {\n        yyjson_alc alc = doc->alc;\n        if (doc->str_pool) alc.free(alc.ctx, doc->str_pool);\n        alc.free(alc.ctx, doc);\n    }\n}\n\n\n\n/*==============================================================================\n * JSON Value Type API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_is_raw(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_raw(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_null(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_null(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_true(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_true(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_false(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_false(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_bool(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_bool(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_uint(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_uint(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_sint(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_sint(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_int(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_int(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_real(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_real(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_num(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_num(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_str(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_str(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_arr(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_arr(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_obj(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_obj(val) : false;\n}\n\nyyjson_api_inline bool yyjson_is_ctn(yyjson_val *val) {\n    return val ? unsafe_yyjson_is_ctn(val) : false;\n}\n\n\n\n/*==============================================================================\n * JSON Value Content API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_type yyjson_get_type(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_type(val) : YYJSON_TYPE_NONE;\n}\n\nyyjson_api_inline yyjson_subtype yyjson_get_subtype(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_subtype(val) : YYJSON_SUBTYPE_NONE;\n}\n\nyyjson_api_inline uint8_t yyjson_get_tag(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_tag(val) : 0;\n}\n\nyyjson_api_inline const char *yyjson_get_type_desc(yyjson_val *val) {\n    switch (yyjson_get_tag(val)) {\n        case YYJSON_TYPE_RAW  | YYJSON_SUBTYPE_NONE:  return \"raw\";\n        case YYJSON_TYPE_NULL | YYJSON_SUBTYPE_NONE:  return \"null\";\n        case YYJSON_TYPE_STR  | YYJSON_SUBTYPE_NONE:  return \"string\";\n        case YYJSON_TYPE_ARR  | YYJSON_SUBTYPE_NONE:  return \"array\";\n        case YYJSON_TYPE_OBJ  | YYJSON_SUBTYPE_NONE:  return \"object\";\n        case YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE:  return \"true\";\n        case YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE: return \"false\";\n        case YYJSON_TYPE_NUM  | YYJSON_SUBTYPE_UINT:  return \"uint\";\n        case YYJSON_TYPE_NUM  | YYJSON_SUBTYPE_SINT:  return \"sint\";\n        case YYJSON_TYPE_NUM  | YYJSON_SUBTYPE_REAL:  return \"real\";\n        default:                                      return \"unknown\";\n    }\n}\n\nyyjson_api_inline const char *yyjson_get_raw(yyjson_val *val) {\n    return yyjson_is_raw(val) ? unsafe_yyjson_get_raw(val) : NULL;\n}\n\nyyjson_api_inline bool yyjson_get_bool(yyjson_val *val) {\n    return yyjson_is_bool(val) ? unsafe_yyjson_get_bool(val) : false;\n}\n\nyyjson_api_inline uint64_t yyjson_get_uint(yyjson_val *val) {\n    return yyjson_is_int(val) ? unsafe_yyjson_get_uint(val) : 0;\n}\n\nyyjson_api_inline int64_t yyjson_get_sint(yyjson_val *val) {\n    return yyjson_is_int(val) ? unsafe_yyjson_get_sint(val) : 0;\n}\n\nyyjson_api_inline int yyjson_get_int(yyjson_val *val) {\n    return yyjson_is_int(val) ? unsafe_yyjson_get_int(val) : 0;\n}\n\nyyjson_api_inline double yyjson_get_real(yyjson_val *val) {\n    return yyjson_is_real(val) ? unsafe_yyjson_get_real(val) : 0.0;\n}\n\nyyjson_api_inline double yyjson_get_num(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_num(val) : 0.0;\n}\n\nyyjson_api_inline const char *yyjson_get_str(yyjson_val *val) {\n    return yyjson_is_str(val) ? unsafe_yyjson_get_str(val) : NULL;\n}\n\nyyjson_api_inline size_t yyjson_get_len(yyjson_val *val) {\n    return val ? unsafe_yyjson_get_len(val) : 0;\n}\n\nyyjson_api_inline bool yyjson_equals_str(yyjson_val *val, const char *str) {\n    if (yyjson_likely(val && str)) {\n        return unsafe_yyjson_equals_str(val, str);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_equals_strn(yyjson_val *val, const char *str,\n                                          size_t len) {\n    if (yyjson_likely(val && str)) {\n        return unsafe_yyjson_equals_strn(val, str, len);\n    }\n    return false;\n}\n\nyyjson_api bool unsafe_yyjson_equals(yyjson_val *lhs, yyjson_val *rhs);\n\nyyjson_api_inline bool yyjson_equals(yyjson_val *lhs, yyjson_val *rhs) {\n    if (yyjson_unlikely(!lhs || !rhs)) return false;\n    return unsafe_yyjson_equals(lhs, rhs);\n}\n\nyyjson_api_inline bool yyjson_set_raw(yyjson_val *val,\n                                      const char *raw, size_t len) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_raw(val, raw, len);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_null(yyjson_val *val) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_null(val);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_bool(yyjson_val *val, bool num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_bool(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_uint(yyjson_val *val, uint64_t num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_uint(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_sint(yyjson_val *val, int64_t num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_sint(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_int(yyjson_val *val, int num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_sint(val, (int64_t)num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_real(yyjson_val *val, double num) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    unsafe_yyjson_set_real(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_str(yyjson_val *val, const char *str) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    if (yyjson_unlikely(!str)) return false;\n    unsafe_yyjson_set_str(val, str);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_set_strn(yyjson_val *val,\n                                       const char *str, size_t len) {\n    if (yyjson_unlikely(!val || unsafe_yyjson_is_ctn(val))) return false;\n    if (yyjson_unlikely(!str)) return false;\n    unsafe_yyjson_set_strn(val, str, len);\n    return true;\n}\n\n\n\n/*==============================================================================\n * JSON Array API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline size_t yyjson_arr_size(yyjson_val *arr) {\n    return yyjson_is_arr(arr) ? unsafe_yyjson_get_len(arr) : 0;\n}\n\nyyjson_api_inline yyjson_val *yyjson_arr_get(yyjson_val *arr, size_t idx) {\n    if (yyjson_likely(yyjson_is_arr(arr))) {\n        if (yyjson_likely(unsafe_yyjson_get_len(arr) > idx)) {\n            yyjson_val *val = unsafe_yyjson_get_first(arr);\n            if (unsafe_yyjson_arr_is_flat(arr)) {\n                return val + idx;\n            } else {\n                while (idx-- > 0) val = unsafe_yyjson_get_next(val);\n                return val;\n            }\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_val *yyjson_arr_get_first(yyjson_val *arr) {\n    if (yyjson_likely(yyjson_is_arr(arr))) {\n        if (yyjson_likely(unsafe_yyjson_get_len(arr) > 0)) {\n            return unsafe_yyjson_get_first(arr);\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_val *yyjson_arr_get_last(yyjson_val *arr) {\n    if (yyjson_likely(yyjson_is_arr(arr))) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(len > 0)) {\n            yyjson_val *val = unsafe_yyjson_get_first(arr);\n            if (unsafe_yyjson_arr_is_flat(arr)) {\n                return val + (len - 1);\n            } else {\n                while (len-- > 1) val = unsafe_yyjson_get_next(val);\n                return val;\n            }\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * JSON Array Iterator API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_arr_iter_init(yyjson_val *arr,\n                                            yyjson_arr_iter *iter) {\n    if (yyjson_likely(yyjson_is_arr(arr) && iter)) {\n        iter->idx = 0;\n        iter->max = unsafe_yyjson_get_len(arr);\n        iter->cur = unsafe_yyjson_get_first(arr);\n        return true;\n    }\n    if (iter) memset(iter, 0, sizeof(yyjson_arr_iter));\n    return false;\n}\n\nyyjson_api_inline yyjson_arr_iter yyjson_arr_iter_with(yyjson_val *arr) {\n    yyjson_arr_iter iter;\n    yyjson_arr_iter_init(arr, &iter);\n    return iter;\n}\n\nyyjson_api_inline bool yyjson_arr_iter_has_next(yyjson_arr_iter *iter) {\n    return iter ? iter->idx < iter->max : false;\n}\n\nyyjson_api_inline yyjson_val *yyjson_arr_iter_next(yyjson_arr_iter *iter) {\n    yyjson_val *val;\n    if (iter && iter->idx < iter->max) {\n        val = iter->cur;\n        iter->cur = unsafe_yyjson_get_next(val);\n        iter->idx++;\n        return val;\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * JSON Object API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline size_t yyjson_obj_size(yyjson_val *obj) {\n    return yyjson_is_obj(obj) ? unsafe_yyjson_get_len(obj) : 0;\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_get(yyjson_val *obj,\n                                             const char *key) {\n    return yyjson_obj_getn(obj, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_getn(yyjson_val *obj,\n                                              const char *_key,\n                                              size_t key_len) {\n    uint64_t tag = (((uint64_t)key_len) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    if (yyjson_likely(yyjson_is_obj(obj) && _key)) {\n        size_t len = unsafe_yyjson_get_len(obj);\n        yyjson_val *key = unsafe_yyjson_get_first(obj);\n        while (len-- > 0) {\n            if (key->tag == tag &&\n                memcmp(key->uni.ptr, _key, key_len) == 0) {\n                return key + 1;\n            }\n            key = unsafe_yyjson_get_next(key + 1);\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * JSON Object Iterator API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_obj_iter_init(yyjson_val *obj,\n                                            yyjson_obj_iter *iter) {\n    if (yyjson_likely(yyjson_is_obj(obj) && iter)) {\n        iter->idx = 0;\n        iter->max = unsafe_yyjson_get_len(obj);\n        iter->cur = unsafe_yyjson_get_first(obj);\n        iter->obj = obj;\n        return true;\n    }\n    if (iter) memset(iter, 0, sizeof(yyjson_obj_iter));\n    return false;\n}\n\nyyjson_api_inline yyjson_obj_iter yyjson_obj_iter_with(yyjson_val *obj) {\n    yyjson_obj_iter iter;\n    yyjson_obj_iter_init(obj, &iter);\n    return iter;\n}\n\nyyjson_api_inline bool yyjson_obj_iter_has_next(yyjson_obj_iter *iter) {\n    return iter ? iter->idx < iter->max : false;\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_iter_next(yyjson_obj_iter *iter) {\n    if (iter && iter->idx < iter->max) {\n        yyjson_val *key = iter->cur;\n        iter->idx++;\n        iter->cur = unsafe_yyjson_get_next(key + 1);\n        return key;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_iter_get_val(yyjson_val *key) {\n    return key ? key + 1 : NULL;\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_iter_get(yyjson_obj_iter *iter,\n                                                  const char *key) {\n    return yyjson_obj_iter_getn(iter, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_val *yyjson_obj_iter_getn(yyjson_obj_iter *iter,\n                                                   const char *key,\n                                                   size_t key_len) {\n    if (iter && key) {\n        size_t idx = iter->idx;\n        size_t max = iter->max;\n        yyjson_val *cur = iter->cur;\n        if (yyjson_unlikely(idx == max)) {\n            idx = 0;\n            cur = unsafe_yyjson_get_first(iter->obj);\n        }\n        while (idx++ < max) {\n            yyjson_val *next = unsafe_yyjson_get_next(cur + 1);\n            if (unsafe_yyjson_get_len(cur) == key_len &&\n                memcmp(cur->uni.str, key, key_len) == 0) {\n                iter->idx = idx;\n                iter->cur = next;\n                return cur + 1;\n            }\n            cur = next;\n            if (idx == iter->max && iter->idx < iter->max) {\n                idx = 0;\n                max = iter->idx;\n                cur = unsafe_yyjson_get_first(iter->obj);\n            }\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Structure (Implementation)\n *============================================================================*/\n\n/**\n Mutable JSON value, 24 bytes.\n The 'tag' and 'uni' field is same as immutable value.\n The 'next' field links all elements inside the container to be a cycle.\n */\nstruct yyjson_mut_val {\n    uint64_t tag; /**< type, subtype and length */\n    yyjson_val_uni uni; /**< payload */\n    yyjson_mut_val *next; /**< the next value in circular linked list */\n};\n\n/**\n A memory chunk in string memory pool.\n */\ntypedef struct yyjson_str_chunk {\n    struct yyjson_str_chunk *next; /* next chunk linked list */\n    size_t chunk_size; /* chunk size in bytes */\n    /* char str[]; flexible array member */\n} yyjson_str_chunk;\n\n/**\n A memory pool to hold all strings in a mutable document.\n */\ntypedef struct yyjson_str_pool {\n    char *cur; /* cursor inside current chunk */\n    char *end; /* the end of current chunk */\n    size_t chunk_size; /* chunk size in bytes while creating new chunk */\n    size_t chunk_size_max; /* maximum chunk size in bytes */\n    yyjson_str_chunk *chunks; /* a linked list of chunks, nullable */\n} yyjson_str_pool;\n\n/**\n A memory chunk in value memory pool.\n `sizeof(yyjson_val_chunk)` should not larger than `sizeof(yyjson_mut_val)`.\n */\ntypedef struct yyjson_val_chunk {\n    struct yyjson_val_chunk *next; /* next chunk linked list */\n    size_t chunk_size; /* chunk size in bytes */\n    /* char pad[sizeof(yyjson_mut_val) - sizeof(yyjson_val_chunk)]; padding */\n    /* yyjson_mut_val vals[]; flexible array member */\n} yyjson_val_chunk;\n\n/**\n A memory pool to hold all values in a mutable document.\n */\ntypedef struct yyjson_val_pool {\n    yyjson_mut_val *cur; /* cursor inside current chunk */\n    yyjson_mut_val *end; /* the end of current chunk */\n    size_t chunk_size; /* chunk size in bytes while creating new chunk */\n    size_t chunk_size_max; /* maximum chunk size in bytes */\n    yyjson_val_chunk *chunks; /* a linked list of chunks, nullable */\n} yyjson_val_pool;\n\nstruct yyjson_mut_doc {\n    yyjson_mut_val *root; /**< root value of the JSON document, nullable */\n    yyjson_alc alc; /**< a valid allocator, nonnull */\n    yyjson_str_pool str_pool; /**< string memory pool */\n    yyjson_val_pool val_pool; /**< value memory pool */\n};\n\n/* Ensures the capacity to at least equal to the specified byte length. */\nyyjson_api bool unsafe_yyjson_str_pool_grow(yyjson_str_pool *pool,\n                                            const yyjson_alc *alc,\n                                            size_t len);\n\n/* Ensures the capacity to at least equal to the specified value count. */\nyyjson_api bool unsafe_yyjson_val_pool_grow(yyjson_val_pool *pool,\n                                            const yyjson_alc *alc,\n                                            size_t count);\n\n/* Allocate memory for string. */\nyyjson_api_inline char *unsafe_yyjson_mut_str_alc(yyjson_mut_doc *doc,\n                                                  size_t len) {\n    char *mem;\n    const yyjson_alc *alc = &doc->alc;\n    yyjson_str_pool *pool = &doc->str_pool;\n    if (yyjson_unlikely((size_t)(pool->end - pool->cur) <= len)) {\n        if (yyjson_unlikely(!unsafe_yyjson_str_pool_grow(pool, alc, len + 1))) {\n            return NULL;\n        }\n    }\n    mem = pool->cur;\n    pool->cur = mem + len + 1;\n    return mem;\n}\n\nyyjson_api_inline char *unsafe_yyjson_mut_strncpy(yyjson_mut_doc *doc,\n                                                  const char *str, size_t len) {\n    char *mem = unsafe_yyjson_mut_str_alc(doc, len);\n    if (yyjson_unlikely(!mem)) return NULL;\n    memcpy((void *)mem, (const void *)str, len);\n    mem[len] = '\\0';\n    return mem;\n}\n\nyyjson_api_inline yyjson_mut_val *unsafe_yyjson_mut_val(yyjson_mut_doc *doc,\n                                                        size_t count) {\n    yyjson_mut_val *val;\n    yyjson_alc *alc = &doc->alc;\n    yyjson_val_pool *pool = &doc->val_pool;\n    if (yyjson_unlikely((size_t)(pool->end - pool->cur) < count)) {\n        if (yyjson_unlikely(!unsafe_yyjson_val_pool_grow(pool, alc, count))) {\n            return NULL;\n        }\n    }\n    val = pool->cur;\n    pool->cur += count;\n    return val;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Document API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_root(yyjson_mut_doc *doc) {\n    return doc ? doc->root : NULL;\n}\n\nyyjson_api_inline void yyjson_mut_doc_set_root(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *root) {\n    if (doc) doc->root = root;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Value Type API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_is_raw(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_raw(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_null(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_null(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_true(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_true(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_false(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_false(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_bool(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_bool(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_uint(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_uint(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_sint(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_sint(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_int(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_int(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_real(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_real(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_num(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_num(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_str(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_str(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_arr(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_arr(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_obj(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_obj(val) : false;\n}\n\nyyjson_api_inline bool yyjson_mut_is_ctn(yyjson_mut_val *val) {\n    return val ? unsafe_yyjson_is_ctn(val) : false;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Value Content API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_type yyjson_mut_get_type(yyjson_mut_val *val) {\n    return yyjson_get_type((yyjson_val *)val);\n}\n\nyyjson_api_inline yyjson_subtype yyjson_mut_get_subtype(yyjson_mut_val *val) {\n    return yyjson_get_subtype((yyjson_val *)val);\n}\n\nyyjson_api_inline uint8_t yyjson_mut_get_tag(yyjson_mut_val *val) {\n    return yyjson_get_tag((yyjson_val *)val);\n}\n\nyyjson_api_inline const char *yyjson_mut_get_type_desc(yyjson_mut_val *val) {\n    return yyjson_get_type_desc((yyjson_val *)val);\n}\n\nyyjson_api_inline const char *yyjson_mut_get_raw(yyjson_mut_val *val) {\n    return yyjson_get_raw((yyjson_val *)val);\n}\n\nyyjson_api_inline bool yyjson_mut_get_bool(yyjson_mut_val *val) {\n    return yyjson_get_bool((yyjson_val *)val);\n}\n\nyyjson_api_inline uint64_t yyjson_mut_get_uint(yyjson_mut_val *val) {\n    return yyjson_get_uint((yyjson_val *)val);\n}\n\nyyjson_api_inline int64_t yyjson_mut_get_sint(yyjson_mut_val *val) {\n    return yyjson_get_sint((yyjson_val *)val);\n}\n\nyyjson_api_inline int yyjson_mut_get_int(yyjson_mut_val *val) {\n    return yyjson_get_int((yyjson_val *)val);\n}\n\nyyjson_api_inline double yyjson_mut_get_real(yyjson_mut_val *val) {\n    return yyjson_get_real((yyjson_val *)val);\n}\n\nyyjson_api_inline double yyjson_mut_get_num(yyjson_mut_val *val) {\n    return yyjson_get_num((yyjson_val *)val);\n}\n\nyyjson_api_inline const char *yyjson_mut_get_str(yyjson_mut_val *val) {\n    return yyjson_get_str((yyjson_val *)val);\n}\n\nyyjson_api_inline size_t yyjson_mut_get_len(yyjson_mut_val *val) {\n    return yyjson_get_len((yyjson_val *)val);\n}\n\nyyjson_api_inline bool yyjson_mut_equals_str(yyjson_mut_val *val,\n                                             const char *str) {\n    return yyjson_equals_str((yyjson_val *)val, str);\n}\n\nyyjson_api_inline bool yyjson_mut_equals_strn(yyjson_mut_val *val,\n                                              const char *str, size_t len) {\n    return yyjson_equals_strn((yyjson_val *)val, str, len);\n}\n\nyyjson_api bool unsafe_yyjson_mut_equals(yyjson_mut_val *lhs,\n                                         yyjson_mut_val *rhs);\n\nyyjson_api_inline bool yyjson_mut_equals(yyjson_mut_val *lhs,\n                                         yyjson_mut_val *rhs) {\n    if (yyjson_unlikely(!lhs || !rhs)) return false;\n    return unsafe_yyjson_mut_equals(lhs, rhs);\n}\n\nyyjson_api_inline bool yyjson_mut_set_raw(yyjson_mut_val *val,\n                                          const char *raw, size_t len) {\n    if (yyjson_unlikely(!val || !raw)) return false;\n    unsafe_yyjson_set_raw(val, raw, len);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_null(yyjson_mut_val *val) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_null(val);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_bool(yyjson_mut_val *val, bool num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_bool(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_uint(yyjson_mut_val *val, uint64_t num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_uint(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_sint(yyjson_mut_val *val, int64_t num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_sint(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_int(yyjson_mut_val *val, int num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_sint(val, (int64_t)num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_real(yyjson_mut_val *val, double num) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_real(val, num);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_str(yyjson_mut_val *val,\n                                          const char *str) {\n    if (yyjson_unlikely(!val || !str)) return false;\n    unsafe_yyjson_set_str(val, str);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_strn(yyjson_mut_val *val,\n                                           const char *str, size_t len) {\n    if (yyjson_unlikely(!val || !str)) return false;\n    unsafe_yyjson_set_strn(val, str, len);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_arr(yyjson_mut_val *val) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_arr(val, 0);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_set_obj(yyjson_mut_val *val) {\n    if (yyjson_unlikely(!val)) return false;\n    unsafe_yyjson_set_obj(val, 0);\n    return true;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Value Creation API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_raw(yyjson_mut_doc *doc,\n                                                 const char *str) {\n    if (yyjson_likely(str)) return yyjson_mut_rawn(doc, str, strlen(str));\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawn(yyjson_mut_doc *doc,\n                                                  const char *str,\n                                                  size_t len) {\n    if (yyjson_likely(doc && str)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW;\n            val->uni.str = str;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawcpy(yyjson_mut_doc *doc,\n                                                    const char *str) {\n    if (yyjson_likely(str)) return yyjson_mut_rawncpy(doc, str, strlen(str));\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_rawncpy(yyjson_mut_doc *doc,\n                                                     const char *str,\n                                                     size_t len) {\n    if (yyjson_likely(doc && str)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        char *new_str = unsafe_yyjson_mut_strncpy(doc, str, len);\n        if (yyjson_likely(val && new_str)) {\n            val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_RAW;\n            val->uni.str = new_str;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_null(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_NULL | YYJSON_SUBTYPE_NONE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_true(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_false(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_bool(yyjson_mut_doc *doc,\n                                                  bool _val) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_BOOL | (uint8_t)((uint8_t)_val << 3);\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_uint(yyjson_mut_doc *doc,\n                                                  uint64_t num) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n            val->uni.u64 = num;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_sint(yyjson_mut_doc *doc,\n                                                  int64_t num) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n            val->uni.i64 = num;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_int(yyjson_mut_doc *doc,\n                                                 int64_t num) {\n    return yyjson_mut_sint(doc, num);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_real(yyjson_mut_doc *doc,\n                                                  double num) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n            val->uni.f64 = num;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_str(yyjson_mut_doc *doc,\n                                                 const char *str) {\n    if (yyjson_likely(str)) return yyjson_mut_strn(doc, str, strlen(str));\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strn(yyjson_mut_doc *doc,\n                                                  const char *str,\n                                                  size_t len) {\n    if (yyjson_likely(doc && str)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n            val->uni.str = str;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strcpy(yyjson_mut_doc *doc,\n                                                    const char *str) {\n    if (yyjson_likely(str)) return yyjson_mut_strncpy(doc, str, strlen(str));\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_strncpy(yyjson_mut_doc *doc,\n                                                     const char *str,\n                                                     size_t len) {\n    if (yyjson_likely(doc && str)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        char *new_str = unsafe_yyjson_mut_strncpy(doc, str, len);\n        if (yyjson_likely(val && new_str)) {\n            val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n            val->uni.str = new_str;\n            return val;\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Array API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline size_t yyjson_mut_arr_size(yyjson_mut_val *arr) {\n    return yyjson_mut_is_arr(arr) ? unsafe_yyjson_get_len(arr) : 0;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get(yyjson_mut_val *arr,\n                                                     size_t idx) {\n    if (yyjson_likely(idx < yyjson_mut_arr_size(arr))) {\n        yyjson_mut_val *val = (yyjson_mut_val *)arr->uni.ptr;\n        while (idx-- > 0) val = val->next;\n        return val->next;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_first(\n    yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_arr_size(arr) > 0)) {\n        return ((yyjson_mut_val *)arr->uni.ptr)->next;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_get_last(\n    yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_arr_size(arr) > 0)) {\n        return ((yyjson_mut_val *)arr->uni.ptr);\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Array Iterator API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_arr_iter_init(yyjson_mut_val *arr,\n                                                yyjson_mut_arr_iter *iter) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && iter)) {\n        iter->idx = 0;\n        iter->max = unsafe_yyjson_get_len(arr);\n        iter->cur = iter->max ? (yyjson_mut_val *)arr->uni.ptr : NULL;\n        iter->pre = NULL;\n        iter->arr = arr;\n        return true;\n    }\n    if (iter) memset(iter, 0, sizeof(yyjson_mut_arr_iter));\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_arr_iter yyjson_mut_arr_iter_with(\n    yyjson_mut_val *arr) {\n    yyjson_mut_arr_iter iter;\n    yyjson_mut_arr_iter_init(arr, &iter);\n    return iter;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_iter_has_next(yyjson_mut_arr_iter *iter) {\n    return iter ? iter->idx < iter->max : false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_next(\n    yyjson_mut_arr_iter *iter) {\n    if (iter && iter->idx < iter->max) {\n        yyjson_mut_val *val = iter->cur;\n        iter->pre = val;\n        iter->cur = val->next;\n        iter->idx++;\n        return iter->cur;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_iter_remove(\n    yyjson_mut_arr_iter *iter) {\n    if (yyjson_likely(iter && 0 < iter->idx && iter->idx <= iter->max)) {\n        yyjson_mut_val *prev = iter->pre;\n        yyjson_mut_val *cur = iter->cur;\n        yyjson_mut_val *next = cur->next;\n        if (yyjson_unlikely(iter->idx == iter->max)) iter->arr->uni.ptr = prev;\n        iter->idx--;\n        iter->max--;\n        unsafe_yyjson_set_len(iter->arr, iter->max);\n        prev->next = next;\n        iter->cur = next;\n        return cur;\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Array Creation API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_ARR | YYJSON_SUBTYPE_NONE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\n#define yyjson_mut_arr_with_func(func) \\\n    if (yyjson_likely(doc && ((0 < count && count < \\\n        (~(size_t)0) / sizeof(yyjson_mut_val) && vals) || count == 0))) { \\\n        yyjson_mut_val *arr = unsafe_yyjson_mut_val(doc, 1 + count); \\\n        if (yyjson_likely(arr)) { \\\n            arr->tag = ((uint64_t)count << YYJSON_TAG_BIT) | YYJSON_TYPE_ARR; \\\n            if (count > 0) { \\\n                size_t i; \\\n                for (i = 0; i < count; i++) { \\\n                    yyjson_mut_val *val = arr + i + 1; \\\n                    func \\\n                    val->next = val + 1; \\\n                } \\\n                arr[count].next = arr + 1; \\\n                arr->uni.ptr = arr + count; \\\n            } \\\n            return arr; \\\n        } \\\n    } \\\n    return NULL\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_bool(\n    yyjson_mut_doc *doc, const bool *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_BOOL | (uint8_t)((uint8_t)vals[i] << 3);\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint(\n    yyjson_mut_doc *doc, const int64_t *vals, size_t count) {\n    return yyjson_mut_arr_with_sint64(doc, vals, count);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint(\n    yyjson_mut_doc *doc, const uint64_t *vals, size_t count) {\n    return yyjson_mut_arr_with_uint64(doc, vals, count);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_real(\n    yyjson_mut_doc *doc, const double *vals, size_t count) {\n    return yyjson_mut_arr_with_double(doc, vals, count);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint8(\n    yyjson_mut_doc *doc, const int8_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = (int64_t)vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint16(\n    yyjson_mut_doc *doc, const int16_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint32(\n    yyjson_mut_doc *doc, const int32_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_sint64(\n    yyjson_mut_doc *doc, const int64_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint8(\n    yyjson_mut_doc *doc, const uint8_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint16(\n    yyjson_mut_doc *doc, const uint16_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint32(\n    yyjson_mut_doc *doc, const uint32_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_uint64(\n    yyjson_mut_doc *doc, const uint64_t *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_float(\n    yyjson_mut_doc *doc, const float *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n        val->uni.f64 = (double)vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_double(\n    yyjson_mut_doc *doc, const double *vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n        val->uni.f64 = vals[i];\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_str(\n    yyjson_mut_doc *doc, const char **vals, size_t count) {\n    yyjson_mut_arr_with_func({\n        uint64_t len = (uint64_t)strlen(vals[i]);\n        val->tag = (len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = vals[i];\n        if (yyjson_unlikely(!val->uni.str)) return NULL;\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strn(\n    yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count) {\n    if (yyjson_unlikely(count > 0 && !lens)) return NULL;\n    yyjson_mut_arr_with_func({\n        val->tag = ((uint64_t)lens[i] << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = vals[i];\n        if (yyjson_unlikely(!val->uni.str)) return NULL;\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strcpy(\n    yyjson_mut_doc *doc, const char **vals, size_t count) {\n    size_t len;\n    const char *str;\n    yyjson_mut_arr_with_func({\n        str = vals[i];\n        if (!str) return NULL;\n        len = strlen(str);\n        val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = unsafe_yyjson_mut_strncpy(doc, str, len);\n        if (yyjson_unlikely(!val->uni.str)) return NULL;\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_with_strncpy(\n    yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count) {\n    size_t len;\n    const char *str;\n    if (yyjson_unlikely(count > 0 && !lens)) return NULL;\n    yyjson_mut_arr_with_func({\n        str = vals[i];\n        len = lens[i];\n        val->tag = ((uint64_t)len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = unsafe_yyjson_mut_strncpy(doc, str, len);\n        if (yyjson_unlikely(!val->uni.str)) return NULL;\n    });\n}\n\n#undef yyjson_mut_arr_with_func\n\n\n\n/*==============================================================================\n * Mutable JSON Array Modification API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_arr_insert(yyjson_mut_val *arr,\n                                             yyjson_mut_val *val, size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && val)) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(idx <= len)) {\n            unsafe_yyjson_set_len(arr, len + 1);\n            if (len == 0) {\n                val->next = val;\n                arr->uni.ptr = val;\n            } else {\n                yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n                yyjson_mut_val *next = prev->next;\n                if (idx == len) {\n                    prev->next = val;\n                    val->next = next;\n                    arr->uni.ptr = val;\n                } else {\n                    while (idx-- > 0) {\n                        prev = next;\n                        next = next->next;\n                    }\n                    prev->next = val;\n                    val->next = next;\n                }\n            }\n            return true;\n        }\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_append(yyjson_mut_val *arr,\n                                             yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && val)) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        unsafe_yyjson_set_len(arr, len + 1);\n        if (len == 0) {\n            val->next = val;\n        } else {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            yyjson_mut_val *next = prev->next;\n            prev->next = val;\n            val->next = next;\n        }\n        arr->uni.ptr = val;\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_prepend(yyjson_mut_val *arr,\n                                              yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && val)) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        unsafe_yyjson_set_len(arr, len + 1);\n        if (len == 0) {\n            val->next = val;\n            arr->uni.ptr = val;\n        } else {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            yyjson_mut_val *next = prev->next;\n            prev->next = val;\n            val->next = next;\n        }\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_replace(yyjson_mut_val *arr,\n                                                         size_t idx,\n                                                         yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) && val)) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(idx < len)) {\n            if (yyjson_likely(len > 1)) {\n                yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n                yyjson_mut_val *next = prev->next;\n                while (idx-- > 0) {\n                    prev = next;\n                    next = next->next;\n                }\n                prev->next = val;\n                val->next = next->next;\n                if ((void *)next == arr->uni.ptr) arr->uni.ptr = val;\n                return next;\n            } else {\n                yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n                val->next = val;\n                arr->uni.ptr = val;\n                return prev;\n            }\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove(yyjson_mut_val *arr,\n                                                        size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(idx < len)) {\n            unsafe_yyjson_set_len(arr, len - 1);\n            if (yyjson_likely(len > 1)) {\n                yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n                yyjson_mut_val *next = prev->next;\n                while (idx-- > 0) {\n                    prev = next;\n                    next = next->next;\n                }\n                prev->next = next->next;\n                if ((void *)next == arr->uni.ptr) arr->uni.ptr = prev;\n                return next;\n            } else {\n                return ((yyjson_mut_val *)arr->uni.ptr);\n            }\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_first(\n    yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (len > 1) {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            yyjson_mut_val *next = prev->next;\n            prev->next = next->next;\n            unsafe_yyjson_set_len(arr, len - 1);\n            return next;\n        } else if (len == 1) {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            unsafe_yyjson_set_len(arr, 0);\n            return prev;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_remove_last(\n    yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_likely(len > 1)) {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            yyjson_mut_val *next = prev->next;\n            unsafe_yyjson_set_len(arr, len - 1);\n            while (--len > 0) prev = prev->next;\n            prev->next = next;\n            next = (yyjson_mut_val *)arr->uni.ptr;\n            arr->uni.ptr = prev;\n            return next;\n        } else if (len == 1) {\n            yyjson_mut_val *prev = ((yyjson_mut_val *)arr->uni.ptr);\n            unsafe_yyjson_set_len(arr, 0);\n            return prev;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_remove_range(yyjson_mut_val *arr,\n                                                   size_t _idx, size_t _len) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *prev, *next;\n        bool tail_removed;\n        size_t len = unsafe_yyjson_get_len(arr);\n        if (yyjson_unlikely(_idx + _len > len)) return false;\n        if (yyjson_unlikely(_len == 0)) return true;\n        unsafe_yyjson_set_len(arr, len - _len);\n        if (yyjson_unlikely(len == _len)) return true;\n        tail_removed = (_idx + _len == len);\n        prev = ((yyjson_mut_val *)arr->uni.ptr);\n        while (_idx-- > 0) prev = prev->next;\n        next = prev->next;\n        while (_len-- > 0) next = next->next;\n        prev->next = next;\n        if (yyjson_unlikely(tail_removed)) arr->uni.ptr = prev;\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_clear(yyjson_mut_val *arr) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr))) {\n        unsafe_yyjson_set_len(arr, 0);\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_rotate(yyjson_mut_val *arr,\n                                             size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_arr(arr) &&\n                      unsafe_yyjson_get_len(arr) > idx)) {\n        yyjson_mut_val *val = (yyjson_mut_val *)arr->uni.ptr;\n        while (idx-- > 0) val = val->next;\n        arr->uni.ptr = (void *)val;\n        return true;\n    }\n    return false;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Array Modification Convenience API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_arr_add_val(yyjson_mut_val *arr,\n                                              yyjson_mut_val *val) {\n    return yyjson_mut_arr_append(arr, val);\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_null(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_null(doc);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_true(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_true(doc);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_false(yyjson_mut_doc *doc,\n                                                yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_false(doc);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_bool(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               bool _val) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_bool(doc, _val);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_uint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               uint64_t num) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_uint(doc, num);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_sint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               int64_t num) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_sint(doc, num);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_int(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *arr,\n                                              int64_t num) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_sint(doc, num);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_real(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               double num) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_real(doc, num);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_str(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *arr,\n                                              const char *str) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_str(doc, str);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_strn(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *arr,\n                                               const char *str, size_t len) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_strn(doc, str, len);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_strcpy(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *arr,\n                                                 const char *str) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_strcpy(doc, str);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_arr_add_strncpy(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *arr,\n                                                  const char *str, size_t len) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_strncpy(doc, str, len);\n        return yyjson_mut_arr_append(arr, val);\n    }\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_arr(yyjson_mut_doc *doc,\n                                                         yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_arr(doc);\n        return yyjson_mut_arr_append(arr, val) ? val : NULL;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_arr_add_obj(yyjson_mut_doc *doc,\n                                                         yyjson_mut_val *arr) {\n    if (yyjson_likely(doc && yyjson_mut_is_arr(arr))) {\n        yyjson_mut_val *val = yyjson_mut_obj(doc);\n        return yyjson_mut_arr_append(arr, val) ? val : NULL;\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline size_t yyjson_mut_obj_size(yyjson_mut_val *obj) {\n    return yyjson_mut_is_obj(obj) ? unsafe_yyjson_get_len(obj) : 0;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_get(yyjson_mut_val *obj,\n                                                     const char *key) {\n    return yyjson_mut_obj_getn(obj, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_getn(yyjson_mut_val *obj,\n                                                      const char *_key,\n                                                      size_t key_len) {\n    uint64_t tag = (((uint64_t)key_len) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    size_t len = yyjson_mut_obj_size(obj);\n    if (yyjson_likely(len && _key)) {\n        yyjson_mut_val *key = ((yyjson_mut_val *)obj->uni.ptr)->next->next;\n        while (len-- > 0) {\n            if (key->tag == tag &&\n                memcmp(key->uni.ptr, _key, key_len) == 0) {\n                return key->next;\n            }\n            key = key->next->next;\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object Iterator API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline bool yyjson_mut_obj_iter_init(yyjson_mut_val *obj,\n                                                yyjson_mut_obj_iter *iter) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && iter)) {\n        iter->idx = 0;\n        iter->max = unsafe_yyjson_get_len(obj);\n        iter->cur = iter->max ? (yyjson_mut_val *)obj->uni.ptr : NULL;\n        iter->pre = NULL;\n        iter->obj = obj;\n        return true;\n    }\n    if (iter) memset(iter, 0, sizeof(yyjson_mut_obj_iter));\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_obj_iter yyjson_mut_obj_iter_with(\n    yyjson_mut_val *obj) {\n    yyjson_mut_obj_iter iter;\n    yyjson_mut_obj_iter_init(obj, &iter);\n    return iter;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_iter_has_next(yyjson_mut_obj_iter *iter) {\n    return iter ? iter->idx < iter->max : false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_next(\n    yyjson_mut_obj_iter *iter) {\n    if (iter && iter->idx < iter->max) {\n        yyjson_mut_val *key = iter->cur;\n        iter->pre = key;\n        iter->cur = key->next->next;\n        iter->idx++;\n        return iter->cur;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get_val(\n    yyjson_mut_val *key) {\n    return key ? key->next : NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_remove(\n    yyjson_mut_obj_iter *iter) {\n    if (yyjson_likely(iter && 0 < iter->idx && iter->idx <= iter->max)) {\n        yyjson_mut_val *prev = iter->pre;\n        yyjson_mut_val *cur = iter->cur;\n        yyjson_mut_val *next = cur->next->next;\n        if (yyjson_unlikely(iter->idx == iter->max)) iter->obj->uni.ptr = prev;\n        iter->idx--;\n        iter->max--;\n        unsafe_yyjson_set_len(iter->obj, iter->max);\n        prev->next->next = next;\n        iter->cur = prev;\n        return cur->next;\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_get(\n    yyjson_mut_obj_iter *iter, const char *key) {\n    return yyjson_mut_obj_iter_getn(iter, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_iter_getn(\n    yyjson_mut_obj_iter *iter, const char *key, size_t key_len) {\n    if (iter && key) {\n        size_t idx = 0;\n        size_t max = iter->max;\n        yyjson_mut_val *pre, *cur = iter->cur;\n        while (idx++ < max) {\n            pre = cur;\n            cur = cur->next->next;\n            if (unsafe_yyjson_get_len(cur) == key_len &&\n                memcmp(cur->uni.str, key, key_len) == 0) {\n                iter->idx += idx;\n                if (iter->idx > max) iter->idx -= max + 1;\n                iter->pre = pre;\n                iter->cur = cur;\n                return cur->next;\n            }\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object Creation API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj(yyjson_mut_doc *doc) {\n    if (yyjson_likely(doc)) {\n        yyjson_mut_val *val = unsafe_yyjson_mut_val(doc, 1);\n        if (yyjson_likely(val)) {\n            val->tag = YYJSON_TYPE_OBJ | YYJSON_SUBTYPE_NONE;\n            return val;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_str(yyjson_mut_doc *doc,\n                                                          const char **keys,\n                                                          const char **vals,\n                                                          size_t count) {\n    if (yyjson_likely(doc && ((count > 0 && keys && vals) || (count == 0)))) {\n        yyjson_mut_val *obj = unsafe_yyjson_mut_val(doc, 1 + count * 2);\n        if (yyjson_likely(obj)) {\n            obj->tag = ((uint64_t)count << YYJSON_TAG_BIT) | YYJSON_TYPE_OBJ;\n            if (count > 0) {\n                size_t i;\n                for (i = 0; i < count; i++) {\n                    yyjson_mut_val *key = obj + (i * 2 + 1);\n                    yyjson_mut_val *val = obj + (i * 2 + 2);\n                    uint64_t key_len = (uint64_t)strlen(keys[i]);\n                    uint64_t val_len = (uint64_t)strlen(vals[i]);\n                    key->tag = (key_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n                    val->tag = (val_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n                    key->uni.str = keys[i];\n                    val->uni.str = vals[i];\n                    key->next = val;\n                    val->next = val + 1;\n                }\n                obj[count * 2].next = obj + 1;\n                obj->uni.ptr = obj + (count * 2 - 1);\n            }\n            return obj;\n        }\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_with_kv(yyjson_mut_doc *doc,\n                                                         const char **pairs,\n                                                         size_t count) {\n    if (yyjson_likely(doc && ((count > 0 && pairs) || (count == 0)))) {\n        yyjson_mut_val *obj = unsafe_yyjson_mut_val(doc, 1 + count * 2);\n        if (yyjson_likely(obj)) {\n            obj->tag = ((uint64_t)count << YYJSON_TAG_BIT) | YYJSON_TYPE_OBJ;\n            if (count > 0) {\n                size_t i;\n                for (i = 0; i < count; i++) {\n                    yyjson_mut_val *key = obj + (i * 2 + 1);\n                    yyjson_mut_val *val = obj + (i * 2 + 2);\n                    const char *key_str = pairs[i * 2 + 0];\n                    const char *val_str = pairs[i * 2 + 1];\n                    uint64_t key_len = (uint64_t)strlen(key_str);\n                    uint64_t val_len = (uint64_t)strlen(val_str);\n                    key->tag = (key_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n                    val->tag = (val_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n                    key->uni.str = key_str;\n                    val->uni.str = val_str;\n                    key->next = val;\n                    val->next = val + 1;\n                }\n                obj[count * 2].next = obj + 1;\n                obj->uni.ptr = obj + (count * 2 - 1);\n            }\n            return obj;\n        }\n    }\n    return NULL;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object Modification API (Implementation)\n *============================================================================*/\n\nyyjson_api_inline void unsafe_yyjson_mut_obj_add(yyjson_mut_val *obj,\n                                                 yyjson_mut_val *key,\n                                                 yyjson_mut_val *val,\n                                                 size_t len) {\n    if (yyjson_likely(len)) {\n        yyjson_mut_val *prev_val = ((yyjson_mut_val *)obj->uni.ptr)->next;\n        yyjson_mut_val *next_key = prev_val->next;\n        prev_val->next = key;\n        val->next = next_key;\n    } else {\n        val->next = key;\n    }\n    key->next = val;\n    obj->uni.ptr = (void *)key;\n    unsafe_yyjson_set_len(obj, len + 1);\n}\n\nyyjson_api_inline yyjson_mut_val *unsafe_yyjson_mut_obj_remove(\n    yyjson_mut_val *obj, const char *key, size_t key_len, uint64_t key_tag) {\n    size_t obj_len = unsafe_yyjson_get_len(obj);\n    if (obj_len) {\n        yyjson_mut_val *pre_key = (yyjson_mut_val *)obj->uni.ptr;\n        yyjson_mut_val *cur_key = pre_key->next->next;\n        yyjson_mut_val *removed_item = NULL;\n        size_t i;\n        for (i = 0; i < obj_len; i++) {\n            if (key_tag == cur_key->tag &&\n                memcmp(key, cur_key->uni.ptr, key_len) == 0) {\n                if (!removed_item) removed_item = cur_key->next;\n                cur_key = cur_key->next->next;\n                pre_key->next->next = cur_key;\n                if (i + 1 == obj_len) obj->uni.ptr = pre_key;\n                i--;\n                obj_len--;\n            } else {\n                pre_key = cur_key;\n                cur_key = cur_key->next->next;\n            }\n        }\n        unsafe_yyjson_set_len(obj, obj_len);\n        return removed_item;\n    } else {\n        return NULL;\n    }\n}\n\nyyjson_api_inline bool unsafe_yyjson_mut_obj_replace(yyjson_mut_val *obj,\n                                                     yyjson_mut_val *key,\n                                                     yyjson_mut_val *val) {\n    size_t key_len = unsafe_yyjson_get_len(key);\n    size_t obj_len = unsafe_yyjson_get_len(obj);\n    if (obj_len) {\n        yyjson_mut_val *pre_key = (yyjson_mut_val *)obj->uni.ptr;\n        yyjson_mut_val *cur_key = pre_key->next->next;\n        size_t i;\n        for (i = 0; i < obj_len; i++) {\n            if (key->tag == cur_key->tag &&\n                memcmp(key->uni.str, cur_key->uni.ptr, key_len) == 0) {\n                cur_key->next->tag = val->tag;\n                cur_key->next->uni.u64 = val->uni.u64;\n                return true;\n            } else {\n                cur_key = cur_key->next->next;\n            }\n        }\n    }\n    return false;\n}\n\nyyjson_api_inline void unsafe_yyjson_mut_obj_rotate(yyjson_mut_val *obj,\n                                                    size_t idx) {\n    yyjson_mut_val *key = (yyjson_mut_val *)obj->uni.ptr;\n    while (idx-- > 0) key = key->next->next;\n    obj->uni.ptr = (void *)key;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add(yyjson_mut_val *obj,\n                                          yyjson_mut_val *key,\n                                          yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) &&\n                      yyjson_mut_is_str(key) && val)) {\n        unsafe_yyjson_mut_obj_add(obj, key, val, unsafe_yyjson_get_len(obj));\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_put(yyjson_mut_val *obj,\n                                          yyjson_mut_val *key,\n                                          yyjson_mut_val *val) {\n    bool replaced = false;\n    size_t key_len;\n    yyjson_mut_obj_iter iter;\n    yyjson_mut_val *cur_key;\n    if (yyjson_unlikely(!yyjson_mut_is_obj(obj) ||\n                        !yyjson_mut_is_str(key))) return false;\n    key_len = unsafe_yyjson_get_len(key);\n    yyjson_mut_obj_iter_init(obj, &iter);\n    while ((cur_key = yyjson_mut_obj_iter_next(&iter))) {\n        if (key->tag == cur_key->tag &&\n            memcmp(key->uni.str, cur_key->uni.ptr, key_len) == 0) {\n            if (!replaced && val) {\n                replaced = true;\n                val->next = cur_key->next->next;\n                cur_key->next = val;\n            } else {\n                yyjson_mut_obj_iter_remove(&iter);\n            }\n        }\n    }\n    if (!replaced && val) unsafe_yyjson_mut_obj_add(obj, key, val, iter.max);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_insert(yyjson_mut_val *obj,\n                                             yyjson_mut_val *key,\n                                             yyjson_mut_val *val,\n                                             size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) &&\n                      yyjson_mut_is_str(key) && val)) {\n        size_t len = unsafe_yyjson_get_len(obj);\n        if (yyjson_likely(len >= idx)) {\n            if (len > idx) {\n                void *ptr = obj->uni.ptr;\n                unsafe_yyjson_mut_obj_rotate(obj, idx);\n                unsafe_yyjson_mut_obj_add(obj, key, val, len);\n                obj->uni.ptr = ptr;\n            } else {\n                unsafe_yyjson_mut_obj_add(obj, key, val, len);\n            }\n            return true;\n        }\n    }\n    return false;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove(yyjson_mut_val *obj,\n    yyjson_mut_val *key) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && yyjson_mut_is_str(key))) {\n        return unsafe_yyjson_mut_obj_remove(obj, key->uni.str,\n                                            unsafe_yyjson_get_len(key),\n                                            key->tag);\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_key(\n    yyjson_mut_val *obj, const char *key) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && key)) {\n        size_t key_len = strlen(key);\n        uint64_t tag = ((uint64_t)key_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        return unsafe_yyjson_mut_obj_remove(obj, key, key_len, tag);\n    }\n    return NULL;\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_keyn(\n    yyjson_mut_val *obj, const char *key, size_t key_len) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && key)) {\n        uint64_t tag = ((uint64_t)key_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        return unsafe_yyjson_mut_obj_remove(obj, key, key_len, tag);\n    }\n    return NULL;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_clear(yyjson_mut_val *obj) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj))) {\n        unsafe_yyjson_set_len(obj, 0);\n        return true;\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_replace(yyjson_mut_val *obj,\n                                              yyjson_mut_val *key,\n                                              yyjson_mut_val *val) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) &&\n                      yyjson_mut_is_str(key) && val)) {\n        return unsafe_yyjson_mut_obj_replace(obj, key, val);\n    }\n    return false;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_rotate(yyjson_mut_val *obj,\n                                             size_t idx) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) &&\n                      unsafe_yyjson_get_len(obj) > idx)) {\n        unsafe_yyjson_mut_obj_rotate(obj, idx);\n        return true;\n    }\n    return false;\n}\n\n\n\n/*==============================================================================\n * Mutable JSON Object Modification Convenience API (Implementation)\n *============================================================================*/\n\n#define yyjson_mut_obj_add_func(func) \\\n    if (yyjson_likely(doc && yyjson_mut_is_obj(obj) && _key)) { \\\n        yyjson_mut_val *key = unsafe_yyjson_mut_val(doc, 2); \\\n        if (yyjson_likely(key)) { \\\n            size_t len = unsafe_yyjson_get_len(obj); \\\n            yyjson_mut_val *val = key + 1; \\\n            key->tag = YYJSON_TYPE_STR | YYJSON_SUBTYPE_NONE; \\\n            key->tag |= (uint64_t)strlen(_key) << YYJSON_TAG_BIT; \\\n            key->uni.str = _key; \\\n            func \\\n            unsafe_yyjson_mut_obj_add(obj, key, val, len); \\\n            return true; \\\n        } \\\n    } \\\n    return false\n\nyyjson_api_inline bool yyjson_mut_obj_add_null(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NULL | YYJSON_SUBTYPE_NONE;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_true(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_false(yyjson_mut_doc *doc,\n                                                yyjson_mut_val *obj,\n                                                const char *_key) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_bool(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               bool _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_BOOL | (uint8_t)((uint8_t)(_val) << 3);\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_uint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               uint64_t _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT;\n        val->uni.u64 = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_sint(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               int64_t _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_int(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *_key,\n                                              int64_t _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT;\n        val->uni.i64 = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_real(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               double _val) {\n    yyjson_mut_obj_add_func({\n        val->tag = YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL;\n        val->uni.f64 = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_str(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *_key,\n                                              const char *_val) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        val->tag = ((uint64_t)strlen(_val) << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_strn(yyjson_mut_doc *doc,\n                                               yyjson_mut_val *obj,\n                                               const char *_key,\n                                               const char *_val,\n                                               size_t _len) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        val->tag = ((uint64_t)_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n        val->uni.str = _val;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_strcpy(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *obj,\n                                                 const char *_key,\n                                                 const char *_val) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        size_t _len = strlen(_val);\n        val->uni.str = unsafe_yyjson_mut_strncpy(doc, _val, _len);\n        if (yyjson_unlikely(!val->uni.str)) return false;\n        val->tag = ((uint64_t)_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_strncpy(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *obj,\n                                                  const char *_key,\n                                                  const char *_val,\n                                                  size_t _len) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        val->uni.str = unsafe_yyjson_mut_strncpy(doc, _val, _len);\n        if (yyjson_unlikely(!val->uni.str)) return false;\n        val->tag = ((uint64_t)_len << YYJSON_TAG_BIT) | YYJSON_TYPE_STR;\n    });\n}\n\nyyjson_api_inline bool yyjson_mut_obj_add_val(yyjson_mut_doc *doc,\n                                              yyjson_mut_val *obj,\n                                              const char *_key,\n                                              yyjson_mut_val *_val) {\n    if (yyjson_unlikely(!_val)) return false;\n    yyjson_mut_obj_add_func({\n        val = _val;\n    });\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_str(yyjson_mut_val *obj,\n                                                            const char *key) {\n    return yyjson_mut_obj_remove_strn(obj, key, key ? strlen(key) : 0);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_obj_remove_strn(\n    yyjson_mut_val *obj, const char *_key, size_t _len) {\n    if (yyjson_likely(yyjson_mut_is_obj(obj) && _key)) {\n        yyjson_mut_val *key;\n        yyjson_mut_obj_iter iter;\n        yyjson_mut_val *val_removed = NULL;\n        yyjson_mut_obj_iter_init(obj, &iter);\n        while ((key = yyjson_mut_obj_iter_next(&iter)) != NULL) {\n            if (unsafe_yyjson_get_len(key) == _len &&\n                memcmp(key->uni.str, _key, _len) == 0) {\n                if (!val_removed) val_removed = key->next;\n                yyjson_mut_obj_iter_remove(&iter);\n            }\n        }\n        return val_removed;\n    }\n    return NULL;\n}\n\nyyjson_api_inline bool yyjson_mut_obj_rename_key(yyjson_mut_doc *doc,\n                                                 yyjson_mut_val *obj,\n                                                 const char *key,\n                                                 const char *new_key) {\n    if (!key || !new_key) return false;\n    return yyjson_mut_obj_rename_keyn(doc, obj, key, strlen(key),\n                                      new_key, strlen(new_key));\n}\n\nyyjson_api_inline bool yyjson_mut_obj_rename_keyn(yyjson_mut_doc *doc,\n                                                  yyjson_mut_val *obj,\n                                                  const char *key,\n                                                  size_t len,\n                                                  const char *new_key,\n                                                  size_t new_len) {\n    char *cpy_key = NULL;\n    yyjson_mut_val *old_key;\n    yyjson_mut_obj_iter iter;\n    if (!doc || !obj || !key || !new_key) return false;\n    yyjson_mut_obj_iter_init(obj, &iter);\n    while ((old_key = yyjson_mut_obj_iter_next(&iter))) {\n        if (unsafe_yyjson_equals_strn((void *)old_key, key, len)) {\n            if (!cpy_key) {\n                cpy_key = unsafe_yyjson_mut_strncpy(doc, new_key, new_len);\n                if (!cpy_key) return false;\n            }\n            yyjson_mut_set_strn(old_key, cpy_key, new_len);\n        }\n    }\n    return cpy_key != NULL;\n}\n\n\n\n/*==============================================================================\n * JSON Pointer API (Implementation)\n *============================================================================*/\n\n#define yyjson_ptr_set_err(_code, _msg) do { \\\n    if (err) { \\\n        err->code = YYJSON_PTR_ERR_##_code; \\\n        err->msg = _msg; \\\n        err->pos = 0; \\\n    } \\\n} while(false)\n\n/* require: val != NULL, *ptr == '/', len > 0 */\nyyjson_api yyjson_val *unsafe_yyjson_ptr_getx(yyjson_val *val,\n                                              const char *ptr, size_t len,\n                                              yyjson_ptr_err *err);\n\n/* require: val != NULL, *ptr == '/', len > 0 */\nyyjson_api yyjson_mut_val *unsafe_yyjson_mut_ptr_getx(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len,\n                                                      yyjson_ptr_ctx *ctx,\n                                                      yyjson_ptr_err *err);\n\n/* require: val/new_val/doc != NULL, *ptr == '/', len > 0 */\nyyjson_api bool unsafe_yyjson_mut_ptr_putx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent, bool insert_new,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err);\n\n/* require: val/err != NULL, *ptr == '/', len > 0 */\nyyjson_api yyjson_mut_val *unsafe_yyjson_mut_ptr_replacex(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err);\n\n/* require: val/err != NULL, *ptr == '/', len > 0 */\nyyjson_api yyjson_mut_val *unsafe_yyjson_mut_ptr_removex(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len,\n                                                         yyjson_ptr_ctx *ctx,\n                                                         yyjson_ptr_err *err);\n\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_get(yyjson_doc *doc,\n                                                 const char *ptr) {\n    if (yyjson_unlikely(!ptr)) return NULL;\n    return yyjson_doc_ptr_getn(doc, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_getn(yyjson_doc *doc,\n                                                  const char *ptr, size_t len) {\n    return yyjson_doc_ptr_getx(doc, ptr, len, NULL);\n}\n\nyyjson_api_inline yyjson_val *yyjson_doc_ptr_getx(yyjson_doc *doc,\n                                                  const char *ptr, size_t len,\n                                                  yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (yyjson_unlikely(!doc || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        return doc->root;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_ptr_getx(doc->root, ptr, len, err);\n}\n\nyyjson_api_inline yyjson_val *yyjson_ptr_get(yyjson_val *val,\n                                             const char *ptr) {\n    if (yyjson_unlikely(!ptr)) return NULL;\n    return yyjson_ptr_getn(val, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_val *yyjson_ptr_getn(yyjson_val *val,\n                                              const char *ptr, size_t len) {\n    return yyjson_ptr_getx(val, ptr, len, NULL);\n}\n\nyyjson_api_inline yyjson_val *yyjson_ptr_getx(yyjson_val *val,\n                                              const char *ptr, size_t len,\n                                              yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (yyjson_unlikely(!val || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        return val;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_ptr_getx(val, ptr, len, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_get(yyjson_mut_doc *doc,\n                                                         const char *ptr) {\n    if (!ptr) return NULL;\n    return yyjson_mut_doc_ptr_getn(doc, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getn(yyjson_mut_doc *doc,\n                                                          const char *ptr,\n                                                          size_t len) {\n    return yyjson_mut_doc_ptr_getx(doc, ptr, len, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_getx(yyjson_mut_doc *doc,\n                                                          const char *ptr,\n                                                          size_t len,\n                                                          yyjson_ptr_ctx *ctx,\n                                                          yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        return doc->root;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_getx(doc->root, ptr, len, ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_get(yyjson_mut_val *val,\n                                                     const char *ptr) {\n    if (!ptr) return NULL;\n    return yyjson_mut_ptr_getn(val, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getn(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len) {\n    return yyjson_mut_ptr_getx(val, ptr, len, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_getx(yyjson_mut_val *val,\n                                                      const char *ptr,\n                                                      size_t len,\n                                                      yyjson_ptr_ctx *ctx,\n                                                      yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        return val;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_getx(val, ptr, len, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_add(yyjson_mut_doc *doc,\n                                              const char *ptr,\n                                              yyjson_mut_val *new_val) {\n    if (yyjson_unlikely(!ptr)) return false;\n    return yyjson_mut_doc_ptr_addn(doc, ptr, strlen(ptr), new_val);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_addn(yyjson_mut_doc *doc,\n                                               const char *ptr,\n                                               size_t len,\n                                               yyjson_mut_val *new_val) {\n    return yyjson_mut_doc_ptr_addx(doc, ptr, len, new_val, true, NULL, NULL);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_addx(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val,\n                                               bool create_parent,\n                                               yyjson_ptr_ctx *ctx,\n                                               yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr || !new_val)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        if (doc->root) {\n            yyjson_ptr_set_err(SET_ROOT, \"cannot set document's root\");\n            return false;\n        } else {\n            doc->root = new_val;\n            return true;\n        }\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return false;\n    }\n    if (yyjson_unlikely(!doc->root && !create_parent)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_mut_val *root = yyjson_mut_obj(doc);\n        if (yyjson_unlikely(!root)) {\n            yyjson_ptr_set_err(MEMORY_ALLOCATION, \"failed to create value\");\n            return false;\n        }\n        if (unsafe_yyjson_mut_ptr_putx(root, ptr, len, new_val, doc,\n                                       create_parent, true, ctx, err)) {\n            doc->root = root;\n            return true;\n        }\n        return false;\n    }\n    return unsafe_yyjson_mut_ptr_putx(doc->root, ptr, len, new_val, doc,\n                                      create_parent, true, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_add(yyjson_mut_val *val,\n                                          const char *ptr,\n                                          yyjson_mut_val *new_val,\n                                          yyjson_mut_doc *doc) {\n    if (yyjson_unlikely(!ptr)) return false;\n    return yyjson_mut_ptr_addn(val, ptr, strlen(ptr), new_val, doc);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_addn(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc) {\n    return yyjson_mut_ptr_addx(val, ptr, len, new_val, doc, true, NULL, NULL);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_addx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr || !new_val || !doc)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_ptr_set_err(SET_ROOT, \"cannot set root\");\n        return false;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return false;\n    }\n    return unsafe_yyjson_mut_ptr_putx(val, ptr, len, new_val,\n                                       doc, create_parent, true, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_set(yyjson_mut_doc *doc,\n                                              const char *ptr,\n                                              yyjson_mut_val *new_val) {\n    if (yyjson_unlikely(!ptr)) return false;\n    return yyjson_mut_doc_ptr_setn(doc, ptr, strlen(ptr), new_val);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_setn(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val) {\n    return yyjson_mut_doc_ptr_setx(doc, ptr, len, new_val, true, NULL, NULL);\n}\n\nyyjson_api_inline bool yyjson_mut_doc_ptr_setx(yyjson_mut_doc *doc,\n                                               const char *ptr, size_t len,\n                                               yyjson_mut_val *new_val,\n                                               bool create_parent,\n                                               yyjson_ptr_ctx *ctx,\n                                               yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        if (ctx) ctx->old = doc->root;\n        doc->root = new_val;\n        return true;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return false;\n    }\n    if (!new_val) {\n        if (!doc->root) {\n            yyjson_ptr_set_err(RESOLVE, \"JSON pointer cannot be resolved\");\n            return false;\n        }\n        return !!unsafe_yyjson_mut_ptr_removex(doc->root, ptr, len, ctx, err);\n    }\n    if (yyjson_unlikely(!doc->root && !create_parent)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_mut_val *root = yyjson_mut_obj(doc);\n        if (yyjson_unlikely(!root)) {\n            yyjson_ptr_set_err(MEMORY_ALLOCATION, \"failed to create value\");\n            return false;\n        }\n        if (unsafe_yyjson_mut_ptr_putx(root, ptr, len, new_val, doc,\n                                       create_parent, false, ctx, err)) {\n            doc->root = root;\n            return true;\n        }\n        return false;\n    }\n    return unsafe_yyjson_mut_ptr_putx(doc->root, ptr, len, new_val, doc,\n                                      create_parent, false, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_set(yyjson_mut_val *val,\n                                          const char *ptr,\n                                          yyjson_mut_val *new_val,\n                                          yyjson_mut_doc *doc) {\n    if (yyjson_unlikely(!ptr)) return false;\n    return yyjson_mut_ptr_setn(val, ptr, strlen(ptr), new_val, doc);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_setn(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc) {\n    return yyjson_mut_ptr_setx(val, ptr, len, new_val, doc, true, NULL, NULL);\n}\n\nyyjson_api_inline bool yyjson_mut_ptr_setx(yyjson_mut_val *val,\n                                           const char *ptr, size_t len,\n                                           yyjson_mut_val *new_val,\n                                           yyjson_mut_doc *doc,\n                                           bool create_parent,\n                                           yyjson_ptr_ctx *ctx,\n                                           yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr || !doc)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return false;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_ptr_set_err(SET_ROOT, \"cannot set root\");\n        return false;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return false;\n    }\n    if (!new_val) {\n        return !!unsafe_yyjson_mut_ptr_removex(val, ptr, len, ctx, err);\n    }\n    return unsafe_yyjson_mut_ptr_putx(val, ptr, len, new_val, doc,\n                                      create_parent, false, ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replace(\n    yyjson_mut_doc *doc, const char *ptr, yyjson_mut_val *new_val) {\n    if (!ptr) return NULL;\n    return yyjson_mut_doc_ptr_replacen(doc, ptr, strlen(ptr), new_val);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacen(\n    yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val) {\n    return yyjson_mut_doc_ptr_replacex(doc, ptr, len, new_val, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_replacex(\n    yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err) {\n    \n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr || !new_val)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_mut_val *root = doc->root;\n        if (yyjson_unlikely(!root)) {\n            yyjson_ptr_set_err(RESOLVE, \"JSON pointer cannot be resolved\");\n            return NULL;\n        }\n        if (ctx) ctx->old = root;\n        doc->root = new_val;\n        return root;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_replacex(doc->root, ptr, len, new_val,\n                                          ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replace(\n    yyjson_mut_val *val, const char *ptr, yyjson_mut_val *new_val) {\n    if (!ptr) return NULL;\n    return yyjson_mut_ptr_replacen(val, ptr, strlen(ptr), new_val);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacen(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val) {\n    return yyjson_mut_ptr_replacex(val, ptr, len, new_val, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_replacex(\n    yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err) {\n    \n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr || !new_val)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_ptr_set_err(SET_ROOT, \"cannot set root\");\n        return NULL;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_replacex(val, ptr, len, new_val, ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_remove(\n    yyjson_mut_doc *doc, const char *ptr) {\n    if (!ptr) return NULL;\n    return yyjson_mut_doc_ptr_removen(doc, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removen(\n    yyjson_mut_doc *doc, const char *ptr, size_t len) {\n    return yyjson_mut_doc_ptr_removex(doc, ptr, len, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_ptr_removex(\n    yyjson_mut_doc *doc, const char *ptr, size_t len,\n    yyjson_ptr_ctx *ctx, yyjson_ptr_err *err) {\n    \n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!doc || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(!doc->root)) {\n        yyjson_ptr_set_err(NULL_ROOT, \"document's root is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_mut_val *root = doc->root;\n        if (ctx) ctx->old = root;\n        doc->root = NULL;\n        return root;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_removex(doc->root, ptr, len, ctx, err);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_remove(yyjson_mut_val *val,\n                                                        const char *ptr) {\n    if (!ptr) return NULL;\n    return yyjson_mut_ptr_removen(val, ptr, strlen(ptr));\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removen(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len) {\n    return yyjson_mut_ptr_removex(val, ptr, len, NULL, NULL);\n}\n\nyyjson_api_inline yyjson_mut_val *yyjson_mut_ptr_removex(yyjson_mut_val *val,\n                                                         const char *ptr,\n                                                         size_t len,\n                                                         yyjson_ptr_ctx *ctx,\n                                                         yyjson_ptr_err *err) {\n    yyjson_ptr_set_err(NONE, NULL);\n    if (ctx) memset(ctx, 0, sizeof(*ctx));\n    \n    if (yyjson_unlikely(!val || !ptr)) {\n        yyjson_ptr_set_err(PARAMETER, \"input parameter is NULL\");\n        return NULL;\n    }\n    if (yyjson_unlikely(len == 0)) {\n        yyjson_ptr_set_err(SET_ROOT, \"cannot set root\");\n        return NULL;\n    }\n    if (yyjson_unlikely(*ptr != '/')) {\n        yyjson_ptr_set_err(SYNTAX, \"no prefix '/'\");\n        return NULL;\n    }\n    return unsafe_yyjson_mut_ptr_removex(val, ptr, len, ctx, err);\n}\n\nyyjson_api_inline bool yyjson_ptr_ctx_append(yyjson_ptr_ctx *ctx,\n                                             yyjson_mut_val *key,\n                                             yyjson_mut_val *val) {\n    yyjson_mut_val *ctn, *pre_key, *pre_val, *cur_key, *cur_val;\n    if (!ctx || !ctx->ctn || !val) return false;\n    ctn = ctx->ctn;\n    \n    if (yyjson_mut_is_obj(ctn)) {\n        if (!key) return false;\n        key->next = val;\n        pre_key = ctx->pre;\n        if (unsafe_yyjson_get_len(ctn) == 0) {\n            val->next = key;\n            ctn->uni.ptr = key;\n            ctx->pre = key;\n        } else if (!pre_key) {\n            pre_key = (yyjson_mut_val *)ctn->uni.ptr;\n            pre_val = pre_key->next;\n            val->next = pre_val->next;\n            pre_val->next = key;\n            ctn->uni.ptr = key;\n            ctx->pre = pre_key;\n        } else {\n            cur_key = pre_key->next->next;\n            cur_val = cur_key->next;\n            val->next = cur_val->next;\n            cur_val->next = key;\n            if (ctn->uni.ptr == cur_key) ctn->uni.ptr = key;\n            ctx->pre = cur_key;\n        }\n    } else {\n        pre_val = ctx->pre;\n        if (unsafe_yyjson_get_len(ctn) == 0) {\n            val->next = val;\n            ctn->uni.ptr = val;\n            ctx->pre = val;\n        } else if (!pre_val) {\n            pre_val = (yyjson_mut_val *)ctn->uni.ptr;\n            val->next = pre_val->next;\n            pre_val->next = val;\n            ctn->uni.ptr = val;\n            ctx->pre = pre_val;\n        } else {\n            cur_val = pre_val->next;\n            val->next = cur_val->next;\n            cur_val->next = val;\n            if (ctn->uni.ptr == cur_val) ctn->uni.ptr = val;\n            ctx->pre = cur_val;\n        }\n    }\n    unsafe_yyjson_inc_len(ctn);\n    return true;\n}\n\nyyjson_api_inline bool yyjson_ptr_ctx_replace(yyjson_ptr_ctx *ctx,\n                                              yyjson_mut_val *val) {\n    yyjson_mut_val *ctn, *pre_key, *cur_key, *pre_val, *cur_val;\n    if (!ctx || !ctx->ctn || !ctx->pre || !val) return false;\n    ctn = ctx->ctn;\n    if (yyjson_mut_is_obj(ctn)) {\n        pre_key = ctx->pre;\n        pre_val = pre_key->next;\n        cur_key = pre_val->next;\n        cur_val = cur_key->next;\n        /* replace current value */\n        cur_key->next = val;\n        val->next = cur_val->next;\n        ctx->old = cur_val;\n    } else {\n        pre_val = ctx->pre;\n        cur_val = pre_val->next;\n        /* replace current value */\n        if (pre_val != cur_val) {\n            val->next = cur_val->next;\n            pre_val->next = val;\n            if (ctn->uni.ptr == cur_val) ctn->uni.ptr = val;\n        } else {\n            val->next = val;\n            ctn->uni.ptr = val;\n            ctx->pre = val;\n        }\n        ctx->old = cur_val;\n    }\n    return true;\n}\n\nyyjson_api_inline bool yyjson_ptr_ctx_remove(yyjson_ptr_ctx *ctx) {\n    yyjson_mut_val *ctn, *pre_key, *pre_val, *cur_key, *cur_val;\n    size_t len;\n    if (!ctx || !ctx->ctn || !ctx->pre) return false;\n    ctn = ctx->ctn;\n    if (yyjson_mut_is_obj(ctn)) {\n        pre_key = ctx->pre;\n        pre_val = pre_key->next;\n        cur_key = pre_val->next;\n        cur_val = cur_key->next;\n        /* remove current key-value */\n        pre_val->next = cur_val->next;\n        if (ctn->uni.ptr == cur_key) ctn->uni.ptr = pre_key;\n        ctx->pre = NULL;\n        ctx->old = cur_val;\n    } else {\n        pre_val = ctx->pre;\n        cur_val = pre_val->next;\n        /* remove current key-value */\n        pre_val->next = cur_val->next;\n        if (ctn->uni.ptr == cur_val) ctn->uni.ptr = pre_val;\n        ctx->pre = NULL;\n        ctx->old = cur_val;\n    }\n    len = unsafe_yyjson_get_len(ctn) - 1;\n    if (len == 0) ctn->uni.ptr = NULL;\n    unsafe_yyjson_set_len(ctn, len);\n    return true;\n}\n\n#undef yyjson_ptr_set_err\n\n\n\n/*==============================================================================\n * JSON Value at Pointer API (Implementation)\n *============================================================================*/\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type bool.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_bool(\n    yyjson_val *root, const char *ptr, bool *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_bool(val)) {\n        *value = unsafe_yyjson_get_bool(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type uint.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_uint(\n    yyjson_val *root, const char *ptr, uint64_t *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_uint(val)) {\n        *value = unsafe_yyjson_get_uint(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type sint.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_sint(\n    yyjson_val *root, const char *ptr, int64_t *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_sint(val)) {\n        *value = unsafe_yyjson_get_sint(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type real.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_real(\n    yyjson_val *root, const char *ptr, double *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_real(val)) {\n        *value = unsafe_yyjson_get_real(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type sint,\n uint or real.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_num(\n    yyjson_val *root, const char *ptr, double *value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_num(val)) {\n        *value = unsafe_yyjson_get_num(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n/**\n Set provided `value` if the JSON Pointer (RFC 6901) exists and is type string.\n Returns true if value at `ptr` exists and is the correct type, otherwise false.\n */\nyyjson_api_inline bool yyjson_ptr_get_str(\n    yyjson_val *root, const char *ptr, const char **value) {\n    yyjson_val *val = yyjson_ptr_get(root, ptr);\n    if (value && yyjson_is_str(val)) {\n        *value = unsafe_yyjson_get_str(val);\n        return true;\n    } else {\n        return false;\n    }\n}\n\n\n\n/*==============================================================================\n * Deprecated\n *============================================================================*/\n\n/** @deprecated renamed to `yyjson_doc_ptr_get` */\nyyjson_deprecated(\"renamed to yyjson_doc_ptr_get\")\nyyjson_api_inline yyjson_val *yyjson_doc_get_pointer(yyjson_doc *doc,\n                                                     const char *ptr) {\n    return yyjson_doc_ptr_get(doc, ptr);\n}\n\n/** @deprecated renamed to `yyjson_doc_ptr_getn` */\nyyjson_deprecated(\"renamed to yyjson_doc_ptr_getn\")\nyyjson_api_inline yyjson_val *yyjson_doc_get_pointern(yyjson_doc *doc,\n                                                      const char *ptr,\n                                                      size_t len) {\n    return yyjson_doc_ptr_getn(doc, ptr, len);\n}\n\n/** @deprecated renamed to `yyjson_mut_doc_ptr_get` */\nyyjson_deprecated(\"renamed to yyjson_mut_doc_ptr_get\")\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_pointer(\n    yyjson_mut_doc *doc, const char *ptr) {\n    return yyjson_mut_doc_ptr_get(doc, ptr);\n}\n\n/** @deprecated renamed to `yyjson_mut_doc_ptr_getn` */\nyyjson_deprecated(\"renamed to yyjson_mut_doc_ptr_getn\")\nyyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_pointern(\n    yyjson_mut_doc *doc, const char *ptr, size_t len) {\n    return yyjson_mut_doc_ptr_getn(doc, ptr, len);\n}\n\n/** @deprecated renamed to `yyjson_ptr_get` */\nyyjson_deprecated(\"renamed to yyjson_ptr_get\")\nyyjson_api_inline yyjson_val *yyjson_get_pointer(yyjson_val *val,\n                                                 const char *ptr) {\n    return yyjson_ptr_get(val, ptr);\n}\n\n/** @deprecated renamed to `yyjson_ptr_getn` */\nyyjson_deprecated(\"renamed to yyjson_ptr_getn\")\nyyjson_api_inline yyjson_val *yyjson_get_pointern(yyjson_val *val,\n                                                  const char *ptr,\n                                                  size_t len) {\n    return yyjson_ptr_getn(val, ptr, len);\n}\n\n/** @deprecated renamed to `yyjson_mut_ptr_get` */\nyyjson_deprecated(\"renamed to yyjson_mut_ptr_get\")\nyyjson_api_inline yyjson_mut_val *yyjson_mut_get_pointer(yyjson_mut_val *val,\n                                                         const char *ptr) {\n    return yyjson_mut_ptr_get(val, ptr);\n}\n\n/** @deprecated renamed to `yyjson_mut_ptr_getn` */\nyyjson_deprecated(\"renamed to yyjson_mut_ptr_getn\")\nyyjson_api_inline yyjson_mut_val *yyjson_mut_get_pointern(yyjson_mut_val *val,\n                                                          const char *ptr,\n                                                          size_t len) {\n    return yyjson_mut_ptr_getn(val, ptr, len);\n}\n\n/** @deprecated renamed to `yyjson_mut_ptr_getn` */\nyyjson_deprecated(\"renamed to unsafe_yyjson_ptr_getn\")\nyyjson_api_inline yyjson_val *unsafe_yyjson_get_pointer(yyjson_val *val,\n                                                        const char *ptr,\n                                                        size_t len) {\n    yyjson_ptr_err err;\n    return unsafe_yyjson_ptr_getx(val, ptr, len, &err);\n}\n\n/** @deprecated renamed to `unsafe_yyjson_mut_ptr_getx` */\nyyjson_deprecated(\"renamed to unsafe_yyjson_mut_ptr_getx\")\nyyjson_api_inline yyjson_mut_val *unsafe_yyjson_mut_get_pointer(\n    yyjson_mut_val *val, const char *ptr, size_t len) {\n    yyjson_ptr_err err;\n    return unsafe_yyjson_mut_ptr_getx(val, ptr, len, NULL, &err);\n}\n\n\n\n/*==============================================================================\n * Compiler Hint End\n *============================================================================*/\n\n#if defined(__clang__)\n#   pragma clang diagnostic pop\n#elif defined(__GNUC__)\n#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)\n#   pragma GCC diagnostic pop\n#   endif\n#elif defined(_MSC_VER)\n#   pragma warning(pop)\n#endif /* warning suppress end */\n\n#ifdef __cplusplus\n}\n#endif /* extern \"C\" end */\n\n#endif /* YYJSON_H */\n"
  },
  {
    "path": "libtts/Modules/Lib/World/LICENSE.txt",
    "content": "/* ----------------------------------------------------------------- */\n/*           WORLD: High-quality speech analysis,                    */\n/*           manipulation and synthesis system                       */\n/*           developed by M. Morise                                  */\n/*           http://www.kisc.meiji.ac.jp/~mmorise/world/english/     */\n/* ----------------------------------------------------------------- */\n/*                                                                   */\n/*  Copyright (c) 2010  M. Morise                                    */\n/*                                                                   */\n/* All rights reserved.                                              */\n/*                                                                   */\n/* Redistribution and use in source and binary forms, with or        */\n/* without modification, are permitted provided that the following   */\n/* conditions are met:                                               */\n/*                                                                   */\n/* - Redistributions of source code must retain the above copyright  */\n/*   notice, this list of conditions and the following disclaimer.   */\n/* - Redistributions in binary form must reproduce the above         */\n/*   copyright notice, this list of conditions and the following     */\n/*   disclaimer in the documentation and/or other materials provided */\n/*   with the distribution.                                          */\n/* - Neither the name of the M. Morise nor the names of its          */\n/*   contributors may be used to endorse or promote products derived */\n/*   from this software without specific prior written permission.   */\n/*                                                                   */\n/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND            */\n/* CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,       */\n/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF          */\n/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE          */\n/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS */\n/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,          */\n/* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED   */\n/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     */\n/* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */\n/* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,   */\n/* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY    */\n/* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE           */\n/* POSSIBILITY OF SUCH DAMAGE.                                       */\n/* ----------------------------------------------------------------- */\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/cheaptrick.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Spectral envelope estimation on the basis of the idea of CheapTrick.\n//-----------------------------------------------------------------------------\n#include \"world/cheaptrick.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n\n//-----------------------------------------------------------------------------\n// SmoothingWithRecovery() carries out the spectral smoothing and spectral\n// recovery on the Cepstrum domain.\n//-----------------------------------------------------------------------------\nstatic void SmoothingWithRecovery(double f0, int fs, int fft_size, double q1,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft, double *spectral_envelope) {\n  double *smoothing_lifter = new double[fft_size];\n  double *compensation_lifter = new double[fft_size];\n\n  smoothing_lifter[0] = 1.0;\n  compensation_lifter[0] = (1.0 - 2.0 * q1) + 2.0 * q1;\n  double quefrency;\n  for (int i = 1; i <= forward_real_fft->fft_size / 2; ++i) {\n    quefrency = static_cast<double>(i) / fs;\n    smoothing_lifter[i] = sin(world::kPi * f0 * quefrency) /\n      (world::kPi * f0 * quefrency);\n    compensation_lifter[i] = (1.0 - 2.0 * q1) + 2.0 * q1 *\n      cos(2.0 * world::kPi * quefrency * f0);\n  }\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    forward_real_fft->waveform[i] = log(forward_real_fft->waveform[i]);\n  for (int i = 1; i < fft_size / 2; ++i)\n    forward_real_fft->waveform[fft_size - i] = forward_real_fft->waveform[i];\n  fft_execute(forward_real_fft->forward_fft);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] = forward_real_fft->spectrum[i][0] *\n      smoothing_lifter[i] * compensation_lifter[i] / fft_size;\n    inverse_real_fft->spectrum[i][1] = 0.0;\n  }\n  fft_execute(inverse_real_fft->inverse_fft);\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    spectral_envelope[i] = exp(inverse_real_fft->waveform[i]);\n\n  delete[] smoothing_lifter;\n  delete[] compensation_lifter;\n}\n\n//-----------------------------------------------------------------------------\n// GetPowerSpectrum() calculates the power_spectrum with DC correction.\n// DC stands for Direct Current. In this case, the component from 0 to F0 Hz\n// is corrected.\n//-----------------------------------------------------------------------------\nstatic void GetPowerSpectrum(int fs, double f0, int fft_size,\n    const ForwardRealFFT *forward_real_fft) {\n  int half_window_length = matlab_round(1.5 * fs / f0);\n\n  // FFT\n  for (int i = half_window_length * 2 + 1; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n\n  // Calculation of the power spectrum.\n  double *power_spectrum = forward_real_fft->waveform;\n  for (int i = 0; i <= fft_size / 2; ++i)\n    power_spectrum[i] =\n      forward_real_fft->spectrum[i][0] * forward_real_fft->spectrum[i][0] +\n      forward_real_fft->spectrum[i][1] * forward_real_fft->spectrum[i][1];\n\n  // DC correction\n  DCCorrection(power_spectrum, f0, fs, fft_size, power_spectrum);\n}\n\n//-----------------------------------------------------------------------------\n// SetParametersForGetWindowedWaveform()\n//-----------------------------------------------------------------------------\nstatic void SetParametersForGetWindowedWaveform(int half_window_length,\n    int x_length, double currnet_position, int fs, double current_f0,\n    int *base_index, int *safe_index, double *window) {\n  for (int i = -half_window_length; i <= half_window_length; ++i)\n    base_index[i + half_window_length] = i;\n  int origin = matlab_round(currnet_position * fs + 0.001);\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    safe_index[i] =\n      MyMinInt(x_length - 1, MyMaxInt(0, origin + base_index[i]));\n\n  // Designing of the window function\n  double average = 0.0;\n  double position;\n  for (int i = 0; i <= half_window_length * 2; ++i) {\n    position = base_index[i] / 1.5 / fs;\n    window[i] = 0.5 * cos(world::kPi * position * current_f0) + 0.5;\n    average += window[i] * window[i];\n  }\n  average = sqrt(average);\n  for (int i = 0; i <= half_window_length * 2; ++i) window[i] /= average;\n}\n\n//-----------------------------------------------------------------------------\n// GetWindowedWaveform() windows the waveform by F0-adaptive window\n//-----------------------------------------------------------------------------\nstatic void GetWindowedWaveform(const double *x, int x_length, int fs,\n    double current_f0, double currnet_position,\n    const ForwardRealFFT *forward_real_fft) {\n  int half_window_length = matlab_round(1.5 * fs / current_f0);\n\n  int *base_index = new int[half_window_length * 2 + 1];\n  int *safe_index = new int[half_window_length * 2 + 1];\n  double *window  = new double[half_window_length * 2 + 1];\n\n  SetParametersForGetWindowedWaveform(half_window_length, x_length,\n      currnet_position, fs, current_f0, base_index, safe_index, window);\n\n  // F0-adaptive windowing\n  double *waveform = forward_real_fft->waveform;\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    waveform[i] = x[safe_index[i]] * window[i] +\n      randn() * world::kMySafeGuardMinimum;\n  double tmp_weight1 = 0;\n  double tmp_weight2 = 0;\n  for (int i = 0; i <= half_window_length * 2; ++i) {\n    tmp_weight1 += waveform[i];\n    tmp_weight2 += window[i];\n  }\n  double weighting_coefficient = tmp_weight1 / tmp_weight2;\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    waveform[i] -= window[i] * weighting_coefficient;\n\n  delete[] base_index;\n  delete[] safe_index;\n  delete[] window;\n}\n\n//-----------------------------------------------------------------------------\n// AddInfinitesimalNoise()\n//-----------------------------------------------------------------------------\nstatic void AddInfinitesimalNoise(const double *input_spectrum, int fft_size,\n    double *output_spectrum) {\n  for (int i = 0; i <= fft_size / 2; ++i)\n    output_spectrum[i] = input_spectrum[i] + fabs(randn()) * world::kEps;\n}\n\n//-----------------------------------------------------------------------------\n// CheapTrickGeneralBody() calculates a spectral envelope at a temporal\n// position. This function is only used in CheapTrick().\n// Caution:\n//   forward_fft is allocated in advance to speed up the processing.\n//-----------------------------------------------------------------------------\nstatic void CheapTrickGeneralBody(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position, double q1,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft, double *spectral_envelope) {\n  // F0-adaptive windowing\n  GetWindowedWaveform(x, x_length, fs, current_f0, current_position,\n      forward_real_fft);\n\n  // Calculate power spectrum with DC correction\n  // Note: The calculated power spectrum is stored in an array for waveform.\n  // In this imprementation, power spectrum is transformed by FFT (NOT IFFT).\n  // However, the same result is obtained.\n  // This is tricky but important for simple implementation.\n  GetPowerSpectrum(fs, current_f0, fft_size, forward_real_fft);\n\n  // Smoothing of the power (linear axis)\n  // forward_real_fft.waveform is the power spectrum.\n  LinearSmoothing(forward_real_fft->waveform, current_f0 * 2.0 / 3.0,\n      fs, fft_size, forward_real_fft->waveform);\n\n  // Add infinitesimal noise\n  // This is a safeguard to avoid including zero in the spectrum.\n  AddInfinitesimalNoise(forward_real_fft->waveform, fft_size,\n      forward_real_fft->waveform);\n\n  // Smoothing (log axis) and spectral recovery on the cepstrum domain.\n  SmoothingWithRecovery(current_f0, fs, fft_size, q1, forward_real_fft,\n      inverse_real_fft, spectral_envelope);\n}\n\n}  // namespace\n\nint GetFFTSizeForCheapTrick(int fs, const CheapTrickOption *option) {\n  return static_cast<int>(pow(2.0, 1.0 +\n      static_cast<int>(log(3.0 * fs / option->f0_floor + 1) / world::kLog2)));\n}\n\ndouble GetF0FloorForCheapTrick(int fs, int fft_size) {\n  return 3.0 * fs / (fft_size - 3.0);\n}\n\nvoid CheapTrick(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    const CheapTrickOption *option, double **spectrogram) {\n  int fft_size = option->fft_size;\n\n  randn_reseed();\n\n  double f0_floor = GetF0FloorForCheapTrick(fs, fft_size);\n  double *spectral_envelope = new double[fft_size];\n\n  ForwardRealFFT forward_real_fft = {0};\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n  InverseRealFFT inverse_real_fft = {0};\n  InitializeInverseRealFFT(fft_size, &inverse_real_fft);\n\n  double current_f0;\n  for (int i = 0; i < f0_length; ++i) {\n    current_f0 = f0[i] <= f0_floor ? world::kDefaultF0 : f0[i];\n    CheapTrickGeneralBody(x, x_length, fs, current_f0, fft_size,\n        temporal_positions[i], option->q1, &forward_real_fft,\n        &inverse_real_fft, spectral_envelope);\n    for (int j = 0; j <= fft_size / 2; ++j)\n      spectrogram[i][j] = spectral_envelope[j];\n  }\n\n  DestroyForwardRealFFT(&forward_real_fft);\n  DestroyInverseRealFFT(&inverse_real_fft);\n  delete[] spectral_envelope;\n}\n\nvoid InitializeCheapTrickOption(int fs, CheapTrickOption *option) {\n  // q1 is the parameter used for the spectral recovery.\n  // Since The parameter is optimized, you don't need to change the parameter.\n  option->q1 = -0.15;\n  // f0_floor and fs are used to determine fft_size;\n  // We strongly recommend not to change this value unless you have enough\n  // knowledge of the signal processing in CheapTrick.\n  option->f0_floor = world::kFloorF0;\n  option->fft_size = GetFFTSizeForCheapTrick(fs, option);\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/codec.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2017 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Coder/decoder functions for the spectral envelope and aperiodicity.\n//-----------------------------------------------------------------------------\n#include \"world/codec.h\"\n\n#include <math.h>\n\n#include \"world/constantnumbers.h\"\n#include \"world/fft.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n//-----------------------------------------------------------------------------\n// Aperiodicity is initialized by the value 1.0 - world::kMySafeGuardMinimum.\n// This value means the frame/frequency index is aperiodic.\n//-----------------------------------------------------------------------------\nstatic void InitializeAperiodicity(int f0_length, int fft_size,\n    double **aperiodicity) {\n  for (int i = 0; i < f0_length; ++i)\n    for (int j = 0; j < fft_size / 2 + 1; ++j)\n      aperiodicity[i][j] = 1.0 - world::kMySafeGuardMinimum;\n}\n\n//-----------------------------------------------------------------------------\n// This function identifies whether this frame is voiced or unvoiced.\n//-----------------------------------------------------------------------------\nstatic int CheckVUV(const double *coarse_aperiodicity,\n    int number_of_aperiodicities, double *tmp_aperiodicity) {\n  double tmp = 0.0;\n  for (int i = 0; i < number_of_aperiodicities; ++i) {\n    tmp += coarse_aperiodicity[i];\n    tmp_aperiodicity[i + 1] = coarse_aperiodicity[i];\n  }\n  tmp /= number_of_aperiodicities;\n\n  return tmp > -0.5 ? 1 : 0;  // -0.5 is not optimized, but okay.\n}\n\n//-----------------------------------------------------------------------------\n// Aperiodicity is obtained from the coded aperiodicity.\n//-----------------------------------------------------------------------------\nstatic void GetAperiodicity(const double *coarse_frequency_axis,\n    const double *coarse_aperiodicity, int number_of_aperiodicities,\n    const double *frequency_axis, int fft_size, double *aperiodicity) {\n  interp1(coarse_frequency_axis, coarse_aperiodicity,\n      number_of_aperiodicities + 2, frequency_axis, fft_size / 2 + 1,\n      aperiodicity);\n  for (int i = 0; i <= fft_size / 2; ++i)\n    aperiodicity[i] = pow(10.0, aperiodicity[i] / 20.0);\n}\n\n//-----------------------------------------------------------------------------\n// Frequency is converted into its mel representation.\n//-----------------------------------------------------------------------------\nstatic inline double FrequencyToMel(double frequency) {\n  return world::kM0 * log(frequency / world::kF0 + 1.0);\n}\n\n//-----------------------------------------------------------------------------\n// Mel is converted into frequency.\n//-----------------------------------------------------------------------------\nstatic inline double MelToFrequency(double mel) {\n  return world::kF0 * (exp(mel / world::kM0) - 1.0);\n}\n\n//-----------------------------------------------------------------------------\n// DCT for spectral envelope coding\n//-----------------------------------------------------------------------------\nstatic void DCTForCodec(const double *mel_spectrum, int max_dimension,\n    const fft_complex *weight, const ForwardRealFFT *forward_real_fft,\n    int number_of_dimensions, double *mel_cepstrum) {\n  int bias = max_dimension / 2;\n  for (int i = 0; i < max_dimension / 2; ++i) {\n    forward_real_fft->waveform[i] = mel_spectrum[i * 2];\n    forward_real_fft->waveform[i + bias] =\n      mel_spectrum[max_dimension - (i * 2) - 1];\n  }\n  fft_execute(forward_real_fft->forward_fft);\n\n  double normalization = sqrt(forward_real_fft->fft_size);\n  for (int i = 0; i < number_of_dimensions; ++i)\n    mel_cepstrum[i] = (forward_real_fft->spectrum[i][0] * weight[i][0] -\n      forward_real_fft->spectrum[i][1] * weight[i][1]) / normalization;\n}\n\n//-----------------------------------------------------------------------------\n// IDCT for spectral envelope decoding\n//-----------------------------------------------------------------------------\nstatic void IDCTForCodec(const double *mel_cepstrum, int max_dimension,\n    const fft_complex *weight, const InverseComplexFFT *inverse_complex_fft,\n    int number_of_dimensions, double *mel_spectrum) {\n  double normalization = sqrt(inverse_complex_fft->fft_size);\n  for (int i = 0; i < number_of_dimensions; ++i) {\n    inverse_complex_fft->input[i][0] =\n      mel_cepstrum[i] * weight[i][0] * normalization;\n    inverse_complex_fft->input[i][1] =\n      -mel_cepstrum[i] * weight[i][1] * normalization;\n  }\n  for (int i = number_of_dimensions; i < max_dimension; ++i) {\n    inverse_complex_fft->input[i][0] = 0.0;\n    inverse_complex_fft->input[i][1] = 0.0;\n  }\n\n  fft_execute(inverse_complex_fft->inverse_fft);\n\n  for (int i = 0; i < max_dimension / 2; ++i) {\n    mel_spectrum[i * 2] = inverse_complex_fft->output[i][0];\n    mel_spectrum[(i * 2) + 1] =\n      inverse_complex_fft->output[max_dimension - i - 1][0];\n  }\n}\n\n//-----------------------------------------------------------------------------\n// Spectral envelope in a frame is coded\n//-----------------------------------------------------------------------------\nstatic void CodeOneFrame(const double *log_spectral_envelope,\n    const double *frequency_axis, int fft_size, const double *mel_axis,\n    const fft_complex *weight, int max_dimension, int number_of_dimensions,\n    const ForwardRealFFT *forward_real_fft, double *coded_spectral_envelope) {\n  double *mel_spectrum = new double[max_dimension];\n  interp1(frequency_axis, log_spectral_envelope, fft_size / 2 + 1,\n      mel_axis, max_dimension, mel_spectrum);\n\n  // DCT\n  DCTForCodec(mel_spectrum, max_dimension, weight, forward_real_fft,\n      number_of_dimensions, coded_spectral_envelope);\n\n  delete[] mel_spectrum;\n}\n\n//-----------------------------------------------------------------------------\n// Coded spectral envelope in a frame is decoded\n//-----------------------------------------------------------------------------\nstatic void DecodeOneFrame(const double *coded_spectral_envelope,\n    const double *frequency_axis, int fft_size, const double *mel_axis,\n    const fft_complex *weight, int max_dimension, int number_of_dimensions,\n    const InverseComplexFFT *inverse_complex_fft, double *spectral_envelope) {\n  double *mel_spectrum = new double[max_dimension + 2];\n\n  // IDCT\n  IDCTForCodec(coded_spectral_envelope, max_dimension, weight,\n      inverse_complex_fft, number_of_dimensions, &mel_spectrum[1]);\n  mel_spectrum[0] = mel_spectrum[1];\n  mel_spectrum[max_dimension + 1] = mel_spectrum[max_dimension];\n\n  interp1(mel_axis, mel_spectrum, max_dimension + 2, frequency_axis,\n      fft_size / 2 + 1, spectral_envelope);\n\n  for (int i = 0; i < fft_size / 2 + 1; ++i)\n    spectral_envelope[i] = exp(spectral_envelope[i] / max_dimension);\n\n  delete[] mel_spectrum;\n}\n\n//-----------------------------------------------------------------------------\n// GetParameters() generates the required parameters.\n//-----------------------------------------------------------------------------\nstatic void GetParametersForCoding(double floor_frequency,\n    double ceil_frequency, int fs, int fft_size, double *mel_axis,\n    double *frequency_axis, fft_complex *weight) {\n  int max_dimension = fft_size / 2;\n  double floor_mel = FrequencyToMel(floor_frequency);\n  double ceil_mel = FrequencyToMel(ceil_frequency);\n\n  // Generate the mel axis and the weighting vector for DCT.\n  for (int i = 0; i < max_dimension; ++i) {\n    mel_axis[i] = (ceil_mel - floor_mel) * i / max_dimension + floor_mel;\n    weight[i][0] = 2.0 * cos(i * world::kPi / fft_size) / sqrt(fft_size);\n    weight[i][1] = 2.0 * sin(i * world::kPi / fft_size) / sqrt(fft_size);\n  }\n  weight[0][0] /= sqrt(2.0);\n\n  // Generate the frequency axis on mel scale\n  for (int i = 0; i <= max_dimension; ++i)\n    frequency_axis[i] = FrequencyToMel(static_cast<double>(i) * fs / fft_size);\n}\n\n//-----------------------------------------------------------------------------\n// GetParameters() generates the required parameters.\n//-----------------------------------------------------------------------------\nstatic void GetParametersForDecoding(double floor_frequency,\n    double ceil_frequency, int fs, int fft_size, int number_of_dimensions,\n    double *mel_axis, double *frequency_axis, fft_complex *weight) {\n  int max_dimension = fft_size / 2;\n  double floor_mel = FrequencyToMel(floor_frequency);\n  double ceil_mel = FrequencyToMel(ceil_frequency);\n\n  // Generate the weighting vector for IDCT.\n  for (int i = 0; i < number_of_dimensions; ++i) {\n    weight[i][0] = cos(i * world::kPi / fft_size) * sqrt(fft_size);\n    weight[i][1] = sin(i * world::kPi / fft_size) * sqrt(fft_size);\n  }\n  weight[0][0] /= sqrt(2.0);\n  // Generate the mel axis for IDCT.\n  for (int i = 0; i < max_dimension; ++i)\n    mel_axis[i + 1] =\n      MelToFrequency((ceil_mel - floor_mel) * i / max_dimension + floor_mel);\n  mel_axis[0] = 0;\n  mel_axis[max_dimension + 1] = fs / 2.0;\n\n  // Generate the frequency axis\n  for (int i = 0; i < fft_size / 2 + 1; ++i)\n    frequency_axis[i] = static_cast<double>(i) * fs / fft_size;\n}\n\n}  // namespace\n\nint GetNumberOfAperiodicities(int fs) {\n  return  static_cast<int>(MyMinDouble(world::kUpperLimit, fs / 2.0 -\n    world::kFrequencyInterval) / world::kFrequencyInterval);\n}\n\nvoid CodeAperiodicity(const double * const *aperiodicity, int f0_length,\n    int fs, int fft_size, double **coded_aperiodicity) {\n  int number_of_aperiodicities = GetNumberOfAperiodicities(fs);\n  double *coarse_frequency_axis = new double[number_of_aperiodicities];\n  for (int i = 0; i < number_of_aperiodicities; ++i)\n    coarse_frequency_axis[i] = world::kFrequencyInterval * (i + 1.0);\n\n  double *log_aperiodicity = new double[fft_size / 2 + 1];\n\n  for (int i = 0; i < f0_length; ++i) {\n    for (int j = 0; j < fft_size / 2 + 1; ++j)\n      log_aperiodicity[j] = 20 * log10(aperiodicity[i][j]);\n    interp1Q(0, static_cast<double>(fs) / fft_size, log_aperiodicity,\n        fft_size / 2 + 1, coarse_frequency_axis, number_of_aperiodicities,\n        coded_aperiodicity[i]);\n  }\n\n  delete[] coarse_frequency_axis;\n  delete[] log_aperiodicity;\n}\n\nvoid DecodeAperiodicity(const double * const *coded_aperiodicity,\n    int f0_length, int fs, int fft_size, double **aperiodicity) {\n  InitializeAperiodicity(f0_length, fft_size, aperiodicity);\n  int number_of_aperiodicities = GetNumberOfAperiodicities(fs);\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  for (int i = 0; i <= fft_size / 2; ++i)\n    frequency_axis[i] = static_cast<double>(fs) / fft_size * i;\n\n  double *coarse_frequency_axis = new double[number_of_aperiodicities + 2];\n  for (int i = 0; i <= number_of_aperiodicities; ++i)\n    coarse_frequency_axis[i] = i * world::kFrequencyInterval;\n  coarse_frequency_axis[number_of_aperiodicities + 1] = fs / 2.0;\n\n  double *coarse_aperiodicity = new double[number_of_aperiodicities + 2];\n  coarse_aperiodicity[0] = -60.0;\n  coarse_aperiodicity[number_of_aperiodicities + 1] =\n    -world::kMySafeGuardMinimum;\n\n  for (int i = 0; i < f0_length; ++i) {\n    if (CheckVUV(coded_aperiodicity[i], number_of_aperiodicities,\n      coarse_aperiodicity) == 1) continue;\n    GetAperiodicity(coarse_frequency_axis, coarse_aperiodicity,\n        number_of_aperiodicities, frequency_axis, fft_size, aperiodicity[i]);\n  }\n\n  delete[] coarse_aperiodicity;\n  delete[] coarse_frequency_axis;\n  delete[] frequency_axis;\n}\n\nvoid CodeSpectralEnvelope(const double * const *spectrogram, int f0_length,\n    int fs, int fft_size, int number_of_dimensions,\n    double **coded_spectral_envelope) {\n  double *mel_axis = new double[fft_size / 2];\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  double *tmp_spectrum = new double[fft_size / 2 + 1];\n  fft_complex *weight = new fft_complex[fft_size / 2];\n\n  // Generation of the required parameters\n  GetParametersForCoding(world::kFloorFrequency,\n      MyMinDouble(fs / 2.0, world::kCeilFrequency), fs, fft_size,\n      mel_axis, frequency_axis, weight);\n\n  ForwardRealFFT forward_real_fft = { 0 };\n  InitializeForwardRealFFT(fft_size / 2, &forward_real_fft);\n\n  for (int i = 0; i < f0_length; ++i) {\n    for (int j = 0; j < fft_size / 2 + 1; ++j)\n      tmp_spectrum[j] = log(spectrogram[i][j]);\n    CodeOneFrame(tmp_spectrum, frequency_axis, fft_size, mel_axis, weight,\n        fft_size / 2, number_of_dimensions, &forward_real_fft,\n        coded_spectral_envelope[i]);\n  }\n\n  DestroyForwardRealFFT(&forward_real_fft);\n  delete[] weight;\n  delete[] tmp_spectrum;\n  delete[] frequency_axis;\n  delete[] mel_axis;\n}\n\nvoid DecodeSpectralEnvelope(const double * const *coded_spectral_envelope,\n    int f0_length, int fs, int fft_size, int number_of_dimensions,\n    double **spectrogram) {\n  double *mel_axis = new double[fft_size / 2 + 2];\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  fft_complex *weight = new fft_complex[fft_size / 2];\n\n  // Generation of the required parameters\n  GetParametersForDecoding(world::kFloorFrequency,\n      MyMinDouble(fs / 2.0, world::kCeilFrequency),\n      fs, fft_size, number_of_dimensions, mel_axis, frequency_axis, weight);\n\n  InverseComplexFFT inverse_complex_fft = { 0 };\n  InitializeInverseComplexFFT(fft_size / 2, &inverse_complex_fft);\n\n  for (int i = 0; i < f0_length; ++i) {\n    DecodeOneFrame(coded_spectral_envelope[i], frequency_axis, fft_size,\n        mel_axis, weight, fft_size / 2, number_of_dimensions,\n        &inverse_complex_fft, spectrogram[i]);\n  }\n\n  DestroyInverseComplexFFT(&inverse_complex_fft);\n  delete[] weight;\n  delete[] frequency_axis;\n  delete[] mel_axis;\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/common.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// common.cpp includes functions used in at least two files.\n// (1) Common functions\n// (2) FFT, IFFT and minimum phase analysis.\n//\n// In FFT analysis and minimum phase analysis,\n// Functions \"Initialize*()\" allocate the mamory.\n// Functions \"Destroy*()\" free the accolated memory.\n// FFT size is used for initialization, and structs are used to keep the memory.\n// Functions \"GetMinimumPhaseSpectrum()\" calculate minimum phase spectrum.\n// Forward and inverse FFT do not have the function \"Get*()\",\n// because forward FFT and inverse FFT can run in one step.\n//\n//-----------------------------------------------------------------------------\n#include \"world/common.h\"\n\n#include <math.h>\n\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\nstatic void SetParametersForLinearSmoothing(int boundary, int fft_size, int fs,\n    double width, const double *power_spectrum, double *mirroring_spectrum,\n    double *mirroring_segment, double *frequency_axis) {\n  for (int i = 0; i < boundary; ++i)\n    mirroring_spectrum[i] = power_spectrum[boundary - i];\n  for (int i = boundary; i < fft_size / 2 + boundary; ++i)\n    mirroring_spectrum[i] = power_spectrum[i - boundary];\n  for (int i = fft_size / 2 + boundary; i <= fft_size / 2 + boundary * 2; ++i)\n    mirroring_spectrum[i] =\n      power_spectrum[fft_size / 2 - (i - (fft_size / 2 + boundary))];\n\n  mirroring_segment[0] = mirroring_spectrum[0] * fs / fft_size;\n  for (int i = 1; i < fft_size / 2 + boundary * 2 + 1; ++i)\n    mirroring_segment[i] = mirroring_spectrum[i] * fs / fft_size +\n    mirroring_segment[i - 1];\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    frequency_axis[i] = static_cast<double>(i) / fft_size *\n    fs - width / 2.0;\n}\n\n}  // namespace\n\n//-----------------------------------------------------------------------------\nint GetSuitableFFTSize(int sample) {\n  return static_cast<int>(pow(2.0,\n    static_cast<int>(log(static_cast<double>(sample)) / world::kLog2) + 1.0));\n}\n\nvoid DCCorrection(const double *input, double f0, int fs, int fft_size,\n    double *output) {\n  int upper_limit = 2 + static_cast<int>(f0 * fft_size / fs);\n  double *low_frequency_replica = new double[upper_limit];\n  double *low_frequency_axis = new double[upper_limit];\n\n  for (int i = 0; i < upper_limit; ++i)\n    low_frequency_axis[i] = static_cast<double>(i) * fs / fft_size;\n\n  int upper_limit_replica = upper_limit - 1;\n  interp1Q(f0 - low_frequency_axis[0],\n      -static_cast<double>(fs) / fft_size, input, upper_limit + 1,\n      low_frequency_axis, upper_limit_replica, low_frequency_replica);\n\n  for (int i = 0; i < upper_limit_replica; ++i)\n    output[i] = input[i] + low_frequency_replica[i];\n\n  delete[] low_frequency_replica;\n  delete[] low_frequency_axis;\n}\n\nvoid LinearSmoothing(const double *input, double width, int fs, int fft_size,\n    double *output) {\n  int boundary = static_cast<int>(width * fft_size / fs) + 1;\n\n  // These parameters are set by the other function.\n  double *mirroring_spectrum = new double[fft_size / 2 + boundary * 2 + 1];\n  double *mirroring_segment = new double[fft_size / 2 + boundary * 2 + 1];\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  SetParametersForLinearSmoothing(boundary, fft_size, fs, width,\n      input, mirroring_spectrum, mirroring_segment, frequency_axis);\n\n  double *low_levels = new double[fft_size / 2 + 1];\n  double *high_levels = new double[fft_size / 2 + 1];\n  double origin_of_mirroring_axis = -(boundary - 0.5) * fs / fft_size;\n  double discrete_frequency_interval = static_cast<double>(fs) / fft_size;\n\n  interp1Q(origin_of_mirroring_axis, discrete_frequency_interval,\n      mirroring_segment, fft_size / 2 + boundary * 2 + 1, frequency_axis,\n      fft_size / 2 + 1, low_levels);\n\n  for (int i = 0; i <= fft_size / 2; ++i) frequency_axis[i] += width;\n\n  interp1Q(origin_of_mirroring_axis, discrete_frequency_interval,\n      mirroring_segment, fft_size / 2 + boundary * 2 + 1, frequency_axis,\n      fft_size / 2 + 1, high_levels);\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    output[i] = (high_levels[i] - low_levels[i]) / width;\n\n  delete[] mirroring_spectrum;\n  delete[] mirroring_segment;\n  delete[] frequency_axis;\n  delete[] low_levels;\n  delete[] high_levels;\n}\n\nvoid NuttallWindow(int y_length, double *y) {\n  double tmp;\n  for (int i = 0; i < y_length; ++i) {\n    tmp  = i / (y_length - 1.0);\n    y[i] = 0.355768 - 0.487396 * cos(2.0 * world::kPi * tmp) +\n      0.144232 * cos(4.0 * world::kPi * tmp) -\n      0.012604 * cos(6.0 * world::kPi * tmp);\n  }\n}\n\n//-----------------------------------------------------------------------------\n// FFT, IFFT and minimum phase analysis\nvoid InitializeForwardRealFFT(int fft_size, ForwardRealFFT *forward_real_fft) {\n  forward_real_fft->fft_size = fft_size;\n  forward_real_fft->waveform = new double[fft_size];\n  forward_real_fft->spectrum = new fft_complex[fft_size];\n  forward_real_fft->forward_fft = fft_plan_dft_r2c_1d(fft_size,\n      forward_real_fft->waveform, forward_real_fft->spectrum, FFT_ESTIMATE);\n}\n\nvoid DestroyForwardRealFFT(ForwardRealFFT *forward_real_fft) {\n  fft_destroy_plan(forward_real_fft->forward_fft);\n  delete[] forward_real_fft->spectrum;\n  delete[] forward_real_fft->waveform;\n}\n\nvoid InitializeInverseRealFFT(int fft_size, InverseRealFFT *inverse_real_fft) {\n  inverse_real_fft->fft_size = fft_size;\n  inverse_real_fft->waveform = new double[fft_size];\n  inverse_real_fft->spectrum = new fft_complex[fft_size];\n  inverse_real_fft->inverse_fft = fft_plan_dft_c2r_1d(fft_size,\n      inverse_real_fft->spectrum, inverse_real_fft->waveform, FFT_ESTIMATE);\n}\n\nvoid DestroyInverseRealFFT(InverseRealFFT *inverse_real_fft) {\n  fft_destroy_plan(inverse_real_fft->inverse_fft);\n  delete[] inverse_real_fft->spectrum;\n  delete[] inverse_real_fft->waveform;\n}\n\nvoid InitializeInverseComplexFFT(int fft_size,\n    InverseComplexFFT *inverse_complex_fft) {\n  inverse_complex_fft->fft_size = fft_size;\n  inverse_complex_fft->input = new fft_complex[fft_size];\n  inverse_complex_fft->output = new fft_complex[fft_size];\n  inverse_complex_fft->inverse_fft = fft_plan_dft_1d(fft_size,\n    inverse_complex_fft->input, inverse_complex_fft->output,\n    FFT_BACKWARD, FFT_ESTIMATE);\n}\n\nvoid DestroyInverseComplexFFT(InverseComplexFFT *inverse_complex_fft) {\n  fft_destroy_plan(inverse_complex_fft->inverse_fft);\n  delete[] inverse_complex_fft->input;\n  delete[] inverse_complex_fft->output;\n}\n\nvoid InitializeMinimumPhaseAnalysis(int fft_size,\n    MinimumPhaseAnalysis *minimum_phase) {\n  minimum_phase->fft_size = fft_size;\n  minimum_phase->log_spectrum = new double[fft_size];\n  minimum_phase->minimum_phase_spectrum = new fft_complex[fft_size];\n  minimum_phase->cepstrum = new fft_complex[fft_size];\n  minimum_phase->inverse_fft = fft_plan_dft_r2c_1d(fft_size,\n      minimum_phase->log_spectrum, minimum_phase->cepstrum, FFT_ESTIMATE);\n  minimum_phase->forward_fft = fft_plan_dft_1d(fft_size,\n      minimum_phase->cepstrum, minimum_phase->minimum_phase_spectrum,\n      FFT_FORWARD, FFT_ESTIMATE);\n}\n\nvoid GetMinimumPhaseSpectrum(const MinimumPhaseAnalysis *minimum_phase) {\n  // Mirroring\n  for (int i = minimum_phase->fft_size / 2 + 1;\n      i < minimum_phase->fft_size; ++i)\n    minimum_phase->log_spectrum[i] =\n    minimum_phase->log_spectrum[minimum_phase->fft_size - i];\n\n  // This fft_plan carries out \"forward\" FFT.\n  // To carriy out the Inverse FFT, the sign of imaginary part\n  // is inverted after FFT.\n  fft_execute(minimum_phase->inverse_fft);\n  minimum_phase->cepstrum[0][1] *= -1.0;\n  for (int i = 1; i < minimum_phase->fft_size / 2; ++i) {\n    minimum_phase->cepstrum[i][0] *= 2.0;\n    minimum_phase->cepstrum[i][1] *= -2.0;\n  }\n  minimum_phase->cepstrum[minimum_phase->fft_size / 2][1] *= -1.0;\n  for (int i = minimum_phase->fft_size / 2 + 1;\n      i < minimum_phase->fft_size; ++i) {\n    minimum_phase->cepstrum[i][0] = 0.0;\n    minimum_phase->cepstrum[i][1] = 0.0;\n  }\n\n  fft_execute(minimum_phase->forward_fft);\n\n  // Since x is complex number, calculation of exp(x) is as following.\n  // Note: This FFT library does not keep the aliasing.\n  double tmp;\n  for (int i = 0; i <= minimum_phase->fft_size / 2; ++i) {\n    tmp = exp(minimum_phase->minimum_phase_spectrum[i][0] /\n      minimum_phase->fft_size);\n    minimum_phase->minimum_phase_spectrum[i][0] = tmp *\n      cos(minimum_phase->minimum_phase_spectrum[i][1] /\n      minimum_phase->fft_size);\n    minimum_phase->minimum_phase_spectrum[i][1] = tmp *\n      sin(minimum_phase->minimum_phase_spectrum[i][1] /\n      minimum_phase->fft_size);\n  }\n}\n\nvoid DestroyMinimumPhaseAnalysis(MinimumPhaseAnalysis *minimum_phase) {\n  fft_destroy_plan(minimum_phase->forward_fft);\n  fft_destroy_plan(minimum_phase->inverse_fft);\n  delete[] minimum_phase->cepstrum;\n  delete[] minimum_phase->log_spectrum;\n  delete[] minimum_phase->minimum_phase_spectrum;\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/d4c.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Band-aperiodicity estimation on the basis of the idea of D4C.\n//-----------------------------------------------------------------------------\n#include \"world/d4c.h\"\n\n#include <math.h>\n#include <algorithm>  // for std::sort()\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n//-----------------------------------------------------------------------------\n// SetParametersForGetWindowedWaveform()\n//-----------------------------------------------------------------------------\nstatic void SetParametersForGetWindowedWaveform(int half_window_length,\n    int x_length, double current_position, int fs, double current_f0,\n    int window_type, double window_length_ratio, int *base_index,\n    int *safe_index, double *window) {\n  for (int i = -half_window_length; i <= half_window_length; ++i)\n    base_index[i + half_window_length] = i;\n  int origin = matlab_round(current_position * fs + 0.001);\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    safe_index[i] =\n      MyMinInt(x_length - 1, MyMaxInt(0, origin + base_index[i]));\n\n  // Designing of the window function\n  double position;\n  if (window_type == world::kHanning) {  // Hanning window\n    for (int i = 0; i <= half_window_length * 2; ++i) {\n      position = (2.0 * base_index[i] / window_length_ratio) / fs;\n      window[i] = 0.5 * cos(world::kPi * position * current_f0) + 0.5;\n    }\n  } else {  // Blackman window\n    for (int i = 0; i <= half_window_length * 2; ++i) {\n      position = (2.0 * base_index[i] / window_length_ratio) / fs;\n      window[i] = 0.42 + 0.5 * cos(world::kPi * position * current_f0) +\n        0.08 * cos(world::kPi * position * current_f0 * 2);\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetWindowedWaveform() windows the waveform by F0-adaptive window\n// In the variable window_type, 1: hanning, 2: blackman\n//-----------------------------------------------------------------------------\nstatic void GetWindowedWaveform(const double *x, int x_length, int fs,\n    double current_f0, double current_position, int window_type,\n    double window_length_ratio, double *waveform) {\n  int half_window_length =\n    matlab_round(window_length_ratio * fs / current_f0 / 2.0);\n\n  int *base_index = new int[half_window_length * 2 + 1];\n  int *safe_index = new int[half_window_length * 2 + 1];\n  double *window  = new double[half_window_length * 2 + 1];\n\n  SetParametersForGetWindowedWaveform(half_window_length, x_length,\n      current_position, fs, current_f0, window_type, window_length_ratio,\n      base_index, safe_index, window);\n\n  // F0-adaptive windowing\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    waveform[i] =\n      x[safe_index[i]] * window[i] + randn() * world::kMySafeGuardMinimum;\n\n  double tmp_weight1 = 0;\n  double tmp_weight2 = 0;\n  for (int i = 0; i <= half_window_length * 2; ++i) {\n    tmp_weight1 += waveform[i];\n    tmp_weight2 += window[i];\n  }\n  double weighting_coefficient = tmp_weight1 / tmp_weight2;\n  for (int i = 0; i <= half_window_length * 2; ++i)\n    waveform[i] -= window[i] * weighting_coefficient;\n\n  delete[] base_index;\n  delete[] safe_index;\n  delete[] window;\n}\n\n//-----------------------------------------------------------------------------\n// GetCentroid() calculates the energy centroid (see the book, time-frequency\n// analysis written by L. Cohen).\n//-----------------------------------------------------------------------------\nstatic void GetCentroid(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position,\n    const ForwardRealFFT *forward_real_fft, double *centroid) {\n  for (int i = 0; i < fft_size; ++i) forward_real_fft->waveform[i] = 0.0;\n  GetWindowedWaveform(x, x_length, fs, current_f0,\n      current_position, world::kBlackman, 4.0, forward_real_fft->waveform);\n  double power = 0.0;\n  for (int i = 0; i <= matlab_round(2.0 * fs / current_f0) * 2; ++i)\n    power += forward_real_fft->waveform[i] * forward_real_fft->waveform[i];\n  for (int i = 0; i <= matlab_round(2.0 * fs / current_f0) * 2; ++i)\n    forward_real_fft->waveform[i] /= sqrt(power);\n\n  fft_execute(forward_real_fft->forward_fft);\n  double *tmp_real = new double[fft_size / 2 + 1];\n  double *tmp_imag = new double[fft_size / 2 + 1];\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    tmp_real[i] = forward_real_fft->spectrum[i][0];\n    tmp_imag[i] = forward_real_fft->spectrum[i][1];\n  }\n\n  for (int i = 0; i < fft_size; ++i)\n    forward_real_fft->waveform[i] *= i + 1.0;\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i)\n    centroid[i] = forward_real_fft->spectrum[i][0] * tmp_real[i] +\n      tmp_imag[i] * forward_real_fft->spectrum[i][1];\n\n  delete[] tmp_real;\n  delete[] tmp_imag;\n}\n\n//-----------------------------------------------------------------------------\n// GetStaticCentroid() calculates the temporally static energy centroid.\n// Basic idea was proposed by H. Kawahara.\n//-----------------------------------------------------------------------------\nstatic void GetStaticCentroid(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position,\n    const ForwardRealFFT *forward_real_fft, double *static_centroid) {\n  double *centroid1 = new double[fft_size / 2 + 1];\n  double *centroid2 = new double[fft_size / 2 + 1];\n\n  GetCentroid(x, x_length, fs, current_f0, fft_size,\n      current_position - 0.25 / current_f0, forward_real_fft, centroid1);\n  GetCentroid(x, x_length, fs, current_f0, fft_size,\n      current_position + 0.25 / current_f0, forward_real_fft, centroid2);\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    static_centroid[i] = centroid1[i] + centroid2[i];\n\n  DCCorrection(static_centroid, current_f0, fs, fft_size, static_centroid);\n  delete[] centroid1;\n  delete[] centroid2;\n}\n\n//-----------------------------------------------------------------------------\n// GetSmoothedPowerSpectrum() calculates the smoothed power spectrum.\n// The parameters used for smoothing are optimized in davance.\n//-----------------------------------------------------------------------------\nstatic void GetSmoothedPowerSpectrum(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position,\n    const ForwardRealFFT *forward_real_fft, double *smoothed_power_spectrum) {\n  for (int i = 0; i < fft_size; ++i) forward_real_fft->waveform[i] = 0.0;\n  GetWindowedWaveform(x, x_length, fs, current_f0,\n      current_position, world::kHanning, 4.0, forward_real_fft->waveform);\n\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i)\n    smoothed_power_spectrum[i] =\n      forward_real_fft->spectrum[i][0] * forward_real_fft->spectrum[i][0] +\n      forward_real_fft->spectrum[i][1] * forward_real_fft->spectrum[i][1];\n  DCCorrection(smoothed_power_spectrum, current_f0, fs, fft_size,\n      smoothed_power_spectrum);\n  LinearSmoothing(smoothed_power_spectrum, current_f0, fs, fft_size,\n      smoothed_power_spectrum);\n}\n\n//-----------------------------------------------------------------------------\n// GetStaticGroupDelay() calculates the temporally static group delay.\n// This is the fundamental parameter in D4C.\n//-----------------------------------------------------------------------------\nstatic void GetStaticGroupDelay(const double *static_centroid,\n    const double *smoothed_power_spectrum, int fs, double f0,\n    int fft_size, double *static_group_delay) {\n  for (int i = 0; i <= fft_size / 2; ++i)\n    static_group_delay[i] = static_centroid[i] / smoothed_power_spectrum[i];\n  LinearSmoothing(static_group_delay, f0 / 2.0, fs, fft_size,\n      static_group_delay);\n\n  double *smoothed_group_delay = new double[fft_size / 2 + 1];\n  LinearSmoothing(static_group_delay, f0, fs, fft_size,\n      smoothed_group_delay);\n\n  for (int i = 0; i <= fft_size / 2; ++i)\n    static_group_delay[i] -= smoothed_group_delay[i];\n\n  delete[] smoothed_group_delay;\n}\n\n//-----------------------------------------------------------------------------\n// GetCoarseAperiodicity() calculates the aperiodicity in multiples of 3 kHz.\n// The upper limit is given based on the sampling frequency.\n//-----------------------------------------------------------------------------\nstatic void GetCoarseAperiodicity(const double *static_group_delay, int fs,\n    int fft_size, int number_of_aperiodicities, const double *window,\n    int window_length, const ForwardRealFFT *forward_real_fft,\n    double *coarse_aperiodicity) {\n  int boundary =\n    matlab_round(fft_size * 8.0 / window_length);\n  int half_window_length = window_length / 2;\n\n  for (int i = 0; i < fft_size; ++i) forward_real_fft->waveform[i] = 0.0;\n\n  double *power_spectrum = new double[fft_size / 2 + 1];\n  int center;\n  for (int i = 0; i < number_of_aperiodicities; ++i) {\n    center =\n      static_cast<int>(world::kFrequencyInterval * (i + 1) * fft_size / fs);\n    for (int j = 0; j <= half_window_length * 2; ++j)\n      forward_real_fft->waveform[j] =\n        static_group_delay[center - half_window_length + j] * window[j];\n    fft_execute(forward_real_fft->forward_fft);\n    for (int j = 0 ; j <= fft_size / 2; ++j)\n      power_spectrum[j] =\n        forward_real_fft->spectrum[j][0] * forward_real_fft->spectrum[j][0] +\n        forward_real_fft->spectrum[j][1] * forward_real_fft->spectrum[j][1];\n    std::sort(power_spectrum, power_spectrum + fft_size / 2 + 1);\n    for (int j = 1 ; j <= fft_size / 2; ++j)\n      power_spectrum[j] += power_spectrum[j - 1];\n    coarse_aperiodicity[i] =\n      10 * log10(power_spectrum[fft_size / 2 - boundary - 1] /\n                 power_spectrum[fft_size / 2]);\n  }\n  delete[] power_spectrum;\n}\n\nstatic double D4CLoveTrainSub(const double *x, int fs, int x_length,\n    double current_f0, double current_position, int f0_length, int fft_size,\n    int boundary0, int boundary1, int boundary2,\n    ForwardRealFFT *forward_real_fft) {\n  double *power_spectrum = new double[fft_size];\n\n  int window_length = matlab_round(1.5 * fs / current_f0) * 2 + 1;\n  GetWindowedWaveform(x, x_length, fs, current_f0, current_position,\n    world::kBlackman, 3.0, forward_real_fft->waveform);\n\n  for (int i = window_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n\n  for (int i = 0; i <= boundary0; ++i) power_spectrum[i] = 0.0;\n  for (int i = boundary0 + 1; i < fft_size / 2 + 1; ++i)\n    power_spectrum[i] =\n    forward_real_fft->spectrum[i][0] * forward_real_fft->spectrum[i][0] +\n    forward_real_fft->spectrum[i][1] * forward_real_fft->spectrum[i][1];\n  for (int i = boundary0; i <= boundary2; ++i)\n    power_spectrum[i] += +power_spectrum[i - 1];\n\n  double aperiodicity0 = power_spectrum[boundary1] / power_spectrum[boundary2];\n  delete[] power_spectrum;\n  return aperiodicity0;\n}\n\n//-----------------------------------------------------------------------------\n// D4CLoveTrain() determines the aperiodicity with VUV detection.\n// If a frame was determined as the unvoiced section, aperiodicity is set to\n// very high value as the safeguard.\n// If it was voiced section, the aperiodicity of 0 Hz is set to -60 dB.\n//-----------------------------------------------------------------------------\nstatic void D4CLoveTrain(const double *x, int fs, int x_length,\n    const double *f0, int f0_length, const double *temporal_positions,\n    double *aperiodicity0) {\n  double lowest_f0 = 40.0;\n  int fft_size = static_cast<int>(pow(2.0, 1.0 +\n    static_cast<int>(log(3.0 * fs / lowest_f0 + 1) / world::kLog2)));\n  ForwardRealFFT forward_real_fft = { 0 };\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n\n  // Cumulative powers at 100, 4000, 7900 Hz are used for VUV identification.\n  int boundary0 = static_cast<int>(ceil(100.0 * fft_size / fs));\n  int boundary1 = static_cast<int>(ceil(4000.0 * fft_size / fs));\n  int boundary2 = static_cast<int>(ceil(7900.0 * fft_size / fs));\n  for (int i = 0; i < f0_length; ++i) {\n    if (f0[i] == 0.0) {\n      aperiodicity0[i] = 0.0;\n      continue;\n    }\n    aperiodicity0[i] = D4CLoveTrainSub(x, fs, x_length,\n      MyMaxDouble(f0[i], lowest_f0), temporal_positions[i], f0_length,\n      fft_size, boundary0, boundary1, boundary2, &forward_real_fft);\n  }\n\n  DestroyForwardRealFFT(&forward_real_fft);\n}\n\n//-----------------------------------------------------------------------------\n// D4CGeneralBody() calculates a spectral envelope at a temporal\n// position. This function is only used in D4C().\n// Caution:\n//   forward_fft is allocated in advance to speed up the processing.\n//-----------------------------------------------------------------------------\nstatic void D4CGeneralBody(const double *x, int x_length, int fs,\n    double current_f0, int fft_size, double current_position,\n    int number_of_aperiodicities, const double *window, int window_length,\n    const ForwardRealFFT *forward_real_fft, double *coarse_aperiodicity) {\n  double *static_centroid = new double[fft_size / 2 + 1];\n  double *smoothed_power_spectrum = new double[fft_size / 2 + 1];\n  double *static_group_delay = new double[fft_size / 2 + 1];\n  GetStaticCentroid(x, x_length, fs, current_f0, fft_size, current_position,\n      forward_real_fft, static_centroid);\n  GetSmoothedPowerSpectrum(x, x_length, fs, current_f0, fft_size,\n      current_position, forward_real_fft, smoothed_power_spectrum);\n  GetStaticGroupDelay(static_centroid, smoothed_power_spectrum,\n      fs, current_f0, fft_size, static_group_delay);\n\n  GetCoarseAperiodicity(static_group_delay, fs, fft_size,\n      number_of_aperiodicities, window, window_length, forward_real_fft,\n      coarse_aperiodicity);\n\n  // Revision of the result based on the F0\n  for (int i = 0; i < number_of_aperiodicities; ++i)\n    coarse_aperiodicity[i] = MyMinDouble(0.0,\n      coarse_aperiodicity[i] + (current_f0 - 100) / 50.0);\n\n  delete[] static_centroid;\n  delete[] smoothed_power_spectrum;\n  delete[] static_group_delay;\n}\n\nstatic void InitializeAperiodicity(int f0_length, int fft_size,\n    double **aperiodicity) {\n  for (int i = 0; i < f0_length; ++i)\n    for (int j = 0; j < fft_size / 2 + 1; ++j)\n      aperiodicity[i][j] = 1.0 - world::kMySafeGuardMinimum;\n}\n\nstatic void GetAperiodicity(const double *coarse_frequency_axis,\n    const double *coarse_aperiodicity, int number_of_aperiodicities,\n    const double *frequency_axis, int fft_size, double *aperiodicity) {\n  interp1(coarse_frequency_axis, coarse_aperiodicity,\n    number_of_aperiodicities + 2, frequency_axis, fft_size / 2 + 1,\n    aperiodicity);\n  for (int i = 0; i <= fft_size / 2; ++i)\n    aperiodicity[i] = pow(10.0, aperiodicity[i] / 20.0);\n}\n\n}  // namespace\n\nvoid D4C(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    int fft_size, const D4COption *option, double **aperiodicity) {\n  randn_reseed();\n\n  InitializeAperiodicity(f0_length, fft_size, aperiodicity);\n\n  int fft_size_d4c = static_cast<int>(pow(2.0, 1.0 +\n    static_cast<int>(log(4.0 * fs / world::kFloorF0D4C + 1) /\n      world::kLog2)));\n\n  ForwardRealFFT forward_real_fft = {0};\n  InitializeForwardRealFFT(fft_size_d4c, &forward_real_fft);\n\n  int number_of_aperiodicities =\n    static_cast<int>(MyMinDouble(world::kUpperLimit, fs / 2.0 -\n      world::kFrequencyInterval) / world::kFrequencyInterval);\n  // Since the window function is common in D4CGeneralBody(),\n  // it is designed here to speed up.\n  int window_length =\n    static_cast<int>(world::kFrequencyInterval * fft_size_d4c / fs) * 2 + 1;\n  double *window =  new double[window_length];\n  NuttallWindow(window_length, window);\n\n  // D4C Love Train (Aperiodicity of 0 Hz is given by the different algorithm)\n  double *aperiodicity0 = new double[f0_length];\n  D4CLoveTrain(x, fs, x_length, f0, f0_length, temporal_positions,\n      aperiodicity0);\n\n  double *coarse_aperiodicity = new double[number_of_aperiodicities + 2];\n  coarse_aperiodicity[0] = -60.0;\n  coarse_aperiodicity[number_of_aperiodicities + 1] =\n    -world::kMySafeGuardMinimum;\n  double *coarse_frequency_axis = new double[number_of_aperiodicities + 2];\n  for (int i = 0; i <= number_of_aperiodicities; ++i)\n    coarse_frequency_axis[i] = i * world::kFrequencyInterval;\n  coarse_frequency_axis[number_of_aperiodicities + 1] = fs / 2.0;\n\n  double *frequency_axis = new double[fft_size / 2 + 1];\n  for (int i = 0; i <= fft_size / 2; ++i)\n    frequency_axis[i] = static_cast<double>(i) * fs / fft_size;\n\n  for (int i = 0; i < f0_length; ++i) {\n    if (f0[i] == 0 || aperiodicity0[i] <= option->threshold) continue;\n    D4CGeneralBody(x, x_length, fs, MyMaxDouble(world::kFloorF0D4C, f0[i]),\n        fft_size_d4c, temporal_positions[i], number_of_aperiodicities, window,\n        window_length, &forward_real_fft, &coarse_aperiodicity[1]);\n\n    // Linear interpolation to convert the coarse aperiodicity into its\n    // spectral representation.\n    GetAperiodicity(coarse_frequency_axis, coarse_aperiodicity,\n        number_of_aperiodicities, frequency_axis, fft_size, aperiodicity[i]);\n  }\n\n  DestroyForwardRealFFT(&forward_real_fft);\n  delete[] aperiodicity0;\n  delete[] coarse_frequency_axis;\n  delete[] coarse_aperiodicity;\n  delete[] window;\n  delete[] frequency_axis;\n}\n\nvoid InitializeD4COption(D4COption *option) {\n  option->threshold = world::kThreshold;\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/dio.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// F0 estimation based on DIO (Distributed Inline-filter Operation).\n//-----------------------------------------------------------------------------\n#include \"world/dio.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\n//-----------------------------------------------------------------------------\n// struct for GetFourZeroCrossingIntervals()\n// \"negative\" means \"zero-crossing point going from positive to negative\"\n// \"positive\" means \"zero-crossing point going from negative to positive\"\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double *negative_interval_locations;\n  double *negative_intervals;\n  int number_of_negatives;\n  double *positive_interval_locations;\n  double *positive_intervals;\n  int number_of_positives;\n  double *peak_interval_locations;\n  double *peak_intervals;\n  int number_of_peaks;\n  double *dip_interval_locations;\n  double *dip_intervals;\n  int number_of_dips;\n} ZeroCrossings;\n\nnamespace {\n//-----------------------------------------------------------------------------\n// DesignLowCutFilter() calculates the coefficients the filter.\n//-----------------------------------------------------------------------------\nstatic void DesignLowCutFilter(int N, int fft_size, double *low_cut_filter) {\n  for (int i = 1; i <= N; ++i)\n    low_cut_filter[i - 1] = 0.5 - 0.5 * cos(i * 2.0 * world::kPi / (N + 1));\n  for (int i = N; i < fft_size; ++i) low_cut_filter[i] = 0.0;\n  double sum_of_amplitude = 0.0;\n  for (int i = 0; i < N; ++i) sum_of_amplitude += low_cut_filter[i];\n  for (int i = 0; i < N; ++i)\n    low_cut_filter[i] = -low_cut_filter[i] / sum_of_amplitude;\n  for (int i = 0; i < (N - 1) / 2; ++i)\n    low_cut_filter[fft_size - (N - 1) / 2 + i] = low_cut_filter[i];\n  for (int i = 0; i < N; ++i)\n    low_cut_filter[i] = low_cut_filter[i + (N - 1) / 2];\n  low_cut_filter[0] += 1.0;\n}\n\n//-----------------------------------------------------------------------------\n// GetSpectrumForEstimation() calculates the spectrum for estimation.\n// This function carries out downsampling to speed up the estimation process\n// and calculates the spectrum of the downsampled signal.\n//-----------------------------------------------------------------------------\nstatic void GetSpectrumForEstimation(const double *x, int x_length,\n    int y_length, double actual_fs, int fft_size, int decimation_ratio,\n    fft_complex *y_spectrum) {\n  double *y = new double[fft_size];\n\n  // Initialization\n  for (int i = 0; i < fft_size; ++i) y[i] = 0.0;\n\n  // Downsampling\n  if (decimation_ratio != 1)\n    decimate(x, x_length, decimation_ratio, y);\n  else\n    for (int i = 0; i < x_length; ++i) y[i] = x[i];\n\n  // Removal of the DC component (y = y - mean value of y)\n  double mean_y = 0.0;\n  for (int i = 0; i < y_length; ++i) mean_y += y[i];\n  mean_y /= y_length;\n  for (int i = 0; i < y_length; ++i) y[i] -= mean_y;\n  for (int i = y_length; i < fft_size; ++i) y[i] = 0.0;\n\n  fft_plan forwardFFT =\n    fft_plan_dft_r2c_1d(fft_size, y, y_spectrum, FFT_ESTIMATE);\n  fft_execute(forwardFFT);\n\n  // Low cut filtering (from 0.1.4). Cut off frequency is 50.0 Hz.\n  int cutoff_in_sample = matlab_round(actual_fs / world::kCutOff);\n  DesignLowCutFilter(cutoff_in_sample * 2 + 1, fft_size, y);\n\n  fft_complex *filter_spectrum = new fft_complex[fft_size];\n  forwardFFT.c_out = filter_spectrum;\n  fft_execute(forwardFFT);\n\n  double tmp = 0;\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    // Complex number multiplications.\n    tmp = y_spectrum[i][0] * filter_spectrum[i][0] -\n      y_spectrum[i][1] * filter_spectrum[i][1];\n    y_spectrum[i][1] = y_spectrum[i][0] * filter_spectrum[i][1] +\n      y_spectrum[i][1] * filter_spectrum[i][0];\n    y_spectrum[i][0] = tmp;\n  }\n\n  fft_destroy_plan(forwardFFT);\n  delete[] y;\n  delete[] filter_spectrum;\n}\n\n//-----------------------------------------------------------------------------\n// GetBestF0Contour() calculates the best f0 contour based on scores of\n// all candidates. The F0 with highest score is selected.\n//-----------------------------------------------------------------------------\nstatic void GetBestF0Contour(int f0_length,\n    const double * const * f0_candidates, const double * const * f0_scores,\n    int number_of_bands, double *best_f0_contour) {\n  double tmp;\n  for (int i = 0; i < f0_length; ++i) {\n    tmp = f0_scores[0][i];\n    best_f0_contour[i] = f0_candidates[0][i];\n    for (int j = 1; j < number_of_bands; ++j) {\n      if (tmp > f0_scores[j][i]) {\n        tmp = f0_scores[j][i];\n        best_f0_contour[i] = f0_candidates[j][i];\n      }\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// FixStep1() is the 1st step of the postprocessing.\n// This function eliminates the unnatural change of f0 based on allowed_range.\n//-----------------------------------------------------------------------------\nstatic void FixStep1(const double *best_f0_contour, int f0_length,\n    int voice_range_minimum, double allowed_range, double *f0_step1) {\n  double *f0_base = new double[f0_length];\n  // Initialization\n  for (int i = 0; i < voice_range_minimum; ++i) f0_base[i] = 0.0;\n  for (int i = voice_range_minimum; i < f0_length - voice_range_minimum; ++i)\n    f0_base[i] = best_f0_contour[i];\n  for (int i = f0_length - voice_range_minimum; i < f0_length; ++i)\n    f0_base[i] = 0.0;\n\n  // Processing to prevent the jumping of f0\n  for (int i = 0; i < voice_range_minimum; ++i) f0_step1[i] = 0.0;\n  for (int i = voice_range_minimum; i < f0_length; ++i)\n    f0_step1[i] = fabs((f0_base[i] - f0_base[i - 1]) /\n    (world::kMySafeGuardMinimum + f0_base[i])) <\n    allowed_range ? f0_base[i] : 0.0;\n\n  delete[] f0_base;\n}\n\n//-----------------------------------------------------------------------------\n// FixStep2() is the 2nd step of the postprocessing.\n// This function eliminates the suspected f0 in the anlaut and auslaut.\n//-----------------------------------------------------------------------------\nstatic void FixStep2(const double *f0_step1, int f0_length,\n    int voice_range_minimum, double *f0_step2) {\n  for (int i = 0; i < f0_length; ++i) f0_step2[i] = f0_step1[i];\n\n  int center = (voice_range_minimum - 1) / 2;\n  for (int i = center; i < f0_length - center; ++i) {\n    for (int j = -center; j <= center; ++j) {\n      if (f0_step1[i + j] == 0) {\n        f0_step2[i] = 0.0;\n        break;\n      }\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetNumberOfVoicedSections() counts the number of voiced sections.\n//-----------------------------------------------------------------------------\nstatic void GetNumberOfVoicedSections(const double *f0, int f0_length,\n    int *positive_index, int *negative_index, int *positive_count,\n    int *negative_count) {\n  *positive_count = *negative_count = 0;\n  for (int i = 1; i < f0_length; ++i)\n    if (f0[i] == 0 && f0[i - 1] != 0)\n      negative_index[(*negative_count)++] = i - 1;\n    else\n      if (f0[i - 1] == 0 && f0[i] != 0)\n        positive_index[(*positive_count)++] = i;\n}\n\n//-----------------------------------------------------------------------------\n// SelectOneF0() corrects the f0[current_index] based on\n// f0[current_index + sign].\n//-----------------------------------------------------------------------------\nstatic double SelectBestF0(double current_f0, double past_f0,\n    const double * const * f0_candidates, int number_of_candidates,\n    int target_index, double allowed_range) {\n  double reference_f0 = (current_f0 * 3.0 - past_f0) / 2.0;\n\n  double minimum_error = fabs(reference_f0 - f0_candidates[0][target_index]);\n  double best_f0 = f0_candidates[0][target_index];\n\n  double current_error;\n  for (int i = 1; i < number_of_candidates; ++i) {\n    current_error = fabs(reference_f0 - f0_candidates[i][target_index]);\n    if (current_error < minimum_error) {\n      minimum_error = current_error;\n      best_f0 = f0_candidates[i][target_index];\n    }\n  }\n  if (fabs(1.0 - best_f0 / reference_f0) > allowed_range)\n    return 0.0;\n  return best_f0;\n}\n\n//-----------------------------------------------------------------------------\n// FixStep3() is the 3rd step of the postprocessing.\n// This function corrects the f0 candidates from backward to forward.\n//-----------------------------------------------------------------------------\nstatic void FixStep3(const double *f0_step2, int f0_length,\n    const double * const * f0_candidates, int number_of_candidates,\n    double allowed_range, const int *negative_index, int negative_count,\n    double *f0_step3) {\n  for (int i = 0; i < f0_length; i++) f0_step3[i] = f0_step2[i];\n\n  int limit;\n  for (int i = 0; i < negative_count; ++i) {\n    limit = i == negative_count - 1 ? f0_length - 1 : negative_index[i + 1];\n    for (int j = negative_index[i]; j < limit; ++j) {\n      f0_step3[j + 1] =\n        SelectBestF0(f0_step3[j], f0_step3[j - 1], f0_candidates,\n            number_of_candidates, j + 1, allowed_range);\n      if (f0_step3[j + 1] == 0) break;\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// FixStep4() is the 4th step of the postprocessing.\n// This function corrects the f0 candidates from forward to backward.\n//-----------------------------------------------------------------------------\nstatic void FixStep4(const double *f0_step3, int f0_length,\n    const double * const * f0_candidates, int number_of_candidates,\n    double allowed_range, const int *positive_index, int positive_count,\n    double *f0_step4) {\n  for (int i = 0; i < f0_length; ++i) f0_step4[i] = f0_step3[i];\n\n  int limit;\n  for (int i = positive_count - 1; i >= 0; --i) {\n    limit = i == 0 ? 1 : positive_index[i - 1];\n    for (int j = positive_index[i]; j > limit; --j) {\n      f0_step4[j - 1] =\n        SelectBestF0(f0_step4[j], f0_step4[j + 1], f0_candidates,\n            number_of_candidates, j - 1, allowed_range);\n      if (f0_step4[j - 1] == 0) break;\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// FixF0Contour() calculates the definitive f0 contour based on all f0\n// candidates. There are four steps.\n//-----------------------------------------------------------------------------\nstatic void FixF0Contour(double frame_period, int number_of_candidates,\n    int fs, const double * const * f0_candidates,\n    const double *best_f0_contour, int f0_length, double f0_floor,\n    double allowed_range, double *fixed_f0_contour) {\n  int voice_range_minimum =\n    static_cast<int>(0.5 + 1000.0 / frame_period / f0_floor) * 2 + 1;\n\n  if (f0_length <= voice_range_minimum) return;\n\n  double *f0_tmp1 = new double[f0_length];\n  double *f0_tmp2 = new double[f0_length];\n\n  FixStep1(best_f0_contour, f0_length, voice_range_minimum,\n      allowed_range, f0_tmp1);\n  FixStep2(f0_tmp1, f0_length, voice_range_minimum, f0_tmp2);\n\n  int positive_count, negative_count;\n  int *positive_index = new int[f0_length];\n  int *negative_index = new int[f0_length];\n  GetNumberOfVoicedSections(f0_tmp2, f0_length, positive_index,\n      negative_index, &positive_count, &negative_count);\n  FixStep3(f0_tmp2, f0_length, f0_candidates, number_of_candidates,\n      allowed_range, negative_index, negative_count, f0_tmp1);\n  FixStep4(f0_tmp1, f0_length, f0_candidates, number_of_candidates,\n      allowed_range, positive_index, positive_count, fixed_f0_contour);\n\n  delete[] f0_tmp1;\n  delete[] f0_tmp2;\n  delete[] positive_index;\n  delete[] negative_index;\n}\n\n//-----------------------------------------------------------------------------\n// GetFilteredSignal() calculates the signal that is the convolution of the\n// input signal and low-pass filter.\n// This function is only used in RawEventByDio()\n//-----------------------------------------------------------------------------\nstatic void GetFilteredSignal(int half_average_length, int fft_size,\n    const fft_complex *y_spectrum, int y_length, double *filtered_signal) {\n  double *low_pass_filter = new double[fft_size];\n  // Nuttall window is used as a low-pass filter.\n  // Cutoff frequency depends on the window length.\n  NuttallWindow(half_average_length * 4, low_pass_filter);\n  for (int i = half_average_length * 4; i < fft_size; ++i)\n    low_pass_filter[i] = 0.0;\n\n  fft_complex *low_pass_filter_spectrum = new fft_complex[fft_size];\n  fft_plan forwardFFT = fft_plan_dft_r2c_1d(fft_size, low_pass_filter,\n      low_pass_filter_spectrum, FFT_ESTIMATE);\n  fft_execute(forwardFFT);\n\n  // Convolution\n  double tmp = y_spectrum[0][0] * low_pass_filter_spectrum[0][0] -\n    y_spectrum[0][1] * low_pass_filter_spectrum[0][1];\n  low_pass_filter_spectrum[0][1] =\n    y_spectrum[0][0] * low_pass_filter_spectrum[0][1] +\n    y_spectrum[0][1] * low_pass_filter_spectrum[0][0];\n  low_pass_filter_spectrum[0][0] = tmp;\n  for (int i = 1; i <= fft_size / 2; ++i) {\n    tmp = y_spectrum[i][0] * low_pass_filter_spectrum[i][0] -\n      y_spectrum[i][1] * low_pass_filter_spectrum[i][1];\n    low_pass_filter_spectrum[i][1] =\n      y_spectrum[i][0] * low_pass_filter_spectrum[i][1] +\n      y_spectrum[i][1] * low_pass_filter_spectrum[i][0];\n    low_pass_filter_spectrum[i][0] = tmp;\n    low_pass_filter_spectrum[fft_size - i - 1][0] =\n      low_pass_filter_spectrum[i][0];\n    low_pass_filter_spectrum[fft_size - i - 1][1] =\n      low_pass_filter_spectrum[i][1];\n  }\n\n  fft_plan inverseFFT = fft_plan_dft_c2r_1d(fft_size,\n    low_pass_filter_spectrum, filtered_signal, FFT_ESTIMATE);\n  fft_execute(inverseFFT);\n\n  // Compensation of the delay.\n  int index_bias = half_average_length * 2;\n  for (int i = 0; i < y_length; ++i)\n    filtered_signal[i] = filtered_signal[i + index_bias];\n\n  fft_destroy_plan(inverseFFT);\n  fft_destroy_plan(forwardFFT);\n  delete[] low_pass_filter_spectrum;\n  delete[] low_pass_filter;\n}\n\n//-----------------------------------------------------------------------------\n// CheckEvent() returns 1, provided that the input value is over 1.\n// This function is for RawEventByDio().\n//-----------------------------------------------------------------------------\nstatic inline int CheckEvent(int x) {\n  return x > 0 ? 1 : 0;\n}\n\n//-----------------------------------------------------------------------------\n// ZeroCrossingEngine() calculates the zero crossing points from positive to\n// negative. Thanks to Custom.Maid http://custom-made.seesaa.net/ (2012/8/19)\n//-----------------------------------------------------------------------------\nstatic int ZeroCrossingEngine(const double *filtered_signal, int y_length,\n    double fs, double *interval_locations, double *intervals) {\n  int *negative_going_points = new int[y_length];\n\n  for (int i = 0; i < y_length - 1; ++i)\n    negative_going_points[i] =\n      0.0 < filtered_signal[i] && filtered_signal[i + 1] <= 0.0 ? i + 1 : 0;\n  negative_going_points[y_length - 1] = 0;\n\n  int *edges = new int[y_length];\n  int count = 0;\n  for (int i = 0; i < y_length; ++i)\n    if (negative_going_points[i] > 0)\n      edges[count++] = negative_going_points[i];\n\n  if (count < 2) {\n    delete[] edges;\n    delete[] negative_going_points;\n    return 0;\n  }\n\n  double *fine_edges = new double[count];\n  for (int i = 0; i < count; ++i)\n    fine_edges[i] =\n      edges[i] - filtered_signal[edges[i] - 1] /\n      (filtered_signal[edges[i]] - filtered_signal[edges[i] - 1]);\n\n  for (int i = 0; i < count - 1; ++i) {\n    intervals[i] = fs / (fine_edges[i + 1] - fine_edges[i]);\n    interval_locations[i] = (fine_edges[i] + fine_edges[i + 1]) / 2.0 / fs;\n  }\n\n  delete[] fine_edges;\n  delete[] edges;\n  delete[] negative_going_points;\n  return count - 1;\n}\n\n//-----------------------------------------------------------------------------\n// GetFourZeroCrossingIntervals() calculates four zero-crossing intervals.\n// (1) Zero-crossing going from negative to positive.\n// (2) Zero-crossing going from positive to negative.\n// (3) Peak, and (4) dip. (3) and (4) are calculated from the zero-crossings of\n// the differential of waveform.\n//-----------------------------------------------------------------------------\nstatic void GetFourZeroCrossingIntervals(double *filtered_signal, int y_length,\n    double actual_fs, ZeroCrossings *zero_crossings) {\n  // x_length / 4 (old version) is fixed at 2013/07/14\n  const int kMaximumNumber = y_length;\n  zero_crossings->negative_interval_locations = new double[kMaximumNumber];\n  zero_crossings->positive_interval_locations = new double[kMaximumNumber];\n  zero_crossings->peak_interval_locations = new double[kMaximumNumber];\n  zero_crossings->dip_interval_locations = new double[kMaximumNumber];\n  zero_crossings->negative_intervals = new double[kMaximumNumber];\n  zero_crossings->positive_intervals = new double[kMaximumNumber];\n  zero_crossings->peak_intervals = new double[kMaximumNumber];\n  zero_crossings->dip_intervals = new double[kMaximumNumber];\n\n  zero_crossings->number_of_negatives = ZeroCrossingEngine(filtered_signal,\n      y_length, actual_fs, zero_crossings->negative_interval_locations,\n      zero_crossings->negative_intervals);\n\n  for (int i = 0; i < y_length; ++i) filtered_signal[i] = -filtered_signal[i];\n  zero_crossings->number_of_positives = ZeroCrossingEngine(filtered_signal,\n      y_length, actual_fs, zero_crossings->positive_interval_locations,\n      zero_crossings->positive_intervals);\n\n  for (int i = 0; i < y_length - 1; ++i) filtered_signal[i] =\n    filtered_signal[i] - filtered_signal[i + 1];\n  zero_crossings->number_of_peaks = ZeroCrossingEngine(filtered_signal,\n      y_length - 1, actual_fs, zero_crossings->peak_interval_locations,\n      zero_crossings->peak_intervals);\n\n  for (int i = 0; i < y_length - 1; ++i)\n    filtered_signal[i] = -filtered_signal[i];\n  zero_crossings->number_of_dips = ZeroCrossingEngine(filtered_signal,\n      y_length - 1, actual_fs, zero_crossings->dip_interval_locations,\n      zero_crossings->dip_intervals);\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateContourSub() calculates the f0 candidates and deviations.\n// This is the sub-function of GetF0Candidates() and assumes the calculation.\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateContourSub(\n    const double * const * interpolated_f0_set, int f0_length, double f0_floor,\n    double f0_ceil, double boundary_f0, double *f0_candidate,\n    double *f0_score) {\n  for (int i = 0; i < f0_length; ++i) {\n    f0_candidate[i] = (interpolated_f0_set[0][i] +\n      interpolated_f0_set[1][i] + interpolated_f0_set[2][i] +\n      interpolated_f0_set[3][i]) / 4.0;\n\n    f0_score[i] = sqrt(((interpolated_f0_set[0][i] - f0_candidate[i]) *\n      (interpolated_f0_set[0][i] - f0_candidate[i]) +\n      (interpolated_f0_set[1][i] - f0_candidate[i]) *\n      (interpolated_f0_set[1][i] - f0_candidate[i]) +\n      (interpolated_f0_set[2][i] - f0_candidate[i]) *\n      (interpolated_f0_set[2][i] - f0_candidate[i]) +\n      (interpolated_f0_set[3][i] - f0_candidate[i]) *\n      (interpolated_f0_set[3][i] - f0_candidate[i])) / 3.0);\n\n    if (f0_candidate[i] > boundary_f0 || f0_candidate[i] < boundary_f0 / 2.0 ||\n        f0_candidate[i] > f0_ceil || f0_candidate[i] < f0_floor) {\n      f0_candidate[i] = 0.0;\n      f0_score[i] = world::kMaximumValue;\n    }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateContour() calculates the F0 candidates based on the\n// zero-crossings.\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateContour(const ZeroCrossings *zero_crossings,\n    double boundary_f0, double f0_floor, double f0_ceil,\n    const double *temporal_positions, int f0_length,\n    double *f0_candidate, double *f0_score) {\n  if (0 == CheckEvent(zero_crossings->number_of_negatives - 2) *\n      CheckEvent(zero_crossings->number_of_positives - 2) *\n      CheckEvent(zero_crossings->number_of_peaks - 2) *\n      CheckEvent(zero_crossings->number_of_dips - 2)) {\n    for (int i = 0; i < f0_length; ++i) {\n      f0_score[i] = world::kMaximumValue;\n      f0_candidate[i] = 0.0;\n    }\n    return;\n  }\n\n  double *interpolated_f0_set[4];\n  for (int i = 0; i < 4; ++i)\n    interpolated_f0_set[i] = new double[f0_length];\n\n  interp1(zero_crossings->negative_interval_locations,\n      zero_crossings->negative_intervals,\n      zero_crossings->number_of_negatives,\n      temporal_positions, f0_length, interpolated_f0_set[0]);\n  interp1(zero_crossings->positive_interval_locations,\n      zero_crossings->positive_intervals,\n      zero_crossings->number_of_positives,\n      temporal_positions, f0_length, interpolated_f0_set[1]);\n  interp1(zero_crossings->peak_interval_locations,\n      zero_crossings->peak_intervals, zero_crossings->number_of_peaks,\n      temporal_positions, f0_length, interpolated_f0_set[2]);\n  interp1(zero_crossings->dip_interval_locations,\n      zero_crossings->dip_intervals, zero_crossings->number_of_dips,\n      temporal_positions, f0_length, interpolated_f0_set[3]);\n\n  GetF0CandidateContourSub(interpolated_f0_set, f0_length, f0_floor,\n      f0_ceil, boundary_f0, f0_candidate, f0_score);\n  for (int i = 0; i < 4; ++i) delete[] interpolated_f0_set[i];\n}\n\n//-----------------------------------------------------------------------------\n// DestroyZeroCrossings() frees the memory of array in the struct\n//-----------------------------------------------------------------------------\nstatic void DestroyZeroCrossings(ZeroCrossings *zero_crossings) {\n  delete[] zero_crossings->negative_interval_locations;\n  delete[] zero_crossings->positive_interval_locations;\n  delete[] zero_crossings->peak_interval_locations;\n  delete[] zero_crossings->dip_interval_locations;\n  delete[] zero_crossings->negative_intervals;\n  delete[] zero_crossings->positive_intervals;\n  delete[] zero_crossings->peak_intervals;\n  delete[] zero_crossings->dip_intervals;\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateFromRawEvent() calculates F0 candidate contour in 1-ch signal\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateFromRawEvent(double boundary_f0, double fs,\n    const fft_complex *y_spectrum, int y_length, int fft_size, double f0_floor,\n    double f0_ceil, const double *temporal_positions, int f0_length,\n    double *f0_score, double *f0_candidate) {\n  double *filtered_signal = new double[fft_size];\n  GetFilteredSignal(matlab_round(fs / boundary_f0 / 2.0), fft_size, y_spectrum,\n      y_length, filtered_signal);\n\n  ZeroCrossings zero_crossings = {0};\n  GetFourZeroCrossingIntervals(filtered_signal, y_length, fs,\n      &zero_crossings);\n\n  GetF0CandidateContour(&zero_crossings, boundary_f0, f0_floor, f0_ceil,\n      temporal_positions, f0_length, f0_candidate, f0_score);\n\n  DestroyZeroCrossings(&zero_crossings);\n  delete[] filtered_signal;\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidatesAndScores() calculates all f0 candidates and their scores.\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidatesAndScores(const double *boundary_f0_list,\n    int number_of_bands, double actual_fs, int y_length,\n    const double *temporal_positions, int f0_length,\n    const fft_complex *y_spectrum, int fft_size, double f0_floor,\n    double f0_ceil, double **raw_f0_candidates, double **raw_f0_scores) {\n  double *f0_candidate = new double[f0_length];\n  double *f0_score = new double[f0_length];\n\n  // Calculation of the acoustics events (zero-crossing)\n  for (int i = 0; i < number_of_bands; ++i) {\n    GetF0CandidateFromRawEvent(boundary_f0_list[i], actual_fs, y_spectrum,\n        y_length, fft_size, f0_floor, f0_ceil, temporal_positions, f0_length,\n        f0_score, f0_candidate);\n    for (int j = 0; j < f0_length; ++j) {\n      // A way to avoid zero division\n      raw_f0_scores[i][j] = f0_score[j] /\n        (f0_candidate[j] + world::kMySafeGuardMinimum);\n      raw_f0_candidates[i][j] = f0_candidate[j];\n    }\n  }\n\n  delete[] f0_candidate;\n  delete[] f0_score;\n}\n\n//-----------------------------------------------------------------------------\n// DioGeneralBody() estimates the F0 based on Distributed Inline-filter\n// Operation.\n//-----------------------------------------------------------------------------\nstatic void DioGeneralBody(const double *x, int x_length, int fs,\n    double frame_period, double f0_floor, double f0_ceil,\n    double channels_in_octave, int speed, double allowed_range,\n    double *temporal_positions, double *f0) {\n  int number_of_bands = 1 + static_cast<int>(log(f0_ceil / f0_floor) /\n    world::kLog2 * channels_in_octave);\n  double *boundary_f0_list = new double[number_of_bands];\n  for (int i = 0; i < number_of_bands; ++i)\n    boundary_f0_list[i] = f0_floor * pow(2.0, (i + 1) / channels_in_octave);\n\n  // normalization\n  int decimation_ratio = MyMaxInt(MyMinInt(speed, 12), 1);\n  int y_length = (1 + static_cast<int>(x_length / decimation_ratio));\n  double actual_fs = static_cast<double>(fs) / decimation_ratio;\n  int fft_size = GetSuitableFFTSize(y_length +\n      matlab_round(actual_fs / world::kCutOff) * 2 + 1 +\n      (4 * static_cast<int>(1.0 + actual_fs / boundary_f0_list[0] / 2.0)));\n\n  // Calculation of the spectrum used for the f0 estimation\n  fft_complex *y_spectrum = new fft_complex[fft_size];\n  GetSpectrumForEstimation(x, x_length, y_length, actual_fs, fft_size,\n      decimation_ratio, y_spectrum);\n\n  double **f0_candidates = new double *[number_of_bands];\n  double **f0_scores = new double *[number_of_bands];\n  int f0_length = GetSamplesForDIO(fs, x_length, frame_period);\n  for (int i = 0; i < number_of_bands; ++i) {\n    f0_candidates[i] = new double[f0_length];\n    f0_scores[i] = new double[f0_length];\n  }\n\n  for (int i = 0; i < f0_length; ++i)\n    temporal_positions[i] = i * frame_period / 1000.0;\n\n  GetF0CandidatesAndScores(boundary_f0_list, number_of_bands,\n      actual_fs, y_length, temporal_positions, f0_length, y_spectrum,\n      fft_size, f0_floor, f0_ceil, f0_candidates, f0_scores);\n\n  // Selection of the best value based on fundamental-ness.\n  // This function is related with SortCandidates() in MATLAB.\n  double *best_f0_contour = new double[f0_length];\n  GetBestF0Contour(f0_length, f0_candidates, f0_scores,\n      number_of_bands, best_f0_contour);\n\n  // Postprocessing to find the best f0-contour.\n  FixF0Contour(frame_period, number_of_bands, fs, f0_candidates,\n      best_f0_contour, f0_length, f0_floor, allowed_range, f0);\n\n  delete[] best_f0_contour;\n  delete[] y_spectrum;\n  for (int i = 0; i < number_of_bands; ++i) {\n    delete[] f0_scores[i];\n    delete[] f0_candidates[i];\n  }\n  delete[] f0_scores;\n  delete[] f0_candidates;\n  delete[] boundary_f0_list;\n}\n\n}  // namespace\n\nint GetSamplesForDIO(int fs, int x_length, double frame_period) {\n  return static_cast<int>(1000.0 * x_length / fs / frame_period) + 1;\n}\n\nvoid Dio(const double *x, int x_length, int fs, const DioOption *option,\n    double *temporal_positions, double *f0) {\n  DioGeneralBody(x, x_length, fs, option->frame_period, option->f0_floor,\n      option->f0_ceil, option->channels_in_octave, option->speed,\n      option->allowed_range, temporal_positions, f0);\n}\n\nvoid InitializeDioOption(DioOption *option) {\n  // You can change default parameters.\n  option->channels_in_octave = 2.0;\n  option->f0_ceil = world::kCeilF0;\n  option->f0_floor = world::kFloorF0;\n  option->frame_period = 5;\n\n  // You can use the value from 1 to 12.\n  // Default value 11 is for the fs of 44.1 kHz.\n  // The lower value you use, the better performance you can obtain.\n  option->speed = 1;\n\n  // You can give a positive real number as the threshold.\n  // The most strict value is 0, and there is no upper limit.\n  // On the other hand, I think that the value from 0.02 to 0.2 is reasonable.\n  option->allowed_range = 0.1;\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/fft.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// This file represents the functions about FFT (Fast Fourier Transform)\n// implemented by Mr. Ooura, and wrapper functions implemented by M. Morise.\n// We can use these wrapper functions as well as the FFTW functions.\n// Please see the FFTW web-page to show the usage of the wrapper functions.\n// Ooura FFT:\n//   (Japanese) http://www.kurims.kyoto-u.ac.jp/~ooura/index-j.html\n//   (English) http://www.kurims.kyoto-u.ac.jp/~ooura/index.html\n// FFTW:\n//   (English) http://www.fftw.org/\n// 2012/08/24 by M. Morise\n//-----------------------------------------------------------------------------\n#include \"world/fft.h\"\n\n#include <math.h>\n#include <stdlib.h>\n\nvoid cdft(int n, int isgn, double *a, int *ip, double *w);\nvoid rdft(int n, int isgn, double *a, int *ip, double *w);\n\nnamespace {\nstatic void BackwardFFT(fft_plan p) {\n  if (p.c_out == NULL) {  // c2r\n    p.input[0] = p.c_in[0][0];\n    p.input[1] = p.c_in[p.n / 2][0];\n    for (int i = 1; i < p.n / 2; ++i) {\n      p.input[i * 2]  = p.c_in[i][0];\n      p.input[i * 2 + 1]  = -p.c_in[i][1];\n    }\n    rdft(p.n, -1, p.input, p.ip, p.w);\n    for (int i = 0; i < p.n; ++i) p.out[i] = p.input[i] * 2.0;\n  } else {  // c2c\n    for (int i = 0; i < p.n; ++i) {\n      p.input[i * 2] = p.c_in[i][0];\n      p.input[i * 2 + 1] = p.c_in[i][1];\n    }\n    cdft(p.n * 2, -1, p.input, p.ip, p.w);\n    for (int i = 0; i < p.n; ++i) {\n      p.c_out[i][0] = p.input[i * 2];\n      p.c_out[i][1] = -p.input[i * 2 + 1];\n    }\n  }\n}\n\nstatic void ForwardFFT(fft_plan p) {\n  if (p.c_in == NULL) {  // r2c\n    for (int i = 0; i < p.n; ++i) p.input[i] = p.in[i];\n    rdft(p.n, 1, p.input, p.ip, p.w);\n    p.c_out[0][0] = p.input[0];\n    p.c_out[0][1] = 0.0;\n    for (int i = 1; i < p.n / 2; ++i) {\n      p.c_out[i][0] = p.input[i * 2];\n      p.c_out[i][1] = -p.input[i * 2 + 1];\n    }\n    p.c_out[p.n / 2][0] = p.input[1];\n    p.c_out[p.n / 2][1] = 0.0;\n  } else {  // c2c\n    for (int i = 0; i < p.n; ++i) {\n      p.input[i * 2] = p.c_in[i][0];\n      p.input[i * 2 + 1] = p.c_in[i][1];\n    }\n    cdft(p.n * 2, 1, p.input, p.ip, p.w);\n    for (int i = 0; i < p.n; ++i) {\n      p.c_out[i][0] = p.input[i * 2];\n      p.c_out[i][1] = -p.input[i * 2 + 1];\n    }\n  }\n}\n\n}  // namespace\n\nfft_plan fft_plan_dft_1d(int n, fft_complex *in, fft_complex *out, int sign,\n    unsigned int flags) {\n  void makewt(int nw, int *ip, double *w);\n\n  fft_plan output = {0};\n  output.n = n;\n  output.in = NULL;\n  output.c_in = in;\n  output.out = NULL;\n  output.c_out = out;\n  output.sign = sign;\n  output.flags = flags;\n  output.input = new double[n * 2];\n  output.ip = new int[n];\n  output.w = new double[n * 5 / 4];\n\n  output.ip[0] = 0;\n  makewt(output.n >> 1, output.ip, output.w);\n  return output;\n}\n\nfft_plan fft_plan_dft_c2r_1d(int n, fft_complex *in, double *out,\n    unsigned int flags) {\n  void makewt(int nw, int *ip, double *w);\n  void makect(int nc, int *ip, double *c);\n\n  fft_plan output = {0};\n  output.n = n;\n  output.in = NULL;\n  output.c_in = in;\n  output.out = out;\n  output.c_out = NULL;\n  output.sign = FFT_BACKWARD;\n  output.flags = flags;\n  output.input = new double[n];\n  output.ip = new int[n];\n  output.w = new double[n * 5 / 4];\n\n  output.ip[0] = 0;\n  makewt(output.n >> 2, output.ip, output.w);\n  makect(output.n >> 2, output.ip, output.w + (output.n >> 2));\n  return output;\n}\n\nfft_plan fft_plan_dft_r2c_1d(int n, double *in, fft_complex *out,\n    unsigned int flags) {\n  void makewt(int nw, int *ip, double *w);\n  void makect(int nc, int *ip, double *c);\n\n  fft_plan output = {0};\n  output.n = n;\n  output.in = in;\n  output.c_in = NULL;\n  output.out = NULL;\n  output.c_out = out;\n  output.sign = FFT_FORWARD;\n  output.flags = flags;\n  output.input = new double[n];\n  output.ip = new int[n];\n  output.w = new double[n * 5 / 4];\n\n  output.ip[0] = 0;\n  makewt(output.n >> 2, output.ip, output.w);\n  makect(output.n >> 2, output.ip, output.w + (output.n >> 2));\n  return output;\n}\n\nvoid fft_execute(fft_plan p) {\n  if (p.sign == FFT_FORWARD) {\n    ForwardFFT(p);\n  } else {  // ifft\n    BackwardFFT(p);\n  }\n}\n\nvoid fft_destroy_plan(fft_plan p) {\n  p.n = 0;\n  p.in = NULL;\n  p.c_in = NULL;\n  p.out = NULL;\n  p.c_out = NULL;\n  p.sign = 0;\n  p.flags = 0;\n  delete[] p.input;\n  delete[] p.ip;\n  delete[] p.w;\n}\n\n//-----------------------------------------------------------------------\n// The following functions are reffered by\n// http://www.kurims.kyoto-u.ac.jp/~ooura/index.html\n\nvoid cdft(int n, int isgn, double *a, int *ip, double *w) {\n  void cftfsub(int n, double *a, int *ip, int nw, double *w);\n  void cftbsub(int n, double *a, int *ip, int nw, double *w);\n  int nw;\n\n  nw = ip[0];\n  if (isgn >= 0) {\n    cftfsub(n, a, ip, nw, w);\n  } else {\n    cftbsub(n, a, ip, nw, w);\n  }\n}\n\n\nvoid rdft(int n, int isgn, double *a, int *ip, double *w) {\n  void cftfsub(int n, double *a, int *ip, int nw, double *w);\n  void cftbsub(int n, double *a, int *ip, int nw, double *w);\n  void rftfsub(int n, double *a, int nc, double *c);\n  void rftbsub(int n, double *a, int nc, double *c);\n  double xi;\n\n  int nw = ip[0];\n  int nc = ip[1];\n\n  if (isgn >= 0) {\n    if (n > 4) {\n      cftfsub(n, a, ip, nw, w);\n      rftfsub(n, a, nc, w + nw);\n    } else if (n == 4) {\n      cftfsub(n, a, ip, nw, w);\n    }\n    xi = a[0] - a[1];\n    a[0] += a[1];\n    a[1] = xi;\n  } else {\n    a[1] = 0.5 * (a[0] - a[1]);\n    a[0] -= a[1];\n    if (n > 4) {\n      rftbsub(n, a, nc, w + nw);\n      cftbsub(n, a, ip, nw, w);\n    } else if (n == 4) {\n      cftbsub(n, a, ip, nw, w);\n    }\n  }\n}\n\nvoid makewt(int nw, int *ip, double *w) {\n  void makeipt(int nw, int *ip);\n  int j, nwh, nw0, nw1;\n  double delta, wn4r, wk1r, wk1i, wk3r, wk3i;\n\n  ip[0] = nw;\n  ip[1] = 1;\n  if (nw > 2) {\n    nwh = nw >> 1;\n    delta = atan(1.0) / nwh;\n    wn4r = cos(delta * nwh);\n    w[0] = 1;\n    w[1] = wn4r;\n    if (nwh == 4) {\n      w[2] = cos(delta * 2);\n      w[3] = sin(delta * 2);\n    } else if (nwh > 4) {\n      makeipt(nw, ip);\n      w[2] = 0.5 / cos(delta * 2);\n      w[3] = 0.5 / cos(delta * 6);\n      for (j = 4; j < nwh; j += 4) {\n        w[j] = cos(delta * j);\n        w[j + 1] = sin(delta * j);\n        w[j + 2] = cos(3 * delta * j);\n        w[j + 3] = -sin(3 * delta * j);\n      }\n    }\n    nw0 = 0;\n    while (nwh > 2) {\n      nw1 = nw0 + nwh;\n      nwh >>= 1;\n      w[nw1] = 1;\n      w[nw1 + 1] = wn4r;\n      if (nwh == 4) {\n        wk1r = w[nw0 + 4];\n        wk1i = w[nw0 + 5];\n        w[nw1 + 2] = wk1r;\n        w[nw1 + 3] = wk1i;\n      } else if (nwh > 4) {\n        wk1r = w[nw0 + 4];\n        wk3r = w[nw0 + 6];\n        w[nw1 + 2] = 0.5 / wk1r;\n        w[nw1 + 3] = 0.5 / wk3r;\n        for (j = 4; j < nwh; j += 4) {\n          wk1r = w[nw0 + 2 * j];\n          wk1i = w[nw0 + 2 * j + 1];\n          wk3r = w[nw0 + 2 * j + 2];\n          wk3i = w[nw0 + 2 * j + 3];\n          w[nw1 + j] = wk1r;\n          w[nw1 + j + 1] = wk1i;\n          w[nw1 + j + 2] = wk3r;\n          w[nw1 + j + 3] = wk3i;\n        }\n      }\n      nw0 = nw1;\n    }\n  }\n}\n\nvoid makeipt(int nw, int *ip) {\n  int j, l, m, m2, p, q;\n\n  ip[2] = 0;\n  ip[3] = 16;\n  m = 2;\n  for (l = nw; l > 32; l >>= 2) {\n    m2 = m << 1;\n    q = m2 << 3;\n    for (j = m; j < m2; j++) {\n      p = ip[j] << 2;\n      ip[m + j] = p;\n      ip[m2 + j] = p + q;\n    }\n    m = m2;\n  }\n}\n\nvoid makect(int nc, int *ip, double *c) {\n  int j, nch;\n  double delta;\n\n  ip[1] = nc;\n  if (nc > 1) {\n    nch = nc >> 1;\n    delta = atan(1.0) / nch;\n    c[0] = cos(delta * nch);\n    c[nch] = 0.5 * c[0];\n    for (j = 1; j < nch; j++) {\n      c[j] = 0.5 * cos(delta * j);\n      c[nc - j] = 0.5 * sin(delta * j);\n    }\n  }\n}\n\n// -------- child routines --------\n\n\nvoid cftfsub(int n, double *a, int *ip, int nw, double *w) {\n  void bitrv2(int n, int *ip, double *a);\n  void bitrv216(double *a);\n  void bitrv208(double *a);\n  void cftf1st(int n, double *a, double *w);\n  void cftrec4(int n, double *a, int nw, double *w);\n  void cftleaf(int n, int isplt, double *a, int nw, double *w);\n  void cftfx41(int n, double *a, int nw, double *w);\n  void cftf161(double *a, double *w);\n  void cftf081(double *a, double *w);\n  void cftf040(double *a);\n  void cftx020(double *a);\n\n  if (n > 8) {\n    if (n > 32) {\n      cftf1st(n, a, &w[nw - (n >> 2)]);\n    if (n > 512) {\n      cftrec4(n, a, nw, w);\n    } else if (n > 128) {\n      cftleaf(n, 1, a, nw, w);\n    } else {\n      cftfx41(n, a, nw, w);\n    }\n      bitrv2(n, ip, a);\n    } else if (n == 32) {\n      cftf161(a, &w[nw - 8]);\n      bitrv216(a);\n    } else {\n      cftf081(a, w);\n      bitrv208(a);\n    }\n  } else if (n == 8) {\n    cftf040(a);\n  } else if (n == 4) {\n    cftx020(a);\n  }\n}\n\nvoid cftbsub(int n, double *a, int *ip, int nw, double *w) {\n  void bitrv2conj(int n, int *ip, double *a);\n  void bitrv216neg(double *a);\n  void bitrv208neg(double *a);\n  void cftb1st(int n, double *a, double *w);\n  void cftrec4(int n, double *a, int nw, double *w);\n  void cftleaf(int n, int isplt, double *a, int nw, double *w);\n  void cftfx41(int n, double *a, int nw, double *w);\n  void cftf161(double *a, double *w);\n  void cftf081(double *a, double *w);\n  void cftb040(double *a);\n  void cftx020(double *a);\n\n  if (n > 8) {\n    if (n > 32) {\n      cftb1st(n, a, &w[nw - (n >> 2)]);\n      if (n > 512) {\n        cftrec4(n, a, nw, w);\n      } else if (n > 128) {\n        cftleaf(n, 1, a, nw, w);\n      } else {\n        cftfx41(n, a, nw, w);\n      }\n      bitrv2conj(n, ip, a);\n    } else if (n == 32) {\n      cftf161(a, &w[nw - 8]);\n      bitrv216neg(a);\n    } else {\n      cftf081(a, w);\n      bitrv208neg(a);\n    }\n  } else if (n == 8) {\n    cftb040(a);\n  } else if (n == 4) {\n    cftx020(a);\n  }\n}\n\nvoid bitrv2(int n, int *ip, double *a) {\n  int j, j1, k, k1, l, m, nh, nm;\n  double xr, xi, yr, yi;\n\n  m = 1;\n  for (l = n >> 2; l > 8; l >>= 2) {\n    m <<= 1;\n  }\n  nh = n >> 1;\n  nm = 4 * m;\n  if (l == 8) {\n    for (k = 0; k < m; k++) {\n      for (j = 0; j < k; j++) {\n        j1 = 4 * j + 2 * ip[m + k];\n        k1 = 4 * k + 2 * ip[m + j];\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nh;\n        k1 += 2;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += 2;\n        k1 += nh;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nh;\n        k1 -= 2;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n      }\n      k1 = 4 * k + 2 * ip[m + k];\n      j1 = k1 + 2;\n      k1 += nh;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nm;\n      k1 += 2 * nm;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nm;\n      k1 -= nm;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 -= 2;\n      k1 -= nh;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nh + 2;\n      k1 += nh + 2;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 -= nh - nm;\n      k1 += 2 * nm - 2;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n    }\n  } else {\n    for (k = 0; k < m; k++) {\n      for (j = 0; j < k; j++) {\n        j1 = 4 * j + ip[m + k];\n        k1 = 4 * k + ip[m + j];\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nh;\n        k1 += 2;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += 2;\n        k1 += nh;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nh;\n        k1 -= 2;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = a[j1 + 1];\n        yr = a[k1];\n        yi = a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n      }\n      k1 = 4 * k + ip[m + k];\n      j1 = k1 + 2;\n      k1 += nh;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nm;\n      k1 += nm;\n      xr = a[j1];\n      xi = a[j1 + 1];\n      yr = a[k1];\n      yi = a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n    }\n  }\n}\n\nvoid bitrv2conj(int n, int *ip, double *a) {\n  int j, j1, k, k1, l, m, nh, nm;\n  double xr, xi, yr, yi;\n\n  m = 1;\n  for (l = n >> 2; l > 8; l >>= 2) {\n    m <<= 1;\n  }\n  nh = n >> 1;\n  nm = 4 * m;\n  if (l == 8) {\n    for (k = 0; k < m; k++) {\n      for (j = 0; j < k; j++) {\n        j1 = 4 * j + 2 * ip[m + k];\n        k1 = 4 * k + 2 * ip[m + j];\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nh;\n        k1 += 2;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += 2;\n        k1 += nh;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nh;\n        k1 -= 2;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= 2 * nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n      }\n      k1 = 4 * k + 2 * ip[m + k];\n      j1 = k1 + 2;\n      k1 += nh;\n      a[j1 - 1] = -a[j1 - 1];\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      a[k1 + 3] = -a[k1 + 3];\n      j1 += nm;\n      k1 += 2 * nm;\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nm;\n      k1 -= nm;\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 -= 2;\n      k1 -= nh;\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 += nh + 2;\n      k1 += nh + 2;\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      j1 -= nh - nm;\n      k1 += 2 * nm - 2;\n      a[j1 - 1] = -a[j1 - 1];\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      a[k1 + 3] = -a[k1 + 3];\n    }\n  } else {\n    for (k = 0; k < m; k++) {\n      for (j = 0; j < k; j++) {\n        j1 = 4 * j + ip[m + k];\n        k1 = 4 * k + ip[m + j];\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nh;\n        k1 += 2;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += 2;\n        k1 += nh;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 += nm;\n        k1 += nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nh;\n        k1 -= 2;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n        j1 -= nm;\n        k1 -= nm;\n        xr = a[j1];\n        xi = -a[j1 + 1];\n        yr = a[k1];\n        yi = -a[k1 + 1];\n        a[j1] = yr;\n        a[j1 + 1] = yi;\n        a[k1] = xr;\n        a[k1 + 1] = xi;\n      }\n      k1 = 4 * k + ip[m + k];\n      j1 = k1 + 2;\n      k1 += nh;\n      a[j1 - 1] = -a[j1 - 1];\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      a[k1 + 3] = -a[k1 + 3];\n      j1 += nm;\n      k1 += nm;\n      a[j1 - 1] = -a[j1 - 1];\n      xr = a[j1];\n      xi = -a[j1 + 1];\n      yr = a[k1];\n      yi = -a[k1 + 1];\n      a[j1] = yr;\n      a[j1 + 1] = yi;\n      a[k1] = xr;\n      a[k1 + 1] = xi;\n      a[k1 + 3] = -a[k1 + 3];\n    }\n  }\n}\n\nvoid bitrv216(double *a) {\n  double x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i,\n    x5r, x5i, x7r, x7i, x8r, x8i, x10r, x10i,\n    x11r, x11i, x12r, x12i, x13r, x13i, x14r, x14i;\n\n  x1r = a[2];\n  x1i = a[3];\n  x2r = a[4];\n  x2i = a[5];\n  x3r = a[6];\n  x3i = a[7];\n  x4r = a[8];\n  x4i = a[9];\n  x5r = a[10];\n  x5i = a[11];\n  x7r = a[14];\n  x7i = a[15];\n  x8r = a[16];\n  x8i = a[17];\n  x10r = a[20];\n  x10i = a[21];\n  x11r = a[22];\n  x11i = a[23];\n  x12r = a[24];\n  x12i = a[25];\n  x13r = a[26];\n  x13i = a[27];\n  x14r = a[28];\n  x14i = a[29];\n  a[2] = x8r;\n  a[3] = x8i;\n  a[4] = x4r;\n  a[5] = x4i;\n  a[6] = x12r;\n  a[7] = x12i;\n  a[8] = x2r;\n  a[9] = x2i;\n  a[10] = x10r;\n  a[11] = x10i;\n  a[14] = x14r;\n  a[15] = x14i;\n  a[16] = x1r;\n  a[17] = x1i;\n  a[20] = x5r;\n  a[21] = x5i;\n  a[22] = x13r;\n  a[23] = x13i;\n  a[24] = x3r;\n  a[25] = x3i;\n  a[26] = x11r;\n  a[27] = x11i;\n  a[28] = x7r;\n  a[29] = x7i;\n}\n\n\nvoid bitrv216neg(double *a) {\n  double x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i,\n    x5r, x5i, x6r, x6i, x7r, x7i, x8r, x8i,\n    x9r, x9i, x10r, x10i, x11r, x11i, x12r, x12i,\n    x13r, x13i, x14r, x14i, x15r, x15i;\n\n  x1r = a[2];\n  x1i = a[3];\n  x2r = a[4];\n  x2i = a[5];\n  x3r = a[6];\n  x3i = a[7];\n  x4r = a[8];\n  x4i = a[9];\n  x5r = a[10];\n  x5i = a[11];\n  x6r = a[12];\n  x6i = a[13];\n  x7r = a[14];\n  x7i = a[15];\n  x8r = a[16];\n  x8i = a[17];\n  x9r = a[18];\n  x9i = a[19];\n  x10r = a[20];\n  x10i = a[21];\n  x11r = a[22];\n  x11i = a[23];\n  x12r = a[24];\n  x12i = a[25];\n  x13r = a[26];\n  x13i = a[27];\n  x14r = a[28];\n  x14i = a[29];\n  x15r = a[30];\n  x15i = a[31];\n  a[2] = x15r;\n  a[3] = x15i;\n  a[4] = x7r;\n  a[5] = x7i;\n  a[6] = x11r;\n  a[7] = x11i;\n  a[8] = x3r;\n  a[9] = x3i;\n  a[10] = x13r;\n  a[11] = x13i;\n  a[12] = x5r;\n  a[13] = x5i;\n  a[14] = x9r;\n  a[15] = x9i;\n  a[16] = x1r;\n  a[17] = x1i;\n  a[18] = x14r;\n  a[19] = x14i;\n  a[20] = x6r;\n  a[21] = x6i;\n  a[22] = x10r;\n  a[23] = x10i;\n  a[24] = x2r;\n  a[25] = x2i;\n  a[26] = x12r;\n  a[27] = x12i;\n  a[28] = x4r;\n  a[29] = x4i;\n  a[30] = x8r;\n  a[31] = x8i;\n}\n\nvoid bitrv208(double *a) {\n  double x1r, x1i, x3r, x3i, x4r, x4i, x6r, x6i;\n\n  x1r = a[2];\n  x1i = a[3];\n  x3r = a[6];\n  x3i = a[7];\n  x4r = a[8];\n  x4i = a[9];\n  x6r = a[12];\n  x6i = a[13];\n  a[2] = x4r;\n  a[3] = x4i;\n  a[6] = x6r;\n  a[7] = x6i;\n  a[8] = x1r;\n  a[9] = x1i;\n  a[12] = x3r;\n  a[13] = x3i;\n}\n\nvoid bitrv208neg(double *a) {\n  double x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i,\n    x5r, x5i, x6r, x6i, x7r, x7i;\n\n  x1r = a[2];\n  x1i = a[3];\n  x2r = a[4];\n  x2i = a[5];\n  x3r = a[6];\n  x3i = a[7];\n  x4r = a[8];\n  x4i = a[9];\n  x5r = a[10];\n  x5i = a[11];\n  x6r = a[12];\n  x6i = a[13];\n  x7r = a[14];\n  x7i = a[15];\n  a[2] = x7r;\n  a[3] = x7i;\n  a[4] = x3r;\n  a[5] = x3i;\n  a[6] = x5r;\n  a[7] = x5i;\n  a[8] = x1r;\n  a[9] = x1i;\n  a[10] = x6r;\n  a[11] = x6i;\n  a[12] = x2r;\n  a[13] = x2i;\n  a[14] = x4r;\n  a[15] = x4i;\n}\n\nvoid cftf1st(int n, double *a, double *w) {\n  int j, j0, j1, j2, j3, k, m, mh;\n  double wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i,\n    wd1r, wd1i, wd3r, wd3i;\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i;\n\n  mh = n >> 3;\n  m = 2 * mh;\n  j1 = m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[0] + a[j2];\n  x0i = a[1] + a[j2 + 1];\n  x1r = a[0] - a[j2];\n  x1i = a[1] - a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i - x2i;\n  a[j2] = x1r - x3i;\n  a[j2 + 1] = x1i + x3r;\n  a[j3] = x1r + x3i;\n  a[j3 + 1] = x1i - x3r;\n  wn4r = w[1];\n  csc1 = w[2];\n  csc3 = w[3];\n  wd1r = 1;\n  wd1i = 0;\n  wd3r = 1;\n  wd3i = 0;\n  k = 0;\n  for (j = 2; j < mh - 2; j += 4) {\n    k += 4;\n    wk1r = csc1 * (wd1r + w[k]);\n    wk1i = csc1 * (wd1i + w[k + 1]);\n    wk3r = csc3 * (wd3r + w[k + 2]);\n    wk3i = csc3 * (wd3i + w[k + 3]);\n    wd1r = w[k];\n    wd1i = w[k + 1];\n    wd3r = w[k + 2];\n    wd3i = w[k + 3];\n    j1 = j + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j] + a[j2];\n    x0i = a[j + 1] + a[j2 + 1];\n    x1r = a[j] - a[j2];\n    x1i = a[j + 1] - a[j2 + 1];\n    y0r = a[j + 2] + a[j2 + 2];\n    y0i = a[j + 3] + a[j2 + 3];\n    y1r = a[j + 2] - a[j2 + 2];\n    y1i = a[j + 3] - a[j2 + 3];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    y2r = a[j1 + 2] + a[j3 + 2];\n    y2i = a[j1 + 3] + a[j3 + 3];\n    y3r = a[j1 + 2] - a[j3 + 2];\n    y3i = a[j1 + 3] - a[j3 + 3];\n    a[j] = x0r + x2r;\n    a[j + 1] = x0i + x2i;\n    a[j + 2] = y0r + y2r;\n    a[j + 3] = y0i + y2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i - x2i;\n    a[j1 + 2] = y0r - y2r;\n    a[j1 + 3] = y0i - y2i;\n    x0r = x1r - x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1r * x0r - wk1i * x0i;\n    a[j2 + 1] = wk1r * x0i + wk1i * x0r;\n    x0r = y1r - y3i;\n    x0i = y1i + y3r;\n    a[j2 + 2] = wd1r * x0r - wd1i * x0i;\n    a[j2 + 3] = wd1r * x0i + wd1i * x0r;\n    x0r = x1r + x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3r * x0r + wk3i * x0i;\n    a[j3 + 1] = wk3r * x0i - wk3i * x0r;\n    x0r = y1r + y3i;\n    x0i = y1i - y3r;\n    a[j3 + 2] = wd3r * x0r + wd3i * x0i;\n    a[j3 + 3] = wd3r * x0i - wd3i * x0r;\n    j0 = m - j;\n    j1 = j0 + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j0] + a[j2];\n    x0i = a[j0 + 1] + a[j2 + 1];\n    x1r = a[j0] - a[j2];\n    x1i = a[j0 + 1] - a[j2 + 1];\n    y0r = a[j0 - 2] + a[j2 - 2];\n    y0i = a[j0 - 1] + a[j2 - 1];\n    y1r = a[j0 - 2] - a[j2 - 2];\n    y1i = a[j0 - 1] - a[j2 - 1];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    y2r = a[j1 - 2] + a[j3 - 2];\n    y2i = a[j1 - 1] + a[j3 - 1];\n    y3r = a[j1 - 2] - a[j3 - 2];\n    y3i = a[j1 - 1] - a[j3 - 1];\n    a[j0] = x0r + x2r;\n    a[j0 + 1] = x0i + x2i;\n    a[j0 - 2] = y0r + y2r;\n    a[j0 - 1] = y0i + y2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i - x2i;\n    a[j1 - 2] = y0r - y2r;\n    a[j1 - 1] = y0i - y2i;\n    x0r = x1r - x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1i * x0r - wk1r * x0i;\n    a[j2 + 1] = wk1i * x0i + wk1r * x0r;\n    x0r = y1r - y3i;\n    x0i = y1i + y3r;\n    a[j2 - 2] = wd1i * x0r - wd1r * x0i;\n    a[j2 - 1] = wd1i * x0i + wd1r * x0r;\n    x0r = x1r + x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3i * x0r + wk3r * x0i;\n    a[j3 + 1] = wk3i * x0i - wk3r * x0r;\n    x0r = y1r + y3i;\n    x0i = y1i - y3r;\n    a[j3 - 2] = wd3i * x0r + wd3r * x0i;\n    a[j3 - 1] = wd3i * x0i - wd3r * x0r;\n  }\n  wk1r = csc1 * (wd1r + wn4r);\n  wk1i = csc1 * (wd1i + wn4r);\n  wk3r = csc3 * (wd3r - wn4r);\n  wk3i = csc3 * (wd3i - wn4r);\n  j0 = mh;\n  j1 = j0 + m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[j0 - 2] + a[j2 - 2];\n  x0i = a[j0 - 1] + a[j2 - 1];\n  x1r = a[j0 - 2] - a[j2 - 2];\n  x1i = a[j0 - 1] - a[j2 - 1];\n  x2r = a[j1 - 2] + a[j3 - 2];\n  x2i = a[j1 - 1] + a[j3 - 1];\n  x3r = a[j1 - 2] - a[j3 - 2];\n  x3i = a[j1 - 1] - a[j3 - 1];\n  a[j0 - 2] = x0r + x2r;\n  a[j0 - 1] = x0i + x2i;\n  a[j1 - 2] = x0r - x2r;\n  a[j1 - 1] = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  a[j2 - 2] = wk1r * x0r - wk1i * x0i;\n  a[j2 - 1] = wk1r * x0i + wk1i * x0r;\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  a[j3 - 2] = wk3r * x0r + wk3i * x0i;\n  a[j3 - 1] = wk3r * x0i - wk3i * x0r;\n  x0r = a[j0] + a[j2];\n  x0i = a[j0 + 1] + a[j2 + 1];\n  x1r = a[j0] - a[j2];\n  x1i = a[j0 + 1] - a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[j0] = x0r + x2r;\n  a[j0 + 1] = x0i + x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  a[j2] = wn4r * (x0r - x0i);\n  a[j2 + 1] = wn4r * (x0i + x0r);\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  a[j3] = -wn4r * (x0r + x0i);\n  a[j3 + 1] = -wn4r * (x0i - x0r);\n  x0r = a[j0 + 2] + a[j2 + 2];\n  x0i = a[j0 + 3] + a[j2 + 3];\n  x1r = a[j0 + 2] - a[j2 + 2];\n  x1i = a[j0 + 3] - a[j2 + 3];\n  x2r = a[j1 + 2] + a[j3 + 2];\n  x2i = a[j1 + 3] + a[j3 + 3];\n  x3r = a[j1 + 2] - a[j3 + 2];\n  x3i = a[j1 + 3] - a[j3 + 3];\n  a[j0 + 2] = x0r + x2r;\n  a[j0 + 3] = x0i + x2i;\n  a[j1 + 2] = x0r - x2r;\n  a[j1 + 3] = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  a[j2 + 2] = wk1i * x0r - wk1r * x0i;\n  a[j2 + 3] = wk1i * x0i + wk1r * x0r;\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  a[j3 + 2] = wk3i * x0r + wk3r * x0i;\n  a[j3 + 3] = wk3i * x0i - wk3r * x0r;\n}\n\nvoid cftb1st(int n, double *a, double *w) {\n  int j, j0, j1, j2, j3, k, m, mh;\n  double wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i,\n    wd1r, wd1i, wd3r, wd3i;\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i;\n\n  mh = n >> 3;\n  m = 2 * mh;\n  j1 = m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[0] + a[j2];\n  x0i = -a[1] - a[j2 + 1];\n  x1r = a[0] - a[j2];\n  x1i = -a[1] + a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[0] = x0r + x2r;\n  a[1] = x0i - x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i + x2i;\n  a[j2] = x1r + x3i;\n  a[j2 + 1] = x1i + x3r;\n  a[j3] = x1r - x3i;\n  a[j3 + 1] = x1i - x3r;\n  wn4r = w[1];\n  csc1 = w[2];\n  csc3 = w[3];\n  wd1r = 1;\n  wd1i = 0;\n  wd3r = 1;\n  wd3i = 0;\n  k = 0;\n  for (j = 2; j < mh - 2; j += 4) {\n    k += 4;\n    wk1r = csc1 * (wd1r + w[k]);\n    wk1i = csc1 * (wd1i + w[k + 1]);\n    wk3r = csc3 * (wd3r + w[k + 2]);\n    wk3i = csc3 * (wd3i + w[k + 3]);\n    wd1r = w[k];\n    wd1i = w[k + 1];\n    wd3r = w[k + 2];\n    wd3i = w[k + 3];\n    j1 = j + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j] + a[j2];\n    x0i = -a[j + 1] - a[j2 + 1];\n    x1r = a[j] - a[j2];\n    x1i = -a[j + 1] + a[j2 + 1];\n    y0r = a[j + 2] + a[j2 + 2];\n    y0i = -a[j + 3] - a[j2 + 3];\n    y1r = a[j + 2] - a[j2 + 2];\n    y1i = -a[j + 3] + a[j2 + 3];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    y2r = a[j1 + 2] + a[j3 + 2];\n    y2i = a[j1 + 3] + a[j3 + 3];\n    y3r = a[j1 + 2] - a[j3 + 2];\n    y3i = a[j1 + 3] - a[j3 + 3];\n    a[j] = x0r + x2r;\n    a[j + 1] = x0i - x2i;\n    a[j + 2] = y0r + y2r;\n    a[j + 3] = y0i - y2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i + x2i;\n    a[j1 + 2] = y0r - y2r;\n    a[j1 + 3] = y0i + y2i;\n    x0r = x1r + x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1r * x0r - wk1i * x0i;\n    a[j2 + 1] = wk1r * x0i + wk1i * x0r;\n    x0r = y1r + y3i;\n    x0i = y1i + y3r;\n    a[j2 + 2] = wd1r * x0r - wd1i * x0i;\n    a[j2 + 3] = wd1r * x0i + wd1i * x0r;\n    x0r = x1r - x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3r * x0r + wk3i * x0i;\n    a[j3 + 1] = wk3r * x0i - wk3i * x0r;\n    x0r = y1r - y3i;\n    x0i = y1i - y3r;\n    a[j3 + 2] = wd3r * x0r + wd3i * x0i;\n    a[j3 + 3] = wd3r * x0i - wd3i * x0r;\n    j0 = m - j;\n    j1 = j0 + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j0] + a[j2];\n    x0i = -a[j0 + 1] - a[j2 + 1];\n    x1r = a[j0] - a[j2];\n    x1i = -a[j0 + 1] + a[j2 + 1];\n    y0r = a[j0 - 2] + a[j2 - 2];\n    y0i = -a[j0 - 1] - a[j2 - 1];\n    y1r = a[j0 - 2] - a[j2 - 2];\n    y1i = -a[j0 - 1] + a[j2 - 1];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    y2r = a[j1 - 2] + a[j3 - 2];\n    y2i = a[j1 - 1] + a[j3 - 1];\n    y3r = a[j1 - 2] - a[j3 - 2];\n    y3i = a[j1 - 1] - a[j3 - 1];\n    a[j0] = x0r + x2r;\n    a[j0 + 1] = x0i - x2i;\n    a[j0 - 2] = y0r + y2r;\n    a[j0 - 1] = y0i - y2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i + x2i;\n    a[j1 - 2] = y0r - y2r;\n    a[j1 - 1] = y0i + y2i;\n    x0r = x1r + x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1i * x0r - wk1r * x0i;\n    a[j2 + 1] = wk1i * x0i + wk1r * x0r;\n    x0r = y1r + y3i;\n    x0i = y1i + y3r;\n    a[j2 - 2] = wd1i * x0r - wd1r * x0i;\n    a[j2 - 1] = wd1i * x0i + wd1r * x0r;\n    x0r = x1r - x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3i * x0r + wk3r * x0i;\n    a[j3 + 1] = wk3i * x0i - wk3r * x0r;\n    x0r = y1r - y3i;\n    x0i = y1i - y3r;\n    a[j3 - 2] = wd3i * x0r + wd3r * x0i;\n    a[j3 - 1] = wd3i * x0i - wd3r * x0r;\n  }\n  wk1r = csc1 * (wd1r + wn4r);\n  wk1i = csc1 * (wd1i + wn4r);\n  wk3r = csc3 * (wd3r - wn4r);\n  wk3i = csc3 * (wd3i - wn4r);\n  j0 = mh;\n  j1 = j0 + m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[j0 - 2] + a[j2 - 2];\n  x0i = -a[j0 - 1] - a[j2 - 1];\n  x1r = a[j0 - 2] - a[j2 - 2];\n  x1i = -a[j0 - 1] + a[j2 - 1];\n  x2r = a[j1 - 2] + a[j3 - 2];\n  x2i = a[j1 - 1] + a[j3 - 1];\n  x3r = a[j1 - 2] - a[j3 - 2];\n  x3i = a[j1 - 1] - a[j3 - 1];\n  a[j0 - 2] = x0r + x2r;\n  a[j0 - 1] = x0i - x2i;\n  a[j1 - 2] = x0r - x2r;\n  a[j1 - 1] = x0i + x2i;\n  x0r = x1r + x3i;\n  x0i = x1i + x3r;\n  a[j2 - 2] = wk1r * x0r - wk1i * x0i;\n  a[j2 - 1] = wk1r * x0i + wk1i * x0r;\n  x0r = x1r - x3i;\n  x0i = x1i - x3r;\n  a[j3 - 2] = wk3r * x0r + wk3i * x0i;\n  a[j3 - 1] = wk3r * x0i - wk3i * x0r;\n  x0r = a[j0] + a[j2];\n  x0i = -a[j0 + 1] - a[j2 + 1];\n  x1r = a[j0] - a[j2];\n  x1i = -a[j0 + 1] + a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[j0] = x0r + x2r;\n  a[j0 + 1] = x0i - x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i + x2i;\n  x0r = x1r + x3i;\n  x0i = x1i + x3r;\n  a[j2] = wn4r * (x0r - x0i);\n  a[j2 + 1] = wn4r * (x0i + x0r);\n  x0r = x1r - x3i;\n  x0i = x1i - x3r;\n  a[j3] = -wn4r * (x0r + x0i);\n  a[j3 + 1] = -wn4r * (x0i - x0r);\n  x0r = a[j0 + 2] + a[j2 + 2];\n  x0i = -a[j0 + 3] - a[j2 + 3];\n  x1r = a[j0 + 2] - a[j2 + 2];\n  x1i = -a[j0 + 3] + a[j2 + 3];\n  x2r = a[j1 + 2] + a[j3 + 2];\n  x2i = a[j1 + 3] + a[j3 + 3];\n  x3r = a[j1 + 2] - a[j3 + 2];\n  x3i = a[j1 + 3] - a[j3 + 3];\n  a[j0 + 2] = x0r + x2r;\n  a[j0 + 3] = x0i - x2i;\n  a[j1 + 2] = x0r - x2r;\n  a[j1 + 3] = x0i + x2i;\n  x0r = x1r + x3i;\n  x0i = x1i + x3r;\n  a[j2 + 2] = wk1i * x0r - wk1r * x0i;\n  a[j2 + 3] = wk1i * x0i + wk1r * x0r;\n  x0r = x1r - x3i;\n  x0i = x1i - x3r;\n  a[j3 + 2] = wk3i * x0r + wk3r * x0i;\n  a[j3 + 3] = wk3i * x0i - wk3r * x0r;\n}\n\nvoid cftrec4(int n, double *a, int nw, double *w) {\n  int cfttree(int n, int j, int k, double *a, int nw, double *w);\n  void cftleaf(int n, int isplt, double *a, int nw, double *w);\n  void cftmdl1(int n, double *a, double *w);\n  int isplt, j, k, m;\n\n  m = n;\n  while (m > 512) {\n    m >>= 2;\n    cftmdl1(m, &a[n - m], &w[nw - (m >> 1)]);\n  }\n  cftleaf(m, 1, &a[n - m], nw, w);\n  k = 0;\n  for (j = n - m; j > 0; j -= m) {\n    k++;\n    isplt = cfttree(m, j, k, a, nw, w);\n    cftleaf(m, isplt, &a[j - m], nw, w);\n  }\n}\n\nint cfttree(int n, int j, int k, double *a, int nw, double *w) {\n  void cftmdl1(int n, double *a, double *w);\n  void cftmdl2(int n, double *a, double *w);\n  int i, isplt, m;\n\n  if ((k & 3) != 0) {\n    isplt = k & 1;\n    if (isplt != 0) {\n      cftmdl1(n, &a[j - n], &w[nw - (n >> 1)]);\n    } else {\n      cftmdl2(n, &a[j - n], &w[nw - n]);\n    }\n  } else {\n    m = n;\n    for (i = k; (i & 3) == 0; i >>= 2) {\n      m <<= 2;\n    }\n    isplt = i & 1;\n    if (isplt != 0) {\n      while (m > 128) {\n        cftmdl1(m, &a[j - m], &w[nw - (m >> 1)]);\n        m >>= 2;\n      }\n    } else {\n      while (m > 128) {\n        cftmdl2(m, &a[j - m], &w[nw - m]);\n        m >>= 2;\n      }\n    }\n  }\n  return isplt;\n}\n\nvoid cftleaf(int n, int isplt, double *a, int nw, double *w) {\n  void cftmdl1(int n, double *a, double *w);\n  void cftmdl2(int n, double *a, double *w);\n  void cftf161(double *a, double *w);\n  void cftf162(double *a, double *w);\n  void cftf081(double *a, double *w);\n  void cftf082(double *a, double *w);\n\n  if (n == 512) {\n    cftmdl1(128, a, &w[nw - 64]);\n    cftf161(a, &w[nw - 8]);\n    cftf162(&a[32], &w[nw - 32]);\n    cftf161(&a[64], &w[nw - 8]);\n    cftf161(&a[96], &w[nw - 8]);\n    cftmdl2(128, &a[128], &w[nw - 128]);\n    cftf161(&a[128], &w[nw - 8]);\n    cftf162(&a[160], &w[nw - 32]);\n    cftf161(&a[192], &w[nw - 8]);\n    cftf162(&a[224], &w[nw - 32]);\n    cftmdl1(128, &a[256], &w[nw - 64]);\n    cftf161(&a[256], &w[nw - 8]);\n    cftf162(&a[288], &w[nw - 32]);\n    cftf161(&a[320], &w[nw - 8]);\n    cftf161(&a[352], &w[nw - 8]);\n    if (isplt != 0) {\n      cftmdl1(128, &a[384], &w[nw - 64]);\n      cftf161(&a[480], &w[nw - 8]);\n    } else {\n      cftmdl2(128, &a[384], &w[nw - 128]);\n      cftf162(&a[480], &w[nw - 32]);\n    }\n    cftf161(&a[384], &w[nw - 8]);\n    cftf162(&a[416], &w[nw - 32]);\n    cftf161(&a[448], &w[nw - 8]);\n  } else {\n    cftmdl1(64, a, &w[nw - 32]);\n    cftf081(a, &w[nw - 8]);\n    cftf082(&a[16], &w[nw - 8]);\n    cftf081(&a[32], &w[nw - 8]);\n    cftf081(&a[48], &w[nw - 8]);\n    cftmdl2(64, &a[64], &w[nw - 64]);\n    cftf081(&a[64], &w[nw - 8]);\n    cftf082(&a[80], &w[nw - 8]);\n    cftf081(&a[96], &w[nw - 8]);\n    cftf082(&a[112], &w[nw - 8]);\n    cftmdl1(64, &a[128], &w[nw - 32]);\n    cftf081(&a[128], &w[nw - 8]);\n    cftf082(&a[144], &w[nw - 8]);\n    cftf081(&a[160], &w[nw - 8]);\n    cftf081(&a[176], &w[nw - 8]);\n    if (isplt != 0) {\n      cftmdl1(64, &a[192], &w[nw - 32]);\n      cftf081(&a[240], &w[nw - 8]);\n    } else {\n      cftmdl2(64, &a[192], &w[nw - 64]);\n      cftf082(&a[240], &w[nw - 8]);\n    }\n    cftf081(&a[192], &w[nw - 8]);\n    cftf082(&a[208], &w[nw - 8]);\n    cftf081(&a[224], &w[nw - 8]);\n  }\n}\n\nvoid cftmdl1(int n, double *a, double *w) {\n  int j, j0, j1, j2, j3, k, m, mh;\n  double wn4r, wk1r, wk1i, wk3r, wk3i;\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;\n\n  mh = n >> 3;\n  m = 2 * mh;\n  j1 = m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[0] + a[j2];\n  x0i = a[1] + a[j2 + 1];\n  x1r = a[0] - a[j2];\n  x1i = a[1] - a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i - x2i;\n  a[j2] = x1r - x3i;\n  a[j2 + 1] = x1i + x3r;\n  a[j3] = x1r + x3i;\n  a[j3 + 1] = x1i - x3r;\n  wn4r = w[1];\n  k = 0;\n  for (j = 2; j < mh; j += 2) {\n    k += 4;\n    wk1r = w[k];\n    wk1i = w[k + 1];\n    wk3r = w[k + 2];\n    wk3i = w[k + 3];\n    j1 = j + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j] + a[j2];\n    x0i = a[j + 1] + a[j2 + 1];\n    x1r = a[j] - a[j2];\n    x1i = a[j + 1] - a[j2 + 1];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    a[j] = x0r + x2r;\n    a[j + 1] = x0i + x2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i - x2i;\n    x0r = x1r - x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1r * x0r - wk1i * x0i;\n    a[j2 + 1] = wk1r * x0i + wk1i * x0r;\n    x0r = x1r + x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3r * x0r + wk3i * x0i;\n    a[j3 + 1] = wk3r * x0i - wk3i * x0r;\n    j0 = m - j;\n    j1 = j0 + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j0] + a[j2];\n    x0i = a[j0 + 1] + a[j2 + 1];\n    x1r = a[j0] - a[j2];\n    x1i = a[j0 + 1] - a[j2 + 1];\n    x2r = a[j1] + a[j3];\n    x2i = a[j1 + 1] + a[j3 + 1];\n    x3r = a[j1] - a[j3];\n    x3i = a[j1 + 1] - a[j3 + 1];\n    a[j0] = x0r + x2r;\n    a[j0 + 1] = x0i + x2i;\n    a[j1] = x0r - x2r;\n    a[j1 + 1] = x0i - x2i;\n    x0r = x1r - x3i;\n    x0i = x1i + x3r;\n    a[j2] = wk1i * x0r - wk1r * x0i;\n    a[j2 + 1] = wk1i * x0i + wk1r * x0r;\n    x0r = x1r + x3i;\n    x0i = x1i - x3r;\n    a[j3] = wk3i * x0r + wk3r * x0i;\n    a[j3 + 1] = wk3i * x0i - wk3r * x0r;\n  }\n  j0 = mh;\n  j1 = j0 + m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[j0] + a[j2];\n  x0i = a[j0 + 1] + a[j2 + 1];\n  x1r = a[j0] - a[j2];\n  x1i = a[j0 + 1] - a[j2 + 1];\n  x2r = a[j1] + a[j3];\n  x2i = a[j1 + 1] + a[j3 + 1];\n  x3r = a[j1] - a[j3];\n  x3i = a[j1 + 1] - a[j3 + 1];\n  a[j0] = x0r + x2r;\n  a[j0 + 1] = x0i + x2i;\n  a[j1] = x0r - x2r;\n  a[j1 + 1] = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  a[j2] = wn4r * (x0r - x0i);\n  a[j2 + 1] = wn4r * (x0i + x0r);\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  a[j3] = -wn4r * (x0r + x0i);\n  a[j3 + 1] = -wn4r * (x0i - x0r);\n}\n\nvoid cftmdl2(int n, double *a, double *w) {\n  int j, j0, j1, j2, j3, k, kr, m, mh;\n  double wn4r, wk1r, wk1i, wk3r, wk3i, wd1r, wd1i, wd3r, wd3i;\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y2r, y2i;\n\n  mh = n >> 3;\n  m = 2 * mh;\n  wn4r = w[1];\n  j1 = m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[0] - a[j2 + 1];\n  x0i = a[1] + a[j2];\n  x1r = a[0] + a[j2 + 1];\n  x1i = a[1] - a[j2];\n  x2r = a[j1] - a[j3 + 1];\n  x2i = a[j1 + 1] + a[j3];\n  x3r = a[j1] + a[j3 + 1];\n  x3i = a[j1 + 1] - a[j3];\n  y0r = wn4r * (x2r - x2i);\n  y0i = wn4r * (x2i + x2r);\n  a[0] = x0r + y0r;\n  a[1] = x0i + y0i;\n  a[j1] = x0r - y0r;\n  a[j1 + 1] = x0i - y0i;\n  y0r = wn4r * (x3r - x3i);\n  y0i = wn4r * (x3i + x3r);\n  a[j2] = x1r - y0i;\n  a[j2 + 1] = x1i + y0r;\n  a[j3] = x1r + y0i;\n  a[j3 + 1] = x1i - y0r;\n  k = 0;\n  kr = 2 * m;\n  for (j = 2; j < mh; j += 2) {\n    k += 4;\n    wk1r = w[k];\n    wk1i = w[k + 1];\n    wk3r = w[k + 2];\n    wk3i = w[k + 3];\n    kr -= 4;\n    wd1i = w[kr];\n    wd1r = w[kr + 1];\n    wd3i = w[kr + 2];\n    wd3r = w[kr + 3];\n    j1 = j + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j] - a[j2 + 1];\n    x0i = a[j + 1] + a[j2];\n    x1r = a[j] + a[j2 + 1];\n    x1i = a[j + 1] - a[j2];\n    x2r = a[j1] - a[j3 + 1];\n    x2i = a[j1 + 1] + a[j3];\n    x3r = a[j1] + a[j3 + 1];\n    x3i = a[j1 + 1] - a[j3];\n    y0r = wk1r * x0r - wk1i * x0i;\n    y0i = wk1r * x0i + wk1i * x0r;\n    y2r = wd1r * x2r - wd1i * x2i;\n    y2i = wd1r * x2i + wd1i * x2r;\n    a[j] = y0r + y2r;\n    a[j + 1] = y0i + y2i;\n    a[j1] = y0r - y2r;\n    a[j1 + 1] = y0i - y2i;\n    y0r = wk3r * x1r + wk3i * x1i;\n    y0i = wk3r * x1i - wk3i * x1r;\n    y2r = wd3r * x3r + wd3i * x3i;\n    y2i = wd3r * x3i - wd3i * x3r;\n    a[j2] = y0r + y2r;\n    a[j2 + 1] = y0i + y2i;\n    a[j3] = y0r - y2r;\n    a[j3 + 1] = y0i - y2i;\n    j0 = m - j;\n    j1 = j0 + m;\n    j2 = j1 + m;\n    j3 = j2 + m;\n    x0r = a[j0] - a[j2 + 1];\n    x0i = a[j0 + 1] + a[j2];\n    x1r = a[j0] + a[j2 + 1];\n    x1i = a[j0 + 1] - a[j2];\n    x2r = a[j1] - a[j3 + 1];\n    x2i = a[j1 + 1] + a[j3];\n    x3r = a[j1] + a[j3 + 1];\n    x3i = a[j1 + 1] - a[j3];\n    y0r = wd1i * x0r - wd1r * x0i;\n    y0i = wd1i * x0i + wd1r * x0r;\n    y2r = wk1i * x2r - wk1r * x2i;\n    y2i = wk1i * x2i + wk1r * x2r;\n    a[j0] = y0r + y2r;\n    a[j0 + 1] = y0i + y2i;\n    a[j1] = y0r - y2r;\n    a[j1 + 1] = y0i - y2i;\n    y0r = wd3i * x1r + wd3r * x1i;\n    y0i = wd3i * x1i - wd3r * x1r;\n    y2r = wk3i * x3r + wk3r * x3i;\n    y2i = wk3i * x3i - wk3r * x3r;\n    a[j2] = y0r + y2r;\n    a[j2 + 1] = y0i + y2i;\n    a[j3] = y0r - y2r;\n    a[j3 + 1] = y0i - y2i;\n  }\n  wk1r = w[m];\n  wk1i = w[m + 1];\n  j0 = mh;\n  j1 = j0 + m;\n  j2 = j1 + m;\n  j3 = j2 + m;\n  x0r = a[j0] - a[j2 + 1];\n  x0i = a[j0 + 1] + a[j2];\n  x1r = a[j0] + a[j2 + 1];\n  x1i = a[j0 + 1] - a[j2];\n  x2r = a[j1] - a[j3 + 1];\n  x2i = a[j1 + 1] + a[j3];\n  x3r = a[j1] + a[j3 + 1];\n  x3i = a[j1 + 1] - a[j3];\n  y0r = wk1r * x0r - wk1i * x0i;\n  y0i = wk1r * x0i + wk1i * x0r;\n  y2r = wk1i * x2r - wk1r * x2i;\n  y2i = wk1i * x2i + wk1r * x2r;\n  a[j0] = y0r + y2r;\n  a[j0 + 1] = y0i + y2i;\n  a[j1] = y0r - y2r;\n  a[j1 + 1] = y0i - y2i;\n  y0r = wk1i * x1r - wk1r * x1i;\n  y0i = wk1i * x1i + wk1r * x1r;\n  y2r = wk1r * x3r - wk1i * x3i;\n  y2i = wk1r * x3i + wk1i * x3r;\n  a[j2] = y0r - y2r;\n  a[j2 + 1] = y0i - y2i;\n  a[j3] = y0r + y2r;\n  a[j3 + 1] = y0i + y2i;\n}\n\nvoid cftfx41(int n, double *a, int nw, double *w) {\n  void cftf161(double *a, double *w);\n  void cftf162(double *a, double *w);\n  void cftf081(double *a, double *w);\n  void cftf082(double *a, double *w);\n\n  if (n == 128) {\n    cftf161(a, &w[nw - 8]);\n    cftf162(&a[32], &w[nw - 32]);\n    cftf161(&a[64], &w[nw - 8]);\n    cftf161(&a[96], &w[nw - 8]);\n  } else {\n    cftf081(a, &w[nw - 8]);\n    cftf082(&a[16], &w[nw - 8]);\n    cftf081(&a[32], &w[nw - 8]);\n    cftf081(&a[48], &w[nw - 8]);\n  }\n}\n\nvoid cftf161(double *a, double *w) {\n  double wn4r, wk1r, wk1i,\n    x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,\n    y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i,\n    y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i,\n    y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i;\n\n  wn4r = w[1];\n  wk1r = w[2];\n  wk1i = w[3];\n  x0r = a[0] + a[16];\n  x0i = a[1] + a[17];\n  x1r = a[0] - a[16];\n  x1i = a[1] - a[17];\n  x2r = a[8] + a[24];\n  x2i = a[9] + a[25];\n  x3r = a[8] - a[24];\n  x3i = a[9] - a[25];\n  y0r = x0r + x2r;\n  y0i = x0i + x2i;\n  y4r = x0r - x2r;\n  y4i = x0i - x2i;\n  y8r = x1r - x3i;\n  y8i = x1i + x3r;\n  y12r = x1r + x3i;\n  y12i = x1i - x3r;\n  x0r = a[2] + a[18];\n  x0i = a[3] + a[19];\n  x1r = a[2] - a[18];\n  x1i = a[3] - a[19];\n  x2r = a[10] + a[26];\n  x2i = a[11] + a[27];\n  x3r = a[10] - a[26];\n  x3i = a[11] - a[27];\n  y1r = x0r + x2r;\n  y1i = x0i + x2i;\n  y5r = x0r - x2r;\n  y5i = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  y9r = wk1r * x0r - wk1i * x0i;\n  y9i = wk1r * x0i + wk1i * x0r;\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  y13r = wk1i * x0r - wk1r * x0i;\n  y13i = wk1i * x0i + wk1r * x0r;\n  x0r = a[4] + a[20];\n  x0i = a[5] + a[21];\n  x1r = a[4] - a[20];\n  x1i = a[5] - a[21];\n  x2r = a[12] + a[28];\n  x2i = a[13] + a[29];\n  x3r = a[12] - a[28];\n  x3i = a[13] - a[29];\n  y2r = x0r + x2r;\n  y2i = x0i + x2i;\n  y6r = x0r - x2r;\n  y6i = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  y10r = wn4r * (x0r - x0i);\n  y10i = wn4r * (x0i + x0r);\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  y14r = wn4r * (x0r + x0i);\n  y14i = wn4r * (x0i - x0r);\n  x0r = a[6] + a[22];\n  x0i = a[7] + a[23];\n  x1r = a[6] - a[22];\n  x1i = a[7] - a[23];\n  x2r = a[14] + a[30];\n  x2i = a[15] + a[31];\n  x3r = a[14] - a[30];\n  x3i = a[15] - a[31];\n  y3r = x0r + x2r;\n  y3i = x0i + x2i;\n  y7r = x0r - x2r;\n  y7i = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  y11r = wk1i * x0r - wk1r * x0i;\n  y11i = wk1i * x0i + wk1r * x0r;\n  x0r = x1r + x3i;\n  x0i = x1i - x3r;\n  y15r = wk1r * x0r - wk1i * x0i;\n  y15i = wk1r * x0i + wk1i * x0r;\n  x0r = y12r - y14r;\n  x0i = y12i - y14i;\n  x1r = y12r + y14r;\n  x1i = y12i + y14i;\n  x2r = y13r - y15r;\n  x2i = y13i - y15i;\n  x3r = y13r + y15r;\n  x3i = y13i + y15i;\n  a[24] = x0r + x2r;\n  a[25] = x0i + x2i;\n  a[26] = x0r - x2r;\n  a[27] = x0i - x2i;\n  a[28] = x1r - x3i;\n  a[29] = x1i + x3r;\n  a[30] = x1r + x3i;\n  a[31] = x1i - x3r;\n  x0r = y8r + y10r;\n  x0i = y8i + y10i;\n  x1r = y8r - y10r;\n  x1i = y8i - y10i;\n  x2r = y9r + y11r;\n  x2i = y9i + y11i;\n  x3r = y9r - y11r;\n  x3i = y9i - y11i;\n  a[16] = x0r + x2r;\n  a[17] = x0i + x2i;\n  a[18] = x0r - x2r;\n  a[19] = x0i - x2i;\n  a[20] = x1r - x3i;\n  a[21] = x1i + x3r;\n  a[22] = x1r + x3i;\n  a[23] = x1i - x3r;\n  x0r = y5r - y7i;\n  x0i = y5i + y7r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  x0r = y5r + y7i;\n  x0i = y5i - y7r;\n  x3r = wn4r * (x0r - x0i);\n  x3i = wn4r * (x0i + x0r);\n  x0r = y4r - y6i;\n  x0i = y4i + y6r;\n  x1r = y4r + y6i;\n  x1i = y4i - y6r;\n  a[8] = x0r + x2r;\n  a[9] = x0i + x2i;\n  a[10] = x0r - x2r;\n  a[11] = x0i - x2i;\n  a[12] = x1r - x3i;\n  a[13] = x1i + x3r;\n  a[14] = x1r + x3i;\n  a[15] = x1i - x3r;\n  x0r = y0r + y2r;\n  x0i = y0i + y2i;\n  x1r = y0r - y2r;\n  x1i = y0i - y2i;\n  x2r = y1r + y3r;\n  x2i = y1i + y3i;\n  x3r = y1r - y3r;\n  x3i = y1i - y3i;\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[2] = x0r - x2r;\n  a[3] = x0i - x2i;\n  a[4] = x1r - x3i;\n  a[5] = x1i + x3r;\n  a[6] = x1r + x3i;\n  a[7] = x1i - x3r;\n}\n\nvoid cftf162(double *a, double *w) {\n  double wn4r, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i,\n    x0r, x0i, x1r, x1i, x2r, x2i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,\n    y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i,\n    y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i,\n    y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i;\n\n  wn4r = w[1];\n  wk1r = w[4];\n  wk1i = w[5];\n  wk3r = w[6];\n  wk3i = -w[7];\n  wk2r = w[8];\n  wk2i = w[9];\n  x1r = a[0] - a[17];\n  x1i = a[1] + a[16];\n  x0r = a[8] - a[25];\n  x0i = a[9] + a[24];\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  y0r = x1r + x2r;\n  y0i = x1i + x2i;\n  y4r = x1r - x2r;\n  y4i = x1i - x2i;\n  x1r = a[0] + a[17];\n  x1i = a[1] - a[16];\n  x0r = a[8] + a[25];\n  x0i = a[9] - a[24];\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  y8r = x1r - x2i;\n  y8i = x1i + x2r;\n  y12r = x1r + x2i;\n  y12i = x1i - x2r;\n  x0r = a[2] - a[19];\n  x0i = a[3] + a[18];\n  x1r = wk1r * x0r - wk1i * x0i;\n  x1i = wk1r * x0i + wk1i * x0r;\n  x0r = a[10] - a[27];\n  x0i = a[11] + a[26];\n  x2r = wk3i * x0r - wk3r * x0i;\n  x2i = wk3i * x0i + wk3r * x0r;\n  y1r = x1r + x2r;\n  y1i = x1i + x2i;\n  y5r = x1r - x2r;\n  y5i = x1i - x2i;\n  x0r = a[2] + a[19];\n  x0i = a[3] - a[18];\n  x1r = wk3r * x0r - wk3i * x0i;\n  x1i = wk3r * x0i + wk3i * x0r;\n  x0r = a[10] + a[27];\n  x0i = a[11] - a[26];\n  x2r = wk1r * x0r + wk1i * x0i;\n  x2i = wk1r * x0i - wk1i * x0r;\n  y9r = x1r - x2r;\n  y9i = x1i - x2i;\n  y13r = x1r + x2r;\n  y13i = x1i + x2i;\n  x0r = a[4] - a[21];\n  x0i = a[5] + a[20];\n  x1r = wk2r * x0r - wk2i * x0i;\n  x1i = wk2r * x0i + wk2i * x0r;\n  x0r = a[12] - a[29];\n  x0i = a[13] + a[28];\n  x2r = wk2i * x0r - wk2r * x0i;\n  x2i = wk2i * x0i + wk2r * x0r;\n  y2r = x1r + x2r;\n  y2i = x1i + x2i;\n  y6r = x1r - x2r;\n  y6i = x1i - x2i;\n  x0r = a[4] + a[21];\n  x0i = a[5] - a[20];\n  x1r = wk2i * x0r - wk2r * x0i;\n  x1i = wk2i * x0i + wk2r * x0r;\n  x0r = a[12] + a[29];\n  x0i = a[13] - a[28];\n  x2r = wk2r * x0r - wk2i * x0i;\n  x2i = wk2r * x0i + wk2i * x0r;\n  y10r = x1r - x2r;\n  y10i = x1i - x2i;\n  y14r = x1r + x2r;\n  y14i = x1i + x2i;\n  x0r = a[6] - a[23];\n  x0i = a[7] + a[22];\n  x1r = wk3r * x0r - wk3i * x0i;\n  x1i = wk3r * x0i + wk3i * x0r;\n  x0r = a[14] - a[31];\n  x0i = a[15] + a[30];\n  x2r = wk1i * x0r - wk1r * x0i;\n  x2i = wk1i * x0i + wk1r * x0r;\n  y3r = x1r + x2r;\n  y3i = x1i + x2i;\n  y7r = x1r - x2r;\n  y7i = x1i - x2i;\n  x0r = a[6] + a[23];\n  x0i = a[7] - a[22];\n  x1r = wk1i * x0r + wk1r * x0i;\n  x1i = wk1i * x0i - wk1r * x0r;\n  x0r = a[14] + a[31];\n  x0i = a[15] - a[30];\n  x2r = wk3i * x0r - wk3r * x0i;\n  x2i = wk3i * x0i + wk3r * x0r;\n  y11r = x1r + x2r;\n  y11i = x1i + x2i;\n  y15r = x1r - x2r;\n  y15i = x1i - x2i;\n  x1r = y0r + y2r;\n  x1i = y0i + y2i;\n  x2r = y1r + y3r;\n  x2i = y1i + y3i;\n  a[0] = x1r + x2r;\n  a[1] = x1i + x2i;\n  a[2] = x1r - x2r;\n  a[3] = x1i - x2i;\n  x1r = y0r - y2r;\n  x1i = y0i - y2i;\n  x2r = y1r - y3r;\n  x2i = y1i - y3i;\n  a[4] = x1r - x2i;\n  a[5] = x1i + x2r;\n  a[6] = x1r + x2i;\n  a[7] = x1i - x2r;\n  x1r = y4r - y6i;\n  x1i = y4i + y6r;\n  x0r = y5r - y7i;\n  x0i = y5i + y7r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  a[8] = x1r + x2r;\n  a[9] = x1i + x2i;\n  a[10] = x1r - x2r;\n  a[11] = x1i - x2i;\n  x1r = y4r + y6i;\n  x1i = y4i - y6r;\n  x0r = y5r + y7i;\n  x0i = y5i - y7r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  a[12] = x1r - x2i;\n  a[13] = x1i + x2r;\n  a[14] = x1r + x2i;\n  a[15] = x1i - x2r;\n  x1r = y8r + y10r;\n  x1i = y8i + y10i;\n  x2r = y9r - y11r;\n  x2i = y9i - y11i;\n  a[16] = x1r + x2r;\n  a[17] = x1i + x2i;\n  a[18] = x1r - x2r;\n  a[19] = x1i - x2i;\n  x1r = y8r - y10r;\n  x1i = y8i - y10i;\n  x2r = y9r + y11r;\n  x2i = y9i + y11i;\n  a[20] = x1r - x2i;\n  a[21] = x1i + x2r;\n  a[22] = x1r + x2i;\n  a[23] = x1i - x2r;\n  x1r = y12r - y14i;\n  x1i = y12i + y14r;\n  x0r = y13r + y15i;\n  x0i = y13i - y15r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  a[24] = x1r + x2r;\n  a[25] = x1i + x2i;\n  a[26] = x1r - x2r;\n  a[27] = x1i - x2i;\n  x1r = y12r + y14i;\n  x1i = y12i - y14r;\n  x0r = y13r - y15i;\n  x0i = y13i + y15r;\n  x2r = wn4r * (x0r - x0i);\n  x2i = wn4r * (x0i + x0r);\n  a[28] = x1r - x2i;\n  a[29] = x1i + x2r;\n  a[30] = x1r + x2i;\n  a[31] = x1i - x2r;\n}\n\nvoid cftf081(double *a, double *w) {\n  double wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,\n    y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;\n\n  wn4r = w[1];\n  x0r = a[0] + a[8];\n  x0i = a[1] + a[9];\n  x1r = a[0] - a[8];\n  x1i = a[1] - a[9];\n  x2r = a[4] + a[12];\n  x2i = a[5] + a[13];\n  x3r = a[4] - a[12];\n  x3i = a[5] - a[13];\n  y0r = x0r + x2r;\n  y0i = x0i + x2i;\n  y2r = x0r - x2r;\n  y2i = x0i - x2i;\n  y1r = x1r - x3i;\n  y1i = x1i + x3r;\n  y3r = x1r + x3i;\n  y3i = x1i - x3r;\n  x0r = a[2] + a[10];\n  x0i = a[3] + a[11];\n  x1r = a[2] - a[10];\n  x1i = a[3] - a[11];\n  x2r = a[6] + a[14];\n  x2i = a[7] + a[15];\n  x3r = a[6] - a[14];\n  x3i = a[7] - a[15];\n  y4r = x0r + x2r;\n  y4i = x0i + x2i;\n  y6r = x0r - x2r;\n  y6i = x0i - x2i;\n  x0r = x1r - x3i;\n  x0i = x1i + x3r;\n  x2r = x1r + x3i;\n  x2i = x1i - x3r;\n  y5r = wn4r * (x0r - x0i);\n  y5i = wn4r * (x0r + x0i);\n  y7r = wn4r * (x2r - x2i);\n  y7i = wn4r * (x2r + x2i);\n  a[8] = y1r + y5r;\n  a[9] = y1i + y5i;\n  a[10] = y1r - y5r;\n  a[11] = y1i - y5i;\n  a[12] = y3r - y7i;\n  a[13] = y3i + y7r;\n  a[14] = y3r + y7i;\n  a[15] = y3i - y7r;\n  a[0] = y0r + y4r;\n  a[1] = y0i + y4i;\n  a[2] = y0r - y4r;\n  a[3] = y0i - y4i;\n  a[4] = y2r - y6i;\n  a[5] = y2i + y6r;\n  a[6] = y2r + y6i;\n  a[7] = y2i - y6r;\n}\n\nvoid cftf082(double *a, double *w) {\n  double wn4r, wk1r, wk1i, x0r, x0i, x1r, x1i,\n    y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i,\n    y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;\n\n  wn4r = w[1];\n  wk1r = w[2];\n  wk1i = w[3];\n  y0r = a[0] - a[9];\n  y0i = a[1] + a[8];\n  y1r = a[0] + a[9];\n  y1i = a[1] - a[8];\n  x0r = a[4] - a[13];\n  x0i = a[5] + a[12];\n  y2r = wn4r * (x0r - x0i);\n  y2i = wn4r * (x0i + x0r);\n  x0r = a[4] + a[13];\n  x0i = a[5] - a[12];\n  y3r = wn4r * (x0r - x0i);\n  y3i = wn4r * (x0i + x0r);\n  x0r = a[2] - a[11];\n  x0i = a[3] + a[10];\n  y4r = wk1r * x0r - wk1i * x0i;\n  y4i = wk1r * x0i + wk1i * x0r;\n  x0r = a[2] + a[11];\n  x0i = a[3] - a[10];\n  y5r = wk1i * x0r - wk1r * x0i;\n  y5i = wk1i * x0i + wk1r * x0r;\n  x0r = a[6] - a[15];\n  x0i = a[7] + a[14];\n  y6r = wk1i * x0r - wk1r * x0i;\n  y6i = wk1i * x0i + wk1r * x0r;\n  x0r = a[6] + a[15];\n  x0i = a[7] - a[14];\n  y7r = wk1r * x0r - wk1i * x0i;\n  y7i = wk1r * x0i + wk1i * x0r;\n  x0r = y0r + y2r;\n  x0i = y0i + y2i;\n  x1r = y4r + y6r;\n  x1i = y4i + y6i;\n  a[0] = x0r + x1r;\n  a[1] = x0i + x1i;\n  a[2] = x0r - x1r;\n  a[3] = x0i - x1i;\n  x0r = y0r - y2r;\n  x0i = y0i - y2i;\n  x1r = y4r - y6r;\n  x1i = y4i - y6i;\n  a[4] = x0r - x1i;\n  a[5] = x0i + x1r;\n  a[6] = x0r + x1i;\n  a[7] = x0i - x1r;\n  x0r = y1r - y3i;\n  x0i = y1i + y3r;\n  x1r = y5r - y7r;\n  x1i = y5i - y7i;\n  a[8] = x0r + x1r;\n  a[9] = x0i + x1i;\n  a[10] = x0r - x1r;\n  a[11] = x0i - x1i;\n  x0r = y1r + y3i;\n  x0i = y1i - y3r;\n  x1r = y5r + y7r;\n  x1i = y5i + y7i;\n  a[12] = x0r - x1i;\n  a[13] = x0i + x1r;\n  a[14] = x0r + x1i;\n  a[15] = x0i - x1r;\n}\n\n\nvoid cftf040(double *a) {\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;\n\n  x0r = a[0] + a[4];\n  x0i = a[1] + a[5];\n  x1r = a[0] - a[4];\n  x1i = a[1] - a[5];\n  x2r = a[2] + a[6];\n  x2i = a[3] + a[7];\n  x3r = a[2] - a[6];\n  x3i = a[3] - a[7];\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[2] = x1r - x3i;\n  a[3] = x1i + x3r;\n  a[4] = x0r - x2r;\n  a[5] = x0i - x2i;\n  a[6] = x1r + x3i;\n  a[7] = x1i - x3r;\n}\n\nvoid cftb040(double *a) {\n  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;\n\n  x0r = a[0] + a[4];\n  x0i = a[1] + a[5];\n  x1r = a[0] - a[4];\n  x1i = a[1] - a[5];\n  x2r = a[2] + a[6];\n  x2i = a[3] + a[7];\n  x3r = a[2] - a[6];\n  x3i = a[3] - a[7];\n  a[0] = x0r + x2r;\n  a[1] = x0i + x2i;\n  a[2] = x1r + x3i;\n  a[3] = x1i - x3r;\n  a[4] = x0r - x2r;\n  a[5] = x0i - x2i;\n  a[6] = x1r - x3i;\n  a[7] = x1i + x3r;\n}\n\nvoid cftx020(double *a) {\n  double x0r, x0i;\n\n  x0r = a[0] - a[2];\n  x0i = a[1] - a[3];\n  a[0] += a[2];\n  a[1] += a[3];\n  a[2] = x0r;\n  a[3] = x0i;\n}\n\nvoid rftfsub(int n, double *a, int nc, double *c) {\n  int j, k, kk, ks, m;\n  double wkr, wki, xr, xi, yr, yi;\n\n  m = n >> 1;\n  ks = 2 * nc / m;\n  kk = 0;\n  for (j = 2; j < m; j += 2) {\n    k = n - j;\n    kk += ks;\n    wkr = 0.5 - c[nc - kk];\n    wki = c[kk];\n    xr = a[j] - a[k];\n    xi = a[j + 1] + a[k + 1];\n    yr = wkr * xr - wki * xi;\n    yi = wkr * xi + wki * xr;\n    a[j] -= yr;\n    a[j + 1] -= yi;\n    a[k] += yr;\n    a[k + 1] -= yi;\n  }\n}\n\nvoid rftbsub(int n, double *a, int nc, double *c) {\n  int j, k, kk, ks, m;\n  double wkr, wki, xr, xi, yr, yi;\n\n  m = n >> 1;\n  ks = 2 * nc / m;\n  kk = 0;\n  for (j = 2; j < m; j += 2) {\n    k = n - j;\n    kk += ks;\n    wkr = 0.5 - c[nc - kk];\n    wki = c[kk];\n    xr = a[j] - a[k];\n    xi = a[j + 1] + a[k + 1];\n    yr = wkr * xr + wki * xi;\n    yi = wkr * xi - wki * xr;\n    a[j] -= yr;\n    a[j + 1] -= yi;\n    a[k] += yr;\n    a[k + 1] -= yi;\n  }\n}\n\nvoid dctsub(int n, double *a, int nc, double *c) {\n  int j, k, kk, ks, m;\n  double wkr, wki, xr;\n\n  m = n >> 1;\n  ks = nc / n;\n  kk = 0;\n  for (j = 1; j < m; j++) {\n    k = n - j;\n    kk += ks;\n    wkr = c[kk] - c[nc - kk];\n    wki = c[kk] + c[nc - kk];\n    xr = wki * a[j] - wkr * a[k];\n    a[j] = wkr * a[j] + wki * a[k];\n    a[k] = xr;\n  }\n  a[m] *= c[0];\n}\n\nvoid dstsub(int n, double *a, int nc, double *c) {\n  int j, k, kk, ks, m;\n  double wkr, wki, xr;\n\n  m = n >> 1;\n  ks = nc / n;\n  kk = 0;\n  for (j = 1; j < m; j++) {\n    k = n - j;\n    kk += ks;\n    wkr = c[kk] - c[nc - kk];\n    wki = c[kk] + c[nc - kk];\n    xr = wki * a[k] - wkr * a[j];\n    a[k] = wkr * a[k] + wki * a[j];\n    a[j] = xr;\n  }\n  a[m] *= c[0];\n}\n\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/harvest.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// F0 estimation based on Harvest.\n//-----------------------------------------------------------------------------\n#include \"world/harvest.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/fft.h\"\n#include \"world/matlabfunctions.h\"\n\n//-----------------------------------------------------------------------------\n// struct for RawEventByHarvest()\n// \"negative\" means \"zero-crossing point going from positive to negative\"\n// \"positive\" means \"zero-crossing point going from negative to positive\"\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double *negative_interval_locations;\n  double *negative_intervals;\n  int number_of_negatives;\n  double *positive_interval_locations;\n  double *positive_intervals;\n  int number_of_positives;\n  double *peak_interval_locations;\n  double *peak_intervals;\n  int number_of_peaks;\n  double *dip_interval_locations;\n  double *dip_intervals;\n  int number_of_dips;\n} ZeroCrossings;\n\nnamespace {\n//-----------------------------------------------------------------------------\n// Since the waveform of beginning and ending after decimate include noise,\n// the input waveform is extended. This is the processing for the\n// compatibility with MATLAB version.\n//-----------------------------------------------------------------------------\nstatic void GetWaveformAndSpectrumSub(const double *x, int x_length,\n    int y_length, double actual_fs, int decimation_ratio, double *y) {\n  if (decimation_ratio == 1) {\n    for (int i = 0; i < x_length; ++i) y[i] = x[i];\n    return;\n  }\n\n  int lag =\n    static_cast<int>(ceil(140.0 / decimation_ratio) * decimation_ratio);\n  int new_x_length = x_length + lag * 2;\n  double *new_y = new double[new_x_length];\n  for (int i = 0; i < new_x_length; ++i) new_y[i] = 0.0;\n  double *new_x = new double[new_x_length];\n  for (int i = 0; i < lag; ++i) new_x[i] = x[0];\n  for (int i = lag; i < lag + x_length; ++i) new_x[i] = x[i - lag];\n  for (int i = lag + x_length; i < new_x_length; ++i)\n    new_x[i] = x[x_length - 1];\n\n  decimate(new_x, new_x_length, decimation_ratio, new_y);\n  for (int i = 0; i < y_length; ++i) y[i] = new_y[lag / decimation_ratio + i];\n\n  delete[] new_x;\n  delete[] new_y;\n}\n\n//-----------------------------------------------------------------------------\n// GetWaveformAndSpectrum() calculates the downsampled signal and its spectrum\n//-----------------------------------------------------------------------------\nstatic void GetWaveformAndSpectrum(const double *x, int x_length,\n    int y_length, double actual_fs, int fft_size, int decimation_ratio,\n    double *y, fft_complex *y_spectrum) {\n  // Initialization\n  for (int i = 0; i < fft_size; ++i) y[i] = 0.0;\n\n  // Processing for the compatibility with MATLAB version\n  GetWaveformAndSpectrumSub(x, x_length, y_length, actual_fs,\n      decimation_ratio, y);\n\n  // Removal of the DC component (y = y - mean value of y)\n  double mean_y = 0.0;\n  for (int i = 0; i < y_length; ++i) mean_y += y[i];\n  mean_y /= y_length;\n  for (int i = 0; i < y_length; ++i) y[i] -= mean_y;\n  for (int i = y_length; i < fft_size; ++i) y[i] = 0.0;\n\n  fft_plan forwardFFT =\n    fft_plan_dft_r2c_1d(fft_size, y, y_spectrum, FFT_ESTIMATE);\n  fft_execute(forwardFFT);\n\n  fft_destroy_plan(forwardFFT);\n}\n\n//-----------------------------------------------------------------------------\n// GetFilteredSignal() calculates the signal that is the convolution of the\n// input signal and band-pass filter.\n//-----------------------------------------------------------------------------\nstatic void GetFilteredSignal(double boundary_f0, int fft_size, double fs,\n    const fft_complex *y_spectrum, int y_length, double *filtered_signal) {\n  int filter_length_half = matlab_round(fs / boundary_f0 * 2.0);\n  double *band_pass_filter = new double[fft_size];\n  NuttallWindow(filter_length_half * 2 + 1, band_pass_filter);\n  for (int i = -filter_length_half; i <= filter_length_half; ++i)\n    band_pass_filter[i + filter_length_half] *=\n      cos(2 * world::kPi * boundary_f0 * i / fs);\n  for (int i = filter_length_half * 2 + 1; i < fft_size; ++i)\n    band_pass_filter[i] = 0.0;\n\n  fft_complex *band_pass_filter_spectrum = new fft_complex[fft_size];\n  fft_plan forwardFFT = fft_plan_dft_r2c_1d(fft_size, band_pass_filter,\n    band_pass_filter_spectrum, FFT_ESTIMATE);\n  fft_execute(forwardFFT);\n\n  // Convolution\n  double tmp = y_spectrum[0][0] * band_pass_filter_spectrum[0][0] -\n    y_spectrum[0][1] * band_pass_filter_spectrum[0][1];\n  band_pass_filter_spectrum[0][1] =\n    y_spectrum[0][0] * band_pass_filter_spectrum[0][1] +\n    y_spectrum[0][1] * band_pass_filter_spectrum[0][0];\n  band_pass_filter_spectrum[0][0] = tmp;\n  for (int i = 1; i <= fft_size / 2; ++i) {\n    tmp = y_spectrum[i][0] * band_pass_filter_spectrum[i][0] -\n      y_spectrum[i][1] * band_pass_filter_spectrum[i][1];\n    band_pass_filter_spectrum[i][1] =\n      y_spectrum[i][0] * band_pass_filter_spectrum[i][1] +\n      y_spectrum[i][1] * band_pass_filter_spectrum[i][0];\n    band_pass_filter_spectrum[i][0] = tmp;\n    band_pass_filter_spectrum[fft_size - i - 1][0] =\n      band_pass_filter_spectrum[i][0];\n    band_pass_filter_spectrum[fft_size - i - 1][1] =\n      band_pass_filter_spectrum[i][1];\n  }\n\n  fft_plan inverseFFT = fft_plan_dft_c2r_1d(fft_size,\n    band_pass_filter_spectrum, filtered_signal, FFT_ESTIMATE);\n  fft_execute(inverseFFT);\n\n  // Compensation of the delay.\n  int index_bias = filter_length_half + 1;\n  for (int i = 0; i < y_length; ++i)\n    filtered_signal[i] = filtered_signal[i + index_bias];\n\n  fft_destroy_plan(inverseFFT);\n  fft_destroy_plan(forwardFFT);\n  delete[] band_pass_filter_spectrum;\n  delete[] band_pass_filter;\n}\n\n//-----------------------------------------------------------------------------\n// CheckEvent() returns 1, provided that the input value is over 1.\n// This function is for RawEventByDio().\n//-----------------------------------------------------------------------------\nstatic inline int CheckEvent(int x) {\n  return x > 0 ? 1 : 0;\n}\n\n//-----------------------------------------------------------------------------\n// ZeroCrossingEngine() calculates the zero crossing points from positive to\n// negative.\n//-----------------------------------------------------------------------------\nstatic int ZeroCrossingEngine(const double *filtered_signal, int y_length,\n    double fs, double *interval_locations, double *intervals) {\n  int *negative_going_points = new int[y_length];\n\n  for (int i = 0; i < y_length - 1; ++i)\n    negative_going_points[i] =\n      0.0 < filtered_signal[i] && filtered_signal[i + 1] <= 0.0 ? i + 1 : 0;\n  negative_going_points[y_length - 1] = 0;\n\n  int *edges = new int[y_length];\n  int count = 0;\n  for (int i = 0; i < y_length; ++i)\n    if (negative_going_points[i] > 0)\n      edges[count++] = negative_going_points[i];\n\n  if (count < 2) {\n    delete[] edges;\n    delete[] negative_going_points;\n    return 0;\n  }\n\n  double *fine_edges = new double[count];\n  for (int i = 0; i < count; ++i)\n    fine_edges[i] = edges[i] - filtered_signal[edges[i] - 1] /\n      (filtered_signal[edges[i]] - filtered_signal[edges[i] - 1]);\n\n  for (int i = 0; i < count - 1; ++i) {\n    intervals[i] = fs / (fine_edges[i + 1] - fine_edges[i]);\n    interval_locations[i] = (fine_edges[i] + fine_edges[i + 1]) / 2.0 / fs;\n  }\n\n  delete[] fine_edges;\n  delete[] edges;\n  delete[] negative_going_points;\n  return count - 1;\n}\n\n//-----------------------------------------------------------------------------\n// GetFourZeroCrossingIntervals() calculates four zero-crossing intervals.\n// (1) Zero-crossing going from negative to positive.\n// (2) Zero-crossing going from positive to negative.\n// (3) Peak, and (4) dip. (3) and (4) are calculated from the zero-crossings of\n// the differential of waveform.\n//-----------------------------------------------------------------------------\nstatic void GetFourZeroCrossingIntervals(double *filtered_signal, int y_length,\n    double actual_fs, ZeroCrossings *zero_crossings) {\n  int maximum_number = y_length;\n  zero_crossings->negative_interval_locations = new double[maximum_number];\n  zero_crossings->positive_interval_locations = new double[maximum_number];\n  zero_crossings->peak_interval_locations = new double[maximum_number];\n  zero_crossings->dip_interval_locations = new double[maximum_number];\n  zero_crossings->negative_intervals = new double[maximum_number];\n  zero_crossings->positive_intervals = new double[maximum_number];\n  zero_crossings->peak_intervals = new double[maximum_number];\n  zero_crossings->dip_intervals = new double[maximum_number];\n\n  zero_crossings->number_of_negatives = ZeroCrossingEngine(filtered_signal,\n      y_length, actual_fs, zero_crossings->negative_interval_locations,\n      zero_crossings->negative_intervals);\n\n  for (int i = 0; i < y_length; ++i) filtered_signal[i] = -filtered_signal[i];\n  zero_crossings->number_of_positives = ZeroCrossingEngine(filtered_signal,\n      y_length, actual_fs, zero_crossings->positive_interval_locations,\n      zero_crossings->positive_intervals);\n\n  for (int i = 0; i < y_length - 1; ++i) filtered_signal[i] =\n    filtered_signal[i] - filtered_signal[i + 1];\n  zero_crossings->number_of_peaks = ZeroCrossingEngine(filtered_signal,\n      y_length - 1, actual_fs, zero_crossings->peak_interval_locations,\n      zero_crossings->peak_intervals);\n\n  for (int i = 0; i < y_length - 1; ++i)\n    filtered_signal[i] = -filtered_signal[i];\n  zero_crossings->number_of_dips = ZeroCrossingEngine(filtered_signal,\n      y_length - 1, actual_fs, zero_crossings->dip_interval_locations,\n      zero_crossings->dip_intervals);\n}\n\nstatic void GetF0CandidateContourSub(const double * const *interpolated_f0_set,\n    int f0_length, double f0_floor, double f0_ceil, double boundary_f0,\n    double *f0_candidate) {\n  double upper = boundary_f0 * 1.1;\n  double lower = boundary_f0 * 0.9;\n  for (int i = 0; i < f0_length; ++i) {\n    f0_candidate[i] = (interpolated_f0_set[0][i] +\n      interpolated_f0_set[1][i] + interpolated_f0_set[2][i] +\n      interpolated_f0_set[3][i]) / 4.0;\n\n    if (f0_candidate[i] > upper || f0_candidate[i] < lower ||\n        f0_candidate[i] > f0_ceil || f0_candidate[i] < f0_floor)\n      f0_candidate[i] = 0.0;\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateContour() calculates the F0 candidate contour in 1-ch signal.\n// Calculation of F0 candidates is carried out in GetF0CandidatesSub().\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateContour(const ZeroCrossings *zero_crossings,\n    double boundary_f0, double f0_floor, double f0_ceil,\n    const double *temporal_positions, int f0_length, double *f0_candidate) {\n  if (0 == CheckEvent(zero_crossings->number_of_negatives - 2) *\n      CheckEvent(zero_crossings->number_of_positives - 2) *\n      CheckEvent(zero_crossings->number_of_peaks - 2) *\n      CheckEvent(zero_crossings->number_of_dips - 2)) {\n    for (int i = 0; i < f0_length; ++i) f0_candidate[i] = 0.0;\n    return;\n  }\n\n  double *interpolated_f0_set[4];\n  for (int i = 0; i < 4; ++i)\n    interpolated_f0_set[i] = new double[f0_length];\n\n  interp1(zero_crossings->negative_interval_locations,\n      zero_crossings->negative_intervals,\n      zero_crossings->number_of_negatives,\n      temporal_positions, f0_length, interpolated_f0_set[0]);\n  interp1(zero_crossings->positive_interval_locations,\n      zero_crossings->positive_intervals,\n      zero_crossings->number_of_positives,\n      temporal_positions, f0_length, interpolated_f0_set[1]);\n  interp1(zero_crossings->peak_interval_locations,\n      zero_crossings->peak_intervals, zero_crossings->number_of_peaks,\n      temporal_positions, f0_length, interpolated_f0_set[2]);\n  interp1(zero_crossings->dip_interval_locations,\n      zero_crossings->dip_intervals, zero_crossings->number_of_dips,\n      temporal_positions, f0_length, interpolated_f0_set[3]);\n\n  GetF0CandidateContourSub(interpolated_f0_set, f0_length, f0_floor,\n      f0_ceil, boundary_f0, f0_candidate);\n  for (int i = 0; i < 4; ++i) delete[] interpolated_f0_set[i];\n}\n\n//-----------------------------------------------------------------------------\n// DestroyZeroCrossings() frees the memory of array in the struct\n//-----------------------------------------------------------------------------\nstatic void DestroyZeroCrossings(ZeroCrossings *zero_crossings) {\n  delete[] zero_crossings->negative_interval_locations;\n  delete[] zero_crossings->positive_interval_locations;\n  delete[] zero_crossings->peak_interval_locations;\n  delete[] zero_crossings->dip_interval_locations;\n  delete[] zero_crossings->negative_intervals;\n  delete[] zero_crossings->positive_intervals;\n  delete[] zero_crossings->peak_intervals;\n  delete[] zero_crossings->dip_intervals;\n}\n\n//-----------------------------------------------------------------------------\n// GetF0CandidateFromRawEvent() f0 candidate contour in 1-ch signal\n//-----------------------------------------------------------------------------\nstatic void GetF0CandidateFromRawEvent(double boundary_f0, double fs,\n    const fft_complex *y_spectrum, int y_length, int fft_size, double f0_floor,\n    double f0_ceil, const double *temporal_positions, int f0_length,\n    double *f0_candidate) {\n  double *filtered_signal = new double[fft_size];\n  GetFilteredSignal(boundary_f0, fft_size, fs, y_spectrum,\n      y_length, filtered_signal);\n\n  ZeroCrossings zero_crossings = { 0 };\n  GetFourZeroCrossingIntervals(filtered_signal, y_length, fs,\n      &zero_crossings);\n\n  GetF0CandidateContour(&zero_crossings, boundary_f0, f0_floor, f0_ceil,\n      temporal_positions, f0_length, f0_candidate);\n\n  DestroyZeroCrossings(&zero_crossings);\n  delete[] filtered_signal;\n}\n\n//-----------------------------------------------------------------------------\n// GetRawF0Candidates() calculates f0 candidates in all channels.\n//-----------------------------------------------------------------------------\nstatic void GetRawF0Candidates(const double *boundary_f0_list,\n    int number_of_bands, double actual_fs, int y_length,\n    const double *temporal_positions, int f0_length,\n    const fft_complex *y_spectrum, int fft_size, double f0_floor,\n    double f0_ceil, double **raw_f0_candidates) {\n  for (int i = 0; i < number_of_bands; ++i)\n    GetF0CandidateFromRawEvent(boundary_f0_list[i], actual_fs, y_spectrum,\n        y_length, fft_size, f0_floor, f0_ceil, temporal_positions, f0_length,\n        raw_f0_candidates[i]);\n}\n\n//-----------------------------------------------------------------------------\n// DetectF0CandidatesSub1() calculates VUV areas.\n//-----------------------------------------------------------------------------\nstatic int DetectOfficialF0CandidatesSub1(const int *vuv,\n    int number_of_channels, int *st, int *ed) {\n  int number_of_voiced_sections = 0;\n  int tmp;\n  for (int i = 1; i < number_of_channels; ++i) {\n    tmp = vuv[i] - vuv[i - 1];\n    if (tmp == 1) st[number_of_voiced_sections] = i;\n    if (tmp == -1) ed[number_of_voiced_sections++] = i;\n  }\n\n  return number_of_voiced_sections;\n}\n\n//-----------------------------------------------------------------------------\n// DetectOfficialF0CandidatesSub2() calculates F0 candidates in a frame\n//-----------------------------------------------------------------------------\nstatic int DetectOfficialF0CandidatesSub2(const int *vuv,\n    const double * const *raw_f0_candidates, int index,\n    int number_of_voiced_sections, const int *st, const int *ed,\n    int max_candidates, double *f0_list) {\n  int number_of_candidates = 0;\n  double tmp_f0;\n  for (int i = 0; i < number_of_voiced_sections; ++i) {\n    if (ed[i] - st[i] < 10) continue;\n\n    tmp_f0 = 0.0;\n    for (int j = st[i]; j < ed[i]; ++j)\n      tmp_f0 += raw_f0_candidates[j][index];\n    tmp_f0 /= (ed[i] - st[i]);\n    f0_list[number_of_candidates++] = tmp_f0;\n  }\n\n  for (int i = number_of_candidates; i < max_candidates; ++i) f0_list[i] = 0.0;\n  return number_of_candidates;\n}\n\n//-----------------------------------------------------------------------------\n// DetectOfficialF0Candidates() detectes F0 candidates from multi-channel\n// candidates.\n//-----------------------------------------------------------------------------\nstatic int DetectOfficialF0Candidates(const double * const * raw_f0_candidates,\n    int number_of_channels, int f0_length, int max_candidates,\n    double **f0_candidates) {\n  int number_of_candidates = 0;\n\n  int *vuv = new int[number_of_channels];\n  int *st = new int[number_of_channels];\n  int *ed = new int[number_of_channels];\n  int number_of_voiced_sections;\n  for (int i = 0; i < f0_length; ++i) {\n    for (int j = 0; j < number_of_channels; ++j)\n      vuv[j] = raw_f0_candidates[j][i] > 0 ? 1 : 0;\n    vuv[0] = vuv[number_of_channels - 1] = 0;\n    number_of_voiced_sections = DetectOfficialF0CandidatesSub1(vuv,\n      number_of_channels, st, ed);\n    number_of_candidates = MyMaxInt(number_of_candidates,\n      DetectOfficialF0CandidatesSub2(vuv, raw_f0_candidates, i,\n        number_of_voiced_sections, st, ed, max_candidates, f0_candidates[i]));\n  }\n\n  delete[] vuv;\n  delete[] st;\n  delete[] ed;\n  return number_of_candidates;\n}\n\n//-----------------------------------------------------------------------------\n// OverlapF0Candidates() spreads the candidates to anteroposterior frames.\n//-----------------------------------------------------------------------------\nstatic void OverlapF0Candidates(int f0_length, int number_of_candidates,\n    double **f0_candidates) {\n  int n = 3;\n  for (int i = 1; i <= n; ++i)\n    for (int j = 0; j < number_of_candidates; ++j) {\n      for (int k = i; k < f0_length; ++k)\n        f0_candidates[k][j + (number_of_candidates * i)] =\n          f0_candidates[k - i][j];\n      for (int k = 0; k < f0_length - i; ++k)\n        f0_candidates[k][j + (number_of_candidates * (i + n))] =\n          f0_candidates[k + i][j];\n    }\n}\n\n//-----------------------------------------------------------------------------\n// GetBaseIndex() calculates the temporal positions for windowing.\n//-----------------------------------------------------------------------------\nstatic void GetBaseIndex(double current_position, const double *base_time,\n    int base_time_length, double fs, int *base_index) {\n  // First-aid treatment\n  int basic_index =\n    matlab_round((current_position + base_time[0]) * fs + 0.001);\n\n  for (int i = 0; i < base_time_length; ++i) base_index[i] = basic_index + i;\n}\n\n//-----------------------------------------------------------------------------\n// GetMainWindow() generates the window function.\n//-----------------------------------------------------------------------------\nstatic void GetMainWindow(double current_position, const int *base_index,\n    int base_time_length, double fs, double window_length_in_time,\n    double *main_window) {\n  double tmp = 0.0;\n  for (int i = 0; i < base_time_length; ++i) {\n    tmp = (base_index[i] - 1.0) / fs - current_position;\n    main_window[i] = 0.42 +\n      0.5 * cos(2.0 * world::kPi * tmp / window_length_in_time) +\n      0.08 * cos(4.0 * world::kPi * tmp / window_length_in_time);\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetDiffWindow() generates the differentiated window.\n// Diff means differential.\n//-----------------------------------------------------------------------------\nstatic void GetDiffWindow(const double *main_window, int base_time_length,\n    double *diff_window) {\n  diff_window[0] = -main_window[1] / 2.0;\n  for (int i = 1; i < base_time_length - 1; ++i)\n    diff_window[i] = -(main_window[i + 1] - main_window[i - 1]) / 2.0;\n  diff_window[base_time_length - 1] = main_window[base_time_length - 2] / 2.0;\n}\n\n//-----------------------------------------------------------------------------\n// GetSpectra() calculates two spectra of the waveform windowed by windows\n// (main window and diff window).\n//-----------------------------------------------------------------------------\nstatic void GetSpectra(const double *x, int x_length, int fft_size,\n    const int *base_index, const double *main_window,\n    const double *diff_window, int base_time_length,\n    const ForwardRealFFT *forward_real_fft, fft_complex *main_spectrum,\n    fft_complex *diff_spectrum) {\n  int *safe_index = new int[base_time_length];\n\n  for (int i = 0; i < base_time_length; ++i)\n    safe_index[i] = MyMaxInt(0, MyMinInt(x_length - 1, base_index[i] - 1));\n  for (int i = 0; i < base_time_length; ++i)\n    forward_real_fft->waveform[i] = x[safe_index[i]] * main_window[i];\n  for (int i = base_time_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    main_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    main_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  for (int i = 0; i < base_time_length; ++i)\n    forward_real_fft->waveform[i] = x[safe_index[i]] * diff_window[i];\n  for (int i = base_time_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    diff_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    diff_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  delete[] safe_index;\n}\n\nstatic void FixF0(const double *power_spectrum, const double *numerator_i,\n    int fft_size, double fs, double current_f0, int number_of_harmonics,\n    double *refined_f0, double *score) {\n  double *amplitude_list = new double[number_of_harmonics];\n  double *instantaneous_frequency_list = new double[number_of_harmonics];\n\n  int index;\n  for (int i = 0; i < number_of_harmonics; ++i) {\n    index = matlab_round(current_f0 * fft_size / fs * (i + 1));\n    instantaneous_frequency_list[i] = power_spectrum[index] == 0.0 ? 0.0 :\n      static_cast<double>(index) * fs / fft_size +\n      numerator_i[index] / power_spectrum[index] * fs / 2.0 / world::kPi;\n    amplitude_list[i] = sqrt(power_spectrum[index]);\n  }\n  double denominator = 0.0;\n  double numerator = 0.0;\n  *score = 0.0;\n  for (int i = 0; i < number_of_harmonics; ++i) {\n    numerator += amplitude_list[i] * instantaneous_frequency_list[i];\n    denominator += amplitude_list[i] * (i + 1.0);\n    *score += fabs((instantaneous_frequency_list[i] / (i + 1.0) - current_f0) /\n      current_f0);\n  }\n\n  *refined_f0 = numerator / (denominator + world::kMySafeGuardMinimum);\n  *score = 1.0 / (*score / number_of_harmonics + world::kMySafeGuardMinimum);\n\n  delete[] amplitude_list;\n  delete[] instantaneous_frequency_list;\n}\n\n//-----------------------------------------------------------------------------\n// GetMeanF0() calculates the instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic void GetMeanF0(const double *x, int x_length, double fs,\n    double current_position, double current_f0, int fft_size,\n    double window_length_in_time, const double *base_time,\n    int base_time_length, double *refined_f0, double *refined_score) {\n  ForwardRealFFT forward_real_fft = { 0 };\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n  fft_complex *main_spectrum = new fft_complex[fft_size];\n  fft_complex *diff_spectrum = new fft_complex[fft_size];\n\n  int *base_index = new int[base_time_length];\n  double *main_window = new double[base_time_length];\n  double *diff_window = new double[base_time_length];\n\n  GetBaseIndex(current_position, base_time, base_time_length, fs, base_index);\n  GetMainWindow(current_position, base_index, base_time_length, fs,\n      window_length_in_time, main_window);\n  GetDiffWindow(main_window, base_time_length, diff_window);\n\n  GetSpectra(x, x_length, fft_size, base_index, main_window, diff_window,\n      base_time_length, &forward_real_fft, main_spectrum, diff_spectrum);\n\n  double *power_spectrum = new double[fft_size / 2 + 1];\n  double *numerator_i = new double[fft_size / 2 + 1];\n  for (int j = 0; j <= fft_size / 2; ++j) {\n    numerator_i[j] = main_spectrum[j][0] * diff_spectrum[j][1] -\n      main_spectrum[j][1] * diff_spectrum[j][0];\n    power_spectrum[j] = main_spectrum[j][0] * main_spectrum[j][0] +\n      main_spectrum[j][1] * main_spectrum[j][1];\n  }\n\n  int number_of_harmonics =\n    MyMinInt(static_cast<int>(fs / 2.0 / current_f0), 6);\n  FixF0(power_spectrum, numerator_i, fft_size, fs, current_f0,\n      number_of_harmonics, refined_f0, refined_score);\n\n  delete[] diff_spectrum;\n  delete[] diff_window;\n  delete[] main_window;\n  delete[] base_index;\n  delete[] numerator_i;\n  delete[] power_spectrum;\n  delete[] main_spectrum;\n  DestroyForwardRealFFT(&forward_real_fft);\n}\n\n//-----------------------------------------------------------------------------\n// GetRefinedF0() calculates F0 and its score based on instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic void GetRefinedF0(const double *x, int x_length, double fs,\n    double current_position, double current_f0, double f0_floor, double f0_ceil,\n    double *refined_f0, double *refined_score) {\n  if (current_f0 <= 0.0) {\n    *refined_f0 = 0.0;\n    *refined_score = 0.0;\n    return;\n  }\n\n  int half_window_length = static_cast<int>(1.5 * fs / current_f0 + 1.0);\n  double window_length_in_time = (2.0 * half_window_length + 1.0) / fs;\n  double *base_time = new double[half_window_length * 2 + 1];\n  for (int i = 0; i < half_window_length * 2 + 1; i++)\n    base_time[i] = (-half_window_length + i) / fs;\n  int fft_size = static_cast<int>(pow(2.0, 2.0 +\n    static_cast<int>(log(half_window_length * 2.0 + 1.0) / world::kLog2)));\n\n  GetMeanF0(x, x_length, fs, current_position, current_f0, fft_size,\n      window_length_in_time, base_time, half_window_length * 2 + 1,\n      refined_f0, refined_score);\n\n  if (*refined_f0 < f0_floor || *refined_f0 > f0_ceil ||\n      *refined_score < 2.5) {\n    *refined_f0 = 0.0;\n    *refined_score = 0.0;\n  }\n\n  delete[] base_time;\n}\n\n//-----------------------------------------------------------------------------\n// RefineF0() modifies the F0 by instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic void RefineF0Candidates(const double *x, int x_length, double fs,\n    const double *temporal_positions, int f0_length, int max_candidates,\n    double f0_floor, double f0_ceil,\n    double **refined_f0_candidates, double **f0_scores) {\n  for (int i = 0; i < f0_length; i++)\n    for (int j = 0; j < max_candidates; ++j)\n      GetRefinedF0(x, x_length, fs, temporal_positions[i],\n          refined_f0_candidates[i][j], f0_floor, f0_ceil,\n          &refined_f0_candidates[i][j], &f0_scores[i][j]);\n}\n\n//-----------------------------------------------------------------------------\n// SelectBestF0() obtains the nearlest F0 in reference_f0.\n//-----------------------------------------------------------------------------\nstatic double SelectBestF0(double reference_f0, const double *f0_candidates,\n    int number_of_candidates, double allowed_range, double *best_error) {\n  double best_f0 = 0.0;\n  *best_error = allowed_range;\n\n  double tmp;\n  for (int i = 0; i < number_of_candidates; ++i) {\n    tmp = fabs(reference_f0 - f0_candidates[i]) / reference_f0;\n    if (tmp > *best_error) continue;\n    best_f0 = f0_candidates[i];\n    *best_error = tmp;\n  }\n\n  return best_f0;\n}\n\nstatic void RemoveUnreliableCandidatesSub(int i, int j,\n    const double * const *tmp_f0_candidates, int number_of_candidates,\n    double **f0_candidates, double **f0_scores) {\n  double reference_f0 = f0_candidates[i][j];\n  double error1, error2, min_error;\n  double threshold = 0.05;\n  if (reference_f0 == 0) return;\n  SelectBestF0(reference_f0, tmp_f0_candidates[i + 1],\n      number_of_candidates, 1.0, &error1);\n  SelectBestF0(reference_f0, tmp_f0_candidates[i - 1],\n      number_of_candidates, 1.0, &error2);\n  min_error = MyMinDouble(error1, error2);\n  if (min_error <= threshold) return;\n  f0_candidates[i][j] = 0;\n  f0_scores[i][j] = 0;\n}\n\n//-----------------------------------------------------------------------------\n// RemoveUnreliableCandidates().\n//-----------------------------------------------------------------------------\nstatic void RemoveUnreliableCandidates(int f0_length, int number_of_candidates,\n    double **f0_candidates, double **f0_scores) {\n  double **tmp_f0_candidates = new double *[f0_length];\n  for (int i = 0; i < f0_length; ++i)\n    tmp_f0_candidates[i] = new double[number_of_candidates];\n  for (int i = 0; i < f0_length; ++i)\n    for (int j = 0; j < number_of_candidates; ++j)\n      tmp_f0_candidates[i][j] = f0_candidates[i][j];\n\n  for (int i = 1; i < f0_length - 1; ++i)\n    for (int j = 0; j < number_of_candidates; ++j)\n      RemoveUnreliableCandidatesSub(i, j, tmp_f0_candidates,\n          number_of_candidates, f0_candidates, f0_scores);\n\n  for (int i = 0; i < f0_length; ++i) delete[] tmp_f0_candidates[i];\n  delete[] tmp_f0_candidates;\n}\n\n//-----------------------------------------------------------------------------\n// SearchF0Base() gets the F0 with the highest score.\n//-----------------------------------------------------------------------------\nstatic void SearchF0Base(const double * const *f0_candidates,\n    const double * const *f0_scores, int f0_length, int number_of_candidates,\n    double *base_f0_contour) {\n  double tmp_best_score;\n  for (int i = 0; i < f0_length; ++i) {\n    base_f0_contour[i] = tmp_best_score = 0.0;\n    for (int j = 0; j < number_of_candidates; ++j)\n      if (f0_scores[i][j] > tmp_best_score) {\n        base_f0_contour[i] = f0_candidates[i][j];\n        tmp_best_score = f0_scores[i][j];\n      }\n  }\n}\n\n//-----------------------------------------------------------------------------\n// Step 1: Rapid change of F0 contour is replaced by 0.\n//-----------------------------------------------------------------------------\nstatic void FixStep1(const double *f0_base, int f0_length,\n    double allowed_range, double *f0_step1) {\n  for (int i = 0; i < f0_length; ++i) f0_step1[i] = 0.0;\n  double reference_f0;\n  for (int i = 2; i < f0_length; ++i) {\n    if (f0_base[i] == 0.0) continue;\n    reference_f0 = f0_base[i - 1] * 2 - f0_base[i - 2];\n    f0_step1[i] =\n      fabs((f0_base[i] - reference_f0) / reference_f0) > allowed_range &&\n      fabs((f0_base[i] - f0_base[i - 1])) / f0_base[i - 1] > allowed_range ?\n      0.0 : f0_base[i];\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetBoundaryList() detects boundaries between voiced and unvoiced sections.\n//-----------------------------------------------------------------------------\nstatic int GetBoundaryList(const double *f0, int f0_length,\n    int *boundary_list) {\n  int number_of_boundaries = 0;\n  int *vuv = new int[f0_length];\n  for (int i = 0; i < f0_length; ++i)\n    vuv[i] = f0[i] > 0 ? 1 : 0;\n  vuv[0] = vuv[f0_length - 1] = 0;\n\n  for (int i = 1; i < f0_length; ++i)\n    if (vuv[i] - vuv[i - 1] != 0) {\n      boundary_list[number_of_boundaries] = i - number_of_boundaries % 2;\n      number_of_boundaries++;\n    }\n\n  delete[] vuv;\n  return number_of_boundaries;\n}\n\n//-----------------------------------------------------------------------------\n// Step 2: Voiced sections with a short period are removed.\n//-----------------------------------------------------------------------------\nstatic void FixStep2(const double *f0_step1, int f0_length,\n    int voice_range_minimum, double *f0_step2) {\n  for (int i = 0; i < f0_length; ++i) f0_step2[i] = f0_step1[i];\n  int *boundary_list = new int[f0_length];\n  int number_of_boundaries =\n    GetBoundaryList(f0_step1, f0_length, boundary_list);\n\n  for (int i = 0; i < number_of_boundaries / 2; ++i) {\n    if (boundary_list[i * 2 + 1] - boundary_list[i * 2] >= voice_range_minimum)\n      continue;\n    for (int j = boundary_list[i * 2]; j <= boundary_list[(i * 2) + 1]; ++j)\n      f0_step2[j] = 0.0;\n  }\n  delete[] boundary_list;\n}\n\n//-----------------------------------------------------------------------------\n// GetMultiChannelF0() separates each voiced section into independent channel.\n//-----------------------------------------------------------------------------\nstatic void GetMultiChannelF0(const double *f0, int f0_length,\n    const int *boundary_list, int number_of_boundaries,\n    double **multi_channel_f0) {\n  for (int i = 0; i < number_of_boundaries / 2; ++i) {\n    for (int j = 0; j < boundary_list[i * 2]; ++j)\n      multi_channel_f0[i][j] = 0.0;\n    for (int j = boundary_list[i * 2]; j <= boundary_list[i * 2 + 1]; ++j)\n      multi_channel_f0[i][j] = f0[j];\n    for (int j = boundary_list[i * 2 + 1] + 1; j < f0_length; ++j)\n      multi_channel_f0[i][j] = 0.0;\n  }\n}\n\n//-----------------------------------------------------------------------------\n// abs() often causes bugs, an original function is used.\n//-----------------------------------------------------------------------------\nstatic inline int MyAbsInt(int x) {\n  return x > 0 ? x : -x;\n}\n\n//-----------------------------------------------------------------------------\n// ExtendF0() : The Hand erasing the Space.\n// The subfunction of Extend().\n//-----------------------------------------------------------------------------\nstatic int ExtendF0(const double *f0, int f0_length, int origin,\n    int last_point, int shift, const double * const *f0_candidates,\n    int number_of_candidates, double allowed_range, double *extended_f0) {\n  int threshold = 4;\n  double tmp_f0 = extended_f0[origin];\n  int shifted_origin = origin;\n\n  int distance = MyAbsInt(last_point - origin);\n  int *index_list = new int[distance + 1];\n  for (int i = 0; i <= distance; ++i) index_list[i] = origin + shift * i;\n\n  int count = 0;\n  double dammy;\n  for (int i = 0; i <= distance; ++i) {\n    extended_f0[index_list[i] + shift] =\n      SelectBestF0(tmp_f0, f0_candidates[index_list[i] + shift],\n      number_of_candidates, allowed_range, &dammy);\n    if (extended_f0[index_list[i] + shift] == 0.0) {\n      count++;\n    } else {\n      tmp_f0 = extended_f0[index_list[i] + shift];\n      count = 0;\n      shifted_origin = index_list[i] + shift;\n    }\n    if (count == threshold) break;\n  }\n\n  delete[] index_list;\n  return shifted_origin;\n}\n\n//-----------------------------------------------------------------------------\n// Swap the f0 contour and boundary.\n// It is used in ExtendSub() and MergeF0();\n//-----------------------------------------------------------------------------\nstatic void Swap(int index1, int index2, double **f0, int *boundary) {\n  double *tmp_pointer;\n  int tmp_index;\n  tmp_pointer = f0[index1];\n  f0[index1] = f0[index2];\n  f0[index2] = tmp_pointer;\n  tmp_index = boundary[index1 * 2];\n  boundary[index1 * 2] = boundary[index2 * 2];\n  boundary[index2 * 2] = tmp_index;\n  tmp_index = boundary[index1 * 2 + 1];\n  boundary[index1 * 2 + 1] = boundary[index2 * 2 + 1];\n  boundary[index2 * 2 + 1] = tmp_index;\n}\n\nstatic int ExtendSub(const double * const *extended_f0,\n    const int *boundary_list, int number_of_sections,\n    double **selected_extended_f0, int *selected_boundary_list) {\n  double threshold = 2200.0;\n  int count = 0;\n  double mean_f0 = 0.0;\n  int st, ed;\n  for (int i = 0; i < number_of_sections; ++i) {\n    st = boundary_list[i * 2];\n    ed = boundary_list[i * 2 + 1];\n    for (int j = st; j < ed; ++j) mean_f0 += extended_f0[i][j];\n    mean_f0 /= ed - st;\n    if (threshold / mean_f0 < ed - st)\n      Swap(count++, i, selected_extended_f0, selected_boundary_list);\n  }\n  return count;\n}\n\n//-----------------------------------------------------------------------------\n// Extend() : The Hand erasing the Space.\n//-----------------------------------------------------------------------------\nstatic int Extend(const double * const *multi_channel_f0,\n    int number_of_sections, int f0_length, const int *boundary_list,\n    const double * const *f0_candidates, int number_of_candidates,\n    double allowed_range, double **extended_f0, int *shifted_boundary_list) {\n  int threshold = 100;\n  for (int i = 0; i < number_of_sections; ++i) {\n    shifted_boundary_list[i * 2 + 1] = ExtendF0(multi_channel_f0[i],\n      f0_length, boundary_list[i * 2 + 1],\n      MyMinInt(f0_length - 2, boundary_list[i * 2 + 1] + threshold), 1,\n      f0_candidates, number_of_candidates, allowed_range, extended_f0[i]);\n    shifted_boundary_list[i * 2] = ExtendF0(multi_channel_f0[i], f0_length,\n      boundary_list[i * 2], MyMaxInt(1, boundary_list[i * 2] - threshold), -1,\n      f0_candidates, number_of_candidates, allowed_range, extended_f0[i]);\n  }\n\n  return ExtendSub(multi_channel_f0, shifted_boundary_list,\n    number_of_sections, extended_f0, shifted_boundary_list);\n}\n\n//-----------------------------------------------------------------------------\n// Indices are sorted.\n//-----------------------------------------------------------------------------\nstatic void MakeSortedOrder(const int *boundary_list, int number_of_sections,\n    int *order) {\n  for (int i = 0; i < number_of_sections; ++i) order[i] = i;\n  int tmp;\n  for (int i = 1; i < number_of_sections; ++i)\n    for (int j = i - 1; j >= 0; --j)\n      if (boundary_list[order[j] * 2] > boundary_list[order[i] * 2]) {\n        tmp = order[i];\n        order[i] = order[j];\n        order[j] = tmp;\n      } else {\n        break;\n      }\n}\n\n//-----------------------------------------------------------------------------\n// Serach the highest score with the candidate F0.\n//-----------------------------------------------------------------------------\nstatic double SearchScore(double f0, const double *f0_candidates,\n    const double  *f0_scores, int number_of_candidates) {\n  double score = 0.0;\n  for (int i = 0; i < number_of_candidates; ++i)\n    if (f0 == f0_candidates[i] && score < f0_scores[i]) score = f0_scores[i];\n  return score;\n}\n\n//-----------------------------------------------------------------------------\n// Subfunction of MergeF0()\n//-----------------------------------------------------------------------------\nstatic int MergeF0Sub(const double *f0_1, int f0_length, int st1, int ed1,\n    const double *f0_2, int st2, int ed2, const double * const *f0_candidates,\n    const double * const *f0_scores, int number_of_candidates,\n    double *merged_f0) {\n  if (st1 <= st2 && ed1 >= ed2) return ed1;\n\n  double score1 = 0.0;\n  double score2 = 0.0;\n  for (int i = st2; i <= ed1; ++i) {\n    score1 += SearchScore(f0_1[i], f0_candidates[i], f0_scores[i],\n      number_of_candidates);\n    score2 += SearchScore(f0_2[i], f0_candidates[i], f0_scores[i],\n      number_of_candidates);\n  }\n  if (score1 > score2)\n    for (int i = ed1; i <= ed2; ++i) merged_f0[i] = f0_2[i];\n  else\n    for (int i = st2; i <= ed2; ++i) merged_f0[i] = f0_2[i];\n\n  return ed2;\n}\n\n//-----------------------------------------------------------------------------\n// Overlapped F0 contours are merged by the likability score.\n//-----------------------------------------------------------------------------\nstatic void MergeF0(const double * const *multi_channel_f0, int *boundary_list,\n    int number_of_channels, int f0_length, const double * const *f0_candidates,\n    const double * const *f0_scores, int number_of_candidates,\n    double *merged_f0) {\n  int *order = new int[number_of_channels];\n  MakeSortedOrder(boundary_list, number_of_channels, order);\n\n  for (int i = 0; i < f0_length; ++i)\n    merged_f0[i] = multi_channel_f0[0][i];\n\n  for (int i = 1; i < number_of_channels; ++i)\n    if (boundary_list[order[i] * 2] - boundary_list[1] > 0) {\n      for (int j = boundary_list[order[i] * 2];\n        j <= boundary_list[order[i] * 2 + 1]; ++j)\n        merged_f0[j] = multi_channel_f0[order[i]][j];\n      boundary_list[0] = boundary_list[order[i] * 2];\n      boundary_list[1] = boundary_list[order[i] * 2 + 1];\n    } else {\n      boundary_list[1] =\n        MergeF0Sub(merged_f0, f0_length, boundary_list[0], boundary_list[1],\n        multi_channel_f0[order[i]], boundary_list[order[i] * 2],\n        boundary_list[order[i] * 2 + 1], f0_candidates, f0_scores,\n        number_of_candidates, merged_f0);\n    }\n\n  delete[] order;\n}\n\n//-----------------------------------------------------------------------------\n// Step 3: Voiced sections are extended based on the continuity of F0 contour\n//-----------------------------------------------------------------------------\nstatic void FixStep3(const double *f0_step2, int f0_length,\n    int number_of_candidates, const double * const *f0_candidates,\n    double allowed_range, const double * const *f0_scores, double *f0_step3) {\n  for (int i = 0; i < f0_length; ++i) f0_step3[i] = f0_step2[i];\n  int *boundary_list = new int[f0_length];\n  int number_of_boundaries =\n    GetBoundaryList(f0_step2, f0_length, boundary_list);\n\n  double **multi_channel_f0 = new double *[number_of_boundaries / 2];\n  for (int i = 0; i < number_of_boundaries / 2; ++i)\n    multi_channel_f0[i] = new double[f0_length];\n  GetMultiChannelF0(f0_step2, f0_length, boundary_list, number_of_boundaries,\n      multi_channel_f0);\n\n  int number_of_channels =\n    Extend(multi_channel_f0, number_of_boundaries / 2, f0_length,\n    boundary_list, f0_candidates, number_of_candidates, allowed_range,\n    multi_channel_f0, boundary_list);\n\n  if (number_of_channels != 0)\n    MergeF0(multi_channel_f0, boundary_list, number_of_channels, f0_length,\n        f0_candidates, f0_scores, number_of_candidates, f0_step3);\n\n  for (int i = 0; i < number_of_boundaries / 2; ++i)\n    delete[] multi_channel_f0[i];\n  delete[] multi_channel_f0;\n  delete[] boundary_list;\n}\n\n//-----------------------------------------------------------------------------\n// Step 4: F0s in short unvoiced section are faked\n//-----------------------------------------------------------------------------\nstatic void FixStep4(const double *f0_step3, int f0_length, int threshold,\n    double *f0_step4) {\n  for (int i = 0; i < f0_length; ++i) f0_step4[i] = f0_step3[i];\n  int *boundary_list = new int[f0_length];\n  int number_of_boundaries =\n    GetBoundaryList(f0_step3, f0_length, boundary_list);\n\n  int distance;\n  double tmp0, tmp1, coefficient;\n  int count;\n  for (int i = 0; i < number_of_boundaries / 2 - 1; ++i) {\n    distance = boundary_list[(i + 1) * 2] - boundary_list[i * 2 + 1] - 1;\n    if (distance >= threshold) continue;\n    tmp0 = f0_step3[boundary_list[i * 2 + 1]] + 1;\n    tmp1 = f0_step3[boundary_list[(i + 1) * 2]] - 1;\n    coefficient = (tmp1 - tmp0) / (distance + 1.0);\n    count = 1;\n    for (int j = boundary_list[i * 2 + 1] + 1;\n        j <= boundary_list[(i + 1) * 2] - 1; ++j)\n      f0_step4[j] = tmp0 + coefficient * count++;\n  }\n  delete[] boundary_list;\n}\n\n//-----------------------------------------------------------------------------\n// FixF0Contour() obtains the likely F0 contour.\n//-----------------------------------------------------------------------------\nstatic void FixF0Contour(const double * const *f0_candidates,\n    const double * const *f0_scores, int f0_length, int number_of_candidates,\n    double *best_f0_contour) {\n  double *tmp_f0_contour1 = new double[f0_length];\n  double *tmp_f0_contour2 = new double[f0_length];\n\n  // These parameters are optimized by speech databases.\n  SearchF0Base(f0_candidates, f0_scores, f0_length,\n      number_of_candidates, tmp_f0_contour1);\n  FixStep1(tmp_f0_contour1, f0_length, 0.008, tmp_f0_contour2);\n  FixStep2(tmp_f0_contour2, f0_length, 6, tmp_f0_contour1);\n  FixStep3(tmp_f0_contour1, f0_length, number_of_candidates, f0_candidates,\n      0.18, f0_scores, tmp_f0_contour2);\n  FixStep4(tmp_f0_contour2, f0_length, 9, best_f0_contour);\n\n  delete[] tmp_f0_contour1;\n  delete[] tmp_f0_contour2;\n}\n\n//-----------------------------------------------------------------------------\n// This function uses zero-lag Butterworth filter.\n//-----------------------------------------------------------------------------\nstatic void FilteringF0(const double *a, const double *b, double *x,\n    int x_length, int st, int ed, double *y) {\n  double w[2] = { 0.0, 0.0 };\n  double wt;\n  double *tmp_x = new double[x_length];\n\n  for (int i = 0; i < st; ++i) x[i] = x[st];\n  for (int i = ed + 1; i < x_length; ++i) x[i] = x[ed];\n\n  for (int i = 0; i < x_length; ++i) {\n    wt = x[i] + a[0] * w[0] + a[1] * w[1];\n    tmp_x[x_length - i - 1] = b[0] * wt + b[1] * w[0] + b[0] * w[1];\n    w[1] = w[0];\n    w[0] = wt;\n  }\n\n  w[0] = w[1] = 0.0;\n  for (int i = 0; i < x_length; ++i) {\n    wt = tmp_x[i] + a[0] * w[0] + a[1] * w[1];\n    y[x_length - i - 1] = b[0] * wt + b[1] * w[0] + b[0] * w[1];\n    w[1] = w[0];\n    w[0] = wt;\n  }\n\n  delete[] tmp_x;\n}\n\n//-----------------------------------------------------------------------------\n// SmoothF0Contour() uses the zero-lag Butterworth filter for smoothing.\n//-----------------------------------------------------------------------------\nstatic void SmoothF0Contour(const double *f0, int f0_length,\n    double *smoothed_f0) {\n  const double b[2] =\n    { 0.0078202080334971724, 0.015640416066994345 };\n  const double a[2] =\n    { 1.7347257688092754, -0.76600660094326412 };\n  int lag = 300;\n  int new_f0_length = f0_length + lag * 2;\n  double *f0_contour = new double[new_f0_length];\n  for (int i = 0; i < lag; ++i) f0_contour[i] = 0.0;\n  for (int i = lag; i < lag + f0_length; ++i) f0_contour[i] = f0[i - lag];\n  for (int i = lag + f0_length; i < new_f0_length; ++i) f0_contour[i] = 0.0;\n\n  int *boundary_list = new int[new_f0_length];\n  int number_of_boundaries =\n    GetBoundaryList(f0_contour, new_f0_length, boundary_list);\n  double **multi_channel_f0 = new double *[number_of_boundaries / 2];\n  for (int i = 0; i < number_of_boundaries / 2; ++i)\n    multi_channel_f0[i] = new double[new_f0_length];\n  GetMultiChannelF0(f0_contour, new_f0_length, boundary_list,\n      number_of_boundaries, multi_channel_f0);\n\n  for (int i = 0; i < number_of_boundaries / 2; ++i) {\n    FilteringF0(a, b, multi_channel_f0[i], new_f0_length,\n      boundary_list[i * 2], boundary_list[i * 2 + 1], f0_contour);\n    for (int j = boundary_list[i * 2]; j <= boundary_list[i * 2 + 1]; ++j)\n      smoothed_f0[j - lag] = f0_contour[j];\n  }\n\n  for (int i = 0; i < number_of_boundaries / 2; ++i)\n    delete[] multi_channel_f0[i];\n  delete[] multi_channel_f0;\n  delete[] f0_contour;\n  delete[] boundary_list;\n}\n\n//-----------------------------------------------------------------------------\n// HarvestGeneralBodySub() is the subfunction of HarvestGeneralBody()\n//-----------------------------------------------------------------------------\nstatic int HarvestGeneralBodySub(const double *boundary_f0_list,\n    int number_of_channels, int f0_length, double actual_fs, int y_length,\n    const double *temporal_positions, const fft_complex *y_spectrum,\n    int fft_size, double f0_floor, double f0_ceil, int max_candidates,\n    double **f0_candidates) {\n  double **raw_f0_candidates = new double *[number_of_channels];\n  for (int i = 0; i < number_of_channels; ++i)\n    raw_f0_candidates[i] = new double[f0_length];\n\n  GetRawF0Candidates(boundary_f0_list, number_of_channels,\n      actual_fs, y_length, temporal_positions, f0_length, y_spectrum,\n      fft_size, f0_floor, f0_ceil, raw_f0_candidates);\n\n  int number_of_candidates = DetectOfficialF0Candidates(raw_f0_candidates,\n    number_of_channels, f0_length, max_candidates, f0_candidates);\n\n  OverlapF0Candidates(f0_length, number_of_candidates, f0_candidates);\n\n  for (int i = 0; i < number_of_channels; ++i)\n    delete[] raw_f0_candidates[i];\n  delete[] raw_f0_candidates;\n  return number_of_candidates;\n}\n\n//-----------------------------------------------------------------------------\n// HarvestGeneralBody() estimates the F0 contour based on Harvest.\n//-----------------------------------------------------------------------------\nstatic void HarvestGeneralBody(const double *x, int x_length, int fs,\n    int frame_period, double f0_floor, double f0_ceil,\n    double channels_in_octave, int speed, double *temporal_positions,\n    double *f0) {\n  double adjusted_f0_floor = f0_floor * 0.9;\n  double adjusted_f0_ceil = f0_ceil * 1.1;\n  int number_of_channels =\n    1 + static_cast<int>(log(adjusted_f0_ceil / adjusted_f0_floor) /\n    world::kLog2 * channels_in_octave);\n  double *boundary_f0_list = new double[number_of_channels];\n  for (int i = 0; i < number_of_channels; ++i)\n    boundary_f0_list[i] =\n    adjusted_f0_floor * pow(2.0, (i + 1) / channels_in_octave);\n\n  // normalization\n  int decimation_ratio = MyMaxInt(MyMinInt(speed, 12), 1);\n  int y_length =\n    static_cast<int>(ceil(static_cast<double>(x_length) / decimation_ratio));\n  double actual_fs = static_cast<double>(fs) / decimation_ratio;\n  int fft_size = GetSuitableFFTSize(y_length + 5 +\n    2 * static_cast<int>(2.0 * actual_fs / boundary_f0_list[0]));\n\n  // Calculation of the spectrum used for the f0 estimation\n  double *y = new double[fft_size];\n  fft_complex *y_spectrum = new fft_complex[fft_size];\n  GetWaveformAndSpectrum(x, x_length, y_length, actual_fs, fft_size,\n      decimation_ratio, y, y_spectrum);\n\n  int f0_length = GetSamplesForHarvest(fs, x_length, frame_period);\n  for (int i = 0; i < f0_length; ++i) {\n    temporal_positions[i] = i * frame_period / 1000.0;\n    f0[i] = 0.0;\n  }\n\n  int overlap_parameter = 7;\n  int max_candidates =\n    matlab_round(number_of_channels / 10.0) * overlap_parameter;\n  double **f0_candidates = new double *[f0_length];\n  double **f0_candidates_score = new double *[f0_length];\n  for (int i = 0; i < f0_length; ++i) {\n    f0_candidates[i] = new double[max_candidates];\n    f0_candidates_score[i] = new double[max_candidates];\n  }\n\n  int number_of_candidates = HarvestGeneralBodySub(boundary_f0_list,\n    number_of_channels, f0_length, actual_fs, y_length, temporal_positions,\n    y_spectrum, fft_size, f0_floor, f0_ceil, max_candidates, f0_candidates) *\n    overlap_parameter;\n\n  RefineF0Candidates(y, y_length, actual_fs, temporal_positions, f0_length,\n      number_of_candidates, f0_floor, f0_ceil, f0_candidates,\n      f0_candidates_score);\n  RemoveUnreliableCandidates(f0_length, number_of_candidates,\n      f0_candidates, f0_candidates_score);\n\n  double *best_f0_contour = new double[f0_length];\n  FixF0Contour(f0_candidates, f0_candidates_score, f0_length,\n      number_of_candidates, best_f0_contour);\n  SmoothF0Contour(best_f0_contour, f0_length, f0);\n\n  delete[] y;\n  delete[] best_f0_contour;\n  delete[] y_spectrum;\n  for (int i = 0; i < f0_length; ++i) {\n    delete[] f0_candidates[i];\n    delete[] f0_candidates_score[i];\n  }\n  delete[] f0_candidates;\n  delete[] f0_candidates_score;\n  delete[] boundary_f0_list;\n}\n\n}  // namespace\n\nint GetSamplesForHarvest(int fs, int x_length, double frame_period) {\n  return static_cast<int>(1000.0 * x_length / fs / frame_period) + 1;\n}\n\nvoid Harvest(const double *x, int x_length, int fs,\n    const HarvestOption *option, double *temporal_positions, double *f0) {\n  // Several parameters will be controllable for debug.\n  double target_fs = 8000.0;\n  int dimension_ratio = matlab_round(fs / target_fs);\n  double channels_in_octave = 40;\n\n  if (option->frame_period == 1.0) {\n    HarvestGeneralBody(x, x_length, fs, 1, option->f0_floor,\n        option->f0_ceil, channels_in_octave, dimension_ratio,\n        temporal_positions, f0);\n    return;\n  }\n\n  int basic_frame_period = 1;\n  int basic_f0_length =\n    GetSamplesForHarvest(fs, x_length, basic_frame_period);\n  double *basic_f0 = new double[basic_f0_length];\n  double *basic_temporal_positions = new double[basic_f0_length];\n  HarvestGeneralBody(x, x_length, fs, basic_frame_period, option->f0_floor,\n      option->f0_ceil, channels_in_octave, dimension_ratio,\n      basic_temporal_positions, basic_f0);\n\n  int f0_length = GetSamplesForHarvest(fs, x_length, option->frame_period);\n  for (int i = 0; i < f0_length; ++i) {\n    temporal_positions[i] = i * option->frame_period / 1000.0;\n    f0[i] = basic_f0[MyMinInt(basic_f0_length - 1,\n      matlab_round(temporal_positions[i] * 1000.0))];\n  }\n\n  delete[] basic_f0;\n  delete[] basic_temporal_positions;\n}\n\nvoid InitializeHarvestOption(HarvestOption *option) {\n  // You can change default parameters.\n  option->f0_ceil = world::kCeilF0;\n  option->f0_floor = world::kFloorF0;\n  option->frame_period = 5;\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/matlabfunctions.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Matlab functions implemented for WORLD\n// Since these functions are implemented as the same function of Matlab,\n// the source code does not follow the style guide (Names of variables\n// and functions).\n// Please see the reference of Matlab to show the usage of functions.\n// Caution:\n//   The functions wavread() and wavwrite() were removed to the /src.\n//   they were moved to the test/audioio.cpp. (2016/01/28)\n//-----------------------------------------------------------------------------\n#include \"world/matlabfunctions.h\"\n\n#include <math.h>\n#include <stdint.h>\n\n#include \"world/constantnumbers.h\"\n\nnamespace {\n//-----------------------------------------------------------------------------\n// FilterForDecimate() calculates the coefficients of low-pass filter and\n// carries out the filtering. This function is only used for decimate().\n//-----------------------------------------------------------------------------\nstatic void FilterForDecimate(const double *x, int x_length, int r, double *y) {\n  double a[3], b[2];  // filter Coefficients\n  switch (r) {\n    case 11:  // fs : 44100 (default)\n      a[0] = 2.450743295230728;\n      a[1] = -2.06794904601978;\n      a[2] = 0.59574774438332101;\n      b[0] = 0.0026822508007163792;\n      b[1] = 0.0080467524021491377;\n      break;\n    case 12:  // fs : 48000\n      a[0] = 2.4981398605924205;\n      a[1] = -2.1368928194784025;\n      a[2] = 0.62187513816221485;\n      b[0] = 0.0021097275904709001;\n      b[1] = 0.0063291827714127002;\n      break;\n    case 10:\n      a[0] = 2.3936475118069387;\n      a[1] = -1.9873904075111861;\n      a[2] = 0.5658879979027055;\n      b[0] = 0.0034818622251927556;\n      b[1] = 0.010445586675578267;\n      break;\n    case 9:\n      a[0] = 2.3236003491759578;\n      a[1] = -1.8921545617463598;\n      a[2] = 0.53148928133729068;\n      b[0] = 0.0046331164041389372;\n      b[1] = 0.013899349212416812;\n      break;\n    case 8:  // fs : 32000\n      a[0] = 2.2357462340187593;\n      a[1] = -1.7780899984041358;\n      a[2] = 0.49152555365968692;\n      b[0] = 0.0063522763407111993;\n      b[1] = 0.019056829022133598;\n      break;\n    case 7:\n      a[0] = 2.1225239019534703;\n      a[1] = -1.6395144861046302;\n      a[2] = 0.44469707800587366;\n      b[0] = 0.0090366882681608418;\n      b[1] = 0.027110064804482525;\n      break;\n    case 6:  // fs : 24000 and 22050\n      a[0] = 1.9715352749512141;\n      a[1] = -1.4686795689225347;\n      a[2] = 0.3893908434965701;\n      b[0] = 0.013469181309343825;\n      b[1] = 0.040407543928031475;\n      break;\n    case 5:\n      a[0] = 1.7610939654280557;\n      a[1] = -1.2554914843859768;\n      a[2] = 0.3237186507788215;\n      b[0] = 0.021334858522387423;\n      b[1] = 0.06400457556716227;\n      break;\n    case 4:  // fs : 16000\n      a[0] = 1.4499664446880227;\n      a[1] = -0.98943497080950582;\n      a[2] = 0.24578252340690215;\n      b[0] = 0.036710750339322612;\n      b[1] = 0.11013225101796784;\n      break;\n    case 3:\n      a[0] = 0.95039378983237421;\n      a[1] = -0.67429146741526791;\n      a[2] = 0.15412211621346475;\n      b[0] = 0.071221945171178636;\n      b[1] = 0.21366583551353591;\n      break;\n    case 2:  // fs : 8000\n      a[0] = 0.041156734567757189;\n      a[1] = -0.42599112459189636;\n      a[2] = 0.041037215479961225;\n      b[0] = 0.16797464681802227;\n      b[1] = 0.50392394045406674;\n      break;\n    default:\n      a[0] = 0.0;\n      a[1] = 0.0;\n      a[2] = 0.0;\n      b[0] = 0.0;\n      b[1] = 0.0;\n  }\n\n  // Filtering on time domain.\n  double w[3] = {0.0, 0.0, 0.0};\n  double wt;\n  for (int i = 0; i < x_length; ++i) {\n    wt = x[i] + a[0] * w[0] + a[1] * w[1] + a[2] * w[2];\n    y[i] = b[0] * wt + b[1] * w[0] + b[1] * w[1] + b[0] * w[2];\n    w[2] = w[1];\n    w[1] = w[0];\n    w[0] = wt;\n  }\n}\n\n}  // namespace\n\nvoid fftshift(const double *x, int x_length, double *y) {\n  for (int i = 0; i < x_length / 2; ++i) {\n    y[i] = x[i + x_length / 2];\n    y[i + x_length / 2] = x[i];\n  }\n}\n\nvoid histc(const double *x, int x_length, const double *edges,\n    int edges_length, int *index) {\n  int count = 1;\n\n  int i = 0;\n  for (; i < edges_length; ++i) {\n    index[i] = 1;\n    if (edges[i] >= x[0]) break;\n  }\n  for (; i < edges_length; ++i) {\n    if (edges[i] < x[count]) {\n      index[i] = count;\n    } else {\n      index[i--] = count++;\n    }\n    if (count == x_length) break;\n  }\n  count--;\n  for (i++; i < edges_length; ++i) index[i] = count;\n}\n\nvoid interp1(const double *x, const double *y, int x_length, const double *xi,\n    int xi_length, double *yi) {\n  double *h = new double[x_length - 1];\n  int *k = new int[xi_length];\n\n  for (int i = 0; i < x_length - 1; ++i) h[i] = x[i + 1] - x[i];\n  for (int i = 0; i < xi_length; ++i) {\n    k[i] = 0;\n  }\n\n  histc(x, x_length, xi, xi_length, k);\n\n  for (int i = 0; i < xi_length; ++i) {\n    double s = (xi[i] - x[k[i] - 1]) / h[k[i] - 1];\n    yi[i] = y[k[i] - 1] + s * (y[k[i]] - y[k[i] - 1]);\n  }\n  \n  delete[] k;\n  delete[] h;\n}\n\nvoid decimate(const double *x, int x_length, int r, double *y) {\n  const int kNFact = 9;\n  double *tmp1 = new double[x_length + kNFact * 2];\n  double *tmp2 = new double[x_length + kNFact * 2];\n\n  for (int i = 0; i < kNFact; ++i) tmp1[i] = 2 * x[0] - x[kNFact - i];\n  for (int i = kNFact; i < kNFact + x_length; ++i) tmp1[i] = x[i - kNFact];\n  for (int i = kNFact + x_length; i < 2 * kNFact + x_length; ++i)\n    tmp1[i] = 2 * x[x_length - 1] - x[x_length - 2 - (i - (kNFact + x_length))];\n\n  FilterForDecimate(tmp1, 2 * kNFact + x_length, r, tmp2);\n  for (int i = 0; i < 2 * kNFact + x_length; ++i)\n    tmp1[i] = tmp2[2 * kNFact + x_length - i - 1];\n  FilterForDecimate(tmp1, 2 * kNFact + x_length, r, tmp2);\n  for (int i = 0; i < 2 * kNFact + x_length; ++i)\n    tmp1[i] = tmp2[2 * kNFact + x_length - i - 1];\n\n  int nout = (x_length - 1) / r + 1;\n  int nbeg = r - r * nout + x_length;\n\n  int count = 0;\n  for (int i = nbeg; i < x_length + kNFact; i += r)\n    y[count++] = tmp1[i + kNFact - 1];\n\n  delete[] tmp1;\n  delete[] tmp2;\n}\n\nint matlab_round(double x) {\n  return x > 0 ? static_cast<int>(x + 0.5) : static_cast<int>(x - 0.5);\n}\n\nvoid diff(const double *x, int x_length, double *y) {\n  for (int i = 0; i < x_length - 1; ++i) y[i] = x[i + 1] - x[i];\n}\n\nvoid interp1Q(double x, double shift, const double *y, int x_length,\n    const double *xi, int xi_length, double *yi) {\n  double *xi_fraction = new double[xi_length];\n  double *delta_y = new double[x_length];\n  int *xi_base = new int[xi_length];\n\n  double delta_x = shift;\n  for (int i = 0; i < xi_length; ++i) {\n    xi_base[i] = static_cast<int>((xi[i] - x) / delta_x);\n    xi_fraction[i] = (xi[i] - x) / delta_x - xi_base[i];\n  }\n  diff(y, x_length, delta_y);\n  delta_y[x_length - 1] = 0.0;\n\n  for (int i = 0; i < xi_length; ++i)\n    yi[i] = y[xi_base[i]] + delta_y[xi_base[i]] * xi_fraction[i];\n\n  // Bug was fixed at 2013/07/14 by M. Morise\n  delete[] xi_fraction;\n  delete[] xi_base;\n  delete[] delta_y;\n}\n\n// You must not use these variables.\n// Note:\n// I have no idea to implement the randn() and randn_reseed() without the\n// global variables. If you have a good idea, please give me the information.\nstatic uint32_t g_randn_x = 123456789;\nstatic uint32_t g_randn_y = 362436069;\nstatic uint32_t g_randn_z = 521288629;\nstatic uint32_t g_randn_w = 88675123;\n\nvoid randn_reseed() {\n    g_randn_x = 123456789;\n    g_randn_y = 362436069;\n    g_randn_z = 521288629;\n    g_randn_w = 88675123;\n}\n\ndouble randn(void) {\n  uint32_t t;\n  t = g_randn_x ^ (g_randn_x << 11);\n  g_randn_x = g_randn_y;\n  g_randn_y = g_randn_z;\n  g_randn_z = g_randn_w;\n  g_randn_w = (g_randn_w ^ (g_randn_w >> 19)) ^ (t ^ (t >> 8));\n\n  uint32_t tmp = g_randn_w >> 4;\n  for (int i = 0; i < 11; ++i) {\n    t = g_randn_x ^ (g_randn_x << 11);\n    g_randn_x = g_randn_y;\n    g_randn_y = g_randn_z;\n    g_randn_z = g_randn_w;\n    g_randn_w = (g_randn_w ^ (g_randn_w >> 19)) ^ (t ^ (t >> 8));\n    tmp += g_randn_w >> 4;\n  }\n  return tmp / 268435456.0 - 6.0;\n}\n\nvoid fast_fftfilt(const double *x, int x_length, const double *h, int h_length,\n    int fft_size, const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft, double *y) {\n  fft_complex *x_spectrum = new fft_complex[fft_size];\n\n  for (int i = 0; i < x_length; ++i)\n    forward_real_fft->waveform[i] = x[i] / fft_size;\n  for (int i = x_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    x_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    x_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  for (int i = 0; i < h_length; ++i)\n    forward_real_fft->waveform[i] = h[i] / fft_size;\n  for (int i = h_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      x_spectrum[i][0] * forward_real_fft->spectrum[i][0] -\n      x_spectrum[i][1] * forward_real_fft->spectrum[i][1];\n    inverse_real_fft->spectrum[i][1] =\n      x_spectrum[i][0] * forward_real_fft->spectrum[i][1] +\n      x_spectrum[i][1] * forward_real_fft->spectrum[i][0];\n  }\n  fft_execute(inverse_real_fft->inverse_fft);\n\n  for (int i = 0; i < fft_size; ++i)\n    y[i] = inverse_real_fft->waveform[i];\n\n  delete[] x_spectrum;\n}\n\ndouble matlab_std(const double *x, int x_length) {\n  double average = 0.0;\n  for (int i = 0; i < x_length; ++i) average += x[i];\n  average /= x_length;\n\n  double s = 0.0;\n  for (int i = 0; i < x_length; ++i) s += pow(x[i] - average, 2.0);\n  s /= (x_length - 1);\n\n  return sqrt(s);\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/stonemask.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// F0 estimation based on instantaneous frequency.\n// This method is carried out by using the output of Dio().\n//-----------------------------------------------------------------------------\n#include \"world/stonemask.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/fft.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n//-----------------------------------------------------------------------------\n// GetBaseIndex() calculates the temporal positions for windowing.\n// Since the result includes negative value and the value that exceeds the\n// length of the input signal, it must be modified appropriately.\n//-----------------------------------------------------------------------------\nstatic void GetBaseIndex(double current_position, const double *base_time,\n    int base_time_length, int fs, int *index_raw) {\n  for (int i = 0; i < base_time_length; ++i)\n    index_raw[i] = matlab_round((current_position + base_time[i]) * fs);\n}\n\n//-----------------------------------------------------------------------------\n// GetMainWindow() generates the window function.\n//-----------------------------------------------------------------------------\nstatic void GetMainWindow(double current_position, const int *index_raw,\n    int base_time_length, int fs, double window_length_in_time,\n    double *main_window) {\n  double tmp = 0.0;\n  for (int i = 0; i < base_time_length; ++i) {\n    tmp = (index_raw[i] - 1.0) / fs - current_position;\n    main_window[i] = 0.42 +\n      0.5 * cos(2.0 * world::kPi * tmp / window_length_in_time) +\n      0.08 * cos(4.0 * world::kPi * tmp / window_length_in_time);\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetDiffWindow() generates the differentiated window.\n// Diff means differential.\n//-----------------------------------------------------------------------------\nstatic void GetDiffWindow(const double *main_window, int base_time_length,\n    double *diff_window) {\n  diff_window[0] = -main_window[1] / 2.0;\n  for (int i = 1; i < base_time_length - 1; ++i)\n    diff_window[i] = -(main_window[i + 1] - main_window[i - 1]) / 2.0;\n  diff_window[base_time_length - 1] = main_window[base_time_length - 2] / 2.0;\n}\n\n//-----------------------------------------------------------------------------\n// GetSpectra() calculates two spectra of the waveform windowed by windows\n// (main window and diff window).\n//-----------------------------------------------------------------------------\nstatic void GetSpectra(const double *x, int x_length, int fft_size,\n    const int *index_raw, const double *main_window, const double *diff_window,\n    int base_time_length, const ForwardRealFFT *forward_real_fft,\n    fft_complex *main_spectrum, fft_complex *diff_spectrum) {\n  int *index = new int[base_time_length];\n\n  for (int i = 0; i < base_time_length; ++i)\n    index[i] = MyMaxInt(0, MyMinInt(x_length - 1, index_raw[i] - 1));\n  for (int i = 0; i < base_time_length; ++i)\n    forward_real_fft->waveform[i] = x[index[i]] * main_window[i];\n  for (int i = base_time_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    main_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    main_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  for (int i = 0; i < base_time_length; ++i)\n    forward_real_fft->waveform[i] = x[index[i]] * diff_window[i];\n  for (int i = base_time_length; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    diff_spectrum[i][0] = forward_real_fft->spectrum[i][0];\n    diff_spectrum[i][1] = forward_real_fft->spectrum[i][1];\n  }\n\n  delete[] index;\n}\n\n//-----------------------------------------------------------------------------\n// FixF0() fixed the F0 by instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic double FixF0(const double *power_spectrum, const double *numerator_i,\n    int fft_size, int fs, double initial_f0, int number_of_harmonics) {\n  double *amplitude_list = new double[number_of_harmonics];\n  double *instantaneous_frequency_list = new double[number_of_harmonics];\n  int index;\n  for (int i = 0; i < number_of_harmonics; ++i) {\n    index = MyMinInt(matlab_round(initial_f0 * fft_size / fs * (i + 1)), \n            fft_size / 2);\n    instantaneous_frequency_list[i] = power_spectrum[index] == 0.0 ? 0.0 :\n      static_cast<double>(index) * fs / fft_size +\n      numerator_i[index] / power_spectrum[index] * fs / 2.0 / world::kPi;\n    amplitude_list[i] = sqrt(power_spectrum[index]);\n  }\n  double denominator = 0.0;\n  double numerator = 0.0;\n  for (int i = 0; i < number_of_harmonics; ++i) {\n    numerator += amplitude_list[i] * instantaneous_frequency_list[i];\n    denominator += amplitude_list[i] * (i + 1);\n  }\n  delete[] amplitude_list;\n  delete[] instantaneous_frequency_list;\n  return numerator / (denominator + world::kMySafeGuardMinimum);\n}\n\n//-----------------------------------------------------------------------------\n// GetTentativeF0() calculates the F0 based on the instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic double GetTentativeF0(const double *power_spectrum,\n    const double *numerator_i, int fft_size, int fs, double initial_f0) {\n  double tentative_f0 =\n    FixF0(power_spectrum, numerator_i, fft_size, fs, initial_f0, 2);\n\n  // If the fixed value is too large, the result will be rejected.\n  if (tentative_f0 <= 0.0 || tentative_f0 > initial_f0 * 2) return 0.0;\n\n  return FixF0(power_spectrum, numerator_i, fft_size, fs, tentative_f0, 6);\n}\n\n//-----------------------------------------------------------------------------\n// GetMeanF0() calculates the instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic double GetMeanF0(const double *x, int x_length, int fs,\n    double current_position, double initial_f0, int fft_size,\n    double window_length_in_time, const double *base_time,\n    int base_time_length) {\n  ForwardRealFFT forward_real_fft = {0};\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n  fft_complex *main_spectrum = new fft_complex[fft_size];\n  fft_complex *diff_spectrum = new fft_complex[fft_size];\n\n  int *index_raw = new int[base_time_length];\n  double *main_window = new double[base_time_length];\n  double *diff_window = new double[base_time_length];\n\n  GetBaseIndex(current_position, base_time, base_time_length, fs, index_raw);\n  GetMainWindow(current_position, index_raw, base_time_length, fs,\n      window_length_in_time, main_window);\n  GetDiffWindow(main_window, base_time_length, diff_window);\n  GetSpectra(x, x_length, fft_size, index_raw, main_window, diff_window,\n      base_time_length, &forward_real_fft, main_spectrum, diff_spectrum);\n\n  double *power_spectrum = new double[fft_size / 2 + 1];\n  double *numerator_i = new double[fft_size / 2 + 1];\n  for (int j = 0; j <= fft_size / 2; ++j) {\n    numerator_i[j] = main_spectrum[j][0] * diff_spectrum[j][1] -\n      main_spectrum[j][1] * diff_spectrum[j][0];\n    power_spectrum[j] = main_spectrum[j][0] * main_spectrum[j][0] +\n      main_spectrum[j][1] * main_spectrum[j][1];\n  }\n\n  double tentative_f0 = GetTentativeF0(power_spectrum, numerator_i,\n    fft_size, fs, initial_f0);\n\n  delete[] diff_spectrum;\n  delete[] diff_window;\n  delete[] main_window;\n  delete[] index_raw;\n  delete[] numerator_i;\n  delete[] power_spectrum;\n  delete[] main_spectrum;\n  DestroyForwardRealFFT(&forward_real_fft);\n\n  return tentative_f0;\n}\n\n//-----------------------------------------------------------------------------\n// GetRefinedF0() fixes the F0 estimated by Dio(). This function uses\n// instantaneous frequency.\n//-----------------------------------------------------------------------------\nstatic double GetRefinedF0(const double *x, int x_length, int fs,\n    double current_potision, double initial_f0) {\n  if (initial_f0 <= world::kFloorF0StoneMask || initial_f0 > fs / 12.0)\n    return 0.0;\n\n  int half_window_length = static_cast<int>(1.5 * fs / initial_f0 + 1.0);\n  double window_length_in_time = (2.0 * half_window_length + 1.0) / fs;\n  double *base_time = new double[half_window_length * 2 + 1];\n  for (int i = 0; i < half_window_length * 2 + 1; i++)\n    base_time[i] = static_cast<double>(-half_window_length + i) / fs;\n  int fft_size = static_cast<int>(pow(2.0, 2.0 +\n    static_cast<int>(log(half_window_length * 2.0 + 1.0) / world::kLog2)));\n\n  double mean_f0 = GetMeanF0(x, x_length, fs, current_potision,\n      initial_f0, fft_size, window_length_in_time, base_time,\n      half_window_length * 2 + 1);\n\n  // If amount of correction is overlarge (20 %), initial F0 is employed.\n  if (fabs(mean_f0 - initial_f0) > initial_f0 * 0.2) mean_f0 = initial_f0;\n\n  delete[] base_time;\n\n  return mean_f0;\n}\n\n}  // namespace\n\nvoid StoneMask(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    double *refined_f0) {\n  for (int i = 0; i < f0_length; i++)\n    refined_f0[i] =\n      GetRefinedF0(x, x_length, fs, temporal_positions[i], f0[i]);\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/synthesis.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Voice synthesis based on f0, spectrogram and aperiodicity.\n// forward_real_fft, inverse_real_fft and minimum_phase are used to speed up.\n//-----------------------------------------------------------------------------\n#include \"world/synthesis.h\"\n\n#include <math.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n\nstatic void GetNoiseSpectrum(int noise_size, int fft_size,\n    const ForwardRealFFT *forward_real_fft) {\n  double average = 0.0;\n  for (int i = 0; i < noise_size; ++i) {\n    forward_real_fft->waveform[i] = randn();\n    average += forward_real_fft->waveform[i];\n  }\n\n  average /= noise_size;\n  for (int i = 0; i < noise_size; ++i)\n    forward_real_fft->waveform[i] -= average;\n  for (int i = noise_size; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n}\n\n//-----------------------------------------------------------------------------\n// GetAperiodicResponse() calculates an aperiodic response.\n//-----------------------------------------------------------------------------\nstatic void GetAperiodicResponse(int noise_size, int fft_size,\n    const double *spectrum, const double *aperiodic_ratio, double current_vuv,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase, double *aperiodic_response) {\n  GetNoiseSpectrum(noise_size, fft_size, forward_real_fft);\n\n  if (current_vuv != 0.0)\n    for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n      minimum_phase->log_spectrum[i] =\n        log(spectrum[i] * aperiodic_ratio[i]) / 2.0;\n  else\n    for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n      minimum_phase->log_spectrum[i] = log(spectrum[i]) / 2.0;\n  GetMinimumPhaseSpectrum(minimum_phase);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      minimum_phase->minimum_phase_spectrum[i][0] *\n      forward_real_fft->spectrum[i][0] -\n      minimum_phase->minimum_phase_spectrum[i][1] *\n      forward_real_fft->spectrum[i][1];\n    inverse_real_fft->spectrum[i][1] =\n      minimum_phase->minimum_phase_spectrum[i][0] *\n      forward_real_fft->spectrum[i][1] +\n      minimum_phase->minimum_phase_spectrum[i][1] *\n      forward_real_fft->spectrum[i][0];\n  }\n  fft_execute(inverse_real_fft->inverse_fft);\n  fftshift(inverse_real_fft->waveform, fft_size, aperiodic_response);\n}\n\n//-----------------------------------------------------------------------------\n// RemoveDCComponent()\n//-----------------------------------------------------------------------------\nstatic void RemoveDCComponent(const double *periodic_response, int fft_size,\n    const double *dc_remover, double *new_periodic_response) {\n  double dc_component = 0.0;\n  for (int i = fft_size / 2; i < fft_size; ++i)\n    dc_component += periodic_response[i];\n  for (int i = 0; i < fft_size / 2; ++i)\n    new_periodic_response[i] = -dc_component * dc_remover[i];\n  for (int i = fft_size / 2; i < fft_size; ++i)\n    new_periodic_response[i] -= dc_component * dc_remover[i];\n}\n\n//-----------------------------------------------------------------------------\n// GetSpectrumWithFractionalTimeShift() calculates a periodic spectrum with\n// the fractional time shift under 1/fs.\n//-----------------------------------------------------------------------------\nstatic void GetSpectrumWithFractionalTimeShift(int fft_size,\n    double coefficient, const InverseRealFFT *inverse_real_fft) {\n  double re, im, re2, im2;\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    re = inverse_real_fft->spectrum[i][0];\n    im = inverse_real_fft->spectrum[i][1];\n    re2 = cos(coefficient * i);\n    im2 = sqrt(1.0 - re2 * re2);  // sin(pshift)\n\n    inverse_real_fft->spectrum[i][0] = re * re2 + im * im2;\n    inverse_real_fft->spectrum[i][1] = im * re2 - re * im2;\n  }\n}\n\n//-----------------------------------------------------------------------------\n// GetPeriodicResponse() calculates a periodic response.\n//-----------------------------------------------------------------------------\nstatic void GetPeriodicResponse(int fft_size, const double *spectrum,\n    const double *aperiodic_ratio, double current_vuv,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase, const double *dc_remover,\n    double fractional_time_shift, int fs, double *periodic_response) {\n  if (current_vuv <= 0.5 || aperiodic_ratio[0] > 0.999) {\n    for (int i = 0; i < fft_size; ++i) periodic_response[i] = 0.0;\n    return;\n  }\n\n  for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n    minimum_phase->log_spectrum[i] =\n      log(spectrum[i] * (1.0 - aperiodic_ratio[i]) +\n      world::kMySafeGuardMinimum) / 2.0;\n  GetMinimumPhaseSpectrum(minimum_phase);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      minimum_phase->minimum_phase_spectrum[i][0];\n    inverse_real_fft->spectrum[i][1] =\n      minimum_phase->minimum_phase_spectrum[i][1];\n  }\n\n  // apply fractional time delay of fractional_time_shift seconds\n  // using linear phase shift\n  double coefficient =\n    2.0 * world::kPi * fractional_time_shift * fs / fft_size;\n  GetSpectrumWithFractionalTimeShift(fft_size, coefficient, inverse_real_fft);\n\n  fft_execute(inverse_real_fft->inverse_fft);\n  fftshift(inverse_real_fft->waveform, fft_size, periodic_response);\n  RemoveDCComponent(periodic_response, fft_size, dc_remover,\n      periodic_response);\n}\n\nstatic void GetSpectralEnvelope(double current_time, double frame_period,\n    int f0_length, const double * const *spectrogram, int fft_size,\n    double *spectral_envelope) {\n  int current_frame_floor = MyMinInt(f0_length - 1,\n    static_cast<int>(floor(current_time / frame_period)));\n  int current_frame_ceil = MyMinInt(f0_length - 1,\n    static_cast<int>(ceil(current_time / frame_period)));\n  double interpolation = current_time / frame_period - current_frame_floor;\n\n  if (current_frame_floor == current_frame_ceil)\n    for (int i = 0; i <= fft_size / 2; ++i)\n      spectral_envelope[i] = fabs(spectrogram[current_frame_floor][i]);\n  else\n    for (int i = 0; i <= fft_size / 2; ++i)\n      spectral_envelope[i] =\n        (1.0 - interpolation) * fabs(spectrogram[current_frame_floor][i]) +\n        interpolation * fabs(spectrogram[current_frame_ceil][i]);\n}\n\nstatic void GetAperiodicRatio(double current_time, double frame_period,\n    int f0_length, const double * const *aperiodicity, int fft_size,\n    double *aperiodic_spectrum) {\n  int current_frame_floor = MyMinInt(f0_length - 1,\n    static_cast<int>(floor(current_time / frame_period)));\n  int current_frame_ceil = MyMinInt(f0_length - 1,\n    static_cast<int>(ceil(current_time / frame_period)));\n  double interpolation = current_time / frame_period - current_frame_floor;\n\n  if (current_frame_floor == current_frame_ceil)\n    for (int i = 0; i <= fft_size / 2; ++i)\n      aperiodic_spectrum[i] =\n        pow(GetSafeAperiodicity(aperiodicity[current_frame_floor][i]), 2.0);\n  else\n    for (int i = 0; i <= fft_size / 2; ++i)\n      aperiodic_spectrum[i] = pow((1.0 - interpolation) *\n          GetSafeAperiodicity(aperiodicity[current_frame_floor][i]) +\n          interpolation *\n          GetSafeAperiodicity(aperiodicity[current_frame_ceil][i]), 2.0);\n}\n\n//-----------------------------------------------------------------------------\n// GetOneFrameSegment() calculates a periodic and aperiodic response at a time.\n//-----------------------------------------------------------------------------\nstatic void GetOneFrameSegment(double current_vuv, int noise_size,\n    const double * const *spectrogram, int fft_size,\n    const double * const *aperiodicity, int f0_length, double frame_period,\n    double current_time, double fractional_time_shift, int fs,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase, const double *dc_remover,\n    double *response) {\n  double *aperiodic_response = new double[fft_size];\n  double *periodic_response = new double[fft_size];\n\n  double *spectral_envelope = new double[fft_size];\n  double *aperiodic_ratio = new double[fft_size];\n  GetSpectralEnvelope(current_time, frame_period, f0_length, spectrogram,\n      fft_size, spectral_envelope);\n  GetAperiodicRatio(current_time, frame_period, f0_length, aperiodicity,\n      fft_size, aperiodic_ratio);\n\n  // Synthesis of the periodic response\n  GetPeriodicResponse(fft_size, spectral_envelope, aperiodic_ratio,\n      current_vuv, inverse_real_fft, minimum_phase, dc_remover,\n      fractional_time_shift, fs, periodic_response);\n\n  // Synthesis of the aperiodic response\n  GetAperiodicResponse(noise_size, fft_size, spectral_envelope,\n      aperiodic_ratio, current_vuv, forward_real_fft,\n      inverse_real_fft, minimum_phase, aperiodic_response);\n\n  double sqrt_noise_size = sqrt(static_cast<double>(noise_size));\n  for (int i = 0; i < fft_size; ++i)\n    response[i] =\n      (periodic_response[i] * sqrt_noise_size + aperiodic_response[i]) /\n      fft_size;\n\n  delete[] spectral_envelope;\n  delete[] aperiodic_ratio;\n  delete[] periodic_response;\n  delete[] aperiodic_response;\n}\n\nstatic void GetTemporalParametersForTimeBase(const double *f0, int f0_length,\n    int fs, int y_length, double frame_period, double lowest_f0,\n    double *time_axis, double *coarse_time_axis, double *coarse_f0,\n    double *coarse_vuv) {\n  for (int i = 0; i < y_length; ++i)\n    time_axis[i] = i / static_cast<double>(fs);\n  // the array 'coarse_time_axis' is supposed to have 'f0_length + 1' positions\n  for (int i = 0; i < f0_length; ++i) {\n    coarse_time_axis[i] = i * frame_period;\n    coarse_f0[i] = f0[i] < lowest_f0 ? 0.0 : f0[i];\n    coarse_vuv[i] = coarse_f0[i] == 0.0 ? 0.0 : 1.0;\n  }\n  coarse_time_axis[f0_length] = f0_length * frame_period;\n  coarse_f0[f0_length] = coarse_f0[f0_length - 1] * 2 -\n    coarse_f0[f0_length - 2];\n  coarse_vuv[f0_length] = coarse_vuv[f0_length - 1] * 2 -\n    coarse_vuv[f0_length - 2];\n}\n\nstatic int GetPulseLocationsForTimeBase(const double *interpolated_f0,\n    const double *time_axis, int y_length, int fs, double *pulse_locations,\n    int *pulse_locations_index, double *pulse_locations_time_shift) {\n  double *total_phase = new double[y_length];\n  double *wrap_phase = new double[y_length];\n  double *wrap_phase_abs = new double[y_length - 1];\n  total_phase[0] = 2.0 * world::kPi * interpolated_f0[0] / fs;\n  wrap_phase[0] = fmod(total_phase[0], 2.0 * world::kPi);\n  for (int i = 1; i < y_length; ++i) {\n    total_phase[i] = total_phase[i - 1] +\n      2.0 * world::kPi * interpolated_f0[i] / fs;\n    wrap_phase[i] = fmod(total_phase[i], 2.0 * world::kPi);\n    wrap_phase_abs[i - 1] = fabs(wrap_phase[i] - wrap_phase[i - 1]);\n  }\n\n  int number_of_pulses = 0;\n  for (int i = 0; i < y_length - 1; ++i) {\n    if (wrap_phase_abs[i] > world::kPi) {\n      pulse_locations[number_of_pulses] = time_axis[i];\n      pulse_locations_index[number_of_pulses] = i;\n\n      // calculate the time shift in seconds between exact fractional pulse\n      // position and the integer pulse position (sample i)\n      // as we don't have access to the exact pulse position, we infer it\n      // from the point between sample i and sample i + 1 where the\n      // accummulated phase cross a multiple of 2pi\n      // this point is found by solving y1 + x * (y2 - y1) = 0 for x, where y1\n      // and y2 are the phases corresponding to sample i and i + 1, offset so\n      // they cross zero; x >= 0\n      double y1 = wrap_phase[i] - 2.0 * world::kPi;\n      double y2 = wrap_phase[i + 1];\n      double x = -y1 / (y2 - y1);\n      pulse_locations_time_shift[number_of_pulses] = x / fs;\n\n      ++number_of_pulses;\n    }\n  }\n\n  delete[] wrap_phase_abs;\n  delete[] wrap_phase;\n  delete[] total_phase;\n\n  return number_of_pulses;\n}\n\nstatic int GetTimeBase(const double *f0, int f0_length, int fs,\n    double frame_period, int y_length, double lowest_f0,\n    double *pulse_locations, int *pulse_locations_index,\n    double *pulse_locations_time_shift, double *interpolated_vuv) {\n  double *time_axis = new double[y_length];\n  double *coarse_time_axis = new double[f0_length + 1];\n  double *coarse_f0 = new double[f0_length + 1];\n  double *coarse_vuv = new double[f0_length + 1];\n  GetTemporalParametersForTimeBase(f0, f0_length, fs, y_length, frame_period,\n      lowest_f0, time_axis, coarse_time_axis, coarse_f0, coarse_vuv);\n  double *interpolated_f0 = new double[y_length];\n  interp1(coarse_time_axis, coarse_f0, f0_length + 1,\n      time_axis, y_length, interpolated_f0);\n  interp1(coarse_time_axis, coarse_vuv, f0_length + 1,\n      time_axis, y_length, interpolated_vuv);\n\n  for (int i = 0; i < y_length; ++i) {\n    interpolated_vuv[i] = interpolated_vuv[i] > 0.5 ? 1.0 : 0.0;\n    interpolated_f0[i] =\n      interpolated_vuv[i] == 0.0 ? world::kDefaultF0 : interpolated_f0[i];\n  }\n\n  int number_of_pulses = GetPulseLocationsForTimeBase(interpolated_f0,\n      time_axis, y_length, fs, pulse_locations, pulse_locations_index,\n      pulse_locations_time_shift);\n\n  delete[] coarse_vuv;\n  delete[] coarse_f0;\n  delete[] coarse_time_axis;\n  delete[] time_axis;\n  delete[] interpolated_f0;\n\n  return number_of_pulses;\n}\n\nstatic void GetDCRemover(int fft_size, double *dc_remover) {\n  double dc_component = 0.0;\n  for (int i = 0; i < fft_size / 2; ++i) {\n    dc_remover[i] = 0.5 -\n      0.5 * cos(2.0 * world::kPi * (i + 1.0) / (1.0 + fft_size));\n    dc_remover[fft_size - i - 1] = dc_remover[i];\n    dc_component += dc_remover[i] * 2.0;\n  }\n  for (int i = 0; i < fft_size / 2; ++i) {\n    dc_remover[i] /= dc_component;\n    dc_remover[fft_size - i - 1] = dc_remover[i];\n  }\n}\n\n}  // namespace\n\nvoid Synthesis(const double *f0, int f0_length,\n    const double * const *spectrogram, const double * const *aperiodicity,\n    int fft_size, double frame_period, int fs, int y_length, double *y) {\n  randn_reseed();\n\n  double *impulse_response = new double[fft_size];\n\n  for (int i = 0; i < y_length; ++i) y[i] = 0.0;\n\n  MinimumPhaseAnalysis minimum_phase = {0};\n  InitializeMinimumPhaseAnalysis(fft_size, &minimum_phase);\n  InverseRealFFT inverse_real_fft = {0};\n  InitializeInverseRealFFT(fft_size, &inverse_real_fft);\n  ForwardRealFFT forward_real_fft = {0};\n  InitializeForwardRealFFT(fft_size, &forward_real_fft);\n\n  double *pulse_locations = new double[y_length];\n  int *pulse_locations_index = new int[y_length];\n  double *pulse_locations_time_shift = new double[y_length];\n  double *interpolated_vuv = new double[y_length];\n  int number_of_pulses = GetTimeBase(f0, f0_length, fs, frame_period / 1000.0,\n      y_length, fs / fft_size + 1.0, pulse_locations, pulse_locations_index,\n      pulse_locations_time_shift, interpolated_vuv);\n\n  double *dc_remover = new double[fft_size];\n  GetDCRemover(fft_size, dc_remover);\n\n  frame_period /= 1000.0;\n  int noise_size;\n  int index, offset, lower_limit, upper_limit;\n  for (int i = 0; i < number_of_pulses; ++i) {\n    noise_size = pulse_locations_index[MyMinInt(number_of_pulses - 1, i + 1)] -\n      pulse_locations_index[i];\n\n    GetOneFrameSegment(interpolated_vuv[pulse_locations_index[i]], noise_size,\n        spectrogram, fft_size, aperiodicity, f0_length, frame_period,\n        pulse_locations[i], pulse_locations_time_shift[i], fs,\n        &forward_real_fft, &inverse_real_fft, &minimum_phase, dc_remover,\n        impulse_response);\n    offset = pulse_locations_index[i] - fft_size / 2 + 1;\n    lower_limit = MyMaxInt(0, -offset);\n    upper_limit = MyMinInt(fft_size, y_length - offset);\n    for (int j = lower_limit; j < upper_limit; ++j) {\n      index = j + offset;\n      y[index] += impulse_response[j];\n    }\n  }\n\n  delete[] dc_remover;\n  delete[] pulse_locations;\n  delete[] pulse_locations_index;\n  delete[] pulse_locations_time_shift;\n  delete[] interpolated_vuv;\n\n  DestroyMinimumPhaseAnalysis(&minimum_phase);\n  DestroyInverseRealFFT(&inverse_real_fft);\n  DestroyForwardRealFFT(&forward_real_fft);\n\n  delete[] impulse_response;\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/synthesisrealtime.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Voice synthesis based on f0, spectrogram and aperiodicity.\n// This is an implementation for real-time applications.\n// Note: Several functions are same as those of synthesis.cpp.\n//\n// Caution: This is an implementation as a prototype.\n//          Specifications may change. There may be a bug.\n//\n// Caution: DC removal was re-implemented. However, this implementation is\n//          different from the implementation in synthesis.cpp. The sound\n//          quality is almost all the same in both implementations.\n//-----------------------------------------------------------------------------\n#include \"world/synthesisrealtime.h\"\n\n#include <math.h>\n#include <stdlib.h>\n\n#include \"world/common.h\"\n#include \"world/constantnumbers.h\"\n#include \"world/matlabfunctions.h\"\n\nnamespace {\n\nstatic void GetNoiseSpectrum(int noise_size, int fft_size,\n    const ForwardRealFFT *forward_real_fft) {\n  double average = 0.0;\n  for (int i = 0; i < noise_size; ++i) {\n    forward_real_fft->waveform[i] = randn();\n    average += forward_real_fft->waveform[i];\n  }\n\n  average /= noise_size;\n  for (int i = 0; i < noise_size; ++i)\n    forward_real_fft->waveform[i] -= average;\n  for (int i = noise_size; i < fft_size; ++i)\n    forward_real_fft->waveform[i] = 0.0;\n  fft_execute(forward_real_fft->forward_fft);\n}\n\n//-----------------------------------------------------------------------------\n// GetAperiodicResponse() calculates an aperiodic response.\n//-----------------------------------------------------------------------------\nstatic void GetAperiodicResponse(int noise_size, int fft_size,\n    const double *spectrum, const double *aperiodic_ratio, double current_vuv,\n    const ForwardRealFFT *forward_real_fft,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase, double *aperiodic_response) {\n  GetNoiseSpectrum(noise_size, fft_size, forward_real_fft);\n\n  if (current_vuv != 0.0)\n    for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n      minimum_phase->log_spectrum[i] =\n        log(spectrum[i] * aperiodic_ratio[i] +\n        world::kMySafeGuardMinimum) / 2.0;\n  else\n    for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n      minimum_phase->log_spectrum[i] = log(spectrum[i]) / 2.0;\n  GetMinimumPhaseSpectrum(minimum_phase);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      minimum_phase->minimum_phase_spectrum[i][0] *\n      forward_real_fft->spectrum[i][0] -\n      minimum_phase->minimum_phase_spectrum[i][1] *\n      forward_real_fft->spectrum[i][1];\n    inverse_real_fft->spectrum[i][1] =\n      minimum_phase->minimum_phase_spectrum[i][0] *\n      forward_real_fft->spectrum[i][1] +\n      minimum_phase->minimum_phase_spectrum[i][1] *\n      forward_real_fft->spectrum[i][0];\n  }\n  fft_execute(inverse_real_fft->inverse_fft);\n  fftshift(inverse_real_fft->waveform, fft_size, aperiodic_response);\n}\n\nstatic void ClearRingBuffer(int start, int end, WorldSynthesizer *synth) {\n  int pointer;\n  for (int i = start; i < end; ++i) {\n    pointer = i % synth->number_of_pointers;\n    synth->number_of_pulses[pointer] = 0;\n    if (synth->pulse_locations[pointer] != NULL) {\n      delete[] synth->pulse_locations[pointer];\n      synth->pulse_locations[pointer] = NULL;\n    }\n    if (synth->interpolated_vuv[pointer] != NULL) {\n      delete[] synth->interpolated_vuv[pointer];\n      synth->interpolated_vuv[pointer] = NULL;\n    }\n    if (synth->pulse_locations_index[pointer] != NULL) {\n      delete[] synth->pulse_locations_index[pointer];\n      synth->pulse_locations_index[pointer] = NULL;\n    }\n  }\n}\n\nstatic int SeekSynthesizer(double current_location, WorldSynthesizer *synth) {\n  int frame_number = static_cast<int>(current_location / synth->frame_period);\n\n  int tmp_pointer = synth->current_pointer2;\n  int tmp;\n  for (int i = 0; i < synth->head_pointer - synth->current_pointer2; ++i) {\n    tmp = (tmp_pointer + i) % synth->number_of_pointers;\n    if (synth->f0_origin[tmp] <= frame_number &&\n        frame_number < synth->f0_origin[tmp] + synth->f0_length[tmp]) {\n      tmp_pointer += i;\n      break;\n    }\n  }\n  ClearRingBuffer(synth->current_pointer2, tmp_pointer, synth);\n  synth->current_pointer2 = tmp_pointer;\n  return 1;\n}\n\nstatic void SearchPointer(int frame,  WorldSynthesizer *synth, int flag,\n    double **front, double **next) {\n  int pointer = synth->current_pointer2 % synth->number_of_pointers;\n  int index = -1;\n  for (int i = 0; i < synth->f0_length[pointer]; ++i)\n    if (synth->f0_origin[pointer] + i == frame) {\n      index = i;\n      break;\n    }\n\n  double ***tmp_pointer =\n    flag == 0 ? synth->spectrogram : synth->aperiodicity;\n\n  *front = tmp_pointer[pointer][index];\n  *next = index == synth->f0_length[pointer] - 1 ?\n    tmp_pointer[(synth->current_pointer2 + 1) %\n    synth->number_of_pointers][0] : tmp_pointer[pointer][index + 1];\n}\n\n//-----------------------------------------------------------------------------\n// RemoveDCComponent()\n//-----------------------------------------------------------------------------\nstatic void RemoveDCComponent(const double *periodic_response, int fft_size,\n    const double *dc_remover, double *new_periodic_response) {\n  double dc_component = 0.0;\n  for (int i = fft_size / 2; i < fft_size; ++i)\n    dc_component += periodic_response[i];\n  for (int i = 0; i < fft_size / 2; ++i)\n    new_periodic_response[i] = 0.0;\n  for (int i = fft_size / 2; i < fft_size; ++i)\n    new_periodic_response[i] -= dc_component * dc_remover[i - fft_size / 2];\n}\n\n//-----------------------------------------------------------------------------\n// GetPeriodicResponse() calculates an aperiodic response.\n//-----------------------------------------------------------------------------\nstatic void GetPeriodicResponse(int fft_size, const double *spectrum,\n    const double *aperiodic_ratio, double current_vuv,\n    const InverseRealFFT *inverse_real_fft,\n    const MinimumPhaseAnalysis *minimum_phase,\n    const double *dc_remover, double *periodic_response) {\n  if (current_vuv <= 0.5 || aperiodic_ratio[0] > 0.999) {\n    for (int i = 0; i < fft_size; ++i) periodic_response[i] = 0.0;\n    return;\n  }\n\n  for (int i = 0; i <= minimum_phase->fft_size / 2; ++i)\n    minimum_phase->log_spectrum[i] =\n      log(spectrum[i] * (1.0 - aperiodic_ratio[i]) +\n      world::kMySafeGuardMinimum) / 2.0;\n  GetMinimumPhaseSpectrum(minimum_phase);\n\n  for (int i = 0; i <= fft_size / 2; ++i) {\n    inverse_real_fft->spectrum[i][0] =\n      minimum_phase->minimum_phase_spectrum[i][0];\n    inverse_real_fft->spectrum[i][1] =\n      minimum_phase->minimum_phase_spectrum[i][1];\n  }\n\n  fft_execute(inverse_real_fft->inverse_fft);\n  fftshift(inverse_real_fft->waveform, fft_size, periodic_response);\n  RemoveDCComponent(periodic_response, fft_size, dc_remover,\n      periodic_response);\n}\n\nstatic void GetSpectralEnvelope(double current_location,\n    WorldSynthesizer *synth, double *spectral_envelope) {\n  int current_frame_floor =\n    static_cast<int>(current_location / synth->frame_period);\n\n  int current_frame_ceil =\n    static_cast<int>(ceil(current_location / synth->frame_period));\n  double interpolation =\n    current_location / synth->frame_period - current_frame_floor;\n  double *front = NULL;\n  double *next = NULL;\n  SearchPointer(current_frame_floor, synth, 0, &front, &next);\n\n  if (current_frame_floor == current_frame_ceil)\n    for (int i = 0; i <= synth->fft_size / 2; ++i)\n      spectral_envelope[i] = fabs(front[i]);\n  else\n    for (int i = 0; i <= synth->fft_size / 2; ++i)\n      spectral_envelope[i] =\n      (1.0 - interpolation) * fabs(front[i]) + interpolation * fabs(next[i]);\n}\n\nstatic void GetAperiodicRatio(double current_location,\n    WorldSynthesizer *synth, double *aperiodic_spectrum) {\n  int current_frame_floor =\n    static_cast<int>(current_location / synth->frame_period);\n\n  int current_frame_ceil =\n    static_cast<int>(ceil(current_location / synth->frame_period));\n  double interpolation =\n    current_location / synth->frame_period - current_frame_floor;\n\n  double *front = NULL;\n  double *next = NULL;\n  SearchPointer(current_frame_floor, synth, 1, &front, &next);\n\n  if (current_frame_floor == current_frame_ceil)\n    for (int i = 0; i <= synth->fft_size / 2; ++i)\n      aperiodic_spectrum[i] = pow(GetSafeAperiodicity(front[i]), 2.0);\n  else\n    for (int i = 0; i <= synth->fft_size / 2; ++i)\n      aperiodic_spectrum[i] =\n        pow((1.0 - interpolation) * GetSafeAperiodicity(front[i]) +\n        interpolation * GetSafeAperiodicity(next[i]), 2.0);\n}\n\nstatic double GetCurrentVUV(int current_location, WorldSynthesizer *synth) {\n  double current_vuv = 0.0;\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n\n  int start_sample = MyMaxInt(0,\n    static_cast<int>(ceil((synth->f0_origin[pointer] - 1) *\n    synth->frame_period * synth->fs)));\n\n  current_vuv =\n    synth->interpolated_vuv[pointer][current_location - start_sample + 1];\n  return current_vuv;\n}\n\n//-----------------------------------------------------------------------------\n// GetOneFrameSegment() calculates a periodic and aperiodic response at a time.\n//-----------------------------------------------------------------------------\nstatic void GetOneFrameSegment(int noise_size, int current_location,\n    WorldSynthesizer *synth) {\n  double *aperiodic_response = new double[synth->fft_size];\n  double *periodic_response = new double[synth->fft_size];\n  double *spectral_envelope = new double[synth->fft_size];\n  double *aperiodic_ratio = new double[synth->fft_size];\n\n  double tmp_location = static_cast<double>(current_location) / synth->fs;\n  SeekSynthesizer(tmp_location, synth);\n  GetSpectralEnvelope(tmp_location, synth, spectral_envelope);\n  GetAperiodicRatio(tmp_location, synth, aperiodic_ratio);\n\n  double current_vuv = GetCurrentVUV(current_location, synth);\n\n  // Synthesis of the periodic response\n  GetPeriodicResponse(synth->fft_size, spectral_envelope, aperiodic_ratio,\n      current_vuv, &synth->inverse_real_fft, &synth->minimum_phase,\n      synth->dc_remover, periodic_response);\n\n  // Synthesis of the aperiodic response\n  GetAperiodicResponse(noise_size, synth->fft_size, spectral_envelope,\n      aperiodic_ratio, current_vuv, &synth->forward_real_fft,\n      &synth->inverse_real_fft, &synth->minimum_phase, aperiodic_response);\n\n  double sqrt_noise_size = sqrt(static_cast<double>(noise_size));\n  for (int i = 0; i < synth->fft_size; ++i)\n    synth->impulse_response[i] =\n    (periodic_response[i] * sqrt_noise_size + aperiodic_response[i]) /\n      synth->fft_size;\n\n  delete[] spectral_envelope;\n  delete[] aperiodic_ratio;\n  delete[] periodic_response;\n  delete[] aperiodic_response;\n}\n\nstatic void GetTemporalParametersForTimeBase(const double *f0, int f0_length,\n    WorldSynthesizer *synth, double *coarse_time_axis, double *coarse_f0,\n    double *coarse_vuv) {\n  int cumulative_frame = MyMaxInt(0, synth->cumulative_frame - f0_length);\n  coarse_f0[0] = synth->handoff_f0;\n  coarse_time_axis[0] = cumulative_frame * synth->frame_period;\n  coarse_vuv[0] = synth->handoff_f0 == 0 ? 0.0 : 1.0;\n  for (int i = 0; i < f0_length; ++i) {\n    coarse_time_axis[i + synth->handoff] =\n      (i + cumulative_frame + synth->handoff) * synth->frame_period;\n    coarse_f0[i + synth->handoff] = f0[i];\n    coarse_vuv[i + synth->handoff] = f0[i] == 0.0 ? 0.0 : 1.0;\n  }\n}\n\nstatic void GetPulseLocationsForTimeBase(const double *interpolated_f0,\n    const double *time_axis, int number_of_samples, double origin,\n    WorldSynthesizer *synth) {\n  double *total_phase = new double[number_of_samples + synth->handoff];\n  total_phase[0] = synth->handoff == 1 ? synth->handoff_phase :\n    2.0 * world::kPi * interpolated_f0[0] / synth->fs;\n\n  total_phase[1] = total_phase[0] + 2.0 * world::kPi *\n    interpolated_f0[0] / synth->fs;\n  for (int i = 1 + synth->handoff; i < number_of_samples + synth->handoff; ++i)\n    total_phase[i] = total_phase[i - 1] +\n      2.0 * world::kPi * interpolated_f0[i - synth->handoff] / synth->fs;\n  synth->handoff_phase = total_phase[number_of_samples - 1 + synth->handoff];\n\n  double *wrap_phase = new double[number_of_samples + synth->handoff];\n  for (int i = 0; i < number_of_samples + synth->handoff; ++i)\n    wrap_phase[i] = fmod(total_phase[i], 2.0 * world::kPi);\n\n  double *wrap_phase_abs = new double[number_of_samples + synth->handoff];\n  for (int i = 0; i < number_of_samples - 1 + synth->handoff; ++i)\n    wrap_phase_abs[i] = fabs(wrap_phase[i + 1] - wrap_phase[i]);\n\n  int pointer = synth->head_pointer % synth->number_of_pointers;\n  int number_of_pulses = 0;\n  for (int i = 0; i < number_of_samples - 1 + synth->handoff; ++i)\n    if (wrap_phase_abs[i] > world::kPi) {\n      synth->pulse_locations[pointer][number_of_pulses] =\n        time_axis[i] - static_cast<double>(synth->handoff) / synth->fs;\n      synth->pulse_locations_index[pointer][number_of_pulses] =\n        matlab_round(synth->pulse_locations[pointer][number_of_pulses] *\n            synth->fs);\n      ++number_of_pulses;\n    }\n  synth->number_of_pulses[pointer] = number_of_pulses;\n\n  if (number_of_pulses != 0)\n    synth->last_location =\n      synth->pulse_locations_index[pointer][number_of_pulses - 1];\n  delete[] wrap_phase_abs;\n  delete[] wrap_phase;\n  delete[] total_phase;\n}\n\nstatic void GetTimeBase(const double *f0, int f0_length, int start_sample,\n    int number_of_samples, WorldSynthesizer *synth) {\n  double *coarse_time_axis = new double[f0_length + synth->handoff];\n  double *coarse_f0 = new double[f0_length + synth->handoff];\n  double *coarse_vuv = new double[f0_length + synth->handoff];\n\n  GetTemporalParametersForTimeBase(f0, f0_length, synth,\n      coarse_time_axis, coarse_f0, coarse_vuv);\n\n  double *interpolated_f0 = new double[number_of_samples];\n  double *time_axis = new double[number_of_samples];\n\n  for (int i = 0; i < number_of_samples; ++i)\n    time_axis[i] = (i + start_sample) / static_cast<double>(synth->fs);\n\n  int pointer = synth->head_pointer % synth->number_of_pointers;\n  interp1(coarse_time_axis, coarse_f0, f0_length + synth->handoff, time_axis,\n    number_of_samples, interpolated_f0);\n  interp1(coarse_time_axis, coarse_vuv, f0_length + synth->handoff, time_axis,\n    number_of_samples, synth->interpolated_vuv[pointer]);\n  for (int i = 0; i < number_of_samples; ++i) {\n    synth->interpolated_vuv[pointer][i] =\n      synth->interpolated_vuv[pointer][i] > 0.5 ? 1.0 : 0.0;\n    interpolated_f0[i] =\n      synth->interpolated_vuv[pointer][i] == 0.0 ?\n      world::kDefaultF0 : interpolated_f0[i];\n  }\n\n  GetPulseLocationsForTimeBase(interpolated_f0, time_axis, number_of_samples,\n      coarse_time_axis[0], synth);\n\n  synth->handoff_f0 = interpolated_f0[number_of_samples - 1];\n  delete[] time_axis;\n  delete[] interpolated_f0;\n  delete[] coarse_time_axis;\n  delete[] coarse_f0;\n  delete[] coarse_vuv;\n}\n\nstatic int GetNextPulseLocationIndex(WorldSynthesizer *synth) {\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n  if (synth->i < synth->number_of_pulses[pointer] - 1)\n    return synth->pulse_locations_index[pointer][synth->i + 1];\n  else if (synth->current_pointer == synth->head_pointer - 1)\n    return 0;\n\n  for (int i = 1; i < synth->number_of_pointers; ++i) {\n    pointer = (i + synth->current_pointer) % synth->number_of_pointers;\n    if (synth->number_of_pulses[pointer] != 0)\n      return synth->pulse_locations_index[pointer][0];\n  }\n  return 0;\n}\n\nstatic int UpdateSynthesizer(int current_location, WorldSynthesizer *synth) {\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n  if (synth->i < synth->number_of_pulses[pointer] - 1) {\n    synth->i++;\n    return 1;\n  } else {\n    if (synth->current_pointer == synth->head_pointer - 1) return 0;\n  }\n\n  for (int i = 1; i < synth->number_of_pointers; ++i) {\n    pointer = (i + synth->current_pointer) % synth->number_of_pointers;\n    if (synth->number_of_pulses[pointer] != 0) {\n      synth->i = 0;\n      synth->current_pointer += i;\n      return 1;\n    }\n  }\n  return 0;\n}\n\nstatic int CheckSynthesizer(WorldSynthesizer *synth) {\n  if (synth->synthesized_sample + synth->buffer_size >= synth->last_location)\n    return 0;\n\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n  while (synth->number_of_pulses[pointer] == 0) {\n    if (synth->current_pointer == synth->head_pointer) break;\n    synth->current_pointer++;\n    pointer = synth->current_pointer % synth->number_of_pointers;\n  }\n  return 1;\n}\n\nstatic void GetDCRemover(int fft_size, double *dc_remover) {\n  double dc_component = 0.0;\n  for (int i = 0; i < fft_size / 2; ++i) {\n    dc_remover[i] = 0.5 -\n      0.5 * cos(2.0 * world::kPi * (i + 1.0) / (1.0 + fft_size));\n    dc_remover[fft_size - i - 1] = dc_remover[i];\n    dc_component += dc_remover[i] * 2.0;\n  }\n  for (int i = 0; i < fft_size / 2; ++i) {\n    dc_remover[i] /= dc_component;\n    dc_remover[fft_size - i - 1] = dc_remover[i];\n  }\n}\n\n}  // namespace\n\nvoid InitializeSynthesizer(int fs, double frame_period, int fft_size,\n    int buffer_size, int number_of_pointers, WorldSynthesizer *synth) {\n  // Set basic parameters\n  synth->fs = fs;\n  synth->frame_period = frame_period / 1000.0;\n  synth->buffer_size = buffer_size;\n  synth->number_of_pointers = number_of_pointers;\n  synth->fft_size = fft_size;\n\n  // Memory allocations\n  synth->f0_length = new int[number_of_pointers];\n  synth->spectrogram = new double**[number_of_pointers];\n  synth->aperiodicity = new double**[number_of_pointers];\n  synth->interpolated_vuv = new double*[number_of_pointers];\n  synth->pulse_locations = new double*[number_of_pointers];\n  synth->pulse_locations_index = new int*[number_of_pointers];\n  synth->number_of_pulses = new int[number_of_pointers];\n  synth->f0_origin = new int[number_of_pointers];\n  for (int i = 0; i < synth->number_of_pointers; ++i) {\n    synth->interpolated_vuv[i] = NULL;\n    synth->pulse_locations[i] = NULL;\n    synth->pulse_locations_index[i] = NULL;\n  }\n\n  synth->buffer = new double[buffer_size * 2 + fft_size];\n  synth->impulse_response = new double[synth->fft_size];\n  synth->dc_remover = new double[synth->fft_size / 2];\n\n  // Initilize internal parameters\n  RefreshSynthesizer(synth);\n\n  InitializeMinimumPhaseAnalysis(fft_size, &synth->minimum_phase);\n  InitializeInverseRealFFT(fft_size, &synth->inverse_real_fft);\n  InitializeForwardRealFFT(fft_size, &synth->forward_real_fft);\n}\n\nint AddParameters(double *f0, int f0_length, double **spectrogram,\n    double **aperiodicity, WorldSynthesizer *synth) {\n  if (synth->head_pointer - synth->current_pointer2 ==\n    synth->number_of_pointers)\n    return 0;  // Since the queue is full, we cannot add the parameters.\n  int pointer = synth->head_pointer % synth->number_of_pointers;\n  synth->f0_length[pointer] = f0_length;\n  synth->f0_origin[pointer] = synth->cumulative_frame + 1;\n  synth->cumulative_frame += f0_length;\n\n  synth->spectrogram[pointer] = spectrogram;\n  synth->aperiodicity[pointer] = aperiodicity;\n  if (synth->cumulative_frame < 1) {\n    synth->handoff_f0 = f0[f0_length - 1];\n    synth->number_of_pulses[pointer] = 0;\n    synth->head_pointer++;\n    synth->handoff = 1;\n    return 1;\n  }\n\n  int start_sample =\n    MyMaxInt(0, static_cast<int>(ceil((synth->cumulative_frame - f0_length) *\n      synth->frame_period * synth->fs)));\n  int end_sample =\n    static_cast<int>(ceil((synth->cumulative_frame) *\n      synth->frame_period * synth->fs));\n  int number_of_samples = end_sample - start_sample;\n\n  // Memory allocation\n  synth->interpolated_vuv[pointer] = new double[number_of_samples + 1];\n  synth->pulse_locations[pointer] = new double[number_of_samples];\n  synth->pulse_locations_index[pointer] = new int[number_of_samples];\n\n  GetTimeBase(f0, f0_length, start_sample, number_of_samples, synth);\n\n  synth->handoff_f0 = f0[f0_length - 1];\n  synth->head_pointer++;\n  synth->handoff = 1;\n  return 1;\n}\n\nvoid RefreshSynthesizer(WorldSynthesizer *synth) {\n  ClearRingBuffer(0, synth->number_of_pointers, synth);\n  synth->handoff_phase = 0;\n  synth->handoff_f0 = 0;\n  synth->cumulative_frame = -1;\n  synth->last_location = 0;\n\n  synth->current_pointer = 0;\n  synth->current_pointer2 = 0;\n  synth->head_pointer = 0;\n  synth->handoff = 0;\n\n  synth->i = 0;\n  synth->current_frame = 0;\n\n  synth->synthesized_sample = 0;\n\n  for (int i = 0; i < synth->buffer_size * 2 + synth->fft_size; ++i)\n    synth->buffer[i] = 0;\n  GetDCRemover(synth->fft_size / 2, synth->dc_remover);\n}\n\nvoid DestroySynthesizer(WorldSynthesizer *synth) {\n  RefreshSynthesizer(synth);\n  delete[] synth->f0_length;\n\n  delete[] synth->spectrogram;\n  delete[] synth->aperiodicity;\n\n  delete[] synth->buffer;\n  delete[] synth->impulse_response;\n  delete[] synth->dc_remover;\n\n  delete[] synth->interpolated_vuv;\n  delete[] synth->pulse_locations;\n  delete[] synth->pulse_locations_index;\n  delete[] synth->number_of_pulses;\n  delete[] synth->f0_origin;\n\n  DestroyMinimumPhaseAnalysis(&synth->minimum_phase);\n  DestroyInverseRealFFT(&synth->inverse_real_fft);\n  DestroyForwardRealFFT(&synth->forward_real_fft);\n}\n\nint IsLocked(WorldSynthesizer *synth) {\n  int judge = 0;\n  if (synth->head_pointer - synth->current_pointer2 ==\n      synth->number_of_pointers)\n    judge++;\n  if (synth->synthesized_sample + synth->buffer_size >= synth->last_location)\n    judge++;\n\n  return judge == 2 ? 1 : 0;\n}\n\nint Synthesis2(WorldSynthesizer *synth) {\n  if (CheckSynthesizer(synth) == 0)\n    return 0;\n  for (int i = 0; i < synth->buffer_size + synth->fft_size; ++i)\n    synth->buffer[i] = synth->buffer[i + synth->buffer_size];\n\n  int pointer = synth->current_pointer % synth->number_of_pointers;\n  int noise_size, offset, tmp, index;\n  int current_location = synth->pulse_locations_index[pointer][synth->i];\n  while (current_location < synth->synthesized_sample + synth->buffer_size) {\n    tmp = GetNextPulseLocationIndex(synth);\n    noise_size = tmp - current_location;\n\n    GetOneFrameSegment(noise_size, current_location, synth);\n    offset =\n      current_location - synth->synthesized_sample - synth->fft_size / 2 + 1;\n    for (int i = MyMaxInt(0, -offset); i < synth->fft_size; ++i) {\n      index = i + offset;\n      synth->buffer[index] += synth->impulse_response[i];\n    }\n    current_location = tmp;\n    UpdateSynthesizer(current_location, synth);\n  }\n  synth->synthesized_sample += synth->buffer_size;\n  SeekSynthesizer(synth->synthesized_sample, synth);\n  return 1;\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/cheaptrick.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_CHEAPTRICK_H_\n#define WORLD_CHEAPTRICK_H_\n\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Struct for CheapTrick\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double q1;\n  double f0_floor;\n  int fft_size;\n} CheapTrickOption;\n\n//-----------------------------------------------------------------------------\n// CheapTrick() calculates the spectrogram that consists of spectral envelopes\n// estimated by CheapTrick.\n//\n// Input:\n//   x                  : Input signal\n//   x_length           : Length of x\n//   fs                 : Sampling frequency\n//   temporal_positions : Time axis\n//   f0                 : F0 contour\n//   f0_length          : Length of F0 contour\n//   option             : Struct to order the parameter for CheapTrick\n//\n// Output:\n//   spectrogram        : Spectrogram estimated by CheapTrick.\n//-----------------------------------------------------------------------------\nvoid CheapTrick(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    const CheapTrickOption *option, double **spectrogram);\n\n//-----------------------------------------------------------------------------\n// InitializeCheapTrickOption allocates the memory to the struct and sets the\n// default parameters.\n//\n// Input:\n//   fs : Sampling frequency\n//\n// Output:\n//   option   : Struct for the optional parameter\n//-----------------------------------------------------------------------------\nvoid InitializeCheapTrickOption(int fs, CheapTrickOption *option);\n\n//-----------------------------------------------------------------------------\n// GetFFTSizeForCheapTrick() calculates the FFT size based on the sampling\n// frequency and the lower limit of f0 (kFloorF0 defined in constantnumbers.h).\n//\n// Input:\n//   fs : Sampling frequency\n//   option : Option struct containing the lower f0 limit\n//\n// Output:\n//   FFT size\n//-----------------------------------------------------------------------------\nint GetFFTSizeForCheapTrick(int fs, const CheapTrickOption *option);\n\n//-----------------------------------------------------------------------------\n// GetF0FloorForCheapTrick() calculates actual lower f0 limit for CheapTrick\n// based on the sampling frequency and FFT size used. Whenever f0 is below\n// this threshold the spectrum will be analyzed as if the frame is unvoiced\n// (using kDefaultF0 defined in constantnumbers.h).\n//\n// Input:\n//   fs : Sampling frequency\n//   fft_size : FFT size\n//\n// Output:\n//   Lower f0 limit (Hz)\n//-----------------------------------------------------------------------------\ndouble GetF0FloorForCheapTrick(int fs, int fft_size);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_CHEAPTRICK_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/codec.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2017 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_CODEC_H_\n#define WORLD_CODEC_H_\n\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// GetNumberOfAperiodicities provides the number of dimensions for aperiodicity\n// coding. It is determined by only fs.\n//\n// Input:\n//   fs       : Sampling frequency\n//\n// Output:\n//   Number of aperiodicities\n//-----------------------------------------------------------------------------\nint GetNumberOfAperiodicities(int fs);\n\n//-----------------------------------------------------------------------------\n// CodeAperiodicity codes the aperiodicity. The number of dimensions is\n// determined by fs.\n//\n// Input:\n//   aperiodicity       : Aperiodicity before coding\n//   f0_length          : Length of F0 contour\n//   fs                 : Sampling frequency\n//   fft_size           : FFT size\n//\n// Output:\n//   coded_aperiodicity : Coded aperiodicity\n//-----------------------------------------------------------------------------\nvoid CodeAperiodicity(const double * const *aperiodicity, int f0_length,\n  int fs, int fft_size, double **coded_aperiodicity);\n\n//-----------------------------------------------------------------------------\n// DecodeAperiodicity decodes the coded aperiodicity.\n//\n// Input:\n//   coded_aperiodicity : Coded aperiodicity\n//   f0_length          : Length of F0 contour\n//   fs                 : Sampling frequency\n//   fft_size           : FFT size\n//\n// Output:\n//   aperiodicity       : Decoded aperiodicity\n//-----------------------------------------------------------------------------\nvoid DecodeAperiodicity(const double * const *coded_aperiodicity,\n  int f0_length, int fs, int fft_size, double **aperiodicity);\n\n//-----------------------------------------------------------------------------\n// CodeSpectralEnvelope codes the spectral envelope.\n//\n// Input:\n//   aperiodicity         : Aperiodicity before coding\n//   f0_length            : Length of F0 contour\n//   fs                   : Sampling frequency\n//   fft_size             : FFT size\n//   number_of_dimensions : Parameter for compression\n//\n// Output:\n//   coded_spectral_envelope\n//-----------------------------------------------------------------------------\nvoid CodeSpectralEnvelope(const double * const *spectrogram, int f0_length,\n  int fs, int fft_size, int number_of_dimensions,\n  double **coded_spectral_envelope);\n\n//-----------------------------------------------------------------------------\n// DecodeSpectralEnvelope decodes the coded spectral envelope.\n//\n// Input:\n//   coded_aperiodicity   : Coded aperiodicity\n//   f0_length            : Length of F0 contour\n//   fs                   : Sampling frequency\n//   fft_size             : FFT size\n//   number_of_dimensions : Parameter for compression\n//\n// Output:\n//   spectrogram\n//-----------------------------------------------------------------------------\nvoid DecodeSpectralEnvelope(const double * const *coded_spectral_envelope,\n  int f0_length, int fs, int fft_size, int number_of_dimensions,\n  double **spectrogram);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_CODEC_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/common.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_COMMON_H_\n#define WORLD_COMMON_H_\n\n#include \"fft.h\"\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Structs on FFT\n//-----------------------------------------------------------------------------\n// Forward FFT in the real sequence\ntypedef struct {\n  int fft_size;\n  double *waveform;\n  fft_complex *spectrum;\n  fft_plan forward_fft;\n} ForwardRealFFT;\n\n// Inverse FFT in the real sequence\ntypedef struct {\n  int fft_size;\n  double *waveform;\n  fft_complex *spectrum;\n  fft_plan inverse_fft;\n} InverseRealFFT;\n\n// Inverse FFT in the complex sequence\ntypedef struct {\n  int fft_size;\n  fft_complex *input;\n  fft_complex *output;\n  fft_plan inverse_fft;\n} InverseComplexFFT;\n\n// Minimum phase analysis from logarithmic power spectrum\ntypedef struct {\n  int fft_size;\n  double *log_spectrum;\n  fft_complex *minimum_phase_spectrum;\n  fft_complex *cepstrum;\n  fft_plan inverse_fft;\n  fft_plan forward_fft;\n} MinimumPhaseAnalysis;\n\n//-----------------------------------------------------------------------------\n// GetSuitableFFTSize() calculates the suitable FFT size.\n// The size is defined as the minimum length whose length is longer than\n// the input sample.\n//\n// Input:\n//   sample : Length of the input signal\n//\n// Output:\n//   Suitable FFT size\n//-----------------------------------------------------------------------------\nint GetSuitableFFTSize(int sample);\n\n//-----------------------------------------------------------------------------\n// These four functions are simple max() and min() function\n// for \"int\" and \"double\" type.\n//-----------------------------------------------------------------------------\ninline int MyMaxInt(int x, int y) {\n  return x > y ? x : y;\n}\n\ninline double MyMaxDouble(double x, double y) {\n  return x > y ? x : y;\n}\n\ninline int MyMinInt(int x, int y) {\n  return x < y ? x : y;\n}\n\ninline double MyMinDouble(double x, double y) {\n  return x < y ? x : y;\n}\n\n//-----------------------------------------------------------------------------\n// These functions are used in at least two different .cpp files\n\n//-----------------------------------------------------------------------------\n// DCCorrection interpolates the power under f0 Hz\n// and is used in CheapTrick() and D4C().\n//-----------------------------------------------------------------------------\nvoid DCCorrection(const double *input, double current_f0, int fs, int fft_size,\n    double *output);\n\n//-----------------------------------------------------------------------------\n// LinearSmoothing() carries out the spectral smoothing by rectangular window\n// whose length is width Hz and is used in CheapTrick() and D4C().\n//-----------------------------------------------------------------------------\nvoid LinearSmoothing(const double *input, double width, int fs, int fft_size,\n    double *output);\n\n//-----------------------------------------------------------------------------\n// NuttallWindow() calculates the coefficients of Nuttall window whose length\n// is y_length and is used in Dio(), Harvest() and D4C().\n//-----------------------------------------------------------------------------\nvoid NuttallWindow(int y_length, double *y);\n\n//-----------------------------------------------------------------------------\n// GetSafeAperiodicity() limit the range of aperiodicity from 0.001 to\n// 0.999999999999 (1 - world::kMySafeGuardMinimum).\n//-----------------------------------------------------------------------------\ninline double GetSafeAperiodicity(double x) {\n  return MyMaxDouble(0.001, MyMinDouble(0.999999999999, x));\n}\n\n//-----------------------------------------------------------------------------\n// These functions are used to speed up the processing.\n// Forward FFT\nvoid InitializeForwardRealFFT(int fft_size, ForwardRealFFT *forward_real_fft);\nvoid DestroyForwardRealFFT(ForwardRealFFT *forward_real_fft);\n\n// Inverse FFT\nvoid InitializeInverseRealFFT(int fft_size, InverseRealFFT *inverse_real_fft);\nvoid DestroyInverseRealFFT(InverseRealFFT *inverse_real_fft);\n\n// Inverse FFT (Complex)\nvoid InitializeInverseComplexFFT(int fft_size,\n  InverseComplexFFT *inverse_complex_fft);\nvoid DestroyInverseComplexFFT(InverseComplexFFT *inverse_complex_fft);\n\n// Minimum phase analysis (This analysis uses FFT)\nvoid InitializeMinimumPhaseAnalysis(int fft_size,\n  MinimumPhaseAnalysis *minimum_phase);\nvoid GetMinimumPhaseSpectrum(const MinimumPhaseAnalysis *minimum_phase);\nvoid DestroyMinimumPhaseAnalysis(MinimumPhaseAnalysis *minimum_phase);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_COMMON_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/constantnumbers.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// This header file only defines constant numbers used for several function.\n//-----------------------------------------------------------------------------\n#ifndef WORLD_CONSTANT_NUMBERS_H_\n#define WORLD_CONSTANT_NUMBERS_H_\n\nnamespace world {\n  // for Dio()\n  const double kCutOff = 50.0;\n\n  // for StoneMask()\n  const double kFloorF0StoneMask = 40.0;\n\n  const double kPi = 3.1415926535897932384;\n  const double kMySafeGuardMinimum = 0.000000000001;\n  const double kEps = 0.00000000000000022204460492503131;\n  const double kFloorF0 = 71.0;\n  const double kCeilF0 = 800.0;\n  const double kDefaultF0 = 500.0;\n  const double kLog2 = 0.69314718055994529;\n  // Maximum standard deviation not to be selected as a best f0.\n  const double kMaximumValue = 100000.0;\n\n  // Note to me (fs: 48000)\n  // 71 Hz is the limit to maintain the FFT size at 2048.\n  // If we use 70 Hz as FLOOR_F0, the FFT size of 4096 is required.\n\n  // for D4C()\n  const int kHanning = 1;\n  const int kBlackman = 2;\n  const double kFrequencyInterval = 3000.0;\n  const double kUpperLimit = 15000.0;\n  const double kThreshold = 0.85;\n  const double kFloorF0D4C = 47.0;\n\n  // for Codec (Mel scale)\n  // S. Stevens & J. Volkmann,\n  // The Relation of Pitch to Frequency: A Revised Scale,\n  // American Journal of Psychology, vol. 53, no. 3, pp. 329-353, 1940.\n  const double kM0 = 1127.01048;\n  const double kF0 = 700.0;\n  const double kFloorFrequency = 40.0;\n  const double kCeilFrequency = 20000.0;\n\n}  // namespace world\n\n#endif  // WORLD_CONSTANT_NUMBERS_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/d4c.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_D4C_H_\n#define WORLD_D4C_H_\n\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Struct for D4C\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double threshold;\n} D4COption;\n\n//-----------------------------------------------------------------------------\n// D4C() calculates the aperiodicity estimated by D4C.\n//\n// Input:\n//   x                  : Input signal\n//   x_length           : Length of x\n//   fs                 : Sampling frequency\n//   temporal_positions : Time axis\n//   f0                 : F0 contour\n//   f0_length          : Length of F0 contour\n//   fft_size           : Number of samples of the aperiodicity in one frame.\n//                      : It is given by the equation fft_size / 2 + 1.\n// Output:\n//   aperiodicity  : Aperiodicity estimated by D4C.\n//-----------------------------------------------------------------------------\nvoid D4C(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    int fft_size, const D4COption *option, double **aperiodicity);\n\n//-----------------------------------------------------------------------------\n// InitializeD4COption allocates the memory to the struct and sets the\n// default parameters.\n//\n// Output:\n//   option   : Struct for the optional parameter.\n//-----------------------------------------------------------------------------\nvoid InitializeD4COption(D4COption *option);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_D4C_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/dio.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_DIO_H_\n#define WORLD_DIO_H_\n\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Struct for DIO\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double f0_floor;\n  double f0_ceil;\n  double channels_in_octave;\n  double frame_period;  // msec\n  int speed;  // (1, 2, ..., 12)\n  double allowed_range;  // Threshold used for fixing the F0 contour.\n} DioOption;\n\n//-----------------------------------------------------------------------------\n// DIO\n//\n// Input:\n//   x                    : Input signal\n//   x_length             : Length of x\n//   fs                   : Sampling frequency\n//   option               : Struct to order the parameter for DIO\n//\n// Output:\n//   temporal_positions   : Temporal positions.\n//   f0                   : F0 contour.\n//-----------------------------------------------------------------------------\nvoid Dio(const double *x, int x_length, int fs, const DioOption *option,\n  double *temporal_positions, double *f0);\n\n//-----------------------------------------------------------------------------\n// InitializeDioOption allocates the memory to the struct and sets the\n// default parameters.\n//\n// Output:\n//   option   : Struct for the optional parameter.\n//-----------------------------------------------------------------------------\nvoid InitializeDioOption(DioOption *option);\n\n//-----------------------------------------------------------------------------\n// GetSamplesForDIO() calculates the number of samples required for Dio().\n//\n// Input:\n//   fs             : Sampling frequency [Hz]\n//   x_length       : Length of the input signal [Sample].\n//   frame_period   : Frame shift [msec]\n//\n// Output:\n//   The number of samples required to store the results of Dio()\n//-----------------------------------------------------------------------------\nint GetSamplesForDIO(int fs, int x_length, double frame_period);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_DIO_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/fft.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// These functions and variables are defined to use FFT as well as FFTW\n// Please see fft.cpp to show the detailed information\n//-----------------------------------------------------------------------------\n#ifndef WORLD_FFT_H_\n#define WORLD_FFT_H_\n\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n// Commands for FFT (This is the same as FFTW)\n#define FFT_FORWARD 1\n#define FFT_BACKWARD 2\n#define FFT_ESTIMATE 3\n\n// Complex number for FFT\ntypedef double fft_complex[2];\n// Struct used for FFT\ntypedef struct {\n  int n;\n  int sign;\n  unsigned int flags;\n  fft_complex *c_in;\n  double *in;\n  fft_complex *c_out;\n  double *out;\n  double *input;\n  int *ip;\n  double *w;\n} fft_plan;\n\nfft_plan fft_plan_dft_1d(int n, fft_complex *in, fft_complex *out, int sign,\n  unsigned int flags);\nfft_plan fft_plan_dft_c2r_1d(int n, fft_complex *in, double *out,\n  unsigned int flags);\nfft_plan fft_plan_dft_r2c_1d(int n, double *in, fft_complex *out,\n  unsigned int flags);\nvoid fft_execute(fft_plan p);\nvoid fft_destroy_plan(fft_plan p);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_FFT_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/harvest.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_HARVEST_H_\n#define WORLD_HARVEST_H_\n\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Struct for Harvest\n//-----------------------------------------------------------------------------\ntypedef struct {\n  double f0_floor;\n  double f0_ceil;\n  double frame_period;\n} HarvestOption;\n\n//-----------------------------------------------------------------------------\n// Harvest\n//\n// Input:\n//   x                    : Input signal\n//   x_length             : Length of x\n//   fs                   : Sampling frequency\n//   option               : Struct to order the parameter for Harvest\n//\n// Output:\n//   temporal_positions   : Temporal positions.\n//   f0                   : F0 contour.\n//-----------------------------------------------------------------------------\nvoid Harvest(const double *x, int x_length, int fs,\n  const HarvestOption *option, double *temporal_positions, double *f0);\n\n//-----------------------------------------------------------------------------\n// InitializeHarvestOption allocates the memory to the struct and sets the\n// default parameters.\n//\n// Output:\n//   option   : Struct for the optional parameter.\n//-----------------------------------------------------------------------------\nvoid InitializeHarvestOption(HarvestOption *option);\n\n//-----------------------------------------------------------------------------\n// GetSamplesForHarvest() calculates the number of samples required for\n// Harvest().\n//\n// Input:\n//   fs             : Sampling frequency [Hz]\n//   x_length       : Length of the input signal [Sample]\n//   frame_period   : Frame shift [msec]\n//\n// Output:\n//   The number of samples required to store the results of Harvest().\n//-----------------------------------------------------------------------------\nint GetSamplesForHarvest(int fs, int x_length, double frame_period);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_HARVEST_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/macrodefinitions.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright (c) 2008-2011 The Department of Arts and Culture,\n// The Government of the Republic of South Africa.\n//\n// Contributors:  Meraka Institute, CSIR, South Africa.\n//                Giulio Paci.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n//\n// MODIFIED: Giulio Paci\n// DATE    : 22 January 2016\n//\n// Some usefull macros and defines.\n//-----------------------------------------------------------------------------\n\n#ifndef WORLD_MACRODEFINITIONS_H_\n#define WORLD_MACRODEFINITIONS_H_\n\n//\n// @file macrodefinitions.h\n// Definitions of macros that are common to the whole World engine.\n//\n\n//\n// @ingroup WorldDefines\n// @defgroup WorldMacros System Macros\n// Definitions of macros that are common to the whole World engine.\n// @{\n//\n\n//\n// Defines\n//\n\n//\n// @def WORLD_BEGIN_C_DECLS\n// Start block for enclosing C code for inclusion in C++ programs.\n// This allows C++ programs to include the C header files of the World\n// engine. @code extern \"C\" { @endcode\n// @hideinitializer\n//\n\n//\n// @def WORLD_END_C_DECLS\n// End block for enclosing C code for inclusion in C++ programs.\n// This allows C++ programs to include the C header files of the World\n// engine. @code } @endcode\n// @hideinitializer\n//\n\n#undef  WORLD_BEGIN_C_DECLS\n#undef  WORLD_END_C_DECLS\n#ifdef __cplusplus\n#  define WORLD_BEGIN_C_DECLS extern \"C\" {\n#  define WORLD_END_C_DECLS }\n#else  // !__cplusplus\n#  define WORLD_BEGIN_C_DECLS\n#  define WORLD_END_C_DECLS\n#endif  // __cplusplus\n\n//\n// @def WORLD_API\n// @hideinitializer\n// Declares a symbol to be exported for shared library usage.\n//\n\n//\n// @def WORLD_LOCAL\n// @hideinitializer\n// Declares a symbol hidden from other libraries.\n//\n\n//\n// @def WORLD_PLUGIN_API\n// @hideinitializer\n// Declares a symbol to be exported for plug-in usage.\n//\n\n// Generic helper definitions for shared library support\n#if defined _WIN32 || defined __CYGWIN__\n#  define WORLD_HELPER_DLL_IMPORT __declspec(dllimport)\n#  define WORLD_HELPER_DLL_EXPORT __declspec(dllexport)\n#  define WORLD_HELPER_DLL_LOCAL\n#else  // ! defined _WIN32 || defined __CYGWIN__ || defined WORLD_WIN32\n#  if __GNUC__ >= 4\n#    define WORLD_HELPER_DLL_IMPORT __attribute__ ((visibility(\"default\")))\n#    define WORLD_HELPER_DLL_EXPORT __attribute__ ((visibility(\"default\")))\n#    define WORLD_HELPER_DLL_LOCAL  __attribute__ ((visibility(\"hidden\")))\n#  else  // ! __GNUC__ >= 4\n#    define WORLD_HELPER_DLL_IMPORT\n#    define WORLD_HELPER_DLL_EXPORT\n#    define WORLD_HELPER_DLL_LOCAL\n#  endif  // __GNUC__ >= 4\n#endif  // defined _WIN32 || defined __CYGWIN__ || defined WORLD_WIN32\n\n//\n// WORLD_LIBRARIES_EXPORTS\n// ----------------------\n// WORLD_LIBRARIES_EXPORTS should be defined when compiling a\n// shared/dynamic library.\n//\n// Now we use the generic helper definitions above to define\n// WORLD_API and WORLD_LOCAL. WORLD_API is used for the public API symbols.\n// It's either DLL imports or DLL exports (or does nothing for static build)\n// WORLD_LOCAL is used for non-api symbols.\n//\n// WORLD_SRC\n// ------------------\n// WORLD_SRC should be defined when building World (instead of just using it).\n//\n\n#ifdef WORLD_LIBRARIES_EXPORTS\n#  ifdef WORLD_SRC\n#    define WORLD_API WORLD_HELPER_DLL_EXPORT\n#  else  // !WORLD_SRC\n#    define WORLD_API WORLD_HELPER_DLL_IMPORT\n#  endif  // WORLD_SRC\n#  define WORLD_LOCAL WORLD_HELPER_DLL_LOCAL\n#else  // !WORLD_LIBRARIES_EXPORTS (static library)\n#  define WORLD_API\n#  define WORLD_LOCAL\n#endif  // WORLD_LIBRARIES_EXPORTS\n\n//\n// @}\n// end documentation\n//\n\n#endif  // WORLD_MACRODEFINITIONS_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/matlabfunctions.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_MATLABFUNCTIONS_H_\n#define WORLD_MATLABFUNCTIONS_H_\n#include \"common.h\"\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// fftshift() swaps the left and right halves of input vector.\n// http://www.mathworks.com/help/matlab/ref/fftshift.html\n//\n// Input:\n//   x              : Input vector\n//   x_length       : Length of x\n//\n// Output:\n//   y              : Swapped vector x\n//\n// Caution:\n//   Lengths of index and edges must be the same.\n//-----------------------------------------------------------------------------\nvoid fftshift(const double *x, int x_length, double *y);\n\n//-----------------------------------------------------------------------------\n// histc() counts the number of values in vector x that fall between the\n// elements in the edges vector (which must contain monotonically\n// nondecreasing values). n is a length(edges) vector containing these counts.\n// No elements of x can be complex.\n// http://www.mathworks.co.jp/help/techdoc/ref/histc.html\n//\n// Input:\n//   x              : Input vector\n//   x_length       : Length of x\n//   edges          : Input matrix (1-dimension)\n//   edges_length   : Length of edges\n//\n// Output:\n//   index          : Result counted in vector x\n// Caution:\n//   Lengths of index and edges must be the same.\n//-----------------------------------------------------------------------------\nvoid histc(const double *x, int x_length, const double *edges,\n  int edges_length, int *index);\n\n//-----------------------------------------------------------------------------\n// interp1() interpolates to find yi, the values of the underlying function Y\n// at the points in the vector or array xi. x must be a vector.\n// http://www.mathworks.co.jp/help/techdoc/ref/interp1.html\n//\n// Input:\n//   x          : Input vector (Time axis)\n//   y          : Values at x[n]\n//   x_length   : Length of x (Length of y must be the same)\n//   xi         : Required vector\n//   xi_length  : Length of xi (Length of yi must be the same)\n//\n// Output:\n//   yi         : Interpolated vector\n//-----------------------------------------------------------------------------\nvoid interp1(const double *x, const double *y, int x_length, const double *xi,\n  int xi_length, double *yi);\n\n//-----------------------------------------------------------------------------\n// decimate() carries out down sampling by both IIR and FIR filters.\n// Filter coeffiencts are based on FilterForDecimate().\n//\n// Input:\n//   x          : Input signal\n//   x_length   : Length of x\n//   r          : Coefficient used for down sampling\n//                (fs after down sampling is fs/r)\n// Output:\n//   y          : Output signal\n//-----------------------------------------------------------------------------\nvoid decimate(const double *x, int x_length, int r, double *y);\n\n//-----------------------------------------------------------------------------\n// matlab_round() calculates rounding.\n//\n// Input:\n//   x    : Input value\n//\n// Output:\n//   y    : Rounded value\n//-----------------------------------------------------------------------------\nint matlab_round(double x);\n\n//-----------------------------------------------------------------------------\n// diff() calculates differences and approximate derivatives\n// http://www.mathworks.co.jp/help/techdoc/ref/diff.html\n//\n// Input:\n//   x          : Input signal\n//   x_length   : Length of x\n//\n// Output:\n//   y          : Output signal\n//-----------------------------------------------------------------------------\nvoid diff(const double *x, int x_length, double *y);\n\n//-----------------------------------------------------------------------------\n// interp1Q() is the special case of interp1().\n// We can use this function, provided that All periods of x-axis is the same.\n//\n// Input:\n//   x          : Origin of the x-axis\n//   shift      : Period of the x-axis\n//   y          : Values at x[n]\n//   x_length   : Length of x (Length of y must be the same)\n//   xi         : Required vector\n//   xi_length  : Length of xi (Length of yi must be the same)\n//\n// Output:\n//   yi         : Interpolated vector\n//\n// Caution:\n//   Length of xi and yi must be the same.\n//-----------------------------------------------------------------------------\nvoid interp1Q(double x, double shift, const double *y, int x_length,\n  const double *xi, int xi_length, double *yi);\n\n//-----------------------------------------------------------------------------\n// randn() generates pseudorandom numbers based on xorshift method.\n//\n// Output:\n//   A generated pseudorandom number\n//-----------------------------------------------------------------------------\ndouble randn(void);\n\n//-----------------------------------------------------------------------------\n// randn_reseed() forces to seed the pseudorandom generator using initial\n// values.\n//-----------------------------------------------------------------------------\nvoid randn_reseed(void);\n\n//-----------------------------------------------------------------------------\n// fast_fftfilt() carries out the convolution on the frequency domain.\n//\n// Input:\n//   x                : Input signal\n//   x_length         : Length of x\n//   h                : Impulse response\n//   h_length         : Length of h\n//   fft_size         : Length of FFT\n//   forward_real_fft : Struct to speed up the forward FFT\n//   inverse_real_fft : Struct to speed up the inverse FFT\n//\n// Output:\n//   y                : Calculated result.\n//-----------------------------------------------------------------------------\nvoid fast_fftfilt(const double *x, int x_length, const double *h, int h_length,\n  int fft_size, const ForwardRealFFT *forward_real_fft,\n  const InverseRealFFT *inverse_real_fft, double *y);\n\n//-----------------------------------------------------------------------------\n// matlab_std() calculates the standard deviation of the input vector.\n//\n// Input:\n//   x          : Input vector\n//   x_length   : Length of x\n//\n// Output:\n//   Calculated standard deviation\n//-----------------------------------------------------------------------------\ndouble matlab_std(const double *x, int x_length);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_MATLABFUNCTIONS_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/stonemask.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_STONEMASK_H_\n#define WORLD_STONEMASK_H_\n\n#include \"macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// StoneMask() refines the estimated F0 by Dio()\n//\n// Input:\n//   x                      : Input signal\n//   x_length               : Length of the input signal\n//   fs                     : Sampling frequency\n//   time_axis              : Temporal information\n//   f0                     : f0 contour\n//   f0_length              : Length of f0\n//\n// Output:\n//   refined_f0             : Refined F0\n//-----------------------------------------------------------------------------\nvoid StoneMask(const double *x, int x_length, int fs,\n    const double *temporal_positions, const double *f0, int f0_length,\n    double *refined_f0);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_STONEMASK_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/synthesis.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_SYNTHESIS_H_\n#define WORLD_SYNTHESIS_H_\n\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// Synthesis() synthesize the voice based on f0, spectrogram and\n// aperiodicity (not excitation signal).\n//\n// Input:\n//   f0                   : f0 contour\n//   f0_length            : Length of f0\n//   spectrogram          : Spectrogram estimated by CheapTrick\n//   fft_size             : FFT size\n//   aperiodicity         : Aperiodicity spectrogram based on D4C\n//   frame_period         : Temporal period used for the analysis\n//   fs                   : Sampling frequency\n//   y_length             : Length of the output signal (Memory of y has been\n//                          allocated in advance)\n// Output:\n//   y                    : Calculated speech\n//-----------------------------------------------------------------------------\nvoid Synthesis(const double *f0, int f0_length, \n    const double * const *spectrogram, const double * const *aperiodicity, \n    int fft_size, double frame_period, int fs, int y_length, double *y);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_SYNTHESIS_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/src/world/synthesisrealtime.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_SYNTHESISREALTIME_H_\n#define WORLD_SYNTHESISREALTIME_H_\n\n#include \"world/common.h\"\n#include \"world/macrodefinitions.h\"\n\nWORLD_BEGIN_C_DECLS\n\n//-----------------------------------------------------------------------------\n// A struct for real-time synthesis.\n// I use no class for compatibility in C language.\n// Please make a class for encapsulating it as needed.\n// This synthesizer uses a ring buffer.\n//-----------------------------------------------------------------------------\ntypedef struct {\n  // Basic parameters\n  int fs;\n  double frame_period;\n  int buffer_size;\n  int number_of_pointers;\n  int fft_size;\n\n  // Sound buffer for output. The length is buffer_size [sample].\n  double *buffer;\n  int current_pointer;\n  int i;\n\n  // For DC removal\n  double *dc_remover;\n\n  //---------------------------------------------------------------------------\n  // Followings are internal parameters.\n  // You should not modify them if you are not expert.\n\n  // Speech parameters in each pointer.\n  int *f0_length;\n  int *f0_origin;\n  double ***spectrogram;\n  double ***aperiodicity;\n\n\n  // Note:\n  // This is an extremely rough implementation.\n  // I should optimize this implementation.\n  int current_pointer2;\n  int head_pointer;\n  int synthesized_sample;\n\n  // Internal parameters.\n  int handoff;\n  double handoff_phase;\n  double handoff_f0;\n  int last_location;\n\n  int cumulative_frame;\n  int current_frame;\n\n  double **interpolated_vuv;\n  double **pulse_locations;\n  int **pulse_locations_index;\n  int *number_of_pulses;\n\n  double *impulse_response;\n\n  // FFT\n  MinimumPhaseAnalysis minimum_phase;\n  InverseRealFFT inverse_real_fft;\n  ForwardRealFFT forward_real_fft;\n} WorldSynthesizer;\n\n//-----------------------------------------------------------------------------\n// InitializeSynthesizer() initializes the synthesizer based on basic\n// parameters.\n//\n// Input:\n//   fs                   : Sampling frequency\n//   frame_period         : Frame period (ms)\n//   fft_size             : FFT size\n//   buffer_size          : Buffer size (sample)\n//   number_of_pointers   : The number of elements in the ring buffer\n//\n// Output:\n//   synth                : Initialized synthesizer\n//-----------------------------------------------------------------------------\nvoid InitializeSynthesizer(int fs, double frame_period, int fft_size,\n  int buffer_size, int number_of_pointers, WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// AddParameters() attempts to add speech parameters.\n// You can add several frames at the same time.\n//\n// Input:\n//   f0                   : F0 contour with length of f0_length\n//   f0_length            : This is associated with the number of frames\n//   spectrogram          : Spectrogram\n//   aperiodicity         : Aperiodicity\n//\n// Output:\n//   synth                : Synthesizer\n//\n// Return value:\n//   1: True, 0: False.\n//-----------------------------------------------------------------------------\nint AddParameters(double *f0, int f0_length, double **spectrogram,\n  double **aperiodicity, WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// RefreshSynthesizer() sets the parameters to default.\n//-----------------------------------------------------------------------------\nvoid RefreshSynthesizer(WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// DestroySynthesizer() release the memory.\n//-----------------------------------------------------------------------------\nvoid DestroySynthesizer(WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// IsLocked() checks whether the synthesizer is locked or not.\n// \"Lock\" is defined as the situation that the ring buffer cannot add\n// parameters and cannot synthesize the waveform.\n// It will be caused when the duration calculated by the number of added frames\n// is below 1 / F0 + buffer_size / fs.\n// If this function returns True, please refresh the synthesizer.\n//\n// Input:\n//   Synth            : Synthesizer (pointer)\n//\n// Output:\n//   1: True, 0: False.\n//-----------------------------------------------------------------------------\nint IsLocked(WorldSynthesizer *synth);\n\n//-----------------------------------------------------------------------------\n// Synthesis2() generates speech with length of synth->buffer_size sample.\n// The parameters are automatially updated, and memory is also released.\n//\n// Input:\n//   Synth            : Synthesizer (pointer)\n//\n// Output:\n//   1: True, 0: False.\n//-----------------------------------------------------------------------------\nint Synthesis2(WorldSynthesizer *synth);\n\nWORLD_END_C_DECLS\n\n#endif  // WORLD_SYNTHESISREALTIME_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/tools/audioio.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// .wav input/output functions were modified for compatibility with C language.\n// Since these functions (wavread() and wavwrite()) are roughly implemented,\n// we recommend more suitable functions provided by other organizations.\n// This file is independent of WORLD project and for the test.cpp.\n//-----------------------------------------------------------------------------\n#include \"./audioio.h\"\n\n#include <math.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <string.h>\n\n#if (defined (__WIN32__) || defined (_WIN32)) && !defined (__MINGW32__)\n#pragma warning(disable : 4996)\n#endif\n\nnamespace {\n\nstatic inline int MyMaxInt(int x, int y) {\n  return x > y ? x : y;\n}\n\nstatic inline int MyMinInt(int x, int y) {\n  return x < y ? x : y;\n}\n\n//-----------------------------------------------------------------------------\n// CheckHeader() checks the .wav header. This function can only support the\n// monaural wave file. This function is only used in waveread().\n//-----------------------------------------------------------------------------\nstatic int CheckHeader(FILE *fp) {\n  char data_check[5];\n  fread(data_check, 1, 4, fp);  // \"RIFF\"\n  data_check[4] = '\\0';\n  if (0 != strcmp(data_check, \"RIFF\")) {\n    printf(\"RIFF error.\\n\");\n    return 0;\n  }\n  fseek(fp, 4, SEEK_CUR);\n  fread(data_check, 1, 4, fp);  // \"WAVE\"\n  if (0 != strcmp(data_check, \"WAVE\")) {\n    printf(\"WAVE error.\\n\");\n    return 0;\n  }\n  fread(data_check, 1, 4, fp);  // \"fmt \"\n  if (0 != strcmp(data_check, \"fmt \")) {\n    printf(\"fmt error.\\n\");\n    return 0;\n  }\n  fread(data_check, 1, 4, fp);  // 1 0 0 0\n  if (!(16 == data_check[0] && 0 == data_check[1] &&\n      0 == data_check[2] && 0 == data_check[3])) {\n    printf(\"fmt (2) error.\\n\");\n    return 0;\n  }\n  fread(data_check, 1, 2, fp);  // 1 0\n  if (!(1 == data_check[0] && 0 == data_check[1])) {\n    printf(\"Format ID error.\\n\");\n    return 0;\n  }\n  fread(data_check, 1, 2, fp);  // 1 0\n  if (!(1 == data_check[0] && 0 == data_check[1])) {\n    printf(\"This function cannot support stereo file\\n\");\n    return 0;\n  }\n  return 1;\n}\n\n//-----------------------------------------------------------------------------\n// GetParameters() extracts fp, nbit, wav_length from the .wav file\n// This function is only used in wavread().\n//-----------------------------------------------------------------------------\nstatic int GetParameters(FILE *fp, int *fs, int *nbit, int *wav_length) {\n  char data_check[5] = {0};\n  data_check[4] = '\\0';\n  unsigned char for_int_number[4];\n  fread(for_int_number, 1, 4, fp);\n  *fs = 0;\n  for (int i = 3; i >= 0; --i) *fs = *fs * 256 + for_int_number[i];\n  // Quantization\n  fseek(fp, 6, SEEK_CUR);\n  fread(for_int_number, 1, 2, fp);\n  *nbit = for_int_number[0];\n\n  // Skip until \"data\" is found. 2011/03/28\n  while (0 != fread(data_check, 1, 1, fp)) {\n    if (data_check[0] == 'd') {\n      fread(&data_check[1], 1, 3, fp);\n      if (0 != strcmp(data_check, \"data\"))\n        fseek(fp, -3, SEEK_CUR);\n      else\n        break;\n    }\n  }\n  if (0 != strcmp(data_check, \"data\")) {\n    printf(\"data error.\\n\");\n    return 0;\n  }\n\n  fread(for_int_number, 1, 4, fp);  // \"data\"\n  *wav_length = 0;\n  for (int i = 3; i >= 0; --i)\n    *wav_length = *wav_length * 256 + for_int_number[i];\n  *wav_length /= (*nbit / 8);\n  return 1;\n}\n\n}  // namespace\n\nvoid wavwrite(const double *x, int x_length, int fs, int nbit,\n    const char *filename) {\n  FILE *fp = fopen(filename, \"wb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return;\n  }\n\n  char text[4] = {'R', 'I', 'F', 'F'};\n  uint32_t long_number = 36 + x_length * 2;\n  fwrite(text, 1, 4, fp);\n  fwrite(&long_number, 4, 1, fp);\n\n  text[0] = 'W';\n  text[1] = 'A';\n  text[2] = 'V';\n  text[3] = 'E';\n  fwrite(text, 1, 4, fp);\n  text[0] = 'f';\n  text[1] = 'm';\n  text[2] = 't';\n  text[3] = ' ';\n  fwrite(text, 1, 4, fp);\n\n  long_number = 16;\n  fwrite(&long_number, 4, 1, fp);\n  int16_t short_number = 1;\n  fwrite(&short_number, 2, 1, fp);\n  short_number = 1;\n  fwrite(&short_number, 2, 1, fp);\n  long_number = fs;\n  fwrite(&long_number, 4, 1, fp);\n  long_number = fs * 2;\n  fwrite(&long_number, 4, 1, fp);\n  short_number = 2;\n  fwrite(&short_number, 2, 1, fp);\n  short_number = 16;\n  fwrite(&short_number, 2, 1, fp);\n\n  text[0] = 'd';\n  text[1] = 'a';\n  text[2] = 't';\n  text[3] = 'a';\n  fwrite(text, 1, 4, fp);\n  long_number = x_length * 2;\n  fwrite(&long_number, 4, 1, fp);\n\n  int16_t tmp_signal;\n  for (int i = 0; i < x_length; ++i) {\n    tmp_signal = static_cast<int16_t>(MyMaxInt(-32768,\n        MyMinInt(32767, static_cast<int>(x[i] * 32767))));\n    fwrite(&tmp_signal, 2, 1, fp);\n  }\n\n  fclose(fp);\n}\n\nint GetAudioLength(const char *filename) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    return 0;\n  }\n\n  if (0 == CheckHeader(fp)) {\n    fclose(fp);\n    return -1;\n  }\n\n  char data_check[5] = { 0 };\n  data_check[4] = '\\0';\n  unsigned char for_int_number[4];\n\n  // Quantization\n  fseek(fp, 10, SEEK_CUR);\n  fread(for_int_number, 1, 2, fp);\n  int nbit = for_int_number[0];\n\n  while (0 != fread(data_check, 1, 1, fp)) {\n    if ('d' == data_check[0]) {\n      fread(&data_check[1], 1, 3, fp);\n      if (0 != strcmp(data_check, \"data\"))\n        fseek(fp, -3, SEEK_CUR);\n      else\n        break;\n    }\n  }\n  if (0 != strcmp(data_check, \"data\")) {\n    fclose(fp);\n    return -1;\n  }\n\n  fread(for_int_number, 1, 4, fp);  // \"data\"\n  fclose(fp);\n\n  int wav_length = 0;\n  for (int i = 3; i >= 0; --i)\n    wav_length = wav_length * 256 + for_int_number[i];\n  wav_length /= (nbit / 8);\n\n  return wav_length;\n}\n\nvoid wavread(const char* filename, int *fs, int *nbit, double *x) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File not found.\\n\");\n    return;\n  }\n\n  if (0 == CheckHeader(fp)) {\n    fclose(fp);\n    return;\n  }\n\n  int x_length;\n  if (0 == GetParameters(fp, fs, nbit, &x_length)) {\n    fclose(fp);\n    return;\n  }\n\n  int quantization_byte = *nbit / 8;\n  double zero_line = pow(2.0, *nbit - 1);\n  double tmp, sign_bias;\n  unsigned char for_int_number[4];\n  for (int i = 0; i < x_length; ++i) {\n    sign_bias = tmp = 0.0;\n    fread(for_int_number, 1, quantization_byte, fp);  // \"data\"\n    if (for_int_number[quantization_byte-1] >= 128) {\n      sign_bias = pow(2.0, *nbit - 1);\n      for_int_number[quantization_byte - 1] =\n        for_int_number[quantization_byte - 1] & 0x7F;\n    }\n    for (int j = quantization_byte - 1; j >= 0; --j)\n      tmp = tmp * 256.0 + for_int_number[j];\n    x[i] = (tmp - sign_bias) / zero_line;\n  }\n  fclose(fp);\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/tools/audioio.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2012 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_AUDIOIO_H_\n#define WORLD_AUDIOIO_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n//-----------------------------------------------------------------------------\n// wavwrite() write a .wav file.\n// Input:\n//   x          : Input signal\n//   x_ength : Signal length of x [sample]\n//   fs         : Sampling frequency [Hz]\n//   nbit       : Quantization bit [bit]\n//   filename   : Name of the output signal.\n// Caution:\n//   The variable nbit is not used in this function.\n//   This function only supports the 16 bit.\n//-----------------------------------------------------------------------------\nvoid wavwrite(const double *x, int x_length, int fs, int nbit,\n  const char *filename);\n\n//-----------------------------------------------------------------------------\n// GetAudioLength() returns the length of .wav file.\n// Input:\n//   filename     : Filename of a .wav file.\n// Output:\n//   The number of samples of the file .wav\n//-----------------------------------------------------------------------------\nint GetAudioLength(const char *filename);\n\n//-----------------------------------------------------------------------------\n// wavread() read a .wav file.\n// The memory of output x must be allocated in advance.\n// Input:\n//   filename     : Filename of the input file.\n// Output:\n//   fs           : Sampling frequency [Hz]\n//   nbit         : Quantization bit [bit]\n//   x            : The output waveform.\n//-----------------------------------------------------------------------------\nvoid wavread(const char* filename, int *fs, int *nbit, double *x);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  // WORLD_AUDIOIO_H_\n"
  },
  {
    "path": "libtts/Modules/Lib/World/tools/parameterio.cpp",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2017 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//\n// Save/Load functions for three speech parameters.\n//-----------------------------------------------------------------------------\n#include \"./parameterio.h\"\n\n#include <stdlib.h>\n#include <string.h>\n#include <stdio.h>\n\nnamespace {\nstatic void WriteOneParameter(FILE *fp, const char *text,\n    double parameter, int size) {\n  fwrite(text, 1, 4, fp);\n  if (size == 4) {\n    int parameter_int = static_cast<int>(parameter);\n    fwrite(&parameter_int, 4, 1, fp);\n  } else {\n    fwrite(&parameter, 8, 1, fp);\n  }\n}\n\nstatic void LoadParameters(FILE *fp, int *number_of_frames, int *fft_size,\n    int *number_of_dimensions) {\n  char data_check[12];\n  fread(&data_check, 1, 4, fp);  // NOF\n  fread(number_of_frames, 4, 1, fp);\n\n  fread(&data_check, 1, 12, fp);  // FP (skipped)\n\n  fread(&data_check, 1, 4, fp);  // FFT\n  fread(fft_size, 4, 1, fp);\n\n  fread(&data_check, 1, 4, fp);  // NOD\n  fread(number_of_dimensions, 4, 1, fp);\n  *number_of_dimensions =\n    *number_of_dimensions == 0 ? *fft_size / 2 + 1 : *number_of_dimensions;\n\n  fread(&data_check, 1, 8, fp);  // FS (skipped)\n}\n\nstatic int CheckHeader(FILE *fp, const char *text) {\n  char data_check[5];\n  fread(data_check, 1, 4, fp);  // \"F0  \"\n  data_check[4] = '\\0';\n  if (0 != strcmp(data_check, text)) {\n    printf(\"Header error.\\n\");\n    fclose(fp);\n    return 0;\n  }\n  return 1;\n}\n\n}  // namespace\n\nvoid WriteF0(const char *filename, int f0_length, double frame_period,\n    const double *temporal_positions, const double *f0, int text_flag) {\n  if (text_flag == 1) {\n    FILE *fp = fopen(filename, \"w\");\n    if (NULL == fp) {\n      printf(\"File cannot be opened.\\n\");\n      return;\n    }\n    for (int i = 0; i < f0_length; ++i)\n      fprintf(fp, \"%.5f %.5f\\r\\n\", temporal_positions[i], f0[i]);\n    fclose(fp);\n  } else {\n    FILE *fp = fopen(filename, \"wb\");\n    if (NULL == fp) {\n      printf(\"File cannot be opened.\\n\");\n      return;\n    }\n\n    // Header\n    fwrite(\"F0  \", 1, 4, fp);\n\n    // Parameters\n    WriteOneParameter(fp, \"NOF \", f0_length, 4);\n    WriteOneParameter(fp, \"FP  \", frame_period, 8);\n\n    // Data\n    fwrite(f0, 8, f0_length, fp);\n    fclose(fp);\n  }\n}\n\nint ReadF0(const char *filename, double *temporal_positions, double *f0) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return 0;\n  }\n\n  // Header\n  if (CheckHeader(fp, \"F0  \") == 0) return 0;\n\n  // Parameters\n  char data_check[5];\n  fread(data_check, 1, 4, fp);  // \"NOF \"\n  int number_of_frames;\n  fread(&number_of_frames, 4, 1, fp);\n\n  fread(data_check, 1, 4, fp);  // \"FP  \"\n  double frame_period;\n  fread(&frame_period, 8, 1, fp);\n\n  // Data\n  fread(f0, 8, number_of_frames, fp);\n\n  fclose(fp);\n  for (int i = 0; i < number_of_frames; ++i)\n    temporal_positions[i] = i / 1000.0 * frame_period;\n  return 1;\n}\n\ndouble GetHeaderInformation(const char *filename, const char *parameter) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return 0;\n  }\n\n  char data_check[5];\n  data_check[4] = '\\0';\n  for (int i = 0; i < 13; ++i) {\n    fread(data_check, 1, 4, fp);\n    if (0 != strcmp(data_check, parameter)) continue;\n    if (0 == strcmp(parameter, \"FP  \")) {\n      double answer;\n      fread(&answer, 8, 1, fp);\n      fclose(fp);\n      return answer;\n    } else {\n      int answer;\n      fread(&answer, 4, 1, fp);\n      fclose(fp);\n      return static_cast<double>(answer);\n    }\n  }\n  return 0;\n}\n\nvoid WriteSpectralEnvelope(const char *filename, int fs, int f0_length,\n    double frame_period, int fft_size, int number_of_dimensions,\n    const double * const *spectrogram) {\n  FILE *fp = fopen(filename, \"wb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return;\n  }\n\n  // Header\n  fwrite(\"SPEC\", 1, 4, fp);\n\n  // Parameters\n  WriteOneParameter(fp, \"NOF \", f0_length, 4);\n  WriteOneParameter(fp, \"FP  \", frame_period, 8);\n  WriteOneParameter(fp, \"FFT \", fft_size, 4);\n  WriteOneParameter(fp, \"NOD \", number_of_dimensions, 4);\n  WriteOneParameter(fp, \"FS  \", fs, 4);\n\n  number_of_dimensions =\n    number_of_dimensions == 0 ? fft_size / 2 + 1 : number_of_dimensions;\n\n  // Data\n  for (int i = 0; i < f0_length; ++i)\n    fwrite(spectrogram[i], 8, number_of_dimensions, fp);\n  fclose(fp);\n}\n\nint ReadSpectralEnvelope(const char *filename, double **spectrogram) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return 0;\n  }\n\n  // Header\n  if (CheckHeader(fp, \"SPEC\") == 0) return 0;\n\n  // Parameters\n  int number_of_frames, fft_size, number_of_dimensions;\n  LoadParameters(fp, &number_of_frames, &fft_size, &number_of_dimensions);\n\n  // Data\n  for (int i = 0; i < number_of_frames; ++i)\n    fread(spectrogram[i], 8, number_of_dimensions, fp);\n\n  fclose(fp);\n  return 1;\n}\n\nvoid WriteAperiodicity(const char *filename, int fs, int f0_length,\n    double frame_period, int fft_size, int number_of_dimensions,\n    const double * const *aperiodicity) {\n  FILE *fp = fopen(filename, \"wb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return;\n  }\n\n  // Header\n  fwrite(\"AP  \", 1, 4, fp);\n\n  // Parameters\n  WriteOneParameter(fp, \"NOF \", f0_length, 4);\n  WriteOneParameter(fp, \"FP  \", frame_period, 8);\n  WriteOneParameter(fp, \"FFT \", fft_size, 4);\n  WriteOneParameter(fp, \"NOD \", number_of_dimensions, 4);\n  WriteOneParameter(fp, \"FS  \", fs, 4);\n  number_of_dimensions =\n    number_of_dimensions == 0 ? fft_size / 2 + 1 : number_of_dimensions;\n\n  // Data\n  for (int i = 0; i < f0_length; ++i)\n    fwrite(aperiodicity[i], 8, number_of_dimensions, fp);\n  fclose(fp);\n}\n\nint ReadAperiodicity(const char *filename, double **aperiodicity) {\n  FILE *fp = fopen(filename, \"rb\");\n  if (NULL == fp) {\n    printf(\"File cannot be opened.\\n\");\n    return 0;\n  }\n\n  // Header\n  if (CheckHeader(fp, \"AP  \") == 0) return 0;\n\n  // Parameters\n  int number_of_frames, fft_size, number_of_dimensions;\n  LoadParameters(fp, &number_of_frames, &fft_size, &number_of_dimensions);\n\n  // Data\n  for (int i = 0; i < number_of_frames; ++i)\n    fread(aperiodicity[i], 8, number_of_dimensions, fp);\n\n  fclose(fp);\n  return 1;\n}\n"
  },
  {
    "path": "libtts/Modules/Lib/World/tools/parameterio.h",
    "content": "//-----------------------------------------------------------------------------\n// Copyright 2017 Masanori Morise\n// Author: mmorise [at] meiji.ac.jp (Masanori Morise)\n// Last update: 2021/02/15\n//-----------------------------------------------------------------------------\n#ifndef WORLD_PARAMETERIO_H_\n#define WORLD_PARAMETERIO_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n//-----------------------------------------------------------------------------\n// WriteF0() writes the F0 contour.\n//\n// Input:\n//   filename           : Filename used for file output\n//   f0_length          : Length of F0 contour\n//   frame_period       : Frame shift used for analysis\n//   temporal_positions : Time axis\n//   f0                 : F0 contour\n//   text_flag          : The file is written as text (NOT binary).\n//-----------------------------------------------------------------------------\nvoid WriteF0(const char *filename, int f0_length, double frame_period,\n  const double *temporal_positions, const double *f0, int text_flag);\n\n//-----------------------------------------------------------------------------\n// ReadF0() reads the F0 contour from a file..\n//\n// Input:\n//   filename           : Filename used for file output\n//\n// Output:\n//   temporal_positions : Time axis\n//   f0                 : F0 contour\n//\n// Note: Memory must be allocated before calling this function.\n//-----------------------------------------------------------------------------\nint ReadF0(const char *filename, double *temporal_positions, double *f0);\n\n//-----------------------------------------------------------------------------\n// GetHeaderInformation() reads a parameter from a file.\n//\n// Input:\n//   filename             : Filename used for file output\n//   parameter            : Required parameter\n//                        : \"NOF \": number of samples (int)\n//                        : \"FP  \": frame shift (double)\n//                        : \"FFT \": FFT size (int)\n//                        : \"NOD \": number of dimensions (int)\n//                        : \"FS  \": sampling frequency\n//\n// Note: F0 does not include \"FFT \", \"NOD \", and \"FS  \".\n//       These are ignored in cases where they are used for F0 file.\n//-----------------------------------------------------------------------------\ndouble GetHeaderInformation(const char *filename, const char *parameter);\n\n//-----------------------------------------------------------------------------\n// WriteSpectralEnvelope() writes the spectral envelope.\n//\n// Input:\n//   filename             : Filename used for file output\n//   fs                   : Sampling frequency\n//   f0_length            : Length of F0 contour\n//   frame_period         : Frame shift used for analysis\n//   fft_size             : FFT size used for analysis\n//   number_of_dimensions : Number of dimensions per frame\n//   spectrogram          : Spectral envelope estimated by CheapTrick\n//-----------------------------------------------------------------------------\nvoid WriteSpectralEnvelope(const char *filename, int fs, int f0_length,\n  double frame_period, int fft_size, int number_of_dimensions,\n  const double * const *spectrogram);\n\n//-----------------------------------------------------------------------------\n// ReadSpectralEnvelope() reads the spectral envelope from a file.\n//\n// Input:\n//   filename           : Filename used for file output\n//\n// Output:\n//   spectrogram        : Spectral envelope estimated by CheapTrick\n//\n// Note: Memory must be allocated before calling this function.\n//-----------------------------------------------------------------------------\nint ReadSpectralEnvelope(const char *filename, double **spectrogram);\n\n//-----------------------------------------------------------------------------\n// WriteAperiodicity() writes the aperiodicity.\n//\n// Input:\n//   filename             : Filename used for file output\n//   fs                   : Sampling frequency\n//   f0_length            : Length of F0 contour\n//   frame_period         : Frame shift used for analysis\n//   fft_size             : FFT size used for analysis\n//   number_of_dimensions : Number of dimensions per frame\n//   spectrogram          : Spectral envelope estimated by CheapTrick\n//-----------------------------------------------------------------------------\nvoid WriteAperiodicity(const char *filename, int fs, int f0_length,\n  double frame_period, int fft_size, int number_of_dimensions,\n  const double * const *aperiodicity);\n\n//-----------------------------------------------------------------------------\n// ReadAperiodicity() reads the aperiodicity from a file.\n//\n// Input:\n//   filename           : Filename used for file output\n//\n// Output:\n//   spectrogram        : Spectral envelope estimated by CheapTrick\n//\n// Note: Memory must be allocated before calling this function.\n//-----------------------------------------------------------------------------\nint ReadAperiodicity(const char *filename, double **aperiodicity);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  // WORLD_PARAMETERIO_H_\n"
  },
  {
    "path": "libtts/Modules/Logger/MoeSSLogger.cpp",
    "content": "﻿#include \"MoeSSLogger.hpp\"\n#include <iostream>\n#include \"../StringPreprocess.hpp\"\n#include <windows.h>\n\nnamespace MoeSSLogger\n{\n\tLogger MoeVsLogger;\n\n\tinline std::wstring GetCurrentFolder(const std::wstring& defualt = L\"\")\n\t{\n\t\twchar_t path[1024];\n#ifdef _WIN32\n\t\tGetModuleFileName(nullptr, path, 1024);\n\t\tstd::wstring _curPath = path;\n\t\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\n\t\treturn _curPath;\n#else\n\t\t//TODO Other System\n#error Other System ToDO\n#endif\n\t}\n\n\tvoid RemoveDir(const std::filesystem::directory_entry& dir)\n\t{\n\t\tif (!dir.exists())\n\t\t\treturn;\n\t\tif (dir.is_directory() && !is_empty(dir))\n\t\t{\n\t\t\tconst std::filesystem::directory_iterator dirs(dir);\n\t\t\tfor (const auto& i : dirs)\n\t\t\t\tRemoveDir(i);\n\t\t}\n\t\tremove(dir);\n\t}\n\n\tLogger::~Logger()\n\t{\n\t\tif (log_file)\n\t\t\tfclose(log_file);\n\t\tif (error_file)\n\t\t\tfclose(error_file);\n\t\tlog_file = nullptr;\n\t\terror_file = nullptr;\n\t}\n\n\tLogger::Logger()\n\t{\n\t\tconst std::wstring LogPath = GetCurrentFolder() + L\"/log\";\n\t\tconst std::filesystem::path logger_path(LogPath);\n\t\tif (!exists(logger_path))\n\t\t\tcreate_directory(logger_path);\n\t\tconst std::filesystem::directory_entry logger_path_entry(LogPath);\n\t\tif (logger_path_entry.is_directory())\n\t\t{\n\t\t\ttime_t curtime;\n\t\t\ttime(&curtime);\n\t\t\ttm nowtime{ 0, 0, 0, 0, 0, 0, 0, 0, 0 };\n\t\t\tlocaltime_s(&nowtime, &curtime);\n\t\t\tconst std::wstring dir_name = L\"libsvc \" +\n\t\t\t\tstd::to_wstring(nowtime.tm_year + 1900) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_mon) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_mday) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_hour) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_min) + L'-' +\n\t\t\t\tstd::to_wstring(nowtime.tm_sec);\n\t\t\tcur_log_dir = LogPath + L'/' + dir_name;\n\t\t\tconst std::filesystem::directory_iterator logger_path_list(LogPath);\n\t\t\tstd::filesystem::directory_entry remove_dir;\n\t\t\tsize_t log_count = 0;\n\t\t\tfor (const auto& i : logger_path_list)\n\t\t\t\tif (i.is_directory() && i.path().filename().wstring().substr(0, 6) == L\"libsvc\")\n\t\t\t\t{\n\t\t\t\t\tif (!log_count || i.last_write_time() < remove_dir.last_write_time())\n\t\t\t\t\t\tremove_dir = i;\n\t\t\t\t\t++log_count;\n\t\t\t\t}\n\t\t\tif (log_count > 10)\n\t\t\t\tRemoveDir(remove_dir);\n\t\t\tif (!exists(cur_log_dir))\n\t\t\t\tcreate_directory(cur_log_dir);\n\t\t\tlogpath = cur_log_dir;\n\t\t\tlogpath.append(\"log.txt\");\n\t\t\terrorpath = cur_log_dir;\n\t\t\terrorpath.append(\"error.txt\");\n\t\t}\n\t}\n\n\tLogger::Logger(logger_fn error_fn, logger_fn log_fn)\n\t{\n\t\tcustom_logger_fn = true;\n\t\tcerror_fn = error_fn;\n\t\tcloggerfn = log_fn;\n\t}\n\n\tvoid Logger::log(const std::wstring& format)\n\t{\n\t\tstd::lock_guard mtx(mx);\n\t\tif (custom_logger_fn)\n\t\t{\n\t\t\tcloggerfn(format.c_str(), nullptr);\n\t\t\treturn;\n\t\t}\n\t\tif (filelogger)\n\t\t{\n\t\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\n\t\t\tif (log_file)\n\t\t\t{\n\t\t\t\tfprintf_s(log_file, \"%s\\n\", to_byte_string(format).c_str());\n\t\t\t\tfclose(log_file);\n\t\t\t\tlog_file = nullptr;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tfprintf_s(stdout, \"%s\\n\", to_byte_string(format).c_str());\n\t}\n\n\tvoid Logger::log(const char* format)\n\t{\n\t\tstd::lock_guard mtx(mx);\n\t\tif (custom_logger_fn)\n\t\t{\n\t\t\tcloggerfn(nullptr, format);\n\t\t\treturn;\n\t}\n\t\tif (filelogger)\n\t\t{\n\t\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\n\t\t\tif (log_file)\n\t\t\t{\n\t\t\t\tfprintf_s(log_file, \"%s\\n\", format);\n\t\t\t\tfclose(log_file);\n\t\t\t\tlog_file = nullptr;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tfprintf_s(stdout, \"%s\\n\", format);\n}\n\n\tvoid Logger::error(const std::wstring& format)\n\t{\n\t\tstd::lock_guard mtx(mx);\n\t\tif (custom_logger_fn)\n\t\t{\n\t\t\tcloggerfn(format.c_str(), nullptr);\n\t\t\tcerror_fn(format.c_str(), nullptr);\n\t\t\treturn;\n\t\t}\n\t\tif (filelogger)\n\t\t{\n\t\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\n\t\t\t_wfopen_s(&error_file, errorpath.c_str(), L\"a+\");\n\t\t\tif (log_file)\n\t\t\t{\n\t\t\t\tfprintf(log_file, \"[ERROR]%s\\n\", to_byte_string(format).c_str());\n\t\t\t\tfclose(log_file);\n\t\t\t\tlog_file = nullptr;\n\t\t\t}\n\t\t\tif (error_file)\n\t\t\t{\n\t\t\t\tfprintf(error_file, \"[ERROR]%s\\n\", to_byte_string(format).c_str());\n\t\t\t\tfclose(error_file);\n\t\t\t\terror_file = nullptr;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tfprintf(stdout, \"[ERROR]%s\\n\", to_byte_string(format).c_str());\n\t}\n\n\tvoid Logger::error(const char* format)\n\t{\n\t\tstd::lock_guard mtx(mx);\n\t\tif (custom_logger_fn)\n\t\t{\n\t\t\tcloggerfn(nullptr, format);\n\t\t\tcerror_fn(nullptr, format);\n\t\t\treturn;\n\t\t}\n\t\tif (filelogger)\n\t\t{\n\t\t\t_wfopen_s(&log_file, logpath.c_str(), L\"a+\");\n\t\t\t_wfopen_s(&error_file, errorpath.c_str(), L\"a+\");\n\t\t\tif (log_file)\n\t\t\t{\n\t\t\t\tfprintf(log_file, \"[ERROR]%s\\n\", format);\n\t\t\t\tfclose(log_file);\n\t\t\t\tlog_file = nullptr;\n\t\t\t}\n\t\t\tif (error_file)\n\t\t\t{\n\t\t\t\tfprintf(error_file, \"[ERROR]%s\\n\", format);\n\t\t\t\tfclose(error_file);\n\t\t\t\terror_file = nullptr;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tfprintf(stdout, \"[ERROR]%s\\n\", format);\n\t}\n\n\tLogger& GetLogger()\n\t{\n\t\treturn MoeVsLogger;\n\t}\n\t}\n\n"
  },
  {
    "path": "libtts/Modules/Logger/MoeSSLogger.hpp",
    "content": "﻿#pragma once\n#include <string>\n#include \"../StringPreprocess.hpp\"\n#include <filesystem>\n#include <mutex>\n#define __MOEVS_DEBUG_MESSAGE(msg) __MOEVS_DEBUG_INFO(__FILE__, __LINE__, msg)\n#define logger MoeSSLogger::GetLogger()\ninline std::string __MOEVS_DEBUG_INFO(const char* filename, int line, const char* msg)\n{\n\treturn std::string(\"[In \\\"\") + std::filesystem::path(filename).filename().string() + \"\\\" Line \" + std::to_string(line) + \"] \" + msg;\n}\n\ninline std::wstring __MOEVS_DEBUG_INFO(const char* filename, int line, const wchar_t* msg)\n{\n\treturn std::wstring(L\"[In \\\"\") + std::filesystem::path(filename).filename().wstring() + L\"\\\" Line \" + std::to_wstring(line) + L\"] \" + msg;\n}\n\nnamespace MoeSSLogger\n{\n\tclass Logger\n\t{\n\tpublic:\n\t\tusing logger_fn = void(*)(const wchar_t*, const char*);\n\t\tLogger();\n\t\t~Logger();\n\t\tLogger(logger_fn error_fn, logger_fn log_fn);\n\t\tvoid log(const std::wstring&);\n\t\tvoid log(const char*);\n\t\tvoid error(const std::wstring&);\n\t\tvoid error(const char*);\n\t\tvoid enable(bool _filelogger)\n\t\t{\n\t\t\tfilelogger = _filelogger;\n\t\t}\n\tprivate:\n\t\tbool custom_logger_fn = false;\n\t\tstd::filesystem::path cur_log_dir, logpath, errorpath;\n\t\tlogger_fn cerror_fn = nullptr, cloggerfn = nullptr;\n\t\tFILE* log_file = nullptr, * error_file = nullptr;\n\t\tbool filelogger = true;\n\t\tstd::mutex mx;\n\t};\n\n\tLogger& GetLogger();\n}"
  },
  {
    "path": "libtts/Modules/Models/EnvManager.cpp",
    "content": "﻿#include \"EnvManager.hpp\"\n#ifdef _WIN32\n#ifdef MOEVSDMLPROVIDER\n#include <dml_provider_factory.h>\n#endif\n#endif\n#include <thread>\n#include \"../Logger/MoeSSLogger.hpp\"\n#include \"../Modules.hpp\"\nMoeVoiceStudioCoreEnvManagerHeader\n\nconst char* logger_id = \"MoeVoiceStudioCore\";\n\nvoid MoeVSOrtLoggingFn(void* param, OrtLoggingLevel severity, const char* category, const char* logid, const char* code_location,\n\tconst char* message)\n{\n\tstd::string ort_message = \"[\";\n\tort_message += category;\n\tort_message += \"; In \";\n\tort_message += code_location;\n\tort_message += \"; By\";\n\tort_message += logger_id;\n\tort_message += \"] \";\n\tort_message += message;\n\tlogger.log(ort_message.c_str());\n}\n\nvoid MoeVoiceStudioEnv::Destory()\n{\n\tlogger.log(L\"[Info] Removing Env & Release Memory\");\n\tdelete GlobalOrtSessionOptions;\n\tdelete GlobalOrtEnv;\n\tdelete GlobalOrtMemoryInfo;\n\tGlobalOrtSessionOptions = nullptr;\n\tGlobalOrtEnv = nullptr;\n\tGlobalOrtMemoryInfo = nullptr;\n\n\tif (cuda_option_v2)\n\t\tOrt::GetApi().ReleaseCUDAProviderOptions(cuda_option_v2);\n\tcuda_option_v2 = nullptr;\n\tlogger.log(L\"[Info] Complete!\");\n}\n\nvoid MoeVoiceStudioEnv::Load(unsigned ThreadCount, unsigned DeviceID, unsigned Provider)\n{\n\tif (((Provider != CurProvider) ||\n\t\t(Provider == 0 && ThreadCount != CurThreadCount) ||\n\t\t((Provider == 1 || Provider == 2) && DeviceID != CurDeviceID)) &&\n\t\tMoeVSModuleManager::GetCurTTSModel())\n\t\tLibDLVoiceCodecThrow(\"A Model Has Been Loaded, You Cannot Change Env When A Model Has Been Loaded\");\n\ttry\n\t{\n\t\tif (Provider != CurProvider)\n\t\t\tCreate(ThreadCount, DeviceID, Provider);\n\t\tif (Provider == 0 && ThreadCount != CurThreadCount)\n\t\t\tCreate(ThreadCount, DeviceID, Provider);\n\t\tif ((Provider == 1 || Provider == 2) && DeviceID != CurDeviceID)\n\t\t\tCreate(ThreadCount, DeviceID, Provider);\n\t\tCurProvider = Provider;\n\t}\n\tcatch(std::exception& e)\n\t{\n\t\tDestory();\n\t\tCurThreadCount = unsigned(-1);\n\t\tCurDeviceID = unsigned(-1);\n\t\tCurProvider = unsigned(-1);\n\t\tlogger.log(to_wide_string(e.what()));\n\t\tLibDLVoiceCodecThrow(e.what())\n\t}\n}\n\nvoid MoeVoiceStudioEnv::Create(unsigned ThreadCount_, unsigned DeviceID_, unsigned ExecutionProvider_)\n{\n\tDestory();\n\tlogger.log(L\"[Info] Creating Env\");\n\n\tswitch (ExecutionProvider_)\n\t{\n\t\tcase 1:\n\t\t{\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\t\t\tbool ret = true;\n\t\t\tfor (const auto& it : AvailableProviders)\n\t\t\t\tif (it.find(\"CUDA\") != std::string::npos)\n\t\t\t\t\tret = false;\n\t\t\tif (ret)\n\t\t\t\tLibDLVoiceCodecThrow(\"CUDA Provider Not Found\")\n\t\t\tGlobalOrtSessionOptions = new Ort::SessionOptions;\n\n#ifdef MoeVSCUDAProviderV1\n\t\t\tOrtCUDAProviderOptions cuda_option;\n\t\t\tcuda_option.device_id = int(DeviceID_);\n\t\t\tcuda_option.do_copy_in_default_stream = false;\n\t\t\tGlobalOrtSessionOptions->AppendExecutionProvider_CUDA(cuda_option);\n#else\n\t\t\tconst OrtApi& ortApi = Ort::GetApi();\n\t\t\tif (cuda_option_v2)\n\t\t\t\tortApi.ReleaseCUDAProviderOptions(cuda_option_v2);\n\t\t\tortApi.CreateCUDAProviderOptions(&cuda_option_v2);\n\t\t\tconst std::vector keys{\n\t\t\t\t\"device_id\",\n\t\t\t\t\"gpu_mem_limit\",\n\t\t\t\t\"arena_extend_strategy\",\n\t\t\t\t\"cudnn_conv_algo_search\",\n\t\t\t\t\"do_copy_in_default_stream\",\n\t\t\t\t\"cudnn_conv_use_max_workspace\",\n\t\t\t\t\"cudnn_conv1d_pad_to_nc1d\",\n\t\t\t\t\"enable_cuda_graph\",\n\t\t\t\t\"enable_skip_layer_norm_strict_mode\"\n\t\t\t};\n\t\t\tconst std::vector values{\n\t\t\t\tstd::to_string(DeviceID_).c_str(),\n\t\t\t\t\"2147483648\",\n\t\t\t\t\"kNextPowerOfTwo\",\n\t\t\t\t\"EXHAUSTIVE\",\n\t\t\t\t\"1\",\n\t\t\t\t\"1\",\n\t\t\t\t\"1\",\n\t\t\t\t\"0\",\n\t\t\t\t\"0\"\n\t\t\t};\n\t\t\tortApi.UpdateCUDAProviderOptions(cuda_option_v2, keys.data(), values.data(), keys.size());\n\t\t\tGlobalOrtSessionOptions->AppendExecutionProvider_CUDA_V2(*cuda_option_v2);\n\t\t\t//ortApi.ReleaseCUDAProviderOptions(cuda_option_v2);\n#endif\n\t\t\tGlobalOrtEnv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, logger_id, MoeVSOrtLoggingFn, nullptr);\n\t\t\tGlobalOrtSessionOptions->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\n\t\t\tGlobalOrtSessionOptions->SetIntraOpNumThreads((int)std::thread::hardware_concurrency());\n\t\t\tGlobalOrtMemoryInfo = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n\t\t\tCurDeviceID = DeviceID_;\n\t\t\tbreak;\n\t\t}\n#ifdef MOEVSDMLPROVIDER\n\t\tcase 2:\n\t\t{\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\t\t\tstd::string ret;\n\t\t\tfor (const auto& it : AvailableProviders)\n\t\t\t\tif (it.find(\"Dml\") != std::string::npos)\n\t\t\t\t\tret = it;\n\t\t\tif (ret.empty())\n\t\t\t\tLibDLVoiceCodecThrow(\"DML Provider Not Found\")\n\t\t\tconst OrtApi& ortApi = Ort::GetApi();\n\t\t\tconst OrtDmlApi* ortDmlApi = nullptr;\n\t\t\tortApi.GetExecutionProviderApi(\"DML\", ORT_API_VERSION, reinterpret_cast<const void**>(&ortDmlApi));\n\t\t\tOrt::ThreadingOptions threading_options;\n\t\t\tthreading_options.SetGlobalInterOpNumThreads((int)std::thread::hardware_concurrency());\n\t\t\tGlobalOrtEnv = new Ort::Env(threading_options, MoeVSOrtLoggingFn, nullptr, ORT_LOGGING_LEVEL_WARNING, logger_id);\n\t\t\tGlobalOrtEnv->DisableTelemetryEvents();\n\t\t\tGlobalOrtSessionOptions = new Ort::SessionOptions;\n\t\t\tortDmlApi->SessionOptionsAppendExecutionProvider_DML(*GlobalOrtSessionOptions, int(DeviceID_));\n\t\t\tGlobalOrtSessionOptions->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\n\t\t\tGlobalOrtSessionOptions->DisablePerSessionThreads();\n\t\t\tGlobalOrtSessionOptions->SetExecutionMode(ORT_SEQUENTIAL);\n\t\t\tGlobalOrtSessionOptions->DisableMemPattern();\n\t\t\tGlobalOrtMemoryInfo = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemType::OrtMemTypeCPU));\n\t\t\tCurDeviceID = DeviceID_;\n\t\t\tbreak;\n\t\t}\n#endif\n\t\tdefault:\n\t\t{\n\t\t\tif (ThreadCount_ == 0)\n\t\t\t\tThreadCount_ = std::thread::hardware_concurrency();\n\t\t\tGlobalOrtSessionOptions = new Ort::SessionOptions;\n\t\t\tGlobalOrtEnv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, logger_id, MoeVSOrtLoggingFn, nullptr);\n\t\t\tGlobalOrtSessionOptions->SetIntraOpNumThreads(static_cast<int>(ThreadCount_));\n\t\t\tGlobalOrtSessionOptions->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\n\t\t\tGlobalOrtMemoryInfo = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n\t\t\tCurThreadCount = ThreadCount_;\n\t\t\tbreak;\n\t\t}\n\t}\n\tlogger.log(L\"[Info] Env Created\");\n}\n\nbool MoeVoiceStudioEnv::IsEnabled() const\n{\n\treturn GlobalOrtEnv && GlobalOrtMemoryInfo && GlobalOrtSessionOptions;\n}\n\nMoeVoiceStudioEnv GlobalMoeVSEnv;\n\nMoeVoiceStudioEnv& GetGlobalMoeVSEnv()\n{\n\treturn GlobalMoeVSEnv;\n}\n\nMoeVoiceStudioCoreEnvManagerEnd"
  },
  {
    "path": "libtts/Modules/Models/EnvManager.hpp",
    "content": "﻿/**\n * FileName: EnvManager.hpp\n * Note: MoeVoiceStudioCore 环境管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <onnxruntime_cxx_api.h>\n\n#define MoeVoiceStudioCoreEnvManagerHeader namespace moevsenv{\n#define MoeVoiceStudioCoreEnvManagerEnd }\n\nMoeVoiceStudioCoreEnvManagerHeader\nclass MoeVoiceStudioEnv\n{\npublic:\n\tMoeVoiceStudioEnv() = default;\n\t~MoeVoiceStudioEnv() { Destory(); }\n\tvoid Load(unsigned ThreadCount, unsigned DeviceID, unsigned Provider);\n\tvoid Destory();\n\t[[nodiscard]] bool IsEnabled() const;\n\t[[nodiscard]] Ort::Env* GetEnv() const { return GlobalOrtEnv; }\n\t[[nodiscard]] Ort::SessionOptions* GetSessionOptions() const { return GlobalOrtSessionOptions; }\n\t[[nodiscard]] Ort::MemoryInfo* GetMemoryInfo() const { return GlobalOrtMemoryInfo; }\n\t[[nodiscard]] int GetCurThreadCount() const { return (int)CurThreadCount; }\n\t[[nodiscard]] int GetCurDeviceID() const { return (int)CurDeviceID; }\n\t[[nodiscard]] int GetCurProvider() const { return (int)CurProvider; }\nprivate:\n\tvoid Create(unsigned ThreadCount_, unsigned DeviceID_, unsigned ExecutionProvider_);\n\tOrt::Env* GlobalOrtEnv = nullptr;\n\tOrt::SessionOptions* GlobalOrtSessionOptions = nullptr;\n\tOrt::MemoryInfo* GlobalOrtMemoryInfo = nullptr;\n\tunsigned CurThreadCount = unsigned(-1);\n\tunsigned CurDeviceID = unsigned(-1);\n\tunsigned CurProvider = unsigned(-1);\n\tOrtCUDAProviderOptionsV2* cuda_option_v2 = nullptr;\n};\n\nMoeVoiceStudioEnv& GetGlobalMoeVSEnv();\n\nMoeVoiceStudioCoreEnvManagerEnd"
  },
  {
    "path": "libtts/Modules/Models/header/GPT-SoVits.hpp",
    "content": "﻿/**\n * FileName: GPT-SoVits.hpp\n * Note: MoeVoiceStudioCore GPT-SoVits模型类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2023-11-9 Create\n*/\n\n#pragma once\n#include \"TTS.hpp\"\n\nMoeVoiceStudioCoreHeader\nclass GptSoVits : public TextToSpeech\n{\npublic:\n    GptSoVits(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    GptSoVits(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    void load(const std::map<std::string, std::wstring>& _PathDict,\n        const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback);\n\n    ~GptSoVits() override;\n\n    void destory()\n    {\n        delete sessionBert;\n        delete sessionVits;\n        delete sessionSSL;\n        sessionBert = nullptr;\n        sessionVits = nullptr;\n        sessionSSL = nullptr;\n\n        delete sessionEncoder;\n        delete sessionFDecoder;\n        delete sessionDecoder;\n        sessionEncoder = nullptr;\n        sessionFDecoder = nullptr;\n        sessionDecoder = nullptr;\n    }\n\n    [[nodiscard]] std::tuple<std::vector<float>, std::vector<int64_t>> GetBertPhs(const MoeVSProjectSpace::MoeVSTTSSeq& Seq, const MoeVSG2P::Tokenizer& Tokenizer) const;\n\n    [[nodiscard]] std::vector<std::vector<int16_t>> Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const override;\nprivate:\n    Ort::Session* sessionBert = nullptr;\n    Ort::Session* sessionVits = nullptr;\n    Ort::Session* sessionSSL = nullptr;\n\n    Ort::Session* sessionEncoder = nullptr;\n    Ort::Session* sessionFDecoder = nullptr;\n    Ort::Session* sessionDecoder = nullptr;\n\n    int64_t NumLayers = 24;\n    int64_t EmbeddingDim = 512;\n    int64_t EOSId = 1024;\n\n    std::vector<const char*> VitsInputNames = { \"text_seq\", \"pred_semantic\", \"ref_audio\" };\n    const std::vector<const char*> VitsOutputNames = { \"audio\" };\n\n    std::vector<const char*> EncoderInputNames = { \"ref_seq\", \"text_seq\", \"ref_bert\", \"text_bert\", \"ssl_content\" };\n    const std::vector<const char*> EncoderOutputNames = { \"x\", \"prompts\" };\n    std::vector<const char*> DecoderInputNames = { \"iy\", \"ik\", \"iv\", \"iy_emb\", \"ix_example\" };\n    const std::vector<const char*> DecoderOutputNames = { \"y\", \"k\", \"v\", \"y_emb\", \"logits\", \"samples\" };\n    std::vector<const char*> FDecoderInputNames = { \"x\", \"prompts\" };\n    const std::vector<const char*> FDecoderOutputNames = { \"y\", \"k\", \"v\", \"y_emb\", \"x_example\" };\n\n    std::vector<const char*> SSLInputNames = { \"audio\" };\n    const std::vector<const char*> SSLOutputNames = { \"last_hidden_state\" };\n\n    const std::vector<const char*> BertInputNames = { \"input_ids\", \"attention_mask\", \"token_type_ids\" };\n    const std::vector<const char*> BertInputNames2 = { \"input_ids\", \"attention_mask\" };\n    const std::vector<const char*> BertInputNames3 = { \"input_ids\" };\n    const std::vector<const char*> BertOutputNames = { \"last_hidden_state\" };\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libtts/Modules/Models/header/ModelBase.hpp",
    "content": "﻿/**\n * FileName: ModelBase.hpp\n * Note: MoeVoiceStudioCore Onnx 模型基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <functional>\n#include <thread>\n#include <onnxruntime_cxx_api.h>\n#ifdef _WIN32\n#define WIN32_LEAN_AND_MEAN\n#include <windows.h>\n#endif\n\n#include \"MoeVSProject.hpp\"\n#include \"../../InferTools/inferTools.hpp\"\n\n#define MoeVoiceStudioCoreHeader namespace MoeVoiceStudioCore{\n#define MoeVoiceStudioCoreEnd }\n#define MoeVSNotImplementedError LibDLVoiceCodecThrow(\"NotImplementedError\")\n#define MoeVSClassName(__Moe__VSClassName) __NAME__CLASS__.emplace_back((__Moe__VSClassName))\n#define MoeVSMaxPath 1024\nstatic std::wstring GetCurrentFolder(const std::wstring& defualt = L\"\")\n{\n\twchar_t path[MoeVSMaxPath];\n#ifdef _WIN32\n\tGetModuleFileName(nullptr, path, MoeVSMaxPath);\n\tstd::wstring _curPath = path;\n\t_curPath = _curPath.substr(0, _curPath.rfind(L'\\\\'));\n\treturn _curPath;\n#else\n\t//TODO Other System\n#error Other System ToDO\n#endif\n}\n\nMoeVoiceStudioCoreHeader\n\nclass MoeVoiceStudioModule\n{\npublic:\n\t//进度条回调\n\tusing ProgressCallback = std::function<void(size_t, size_t)>;\n\n\t//Provicer\n\tenum class ExecutionProviders\n\t{\n\t\tCPU = 0,\n\t\tCUDA = 1,\n#ifdef MOEVSDMLPROVIDER\n\t\tDML = 2\n#endif\n\t};\n\n\tstatic [[nodiscard]] std::vector<std::wstring> GetOpenFileNameMoeVS();\n\n\tstatic std::vector<std::wstring> CutLens(const std::wstring& input);\n\n\t/**\n\t * \\brief 构造Onnx模型基类\n\t * \\param ExecutionProvider_ ExecutionProvider(可以理解为设备)\n\t * \\param DeviceID_ 设备ID\n\t * \\param ThreadCount_ 线程数\n\t */\n\tMoeVoiceStudioModule(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_ = 0);\n\n\tvirtual ~MoeVoiceStudioModule();\n\n\t/**\n\t * \\brief 输入路径推理\n\t * \\param _Datas [路径，多个路径使用换行符隔开, 推理文本]\n\t * \\param _InferParams 推理参数\n\t * \\param _SlicerSettings 切片机配置\n\t * \\return 输出路径\n\t */\n\t[[nodiscard]] virtual std::vector<std::wstring> Inference(std::wstring& _Datas,\n\t                                                          const MoeVSProjectSpace::MoeVSParams& _InferParams,\n\t                                                          const InferTools::SlicerSettings& _SlicerSettings) const;\n\n\t/**\n\t * \\brief 获取采样率\n\t * \\return 采样率\n\t */\n\t[[nodiscard]] long GetSamplingRate() const\n\t{\n\t\treturn _samplingRate;\n\t}\n\n\tstatic float Clamp(float in, float min = -1.f, float max = 1.f)\n\t{\n\t\tif (in > max)\n\t\t\treturn max;\n\t\tif (in < min)\n\t\t\treturn min;\n\t\treturn in;\n\t}\nprotected:\n\t//采样率\n\tlong _samplingRate = 22050;\n\n\tOrt::Env* env = nullptr;\n\tOrt::SessionOptions* session_options = nullptr;\n\tOrt::MemoryInfo* memory_info = nullptr;\n\tExecutionProviders _cur_execution_provider = ExecutionProviders::CPU;\n\tProgressCallback _callback;\n\n\tstd::vector<std::wstring> __NAME__CLASS__ = { L\"MoeVoiceStudioModule\" };\npublic:\n\t//*******************删除的函数********************//\n\tMoeVoiceStudioModule& operator=(MoeVoiceStudioModule&&) = delete;\n\tMoeVoiceStudioModule& operator=(const MoeVoiceStudioModule&) = delete;\n\tMoeVoiceStudioModule(const MoeVoiceStudioModule&) = delete;\n\tMoeVoiceStudioModule(MoeVoiceStudioModule&&) = delete;\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libtts/Modules/Models/header/MoeVSProject.hpp",
    "content": "﻿/**\n * FileName: MoeVSProject.hpp\n * Note: MoeVoiceStudioCore 项目相关的定义\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include <string>\n#include <vector>\n#include \"../../StringPreprocess.hpp\"\n#include \"MJson.h\"\nnamespace MoeVSProjectSpace\n{\n    class FileWrapper\n    {\n    public:\n        FileWrapper() = delete;\n        FileWrapper(const wchar_t* _path, const wchar_t* _mode)\n        {\n            _wfopen_s(&file_, _path, _mode);\n        }\n        ~FileWrapper()\n        {\n            if (file_)\n                fclose(file_);\n            file_ = nullptr;\n        }\n        operator FILE*() const\n    \t{\n            return file_;\n        }\n        [[nodiscard]] bool IsOpen() const\n        {\n            return file_;\n        }\n    private:\n        FILE* file_ = nullptr;\n    };\n\n    using size_type = size_t;\n\n\tstruct MoeVSParams\n\t{\n        //通用\n        float NoiseScale = 0.3f;                           //噪声修正因子          0-10\n        int64_t Seed = 52468;                              //种子\n        int64_t SpeakerId = 0;                             //角色ID\n        uint64_t SrcSamplingRate = 48000;                  //源采样率\n        int64_t SpkCount = 2;                              //模型角色数\n\n        //SVC\n\t\tfloat IndexRate = 0.f;                             //索引比               0-1\n\t\tfloat ClusterRate = 0.f;                           //聚类比               0-1\n\t\tfloat DDSPNoiseScale = 0.8f;                       //DDSP噪声修正因子      0-10\n\t\tfloat Keys = 0.f;                                  //升降调               -64-64\n\t\tsize_t MeanWindowLength = 2;                       //均值滤波器窗口大小     1-20\n\t\tsize_t Pndm = 100;                                 //Diffusion加速倍数    2-200\n\t\tsize_t Step = 1000;                                //Diffusion总步数      200-1000\n\t\tstd::wstring Sampler = L\"Pndm\";                    //Diffusion采样器\n\t\tstd::wstring F0Method = L\"Dio\";                    //F0提取算法\n        bool UseShallowDiffusion = false;                  //使用浅扩散\n\n        //SVCRTInfer\n        int64_t RTSampleSize = 44100;\n        int64_t CrossFadeLength = 320;\n\n        //TTS\n        std::vector<float> SpeakerMix;                     //角色混合比例\n        float LengthScale = 1.0f;                          //时长修正因子\n        float DurationPredictorNoiseScale = 0.8f;          //随机时长预测器噪声修正因子\n        float FactorDpSdp = 0.f;                           //随机时长预测器与时长预测器混合比例\n        float GateThreshold = 0.66666f;                    //Tacotron2解码器EOS阈值\n        int64_t MaxDecodeStep = 2000;                      //Tacotron2最大解码步数\n        std::vector<std::wstring> EmotionPrompt;           //情感标记\n        std::wstring PlaceHolderSymbol = L\"|\";             //音素分隔符\n        float RestTime = 0.5f;                             //停顿时间，为负数则直接断开音频并创建新音频\n        std::string LanguageSymbol = \"JP\";                 //语言\n        std::wstring AdditionalInfo;                       //G2P额外信息\n        std::wstring SpeakerName = L\"0\";                   //角色名\n\t};\n\n    struct MoeVSTTSToken\n    {\n        std::wstring Text;                                 //输入文本\n        std::vector<std::wstring> Phonemes;                //音素序列\n        std::vector<int64_t> Tones;                        //音调序列\n        std::vector<int64_t> Durations;                    //时长序列\n        std::vector<std::string> Language;                 //语言序列\n\n        MoeVSTTSToken() = default;\n        MoeVSTTSToken(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams);\n\n        [[nodiscard]] std::wstring Serialization() const;\n    };\n\n\tstruct MoeVSTTSSeq\n\t{\n        std::wstring TextSeq;\n        std::vector<MoeVSTTSToken> SlicedTokens;\n        std::vector<float> SpeakerMix;                     //角色混合比例\n        std::vector<std::wstring> EmotionPrompt;           //情感标记\n        std::wstring PlaceHolderSymbol = L\"|\";             //音素分隔符\n        float NoiseScale = 0.3f;                           //噪声修正因子             0-10\n        float LengthScale = 1.0f;                          //时长修正因子\n        float DurationPredictorNoiseScale = 0.3f;          //随机时长预测器噪声修正因子\n        float FactorDpSdp = 0.3f;                          //随机时长预测器与时长预测器混合比例\n        float GateThreshold = 0.66666f;                    //Tacotron2解码器EOS阈值\n        int64_t MaxDecodeStep = 2000;                      //Tacotron2最大解码步数\n        int64_t Seed = 52468;                              //种子\n        float RestTime = 0.5f;                             //停顿时间，为负数则直接断开音频并创建新音频\n        std::string LanguageSymbol = \"ZH\";                 //语言标记\n        std::wstring SpeakerName = L\"0\";                   //角色或名称ID\n        std::wstring AdditionalInfo;                       //G2P额外信息\n\n        MoeVSTTSSeq() = default;\n        MoeVSTTSSeq(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams);\n\n        [[nodiscard]] std::wstring Serialization() const;\n\n        bool operator==(const MoeVSTTSSeq& right) const;\n\t};\n\n    using MoeVSSvcParams = MoeVSParams;\n    using MoeVSTTSParams = MoeVSParams;\n\n    struct ParamsOffset\n    {\n        std::vector<size_type> OrgAudio;\n        //std::vector<size_type> Hidden_Unit;\n        std::vector<size_type> F0;\n        std::vector<size_type> Volume;\n        std::vector<size_type> Speaker;\n        [[nodiscard]] size_type Size() const\n        {\n            return size_type(OrgAudio.size() + F0.size() + Volume.size() + Speaker.size()) * sizeof(size_type);\n        }\n        ParamsOffset() = default;\n    };\n}\n"
  },
  {
    "path": "libtts/Modules/Models/header/TTS.hpp",
    "content": "﻿/**\n * FileName: TTS.hpp\n * Note: MoeVoiceStudioCore TTS基类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2023-11-9 Create\n*/\n\n#pragma once\n#include <map>\n#include \"ModelBase.hpp\"\n#include \"../../Logger/MoeSSLogger.hpp\"\n#include \"../../InferTools/G2P/MoeVSG2P.hpp\"\n#include \"MJson.h\"\n\nMoeVoiceStudioCoreHeader\n\nclass TextToSpeech : public MoeVoiceStudioModule\n{\npublic:\n\tusing DurationCallback = std::function<void(std::vector<float>&)>;\n\n\tTextToSpeech(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_ = 0);\n\n\t/**Preprocess**/\n\n\t[[nodiscard]] std::vector<MoeVSProjectSpace::MoeVSTTSSeq> GetInputSeqs(const MJson& _Input, const MoeVSProjectSpace::MoeVSParams& _InitParams) const;\n\n\t[[nodiscard]] static std::vector<MoeVSProjectSpace::MoeVSTTSSeq> GetInputSeqsStatic(const MJson& _Input, const MoeVSProjectSpace::MoeVSParams& _InitParams);\n\n\t[[nodiscard]] std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& SpecializeInputSeqs(std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Seq) const;\n\n\t/**Infer**/\n\n\t[[nodiscard]] std::vector<std::vector<int16_t>> Inference(const std::wstring& _Seq,\n\t\tconst MoeVSProjectSpace::MoeVSParams& _InferParams = MoeVSProjectSpace::MoeVSParams()) const;\n\n\t[[nodiscard]] std::vector<std::wstring> Inference(const std::wstring& _Seq,\n\t\tconst MoeVSProjectSpace::MoeVSParams& _InferParams, bool T) const;\n\n\t[[nodiscard]] std::vector<std::vector<int16_t>> Inference(const MJson& _Inputs,\n\t\tconst MoeVSProjectSpace::MoeVSParams& _InferParams = MoeVSProjectSpace::MoeVSParams()) const;\n\n\t[[nodiscard]] virtual std::vector<std::vector<int16_t>> Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const;\n\n\t[[nodiscard]] std::vector<std::wstring> Inference(std::wstring& _Datas, const MoeVSProjectSpace::MoeVSParams& _InferParams, const InferTools::SlicerSettings& _SlicerSettings) const override;\n\n\t[[nodiscard]] std::vector<size_t> AligPhoneAttn(const std::string& LanguageStr, const std::vector<std::wstring>& PhoneSeq, size_t BertSize) const;\n\n\t[[nodiscard]] std::wstring TextNormalize(const std::wstring& _Input, int64_t LanguageId) const;\n\n\t/**MapCast**/\n\n\t[[nodiscard]] const std::wstring& GetTokenizerNameWithLanguageSymbol(const std::string& LanguageSymbol) const;\n\n\t[[nodiscard]] const MoeVSG2P::Tokenizer& GetTokenizerWithLanguageSymbol(const std::string& LanguageSymbol) const;\n\n\t[[nodiscard]] const MoeVSG2P::Tokenizer& GetTokenizer(const std::wstring& TokenizerName) const;\n\n\t[[nodiscard]] const std::string& GetLanguageSymbolWithLanguageId(int64_t LanguageId) const;\n\n\t[[nodiscard]] int64_t GetLanguageIdWithLanguageSymbol(const std::string& LanguageSymbol) const;\n\n\t[[nodiscard]] int64_t GetBertIdWithLanguageSymbol(const std::string& LanguageSymbol) const;\n\n\t[[nodiscard]] int64_t GetTonesBegin(const std::string& LanguageSymbol) const;\n\n\t[[nodiscard]] int64_t GetTonesBegin(int64_t LanguageId) const;\n\n\t[[nodiscard]] int64_t GetSpeakerIdWithSpeakerName(const std::wstring& SpeakerName) const;\n\n\t[[nodiscard]] int64_t GetBertIndexWithName(const std::wstring& BertName) const;\n\n\t[[nodiscard]] const std::wstring& GetBertNameWithIndex(int64_t Index) const;\n\n\t[[nodiscard]] const std::wstring& GetSpeakerNameWithSpeakerId(int64_t SpeakerID) const;\n\n\t[[nodiscard]] std::vector<std::wstring> CleanText(const std::wstring& SrcText, const std::wstring& PlaceholderSymbol,\n\t\tconst std::wstring& ExtraInfo, const std::string& LanguageSymbol) const;\n\n\t[[nodiscard]] std::vector<int64_t> CleanedSeq2Indices(const std::vector<std::wstring>& Seq) const;\n\n\t~TextToSpeech() override = default;\n\nprotected:\n\n\tstd::unordered_map<std::wstring, int64_t> SpeakerName2ID;\n\tstd::unordered_map<int64_t, std::wstring> SpeakerID2Name;\n\n\tstd::unordered_map<std::string, int64_t> LanguageSymbol2ID = { {\"ZH\", 0}, {\"JP\", 1}, {\"EN\", 2} };\n\tstd::unordered_map<int64_t, std::string> LanguageID2Symbol = { {0, \"ZH\"}, {1, \"JP\"}, {2, \"EN\"} };\n\tstd::unordered_map<std::string, int64_t> LanguageSymbol2TonesBegin = { {\"ZH\", 0}, {\"JP\", 0}, {\"EN\", 0} };\n\n\tstd::unordered_map<std::wstring, int64_t> Symbols;\n\n\tstd::unordered_map<std::wstring, MoeVSG2P::Tokenizer> Tokenizers;\n\tstd::unordered_map<int64_t, std::wstring> Index2BertName;\n\tstd::unordered_map<std::wstring, int64_t> BertName2Index;\n\tstd::unordered_map<std::string, std::wstring> LanguageSymbol2TokenizerName;\n\tstd::unordered_map<std::string, int64_t> LanguageSymbol2BertID;\n\n\tMoeVSG2P::MVSCleaner* Cleaner = nullptr;\n\n\tstd::wstring NoneString = L\"None\";\n\tstd::string NoneAString = \"None\";\n\n\tstd::vector<std::string> EncoderBertInputNames;\n\npublic:\n\n\ttemplate <typename T = float>\n\tvoid LinearCombination(std::vector<T>& _data, T Value = T(1.0)) const\n\t{\n\t\t_data.resize(SpeakerCount, 0.f);\n\t\tif (_data.empty())\n\t\t{\n\t\t\t_data = std::vector<T>(1, Value);\n\t\t\treturn;\n\t\t}\n\t\tT Sum = T(0.0);\n\t\tfor (const auto& i : _data)\n\t\t\tSum += i;\n\t\tif (Sum < T(0.0001))\n\t\t{\n\t\t\t_data = std::vector<T>(_data.size(), T(0.0));\n\t\t\t_data[0] = Value;\n\t\t\treturn;\n\t\t}\n\t\tSum *= T(Value);\n\t\tfor (auto& i : _data)\n\t\t\ti /= Sum;\n\t}\n\t[[nodiscard]] static std::vector<std::vector<bool>> generatePath(float* duration, size_t durationSize, size_t maskSize);\n\t[[nodiscard]] static std::vector<size_t> GetAligments(size_t DstLen, size_t SrcLen);\n\t[[nodiscard]] static std::tuple<std::vector<std::wstring>, std::vector<int64_t>> SplitTonesFromTokens(const std::vector<std::wstring>& _Src, const std::vector<int64_t>& _ToneRef, int64_t FirstToneIdx, const std::string& LanguageSymbol);\n\t[[nodiscard]] static std::vector<std::wstring> CleanText(const MoeVSG2P::MVSCleaner* TextCleaner, const std::wstring& SrcText, const std::wstring& PlaceholderSymbol,\n\t\tconst std::wstring& ExtraInfo, const std::string& LanguageSymbol);\n\nprotected:\n\tbool AddBlank = true;\n\tint64_t SpeakerCount = 1;\n\tint64_t UNKID = 0;\n\tDurationCallback CustomDurationCallback;\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libtts/Modules/Models/header/Tacotron.hpp",
    "content": "#pragma once\n#include \"ModelBase.hpp\"\n\nINFERCLASSHEADER\n\nclass Tacotron2 : public TTS\n{\npublic:\n    Tacotron2(const MJson&, const callback&, const callback_params&, const DurationCallback&, Device _dev = Device::CPU);\n\n\t~Tacotron2() override;\n\n    std::vector<int16_t> Inference(std::wstring& _inputLens) const override;\n\n    [[nodiscard]] std::vector<int16_t> Inference(const MoeVSProject::TTSParams& _input) const override;\n\n    static void cat(std::vector<float>& tensorA, std::vector<int64>& Shape, const MTensor& tensorB) {\n        const int64 n = Shape[1];\n        for (int64 i = n; i > 0; --i)\n            tensorA.insert(tensorA.begin() + (i * Shape[2]), tensorB.GetTensorData<float>()[i - 1]);\n        ++Shape[2];\n    }\nprivate:\n    Ort::Session* sessionEncoder = nullptr;\n    Ort::Session* sessionDecoderIter = nullptr;\n    Ort::Session* sessionPostNet = nullptr;\n    Ort::Session* sessionGan = nullptr;\n\n    const std::vector<const char*> ganIn = { \"x\" };\n    const std::vector<const char*> ganOut = { \"audio\" };\n    const std::vector<const char*> inputNodeNamesSessionEncoder = { \"sequences\",\"sequence_lengths\" };\n    const std::vector<const char*> outputNodeNamesSessionEncoder = { \"memory\",\"processed_memory\",\"lens\" };\n    const std::vector<const char*> inputNodeNamesSessionDecoderIter = { \"decoder_input\",\"attention_hidden\",\"attention_cell\",\"decoder_hidden\",\"decoder_cell\",\"attention_weights\",\"attention_weights_cum\",\"attention_context\",\"memory\",\"processed_memory\",\"mask\" };\n    const std::vector<const char*> outputNodeNamesSessionDecoderIter = { \"decoder_output\",\"gate_prediction\",\"out_attention_hidden\",\"out_attention_cell\",\"out_decoder_hidden\",\"out_decoder_cell\",\"out_attention_weights\",\"out_attention_weights_cum\",\"out_attention_context\" };\n    const std::vector<const char*> inputNodeNamesSessionPostNet = { \"mel_outputs\" };\n    const std::vector<const char*> outputNodeNamesSessionPostNet = { \"mel_outputs_postnet\" };\n};\n\nINFERCLASSEND"
  },
  {
    "path": "libtts/Modules/Models/header/Vits.hpp",
    "content": "﻿/**\n * FileName: Vits.hpp\n * Note: MoeVoiceStudioCore Vits模型类\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2023-11-9 Create\n*/\n\n#pragma once\n#include \"TTS.hpp\"\n#include <any>\n\nMoeVoiceStudioCoreHeader\n\nvoid SetBertEnabled(bool cond);\n\nvoid DestoryAllBerts();\n\nclass EmoLoader\n{\npublic:\n    static constexpr long startPos = 128;\n    EmoLoader() = default;\n    EmoLoader(const std::wstring& path)\n    {\n        if (emofile)\n            fclose(emofile);\n        emofile = nullptr;\n        _wfopen_s(&emofile, path.c_str(), L\"r\");\n        if (!emofile)\n            LibDLVoiceCodecThrow(\"emoFile not exists\")\n    }\n    ~EmoLoader()\n    {\n        if (emofile)\n            fclose(emofile);\n        emofile = nullptr;\n    }\n    void close()\n    {\n        if (emofile)\n            fclose(emofile);\n        emofile = nullptr;\n    }\n    void open(const std::wstring& path)\n    {\n        if (emofile)\n            fclose(emofile);\n        emofile = nullptr;\n        _wfopen_s(&emofile, path.c_str(), L\"rb\");\n        if (!emofile)\n            LibDLVoiceCodecThrow(\"emoFile not exists\")\n    }\n    std::vector<float> operator[](long index) const\n    {\n        if (emofile)\n        {\n            fseek(emofile, index * 4096 + startPos, SEEK_SET);\n            char buffer[4096];\n            const auto buf = reinterpret_cast<float*>(buffer);\n            const auto bufread = fread_s(buffer, 4096, 1, 4096, emofile);\n            if (bufread == 4096)\n                return { buf ,buf + 1024 };\n            LibDLVoiceCodecThrow(\"emo index out of range\")\n        }\n        LibDLVoiceCodecThrow(\"emo file not opened\")\n    }\nprivate:\n    FILE* emofile = nullptr;\n};\n\nclass Vits : public TextToSpeech\n{\npublic:\n    Vits(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    Vits(const std::map<std::string, std::wstring>& _PathDict, const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback, const std::vector<std::wstring>& _BertPaths,\n        ExecutionProviders ExecutionProvider_ = ExecutionProviders::CPU,\n        unsigned DeviceID_ = 0, unsigned ThreadCount_ = 0);\n\n    void load(const std::map<std::string, std::wstring>& _PathDict,\n        const MJson& _Config, const ProgressCallback& _ProgressCallback,\n        const DurationCallback& _DurationCallback, const std::vector<std::wstring>& _BertPaths = {});\n\n\t~Vits() override;\n\n    void destory()\n    {\n        delete sessionDec;\n        delete sessionSdp;\n        delete sessionDp;\n        delete sessionEnc_p;\n        delete sessionFlow;\n        delete sessionEmb;\n        sessionDec = nullptr;\n        sessionSdp = nullptr;\n        sessionEnc_p = nullptr;\n        sessionFlow = nullptr;\n        sessionEmb = nullptr;\n        sessionDp = nullptr;\n    }\n\n    [[nodiscard]] std::vector<float> GetEmotionVector(const std::vector<std::wstring>& src) const;\n\n    [[nodiscard]] std::tuple<bool, std::vector<std::wstring>, std::vector<std::wstring>, std::vector<int64_t>, std::vector<int64_t>, std::vector<int64_t>, std::vector<size_t>, bool> PreProcessSeq(const MoeVSProjectSpace::MoeVSTTSSeq& Seq, int64_t CurLanguageIdx) const;\n\n    [[nodiscard]] std::vector<std::vector<int16_t>> Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const override;\n\n    [[nodiscard]] std::vector<int16_t> Infer(const MoeVSProjectSpace::MoeVSTTSSeq& Seq) const;\n\n    std::vector<Ort::Value> GetBertFeature(size_t IndexOfBert, const std::vector<std::wstring>& TokenSeq, Ort::Session* CurBertSession) const;\n\nprotected:\n\n    Ort::Session* sessionDec = nullptr;\n    Ort::Session* sessionSdp = nullptr;\n    Ort::Session* sessionDp = nullptr;\n    Ort::Session* sessionEnc_p = nullptr;\n    Ort::Session* sessionFlow = nullptr;\n    Ort::Session* sessionEmb = nullptr;\n\n    std::string VitsType;\n    \n    int64_t DefBertSize = 1024;\n    int64_t VQCodeBookSize = 10;\n\n    bool UseTone = false;\n    bool UseBert = false;\n    bool UseLength = true;\n    bool UseLanguage = false;\n    bool EncoderG = false;\n    bool ReferenceBert = false;\n    bool UseVQ = false;\n    bool UseClap = false;\n    bool Emotion = false;\n\n    std::wstring ClapName;\n\nprivate:\n\n    EmoLoader EmoLoader;\n    std::unordered_map<std::wstring, long> Emo2Id;\n\n    std::vector<const char*> EncoderInputNames = { \"x\" };\n    const std::vector<const char*> EncoderOutputNames = { \"xout\", \"m_p\", \"logs_p\", \"x_mask\" };\n\n    std::vector<const char*> SdpInputNames = { \"x\", \"x_mask\", \"zin\" };\n    const std::vector<const char*> SdpOutputNames = { \"logw\" };\n\n    std::vector<const char*> DpInputNames = { \"x\", \"x_mask\" };\n    const std::vector<const char*> DpOutputNames = { \"logw\" };\n\n\tstd::vector<const char*> FlowInputNames = { \"z_p\", \"y_mask\" };\n    const std::vector<const char*> FlowOutputNames = { \"z\" };\n\n    std::vector<const char*> DecInputNames = { \"z_in\" };\n    const std::vector<const char*> DecOutputNames = { \"o\" };\n\n    const std::vector<const char*> EmbiddingInputNames = { \"sid\" };\n    const std::vector<const char*> EmbiddingOutputNames = { \"g\" };\n\n    const std::vector<const char*> BertInputNames = { \"input_ids\", \"attention_mask\", \"token_type_ids\" };\n    const std::vector<const char*> BertOutputNames = { \"last_hidden_state\" };\n};\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libtts/Modules/Models/src/GPT-SoVits.cpp",
    "content": "﻿#include \"../header/GPT-SoVits.hpp\"\n#include \"../../InferTools/inferTools.hpp\"\n#include <random>\n#include <set>\n\nMoeVoiceStudioCoreHeader\n\tGptSoVits::~GptSoVits()\n{\n\tlogger.log(L\"[Info] unloading GptSoVits Models\");\n\tdestory();\n\tlogger.log(L\"[Info] GptSoVits Models unloaded\");\n}\n\nGptSoVits::GptSoVits(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_) :\n\tTextToSpeech(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\t//Check Folder\n\tif (_Config[\"Folder\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"folder\\\" (Model Folder)\");\n\tif (!_Config[\"Folder\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Must Be String\");\n\tconst auto _folder = to_wide_string(_Config[\"Folder\"].GetString());\n\tif (_folder.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Can Not Be Empty\");\n\tconst std::wstring _path = GetCurrentFolder() + L\"/Models/\" + _folder + L\"/\" + _folder;\n\n\tstd::map<std::string, std::wstring> _PathDict;\n\n\t_PathDict[\"SSL\"] = GetCurrentFolder() + L\"/Bert/\" + L\"SSLModel.onnx\";\n\t_PathDict[\"Vits\"] = _path + L\"_vits.onnx\";\n\t_PathDict[\"Encoder\"] = _path + L\"_t2s_encoder.onnx\";\n\t_PathDict[\"FDecoder\"] = _path + L\"_t2s_fsdec.onnx\";\n\t_PathDict[\"Decoder\"] = _path + L\"_t2s_sdec.onnx\";\n\n\tif (_Config.HasMember(\"Dict\") && _Config[\"Dict\"].IsString() && !_Config[\"Dict\"].Empty())\n\t\t_PathDict[\"Dict\"] = GetCurrentFolder() + L\"/Dict/\" + to_wide_string(_Config[\"Dict\"].GetString()) + L\".json\";\n\n\tif (_Config.HasMember(\"BertPath\") && _Config[\"BertPath\"].IsString() && !_Config[\"BertPath\"].Empty())\n\t\t_PathDict[\"Bert\"] = GetCurrentFolder() + L\"/Bert/\" + to_wide_string(_Config[\"BertPath\"].GetString());\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"BertPath\\\" (Bert Folder)\");\n\n\tload(_PathDict, _Config, _ProgressCallback, _DurationCallback);\n}\n\nvoid GptSoVits::load(const std::map<std::string, std::wstring>& _PathDict,\n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback)\n{\n\tCleaner = MoeVSG2P::GetDefCleaner();\n\tif (_PathDict.find(\"Dict\") != _PathDict.end() && (_waccess(_PathDict.at(\"Dict\").c_str(), 0) != -1))\n\t\tCleaner->loadDict(_PathDict.at(\"Dict\"));\n\telse\n\t\tCleaner->loadDict(L\"\");\n\n\tif (_Config.HasMember(\"LanguageMap\") && !_Config[\"LanguageMap\"].IsNull())\n\t{\n\t\tfor (const auto& CMember : _Config[\"LanguageMap\"].GetMemberArray())\n\t\t{\n\t\t\tLanguageSymbol2ID[CMember.first] = CMember.second.GetInt();\n\t\t\tLanguageID2Symbol[CMember.second.GetInt()] = CMember.first;\n\t\t}\n\t}\n\telse\n\t\tlogger.log(\"[Warn] Field \\\"LanguageMap\\\" Is Missing, Use Default Value\");\n\n\t//Check SamplingRate\n\tif (_Config[\"Rate\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Rate\\\" (SamplingRate)\");\n\tif (_Config[\"Rate\"].IsInt() || _Config[\"Rate\"].IsInt64())\n\t\t_samplingRate = _Config[\"Rate\"].GetInt();\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Rate\\\" (SamplingRate) Must Be Int/Int64\");\n\n\tlogger.log(L\"[Info] Current Sampling Rate is\" + std::to_wstring(_samplingRate));\n\n\t//Check Symbol\n\tif (!_Config.HasMember(\"Symbol\") || _Config[\"Symbol\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Symbol\\\" (PhSymbol)\");\n\tif (_Config.HasMember(\"AddBlank\") && !_Config[\"AddBlank\"].IsNull())\n\t\tAddBlank = _Config[\"AddBlank\"].GetBool();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"AddBlank\\\" Is Missing, Use Default Value\");\n\n\tif (_Config.HasMember(\"NumLayers\") && _Config[\"NumLayers\"].IsInt())\n\t\tNumLayers = _Config[\"NumLayers\"].GetInt();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"NumLayers\\\" Is Missing, Use Default Value\");\n\n\tif (_Config.HasMember(\"EmbeddingDim\") && _Config[\"EmbeddingDim\"].IsInt())\n\t\tEmbeddingDim = _Config[\"EmbeddingDim\"].GetInt();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"EmbeddingDim\\\" Is Missing, Use Default Value\");\n\n\tif (_Config.HasMember(\"EOSId\") && _Config[\"EOSId\"].IsInt())\n\t\tEOSId = _Config[\"EOSId\"].GetInt();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"EOSId\\\" Is Missing, Use Default Value\");\n\n\t//Load Symbol\n\tint64_t iter_symb = 0;\n\tif (_Config[\"Symbol\"].IsArray())\n\t{\n\t\tlogger.log(L\"[Info] Use Phs\");\n\t\tif (_Config[\"Symbol\"].Empty())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Can Not Be Empty\");\n\t\tconst auto SymbolArr = _Config[\"Symbol\"].GetArray();\n\t\tif (!SymbolArr[0].IsString())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Must Be Array<String> or String\");\n\t\tfor (const auto& it : SymbolArr)\n\t\t\tSymbols.insert({ to_wide_string(it.GetString()), iter_symb++ });\n\t}\n\telse\n\t{\n\t\tif (!_Config[\"Symbol\"].IsString())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Must Be Array<String> or String\");\n\t\tlogger.log(L\"[Info] Use Symbols\");\n\t\tconst std::wstring SymbolsStr = to_wide_string(_Config[\"Symbol\"].GetString());\n\t\tif (SymbolsStr.empty())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Can Not Be Empty\");\n\t\tfor (size_t i = 0; i < SymbolsStr.length(); ++i)\n\t\t\tSymbols.insert({ SymbolsStr.substr(i,1) , iter_symb++ });\n\t}\n\n\tif (_Config.HasMember(\"Characters\") && _Config[\"Characters\"].IsArray())\n\t{\n\t\tSpeakerCount = (int64_t)_Config[\"Characters\"].Size();\n\t\tint64_t SpkIdx = 0;\n\t\tfor (const auto& iterator : _Config[\"Characters\"].GetArray())\n\t\t\tSpeakerName2ID[to_wide_string(iterator.GetString())] = SpkIdx++;\n\t}\n\n\ttry\n\t{\n\t\tsessionBert = new Ort::Session(*env, (_PathDict.at(\"Bert\") + L\"/model.onnx\").c_str(), *session_options);\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow(e.what());\n\t}\n\tif (_waccess((_PathDict.at(\"Bert\") + L\"/Tokenizer.json\").c_str(), 0) != -1)\n\t{\n\t\tTokenizers.insert({ L\"0\" ,_PathDict.at(\"Bert\") + L\"/Tokenizer.json\" });\n\t\tTokenizers[L\"0\"].BondCleaner(Cleaner);\n\t}\n\telse if (sessionBert)\n\t{\n\t\tdelete sessionBert;\n\t\tsessionBert = nullptr;\n\t\tLibDLVoiceCodecThrow(\"Bert Must Have a Tokenizer\");\n\t}\n\n\t_callback = _ProgressCallback;\n\tCustomDurationCallback = _DurationCallback;\n\n\t//LoadModels\n\ttry\n\t{\n\t\tlogger.log(L\"[Info] loading GptSoVits Models\");\n\t\tsessionVits = new Ort::Session(*env, _PathDict.at(\"Vits\").c_str(), *session_options);\n\t\tsessionSSL = new Ort::Session(*env, _PathDict.at(\"SSL\").c_str(), *session_options);\n\t\tsessionEncoder = new Ort::Session(*env, _PathDict.at(\"Encoder\").c_str(), *session_options);\n\t\tsessionDecoder = new Ort::Session(*env, _PathDict.at(\"Decoder\").c_str(), *session_options);\n\t\tsessionFDecoder = new Ort::Session(*env, _PathDict.at(\"FDecoder\").c_str(), *session_options);\n\t\tlogger.log(L\"[Info] GptSoVits Models loaded\");\n\t}\n\tcatch (Ort::Exception& _exception)\n\t{\n\t\tdestory();\n\t\tLibDLVoiceCodecThrow(_exception.what());\n\t}\n\n\tSpeakerCount = 0;\n}\n\nGptSoVits::GptSoVits(const std::map<std::string, std::wstring>& _PathDict,\n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_) :\n\tTextToSpeech(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tload(_PathDict, _Config, _ProgressCallback, _DurationCallback);\n}\n\nstd::wregex NCH_Regex(L\"[^\\\\u4e00-\\\\u9fa5 !@#$%^&*()_+\\\\-=`~,./;'\\\\[\\\\]<>?:\\\"{}|\\\\\\\\。？！，、；：“”‘’『』「」（）〔〕【】─…·—～《》〈〉]+\");\nstd::set ZH_Vowel{L'a', L'e', L'i', L'o', L'u', L'A', L'E', L'I', L'O', L'U'};\nstd::set Byte_Symbol{L',', L'.', L'?', L'/', L'\\\"', L'\\'', L';', L':', L'!', L' ', L'…' };\nstd::unordered_map<std::wstring, int64_t> ToneRepMap{\n\t{ L\"[acc_6]\", 6 }, { L\"[acc_5]\", 5 }, { L\"[acc_4]\", 4 }, { L\"[acc_3]\", 3 }, { L\"[acc_2]\", 2 }, { L\"[acc_1]\", 1 },\n\t{ L\"[acc_-4]\", -4 }, { L\"[acc_-3]\", -3 }, { L\"[acc_-2]\", -2 }, { L\"[acc_-1]\", -1 },\n};\n\nstd::tuple<std::vector<float>, std::vector<int64_t>> GptSoVits::GetBertPhs(const MoeVSProjectSpace::MoeVSTTSSeq& Seq, const MoeVSG2P::Tokenizer& Tokenizer) const\n{\n\tstd::vector<std::wstring> Phonemes;\n\tstd::vector<float> OutBert;\n\n\tif (sessionBert && Seq.LanguageSymbol == \"ZH\")\n\t{\n\t\tstd::vector<size_t> Bert2Ph;\n\t\tstd::vector<std::wstring> BertSeq;\n\t\tstd::vector<int64_t> GlobalTonesSeq;\n\t\tif (Seq.SlicedTokens.empty())\n\t\t{\n\t\t\tstd::wstring TextSeq = MoeVSG2P::NormalizeText(Seq.TextSeq, \"ZH\");\n\t\t\tif (std::regex_search(TextSeq, NCH_Regex))\n\t\t\t\tLibDLVoiceCodecThrow(\"Chinese Sentence ShouldNot Have NonChinese Symbols\");\n\t\t\tPhonemes = MoeVSG2P::GetDefCleaner()->DictReplace(MoeVSG2P::GetDefCleaner()->G2p(TextSeq, Seq.PlaceHolderSymbol, L\"wt\", \"ZH\"), Seq.PlaceHolderSymbol);\n\n\t\t\tstd::vector<int64_t> LocalTonesSeq;\n\t\t\tstd::vector<std::wstring> LocalPhonemeSeq;\n\t\t\tfor (const auto& it : Phonemes)\n\t\t\t{\n\t\t\t\tif (ToneRepMap.find(it) == ToneRepMap.end())\n\t\t\t\t{\n\t\t\t\t\tLocalPhonemeSeq.emplace_back(it);\n\t\t\t\t\tLocalTonesSeq.emplace_back(0);\n\t\t\t\t}\n\t\t\t\telse if (!LocalTonesSeq.empty())\n\t\t\t\t\t*(LocalTonesSeq.end() - 1) = ToneRepMap.at(it);\n\t\t\t}\n\t\t\tif (LocalTonesSeq.size() != LocalPhonemeSeq.size())\n\t\t\t\tLocalTonesSeq.resize(LocalPhonemeSeq.size(), 0);\n\t\t\tPhonemes = std::move(LocalPhonemeSeq);\n\t\t\tGlobalTonesSeq = std::move(LocalTonesSeq);\n\n\t\t\tconst size_t BertSize = TextSeq.length() + 2, PhoneSize = Phonemes.size();\n\n\t\t\tBert2Ph.resize(PhoneSize, 0);\n\t\t\tsize_t startFrame = 1;\n\t\t\tfor (size_t iph = 0; iph < Phonemes.size(); ++iph)\n\t\t\t{\n\t\t\t\tif (startFrame == BertSize)\n\t\t\t\t\tLibDLVoiceCodecThrow(\"AligError\");\n\t\t\t\tBert2Ph[iph] = startFrame;\n\t\t\t\tif (!Phonemes[iph].empty() && ZH_Vowel.find(Phonemes[iph][0]) != ZH_Vowel.end())\n\t\t\t\t\t++startFrame;\n\t\t\t\telse if (Byte_Symbol.find(Phonemes[iph][0]) != Byte_Symbol.end())\n\t\t\t\t\t++startFrame;\n\t\t\t\telse if (Phonemes[iph] == L\"[UNK]\")\n\t\t\t\t\t++startFrame;\n\t\t\t}\n\n\t\t\tBertSeq.resize(BertSize);\n\t\t\tBertSeq[0] = L\"[CLS]\";\n\t\t\tfor (size_t iph = 0; iph < Phonemes.size(); ++iph)\n\t\t\t\tif (BertSeq[Bert2Ph[iph]].empty())\n\t\t\t\t\tBertSeq[Bert2Ph[iph]] = TextSeq[Bert2Ph[iph] - 1];\n\t\t\tBertSeq[BertSeq.size() - 1] = L\"[SEP]\";\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsize_t startFrame = 1;\n\t\t\tfor(const auto& i : Seq.SlicedTokens)\n\t\t\t{\n\t\t\t\tBertSeq.emplace_back(i.Text);\n\t\t\t\tif (i.Text == L\"[CLS]\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (i.Text == L\"[SEP]\")\n\t\t\t\t\tbreak;\n\t\t\t\tif(i.Phonemes.empty())\n\t\t\t\t{\n\t\t\t\t\tif(i.Text.empty())\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tauto TmpPhonemes = MoeVSG2P::GetDefCleaner()->DictReplace(MoeVSG2P::GetDefCleaner()->G2p(i.Text, Seq.PlaceHolderSymbol, L\"wt\", \"ZH\"), Seq.PlaceHolderSymbol);\n\n\t\t\t\t\tstd::vector<int64_t> LocalTonesSeq;\n\t\t\t\t\tstd::vector<std::wstring> LocalPhonemeSeq;\n\t\t\t\t\tfor (const auto& it : TmpPhonemes)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (ToneRepMap.find(it) == ToneRepMap.end())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLocalPhonemeSeq.emplace_back(it);\n\t\t\t\t\t\t\tLocalTonesSeq.emplace_back(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!LocalTonesSeq.empty())\n\t\t\t\t\t\t\t*(LocalTonesSeq.end() - 1) = ToneRepMap.at(it);\n\t\t\t\t\t}\n\t\t\t\t\tif (LocalTonesSeq.size() != LocalPhonemeSeq.size())\n\t\t\t\t\t\tLocalTonesSeq.resize(LocalPhonemeSeq.size(), 0);\n\t\t\t\t\tfor (auto& ph : LocalPhonemeSeq)\n\t\t\t\t\t{\n\t\t\t\t\t\tPhonemes.emplace_back(std::move(ph));\n\t\t\t\t\t\tBert2Ph.emplace_back(startFrame);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const auto& tones : LocalTonesSeq)\n\t\t\t\t\t\tGlobalTonesSeq.emplace_back(tones);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfor (const auto& ph : i.Phonemes)\n\t\t\t\t\t{\n\t\t\t\t\t\tPhonemes.emplace_back(ph);\n\t\t\t\t\t\tBert2Ph.emplace_back(startFrame);\n\t\t\t\t\t}\n\t\t\t\t\tauto LocalTonesSeq = i.Tones;\n\t\t\t\t\tLocalTonesSeq.resize(i.Phonemes.size(), 0);\n\t\t\t\t\tfor (const auto& tones : LocalTonesSeq)\n\t\t\t\t\t\tGlobalTonesSeq.emplace_back(tones);\n\t\t\t\t}\n\t\t\t\t++startFrame;\n\t\t\t}\n\t\t}\n\n\t\tfor (size_t i = 0; i < Phonemes.size(); ++i)\n\t\t{\n\t\t\tif (GlobalTonesSeq[i] == 5)\n\t\t\t\tcontinue;\n\t\t\tauto NewPh = Phonemes[i] + std::to_wstring(GlobalTonesSeq[i]);\n\t\t\tif (GlobalTonesSeq[i] != 0 && Symbols.find(NewPh) != Symbols.end())\n\t\t\t\tPhonemes[i] = std::move(NewPh);\n\t\t}\n\n\t\t//PromptSeq To Bert Features\n\t\tauto input_ids = Tokenizer(BertSeq);\n\t\tstd::vector<int64_t> attention_mask(input_ids.size(), 1), token_type_ids(input_ids.size(), 0);\n\t\tint64_t AttentionShape[2] = { 1, (int64_t)input_ids.size() };\n\t\tstd::vector<Ort::Value> AttentionInput, AttentionOutput;\n\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, input_ids.data(), input_ids.size(), AttentionShape, 2));\n\t\tif (sessionBert->GetInputCount() == 3)\n\t\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(*memory_info, attention_mask.data(), attention_mask.size(), AttentionShape, 2));\n\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, token_type_ids.data(), token_type_ids.size(), AttentionShape, 2));\n\t\tlogger.log(\"[Inference] Infer Bert\");\n\t\ttry\n\t\t{\n\t\t\tif (sessionBert->GetInputCount() == 3)\n\t\t\t{\n\t\t\t\tAttentionOutput = sessionBert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tBertInputNames.data(),\n\t\t\t\t\tAttentionInput.data(),\n\t\t\t\t\t3,\n\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t1);\n\t\t\t}\n\t\t\telse if (sessionBert->GetInputCount() == 2)\n\t\t\t{\n\t\t\t\tAttentionOutput = sessionBert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tBertInputNames2.data(),\n\t\t\t\t\tAttentionInput.data(),\n\t\t\t\t\t2,\n\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tAttentionOutput = sessionBert->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tBertInputNames3.data(),\n\t\t\t\t\tAttentionInput.data(),\n\t\t\t\t\t1,\n\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t1);\n\t\t\t}\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Bert\\n\") + e.what()))\n\t\t}\n\t\tstd::vector<size_t> BertAligSeq;\n\t\tif (AddBlank)\n\t\t\tBertAligSeq.emplace_back(0);\n\t\tfor(auto i : Bert2Ph)\n\t\t{\n\t\t\tBertAligSeq.emplace_back(i);\n\t\t\tif (AddBlank)\n\t\t\t\tBertAligSeq.emplace_back(i);\n\t\t}\n\t\tconst auto AttnData = AttentionOutput[0].GetTensorData<float>();\n\t\tfor (size_t IndexOfSrcVector = 0; IndexOfSrcVector < BertAligSeq.size(); ++IndexOfSrcVector)\n\t\t\tOutBert.insert(OutBert.end(), AttnData + BertAligSeq[IndexOfSrcVector] * 1024, AttnData + (BertAligSeq[IndexOfSrcVector] + 1) * 1024);\n\t}\n\telse\n\t{\n\t\tif (Seq.SlicedTokens.empty())\n\t\t{\n\t\t\tif (Seq.TextSeq.empty())\n\t\t\t\treturn {};\n\t\t\tPhonemes = MoeVSG2P::GetDefCleaner()->DictReplace(MoeVSG2P::GetDefCleaner()->G2p(Seq.TextSeq, Seq.PlaceHolderSymbol, Seq.AdditionalInfo, Seq.LanguageSymbol), Seq.PlaceHolderSymbol);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (const auto& i : Seq.SlicedTokens)\n\t\t\t{\n\t\t\t\tif (i.Text == L\"[CLS]\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (i.Text == L\"[SEP]\")\n\t\t\t\t\tbreak;\n\t\t\t\tauto TmpPhonemes = i.Phonemes;\n\t\t\t\tif (TmpPhonemes.empty())\n\t\t\t\t{\n\t\t\t\t\tif (i.Text.empty())\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tTmpPhonemes = MoeVSG2P::GetDefCleaner()->DictReplace(MoeVSG2P::GetDefCleaner()->G2p(i.Text, Seq.PlaceHolderSymbol, Seq.AdditionalInfo, Seq.LanguageSymbol), Seq.PlaceHolderSymbol);\n\t\t\t\t}\n\t\t\t\tfor (auto& ph : TmpPhonemes)\n\t\t\t\t\tPhonemes.emplace_back(ph);\n\t\t\t}\n\t\t}\n\t}\n\n\t//Phoneme To InputSeq\n\tstd::vector<int64_t> OutPhonemes;\n\tif (AddBlank)\n\t\tOutPhonemes.emplace_back(0);\n\tfor (const auto& i : Phonemes)\n\t{\n\t\tif (Symbols.find(i) != Symbols.end())\n\t\t\tOutPhonemes.emplace_back(Symbols.at(i));\n\t\telse\n\t\t\tOutPhonemes.emplace_back(0);\n\t\tif(AddBlank)\n\t\t\tOutPhonemes.emplace_back(0);\n\t}\n\n\tif (OutBert.empty())\n\t\tOutBert = std::vector(OutPhonemes.size() * 1024, 0.f);\n\t//OutBert = std::vector(OutPhonemes.size() * 1024, 0.f);\n\n\treturn { std::move(OutBert), std::move(OutPhonemes) };\n}\n\nstd::vector<std::vector<int16_t>> GptSoVits::Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const\n{\n\tif (_Input.size() < 3 || _Input[0].TextSeq.empty() || _Input[1].TextSeq.empty())\n\t\tLibDLVoiceCodecThrow(\"Input[0] Should Be Reference Text, Input[1] Should Be Reference Path, Input[2:n] Should Be TTS Text\");\n\n\tconst auto RefAudio = InferTools::Wav(_Input[1].TextSeq.c_str());\n\tif (RefAudio.getHeader().bitsPerSample != 16 || RefAudio.getHeader().NumOfChan != 1)\n\t\tLibDLVoiceCodecThrow(\"RefAudio Should Be signed-int16 and mono\");\n\n\tstd::vector<std::vector<int16_t>> PCM;\n\tPCM.reserve(_Input.size());\n\tstd::vector<std::vector<int16_t>> _Audio(1);\n\tlogger.log(\"[Inference] GptSoVits Inference Begin\");\n\tsize_t proc = 0;\n\tconst size_t max_proc = _Input.size() + 2;\n\t_callback(proc, max_proc);\n\n\tconst auto& Tokenizer = GetTokenizer(L\"0\");\n\n\tconst auto RefSize = RefAudio.getHeader().Subchunk2Size / 2;\n\tconst auto RefData = (const int16_t*)RefAudio.getData();\n\n\tstd::vector<float> RefAudioSrc(RefSize);\n\tfor (size_t i = 0; i < RefSize; ++i)\n\t\tRefAudioSrc[i] = float(*(RefData + i)) / 32768.f;\n\tauto RefAudio16K = InferTools::InterpResample(RefAudioSrc, (int)RefAudio.getHeader().SamplesPerSec, 16000, 1.f);\n\tauto RefAudioSr = InferTools::InterpResample(RefAudioSrc, (int)RefAudio.getHeader().SamplesPerSec, _samplingRate, 1.f);\n\n\t//Reference SSL\n\tlogger.log(\"[Inference] Infer SSL\");\n\tconst int64_t SSLShape[] = { 1, (int64_t)RefAudio16K.size() };\n\tstd::vector<Ort::Value> SSLInput, SSLOutPut;\n\tSSLInput.emplace_back(Ort::Value::CreateTensor(*memory_info, RefAudio16K.data(), RefAudio16K.size(),\n\t\tSSLShape, 2));\n\ttry\n\t{\n\t\tSSLOutPut = sessionSSL->Run(Ort::RunOptions{ nullptr },\n\t\t\tSSLInputNames.data(),\n\t\t\tSSLInput.data(),\n\t\t\tSSLInputNames.size(),\n\t\t\tSSLOutputNames.data(),\n\t\t\tSSLOutputNames.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: SSL\\n\") + e.what()))\n\t}\n\t_callback(++proc, max_proc);\n\n\tlogger.log(\"[Inference] Infer Ref Data\");\n\tauto RefDat = GetBertPhs(_Input[0], Tokenizer);\n\tstd::vector<float> RefBert = std::move(std::get<0>(RefDat));\n\tstd::vector<int64_t> RefSeq = std::move(std::get<1>(RefDat));\n\tint64_t RefSeqShape[] = { 1, (int64_t)RefSeq.size() };\n\tint64_t RefBertShape[] = { RefSeqShape[1], 1024 };\n\tint64_t TempData[] = { 1 };\n\t_callback(++proc, max_proc);\n\n\tstd::vector<Ort::Value> EncoderInpTensor;\n\tEncoderInpTensor.emplace_back(Ort::Value::CreateTensor(*memory_info, RefSeq.data(), RefSeq.size(),\n\t\tRefSeqShape, 2));\n\tEncoderInpTensor.emplace_back(Ort::Value::CreateTensor(*memory_info, TempData, 1,\n\t\tTempData, 1));\n\tEncoderInpTensor.emplace_back(Ort::Value::CreateTensor(*memory_info, RefBert.data(), RefBert.size(),\n\t\tRefBertShape, 2));\n\tEncoderInpTensor.emplace_back(Ort::Value::CreateTensor(*memory_info, TempData, 1,\n\t\tTempData, 1));\n\tEncoderInpTensor.emplace_back(std::move(SSLOutPut[0]));\n\n\tfor (size_t i = 2; i < _Input.size(); ++i)\n\t{\n\t\tconst auto& InferSeq = _Input[i];\n\t\tauto SeqAndBert = GetBertPhs(InferSeq, Tokenizer);\n\t\tstd::vector<float> InputBert = std::move(std::get<0>(SeqAndBert));\n\t\tstd::vector<int64_t> InputSeq = std::move(std::get<1>(SeqAndBert));\n\t\tint64_t SeqShape[] = { 1, (int64_t)InputSeq.size() };\n\t\tint64_t BertShape[] = { SeqShape[1], 1024 };\n\t\tEncoderInpTensor[1] = Ort::Value::CreateTensor(*memory_info, InputSeq.data(), InputSeq.size(), SeqShape, 2);\n\t\tEncoderInpTensor[3] = Ort::Value::CreateTensor(*memory_info, InputBert.data(), InputBert.size(), BertShape, 2);\n\t\tstd::vector<Ort::Value> EncoderOutput, FDecoderOutput, DecoderOutput;\n\t\ttry\n\t\t{\n\t\t\tEncoderOutput = sessionEncoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tEncoderInputNames.data(),\n\t\t\t\tEncoderInpTensor.data(),\n\t\t\t\tEncoderInputNames.size(),\n\t\t\t\tEncoderOutputNames.data(),\n\t\t\t\tEncoderOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Encoder\\n\") + e.what()))\n\t\t}\n\n\t\ttry\n\t\t{\n\t\t\tFDecoderOutput = sessionFDecoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tFDecoderInputNames.data(),\n\t\t\t\tEncoderOutput.data(),\n\t\t\t\tFDecoderInputNames.size(),\n\t\t\t\tFDecoderOutputNames.data(),\n\t\t\t\tFDecoderOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: FDecoder\\n\") + e.what()))\n\t\t}\n\n\t\tint64_t idx = 1;\n\t\tfor (; idx < InferSeq.MaxDecodeStep; ++idx)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tDecoderOutput = sessionDecoder->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tDecoderInputNames.data(),\n\t\t\t\t\tFDecoderOutput.data(),\n\t\t\t\t\tDecoderInputNames.size(),\n\t\t\t\t\tDecoderOutputNames.data(),\n\t\t\t\t\tDecoderOutputNames.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Decoder\\n\") + e.what()))\n\t\t\t}\n\n\t\t\tconst auto Logit = DecoderOutput[4].GetTensorData<float>();\n\t\t\tint64_t MaxIdx = 0;\n\t\t\tfor (int64_t midx = 0; midx < EOSId + 1; ++midx)\n\t\t\t\tif (Logit[midx] > Logit[MaxIdx])\n\t\t\t\t\tMaxIdx = midx;\n\t\t\tif (MaxIdx == EOSId)\n\t\t\t\tbreak;\n\t\t\tif (*DecoderOutput[5].GetTensorData<int32_t>() == EOSId)\n\t\t\t\tbreak;\n\n\t\t\tFDecoderOutput[0] = std::move(DecoderOutput[0]);\n\t\t\tFDecoderOutput[1] = std::move(DecoderOutput[1]);\n\t\t\tFDecoderOutput[2] = std::move(DecoderOutput[2]);\n\t\t\tFDecoderOutput[3] = std::move(DecoderOutput[3]);\n\t\t}\n\n\t\tauto PredSemanticPtr = DecoderOutput[0].GetTensorData<int64_t>();\n\t\tauto PredSemanticShape = DecoderOutput[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tPredSemanticShape.insert(PredSemanticShape.begin(), 1);\n\t\tstd::vector PredSemantic(PredSemanticPtr + max((PredSemanticShape[2] - idx - 1), 0), PredSemanticPtr + PredSemanticShape[2]);\n\t\tif (PredSemantic[PredSemantic.size() - 1] == EOSId)\n\t\t\tPredSemantic[PredSemantic.size() - 1] = 0;\n\t\tPredSemanticShape[2] = int64_t(PredSemantic.size());\n\t\tlogger.log(L\"Size Of PredSemantic: \" + std::to_wstring(PredSemantic.size()));\n\n\t\tstd::vector<Ort::Value> VitsTensors;\n\t\tVitsTensors.emplace_back(std::move(EncoderInpTensor[1]));\n\t\tVitsTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, PredSemantic.data(), PredSemantic.size(), PredSemanticShape.data(), PredSemanticShape.size()));\n\t\tint64_t AudioShape[] = { 1, (int64_t)RefAudioSr.size() };\n\t\tVitsTensors.emplace_back(Ort::Value::CreateTensor(*memory_info, RefAudioSr.data(), RefAudioSr.size(), AudioShape, 2));\n\n\t\ttry\n\t\t{\n\t\t\tVitsTensors = sessionVits->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tVitsInputNames.data(),\n\t\t\t\tVitsTensors.data(),\n\t\t\t\tVitsInputNames.size(),\n\t\t\t\tVitsOutputNames.data(),\n\t\t\t\tVitsOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: SoVits\\n\") + e.what()))\n\t\t}\n\n\t\tif (!_Audio[0].empty())\n\t\t{\n\t\t\tif (InferSeq.RestTime < 0.f)\n\t\t\t{\n\t\t\t\t_Audio[0].insert(_Audio[0].end(), size_t(_samplingRate), 0);\n\t\t\t\tPCM.emplace_back(std::move(_Audio[0]));\n\t\t\t\t_Audio[0] = std::vector<int16_t>();\n\t\t\t}\n\t\t\telse\n\t\t\t\t_Audio[0].insert(_Audio[0].end(), size_t(InferSeq.RestTime * float(_samplingRate)), 0);\n\t\t}\n\t\tconst auto shapeOut = VitsTensors[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\tconst auto outData = VitsTensors[0].GetTensorData<float>();\n\t\tfor (int bbb = 0; bbb < shapeOut[0]; bbb++)\n\t\t\t_Audio[0].emplace_back(static_cast<int16_t>(outData[bbb] * 32768.0f));\n\n\t\t_callback(++proc, max_proc);\n\t}\n\tif (!_Audio[0].empty())\n\t{\n\t\t_Audio[0].insert(_Audio[0].end(), size_t(_samplingRate), 0);\n\t\tPCM.emplace_back(std::move(_Audio[0]));\n\t}\n\n\treturn PCM;\n}\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libtts/Modules/Models/src/ModelBase.cpp",
    "content": "﻿#include \"../header/ModelBase.hpp\"\n#include <commdlg.h>\n#include <filesystem>\n#include \"../EnvManager.hpp\"\nMoeVoiceStudioCoreHeader\n\nMoeVoiceStudioModule::MoeVoiceStudioModule(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_)\n{\n\tmoevsenv::GetGlobalMoeVSEnv().Load(ThreadCount_, DeviceID_, (unsigned)ExecutionProvider_);\n\t_cur_execution_provider = ExecutionProvider_;\n\tenv = moevsenv::GetGlobalMoeVSEnv().GetEnv();\n\tmemory_info = moevsenv::GetGlobalMoeVSEnv().GetMemoryInfo();\n\tsession_options = moevsenv::GetGlobalMoeVSEnv().GetSessionOptions();\n}\n\nMoeVoiceStudioModule::~MoeVoiceStudioModule()\n{\n\tenv = nullptr;\n\tmemory_info = nullptr;\n\tsession_options = nullptr;\n}\n\nstd::vector<std::wstring> MoeVoiceStudioModule::CutLens(const std::wstring& input)\n{\n\tstd::vector<std::wstring> _Lens;\n\tstd::wstring _tmpLen;\n\tfor (const auto& chari : input)\n\t{\n\t\tif ((chari == L'\\n') || (chari == L'\\r')) {\n\t\t\tif (!_tmpLen.empty())\n\t\t\t{\n\t\t\t\t_Lens.push_back(_tmpLen);\n\t\t\t\t_tmpLen = L\"\";\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t_tmpLen += chari;\n\t\t}\n\t}\n\treturn _Lens;\n}\n\nstd::vector<std::wstring> MoeVoiceStudioModule::GetOpenFileNameMoeVS()\n{\n\tconstexpr long MaxPath = 8000;\n\tstd::vector<std::wstring> OFNLIST;\n#ifdef WIN32\n\tstd::vector<TCHAR> szFileName(MaxPath);\n\tstd::vector<TCHAR> szTitleName(MaxPath);\n\tOPENFILENAME ofn;\n\tZeroMemory(&ofn, sizeof(ofn));\n\tofn.lpstrFile = szFileName.data();\n\tofn.nMaxFile = MaxPath;\n\tofn.lpstrFileTitle = szTitleName.data();\n\tofn.nMaxFileTitle = MaxPath;\n\tofn.lStructSize = sizeof(OPENFILENAME);\n\tofn.hwndOwner = nullptr;\n\tconstexpr TCHAR szFilter[] = TEXT(\"Audio (*.wav;*.mp3;*.ogg;*.flac;*.aac)\\0*.wav;*.mp3;*.ogg;*.flac;*.aac\\0\");\n\tofn.lpstrFilter = szFilter;\n\tofn.lpstrTitle = nullptr;\n\tofn.lpstrDefExt = TEXT(\"wav\");\n\tofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER;\n\tif (GetOpenFileName(&ofn))\n\t{\n\t\tauto filePtr = szFileName.data();\n\t\tstd::wstring preFix = filePtr;\n\t\tfilePtr += preFix.length() + 1;\n\t\tif (!*filePtr)\n\t\t\tOFNLIST.emplace_back(preFix);\n\t\telse\n\t\t{\n\t\t\tpreFix += L'\\\\';\n\t\t\twhile (*filePtr != 0)\n\t\t\t{\n\t\t\t\tstd::wstring thisPath(filePtr);\n\t\t\t\tOFNLIST.emplace_back(preFix + thisPath);\n\t\t\t\tfilePtr += thisPath.length() + 1;\n\t\t\t}\n\t\t}\n\t}\n\tif(OFNLIST.empty())\n\t\tLibDLVoiceCodecThrow(\"Please Select Files\")\n\treturn OFNLIST;\n#else\n#endif\n}\n\nstd::vector<std::wstring> MoeVoiceStudioModule::Inference(std::wstring& _Datas,\n\tconst MoeVSProjectSpace::MoeVSParams& _InferParams,\n\tconst InferTools::SlicerSettings& _SlicerSettings) const\n{\n\tMoeVSNotImplementedError\n}\n\n/*\nint OnnxModule::InsertMessageToEmptyEditBox(std::wstring& _inputLens)\n{\n#ifdef WIN32\n\tstd::vector<TCHAR> szFileName(MaxPath);\n\tstd::vector<TCHAR> szTitleName(MaxPath);\n\tOPENFILENAME ofn;\n\tZeroMemory(&ofn, sizeof(ofn));\n\tofn.lpstrFile = szFileName.data();\n\tofn.nMaxFile = MaxPath;\n\tofn.lpstrFileTitle = szTitleName.data();\n\tofn.nMaxFileTitle = MaxPath;\n\tofn.lStructSize = sizeof(OPENFILENAME);\n\tofn.hwndOwner = nullptr;\n\n\tconstexpr TCHAR szFilter[] = TEXT(\"Audio (*.wav;*.mp3;*.ogg;*.flac;*.aac)\\0*.wav;*.mp3;*.ogg;*.flac;*.aac\\0\");\n\tofn.lpstrFilter = szFilter;\n\tofn.lpstrTitle = nullptr;\n\tofn.lpstrDefExt = TEXT(\"wav\");\n\tofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER;\n\tif (GetOpenFileName(&ofn))\n\t{\n\t\tauto filePtr = szFileName.data();\n\t\tstd::wstring preFix = filePtr;\n\t\tfilePtr += preFix.length() + 1;\n\t\tif (!*filePtr)\n\t\t\t_inputLens = preFix;\n\t\telse\n\t\t{\n\t\t\tpreFix += L'\\\\';\n\t\t\twhile (*filePtr != 0)\n\t\t\t{\n\t\t\t\tstd::wstring thisPath(filePtr);\n\t\t\t\t_inputLens += preFix + thisPath + L'\\n';\n\t\t\t\tfilePtr += thisPath.length() + 1;\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\treturn -2;\n\treturn 0;\n#else\n#endif\n}\n */\n\n/*\nvoid OnnxModule::ChangeDevice(Device _dev)\n{\n\tif (_dev == device_)\n\t\treturn;\n\tdevice_ = _dev;\n\tdelete session_options;\n\tdelete env;\n\tdelete memory_info;\n\tenv = nullptr;\n\tsession_options = nullptr;\n\tmemory_info = nullptr;\n\tswitch (_dev)\n\t{\n\t\tcase Device::CUDA:\n\t\t{\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\t\t\tbool ret = true;\n\t\t\tfor (const auto& it : AvailableProviders)\n\t\t\t\tif (it.find(\"CUDA\") != std::string::npos)\n\t\t\t\t\tret = false;\n\t\t\tif (ret)\n\t\t\t\tLibDLVoiceCodecThrow(\"CUDA Provider Not Found\");\n\t\t\tOrtCUDAProviderOptions cuda_option;\n\t\t\tcuda_option.device_id = int(__MoeVSGPUID);\n\t\t\tsession_options = new Ort::SessionOptions;\n\t\t\tenv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\n\t\t\tsession_options->AppendExecutionProvider_CUDA(cuda_option);\n\t\t\tsession_options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\n\t\t\tsession_options->SetIntraOpNumThreads(1);\n\t\t\tmemory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n\t\t\tbreak;\n\t\t}\n#ifdef MOEVSDMLPROVIDER\n\t\tcase Device::DML:\n\t\t{\n\t\t\tconst auto AvailableProviders = Ort::GetAvailableProviders();\n\t\t\tstd::string ret;\n\t\t\tfor (const auto& it : AvailableProviders)\n\t\t\t\tif (it.find(\"Dml\") != std::string::npos)\n\t\t\t\t\tret = it;\n\t\t\tif (ret.empty())\n\t\t\t\tLibDLVoiceCodecThrow(\"DML Provider Not Found\");\n\t\t\tconst OrtApi& ortApi = Ort::GetApi();\n\t\t\tconst OrtDmlApi* ortDmlApi = nullptr;\n\t\t\tortApi.GetExecutionProviderApi(\"DML\", ORT_API_VERSION, reinterpret_cast<const void**>(&ortDmlApi));\n\n\t\t\tconst Ort::ThreadingOptions threadingOptions;\n\t\t\tenv = new Ort::Env(threadingOptions, ORT_LOGGING_LEVEL_VERBOSE, \"\");\n\t\t\tenv->DisableTelemetryEvents();\n\t\t\tsession_options = new Ort::SessionOptions;\n\t\t\tortDmlApi->SessionOptionsAppendExecutionProvider_DML(*session_options, int(__MoeVSGPUID));\n\t\t\tsession_options->SetGraphOptimizationLevel(ORT_ENABLE_BASIC);\n\t\t\tsession_options->DisablePerSessionThreads();\n\t\t\tsession_options->SetExecutionMode(ORT_SEQUENTIAL);\n\t\t\tsession_options->DisableMemPattern();\n\t\t\tmemory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemType::OrtMemTypeCPU));\n\t\t\tbreak;\n\t\t}\n#endif\n\t\tdefault:\n\t\t{\n\t\t\tsession_options = new Ort::SessionOptions;\n\t\t\tenv = new Ort::Env(ORT_LOGGING_LEVEL_WARNING, \"OnnxModel\");\n\t\t\tsession_options->SetIntraOpNumThreads(static_cast<int>(__MoeVSNumThreads));\n\t\t\tsession_options->SetGraphOptimizationLevel(ORT_ENABLE_ALL);\n\t\t\tmemory_info = new Ort::MemoryInfo(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault));\n\t\t\tbreak;\n\t\t}\n\t}\n}\n */\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libtts/Modules/Models/src/MoeVSProject.cpp",
    "content": "﻿#include \"../header/MoeVSProject.hpp\"\n#include <regex>\n#include \"../../InferTools/inferTools.hpp\"\n\nnamespace MoeVSProjectSpace\n{\n\tstd::wregex _REP_REG_1(L\"\\\\\\\\\"), _REP_REG_2(L\"\\\\\\\"\"), _REP_REG_3(L\"\\r\"),\n\t\t_REP_REG_4(L\"\\n\"), _REP_REG_5(L\"\\t\"), _REP_REG_6(L\"\\b\"), _REP_REG_7(L\"\\f\");\n\n\tstd::wstring ReplaceSpecialTokens(const std::wstring& input)\n\t{\n\t\tauto output = input;\n\t\toutput = std::regex_replace(output, _REP_REG_1, L\"\\\\\\\\\");\n\t\toutput = std::regex_replace(output, _REP_REG_2, L\"\\\\\\\"\");\n\t\toutput = std::regex_replace(output, _REP_REG_3, L\"\\\\r\");\n\t\toutput = std::regex_replace(output, _REP_REG_4, L\"\\\\b\");\n\t\toutput = std::regex_replace(output, _REP_REG_5, L\"\\\\t\");\n\t\toutput = std::regex_replace(output, _REP_REG_6, L\"\\\\b\");\n\t\toutput = std::regex_replace(output, _REP_REG_7, L\"\\\\f\");\n\t\treturn output;\n\t}\n\n\tstd::vector<std::wstring> ReplaceSpecialTokens(const std::vector<std::wstring>& input)\n\t{\n\t\tstd::vector<std::wstring> output;\n\t\toutput.reserve(input.size());\n\t\tfor (const auto& i : input)\n\t\t\toutput.emplace_back(ReplaceSpecialTokens(i));\n\t\treturn output;\n\t}\n\n\tstd::vector<std::string> ReplaceSpecialTokens(const std::vector<std::string>& input)\n\t{\n\t\tstd::vector<std::string> output;\n\t\toutput.reserve(input.size());\n\t\tfor (const auto& i : input)\n\t\t\toutput.emplace_back(to_byte_string(ReplaceSpecialTokens(to_wide_string(i))));\n\t\treturn output;\n\t}\n\n\tstd::wstring MoeVSTTSToken::Serialization() const\n\t{\n\t\tif (Text.empty())\n\t\t\treturn L\"\\t\\t\\t{ }\";\n\t\tstd::wstring rtn = L\"\\t\\t\\t{\\n\";\n\t\trtn += L\"\\t\\t\\t\\t\\\"Text\\\": \\\"\" + ReplaceSpecialTokens(Text) + L\"\\\",\\n\";\n\t\trtn += L\"\\t\\t\\t\\t\\\"Phonemes\\\": \" + wstring_vector_to_string(ReplaceSpecialTokens(Phonemes)) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\t\\t\\\"Tones\\\": \" + vector_to_string(Tones) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\t\\t\\\"Durations\\\": \" + vector_to_string(Durations) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\t\\t\\\"Language\\\": \" + string_vector_to_string(ReplaceSpecialTokens(Language)) + L\"\\n\\t\\t\\t}\";\n\t\treturn rtn;\n\t}\n\n\tMoeVSTTSToken::MoeVSTTSToken(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams)\n\t{\n\t\tif (_JsonDocument.HasMember(\"Text\") && _JsonDocument[\"Text\"].IsString() && !_JsonDocument[\"Text\"].Empty())\n\t\t\tText = to_wide_string(_JsonDocument[\"Text\"].GetString());\n\t\telse\n\t\t\tLibDLVoiceCodecThrow(\"Field \\\"Text\\\" Should Not Be Empty\")\n\n\t\tif (_JsonDocument.HasMember(\"Phonemes\") && _JsonDocument[\"Phonemes\"].IsArray())\n\t\t\tfor (const auto& j : _JsonDocument[\"Phonemes\"].GetArray())\n\t\t\t\tPhonemes.emplace_back(j.IsString() ? to_wide_string(j.GetString()) : L\"[UNK]\");\n\n\t\tif (_JsonDocument.HasMember(\"Tones\") && _JsonDocument[\"Tones\"].IsArray())\n\t\t\tfor (const auto& j : _JsonDocument[\"Tones\"].GetArray())\n\t\t\t\tTones.emplace_back(j.IsInt() ? j.GetInt() : 0);\n\n\t\tif (_JsonDocument.HasMember(\"Durations\") && _JsonDocument[\"Durations\"].IsArray())\n\t\t\tfor (const auto& j : _JsonDocument[\"Durations\"].GetArray())\n\t\t\t\tDurations.emplace_back(j.IsInt() ? j.GetInt() : 0);\n\n\t\tif (_JsonDocument.HasMember(\"Language\") && _JsonDocument[\"Language\"].IsArray())\n\t\t{\n\t\t\tconst auto LanguageArr = _JsonDocument[\"Language\"].GetArray();\n\t\t\tif (!LanguageArr.empty() && LanguageArr[0].IsString())\n\t\t\t\tfor (const auto& j : LanguageArr)\n\t\t\t\t\tLanguage.emplace_back(j.GetString());\n\t\t}\n\t}\n\n\tstd::wstring MoeVSTTSSeq::Serialization() const\n\t{\n\t\tif (TextSeq.empty())\n\t\t\treturn L\"\";\n\t\tstd::wstring rtn = L\"\\t{\\n\";\n\t\trtn += L\"\\t\\t\\\"TextSeq\\\": \\\"\" + ReplaceSpecialTokens(TextSeq) + L\"\\\",\\n\";\n\t\trtn += L\"\\t\\t\\\"SlicedTokens\\\": [\\n\";\n\t\tfor(const auto& iter : SlicedTokens)\n\t\t\trtn += iter.Serialization() + L\",\\n\";\n\t\tif (!SlicedTokens.empty())\n\t\t\trtn.erase(rtn.end() - 2);\n\t\trtn += L\"\\t\\t],\\n\";\n\t\trtn += L\"\\t\\t\\\"SpeakerMix\\\": \" + vector_to_string(SpeakerMix) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"EmotionPrompt\\\": \" + wstring_vector_to_string(ReplaceSpecialTokens(EmotionPrompt)) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"NoiseScale\\\": \" + std::to_wstring(NoiseScale) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"LengthScale\\\": \" + std::to_wstring(LengthScale) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"DurationPredictorNoiseScale\\\": \" + std::to_wstring(DurationPredictorNoiseScale) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"FactorDpSdp\\\": \" + std::to_wstring(FactorDpSdp) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"GateThreshold\\\": \" + std::to_wstring(GateThreshold) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"MaxDecodeStep\\\": \" + std::to_wstring(MaxDecodeStep) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"Seed\\\": \" + std::to_wstring(Seed) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"SpeakerName\\\": \\\"\" + ReplaceSpecialTokens(SpeakerName) + L\"\\\",\\n\";\n\t\trtn += L\"\\t\\t\\\"RestTime\\\": \" + std::to_wstring(RestTime) + L\",\\n\";\n\t\trtn += L\"\\t\\t\\\"PlaceHolderSymbol\\\": \\\"\" + ReplaceSpecialTokens(PlaceHolderSymbol) + L\"\\\",\\n\";\n\t\trtn += L\"\\t\\t\\\"LanguageSymbol\\\": \\\"\" + ReplaceSpecialTokens(to_wide_string(LanguageSymbol)) + L\"\\\",\\n\";\n\t\trtn += L\"\\t\\t\\\"G2PAdditionalInfo\\\": \\\"\" + ReplaceSpecialTokens(AdditionalInfo) + L\"\\\"\\n\\t}\";\n\t\treturn rtn;\n\t}\n\n\tMoeVSTTSSeq::MoeVSTTSSeq(const MJsonValue& _JsonDocument, const MoeVSParams& _InitParams)\n\t{\n\t\tif (_JsonDocument.HasMember(\"LanguageSymbol\") && _JsonDocument[\"LanguageSymbol\"].IsString() && !_JsonDocument[\"LanguageSymbol\"].Empty())\n\t\t\tLanguageSymbol = _JsonDocument[\"LanguageSymbol\"].GetString();\n\t\telse\n\t\t\tLanguageSymbol = _InitParams.LanguageSymbol;\n\n\t\tif (_JsonDocument.HasMember(\"G2PAdditionalInfo\") && _JsonDocument[\"G2PAdditionalInfo\"].IsString() && !_JsonDocument[\"G2PAdditionalInfo\"].Empty())\n\t\t\tAdditionalInfo = to_wide_string(_JsonDocument[\"G2PAdditionalInfo\"].GetString());\n\t\telse\n\t\t\tAdditionalInfo = _InitParams.AdditionalInfo;\n\n\t\tif (_JsonDocument.HasMember(\"PlaceHolderSymbol\") && _JsonDocument[\"PlaceHolderSymbol\"].IsString() && !_JsonDocument[\"PlaceHolderSymbol\"].Empty())\n\t\t\tPlaceHolderSymbol = to_wide_string(_JsonDocument[\"PlaceHolderSymbol\"].GetString());\n\t\telse\n\t\t\tPlaceHolderSymbol = _InitParams.PlaceHolderSymbol;\n\n\t\tif (_JsonDocument.HasMember(\"TextSeq\") && _JsonDocument[\"TextSeq\"].IsString() && !_JsonDocument[\"TextSeq\"].Empty())\n\t\t\tTextSeq = to_wide_string(_JsonDocument[\"TextSeq\"].GetString());\n\t\telse\n\t\t\tLibDLVoiceCodecThrow(\"Field \\\"TextSeq\\\" Should Not Be Empty\")\n\n\t\tif (_JsonDocument.HasMember(\"SlicedTokens\") && _JsonDocument[\"SlicedTokens\"].IsArray())\n\t\t{\n\t\t\tconst auto TokensArrayObject = _JsonDocument[\"SlicedTokens\"].GetArray();\n\t\t\tfor (const auto& iter : TokensArrayObject)\n\t\t\t\tSlicedTokens.emplace_back(iter, _InitParams);\n\t\t}\n\n\t\tif (_JsonDocument.HasMember(\"SpeakerMix\") && _JsonDocument[\"SpeakerMix\"].IsArray())\n\t\t\tfor (const auto& j : _JsonDocument[\"SpeakerMix\"].GetArray())\n\t\t\t\tSpeakerMix.emplace_back(j.IsFloat() ? j.GetFloat() : 0.f);\n\t\telse\n\t\t\tSpeakerMix = _InitParams.SpeakerMix;\n\t\tif (_JsonDocument.HasMember(\"EmotionPrompt\") && _JsonDocument[\"EmotionPrompt\"].IsArray())\n\t\t\tfor (const auto& j : _JsonDocument[\"EmotionPrompt\"].GetArray())\n\t\t\t\tEmotionPrompt.emplace_back(j.IsString() ? to_wide_string(j.GetString()) : std::wstring());\n\t\telse\n\t\t\tEmotionPrompt = _InitParams.EmotionPrompt;\n\t\tif (_JsonDocument.HasMember(\"NoiseScale\") && _JsonDocument[\"NoiseScale\"].IsFloat())\n\t\t\tNoiseScale = _JsonDocument[\"NoiseScale\"].GetFloat();\n\t\telse\n\t\t\tNoiseScale = _InitParams.NoiseScale;\n\t\tif (_JsonDocument.HasMember(\"LengthScale\") && _JsonDocument[\"LengthScale\"].IsFloat())\n\t\t\tLengthScale = _JsonDocument[\"LengthScale\"].GetFloat();\n\t\telse\n\t\t\tLengthScale = _InitParams.LengthScale;\n\t\tif (_JsonDocument.HasMember(\"RestTime\") && _JsonDocument[\"RestTime\"].IsFloat())\n\t\t\tRestTime = _JsonDocument[\"RestTime\"].GetFloat();\n\t\telse\n\t\t\tRestTime = _InitParams.RestTime;\n\t\tif (_JsonDocument.HasMember(\"DurationPredictorNoiseScale\") && _JsonDocument[\"DurationPredictorNoiseScale\"].IsFloat())\n\t\t\tDurationPredictorNoiseScale = _JsonDocument[\"DurationPredictorNoiseScale\"].GetFloat();\n\t\telse\n\t\t\tDurationPredictorNoiseScale = _InitParams.DurationPredictorNoiseScale;\n\t\tif (_JsonDocument.HasMember(\"FactorDpSdp\") && _JsonDocument[\"FactorDpSdp\"].IsFloat())\n\t\t\tFactorDpSdp = _JsonDocument[\"FactorDpSdp\"].GetFloat();\n\t\telse\n\t\t\tFactorDpSdp = _InitParams.FactorDpSdp;\n\t\tif (_JsonDocument.HasMember(\"GateThreshold\") && _JsonDocument[\"GateThreshold\"].IsFloat())\n\t\t\tGateThreshold = _JsonDocument[\"GateThreshold\"].GetFloat();\n\t\telse\n\t\t\tGateThreshold = _InitParams.GateThreshold;\n\t\tif (_JsonDocument.HasMember(\"MaxDecodeStep\") && _JsonDocument[\"MaxDecodeStep\"].IsFloat())\n\t\t\tMaxDecodeStep = _JsonDocument[\"MaxDecodeStep\"].GetInt();\n\t\telse\n\t\t\tMaxDecodeStep = _InitParams.MaxDecodeStep;\n\t\tif (_JsonDocument.HasMember(\"Seed\") && _JsonDocument[\"Seed\"].IsInt())\n\t\t\tSeed = _JsonDocument[\"Seed\"].GetInt();\n\t\telse\n\t\t\tSeed = _InitParams.Seed;\n\t\tif (_JsonDocument.HasMember(\"SpeakerName\") && _JsonDocument[\"SpeakerName\"].IsString())\n\t\t\tSpeakerName = to_wide_string(_JsonDocument[\"SpeakerName\"].GetString());\n\t\telse\n\t\t\tSpeakerName = _InitParams.SpeakerName;\n\n\t\tif (MaxDecodeStep < 2000) MaxDecodeStep = 2000;\n\t\tif (MaxDecodeStep > 20000) MaxDecodeStep = 20000;\n\t\tif (GateThreshold > 0.90f) GateThreshold = 0.90f;\n\t\tif (GateThreshold < 0.2f) GateThreshold = 0.2f;\n\t\tif (FactorDpSdp > 1.f) FactorDpSdp = 1.f;\n\t\tif (FactorDpSdp < 0.f) FactorDpSdp = 0.f;\n\t\tif (NoiseScale > 10.f) NoiseScale = 10.f;\n\t\tif (NoiseScale < 0.f) NoiseScale = 0.f;\n\t\tif (DurationPredictorNoiseScale > 10.f) DurationPredictorNoiseScale = 10.f;\n\t\tif (DurationPredictorNoiseScale < 0.f) DurationPredictorNoiseScale = 0.f;\n\t\tif (RestTime > 30.f) RestTime = 30.f;\n\t\tif (LengthScale > 10.f) LengthScale = 10.f;\n\t\tif (LengthScale < 0.1f) LengthScale = 0.1f;\n\t}\n\n\tbool MoeVSTTSSeq::operator==(const MoeVSTTSSeq& right) const\n\t{\n\t\treturn Serialization() == right.Serialization();\n\t}\n}\n"
  },
  {
    "path": "libtts/Modules/Models/src/TTS.cpp",
    "content": "﻿#include \"../header/TTS.hpp\"\n#include <set>\n\nMoeVoiceStudioCoreHeader\n\nstd::unordered_map<std::wstring, int64_t> _ACCMAP{\n\t{ L\"[acc_6]\", 6 }, { L\"[acc_5]\", 5 }, { L\"[acc_4]\", 4 }, { L\"[acc_3]\", 3 }, { L\"[acc_2]\", 2 }, { L\"[acc_1]\", 1 },\n\t{ L\"[acc_-4]\", -4 }, { L\"[acc_-3]\", -3 }, { L\"[acc_-2]\", -2 }, { L\"[acc_-1]\", -1 },\n};\n\nstd::unordered_map<std::string, std::string> _LANGREPMAP{\n\t{\"CHINESE\", \"ZH\"}, { \"CHINA\", \"ZH\" },\n\t{ \"JAPAN\", \"JP\" }, { \"JAPANESE\", \"JP\" }, { \"JA\", \"JP\" },\n\t{ \"ENGLISH\", \"EN\" }\n};\n\nstd::set ChineseVowel{L'a', L'e', L'i', L'o', L'u', L'A', L'E', L'I', L'O', L'U'};\n\nstd::set ByteSymbol{L',', L'.', L'?', L'/', L'\\\"', L'\\'', L';', L':', L'!', L' ', L'…' };\n\nvoid PreventNoobsInputErrors(std::string& _Src)\n{\n\tfor (auto& i : _Src)\n\t\ti = char(toupper(i));\n\tconst auto res = _LANGREPMAP.find(_Src);\n\tif (res != _LANGREPMAP.end())\n\t\t_Src = res->second;\n}\n\nTextToSpeech::TextToSpeech(const ExecutionProviders& ExecutionProvider_, unsigned DeviceID_, unsigned ThreadCount_) : MoeVoiceStudioModule(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tMoeVSClassName(L\"MoeVoiceStudioTextToSpeech\");\n}\n\n/**Preprocess**/\n\nstd::vector<MoeVSProjectSpace::MoeVSTTSSeq> TextToSpeech::GetInputSeqs(const MJson& _Input, const MoeVSProjectSpace::MoeVSParams& _InitParams) const\n{\n\tauto InputSeq = GetInputSeqsStatic(_Input, _InitParams);\n\treturn SpecializeInputSeqs(InputSeq);\n}\n\nstd::vector<MoeVSProjectSpace::MoeVSTTSSeq> TextToSpeech::GetInputSeqsStatic(const MJson& _Input, const MoeVSProjectSpace::MoeVSParams& _InitParams)\n{\n\tif (!_Input.IsArray())\n\t\tLibDLVoiceCodecThrow(\"JSON Type Must Be Array\")\n\t\tconst auto _InpArr = _Input.GetArray();\n\tstd::vector<MoeVSProjectSpace::MoeVSTTSSeq> _TTSInputSeqs;\n\t_TTSInputSeqs.reserve(_InpArr.size());\n\tfor (const auto& iter : _InpArr)\n\t\t_TTSInputSeqs.emplace_back(iter, _InitParams);\n\treturn _TTSInputSeqs;\n}\n\nstd::vector<MoeVSProjectSpace::MoeVSTTSSeq>& TextToSpeech::SpecializeInputSeqs(std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Seq) const\n{\n\tfor (auto& _Temp : _Seq)\n\t{\n\t\tPreventNoobsInputErrors(_Temp.LanguageSymbol);\n\t\tif (LanguageSymbol2ID.find(_Temp.LanguageSymbol) == LanguageSymbol2ID.end())\n\t\t\t_Temp.LanguageSymbol = LanguageSymbol2ID.begin()->first;\n\n\t\tconst int64_t FirstToneIdx = LanguageSymbol2TonesBegin.at(_Temp.LanguageSymbol);\n\n\t\tfor(auto& _iter : _Temp.SlicedTokens)\n\t\t{\n\t\t\tif (!_iter.Phonemes.empty())\n\t\t\t{\n\t\t\t\tauto RtnData = SplitTonesFromTokens(_iter.Phonemes, _iter.Tones, FirstToneIdx, _Temp.LanguageSymbol);\n\t\t\t\t_iter.Phonemes = std::move(std::get<0>(RtnData));\n\t\t\t\t_iter.Tones = std::move(std::get<1>(RtnData));\n\t\t\t}\n\t\t\telse if (FirstToneIdx)\n\t\t\t\tfor (auto& it : _iter.Tones)\n\t\t\t\t\tit += FirstToneIdx;\n\t\t}\n\t}\n\treturn _Seq;\n}\n\n/**Infer**/\n\nstd::vector<std::vector<int16_t>> TextToSpeech::Inference(const std::wstring& _Seq, const MoeVSProjectSpace::MoeVSParams& _InferParams) const\n{\n\tif (_Seq.empty())\n\t\treturn {};\n\treturn Inference(GetInputSeqs({ to_byte_string(_Seq), true }, _InferParams));\n}\n\nstd::vector<std::vector<int16_t>> TextToSpeech::Inference(const MJson& _Inputs, const MoeVSProjectSpace::MoeVSParams& _InferParams) const\n{\n\treturn Inference(GetInputSeqs(_Inputs, _InferParams));\n}\n\nstd::vector<std::wstring> TextToSpeech::Inference(std::wstring& _Datas, const MoeVSProjectSpace::MoeVSParams& _InferParams, const InferTools::SlicerSettings& _SlicerSettings) const\n{\n\treturn Inference(_Datas, _InferParams,false);\n}\n\nstd::vector<std::wstring> TextToSpeech::Inference(const std::wstring& _Seq, const MoeVSProjectSpace::MoeVSParams& _InferParams, bool T) const\n{\n\tconst std::vector<std::vector<int16_t>> PCM = Inference(GetInputSeqs({ to_byte_string(_Seq), true }, _InferParams));\n\tstd::vector<std::wstring> AudioFolders;\n\n\tif (_Seq.empty())\n\t\treturn {};\n\n\tAudioFolders.reserve(PCM.size());\n\tfor (const auto& i : PCM)\n\t{\n\t\tstd::wstring OutFolder = GetCurrentFolder() + L\"/Outputs/BatchInference\";\n\t\tif (_waccess((OutFolder + L\".wav\").c_str(), 0) != -1)\n\t\t{\n\t\t\tfor (size_t idx = 0; idx < 99999999; ++idx)\n\t\t\t\tif (_waccess((OutFolder + L\" (\" + std::to_wstring(idx) + L\").wav\").c_str(), 0) == -1)\n\t\t\t\t{\n\t\t\t\t\tOutFolder += L\" (\" + std::to_wstring(idx) + L\").wav\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\t\telse\n\t\t\tOutFolder += L\".wav\";\n\t\tAudioFolders.emplace_back(OutFolder);\n\t\tInferTools::Wav::WritePCMData(_samplingRate, 1, i, OutFolder);\n\t}\n\treturn AudioFolders;\n}\n\nstd::vector<std::vector<int16_t>> TextToSpeech::Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const\n{\n\tMoeVSNotImplementedError\n}\n\nstd::vector<size_t> TextToSpeech::AligPhoneAttn(const std::string& LanguageStr, const std::vector<std::wstring>& PhoneSeq, size_t BertSize) const\n{\n\tsize_t PhoneSize = PhoneSeq.size();\n\tif (AddBlank)\n\t\tPhoneSize = PhoneSize * 2 + 1;\n\tif(LanguageStr == \"ZH\")\n\t{\n\t\tstd::vector<size_t> bert2ph(PhoneSize, 0);\n\t\tsize_t startFrame = 1;\n\t\tfor (size_t iph = 0; iph < PhoneSeq.size(); ++iph)\n\t\t{\n\t\t\tif (startFrame == BertSize)\n\t\t\t\tLibDLVoiceCodecThrow(\"AligError\")\n\t\t\tif (AddBlank)\n\t\t\t{\n\t\t\t\tbert2ph[(iph + 1) * 2] = startFrame;\n\t\t\t\tbert2ph[(iph + 1) * 2 - 1] = startFrame;\n\t\t\t}\n\t\t\telse\n\t\t\t\tbert2ph[iph] = startFrame;\n\t\t\tif (!PhoneSeq[iph].empty() && ChineseVowel.find(PhoneSeq[iph][0]) != ChineseVowel.end())\n\t\t\t\t++startFrame;\n\t\t\telse if (ByteSymbol.find(PhoneSeq[iph][0]) != ByteSymbol.end())\n\t\t\t\t++startFrame;\n\t\t\telse if (Symbols.find(PhoneSeq[iph]) == Symbols.end())\n\t\t\t\t++startFrame;\n\t\t\telse if (PhoneSeq[iph] == L\"UNK\")\n\t\t\t\t++startFrame;\n\t\t}\n\t\tbert2ph.back() = startFrame;\n\t\treturn bert2ph;\n\t}\n\treturn GetAligments(PhoneSize, BertSize);\n}\n\nstd::wstring TextToSpeech::TextNormalize(const std::wstring& _Input, int64_t LanguageId) const\n{\n\treturn MoeVSG2P::NormalizeText(_Input, GetLanguageSymbolWithLanguageId(LanguageId));\n}\n\n/**MapCast**/\n\nconst std::wstring& TextToSpeech::GetTokenizerNameWithLanguageSymbol(const std::string& LanguageSymbol) const\n{\n\tconst auto TokenizerNamePair = LanguageSymbol2TokenizerName.find(LanguageSymbol);\n\tif (TokenizerNamePair != LanguageSymbol2TokenizerName.end())\n\t\treturn TokenizerNamePair->second;\n\treturn NoneString;\n}\n\nconst MoeVSG2P::Tokenizer& TextToSpeech::GetTokenizer(const std::wstring& TokenizerName) const\n{\n\tconst auto TokenizerPair = Tokenizers.find(TokenizerName);\n\tif (TokenizerPair != Tokenizers.end())\n\t\treturn TokenizerPair->second;\n\treturn MoeVSG2P::GetEmptyVocabTokenizer();\n}\n\nconst MoeVSG2P::Tokenizer& TextToSpeech::GetTokenizerWithLanguageSymbol(const std::string& LanguageSymbol) const\n{\n\tconst auto& TokenizerName = GetTokenizerNameWithLanguageSymbol(LanguageSymbol);\n\treturn GetTokenizer(TokenizerName);\n}\n\nconst std::string& TextToSpeech::GetLanguageSymbolWithLanguageId(int64_t LanguageId) const\n{\n\tconst auto LanguageIDPair = LanguageID2Symbol.find(LanguageId);\n\tif (LanguageIDPair != LanguageID2Symbol.end())\n\t\treturn LanguageIDPair->second;\n\treturn NoneAString;\n}\n\nint64_t TextToSpeech::GetLanguageIdWithLanguageSymbol(const std::string& LanguageSymbol) const\n{\n\tconst auto LanguageIDPair = LanguageSymbol2ID.find(LanguageSymbol);\n\tif (LanguageIDPair != LanguageSymbol2ID.end())\n\t\treturn LanguageIDPair->second;\n\treturn _atoi64(LanguageSymbol.c_str());\n}\n\nint64_t TextToSpeech::GetBertIdWithLanguageSymbol(const std::string& LanguageSymbol) const\n{\n\tconst auto LanguageIDPair = LanguageSymbol2BertID.find(LanguageSymbol);\n\tif (LanguageIDPair != LanguageSymbol2BertID.end())\n\t\treturn LanguageIDPair->second;\n\treturn -1;\n}\n\nint64_t TextToSpeech::GetTonesBegin(const std::string& LanguageSymbol) const\n{\n\tconst auto LanguageIDPair = LanguageSymbol2TonesBegin.find(LanguageSymbol);\n\tif (LanguageIDPair != LanguageSymbol2TonesBegin.end())\n\t\treturn LanguageIDPair->second;\n\treturn _atoi64(LanguageSymbol.c_str());\n}\n\nint64_t TextToSpeech::GetTonesBegin(int64_t LanguageId) const\n{\n\tconst auto& LanguageSymbol = GetLanguageSymbolWithLanguageId(LanguageId);\n\treturn GetTonesBegin(LanguageSymbol);\n}\n\nint64_t TextToSpeech::GetSpeakerIdWithSpeakerName(const std::wstring& SpeakerName) const\n{\n\tconst auto SpeakerIDPair = SpeakerName2ID.find(SpeakerName);\n\tif (SpeakerIDPair != SpeakerName2ID.end())\n\t\treturn SpeakerIDPair->second;\n\treturn _wtoi64(SpeakerName.c_str());\n}\n\nconst std::wstring& TextToSpeech::GetSpeakerNameWithSpeakerId(int64_t SpeakerID) const\n{\n\tconst auto SpeakerIDPair = SpeakerID2Name.find(SpeakerID);\n\tif (SpeakerIDPair != SpeakerID2Name.end())\n\t\treturn SpeakerIDPair->second;\n\treturn NoneString;\n}\n\nint64_t TextToSpeech::GetBertIndexWithName(const std::wstring& BertName) const\n{\n\tconst auto BertIDPair = BertName2Index.find(BertName);\n\tif (BertIDPair != BertName2Index.end())\n\t\treturn BertIDPair->second;\n\treturn _wtoi64(BertName.c_str());\n}\n\nconst std::wstring& TextToSpeech::GetBertNameWithIndex(int64_t Index) const\n{\n\tconst auto BertIDPair = Index2BertName.find(Index);\n\tif (BertIDPair != Index2BertName.end())\n\t\treturn BertIDPair->second;\n\treturn NoneString;\n}\n\nstd::vector<std::wstring> TextToSpeech::CleanText(const std::wstring& SrcText, const std::wstring& PlaceholderSymbol,\n\tconst std::wstring& ExtraInfo, const std::string& LanguageSymbol) const\n{\n\treturn CleanText(Cleaner, SrcText, PlaceholderSymbol, ExtraInfo, LanguageSymbol);\n}\n\nstd::vector<int64_t> TextToSpeech::CleanedSeq2Indices(const std::vector<std::wstring>& Seq) const\n{\n\tstd::vector<int64_t> Indices;\n\tIndices.reserve(Seq.size() * 3);\n\tfor (const auto& i : Seq)\n\t{\n\t\tif (AddBlank)\n\t\t\tIndices.emplace_back(0);\n\t\tconst auto Res = Symbols.find(i);\n\t\tif (Res != Symbols.end())\n\t\t\tIndices.emplace_back(Res->second);\n\t\telse\n\t\t\tIndices.emplace_back(UNKID);\n\t}\n\tif (AddBlank)\n\t\tIndices.emplace_back(0);\n\treturn Indices;\n}\n\n/**STATIC**/\n\nstd::vector<size_t> TextToSpeech::GetAligments(size_t DstLen, size_t SrcLen)\n{\n\tstd::vector<size_t> bert2ph(DstLen + 1, 0);\n\n\tsize_t startFrame = 0;\n\tconst double ph_durs = static_cast<double>(DstLen) / static_cast<double>(SrcLen);\n\tfor (size_t iph = 0; iph < SrcLen; ++iph)\n\t{\n\t\tconst auto endFrame = static_cast<size_t>(round(static_cast<double>(iph) * ph_durs + ph_durs));\n\t\tfor (auto j = startFrame; j < endFrame + 1; ++j)\n\t\t\tbert2ph[j] = static_cast<long long>(iph) + 1;\n\t\tstartFrame = endFrame + 1;\n\t}\n\treturn bert2ph;\n}\n\nstd::vector<std::vector<bool>> TextToSpeech::generatePath(float* duration, size_t durationSize, size_t maskSize)\n{\n\tfor (size_t i = 1; i < maskSize; ++i)\n\t\tduration[i] = duration[i - 1] + duration[i];\n\tstd::vector<std::vector<bool>> path(durationSize, std::vector<bool>(maskSize, false));\n\t//const auto path = new float[maskSize * durationSize];\n\t/*\n\tfor (size_t i = 0; i < maskSize; ++i)\n\t\tfor (size_t j = 0; j < durationSize; ++j)\n\t\t\tpath[i][j] = (j < (size_t)duration[i] ? 1.0f : 0.0f);\n\tfor (size_t i = maskSize - 1; i > 0ull; --i)\n\t\tfor (size_t j = 0; j < durationSize; ++j)\n\t\t\tpath[i][j] -= path[i-1][j];\n\t */\n\tauto dur = (size_t)duration[0];\n\tfor (size_t j = 0; j < dur; ++j)\n\t\tpath[j][0] = true;\n\t/*\n\tfor (size_t i = maskSize - 1; i > 0ull; --i)\n\t\tfor (size_t j = 0; j < durationSize; ++j)\n\t\t\tpath[i][j] = (j < (size_t)duration[i] && j >= (size_t)duration[i - 1]);\n\tstd::vector<std::vector<float>> tpath(durationSize, std::vector<float>(maskSize));\n\tfor (size_t i = 0; i < maskSize; ++i)\n\t\tfor (size_t j = 0; j < durationSize; ++j)\n\t\t\ttpath[j][i] = path[i][j];\n\t */\n\tfor (size_t j = maskSize - 1; j > 0ull; --j)\n\t{\n\t\tdur = (size_t)duration[j];\n\t\tfor (auto i = (size_t)duration[j - 1]; i < dur && i < durationSize; ++i)\n\t\t\tpath[i][j] = true;\n\t}\n\treturn path;\n}\n\nstd::tuple<std::vector<std::wstring>, std::vector<int64_t>> TextToSpeech::SplitTonesFromTokens(const std::vector<std::wstring>& SrcSeq, const std::vector<int64_t>& TonesRef, int64_t TonesBegin, const std::string& LanguageSymbol)\n{\n\tif (SrcSeq.empty())\n\t\treturn{ {},{} };\n\tstd::vector<std::wstring> TempSeqVec;\n\tstd::vector<int64_t> TempToneVec;\n\tTempSeqVec.reserve(SrcSeq.size());\n\tTempToneVec.reserve(SrcSeq.size());\n\tfor (const auto& it : SrcSeq)\n\t{\n\t\tif (_ACCMAP.find(it) == _ACCMAP.end())\n\t\t{\n\t\t\tTempSeqVec.emplace_back(it);\n\t\t\tTempToneVec.emplace_back(0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (TempToneVec.empty())\n\t\t\t\tcontinue;\n\t\t\t*(TempToneVec.end() - 1) = _ACCMAP.at(it);\n\t\t\tif (TempToneVec.size() > 1 && *(TempToneVec.end() - 2) == 0 && LanguageSymbol == \"ZH\")\n\t\t\t\t*(TempToneVec.end() - 2) = *(TempToneVec.end() - 1);\n\t\t}\n\t}\n\tif (TempToneVec.size() == TonesRef.size())\n\t{\n\t\tfor (size_t i = 0; i < TonesRef.size(); ++i)\n\t\t\tif (TonesRef[i] != 0)\n\t\t\t\tTempToneVec[i] = TonesRef[i];\n\t}\n\n\tif (TonesBegin)\n\t\tfor (auto& it : TempToneVec)\n\t\t\tit += TonesBegin;\n\n\treturn { std::move(TempSeqVec) ,std::move(TempToneVec) };\n}\n\nstd::wregex PhonemeRegex(LR\"(<ph>(.*)</ph>)\");\nstd::vector<std::wstring> TextToSpeech::CleanText(const MoeVSG2P::MVSCleaner* TextCleaner, const std::wstring& SrcText, const std::wstring& PlaceholderSymbol, const std::wstring& ExtraInfo, const std::string& LanguageSymbol)\n{\n\tstd::wsmatch mat;\n\tif(TextCleaner)\n\t{\n\t\tif (std::regex_match(SrcText, mat, PhonemeRegex))\n\t\t\treturn TextCleaner->DictReplace(mat[1].str(), PlaceholderSymbol);\n\t\tif (TextCleaner->G2pEnabled())\n\t\t\treturn TextCleaner->DictReplace(TextCleaner->G2p(SrcText, PlaceholderSymbol, ExtraInfo, LanguageSymbol), PlaceholderSymbol);\n\t\treturn TextCleaner->DictReplace(SrcText, PlaceholderSymbol);\n\t}\n\treturn { SrcText };\n}\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libtts/Modules/Models/src/Vits.cpp",
    "content": "﻿#include \"../header/Vits.hpp\"\n#include \"../../InferTools/inferTools.hpp\"\n#include <random>\n\nMoeVoiceStudioCoreHeader\nbool BertEnabled = false;\n\nnamespace BertSpace\n{\n\tstd::unordered_map<std::wstring, Ort::Session*> sessionBert;\n\tstd::unordered_map<std::wstring, Ort::Session*> sessionClap;\n}\n\nOrt::Session* GetBertModel(const std::wstring& Name)\n{\n\tconst auto fd = BertSpace::sessionBert.find(Name);\n\tif (fd != BertSpace::sessionBert.end())\n\t\treturn fd->second;\n\treturn nullptr;\n}\n\nOrt::Session* GetClapModel(const std::wstring& Name)\n{\n\tconst auto fd = BertSpace::sessionClap.find(Name);\n\tif (fd != BertSpace::sessionClap.end())\n\t\treturn fd->second;\n\treturn nullptr;\n}\n\nvoid SetBertEnabled(bool cond)\n{\n\tBertEnabled = cond;\n}\n\nvoid DestoryAllBerts()\n{\n\tfor (const auto& it : BertSpace::sessionBert)\n\t\tdelete it.second;\n\tfor (const auto& it : BertSpace::sessionClap)\n\t\tdelete it.second;\n\tBertSpace::sessionBert.clear();\n\tBertSpace::sessionClap.clear();\n}\n\nVits::~Vits()\n{\n\tlogger.log(L\"[Info] unloading Vits Models\");\n\tdestory();\n\tlogger.log(L\"[Info] Vits Models unloaded\");\n}\n\nVits::Vits(const MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_) :\n\tTextToSpeech(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\t//Check Folder\n\tif (_Config[\"Folder\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"folder\\\" (Model Folder)\")\n\tif (!_Config[\"Folder\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Must Be String\")\n\tconst auto _folder = to_wide_string(_Config[\"Folder\"].GetString());\n\tif (_folder.empty())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"folder\\\" (Model Folder) Can Not Be Empty\")\n\tconst std::wstring _path = GetCurrentFolder() + L\"/Models/\" + _folder + L\"/\" + _folder;\n\n\tstd::map<std::string, std::wstring> _PathDict;\n\n\tif(_Config.HasMember(\"EmotionalPath\") && _Config[\"EmotionalPath\"].IsString())\n\t{\n\t\tconst auto emoStringload = to_wide_string(_Config[\"EmotionalPath\"].GetString());\n\t\tif(!emoStringload.empty())\n\t\t{\n\t\t\t_PathDict[\"EmotionalPath\"] = GetCurrentFolder() + L\"/emotion/\" + emoStringload + L\".npy\";\n\t\t\t_PathDict[\"EmotionalDictPath\"] = GetCurrentFolder() + L\"/emotion/\" + emoStringload + L\".json\";\n\t\t}\n\t}\n\n\tif(_Config.HasMember(\"Clap\") && _Config[\"Clap\"].IsString())\n\t{\n\t\tconst auto ClapStringload = to_wide_string(_Config[\"Clap\"].GetString());\n\t\tif (!ClapStringload.empty())\n\t\t\t_PathDict[\"Clap\"] = GetCurrentFolder() + L\"/clap/\" + ClapStringload;\n\t}\n\n\t_PathDict[\"Decoder\"] = _path + L\"_dec.onnx\";\n\t_PathDict[\"StochasticDurationPredictor\"] = _path + L\"_sdp.onnx\";\n\t_PathDict[\"DurationPredictor\"] = _path + L\"_dp.onnx\";\n\t_PathDict[\"Encoder\"] = _path + L\"_enc_p.onnx\";\n\t_PathDict[\"FlowNet\"] = _path + L\"_flow.onnx\";\n\t_PathDict[\"Embidding\"] = _path + L\"_emb.onnx\";\n\n\tif (_Config.HasMember(\"Dict\") && _Config[\"Dict\"].IsString() && !_Config[\"Dict\"].Empty())\n\t\t_PathDict[\"Dict\"] = GetCurrentFolder() + L\"/Dict/\" + to_wide_string(_Config[\"Dict\"].GetString()) + L\".json\";\n\n\tstd::vector<std::wstring> _BertPaths;\n\tif (_Config.HasMember(\"BertPath\") && _Config[\"BertPath\"].IsArray() && !_Config[\"BertPath\"].Empty())\n\t{\n\t\tfor(const auto& BPH : _Config[\"BertPath\"].GetArray())\n\t\t{\n\t\t\tconst auto BertPath = to_wide_string(BPH.GetString());\n\t\t\tif(!BertPath.empty())\n\t\t\t\t_BertPaths.emplace_back(GetCurrentFolder() + L\"/Bert/\" + BertPath);\n\t\t}\n\t}\n\n\tload(_PathDict, _Config, _ProgressCallback, _DurationCallback, _BertPaths);\n}\n\nvoid Vits::load(const std::map<std::string, std::wstring>& _PathDict,\n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback, const std::vector<std::wstring>& _BertPaths)\n{\n\tif (_Config[\"Type\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Type\\\" (ModelType)\");\n\tif (!_Config[\"Type\"].IsString())\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Type\\\" (ModelType) Must Be String\");\n\n\tVitsType = _Config[\"Type\"].GetString();\n\tif (VitsType == \"Pits\")\n\t{\n\t\tUseTone = true;\n\t\tUseLength = false;\n\t}\n\telse if (VitsType == \"BertVits\")\n\t{\n\t\tUseLength = false;\n\t\tUseTone = true;\n\t\tUseBert = true;\n\t\tUseLanguage = true;\n\t\tEncoderG = true;\n\t}\n\n\t//Load Cleaner\n\tCleaner = MoeVSG2P::GetDefCleaner();\n\tif (_PathDict.find(\"Dict\") != _PathDict.end() && (_waccess(_PathDict.at(\"Dict\").c_str(), 0) != -1))\n\t\tCleaner->loadDict(_PathDict.at(\"Dict\"));\n\telse\n\t\tCleaner->loadDict(L\"\");\n\n\t//Load Speaker Map\n\tif (_Config.HasMember(\"Characters\"))\n\t{\n\t\tconst auto Characters = _Config[\"Characters\"];\n\t\tif(Characters.IsArray())\n\t\t{\n\t\t\tSpeakerCount = (int64_t)Characters.Size();\n\t\t\tint64_t SpkIdx = 0;\n\t\t\tfor (const auto& iterator : Characters.GetArray())\n\t\t\t{\n\t\t\t\tconst auto SpeakerName = to_wide_string(iterator.GetString());\n\t\t\t\tSpeakerName2ID[SpeakerName] = SpkIdx;\n\t\t\t\tSpeakerID2Name[SpkIdx] = SpeakerName;\n\t\t\t\t++SpkIdx;\n\t\t\t}\n\t\t}\n\t\telse if(Characters.GetMemberCount())\n\t\t{\n\t\t\tconst auto Members = Characters.GetMemberArray();\n\t\t\tfor (const auto& pair : Members)\n\t\t\t{\n\t\t\t\tconst auto SpeakerName = to_wide_string(pair.first);\n\t\t\t\tconst int64_t SpkIdx = pair.second.GetInt64();\n\t\t\t\tSpeakerName2ID[SpeakerName] = SpkIdx;\n\t\t\t\tSpeakerID2Name[SpkIdx] = SpeakerName;\n\t\t\t}\n\t\t}\n\t}\n\n\t//Load Language Map\n\tif (UseLanguage && (_Config[\"LanguageMap\"].IsNull() || !_Config.HasMember(\"LanguageMap\")))\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"LanguageMap\\\" (LanguageMap)\");\n\tif (_Config.HasMember(\"LanguageMap\"))\n\t{\n\t\tconst auto LanguageMap = _Config[\"LanguageMap\"];\n\t\tif (LanguageMap.GetMemberCount())\n\t\t\tfor (const auto& Item : LanguageMap.GetMemberArray())\n\t\t\t{\n\t\t\t\tif (!Item.second.IsArray())\n\t\t\t\t\tcontinue;\n\t\t\t\tconst auto LangArr = Item.second.GetArray();\n\t\t\t\tif (LangArr.size() < 2)\n\t\t\t\t\tcontinue;\n\t\t\t\tLanguageSymbol2ID[Item.first] = LangArr[0].GetInt();\n\t\t\t\tLanguageID2Symbol[LangArr[0].GetInt()] = Item.first;\n\t\t\t\tLanguageSymbol2TonesBegin[Item.first] = LangArr[1].GetInt();\n\t\t\t}\n\t\telse\n\t\t\tlogger.log(\"[Warn] Field \\\"LanguageMap\\\" Is Empty, Use Default Value\");\n\t}\n\telse\n\t\tlogger.log(\"[Warn] Field \\\"LanguageMap\\\" Is Missing, Use Default Value\");\n\n\t//Load Default Bert Dim\n\tif (_Config.HasMember(\"BertSize\") && _Config[\"BertSize\"].IsInt64())\n\t\tDefBertSize = _Config[\"BertSize\"].GetInt64();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"BertSize\\\" Is Missing, Use Default Value\");\n\n\t//Enable Bert Reference\n\tif (_Config.HasMember(\"ReferenceBert\") && _Config[\"ReferenceBert\"].IsBool())\n\t\tReferenceBert = _Config[\"ReferenceBert\"].GetBool();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"ReferenceBert\\\" Is Missing, Use Default Value\");\n\n\t//Load SamplingRate\n\tif (_Config[\"Rate\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Rate\\\" (SamplingRate)\");\n\tif (_Config[\"Rate\"].IsInt() || _Config[\"Rate\"].IsInt64())\n\t\t_samplingRate = _Config[\"Rate\"].GetInt();\n\telse\n\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Rate\\\" (SamplingRate) Must Be Int/Int64\");\n\n\tlogger.log(L\"[Info] Current Sampling Rate is\" + std::to_wstring(_samplingRate));\n\n\t//Check Symbol & AddBlank\n\tif (!_Config.HasMember(\"Symbol\") || _Config[\"Symbol\"].IsNull())\n\t\tLibDLVoiceCodecThrow(\"[Error] Missing field \\\"Symbol\\\" (PhSymbol)\");\n\tif (_Config.HasMember(\"AddBlank\") && !_Config[\"AddBlank\"].IsNull())\n\t\tAddBlank = _Config[\"AddBlank\"].GetBool();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"AddBlank\\\" Is Missing, Use Default Value\");\n\n\t//Load Symbols\n\tint64_t iter_symb = 0;\n\tif (_Config[\"Symbol\"].IsArray())\n\t{\n\t\tlogger.log(L\"[Info] Use Phs\");\n\t\tif (_Config[\"Symbol\"].Empty())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Can Not Be Empty\");\n\t\tconst auto SymbolArr = _Config[\"Symbol\"].GetArray();\n\t\tif (!SymbolArr[0].IsString())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Must Be Array<String> or String\");\n\t\tfor (const auto& it : SymbolArr)\n\t\t\tSymbols.insert({ to_wide_string(it.GetString()), iter_symb++ });\n\t}\n\telse\n\t{\n\t\tif (!_Config[\"Symbol\"].IsString())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Must Be Array<String> or String\");\n\t\tlogger.log(L\"[Info] Use Symbols\");\n\t\tconst std::wstring SymbolsStr = to_wide_string(_Config[\"Symbol\"].GetString());\n\t\tif (SymbolsStr.empty())\n\t\t\tLibDLVoiceCodecThrow(\"[Error] Field \\\"Symbol\\\" (PhSymbol) Can Not Be Empty\");\n\t\tfor (size_t i = 0; i < SymbolsStr.length(); ++i)\n\t\t\tSymbols.insert({ SymbolsStr.substr(i,1) , iter_symb++ });\n\t}\n\n\tfor (const auto& iter : Symbols)\n\t\tif (iter.first.find(L\"UNK\") != std::wstring::npos || iter.first.find(L\"unk\") != std::wstring::npos)\n\t\t\tUNKID = iter.second;\n\n\tif (_Config.HasMember(\"VQSize\") && _Config[\"VQSize\"].IsInt64())\n\t\tVQCodeBookSize = _Config[\"VQSize\"].GetInt64();\n\telse\n\t\tlogger.log(L\"[Warn] Field \\\"VQSize\\\" Is Missing, Use Default Value\");\n\n\t//Load Emo-Vector\n\ttry\n\t{\n\t\tif (_PathDict.find(\"EmotionalPath\") != _PathDict.end())\n\t\t{\n\t\t\tconst auto EmotionPath = _PathDict.at(\"EmotionalPath\");\n\t\t\tif (!EmotionPath.empty())\n\t\t\t{\n\t\t\t\tlogger.log(L\"[Info] Loading EmotionVector\");\n\t\t\t\tEmoLoader.open(EmotionPath);\n\t\t\t\tlogger.log(L\"[Info] EmotionVector Loaded\");\n\t\t\t\tEmotion = true;\n\t\t\t}\n\t\t}\n\t\tif (_PathDict.find(\"EmotionalDictPath\") != _PathDict.end())\n\t\t{\n\t\t\tconst auto EmotionPath = _PathDict.at(\"EmotionalDictPath\");\n\t\t\tif (!EmotionPath.empty())\n\t\t\t{\n\t\t\t\tMJson EmoJson = { EmotionPath };\n\t\t\t\tfor (const auto& Member : EmoJson.GetMemberArray())\n\t\t\t\t\tEmo2Id[to_wide_string(Member.first)] = Member.second.GetInt();\n\t\t\t}\n\t\t}\n\t}\n\tcatch (std::exception& e)\n\t{\n\t\tlogger.log((std::string(\"[Warn] EmotionPath Error \") + e.what()).c_str());\n\t}\n\n\t//InputNames\n\tif (UseLength)\n\t\tEncoderInputNames.emplace_back(\"x_lengths\");\n\tif (UseTone)\n\t\tEncoderInputNames.emplace_back(\"t\");\n\tif (Emotion)\n\t\tEncoderInputNames.emplace_back(\"emotion\");\n\tif (UseLanguage)\n\t\tEncoderInputNames.emplace_back(\"language\");\n\n\t//Load Bert\n\tif (UseBert)\n\t{\n\t\tsize_t BertInputCount = _BertPaths.size();\n\n\t\tif (_Config.HasMember(\"BertInputs\") && _Config[\"BertInputs\"].IsArray() && _Config[\"BertInputs\"].Size() != BertInputCount)\n\t\t{\n\t\t\tBertInputCount = _Config[\"BertInputs\"].Size();\n\t\t\tint64_t Index = 0;\n\t\t\tfor (const auto& Member : _Config[\"BertInputs\"].GetArray())\n\t\t\t{\n\t\t\t\tconst auto BertName = to_wide_string(Member.GetString());\n\t\t\t\tIndex2BertName[Index] = BertName;\n\t\t\t\tBertName2Index[BertName] = Index;\n\t\t\t\t++Index;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint64_t Index = 0;\n\t\t\tfor (const auto& Path : _BertPaths)\n\t\t\t{\n\t\t\t\tconst auto BertName = Path.substr(Path.rfind(L'/') + 1);\n\t\t\t\tIndex2BertName[Index] = BertName;\n\t\t\t\tBertName2Index[BertName] = Index;\n\t\t\t\t++Index;\n\t\t\t}\n\t\t}\n\n\t\tif (_Config.HasMember(\"Lang2BertId\") && _Config[\"Lang2BertId\"].GetMemberCount() == LanguageSymbol2ID.size())\n\t\t{\n\t\t\tfor (const auto& Member : _Config[\"Lang2BertId\"].GetMemberArray())\n\t\t\t{\n\t\t\t\tLanguageSymbol2TokenizerName[Member.first] = GetBertNameWithIndex(Member.second.GetInt64());\n\t\t\t\tLanguageSymbol2BertID[Member.first] = Member.second.GetInt64();\n\t\t\t}\n\t\t}\n\t\telse if(LanguageSymbol2ID.size() <= BertInputCount)\n\t\t{\n\t\t\tfor(const auto& Pair : LanguageSymbol2ID)\n\t\t\t{\n\t\t\t\tLanguageSymbol2TokenizerName[Pair.first] = GetBertNameWithIndex(Pair.second);\n\t\t\t\tLanguageSymbol2BertID[Pair.first] = Pair.second;\n\t\t\t}\n\t\t}\n\t\telse if(BertInputCount == 1)\n\t\t{\n\t\t\tfor (const auto& Pair : LanguageSymbol2ID)\n\t\t\t{\n\t\t\t\tLanguageSymbol2TokenizerName[Pair.first] = GetBertNameWithIndex(0);\n\t\t\t\tLanguageSymbol2BertID[Pair.first] = 0;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tLibDLVoiceCodecThrow(\"You Must Have Field \\\"Lang2BertId\\\"\")\n\n\t\tEncoderBertInputNames.reserve(BertInputCount * 2);\n\t\tfor (size_t i = 0; i < BertInputCount; ++i)\n\t\t\tEncoderBertInputNames.emplace_back(\"bert_\" + std::to_string(i));\n\t\tfor (const auto& NameInp : EncoderBertInputNames)\n\t\t\tEncoderInputNames.emplace_back(NameInp.data());\n\n\t\tfor(const auto& Path : _BertPaths)\n\t\t{\n\t\t\tconst auto BertName = Path.substr(Path.rfind(L'/') + 1);\n\t\t\tOrt::Session* SessionBert = nullptr;\n\t\t\tif (BertSpace::sessionBert.find(BertName) != BertSpace::sessionBert.end() && BertSpace::sessionBert.at(BertName) != nullptr)\n\t\t\t\tSessionBert = BertSpace::sessionBert.at(BertName);\n\t\t\tif (_waccess(Path.c_str(), 0) != -1)\n\t\t\t{\n\t\t\t\tif(!SessionBert)\n\t\t\t\t{\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tSessionBert = new Ort::Session(*env, (Path + L\"/model.onnx\").c_str(), *session_options);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(Ort::Exception& e)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogger.log(L\"[Warn] \" + to_wide_string(e.what()));\n\t\t\t\t\t\tdelete SessionBert;\n\t\t\t\t\t\tSessionBert = nullptr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_waccess((Path + L\"/Tokenizer.json\").c_str(), 0) != -1)\n\t\t\t\t{\n\t\t\t\t\tTokenizers.insert({ BertName ,Path + L\"/Tokenizer.json\" });\n\t\t\t\t\tTokenizers[BertName].BondCleaner(Cleaner);\n\t\t\t\t}\n\t\t\t\telse if (SessionBert)\n\t\t\t\t{\n\t\t\t\t\tdelete SessionBert;\n\t\t\t\t\tLibDLVoiceCodecThrow(\"Bert Must Have a Tokenizer\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tBertSpace::sessionBert[BertName] = SessionBert;\n\t\t}\n\t\tfor (auto& iter : BertSpace::sessionBert)\n\t\t\tif (BertName2Index.find(iter.first) == BertName2Index.end())\n\t\t\t{\n\t\t\t\tdelete iter.second;\n\t\t\t\titer.second = nullptr;\n\t\t\t}\n\t}\n\n\tif(_BertPaths.empty())\n\t{\n\t\tfor (const auto& iter : BertSpace::sessionBert)\n\t\t\tdelete iter.second;\n\t\tBertSpace::sessionBert.clear();\n\t}\n\n\tif (VitsType == \"BertVits\" && _PathDict.find(\"Clap\") != _PathDict.end())\n\t{\n\t\tEncoderInputNames.emplace_back(\"emo\");\n\t\tUseClap = true;\n\t\tconst auto& Path = _PathDict.at(\"Clap\");\n\t\tClapName = Path.substr(Path.rfind(L'/') + 1);\n\t\tOrt::Session* SessionClap = nullptr;\n\t\tif ((BertSpace::sessionClap.find(ClapName) != BertSpace::sessionClap.end() && BertSpace::sessionClap.at(ClapName) != nullptr))\n\t\t\tSessionClap = BertSpace::sessionClap.at(ClapName);\n\t\tif (!SessionClap)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tSessionClap = new Ort::Session(*env, (Path + L\".onnx\").c_str(), *session_options);\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e)\n\t\t\t{\n\t\t\t\tlogger.log(L\"[Warn] \" + to_wide_string(e.what()));\n\t\t\t\tdelete SessionClap;\n\t\t\t\tSessionClap = nullptr;\n\t\t\t}\n\t\t}\n\t\tif (_waccess((Path + L\".json\").c_str(), 0) != -1)\n\t\t{\n\t\t\tTokenizers.insert({ ClapName , Path + L\".json\" });\n\t\t\tTokenizers[ClapName].BondCleaner(Cleaner);\n\t\t}\n\t\telse if (SessionClap)\n\t\t{\n\t\t\tdelete SessionClap;\n\t\t\tLibDLVoiceCodecThrow(\"Clap Must Have a Tokenizer\");\n\t\t}\n\t\tBertSpace::sessionClap[ClapName] = SessionClap;\n\t\tfor (auto& iter : BertSpace::sessionClap)\n\t\t\tif (ClapName != iter.first)\n\t\t\t{\n\t\t\t\tdelete iter.second;\n\t\t\t\titer.second = nullptr;\n\t\t\t}\n\t}\n\telse\n\t{\n\t\tfor (auto& iter : BertSpace::sessionClap)\n\t\t\tdelete iter.second;\n\t\tBertSpace::sessionClap.clear();\n\t\tUseClap = false;\n\t}\n\n\t_callback = _ProgressCallback;\n\tCustomDurationCallback = _DurationCallback;\n\n\t//LoadModels\n\ttry\n\t{\n\t\tlogger.log(L\"[Info] loading Vits Models\");\n\t\tsessionDec = new Ort::Session(*env, _PathDict.at(\"Decoder\").c_str(), *session_options);\n\t\tsessionEnc_p = new Ort::Session(*env, _PathDict.at(\"Encoder\").c_str(), *session_options);\n\t\tsessionFlow = new Ort::Session(*env, _PathDict.at(\"FlowNet\").c_str(), *session_options);\n\n\t\tif (_waccess(_PathDict.at(\"Embidding\").c_str(), 0) != -1)\n\t\t\tsessionEmb = new Ort::Session(*env, _PathDict.at(\"Embidding\").c_str(), *session_options);\n\t\telse\n\t\t\tsessionEmb = nullptr;\n\n\t\tif (_waccess(_PathDict.at(\"DurationPredictor\").c_str(), 0) != -1)\n\t\t\tsessionDp = new Ort::Session(*env, _PathDict.at(\"DurationPredictor\").c_str(), *session_options);\n\t\telse\n\t\t\tsessionDp = nullptr;\n\n\t\tif (_waccess(_PathDict.at(\"StochasticDurationPredictor\").c_str(), 0) != -1)\n\t\t\tsessionSdp = new Ort::Session(*env, _PathDict.at(\"StochasticDurationPredictor\").c_str(), *session_options);\n\t\telse\n\t\t\tsessionSdp = nullptr;\n\n\t\tif (!sessionDp && !sessionSdp)\n\t\t{\n\t\t\tdestory();\n\t\t\tLibDLVoiceCodecThrow(\"You must have a duration predictor\");\n\t\t}\n\n\t\tlogger.log(L\"[Info] Vits Models loaded\");\n\t}\n\tcatch (Ort::Exception& _exception)\n\t{\n\t\tdestory();\n\t\tLibDLVoiceCodecThrow(_exception.what());\n\t}\n\n\tif (sessionEmb)\n\t{\n\t\tif(EncoderG) EncoderInputNames.emplace_back(\"g\");\n\t\tSdpInputNames.emplace_back(\"g\");\n\t\tDpInputNames.emplace_back(\"g\");\n\t\tFlowInputNames.emplace_back(\"g\");\n\t\tDecInputNames.emplace_back(\"g\");\n\t}\n\n\tif(VitsType == \"BertVits\" && sessionEnc_p->GetInputCount() == EncoderInputNames.size() + 2)\n\t{\n\t\tEncoderInputNames.emplace_back(\"vqidx\");\n\t\tEncoderInputNames.emplace_back(\"sid\");\n\t\tUseVQ = true;\n\t}\n}\n\nVits::Vits(const std::map<std::string, std::wstring>& _PathDict, \n\tconst MJson& _Config, const ProgressCallback& _ProgressCallback,\n\tconst DurationCallback& _DurationCallback, const std::vector<std::wstring>& _BertPaths,\n\tExecutionProviders ExecutionProvider_,\n\tunsigned DeviceID_, unsigned ThreadCount_) :\n\tTextToSpeech(ExecutionProvider_, DeviceID_, ThreadCount_)\n{\n\tload(_PathDict, _Config, _ProgressCallback, _DurationCallback, _BertPaths);\n}\n\nstd::vector<float> Vits::GetEmotionVector(const std::vector<std::wstring>& src) const\n{\n\tif (src.empty())\n\t\treturn EmoLoader[0];\n\tstd::vector<float> dst(1024, 0.0);\n\tuint64_t mul = 0;\n\tfor (const auto& iter : src)\n\t{\n\t\tlong emoId;\n\t\tif (Emo2Id.find(iter) != Emo2Id.end())\n\t\t\temoId = Emo2Id.at(iter);\n\t\telse\n\t\t\temoId = _wtoi(iter.c_str());\n\t\tauto emoVec = EmoLoader[emoId];\n\t\tfor (size_t i = 0; i < 1024; ++i)\n\t\t\tdst[i] = dst[i] + (emoVec[i] - dst[i]) / (float)(mul + 1ull);\n\t\t++mul;\n\t}\n\treturn dst;\n}\n\nstd::tuple<bool, std::vector<std::wstring>, std::vector<std::wstring>, std::vector<int64_t>, std::vector<int64_t>, std::vector<int64_t>, std::vector<size_t>, bool> Vits::PreProcessSeq(const MoeVSProjectSpace::MoeVSTTSSeq& Seq, int64_t CurLanguageIdx) const\n{\n\tstd::vector<std::wstring> PhonemeSeq, TokenSeq;\n\tstd::vector<int64_t> ToneSeq;\n\tstd::vector<int64_t> LanguageSeq;\n\tstd::vector<int64_t> DurationSeq;\n\tstd::vector<size_t> BertAligSeq;\n\tbool HasBertSeq = false;\n\tbool Skip = false;\n\tif (AddBlank)\n\t\tBertAligSeq.emplace_back(0);\n\n\tstd::vector<MoeVSProjectSpace::MoeVSTTSToken> TmpToken;\n\tconst std::vector<MoeVSProjectSpace::MoeVSTTSToken>* TokensPtr = &Seq.SlicedTokens;\n\tif (BertEnabled && UseBert && Seq.SlicedTokens.empty())\n\t{\n\t\tHasBertSeq = true;\n\t\tif (Seq.LanguageSymbol != \"ZH\")\n\t\t\tTokenSeq = GetTokenizerWithLanguageSymbol(Seq.LanguageSymbol).Tokenize(Seq.TextSeq);\n\t\telse\n\t\t{\n\t\t\tauto NewData = GetTokenizerWithLanguageSymbol(Seq.LanguageSymbol).Tokenize(Seq.TextSeq);\n\t\t\tif (NewData.empty())\n\t\t\t{\n\t\t\t\tSkip = true;\n\t\t\t\treturn { Skip, std::move(PhonemeSeq), std::move(TokenSeq), std::move(ToneSeq), std::move(LanguageSeq), std::move(DurationSeq), std::move(BertAligSeq), HasBertSeq };\n\t\t\t}\n\t\t\tTmpToken.reserve(NewData.size());\n\t\t\tfor (const auto& it : NewData)\n\t\t\t{\n\t\t\t\tMoeVSProjectSpace::MoeVSTTSToken Tok;\n\t\t\t\tTok.Text = it;\n\t\t\t\tTmpToken.emplace_back(std::move(Tok));\n\t\t\t}\n\t\t\tTokensPtr = &TmpToken;\n\t\t}\n\t}\n\n\tif (UseBert && TokensPtr && !TokensPtr->empty())\n\t{\n\t\tsize_t TokensIndex = 1;\n\t\tfor (const auto& iter : *TokensPtr)\n\t\t{\n\t\t\tif (iter.Text.empty())\n\t\t\t{\n\t\t\t\tlogger.log(\"[Info] Skip Empty Slice\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tTokenSeq.emplace_back(iter.Text);\n\t\t\tif (iter.Text == L\"[CLS]\")\n\t\t\t\tcontinue;\n\t\t\tif (iter.Text == L\"[SEP]\")\n\t\t\t\tbreak;\n\t\t\tstd::vector<std::wstring> const* PhonemesPtr;\n\t\t\tstd::vector<std::wstring> TempPhonemes;\n\t\t\tstd::vector<int64_t> TempToneVec;\n\t\t\tif (iter.Phonemes.empty())\n\t\t\t{\n\t\t\t\tstd::vector<std::wstring> TempSeqVec;\n\t\t\t\tauto TempText = iter.Text;\n\t\t\t\tif (TempText == L\"[UNK]\")\n\t\t\t\t\tTempPhonemes = { L\"[UNK]\" };\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (TempText.find(L\"##\") == 0)\n\t\t\t\t\t\tTempText = TempText.substr(2);\n\t\t\t\t\tif (TempText.find(L'▁') == 0)\n\t\t\t\t\t\tTempText = TempText.substr(1);\n\t\t\t\t\tTempPhonemes = CleanText(TempText, Seq.PlaceHolderSymbol, L\"/[WithTone]\" + Seq.AdditionalInfo, Seq.LanguageSymbol);\n\t\t\t\t}\n\t\t\t\tconst int64_t FirstToneIdx = GetTonesBegin(Seq.LanguageSymbol);\n\t\t\t\tauto RtnData = SplitTonesFromTokens(TempPhonemes, iter.Tones, FirstToneIdx, Seq.LanguageSymbol);\n\t\t\t\tTempPhonemes = std::move(std::get<0>(RtnData));\n\t\t\t\tTempToneVec = std::move(std::get<1>(RtnData));\n\t\t\t\tPhonemesPtr = &TempPhonemes;\n\t\t\t}\n\t\t\telse\n\t\t\t\tPhonemesPtr = &iter.Phonemes;\n\n\t\t\tPhonemeSeq.insert(PhonemeSeq.end(), PhonemesPtr->begin(), PhonemesPtr->end());\n\t\t\tif (PhonemesPtr->size() == iter.Language.size())\n\t\t\t\tfor (const auto& LanguageSymbol : iter.Language)\n\t\t\t\t\tLanguageSeq.emplace_back(GetLanguageIdWithLanguageSymbol(LanguageSymbol));\n\t\t\telse\n\t\t\t\tLanguageSeq.insert(LanguageSeq.end(), PhonemesPtr->size(), CurLanguageIdx);\n\t\t\tif (PhonemesPtr->size() == iter.Durations.size())\n\t\t\t\tDurationSeq.insert(DurationSeq.end(), iter.Durations.begin(), iter.Durations.end());\n\t\t\tif (PhonemesPtr->size() == iter.Tones.size())\n\t\t\t\tToneSeq.insert(ToneSeq.end(), iter.Tones.begin(), iter.Tones.end());\n\t\t\telse if (PhonemesPtr->size() == TempToneVec.size())\n\t\t\t\tToneSeq.insert(ToneSeq.end(), TempToneVec.begin(), TempToneVec.end());\n\t\t\telse\n\t\t\t\tToneSeq.insert(ToneSeq.end(), PhonemesPtr->size(), GetTonesBegin(Seq.LanguageSymbol));\n\t\t\tfor (size_t idxl = 0; idxl < PhonemesPtr->size(); ++idxl)\n\t\t\t{\n\t\t\t\tBertAligSeq.emplace_back(TokensIndex);\n\t\t\t\tif (AddBlank)\n\t\t\t\t\tBertAligSeq.emplace_back(TokensIndex);\n\t\t\t}\n\t\t\t++TokensIndex;\n\t\t}\n\t\tif ((AddBlank && BertAligSeq.size() == PhonemeSeq.size() * 2 + 1) || (!AddBlank && BertAligSeq.size() == PhonemeSeq.size()))\n\t\t\tHasBertSeq = true;\n\t\telse\n\t\t\tHasBertSeq = false;\n\t}\n\telse if (!Seq.TextSeq.empty())\n\t{\n\t\tPhonemeSeq = CleanText(Seq.TextSeq, Seq.PlaceHolderSymbol, L\"/[WithTone]\" + Seq.AdditionalInfo, Seq.LanguageSymbol);\n\t\tLanguageSeq = std::vector(PhonemeSeq.size(), CurLanguageIdx);\n\t\tauto RtnVal = SplitTonesFromTokens(PhonemeSeq, {}, GetTonesBegin(Seq.LanguageSymbol), Seq.LanguageSymbol);\n\t\tPhonemeSeq = std::move(std::get<0>(RtnVal));\n\t\tToneSeq = std::move(std::get<1>(RtnVal));\n\t}\n\telse\n\t{\n\t\tlogger.log(\"[Info] Skip Empty TextSeq\");\n\t\tSkip = true;\n\t}\n\treturn { Skip, std::move(PhonemeSeq), std::move(TokenSeq), std::move(ToneSeq), std::move(LanguageSeq), std::move(DurationSeq), std::move(BertAligSeq), HasBertSeq };\n}\n\nstd::vector<Ort::Value> Vits::GetBertFeature(size_t IndexOfBert, const std::vector<std::wstring>& TokenSeq, Ort::Session* CurBertSession) const\n{\n\tauto input_ids = GetTokenizer(GetBertNameWithIndex((int64_t)IndexOfBert))(TokenSeq);\n\tstd::vector<int64_t> attention_mask(input_ids.size(), 1), token_type_ids(input_ids.size(), 0);\n\tconst int64_t AttentionShape[2] = { 1, (int64_t)input_ids.size() };\n\tstd::vector<Ort::Value> AttentionInput, AttentionOutput;\n\tAttentionInput.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info, input_ids.data(), input_ids.size(), AttentionShape, 2));\n\tif (CurBertSession->GetInputCount() == 3)\n\t\tAttentionInput.emplace_back(Ort::Value::CreateTensor(*memory_info, attention_mask.data(), attention_mask.size(), AttentionShape, 2));\n\tAttentionInput.emplace_back(Ort::Value::CreateTensor(\n\t\t*memory_info, token_type_ids.data(), token_type_ids.size(), AttentionShape, 2));\n\ttry\n\t{\n\t\tAttentionOutput = CurBertSession->Run(Ort::RunOptions{ nullptr },\n\t\t\tBertInputNames.data(),\n\t\t\tAttentionInput.data(),\n\t\t\tCurBertSession->GetInputCount(),\n\t\t\tBertOutputNames.data(),\n\t\t\t1);\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Bert\\n\") + e.what()))\n\t}\n\treturn AttentionOutput;\n}\n\nstd::vector<int16_t> Vits::Infer(const MoeVSProjectSpace::MoeVSTTSSeq& Seq) const\n{\n\tstd::vector<int16_t> PCMDATA;\n\tauto CurLanguageIdx = GetLanguageIdWithLanguageSymbol(Seq.LanguageSymbol);\n\n\tauto PreprocessedSeq = PreProcessSeq(Seq, CurLanguageIdx);\n\tbool Skip = std::get<0>(PreprocessedSeq);\n\tauto PhonemeSeq = std::move(std::get<1>(PreprocessedSeq));\n\tauto TokenSeq = std::move(std::get<2>(PreprocessedSeq));\n\tstd::vector<int64_t> ToneSeq = std::move(std::get<3>(PreprocessedSeq));\n\tauto LanguageSeq = std::move(std::get<4>(PreprocessedSeq));\n\tauto DurationSeq = std::move(std::get<5>(PreprocessedSeq));\n\tauto BertAligSeq = std::move(std::get<6>(PreprocessedSeq));\n\tbool HasBertSeq = std::get<7>(PreprocessedSeq);\n\n\tif (PhonemeSeq.empty() || Skip)\n\t{\n\t\tlogger.log(\"[Info] Skip Empty Seq\");\n\t\treturn {};\n\t}\n\n\tstd::vector<Ort::Value> EncoderInputs, EncoderOutputs;\n\n\tstd::mt19937 gen(static_cast<unsigned int>(Seq.Seed));\n\tstd::normal_distribution FloatRandFn(0.f, 1.f);\n\n\tstd::vector<int64_t> TextSeq = CleanedSeq2Indices(PhonemeSeq);\n\tconst int64_t TextSeqShape[2] = { 1,(int64_t)TextSeq.size() };\n\n\tint64_t TextSeqLength[] = { TextSeqShape[1] };\n\tconstexpr int64_t LengthShape[1] = { 1 };\n\n\t//Indices Seq\n\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t*memory_info, TextSeq.data(), TextSeqLength[0], TextSeqShape, 2));\n\n\t//Indices Length\n\tif (UseLength)\n\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, TextSeqLength, 1, LengthShape, 1));\n\n\t//Emotional Vits\n\tstd::vector<float> EmotionVector;\n\tconstexpr int64_t EmotionShape[1] = { 1024 };\n\tif (Emotion)\n\t{\n\t\tEmotionVector = GetEmotionVector(Seq.EmotionPrompt);\n\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, EmotionVector.data(), 1024, EmotionShape, 1));\n\t}\n\n\t//Tone Seq\n\tstd::vector ToneIn(TextSeq.size(), 0i64);\n\tif (UseTone)\n\t{\n\t\tif (ToneIn.size() == ToneSeq.size())\n\t\t\tToneIn = ToneSeq;\n\t\telse if (AddBlank && ToneIn.size() == ToneSeq.size() * 2 + 1)\n\t\t\tfor (size_t i = 1; i < ToneIn.size(); i += 2)\n\t\t\t\tToneIn[i] = ToneSeq[i / 2];\n\t\telse if (ToneIn.size() * 2 + 1 == ToneSeq.size())\n\t\t\tfor (size_t i = 1; i < ToneSeq.size(); i += 2)\n\t\t\t\tToneIn[i / 2] = ToneSeq[i];\n\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, ToneIn.data(), TextSeqLength[0], TextSeqShape, 2));\n\t}\n\n\t//Language Seq\n\tstd::vector LanguageIn(TextSeq.size(), CurLanguageIdx);\n\tif (UseLanguage)\n\t{\n\t\tif (LanguageIn.size() == LanguageSeq.size())\n\t\t\tLanguageIn = LanguageSeq;\n\t\telse if (AddBlank && LanguageIn.size() == LanguageSeq.size() * 2 + 1)\n\t\t\tfor (size_t i = 1; i < LanguageIn.size(); i += 2)\n\t\t\t{\n\t\t\t\tLanguageIn[i] = LanguageSeq[i / 2];\n\t\t\t\tLanguageIn[i - 1] = LanguageSeq[i / 2];\n\t\t\t}\n\t\telse if (LanguageIn.size() * 2 + 1 == LanguageSeq.size())\n\t\t\tfor (size_t i = 1; i < LanguageSeq.size(); i += 2)\n\t\t\t\tLanguageIn[i / 2] = LanguageSeq[i];\n\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(\n\t\t\t*memory_info, LanguageIn.data(), TextSeqLength[0], TextSeqShape, 2));\n\t}\n\n\t//Bert Seqs\n\tstd::vector BertVecs(Index2BertName.size(), std::vector<float>(0));\n\tstd::vector<int64_t[2]> BertShapes(Index2BertName.size());\n\tif (UseBert)\n\t{\n\t\tfor (size_t IndexOfBert = 0; IndexOfBert < Index2BertName.size(); ++IndexOfBert)\n\t\t{\n\t\t\tauto& BertData = BertVecs[IndexOfBert];\n\t\t\tauto& BertShape = BertShapes[IndexOfBert];\n\t\t\tBertShape[0] = TextSeqLength[0];\n\t\t\tconst auto CurBertSession = GetBertModel(GetBertNameWithIndex((int64_t)IndexOfBert));\n\t\t\tif (CurBertSession &&\n\t\t\t\tIndexOfBert == size_t(GetBertIdWithLanguageSymbol(Seq.LanguageSymbol)) &&\n\t\t\t\tBertEnabled &&\n\t\t\t\tHasBertSeq)\n\t\t\t{\n\t\t\t\tconst auto SeqBert = GetBertFeature(IndexOfBert, TokenSeq, CurBertSession);\n\t\t\t\tint64_t BertSize = SeqBert[0].GetTensorTypeAndShapeInfo().GetShape().back();\n\t\t\t\tBertShape[1] = BertSize;\n\t\t\t\tBertData.resize(BertShape[1] * BertShape[0]);\n\t\t\t\tconst auto AttnData = SeqBert[0].GetTensorData<float>();\n\t\t\t\tif (BertAligSeq.size() == 1)\n\t\t\t\t\tBertAligSeq = GetAligments(TextSeqLength[0], SeqBert[0].GetTensorTypeAndShapeInfo().GetShape()[0] - 2);\n\t\t\t\tfor (int64_t IndexOfSrcVector = 0; IndexOfSrcVector < TextSeqLength[0]; ++IndexOfSrcVector)\n\t\t\t\t\tmemcpy(BertData.data() + IndexOfSrcVector * BertSize, AttnData + (BertAligSeq[IndexOfSrcVector]) * BertSize, BertSize * sizeof(float));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tBertShape[1] = DefBertSize;\n\t\t\t\tBertData.resize(BertShape[1] * BertShape[0], 0.f);\n\t\t\t}\n\t\t\tEncoderInputs.emplace_back(Ort::Value::CreateTensor(\n\t\t\t\t*memory_info, BertData.data(), BertData.size(), BertShape, 2));\n\t\t}\n\t}\n\n\t//Clap Emotion Seq\n\tauto ClapData = std::vector(512, 0.f);\n\tint64_t ClapShape[2] = { 512, 1 };\n\t\n\tif (UseClap)\n\t{\n\t\tconst auto CurClapSession = GetClapModel(ClapName);\n\t\tstd::vector<Ort::Value> ClapInput;\n\t\tstd::wstring ClapSeq;\n\t\tif (CurClapSession && !ClapSeq.empty())\n\t\t{\n\t\t\tfor (const auto& itt : Seq.EmotionPrompt)\n\t\t\t\tClapSeq += itt + L\" \";\n\t\t\tstd::vector<Ort::Value> ClapOutput;\n\t\t\tconst auto& CurClapTokenizer = GetTokenizer(ClapName);\n\t\t\tauto input_ids = CurClapTokenizer(CurClapTokenizer.Tokenize(ClapSeq), true);\n\t\t\tstd::vector<int64_t> attention_mask(input_ids.size(), 1);\n\t\t\tint64_t AttentionShape[2] = { 1, (int64_t)input_ids.size() };\n\t\t\tClapInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t\t*memory_info, input_ids.data(), input_ids.size(), AttentionShape, 2));\n\t\t\tClapInput.emplace_back(Ort::Value::CreateTensor(\n\t\t\t\t*memory_info, attention_mask.data(), attention_mask.size(), AttentionShape, 2));\n\t\t\ttry\n\t\t\t{\n\t\t\t\tClapOutput = CurClapSession->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tBertInputNames.data(),\n\t\t\t\t\tClapInput.data(),\n\t\t\t\t\tCurClapSession->GetInputCount(),\n\t\t\t\t\tBertOutputNames.data(),\n\t\t\t\t\t1);\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: Clap\\n\") + e.what()))\n\t\t\t}\n\t\t\tClapData = { ClapOutput[0].GetTensorData<float>(),ClapOutput[0].GetTensorData<float>() + 512 };\n\t\t}\n\t\tEncoderInputs.emplace_back(Ort::Value::CreateTensor(*memory_info, ClapData.data(), ClapData.size(), ClapShape, 2));\n\t}\n\n\tint64_t VQIndices[] = { 0 };\n\tint64_t SidIndices[] = { GetSpeakerIdWithSpeakerName(Seq.SpeakerName)};\n\n\tstd::vector<float> GEmbidding;\n\tstd::vector<int64_t> GOutShape;\n\tif (sessionEmb)\n\t{\n\t\tauto SpeakerMixData = Seq.SpeakerMix;\n\t\tif (!SpeakerMixData.empty() && SpeakerCount > 1)\n\t\t{\n\t\t\tLinearCombination(SpeakerMixData);\n\t\t\tint64_t csid = 0;\n\t\t\tfor (const auto& CharaP : SpeakerMixData)\n\t\t\t{\n\t\t\t\tstd::vector<Ort::Value> EmbiddingInput;\n\t\t\t\tstd::vector<Ort::Value> EmbiddingOutput;\n\t\t\t\tif (csid >= SpeakerCount)\n\t\t\t\t\tbreak;\n\t\t\t\tif (CharaP < 0.0001f)\n\t\t\t\t{\n\t\t\t\t\t++csid;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tint64_t Character[1] = { csid };\n\t\t\t\tEmbiddingInput.push_back(Ort::Value::CreateTensor(\n\t\t\t\t\t*memory_info, Character, 1, LengthShape, 1));\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tEmbiddingOutput = sessionEmb->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\t\tEmbiddingInputNames.data(),\n\t\t\t\t\t\tEmbiddingInput.data(),\n\t\t\t\t\t\tEmbiddingInput.size(),\n\t\t\t\t\t\tEmbiddingOutputNames.data(),\n\t\t\t\t\t\tEmbiddingOutputNames.size());\n\t\t\t\t}\n\t\t\t\tcatch (Ort::Exception& e)\n\t\t\t\t{\n\t\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: emb\\n\") + e.what()))\n\t\t\t\t}\n\t\t\t\tconst auto GOutCount = EmbiddingOutput[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\t\t\tif (GOutShape.empty())\n\t\t\t\t{\n\t\t\t\t\tGEmbidding = std::vector(EmbiddingOutput[0].GetTensorData<float>(), EmbiddingOutput[0].GetTensorData<float>() + GOutCount);\n\t\t\t\t\tGOutShape = EmbiddingOutput[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\t\t\t\tGOutShape.emplace_back(1);\n\t\t\t\t\tfor (auto idx : GEmbidding)\n\t\t\t\t\t\tidx *= float(CharaP);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (size_t i = 0; i < GOutCount; ++i)\n\t\t\t\t\t\tGEmbidding[i] += EmbiddingOutput[0].GetTensorData<float>()[i] * float(CharaP);\n\t\t\t\t++csid;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tstd::vector<Ort::Value> EmbiddingInput;\n\t\t\tstd::vector<Ort::Value> EmbiddingOutput;\n\t\t\tEmbiddingInput.push_back(Ort::Value::CreateTensor(\n\t\t\t\t*memory_info, SidIndices, 1, LengthShape, 1));\n\t\t\ttry\n\t\t\t{\n\t\t\t\tEmbiddingOutput = sessionEmb->Run(Ort::RunOptions{ nullptr },\n\t\t\t\t\tEmbiddingInputNames.data(),\n\t\t\t\t\tEmbiddingInput.data(),\n\t\t\t\t\tEmbiddingInput.size(),\n\t\t\t\t\tEmbiddingOutputNames.data(),\n\t\t\t\t\tEmbiddingOutputNames.size());\n\t\t\t}\n\t\t\tcatch (Ort::Exception& e)\n\t\t\t{\n\t\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: emb\\n\") + e.what()))\n\t\t\t}\n\t\t\tconst auto GOutCount = EmbiddingOutput[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\t\tGEmbidding = std::vector(EmbiddingOutput[0].GetTensorData<float>(), EmbiddingOutput[0].GetTensorData<float>() + GOutCount);\n\t\t\tGOutShape = EmbiddingOutput[0].GetTensorTypeAndShapeInfo().GetShape();\n\t\t\tGOutShape.emplace_back(1);\n\t\t}\n\t\tif (EncoderG)\n\t\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(*memory_info, GEmbidding.data(), GEmbidding.size(), GOutShape.data(), 3));\n\t}\n\n\tif (UseVQ)\n\t{\n\t\tif (!Seq.EmotionPrompt.empty())\n\t\t\tVQIndices[0] = _wtoi64(Seq.EmotionPrompt[0].c_str());\n\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(*memory_info, VQIndices, 1, LengthShape, 1));\n\t\tEncoderInputs.push_back(Ort::Value::CreateTensor(*memory_info, SidIndices, 1, LengthShape, 1));\n\t}\n\n\ttry\n\t{\n\t\tEncoderOutputs = sessionEnc_p->Run(Ort::RunOptions{ nullptr },\n\t\t\tEncoderInputNames.data(),\n\t\t\tEncoderInputs.data(),\n\t\t\tEncoderInputs.size(),\n\t\t\tEncoderOutputNames.data(),\n\t\t\tEncoderOutputNames.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: enc_p\\n\") + e.what()))\n\t}\n\n\tstd::vector<float>\n\t\tm_p(EncoderOutputs[1].GetTensorData<float>(), EncoderOutputs[1].GetTensorData<float>() + EncoderOutputs[1].GetTensorTypeAndShapeInfo().GetElementCount()),\n\t\tlogs_p(EncoderOutputs[2].GetTensorData<float>(), EncoderOutputs[2].GetTensorData<float>() + EncoderOutputs[2].GetTensorTypeAndShapeInfo().GetElementCount()),\n\t\tx_mask(EncoderOutputs[3].GetTensorData<float>(), EncoderOutputs[3].GetTensorData<float>() + EncoderOutputs[3].GetTensorTypeAndShapeInfo().GetElementCount());\n\n\tconst auto xshape = EncoderOutputs[0].GetTensorTypeAndShapeInfo().GetShape();\n\n\tstd::vector w_ceil(TextSeqLength[0], 1.f);\n\tbool enable_dp = false;\n\tif (DurationSeq.size() == w_ceil.size() || DurationSeq.size() == w_ceil.size() / 2)\n\t\tenable_dp = true;\n\n\tconst int64_t zinputShape[3] = { xshape[0],2,xshape[2] };\n\tconst int64_t zinputCount = xshape[0] * xshape[2] * 2;\n\tstd::vector<float> zinput(zinputCount, 0.0);\n\tfor (auto& it : zinput)\n\t\tit = FloatRandFn(gen) * Seq.DurationPredictorNoiseScale;\n\tstd::vector<Ort::Value> DurationPredictorInput;\n\tDurationPredictorInput.push_back(std::move(EncoderOutputs[0]));\n\tDurationPredictorInput.push_back(std::move(EncoderOutputs[3]));\n\tDurationPredictorInput.push_back(Ort::Value::CreateTensor(\n\t\t*memory_info, zinput.data(), zinputCount, zinputShape, 3));\n\tif (sessionEmb)\n\t\tDurationPredictorInput.push_back(Ort::Value::CreateTensor(*memory_info, GEmbidding.data(), GEmbidding.size(), GOutShape.data(), 3));\n\tif (sessionSdp)\n\t{\n\t\tstd::vector<Ort::Value> StochasticDurationPredictorOutput;\n\t\ttry\n\t\t{\n\t\t\tStochasticDurationPredictorOutput = sessionSdp->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tSdpInputNames.data(),\n\t\t\t\tDurationPredictorInput.data(),\n\t\t\t\tDurationPredictorInput.size(),\n\t\t\t\tSdpOutputNames.data(),\n\t\t\t\tSdpOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: dp\\n\") + e.what()))\n\t\t}\n\t\tconst auto w_data = StochasticDurationPredictorOutput[0].GetTensorMutableData<float>();\n\t\tconst auto w_data_length = StochasticDurationPredictorOutput[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\tif (w_data_length != w_ceil.size())\n\t\t\tw_ceil.resize(w_data_length, 0.f);\n\t\tfloat SdpFactor = 1.f - Seq.FactorDpSdp;\n\t\tif (sessionDp)\n\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\tw_ceil[i] = ceil(exp(w_data[i] * SdpFactor) * x_mask[i] * Seq.LengthScale);\n\t\telse\n\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\tw_ceil[i] = ceil(exp(w_data[i]) * x_mask[i] * Seq.LengthScale);\n\t}\n\tif (sessionDp)\n\t{\n\t\tstd::vector<Ort::Value> DurationPredictorOutput;\n\t\tDurationPredictorInput.erase(DurationPredictorInput.begin() + 2);\n\t\ttry\n\t\t{\n\t\t\tDurationPredictorOutput = sessionDp->Run(Ort::RunOptions{ nullptr },\n\t\t\t\tDpInputNames.data(),\n\t\t\t\tDurationPredictorInput.data(),\n\t\t\t\tDurationPredictorInput.size(),\n\t\t\t\tDpOutputNames.data(),\n\t\t\t\tDpOutputNames.size());\n\t\t}\n\t\tcatch (Ort::Exception& e)\n\t\t{\n\t\t\tLibDLVoiceCodecThrow((std::string(\"Locate: dp\\n\") + e.what()))\n\t\t}\n\t\tconst auto w_data = DurationPredictorOutput[0].GetTensorMutableData<float>();\n\t\tconst auto w_data_length = DurationPredictorOutput[0].GetTensorTypeAndShapeInfo().GetElementCount();\n\t\tif (w_data_length != w_ceil.size())\n\t\t\tw_ceil.resize(w_data_length, 0.f);\n\t\tif (sessionSdp)\n\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\tw_ceil[i] += ceil(exp(w_data[i] * Seq.FactorDpSdp) * x_mask[i] * Seq.LengthScale);\n\t\telse\n\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\tw_ceil[i] = ceil(exp(w_data[i]) * x_mask[i] * Seq.LengthScale);\n\t}\n\tif (enable_dp)\n\t{\n\t\tif (DurationSeq.size() == TextSeq.size())\n\t\t\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\t\t\tw_ceil[i] = float(DurationSeq[i]);\n\t\telse if (AddBlank && DurationSeq.size() == TextSeq.size() / 2ull)\n\t\t\tfor (size_t i = 0; i < DurationSeq.size(); ++i)\n\t\t\t\tw_ceil[1 + i * 2] = float(DurationSeq[i]);\n\t}\n\tCustomDurationCallback(w_ceil);\n\tconst auto maskSize = x_mask.size();\n\tfloat y_length_f = 0.0;\n\tint64_t y_length;\n\tfor (size_t i = 0; i < w_ceil.size(); ++i)\n\t\ty_length_f += w_ceil[i];\n\tif (y_length_f < 1.0f)\n\t\ty_length = 1;\n\telse\n\t\ty_length = (int64_t)y_length_f;\n\n\tauto attn = generatePath(w_ceil.data(), y_length, maskSize);\n\tstd::vector logVec(192, std::vector(y_length, 0.0f));\n\tstd::vector mpVec(192, std::vector(y_length, 0.0f));\n\tstd::vector<float> nlogs_pData(192 * y_length);\n\tfor (size_t i = 0; i < static_cast<size_t>(y_length); ++i)\n\t{\n\t\tfor (size_t j = 0; j < 192; ++j)\n\t\t{\n\t\t\tfor (size_t k = 0; k < maskSize; k++)\n\t\t\t{\n\t\t\t\tif (attn[i][k])\n\t\t\t\t{\n\t\t\t\t\tmpVec[j][i] += m_p[j * maskSize + k];\n\t\t\t\t\tlogVec[j][i] += logs_p[j * maskSize + k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tnlogs_pData[j * y_length + i] = mpVec[j][i] + FloatRandFn(gen) * exp(logVec[j][i]) * Seq.NoiseScale;\n\t\t}\n\t}\n\tstd::vector y_mask(y_length, 1.0f);\n\tconst int64_t zshape[3] = { 1,192,y_length };\n\tconst int64_t yshape[3] = { 1,1,y_length };\n\n\tstd::vector<Ort::Value> FlowDecInputs, FlowDecOutputs;\n\n\tFlowDecInputs.push_back(Ort::Value::CreateTensor<float>(\n\t\t*memory_info, nlogs_pData.data(), 192 * y_length, zshape, 3));\n\tFlowDecInputs.push_back(Ort::Value::CreateTensor<float>(\n\t\t*memory_info, y_mask.data(), y_length, yshape, 3));\n\tif (sessionEmb)\n\t\tFlowDecInputs.push_back(Ort::Value::CreateTensor<float>(\n\t\t\t*memory_info, GEmbidding.data(), GEmbidding.size(), GOutShape.data(), 3));\n\n\ttry\n\t{\n\t\tFlowDecOutputs = sessionFlow->Run(Ort::RunOptions{ nullptr },\n\t\t\tFlowInputNames.data(),\n\t\t\tFlowDecInputs.data(),\n\t\t\tFlowDecInputs.size(),\n\t\t\tFlowOutputNames.data(),\n\t\t\tFlowOutputNames.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: dec & flow\\n\") + e.what()))\n\t}\n\tFlowDecInputs[0] = std::move(FlowDecOutputs[0]);\n\tif (sessionEmb)\n\t\tFlowDecInputs[1] = std::move(FlowDecInputs[2]);\n\tFlowDecInputs.pop_back();\n\ttry\n\t{\n\n\t\tFlowDecOutputs = sessionDec->Run(Ort::RunOptions{ nullptr },\n\t\t\tDecInputNames.data(),\n\t\t\tFlowDecInputs.data(),\n\t\t\tFlowDecInputs.size(),\n\t\t\tDecOutputNames.data(),\n\t\t\tDecOutputNames.size());\n\t}\n\tcatch (Ort::Exception& e)\n\t{\n\t\tLibDLVoiceCodecThrow((std::string(\"Locate: dec & flow\\n\") + e.what()))\n\t}\n\tconst auto shapeOut = FlowDecOutputs[0].GetTensorTypeAndShapeInfo().GetShape();\n\tconst auto outData = FlowDecOutputs[0].GetTensorData<float>();\n\tPCMDATA.reserve(shapeOut[2] * 2);\n\tfor (int bbb = 0; bbb < shapeOut[2]; bbb++)\n\t\tPCMDATA.emplace_back(static_cast<int16_t>(outData[bbb] * 32768.0f));\n\treturn PCMDATA;\n}\n\nstd::vector<std::vector<int16_t>> Vits::Inference(const std::vector<MoeVSProjectSpace::MoeVSTTSSeq>& _Input) const\n{\n\tstd::vector<std::vector<int16_t>> PCM;\n\tPCM.reserve(_Input.size());\n\tlogger.log(\"[Inference] Vits Inference Begin\");\n\tsize_t proc = 0;\n\t_callback(proc, _Input.size());\n\tfor (const auto& Seq : _Input)\n\t{\n\t\t_callback(proc++, _Input.size());\n\t\tif (Seq.RestTime < 0.f || &Seq == &_Input.front())\n\t\t\tPCM.emplace_back();\n\n\t\tconst auto _Audio = Infer(Seq);\n\t\tauto& BackOfPCMDatas = PCM.back();\n\t\tif (Seq.RestTime > 0.f)\n\t\t\tBackOfPCMDatas.insert(BackOfPCMDatas.end(), size_t(double(Seq.RestTime) * double(_samplingRate)), 0);\n\t\tBackOfPCMDatas.insert(BackOfPCMDatas.end(), _Audio.begin(), _Audio.end());\n\t}\n\t_callback(proc, _Input.size());\n\tlogger.log(\"[Inference] Vits Inference Fin\");\n\treturn PCM;\n}\n\nMoeVoiceStudioCoreEnd"
  },
  {
    "path": "libtts/Modules/Modules.cpp",
    "content": "﻿#include \"Modules.hpp\"\n\nnamespace MoeVSModuleManager\n{\n\tbool MoeVoiceStudioCoreInitStat = false;\n\n\tMoeVoiceStudioCore::TextToSpeech* CurTextToSpeechModel = nullptr;\n\n\tvoid MoeVoiceStudioCoreInitSetup()\n\t{\n\t\tif (MoeVoiceStudioCoreInitStat)\n\t\t\treturn;\n\t\tconst auto BasicCleanerDir = GetCurrentFolder() + L\"/G2P/BasicCleaner.dll\";\n\t\tif (_waccess(BasicCleanerDir.c_str(), 0) != -1)\n\t\t{\n\t\t\tconst auto Cleaner = MoeVSG2P::GetDefCleaner();\n\t\t\tCleaner->loadG2p(BasicCleanerDir);\n\t\t\tCleaner->GetCleaner().LoadDict(GetCurrentFolder() + L\"/G2P\");\n\t\t\tCleaner->loadDict(GetCurrentFolder() + L\"/Dict/BasicDict.json\");\n\t\t}\n\t\tMoeVoiceStudioCoreInitStat = true;\n\t}\n\n\tMoeVoiceStudioCore::TextToSpeech* GetCurTTSModel()\n\t{\n\t\treturn CurTextToSpeechModel;\n\t}\n\n\tvoid UnloadTTSModel()\n\t{\n\t\tdelete CurTextToSpeechModel;\n\t\tCurTextToSpeechModel = nullptr;\n\t\tSamplingRate = 32000;\n\t\tSpeakerCount = 0;\n\t}\n\n\tvoid LoadTTSModel(const MJson& Config,\n\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\n\t\tint ProviderID, int NumThread, int DeviceID,\n\t\tconst MoeVoiceStudioCore::TextToSpeech::DurationCallback& DurationCallback)\n\t{\n\t\tUnloadTTSModel();\n\t\tif (Config[\"Type\"].GetString() == \"Tacotron\" || Config[\"Type\"].GetString() == \"Tacotron2\")\n\t\t\tthrow std::exception(\"Tacotron Not Support Yet\");\n\t\tif (Config[\"Type\"].GetString() == \"GPT-SoVits\")\n\t\t{\n\t\t\tMoeVoiceStudioCore::DestoryAllBerts();\n\t\t\tCurTextToSpeechModel = dynamic_cast<MoeVoiceStudioCore::TextToSpeech*>(\n\t\t\t\tnew MoeVoiceStudioCore::GptSoVits(\n\t\t\t\t\tConfig, Callback, DurationCallback,\n\t\t\t\t\tMoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders(ProviderID),\n\t\t\t\t\tDeviceID, NumThread\n\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tCurTextToSpeechModel = dynamic_cast<MoeVoiceStudioCore::TextToSpeech*>(\n\t\t\t   new MoeVoiceStudioCore::Vits(\n\t\t\t\t   Config, Callback, DurationCallback,\n\t\t\t\t   MoeVoiceStudioCore::MoeVoiceStudioModule::ExecutionProviders(ProviderID),\n\t\t\t\t   DeviceID, NumThread\n\t\t\t   )\n\t\t\t   );\n\t\t}\n\t\tSamplingRate = CurTextToSpeechModel->GetSamplingRate();\n\t}\n\n}"
  },
  {
    "path": "libtts/Modules/Modules.hpp",
    "content": "﻿/**\n * FileName: Modules.hpp\n * Note: MoeVoiceStudioCore组件管理\n *\n * Copyright (C) 2022-2023 NaruseMioShirakana (shirakanamio@foxmail.com)\n *\n * This file is part of MoeVoiceStudioCore library.\n * MoeVoiceStudioCore library is free software: you can redistribute it and/or modify it under the terms of the\n * GNU Affero General Public License as published by the Free Software Foundation, either version 3\n * of the License, or any later version.\n *\n * MoeVoiceStudioCore library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n * See the GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License along with Foobar.\n * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.\n *\n * date: 2022-10-17 Create\n*/\n\n#pragma once\n#include \"Models/header/Vits.hpp\"\n#include \"Models/header/GPT-SoVits.hpp\"\n\nnamespace MoeVSModuleManager\n{\n\tinline int64_t SamplingRate = 32000;\n\tinline int64_t SpeakerCount = 0;\n\n\t/**\n\t * \\brief 初始化所有组件\n\t */\n\tvoid MoeVoiceStudioCoreInitSetup();\n\n\t/**\n\t * \\brief 获取当前模型\n\t * \\return 当前模型的指针\n\t */\n\tMoeVoiceStudioCore::TextToSpeech* GetCurTTSModel();\n\n\t/**\n\t * \\brief 卸载模型\n\t */\n\tvoid UnloadTTSModel();\n\n\t/**\n\t * \\brief 载入模型\n\t * \\param Config 一个MJson类的实例（配置文件的JSON）\n\t * \\param Callback 进度条回调函数\n\t * \\param ProviderID Provider在所有Provider中的ID（遵循Enum Class的定义）\n\t * \\param NumThread CPU推理时的线程数（最好设置高一点，GPU不支持的算子可能也会Fallback到CPU）\n\t * \\param DeviceID GPU设备ID\n\t * \\param DurationCallback 时长回调\n\t */\n\tvoid LoadTTSModel(const MJson& Config,\n\t\tconst MoeVoiceStudioCore::MoeVoiceStudioModule::ProgressCallback& Callback,\n\t\tint ProviderID, int NumThread, int DeviceID,\n\t\tconst MoeVoiceStudioCore::TextToSpeech::DurationCallback& DurationCallback = [&](std::vector<float>&) {});\n}\n\nnamespace MoeVSRename\n{\n\tusing Vits = MoeVoiceStudioCore::Vits;\n}\n\n"
  },
  {
    "path": "libtts/Modules/README.md",
    "content": "# Example\n```c++\n#include \"Modules/Models/header/Vits.hpp\"\n\nint main(){\n  rapidjson::Document Config;\n  Config.Parse(\"Your Config\");\n  \n  //Progress bar\n  InferClass::BaseModelType::callback a_callback = [](size_t a, size_t b) {std::cout << std::to_string((float)a * 100.f / (float)b) << \"%\\n\"; };\n  \n  //return params for inference\n  InferClass::BaseModelType::callback_params b_callback = []()  \n\t{\n\t\tauto cbaaa = InferClass::InferConfigs();\n\t\tcbaaa.kmeans_rate = 0.5;\n\t\tcbaaa.keys = 0;\n\t\treturn cbaaa;\n\t};\n  \n  //modify duration per phoneme\n  InferClass::TTS::DurationCallback c_callback = [](std::vector<float>&) {};\n  \n  std::vector<int16_t> output;\n  try\n  {\n  \tstd::wstring inp(\"watashinoonaniomitekudasai\");\n  \tauto model = dynamic_cast<InferClass::BaseModelType*>(new InferClass::VitsSvc(modConfigJson, a_callback, b_callback));\n    \n  \toutput = model->Inference(inp);\n    \n  \tWav outWav(model->GetSamplingRate(), output.size() * 2, output.data());\n  \toutWav.Writef(L\"test.wav\");\n    \n  \tdelete model;\n  }\n  catch(std::exception& e)\n  {\n  \tstd::cout << e.what();\n  }\n}\n\n```\n"
  },
  {
    "path": "libtts/Modules/StringPreprocess.hpp",
    "content": "﻿#pragma once\n#include <codecvt>\n#include <vector>\n#include <string>\n#ifdef _WIN32\n#include <Windows.h>\n#else\n#error\n#endif\n\ninline std::string to_utf8_string(const std::wstring& input)\n{\n\tstd::vector<char> ByteString(input.length() * 6);\n\tWideCharToMultiByte(\n\t\tCP_UTF8,\n\t\t0,\n\t\tinput.c_str(),\n\t\tint(input.length()),\n\t\tByteString.data(),\n\t\tint(ByteString.size()),\n\t\tnullptr,\n\t\tnullptr\n\t);\n\treturn ByteString.data();\n}\n\ninline std::string to_ansi_string(const std::wstring& input)\n{\n\tstd::vector<char> ByteString(input.length() * 6);\n\tWideCharToMultiByte(\n\t\tCP_ACP,\n\t\t0,\n\t\tinput.c_str(),\n\t\tint(input.length()),\n\t\tByteString.data(),\n\t\tint(ByteString.size()),\n\t\tnullptr,\n\t\tnullptr\n\t);\n\treturn ByteString.data();\n}\n\ninline std::wstring to_wide_string(const std::string& input)\n{\n\tstd::vector<wchar_t> WideString(input.length() * 2);\n\tMultiByteToWideChar(\n\t\tCP_UTF8,\n\t\t0,\n\t\tinput.c_str(),\n\t\tint(input.length()),\n\t\tWideString.data(),\n\t\tint(WideString.size())\n\t);\n\treturn WideString.data();\n}\n\ninline std::string to_byte_string(const std::wstring& input)\n{\n\treturn to_utf8_string(input);\n}\n\ntemplate <typename T>\nstd::wstring vector_to_string(const std::vector<T>& vector)\n{\n\tstd::wstring vecstr = L\"[\";\n\tfor (const auto& it : vector)\n\t{\n\t\tstd::wstring TmpStr = std::to_wstring(it);\n\t\tif ((std::is_same_v<T, float> || std::is_same_v<T, double>) && TmpStr.find(L'.') != std::string::npos)\n\t\t{\n\t\t\twhile (TmpStr.back() == L'0')\n\t\t\t\tTmpStr.pop_back();\n\t\t\tif (TmpStr.back() == L'.')\n\t\t\t\tTmpStr += L\"0\";\n\t\t}\n\t\tvecstr += TmpStr + L\", \";\n\t}\n\tif (vecstr.length() > 2)\n\t\tvecstr = vecstr.substr(0, vecstr.length() - 2);\n\tvecstr += L']';\n\treturn vecstr;\n}\n\ninline std::wstring string_vector_to_string(const std::vector<std::string>& vector)\n{\n\tstd::wstring vecstr = L\"[\";\n\tfor (const auto& it : vector)\n\t\tif (!it.empty())\n\t\t\tvecstr += L'\\\"' + to_wide_string(it) + L\"\\\", \";\n\tif (vecstr.length() > 2)\n\t\tvecstr = vecstr.substr(0, vecstr.length() - 2);\n\tvecstr += L']';\n\treturn vecstr;\n}\n\ninline std::wstring wstring_vector_to_string(const std::vector<std::wstring>& vector)\n{\n\tstd::wstring vecstr = L\"[\";\n\tfor (const auto& it : vector)\n\t\tif (!it.empty())\n\t\t\tvecstr += L'\\\"' + it + L\"\\\", \";\n\tif (vecstr.length() > 2)\n\t\tvecstr = vecstr.substr(0, vecstr.length() - 2);\n\tvecstr += L']';\n\treturn vecstr;\n}"
  },
  {
    "path": "libtts/dllmain.cpp",
    "content": "﻿// dllmain.cpp : 定义 DLL 应用程序的入口点。\n#include \"windows.h\"\n\nBOOL APIENTRY DllMain( HMODULE hModule,\n                       DWORD  ul_reason_for_call,\n                       LPVOID lpReserved\n                     )\n{\n    switch (ul_reason_for_call)\n    {\n    case DLL_PROCESS_ATTACH:\n    case DLL_THREAD_ATTACH:\n    case DLL_THREAD_DETACH:\n    case DLL_PROCESS_DETACH:\n        break;\n    }\n    return TRUE;\n}\n\n"
  },
  {
    "path": "libtts/framework.h",
    "content": "﻿#pragma once\n#ifdef LIBTTS_EXPORTS\n#define LibTTSApi __declspec(dllexport)\n#else\n#define LibTTSApi __declspec(dllimport)\n#endif"
  },
  {
    "path": "libtts/libtts.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"DebugLib|Win32\">\n      <Configuration>DebugLib</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DebugLib|x64\">\n      <Configuration>DebugLib</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseLib|Win32\">\n      <Configuration>ReleaseLib</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseLib|x64\">\n      <Configuration>ReleaseLib</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <VCProjectVersion>16.0</VCProjectVersion>\n    <Keyword>Win32Proj</Keyword>\n    <ProjectGuid>{3ca188f3-e511-486c-ac28-ccfc6d893861}</ProjectGuid>\n    <RootNamespace>libtts</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)libtts\\Modules\\Lib\\World\\src\\world;$(SolutionDir)libtts\\Modules\\Lib\\MJson</IncludePath>\n    <OutDir>$(SolutionDir)$(Platform)\\libtts\\$(Configuration)\\</OutDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)libtts\\Modules\\Lib\\World\\src\\world;$(SolutionDir)libtts\\Modules\\Lib\\MJson</IncludePath>\n    <OutDir>$(SolutionDir)$(Platform)\\libtts\\$(Configuration)\\</OutDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)libtts\\Modules\\Lib\\World\\src\\world;$(SolutionDir)libtts\\Modules\\Lib\\MJson</IncludePath>\n    <OutDir>$(SolutionDir)$(Platform)\\libtts\\$(Configuration)\\</OutDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)libtts\\Modules\\Lib\\World\\src\\world;$(SolutionDir)libtts\\Modules\\Lib\\MJson</IncludePath>\n    <OutDir>$(SolutionDir)$(Platform)\\libtts\\$(Configuration)\\</OutDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)libtts\\Modules\\Lib\\World\\src\\world;$(SolutionDir)libtts\\Modules\\Lib\\MJson</IncludePath>\n    <OutDir>$(SolutionDir)$(Platform)\\libtts\\$(Configuration)\\</OutDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)libtts\\Modules\\Lib\\World\\src\\world;$(SolutionDir)libtts\\Modules\\Lib\\MJson</IncludePath>\n    <OutDir>$(SolutionDir)$(Platform)\\libtts\\$(Configuration)\\</OutDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)libtts\\Modules\\Lib\\World\\src\\world;$(SolutionDir)libtts\\Modules\\Lib\\MJson</IncludePath>\n    <OutDir>$(SolutionDir)$(Platform)\\libtts\\$(Configuration)\\</OutDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)libtts\\Modules\\Lib\\World\\src\\world;$(SolutionDir)libtts\\Modules\\Lib\\MJson</IncludePath>\n    <OutDir>$(SolutionDir)$(Platform)\\libtts\\$(Configuration)\\</OutDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|x64'\">\n    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\build\\native\\include;$(SolutionDir)libtts\\Modules\\Lib\\World\\src\\world;$(SolutionDir)libtts\\Modules\\Lib\\MJson</IncludePath>\n    <OutDir>$(SolutionDir)$(Platform)\\libtts\\$(Configuration)\\</OutDir>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>WIN32;_DEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>Use</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>WIN32;_DEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>Use</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>WIN32;NDEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>Use</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>WIN32;NDEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>Use</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>_DEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <LanguageStandard>stdcpp17</LanguageStandard>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native</AdditionalLibraryDirectories>\n      <AdditionalDependencies>onnxruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>_DEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <LanguageStandard>stdcpp20</LanguageStandard>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native</AdditionalLibraryDirectories>\n      <AdditionalDependencies>onnxruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>_DEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <LanguageStandard>stdcpp20</LanguageStandard>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native</AdditionalLibraryDirectories>\n      <AdditionalDependencies>onnxruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>_DEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <LanguageStandard>stdcpp20</LanguageStandard>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native</AdditionalLibraryDirectories>\n      <AdditionalDependencies>onnxruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>_DEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <LanguageStandard>stdcpp20</LanguageStandard>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native</AdditionalLibraryDirectories>\n      <AdditionalDependencies>onnxruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>_DEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <LanguageStandard>stdcpp20</LanguageStandard>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native</AdditionalLibraryDirectories>\n      <AdditionalDependencies>onnxruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugLib|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>_DEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <LanguageStandard>stdcpp17</LanguageStandard>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native</AdditionalLibraryDirectories>\n      <AdditionalDependencies>onnxruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>NDEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <LanguageStandard>stdcpp17</LanguageStandard>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native</AdditionalLibraryDirectories>\n      <AdditionalDependencies>onnxruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseLib|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>NDEBUG;LIBTTS_EXPORTS;_WINDOWS;_USRDLL;MOEVSDMLPROVIDER;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <LanguageStandard>stdcpp17</LanguageStandard>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableUAC>false</EnableUAC>\n      <AdditionalLibraryDirectories>$(SolutionDir)Lib\\OnnxRuntimeDmlProvider\\runtimes\\win-x64\\native</AdditionalLibraryDirectories>\n      <AdditionalDependencies>onnxruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClInclude Include=\"Api\\NativeApi.h\" />\n    <ClInclude Include=\"framework.h\" />\n    <ClInclude Include=\"Modules\\InferTools\\G2P\\MoeVSG2P.hpp\" />\n    <ClInclude Include=\"Modules\\InferTools\\inferTools.hpp\" />\n    <ClInclude Include=\"Modules\\Lib\\MJson\\MJson.h\" />\n    <ClInclude Include=\"Modules\\Lib\\MJson\\yyjson.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\cheaptrick.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\codec.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\common.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\constantnumbers.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\d4c.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\dio.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\fft.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\harvest.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\macrodefinitions.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\matlabfunctions.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\stonemask.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\synthesis.h\" />\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\synthesisrealtime.h\" />\n    <ClInclude Include=\"Modules\\Logger\\MoeSSLogger.hpp\" />\n    <ClInclude Include=\"Modules\\Models\\EnvManager.hpp\" />\n    <ClInclude Include=\"Modules\\Models\\header\\GPT-SoVits.hpp\" />\n    <ClInclude Include=\"Modules\\Models\\header\\ModelBase.hpp\" />\n    <ClInclude Include=\"Modules\\Models\\header\\MoeVSProject.hpp\" />\n    <ClInclude Include=\"Modules\\Models\\header\\Tacotron.hpp\" />\n    <ClInclude Include=\"Modules\\Models\\header\\TTS.hpp\" />\n    <ClInclude Include=\"Modules\\Models\\header\\Vits.hpp\" />\n    <ClInclude Include=\"Modules\\Modules.hpp\" />\n    <ClInclude Include=\"Modules\\StringPreprocess.hpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"Api\\NativeApi.cpp\" />\n    <ClCompile Include=\"dllmain.cpp\" />\n    <ClCompile Include=\"Modules\\InferTools\\G2P\\MoeVSG2P.cpp\" />\n    <ClCompile Include=\"Modules\\InferTools\\inferTools.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\MJson\\MJson.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\MJson\\yyjson.c\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\cheaptrick.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\codec.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\common.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\d4c.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\dio.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\fft.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\harvest.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\matlabfunctions.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\stonemask.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\synthesis.cpp\" />\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\synthesisrealtime.cpp\" />\n    <ClCompile Include=\"Modules\\Logger\\MoeSSLogger.cpp\" />\n    <ClCompile Include=\"Modules\\Models\\EnvManager.cpp\" />\n    <ClCompile Include=\"Modules\\Models\\src\\GPT-SoVits.cpp\" />\n    <ClCompile Include=\"Modules\\Models\\src\\ModelBase.cpp\" />\n    <ClCompile Include=\"Modules\\Models\\src\\MoeVSProject.cpp\" />\n    <ClCompile Include=\"Modules\\Models\\src\\TTS.cpp\" />\n    <ClCompile Include=\"Modules\\Models\\src\\Vits.cpp\" />\n    <ClCompile Include=\"Modules\\Modules.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "libtts/libtts.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"源文件\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"头文件\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"资源文件\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n    <Filter Include=\"头文件\\Core\">\n      <UniqueIdentifier>{78781af4-e3e2-4221-a154-66b35a25e8e1}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"源文件\\Core\">\n      <UniqueIdentifier>{e7aebf36-79a7-4eeb-9160-eb766cd45777}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"源文件\\Lib\">\n      <UniqueIdentifier>{68b44bd5-6d9a-45b6-93fd-159704b20e49}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"头文件\\Lib\">\n      <UniqueIdentifier>{4ae442dd-0ced-40c1-92fb-78b171577cd2}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"头文件\\Api\">\n      <UniqueIdentifier>{95907600-9031-43ba-b3ac-20dd1d9f39fe}</UniqueIdentifier>\n    </Filter>\n    <Filter Include=\"源文件\\Api\">\n      <UniqueIdentifier>{d9fd3421-73d0-40ce-8069-dfb762113415}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"framework.h\">\n      <Filter>头文件</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Modules.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\StringPreprocess.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Models\\EnvManager.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Models\\header\\GPT-SoVits.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Models\\header\\ModelBase.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Models\\header\\MoeVSProject.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Models\\header\\Tacotron.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Models\\header\\TTS.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Models\\header\\Vits.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Logger\\MoeSSLogger.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\InferTools\\inferTools.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\InferTools\\G2P\\MoeVSG2P.hpp\">\n      <Filter>头文件\\Core</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\cheaptrick.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\codec.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\common.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\constantnumbers.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\d4c.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\dio.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\fft.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\harvest.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\macrodefinitions.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\matlabfunctions.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\stonemask.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\synthesis.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\World\\src\\world\\synthesisrealtime.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\MJson\\yyjson.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Modules\\Lib\\MJson\\MJson.h\">\n      <Filter>头文件\\Lib</Filter>\n    </ClInclude>\n    <ClInclude Include=\"Api\\NativeApi.h\">\n      <Filter>头文件\\Api</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"dllmain.cpp\">\n      <Filter>源文件</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Modules.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Models\\EnvManager.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Models\\src\\GPT-SoVits.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Models\\src\\ModelBase.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Models\\src\\MoeVSProject.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Models\\src\\TTS.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Models\\src\\Vits.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Logger\\MoeSSLogger.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\InferTools\\inferTools.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\InferTools\\G2P\\MoeVSG2P.cpp\">\n      <Filter>源文件\\Core</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\cheaptrick.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\codec.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\common.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\d4c.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\dio.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\fft.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\harvest.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\matlabfunctions.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\stonemask.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\synthesis.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\World\\src\\synthesisrealtime.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\MJson\\yyjson.c\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Modules\\Lib\\MJson\\MJson.cpp\">\n      <Filter>源文件\\Lib</Filter>\n    </ClCompile>\n    <ClCompile Include=\"Api\\NativeApi.cpp\">\n      <Filter>源文件\\Api</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "test.json",
    "content": "[\n\t{\n\t\t\"Tokens\": \"私は誰？\",\n\t\t\"Seq\": [\"w\", \"a\", \"t\", \"a\", \"s\", \"h\", \"i\", \"w\", \"a\", \"d\", \"a\", \"r\", \"e\", \"?\"],\n\t\t\"Tones\": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n\t\t\"Durations\": [2, 5, 2, 5, 2, 2, 5, 2, 5, 2, 5, 2, 5],\n\t\t\"Language\": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n\t\t\"SpeakerMix\": [1.000000, 0.000000, 0.000000],\n\t\t\"EmotionPrompt\": [\"sad\", \"happy\"],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.100000,\n\t\t\"DurationPredictorNoiseScale\": 0.333000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 114514,\n\t\t\"SpeakerId\": 2,\n\t\t\"RestTime\": 1.000000,\n        \"Seed\": 1919810,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は鳴瀬しろは\",\n\t\t\"Seq\": [],\n\t\t\"Tones\": [],\n\t\t\"Durations\": [],\n\t\t\"Language\": [],\n\t\t\"SpeakerMix\": [],\n\t\t\"EmotionPrompt\": [],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.000000,\n\t\t\"DurationPredictorNoiseScale\": 0.333000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 1145147,\n\t\t\"Seed\": 1919810,\n\t\t\"SpeakerId\": 0,\n\t\t\"RestTime\": 1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は誰？\",\n\t\t\"Seq\": [],\n\t\t\"Tones\": [],\n\t\t\"Durations\": [],\n\t\t\"Language\": [],\n\t\t\"SpeakerMix\": [0.666000, 0.233000, 0.444000],\n\t\t\"EmotionPrompt\": [\"sad\", \"happy\"],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.100000,\n\t\t\"DurationPredictorNoiseScale\": 0.333000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 1145145,\n\t\t\"Seed\": 19198101,\n\t\t\"SpeakerId\": 1,\n\t\t\"RestTime\": -1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は誰？\",\n\t\t\"Seq\": [\"w\", \"a\", \"t\", \"a\", \"s\", \"h\", \"i\", \"w\", \"a\", \"d\", \"a\", \"r\", \"e\", \"?\"],\n\t\t\"Tones\": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n\t\t\"Durations\": [2, 5, 2, 5, 2, 2, 5, 2, 5, 2, 5, 2, 5],\n\t\t\"Language\": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n\t\t\"SpeakerMix\": [1.000000, 0.000000, 0.000000],\n\t\t\"EmotionPrompt\": [\"sad\", \"happy\"],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.100000,\n\t\t\"DurationPredictorNoiseScale\": 0.333000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 114514,\n\t\t\"Seed\": 1919810,\n\t\t\"SpeakerId\": 2,\n\t\t\"RestTime\": 1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は鷗です、くみの名前は？\",\n\t\t\"Seq\": [],\n\t\t\"Tones\": [],\n\t\t\"Durations\": [],\n\t\t\"Language\": [],\n\t\t\"SpeakerMix\": [],\n\t\t\"EmotionPrompt\": [],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.100000,\n\t\t\"DurationPredictorNoiseScale\": 0.222000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 114514,\n\t\t\"Seed\": 1919810,\n\t\t\"SpeakerId\": 3,\n\t\t\"RestTime\": 1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は鳴瀬しろは\",\n\t\t\"Seq\": [],\n\t\t\"Tones\": [],\n\t\t\"Durations\": [],\n\t\t\"Language\": [],\n\t\t\"SpeakerMix\": [],\n\t\t\"EmotionPrompt\": [],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.000000,\n\t\t\"DurationPredictorNoiseScale\": 0.333000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 1145147,\n\t\t\"Seed\": 1919810,\n\t\t\"SpeakerId\": 0,\n\t\t\"RestTime\": 1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は誰？\",\n\t\t\"Seq\": [],\n\t\t\"Tones\": [],\n\t\t\"Durations\": [],\n\t\t\"Language\": [],\n\t\t\"SpeakerMix\": [0.666000, 0.233000, 0.444000],\n\t\t\"EmotionPrompt\": [\"sad\", \"happy\"],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.100000,\n\t\t\"DurationPredictorNoiseScale\": 0.333000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 1145145,\n\t\t\"Seed\": 19198101,\n\t\t\"SpeakerId\": 1,\n\t\t\"RestTime\": -1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t},\n\t{\n\t\t\"Tokens\": \"私は鷗です、くみの名前は？\",\n\t\t\"Seq\": [],\n\t\t\"Tones\": [],\n\t\t\"Durations\": [],\n\t\t\"Language\": [],\n\t\t\"SpeakerMix\": [],\n\t\t\"EmotionPrompt\": [],\n\t\t\"NoiseScale\": 0.666000,\n\t\t\"LengthScale\": 1.100000,\n\t\t\"DurationPredictorNoiseScale\": 0.222000,\n\t\t\"FactorDpSdp\": 0.600000,\n\t\t\"GateThreshold\": 0.777000,\n\t\t\"MaxDecodeStep\": 114514,\n\t\t\"Seed\": 1919810,\n\t\t\"SpeakerId\": 3,\n\t\t\"RestTime\": 1.000000,\n\t\t\"PlaceHolderSymbol\": \"|\",\n\t\t\"LanguageID\": \"JP\",\n\t\t\"G2PAdditionalInfo\": \"/[Japanese2]\"\n\t}\n]"
  }
]